бык не пашет
создаю устройство всё нормально , проверяю код операции всё норамльно, а само значение - это проблема.
(Delphi)
var
PID:DWORD;
begin
DeviceIoControl(hDriver, IOCTL_KILL_PROCESS, @PID, sizeof(PID), nil, 0, BR, nil);
(Driver)
ULONG ProcessIDForKill;
pisl = IoGetCurrentIrpStackLocation (Irp);
ProcessIDForKill = 0;
BuffSize = pisl->Parameters.DeviceIoControl.OutputBufferLength;
InpBuffSize = pisl->Parameters.DeviceIoControl.InputBufferLength;
pBuff = Irp->AssociatedIrp.SystemBuffer;
Irp->IoStatus.Information = 0;
.........
case IOCTL_KILL_PROCESS :
{
memcpy(&ProcessIDForKill,pBuff,InpBuffSize);
ns = KillProcessFromKernel(ProcessIDForKill);//она не завершает процесс наверное
//потому что значение ID неправильное
Irp->IoStatus.Information = 0;
}
break;
....
return ns;
Обьясни что за функция KillProcessFromKernel.
NTSTATUS KillProcessFromKernel(ULONG ProcessID)
{
OBJECT_ATTRIBUTES OA={sizeof(OBJECT_ATTRIBUTES)};
CLIENT_ID CID = {0,0};
NTSTATUS RES;
HANDLE hProcess = 0;
//memset(&OA,0,sizeof(OA));//??????????
CID.UniqueProcess = (HANDLE)ProcessID;
//CID.UniqueProcess = (HANDLE)1424;
CID.UniqueThread = 0;
RES = NtOpenProcess(&hProcess,PROCESS_ALL_ACCESS,&OA,&CID);
if (RES != STATUS_SUCCESS)
{
// прямо сюда ставил синий экран для проверки
// где возникает ошибка
__asm{xor eax,eax mov eax,[eax]}
return RES;
}
RES = ZwTerminateProcess(hProcess,0);
if (RES != STATUS_SUCCESS)
{
// и сюда тоже ставил до сюда не доходит
__asm{xor eax,eax mov eax,[eax]}
return RES;
}
RES = ZwClose(hProcess);
return RES;
}
//-----