ICopyHook監控資料夾 一

2021-05-21 18:29:27 字數 2952 閱讀 8208

icopyhook監控資料夾(一)

一 stdmethodimp型別的含義

#if defined(_win32) || defined(_mppc_)

// win32 doesn't support __export

#ifdef _68k_

#define stdmethodcalltype       __cdecl

#else

#define stdmethodcalltype       __stdcall

#endif

#define stdmethodvcalltype      __cdecl

#define stdapicalltype          __stdcall

#define stdapivcalltype         __cdecl

#else

#define stdmethodcalltype       __export __stdcall

#define stdmethodvcalltype      __export __cdecl

#define stdapicalltype          __export __stdcall

#define stdapivcalltype         __export __cdecl

#endif

__stdcall

引數傳遞順序: 從右向左  最後乙個引數先傳遞,第乙個引數最後傳遞

棧的維護:被呼叫方清空棧

名字修飾約定:在函式名前面加下劃線,後面加「@」符號和引數的位元組數

從上面的巨集定義可以看出com介面中的呼叫方式採用的是__stdcall,也就是由com來維護棧。

二 那麼com是如何維護棧的呢?

com規範規定com介面都必須從iunknown繼承,iunknown包含三個函式,分別是 queryinte***ce、addref、

release。

在iclassfactory中的兩個虛函式createinstance和lockserver

iclassfactory : public iunknown

;在iunknown中可以看到三個虛函式queryinte***ce,addref,release

virtual hresult stdmethodcalltype queryinte***ce(

/* [in] */ refiid riid,

/* [iid_is][out] */ __rpc__deref_out void __rpc_far *__rpc_far *ppvobject) = 0;

virtual ulong stdmethodcalltype addref( void) = 0;

virtual ulong stdmethodcalltype release( void) = 0;

這兩段**在unknwn.h檔案中

com中對com物件生存週期的控制使用了「引用計數」技術

每乙個com物件都記錄了乙個稱為「引用計數」的數值,這個在程式中就是

long nlocks=0;

nlocks表示為有多少有效指標在引用該com物件。當得到了乙個指向該物件的介面指標時,引用計數值加1,當

用完了該介面指標後,引用計數減1,當引用計數減到0時,com物件就應該把自己從記憶體中清除掉,這樣也就達

到了維護棧的目的。

在addref函式中引用計數值加1,

在release函式中引用計數減1,如果為0,就清空該com物件。

三 icopyhook介紹

icopyhook是乙個用於建立拷貝鉤子處理程式com介面,可以用來監控資料夾的拷貝,移動,重新命名和刪除。如

果我們執行這些操作,那麼shell會在執行這些操作之前,呼叫icopyhook介面的copycallback方法對這些操作

進行驗證。

copycallback

函式原型

uint copycallback(          hwnd hwnd,

uint wfunc,

uint wflags,

lpctstr pszsrcfile,

dword dwsrcattribs,

lpctstr pszdestfile,

dword dwdestattribs

);其中的引數hwnd是乙個視窗控制代碼

引數wfunc指定要被執行的操作,其取值為下表中所列之一:

常量 取值 含義

fo_copy  複製 由pszsrcfile指定的檔案到由pszdestfile指定的位置。

fo_delete  刪除 由pszsrcfile指定的檔案。

fo_move 移動 由pszsrcfile指定的檔案到由pszdestfile指定的位置。

fo_rename  重新命名 由pszsrcfile指定的檔案。

引數wflags指操作的標誌;

引數pszsrcfile指源資料夾

引數dwsrcattribs指源資料夾屬性。

引數pszdestfile指目標資料夾

引數dwdesattribs目標資料夾屬性

函式返回值可以為idyes、idno和idcancel。

copycallback返回乙個uint值指示shell是否應該繼續執行這個操作。返回值idyes表示繼續,而返回值idno和

idcancel則表示終止。

注意:當乙個資料夾物件可以安裝多個拷貝鉤子處理程式時,shell會依次呼叫每個處理程式。只有當每個處理

程式都返回idyes,或者任何乙個拷貝鉤子返回idno或者idcancel,shell才真正執行使用者請求的操作。

拷貝鉤子需要在登錄檔的下面這些地方註冊

註冊資料夾的地方

hkey_classes_root

directory

shellex

copyhookhandlers

your_copyhook

(default) =

C 監控 Windows 資料夾

您是否為無法看到孩子在電腦上儲存的而發愁,您是否為無法監控員工在電腦上儲存的東西而發愁,那麼今天給您推薦的這款產品絕對是您不二的選擇,它是由美國大廠生產,完全符合國際標準的產品,完美支援 windows 98 以上系統,他就是filesystemwatcher牌監控儀。他會偵聽檔案系統更改通知,並在...

Streaming監控指定資料夾檔案內容變化

導入庫 fromoperator importadd frompyspark importsparkcontext,sparkconf frompyspark.streaming importstreamingcontext 配置建立streamingcontext物件 conf sparkconf...

Windows C 監控共享資料夾變化

最近由於專案需求,需要編寫乙個監控本機共享資料夾的變化的模組,經過查詢資料,找到並實現了乙個較為穩定的方式 專案實現是使用win32 c 的,測試平台是win 7 64和win 10 64,xp測試也是好使的。下面是具體實現 首先要獲取並監控系統共享資料夾的路徑,相關登錄檔路徑為 hkey loca...