IoStartPacket 함수(ntifs.h)

IoStartPacket 루틴은 지정된 IRP를 사용하여 드라이버의 StartIo 루틴을 호출하거나 디바이스가 이미 사용 중인 경우 지정된 디바이스 개체와 연결된 디바이스 큐에 IRP를 삽입합니다.

구문

void IoStartPacket(
  [in]           PDEVICE_OBJECT DeviceObject,
  [in]           PIRP           Irp,
  [in, optional] PULONG         Key,
  [in, optional] PDRIVER_CANCEL CancelFunction
);

매개 변수

[in] DeviceObject

IRP의 대상 디바이스 개체에 대한 포인터입니다.

[in] Irp

처리할 IRP에 대한 포인터입니다.

[in, optional] Key

디바이스 큐에 패킷을 삽입할 위치를 결정하는 값에 대한 포인터입니다. 이 값이 0이면 패킷이 디바이스 큐의 꼬리에 삽입됩니다.

[in, optional] CancelFunction

드라이버 제공 취소 루틴의 진입점을 지정합니다.

반환 값

없음

설명

드라이버가 이미 대상 디바이스 개체에 대한 요청을 처리하는 중이면 패킷이 디바이스 큐에 큐에 대기됩니다. 그렇지 않으면 이 루틴은 지정된 IRP를 사용하여 드라이버의 StartIo 루틴을 호출합니다.

NULL이 아닌 CancelFunction 포인터가 제공되면 IRP에서 설정되므로 IRP가 완료되기 전에 취소된 경우 드라이버의 Cancel 루틴이 호출됩니다.

StartIo 루틴이 없는 드라이버는 IoStartPacket을 호출할 수 없습니다.

IoStartPacket의 호출자는 IRQL <= DISPATCH_LEVEL 실행되어야 합니다. 일반적으로 이 루틴은 IRQL = PASSIVE_LEVEL 디바이스 드라이버의 Dispatch 루틴에서 호출됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000
대상 플랫폼 유니버설
헤더 ntifs.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL(설명 섹션 참조)

추가 정보

DEVICE_OBJECT

IoMarkIrpPending

IoSetCancelRoutine

IoStartNextPacket

IoStartNextPacketByKey