Code (Text): PEPROCESS GetProcessByHandle(HANDLE hndl){ // ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ ФУНКЦИИ PVOID NZTP_OBJ1,NZTP_OBJ2 = NULL; ObReferenceObjectByHandle(hndl,0,0,KernelMode,&NZTP_OBJ1,NULL); NZTP_OBJ2 = NZTP_OBJ1; ObDereferenceObject(&NZTP_OBJ1); return NZTP_OBJ2; } Так падёт ?
нет Code (Text): PEPROCESS GetProcessByHandle(HANDLE hndl){ // ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ ФУНКЦИИ PVOID NZTP_OBJ; ObReferenceObjectByHandle(hndl,0,0,KernelMode,&NZTP_OBJ,NULL); return NZTP_OBJ; } ULONG GetProcessName2000( PCHAR theName , HANDLE hndl ) { // ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ ФУНКЦИИ PEPROCESS curproc; char *nameptr; ULONG i; KIRQL oldirql; // ФУНКЦИЯ if( gProcessNameOffset ) { curproc = GetProcessByHandle(hndl); nameptr = (PCHAR) curproc + gProcessNameOffset; // Тут не понятно strncpy( theName, nameptr, NT_PROCNAMELEN ); // пихаем в nameptr theName ЗАЧЕМ ? theName[NT_PROCNAMELEN] = 0; // Нуль строка ObDereferenceObject(&NZTP_OBJ); return TRUE; } return FALSE; } NTSTATUS NewZwTerminateProcess(IN HANDLE ProcessHandle OPTIONAL,IN NTSTATUS ExitStatus) { // ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ ФУНКЦИИ PVOID NZTP_OBJ; NTSTATUS NZTP_STATUS; CHAR PtheName[PROCNAMELEN]; // Функция if (GetProcessName2000( PtheName , ProcessHandle )) { if (0 == memcmp(PtheName, PROCESS_TO_HIDE, sizeof(PROCESS_TO_HIDE))) { NZTP_STATUS = STATUS_ACCESS_DENIED; } else { NZTP_STATUS = OldZwTerminateProcess(ProcessHandle, ExitStatus); } } return NZTP_STATUS; }
да не будет он так пахать, ты пытаешься убить объект которого нету error C2065: 'NZTP_OBJ' : undeclared identifier