Mengesan Penciptaan dan Penamatan Proses Win32 dalam C
Melaksanakan pemacu mod kernel menggunakan API PsSetCreateProcessNotifyRoutine() ialah kaedah biasa untuk menerima pemberitahuan tentang penciptaan atau penamatan proses Win32. Walau bagaimanapun, adakah terdapat pendekatan alternatif yang menggunakan fungsi API Win32 dalam C ?
Penghadan API Win32
Menyoal senarai proses aktif dalam gelung tak terhingga bukanlah ideal penyelesaian kerana penggunaan sumber yang tinggi. Malangnya, tiada fungsi API Win32 asli yang menyediakan kefungsian penuh yang sama seperti pendekatan pemacu mod kernel.
Instrumentasi Pengurusan Windows (WMI)
WMI menawarkan penyelesaian yang berpotensi untuk memantau peristiwa proses. Ia boleh menjejaki penciptaan dan penamatan proses berdasarkan kriteria tertentu, seperti nama proses. Walau bagaimanapun, WMI mungkin melibatkan overhed yang lebih tinggi berbanding pemacu mod kernel.
Pendekatan Alternatif Menggunakan WaitOrTimerCallback
Jika penamatan proses penjejakan adalah matlamat utama, lebih ringan dan cekap pendekatan tersedia:
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);
Kod ini mendaftarkan fungsi panggil balik menggunakan RegisterWaitForSingleObject(). Sebaik sahaja proses yang dikenal pasti oleh hProcHandle ditamatkan, panggilan balik berdaftar akan dilaksanakan, memanggil fungsi WaitOrTimerCallback dan memaparkan pemberitahuan kotak mesej.
Atas ialah kandungan terperinci Bolehkah Proses Penciptaan dan Penamatan Dipantau dalam Mod Pengguna dengan Win32 API?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!