C語言newHook字段:typedefHMODULE(WINAPI*HOOKAPI)(INLPCSTR);
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供華龍網(wǎng)站建設(shè)、華龍做網(wǎng)站、華龍網(wǎng)站設(shè)計(jì)、華龍網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、華龍企業(yè)網(wǎng)站模板建站服務(wù),十年華龍做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
#defineMYHOOKMETHOD(__fun)HMODULEWINAPI__fun
#defineDECLARE_REGISTER(__0bj,__lawfunc,__newfunc)Inline_Hook__Obj(__lawfunc,__newfunc)。
鉤子(Hook),是Windows消息處理機(jī)制的一個(gè)平臺(tái),應(yīng)用程序可以在上面設(shè)置子程以監(jiān)視指定窗口的某種消息,而且所監(jiān)視的窗口可以是其他進(jìn)程所創(chuàng)建的。當(dāng)消息到達(dá)后,在目標(biāo)窗口處理函數(shù)之前處理它。鉤子機(jī)制允許應(yīng)用程序截獲處理window消息或特定事件。
鉤子實(shí)際上是一個(gè)處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出,在沒有到達(dá)目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時(shí)鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強(qiáng)制結(jié)束消息的傳遞。
Hook技術(shù)又叫做鉤子函數(shù),在系統(tǒng)沒有調(diào)用該函數(shù)之前,鉤子程序就先捕獲該消息,鉤子函數(shù)先得到控制權(quán),這時(shí)鉤子函數(shù)既可以加工處理(改變)該函數(shù)的執(zhí)行行為,還可以強(qiáng)制結(jié)束消息的傳遞。簡(jiǎn)單來說,就是把系統(tǒng)的程序拉出來變成我們自己執(zhí)行代碼片段。
要實(shí)現(xiàn)鉤子函數(shù),有兩個(gè)步驟:
1.利用系統(tǒng)內(nèi)部提供的接口,通過實(shí)現(xiàn)該接口,然后注入進(jìn)系統(tǒng)(特定場(chǎng)景下使用)
2.動(dòng)態(tài)代理(使用所有場(chǎng)景)
?
某個(gè)程序?qū)懭胛募侥硞€(gè)位置時(shí)自動(dòng)監(jiān)測(cè),并且阻止其寫入,并且將要寫入的文件轉(zhuǎn)移到另一個(gè)指定位置
目前有c語言基礎(chǔ),。嵌入式編程基礎(chǔ),有數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)組成原理知識(shí),哪位大神能提供一下思路,謝謝啦
您好,前端框架的回調(diào)函數(shù)與鉤子隊(duì)列的設(shè)計(jì)實(shí)現(xiàn)是一個(gè)比較復(fù)雜的過程,首先,我們需要明確回調(diào)函數(shù)和鉤子隊(duì)列的定義。回調(diào)函數(shù)是一種特殊的函數(shù),它可以在某個(gè)特定的事件發(fā)生時(shí)被調(diào)用。而鉤子隊(duì)列則是一種特殊的數(shù)據(jù)結(jié)構(gòu),它可以用來存儲(chǔ)回調(diào)函數(shù),以便在特定的事件發(fā)生時(shí)被調(diào)用。
其次,我們需要確定回調(diào)函數(shù)與鉤子隊(duì)列的實(shí)現(xiàn)方式。一般來說,前端框架中的回調(diào)函數(shù)與鉤子隊(duì)列的實(shí)現(xiàn)方式有兩種:一種是使用JavaScript的函數(shù)調(diào)用,另一種是使用JavaScript的Promise對(duì)象。
使用JavaScript的函數(shù)調(diào)用來實(shí)現(xiàn)回調(diào)函數(shù)與鉤子隊(duì)列,可以將回調(diào)函數(shù)作為參數(shù)傳遞給某個(gè)函數(shù),從而在特定的事件發(fā)生時(shí)調(diào)用回調(diào)函數(shù)。而使用JavaScript的Promise對(duì)象來實(shí)現(xiàn)回調(diào)函數(shù)與鉤子隊(duì)列,可以將回調(diào)函數(shù)存儲(chǔ)在Promise對(duì)象的then方法中,從而在特定的事件發(fā)生時(shí)調(diào)用回調(diào)函數(shù)。
最后,我們需要確定回調(diào)函數(shù)與鉤子隊(duì)列的應(yīng)用場(chǎng)景。一般來說,回調(diào)函數(shù)與鉤子隊(duì)列可以在前端框架中的多個(gè)場(chǎng)景中使用,比如在事件處理中,可以使用回調(diào)函數(shù)來處理用戶的輸入;在數(shù)據(jù)處理中,可以使用鉤子隊(duì)列來處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu);在網(wǎng)絡(luò)請(qǐng)求中,可以使用回調(diào)函數(shù)來處理網(wǎng)絡(luò)請(qǐng)求的響應(yīng);在模塊加載中,可以使用鉤子隊(duì)列來處理模塊的加載過程等
pytest為任何給定的鉤子(hook)規(guī)范調(diào)用已注冊(cè)插件的鉤子(hook)方法。讓我們看一下鉤子(hook)的典型鉤子(hook)方法,pytest在收集完所有測(cè)試項(xiàng)目后調(diào)用。 pytest_collection_modifyitems(session, config,items)
當(dāng)我們 pytest_collection_modifyitems 在插件中實(shí)現(xiàn)一個(gè)方法時(shí),pytest將在注冊(cè)期間驗(yàn)證你是否使用了與規(guī)范匹配的參數(shù)名稱,如果沒有則拯救。
讓我們看一下可能的實(shí)現(xiàn):
這里, pytest 將傳入 config (pytest配置對(duì)象)和 items (收集的測(cè)試項(xiàng)列表),但不會(huì)傳入 session 參數(shù),因?yàn)槲覀儧]有在方法簽名中列出它。這種動(dòng)態(tài)的“修剪”參數(shù)允許 pytest “未來兼容”:我們可以引入新的鉤子(hook)命名參數(shù)而不破壞現(xiàn)有鉤子(hook)實(shí)現(xiàn)的簽名。這是pytest插件的一般長(zhǎng)期兼容性的原因之一。
請(qǐng)注意,除了 pytest_runtest_* 不允許引發(fā)異常之外的鉤子(hook)方法。這樣做會(huì)打破pytest運(yùn)行。
大多數(shù)對(duì) pytest 鉤子(hook)的調(diào)用都會(huì)產(chǎn)生一個(gè) 結(jié)果列表, 其中包含被調(diào)用鉤子(hook)方法的所有非None結(jié)果。
一些鉤子(hook)規(guī)范使用該 firstresult=True 選項(xiàng),以便鉤子(hook)調(diào)用僅執(zhí)行,直到N個(gè)注冊(cè)方法中的第一個(gè)返回非None結(jié)果,然后將其作為整個(gè)鉤子(hook)調(diào)用的結(jié)果。在這種情況下,不會(huì)調(diào)用其余的鉤子(hook)方法。
版本2.7中的新功能。
pytest插件可以實(shí)現(xiàn)鉤子(hook)包裝器,它包裝其他鉤子(hook)實(shí)現(xiàn)的執(zhí)行。鉤子(hook)包裝器是一個(gè)生成器方法,它只產(chǎn)生一次。當(dāng)pytest調(diào)用鉤子(hook)時(shí),它首先執(zhí)行鉤子(hook)包裝器并傳遞與常規(guī)鉤子(hook)相同的參數(shù)。
在鉤子(hook)包裝器的屈服點(diǎn),pytest將執(zhí)行下一個(gè)鉤子(hook)實(shí)現(xiàn),并以 Result 封裝結(jié)果或異常信息的實(shí)例的形式將其結(jié)果返回到屈服點(diǎn)。因此,屈服點(diǎn)本身通常不會(huì)引發(fā)異常(除非存在錯(cuò)誤)。
以下是鉤子(hook)包裝器的示例定義:
請(qǐng)注意,鉤子(hook)包裝器本身不返回結(jié)果,它們只是圍繞實(shí)際的鉤子(hook)實(shí)現(xiàn)執(zhí)行跟蹤或其他副作用。如果底層鉤子(hook)的結(jié)果是一個(gè)可變對(duì)象,它們可能會(huì)修改該結(jié)果,但最好避免它。
有關(guān)更多信息,請(qǐng)參閱 插件文檔 。
對(duì)于任何給定的鉤子(hook)規(guī)范,可能存在多個(gè)實(shí)現(xiàn),因此我們通常將 hook 執(zhí)行視為 1:N 方法調(diào)用,其中 N 是已注冊(cè)方法的數(shù)量。有一些方法可以影響鉤子(hook)實(shí)現(xiàn)是在其他人之前還是之后,即在 N -sized方法列表中的位置:
這是執(zhí)行的順序:
這是可能的使用 tryfirst ,并 trylast 結(jié)合還 hookwrapper=True 處于這種情況下,它會(huì)影響彼此之間hookwrappers的排序。
插件和 conftest.py 文件可以聲明新鉤子(hook),然后可以由其他插件實(shí)現(xiàn),以便改變行為或與新插件交互:
dt pytest_addhooks (*pluginmanager *) [來源]
在插件注冊(cè)時(shí)調(diào)用,允許通過調(diào)用添加新的掛鉤 。 pluginmanager.add_hookspecs(module_or_class, prefix)
參數(shù): | pluginmanager ( _pytest.config.PytestPluginManager ) - pytest插件管理器
鉤子(hook)通常被聲明為do-nothing方法,它們只包含描述何時(shí)調(diào)用鉤子(hook)以及期望返回值的文檔。
有關(guān)示例,請(qǐng)參閱 xdist中 的 newhooks.py 。
由于標(biāo)準(zhǔn)的 驗(yàn)證機(jī)制, 如上所述使用插件中的新鉤子(hook)可能有點(diǎn)棘手:如果你依賴未安裝的插件,驗(yàn)證將失敗并且錯(cuò)誤消息對(duì)你的用戶沒有多大意義。
一種方法是將鉤子(hook)實(shí)現(xiàn)推遲到新的插件,而不是直接在插件模塊中聲明鉤子(hook)方法,例如:
當(dāng)前標(biāo)題:zblog的鉤子實(shí)現(xiàn) zblog調(diào)用標(biāo)簽大全
文章網(wǎng)址:http://muchs.cn/article14/dohhpde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站設(shè)計(jì)公司、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、App設(shè)計(jì)、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)