Некорректная инициализация ObjectAttributes: см пример
/*
ибо:
#define InitializeObjectAttributes( p, n, a, r, s ) { \
(p)->Length = sizeof( OBJECT_ATTRIBUTES ); \
(p)->RootDirectory = r; \
(p)->Attributes = a; \
(p)->ObjectName = n; \
(p)->SecurityDescriptor = s; \
(p)->SecurityQualityOfService = NULL; \
*/
BOOLEAN KillProcess(ULONG PID)
{
OBJECT_ATTRIBUTES objectAttributes;
CLIENT_ID clientID;
HANDLE hProcess=NULL;
NTSTATUS status;
InitializeObjectAttributes( &objectAttributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL );
clientID.UniqueProcess = (HANDLE)PID;
clientID.UniqueThread = NULL;
status = ZwOpenProcess( &hProcess,
PROCESS_TERMINATE,
&objectAttributes, &clientID );
if (!NT_SUCCESS(status))
{
return FALSE;
}
status = ZwTerminateProcess(hProcess, 0);
ZwClose(hProcess);
return TRUE;
}
J>Здравствуйте.
J>У меня возникла проблема с данной функцией, вроде как и вызываю правильно и всёравно БСОД. Помогите пожалуйста.
J>
J>HANDLE hProcessHandle;
J>ACCESS_MASK DesiredAccess = PROCESS_TERMINATE;
J>OBJECT_ATTRIBUTES ObjectAttributes;
J>CLIENT_ID ClientId;
J>ObjectAttributes.Length = 0x18;
J>ObjectAttributes.RootDirectory = 0;
J>ObjectAttributes.ObjectName = 0;
J>ObjectAttributes.Attributes = 0;
J>ObjectAttributes.SecurityDescriptor = 0;
J>ObjectAttributes.SecurityQualityOfService = 0;
J>ClientId.UniqueProcess = 2345;/*тут я ставлю PID существующего процесса*/
J>ClientId.UniqueThread = 0;
J>ZwOpenProcess(&hProcessHandle, DesiredAccess, &ObjectAttributes, &ClientId);
J>
J>пробовал любые варианты, всёравно БСОД(((
J>отладчиком пользоваться не могу т.к. на двухядернике айс чтото не очень хочет работать...
J>Заранее Спасибо.