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

UptoLike

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

76
}
return status;
}
NTSTATUS ForwardAndWaitCompletionRoutine(PDEVICE_JBJECT fdo,
PIRP Irp,PKEVENT pev)
{
if (Irp->PendingReturned)
KeSetEvent(pev,IO_NO_INCREMENT, FALSE);
return STATUS_MORE_PROCESSING_REQUIRED;
}
Сценарий 8: синхронная обработка асинхронных IRP
В этом сценарии драйвер создает асинхронный IRP, пересылает его другому
драйверу и ожидает завершения IRP (рисунок 3.15). Условия для применения
этого сценария:
имеется другой драйвер, выполняющий операцию по вашему поручению,
вы должны дождаться завершения операции для продолжения работы,
выполнение осуществляется на уровне DPC_LEVEL в контексте
фиксированного потока.
Типичный пример ситуации, в которой целесообразно использовать этот
сценарийвыполнение синхронной операции после захвата быстрого мьютекса.
Рисунок 3.15 – Синхронная обработка асинхронных IRP
В приведенном коде сочетаются уже встречавшиеся ранее элементы.
SOMETYPE SomeFunction(PDEVICE_EXTENSION pdx,
PDEVICE_OBJECT DeviceObject)
  }
 return status;
 }
NTSTATUS ForwardAndWaitCompletionRoutine(PDEVICE_JBJECT fdo,
 PIRP Irp,PKEVENT pev)
 {
 if (Irp->PendingReturned)
  KeSetEvent(pev,IO_NO_INCREMENT, FALSE);
 return STATUS_MORE_PROCESSING_REQUIRED;
 }
      Сценарий 8: синхронная обработка асинхронных IRP
      В этом сценарии драйвер создает асинхронный IRP, пересылает его другому
драйверу и ожидает завершения IRP (рисунок 3.15). Условия для применения
этого сценария:
      − имеется другой драйвер, выполняющий операцию по вашему поручению,
      − вы должны дождаться завершения операции для продолжения работы,
      − выполнение осуществляется на уровне DPC_LEVEL в контексте
        фиксированного потока.
      Типичный пример ситуации, в которой целесообразно использовать этот
сценарий – выполнение синхронной операции после захвата быстрого мьютекса.




            Рисунок 3.15 – Синхронная обработка асинхронных IRP
      В приведенном коде сочетаются уже встречавшиеся ранее элементы.
SOMETYPE SomeFunction(PDEVICE_EXTENSION pdx,
 PDEVICE_OBJECT DeviceObject)

                                     76