ВУЗ:
Составители:
71
Irp->IoStatus.Information = YYY;
IoRequestDpc(pdx->DeviceObject, NULL, pdx);
…
}
VOID DpcForIsr(PKDPC junk1, PDEVICE_OBJECT fdo, PIRP junk2,
PDEVICE_EXTENSION pdx)
{
…
PIRP Irp = GetCurrentIrp(&pdx->dqReadWrite);
StartNextPacket(&pdx->dqReadWrite, fdo);
IoCompleteRequest(Irp, IO_NO_INCREMENT);
}
Сценарий 5: создание асинхронных IRP
В этом сценарии драйвер создает асинхронный IRP, который пересылается
другому драйверу (рисунок 3.12). Условия для применения этого сценария:
− имеется другой драйвер, выполняющий операцию по вашему поручению,
− выполнение ведется либо в контексте произвольного потока (в котором
блокировка нежелательна), либо на уровне DISPATCH_LEVEL (на
котором блокировка невозможна).
Рисунок 3.12 – Создание асинхронных IRP
Ниже приведен примерный код, включаемый в драйвер. Этот код не обязан
находиться в диспетчерской функции IRP, а целевой объект устройства не обязан
быть следующим нижним объектом в стеке.
SOMETYPE SomeFunction(PDEVICE_EXTENSION pdx,
PDEVICE_OBJECT DeviceObject)
Irp->IoStatus.Information = YYY; IoRequestDpc(pdx->DeviceObject, NULL, pdx); … } VOID DpcForIsr(PKDPC junk1, PDEVICE_OBJECT fdo, PIRP junk2, PDEVICE_EXTENSION pdx) { … PIRP Irp = GetCurrentIrp(&pdx->dqReadWrite); StartNextPacket(&pdx->dqReadWrite, fdo); IoCompleteRequest(Irp, IO_NO_INCREMENT); } Сценарий 5: создание асинхронных IRP В этом сценарии драйвер создает асинхронный IRP, который пересылается другому драйверу (рисунок 3.12). Условия для применения этого сценария: − имеется другой драйвер, выполняющий операцию по вашему поручению, − выполнение ведется либо в контексте произвольного потока (в котором блокировка нежелательна), либо на уровне DISPATCH_LEVEL (на котором блокировка невозможна). Рисунок 3.12 – Создание асинхронных IRP Ниже приведен примерный код, включаемый в драйвер. Этот код не обязан находиться в диспетчерской функции IRP, а целевой объект устройства не обязан быть следующим нижним объектом в стеке. SOMETYPE SomeFunction(PDEVICE_EXTENSION pdx, PDEVICE_OBJECT DeviceObject) 71
Страницы
- « первая
- ‹ предыдущая
- …
- 69
- 70
- 71
- 72
- 73
- …
- следующая ›
- последняя »