00 NTSTATUS NewNtTerminateProcess(IN HANDLE ProcessHandle, IN NTSTATUS ExistStatus) 01 { 02 NTSTATUS status=STATUS_SUCCESS; 03 04 if (ProcessHandle && (ProcessHandle!=NtCurrentProcess) && KeGetPreviousMode()!=KernelMode) 05 { 06 PROCESS_BASIC_INFORMATION info; 07 status=ZwQueryInformationProcess(ProcessHandle,ProcessBasicInformation,&info,sizeof(info),NULL); 08 if (NT_SUCCESS(status)) 09 { 10 ULONG pid=info.UniqueProcessId; 11 if (pid==protected_process_id) 12 status=STATUS_ACCESS_DENIED; 13 } 14 } 15 16 if (NT_SUCCESS(status)) 17 status=OldNtTerminateProcess(ProcessHandle,ExitStatus); 18 19 return status; 20 }