創建/結束進程回調 PsSetCreateProcessNotifyRoutine


PsSetCreateProcessNotifyRoutine

PsSetCreateProcessNotifyRoutine添加或者移除一個驅動支持的回調例程(也可以成為函數)。

當一個進程被創建或者刪除時,一系列的例程將會被調用。PS:相當於把例程加入到一個鏈表中,當進程被創建或者刪除時,所有的例程都會被調用(應該是這個意思)

NTSTATUS
PsSetCreateProcessNotifyRoutine(
IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, 例程函數的入口地址,
IN BOOLEAN Remove  FALSE時,添加例程到鏈表, TRUE,從鏈表中刪除該例程
);

返回值:

STATUS_SUCCESS 例程被注冊到系統中
STATUS_INVALID_PARAMETER 例程已被注冊過,所以此例程是多余的,或者已經達到了注冊個數的上限。

評注:
最高級的驅動可以調用 PsSetCreateProcessNotifyRoutine 去設置他們的進程創建通知例程,聲明如下:

VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE) (
IN HANDLE ParentId,
IN HANDLE ProcessId,
IN BOOLEAN Create
);

ParentId和ProcessId 用於確定進程,Create參數表明進程是創建還是刪除。

一個IFS或最高級的system-profiling驅動可能注冊一個process-creation回調去追蹤全系統的創建和刪除進程而不是驅動的內部的,
對於Vista和其后的版本,系統可以創建高達64個系統創建回調。

一個驅動在卸載前,必須移除所有它注冊過的例程,你可以通過調用PsSetCreateProcessNotify (Remove = TRUE)去移除例程。
當Create為True時,例程在新創建的進程(ProcessId句柄指定)的初始化線程被創建后被調用。
當Create為False時,例程在進程的最后一個線程被關閉,進程的地址空間將被釋放時調用。

進程的進程通知例程運行在IRQL = PASSIVE_LEVEL,當一個進程被創建,例程運行在新創建的進程的線程上下文中。
當進程被刪除時,例程運行在進程的最后一個線程(將要退出進程)中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM