用C 偵測Win32 進程建立和終止
使用PsSetCreateProcessNotifyRoutine() API 實作核心模式驅動程式是接收訊息的常用方法有關Win32進程創建或終止的通知。但是,是否有另一種方法可以利用 C 中的 Win32 API 函數?
Win32 API 限制
在無限循環中查詢活動進程清單並不是理想的選擇由於其高資源消耗的解決方案。不幸的是,沒有原生 Win32 API 函數可以提供與核心模式驅動程式方法相同的完整功能。
Windows Management Instrumentation (WMI)
WMI 提供了監控過程事件的潛在解決方案。它可以根據特定標準(例如進程名稱)追蹤進程的建立和終止。然而,與核心模式驅動程式相比,WMI 可能涉及更高的開銷。
使用WaitOrTimerCallback 的替代方法
如果追蹤進程終止是主要目標,則需要更輕量級和更有效率的方法方法可用:
VOID CALLBACK WaitOrTimerCallback( _In_ PVOID lpParameter, _In_ BOOLEAN TimerOrWaitFired ) { MessageBox(0, L"The process has exited.", L"INFO", MB_OK); return; } DWORD dwProcessID = 1234; HANDLE hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID); HANDLE hNewHandle; RegisterWaitForSingleObject(&hNewHandle, hProcHandle, WaitOrTimerCallback, NULL, INFINITE, WT_EXECUTEONLYONCE);
此程式碼使用以下方法註冊回調函數RegisterWaitForSingleObject()。一旦hProcHandle標識的程序終止,註冊的回調將被執行,呼叫WaitOrTimerCallback函數並顯示訊息框通知。
以上是可以使用 Win32 API 在使用者模式下監視進程建立和終止嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!