Организация ввода-вывода. Драйверы WDM. Рощин А.В. - 62 стр.

UptoLike

Составители: 

62
}
Можно использовать общую диспетчерскую функцию для IRP_MJ_READ
и IRP_MJ_WRITE.
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath)
{
DriverObject->MajorFunction[IRP_MJ_READ] = DispatchReadWrite;
DriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchReadWrite;
}
#pragma PAGEDCODE //Следующая функция будет подкачиваемой
NTSTATUS DispatchReadWrite(PDEVICE_OBJECT fdo, PIRP Irp)
{
PAGED_CODE() //Макрос, убеждающийся в том, что вызывающий
//поток запущен на уровне IRQL, который достаточно низок,
//чтобы разрешить подкачку
PDEVICE_EXTENSION pdx =
(PDEVICE_EXTENSION) fdo->DeviceExtension;
IoMarkIrpPending(Irp);
StartPacket(&pdx->dqReadWrite, fdo, Irp, CancelRoutine);
return STATUS_PENDING;
}
#pragma LOCKEDCODE //Следующая функция будет заблокированной
VOID CancelRoutine(PDEVICE_OBJECT fdo, PIRP Irp)
{
PDEVICE_EXTENSION pdx =
(PDEVICE_EXTENSION) fdo->DeviceExtension;
CancelRequest(&pdx->dqReadWrite, Irp);
}
       …
       }
    Можно использовать общую диспетчерскую функцию для IRP_MJ_READ
и IRP_MJ_WRITE.
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath)
{
…
DriverObject->MajorFunction[IRP_MJ_READ] = DispatchReadWrite;
DriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchReadWrite;
      …
      }


#pragma PAGEDCODE    //Следующая функция будет подкачиваемой


NTSTATUS DispatchReadWrite(PDEVICE_OBJECT fdo, PIRP Irp)
{
PAGED_CODE()   //Макрос, убеждающийся в том, что вызывающий
    //поток запущен на уровне IRQL, который достаточно низок,
    //чтобы разрешить подкачку
PDEVICE_EXTENSION pdx =
    (PDEVICE_EXTENSION) fdo->DeviceExtension;
IoMarkIrpPending(Irp);
StartPacket(&pdx->dqReadWrite, fdo, Irp, CancelRoutine);
return STATUS_PENDING;
}


#pragma LOCKEDCODE   //Следующая функция будет заблокированной


VOID CancelRoutine(PDEVICE_OBJECT fdo, PIRP Irp)
{
PDEVICE_EXTENSION pdx =
    (PDEVICE_EXTENSION) fdo->DeviceExtension;
CancelRequest(&pdx->dqReadWrite, Irp);
}

                                   62