Привет всем! Известно, что ExitProcess дважды вызывает ZwTerminateProcess. Первый раз с хендлом, равным 0, второй раз - с хендлом, равным 0xFFFFFFFF. При перехвате ZwTerminateProcess обнаружил такую вещь: при первом вызове ZwTerminateProcess с хендлом 0 все нормально, функция запускается и завершается. А при втором вызове с 0xFFFFFFFF - функция не завершается. Перехват делаю так: Код (Text): NTSTATUS NewZwTerminateProcess(HANDLE ProcessHandle, NTSTATUS ExitStatus) { NTSTATUS status; DbgPrint("Begin NewZwTerminateProcess(%x), %x", ProcessHandle, ExitStatus); status = OldZwTerminateProcess(ProcessHandle, ExitStatus); DbgPrint("End NewZwTerminateProcess(%x), %x", ProcessHandle, ExitStatus); return status; } Запускаю, например, notepad. Затем закрываю его окно и при этом смотрю в окно DbgView. Появляются строки: Begin NewZwTerminateProcess(0), 0 End NewZwTerminateProcess(0), 0 Begin NewZwTerminateProcess(FFFFFFFF), 0 Причем это для любой программы. Здесь видно, что OldZwTerminateProcess(0xFFFFFFFF, 0) не завершается, т.к. выполнение не доходит до строки со вторым DbgPrint. Странно. Или я чего-то не знаю? Кто-нибудь знает, в чем дело?
Ты интересный, а зачем после "конца" программы, который характеризуется вызовом ExitProcess, управление опять должно возвращаться твоей программе? Естественно процесс уничтожается не возвращаясь из ZwTerminateProcess. Quantum опередил
Господа, я забыл сказать, что перехват делаю в драйвере. Процесс, естественно, завершается. Есть еще какие-нибудь соображения?