Windows程式設計 監視DLL裝載 解除安裝

2021-09-22 05:02:43 字數 3244 閱讀 2420

windows 驅動開發庫裡面提供了函式 ldrregisterdllnotification , ldrunregisterdllnotification , 可以讓你監視程序裝載/解除安裝dll 的事件。 當你想在某個dll被載入的時候hook它的函式; 或者當你想在某個dll推出之前做一些儲存清理工作; 或者當你想阻止某個dll 被載入(比如外掛程式) .... 這個機制正可以派上用場 。

以下是**示例如何使用 ldrregisterdllnotification , ldrunregisterdllnotification 監聽dll裝載/解除安裝。

view plaincopy to clipboardprint?

#include // ddk   

typedef const unicode_string* pcunicode_string;   

typedef struct _ldr_dll_loaded_notification_data ldr_dll_loaded_notification_data, *pldr_dll_loaded_notification_data;   

typedef struct _ldr_dll_unloaded_notification_data ldr_dll_unloaded_notification_data, *pldr_dll_unloaded_notification_data;   

typedef union _ldr_dll_notification_data ldr_dll_notification_data, *pldr_dll_notification_data;   

typedef const pldr_dll_notification_data pcldr_dll_notification_data;   

typedef void (ntapi *pldr_dll_notification_function)(ulong notificationreason, pcldr_dll_notification_data notificationdata, pvoid context);   

typedef ntstatus (ntapi *pfnldrregisterdllnotification)(ulong flags, pldr_dll_notification_function notificationfunction, void* context, void **cookie);   

typedef ntstatus (ntapi *pfnldrunregisterdllnotification)(void *cookie);   

#define ldr_dll_notification_reason_loaded 1    

#define ldr_dll_notification_reason_unloaded 2   

void ntapi myldrdllnotification(   

ulong notificationreason,   

pcldr_dll_notification_data notificationdata,   

pvoid context   

)   

}   

int _tmain(int argc, _tchar* ar**)   

return 0;   

}  #include // ddk

typedef const unicode_string* pcunicode_string;

typedef struct _ldr_dll_loaded_notification_data ldr_dll_loaded_notification_data, *pldr_dll_loaded_notification_data;

typedef struct _ldr_dll_unloaded_notification_data ldr_dll_unloaded_notification_data, *pldr_dll_unloaded_notification_data;

typedef union _ldr_dll_notification_data ldr_dll_notification_data, *pldr_dll_notification_data;

typedef const pldr_dll_notification_data pcldr_dll_notification_data;

typedef void (ntapi *pldr_dll_notification_function)(ulong notificationreason, pcldr_dll_notification_data notificationdata, pvoid context);

typedef ntstatus (ntapi *pfnldrregisterdllnotification)(ulong flags, pldr_dll_notification_function notificationfunction, void* context, void **cookie);

typedef ntstatus (ntapi *pfnldrunregisterdllnotification)(void *cookie);

#define ldr_dll_notification_reason_loaded 1 

#define ldr_dll_notification_reason_unloaded 2

void ntapi myldrdllnotification(

ulong notificationreason,

pcldr_dll_notification_data notificationdata,

pvoid context )

} int _tmain(int argc, _tchar* ar**)

return 0; }

執行程式, 輸出如下。可以證實以上**監聽了 mshtml.dll 的裝載和解除安裝。 而且系統自動裝載的其他dll也被監視到。

dll loaded: c:\windows\system32\mshtml.dll

dll loaded: c:\windows\system32\msls31.dll

dll loaded: c:\windows\system32\version.dll

dll unloaded: c:\windows\system32\mshtml.dll

dll unloaded: c:\windows\system32\version.dll

dll unloaded: c:\windows\system32\msls31.dll

Windows程式設計 監視DLL裝載 解除安裝

windows 驅動開發庫裡面提供了乙個函式 ldrregisterdllnotification 可以讓你監視程序裝載 解除安裝dll 的事件。當你想在某個dll被載入的時候hook它的函式 或者當你想在某個dll推出之前做一些儲存清理工作 或者當你想阻止某個dll 被載入 比如外掛程式 這個機制...

Windows程式設計 監視DLL裝載 解除安裝

windows 驅動開發庫裡面提供了函式 ldrregisterdllnotification ldrunregisterdllnotification 可以讓你監視程序裝載 解除安裝dll 的事件。當你想在某個dll被載入的時候hook它的函式 或者當你想在某個dll推出之前做一些儲存清理工作 或...

windows效能監視功能

這篇主要說說windows系統自帶的效能監視功能 performancecouonter.開啟管理工具 效能,我們可以立即看到伺服器的cpu,程序執行時間,磁碟容量等效能引數走勢圖。然而不僅僅是這幾項,我們可以通過新增技術器來檢視其他的效能指標 如果你說,這麼看太麻煩了,ok,我們通過c 將這些值取...