
28.09.2007, 15:30
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
подскажите что я делаю не так. почему BSOD?
При установке ProtectedPid - ставится всё нормально и пашет отлично.
А при чтении его - BSOD. читаю через
PID,TrId:dword;
DeviceIoControl(hDriver, $23456, nil, 0, @PID, 4, TrId, nil);
Вот код обработчика
Код:
HANDLE ProtectedPid;
NTSTATUS DriverDispatcher(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
NTSTATUS status;
PIO_STACK_LOCATION irpStack;
irpStack = IoGetCurrentIrpStackLocation (Irp);
if (irpStack->MajorFunction == IRP_MJ_DEVICE_CONTROL)
{
switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
{
case 0x12345:
if (irpStack->Parameters.DeviceIoControl.InputBufferLength == sizeof(HANDLE))
{
ProtectedPid=*(HANDLE *)Irp->AssociatedIrp.SystemBuffer;
DPRINT("PID= %d",ProtectedPid);
}
break;
case 0x23456:
if (irpStack->Parameters.Read.Length < 4)
{
DPRINT("LENGTH < 4");
Irp->IoStatus.Status = status = STATUS_BUFFER_TOO_SMALL;
Irp->IoStatus.Information = 0;
IoCompleteRequest (Irp, IO_NO_INCREMENT);
return status;
}
else
{
DPRINT("LENGTH OK");
Irp->IoStatus.Information = 4;
// чтото тут я не мойму как реализовать.
*(HANDLE *)Irp->AssociatedIrp.SystemBuffer=ProtectedPid;
Irp->IoStatus.Status = status = STATUS_SUCCESS;
IoCompleteRequest (Irp, IO_NO_INCREMENT);
return status;
}
break;
default: status = STATUS_INVALID_DEVICE_REQUEST;
}
}
Irp->IoStatus.Status = status;
IoCompleteRequest (Irp, IO_NO_INCREMENT);
return status;
}
|
|
|