IoStartNextPacket 함수(ntifs.h)
IoStartNextPacket 루틴은 지정된 디바이스 개체의 연결된 디바이스 큐에서 다음 IRP(있는 경우)를 큐에서 제거하고 드라이버의 StartIo 루틴을 호출합니다.
구문
void IoStartNextPacket(
[in] PDEVICE_OBJECT DeviceObject,
[in] BOOLEAN Cancelable
);
매개 변수
[in] DeviceObject
IRP를 큐에서 해제할 디바이스 개체에 대한 포인터입니다.
[in] Cancelable
디바이스 큐의 IRP를 취소할 수 있는지 여부를 지정합니다.
반환 값
없음
설명
대상 DeviceObject에 대한 디바이스 큐에 현재 IRP가 없는 경우 이 루틴은 단순히 호출자에게 제어를 반환합니다.
드라이버가 IoStartPacket을 호출할 때 취소 루틴에 대한 포인터를 전달한 경우 Cancelable 매개 변수에서 TRUE를 전달해야 합니다. Cancelable이 TRUE이면 I/O 관리자는 취소 스핀 잠금을 사용하여 디바이스 큐와 현재 IRP를 보호합니다.
StartIo 루틴이 없는 드라이버는 IoStartNextPacket을 호출할 수 없습니다.
StartIo 루틴에서 IoStartNextPacket을 호출하는 드라이버는 재귀 문제를 알고 있어야 합니다. 드라이버가 StartIo 루틴에서 많은 수의 요청에 대해 연속해서 IoStartNextPacket을 호출할 수 있는 경우(예: 디바이스 오류가 발생하고 드라이버가 디바이스 큐를 지우는 경우) IoSetStartIoAttributes 루틴을 사용하여 디바이스에 대한 DeferredStartIo 특성을 설정해야 합니다. 이 특성은 이전 StartIo 호출이 반환될 때까지 다음 패킷이 발급되지 않도록 합니다.
IoStartNextPacket의 호출자는 IRQL = DISPATCH_LEVEL 실행 중이어야 합니다. 일반적으로 이 루틴은 디바이스 드라이버의 DpcForIsr 또는 CustomDpc 루틴에서 호출되며 둘 다 IRQL = DISPATCH_LEVEL 실행됩니다.
요구 사항
| 지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
| 대상 플랫폼 | 유니버설 |
| 헤더 | ntifs.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
| 라이브러리 | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | DISPATCH_LEVEL(주의 섹션 참조) |
| DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport), IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm), SpinLockSafe(storport), SpinLockSafe(storport), SpinLockSafe(wdm), StartIoRecursion(wdm) |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기