ВУЗ:
Составители:
70
В приведенном ниже коде части, относящиеся непосредственно к обработке
IRP выделены жирным шрифтом.
typedef struct _DEVICE_EXTENSION {
DEVQUEUE dqReadWrite;
} DEVICE_EXTENSION, *DEVICE_EXTENSION;
NTSTATUS AddDevice(PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT pdo)
{
…
InitializeQueue(&pdx->dqReadWrite, StartIo);
IoInitializeDpcRequest(fdo, (PIO_DPC_ROUTINE) DpcForIsr);
…
}
NTSTATUS DispatchReadWrite(PDEVICE_OBJECT fdo,PIRP Irp)
{
PDEVICE_EXTENSION pdx =
(PDEVICE_EXTENSION) fdo->DeviceExtension;
IoMarkIrpPending(Irp);
StartPacket(&pdx->dqReadWrite, fdo, Irp, CancelRoutine);
return STATUS_PENDING;
}
VOID CancelRoutine(PDEVICE_OBJECT fdo,PIRP Irp)
{
PDEVICE_EXTENSION pdx =
(PDEVICE_EXTENSION) fdo->DeviceExtension;
CancelRequest(&pdx->dqReadWrite, Irp);
}
VOID StartIo(PDEVICE_OBJECT fdo, PIRP Irp)
{
…
}
BOOLEAN OnInterrupt(PKITERRUPT junk, PDEVICE_EXTENSION pdx);
{
…
PIRP Irp = GetCurrentIrp(&pdx->dqReadWrite);
Irp->IoStatus.Status = STATUS_XXX;
В приведенном ниже коде части, относящиеся непосредственно к обработке IRP выделены жирным шрифтом. typedef struct _DEVICE_EXTENSION { DEVQUEUE dqReadWrite; } DEVICE_EXTENSION, *DEVICE_EXTENSION; NTSTATUS AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo) { … InitializeQueue(&pdx->dqReadWrite, StartIo); IoInitializeDpcRequest(fdo, (PIO_DPC_ROUTINE) DpcForIsr); … } NTSTATUS DispatchReadWrite(PDEVICE_OBJECT fdo,PIRP Irp) { PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; IoMarkIrpPending(Irp); StartPacket(&pdx->dqReadWrite, fdo, Irp, CancelRoutine); return STATUS_PENDING; } VOID CancelRoutine(PDEVICE_OBJECT fdo,PIRP Irp) { PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; CancelRequest(&pdx->dqReadWrite, Irp); } VOID StartIo(PDEVICE_OBJECT fdo, PIRP Irp) { … } BOOLEAN OnInterrupt(PKITERRUPT junk, PDEVICE_EXTENSION pdx); { … PIRP Irp = GetCurrentIrp(&pdx->dqReadWrite); Irp->IoStatus.Status = STATUS_XXX; 70
Страницы
- « первая
- ‹ предыдущая
- …
- 68
- 69
- 70
- 71
- 72
- …
- следующая ›
- последняя »