IoMarkIrpPending 함수(wdm.h)
IoMarkIrpPending 루틴은 지정된 IRP를 표시하며, 이는 다른 드라이버 루틴에서 추가 처리가 필요하기 때문에 드라이버의 디스패치 루틴이 이후에 STATUS_PENDING 반환됨을 나타냅니다.
구문
void IoMarkIrpPending(
[in, out] PIRP Irp
);
매개 변수
[in, out] Irp
보류 중으로 표시할 IRP에 대한 포인터입니다.
반환 값
없음
설명
드라이버의 디스패치 루틴이 IRP를 완료하거나( IoCompleteRequest를 호출하여) IRP를 하위 드라이버에 전달하지 않는 한 IRP를 사용하여 IoMarkIrpPending을 호출해야 합니다. 그렇지 않으면 I/O 관리자는 디스패치 루틴이 컨트롤을 반환하는 즉시 IRP를 완료하려고 시도합니다.
IoMarkIrpPending을 호출한 후 IoMarkIrpPending이라는 디스패치 루틴이 반환되기 전에 일부 루틴이 IRP를 완료하더라도(IoCompleteRequest를 호출하여) 디스패치 루틴은 STATUS_PENDING 반환해야 합니다.
드라이버가 들어오는 IRP를 큐에 대기하는 경우 각 IRP를 큐에 넣기 전에 IoMarkIrpPending 을 호출해야 합니다. 그렇지 않으면 IRP가 큐에서 해제되고, 다른 드라이버 루틴에 의해 완료되고, IoMarkIrpPending 호출이 발생하기 전에 시스템에서 해제되어 충돌이 발생할 수 있습니다.
드라이버가 IRP에 대한 IoCompletion 루틴을 설정한 다음 IRP를 하위 드라이버로 전달하는 경우 IoCompletion 루틴은 IRP >PendingReturned 플래그를 확인해야 합니다. 플래그가 설정된 경우 IoCompletion 루틴은 IRP를 사용하여 IoMarkIrpPending을 호출해야 합니다. 그러나 IoCompletion 루틴은 STATUS_PENDING 반환하지 않습니다. 자세한 내용은 IoCompletion 루틴 구현을 참조하세요.)
드라이버가 IoSkipCurrentIrpStackLocation을 호출하는 경우 해당 드라이버와 관련하여 의도치 않게 낮은 드라이버 또는 시스템의 동작에 영향을 줄 수 있는 방식으로 IO_STACK_LOCATION 구조를 수정하지 않도록 주의해야 합니다. 특히 드라이버는 IO_STACK_LOCATION 구조체의 매개 변수 공용 구조체를 수정해서는 안 되며 IoMarkIrpPending을 호출해서는 안 됩니다.
요구 사항
| 지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
| 대상 플랫폼 | 데스크톱 |
| 헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
| IRQL | 모든 수준 |
| DDI 규정 준수 규칙 | CompleteRequestStatusCheck(wdm), CompletionEventChecking(wdm), IrpCancelField(wdm), LowerDriverReturn(wdm), MarkDevicePower(wdm), MarkingInterlockedQueuedIrps(wdm), MarkQueuedIrps(wdm), MarkIrpPending(wdm), MarkIrpPending2(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), PendedCompletedRequest3(wdm) |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기