IoSkipCurrentIrpStackLocation 함수(wdm.h)
IoSkipCurrentIrpStackLocation 매크로는 시스템의 IO_STACK_LOCATION 배열 포인터를 수정하므로 현재 드라이버가 다음 하위 드라이버를 호출할 때 해당 드라이버는 현재 드라이버가 받은 것과 동일한 IO_STACK_LOCATION 구조를 받습니다.
통사론
void IoSkipCurrentIrpStackLocation(
[in, out] PIRP Irp
);
매개 변수
[in, out] Irp
IRP에 대한 포인터입니다.
반환 값
없음
발언
드라이버가 IRP를 다음 하위 드라이버로 보내면 드라이버가 IoCompletion 루틴(드라이버의 IO_STACK_LOCATION 구조에 저장된 주소)을 제공하지 않으려는 경우 IoSkipCurrentIrpStackLocation 호출할 수 있습니다. IoCallDriver호출하기 전에 IoSkipCurrentIrpStackLocation 호출하는 경우 다음 하위 드라이버는 드라이버가 받은 것과 동일한 IO_STACK_LOCATION 받습니다.
IRP에 대한 IoCompletion 루틴을 제공하려는 경우 드라이버는 IoSkipCurrentIrpStackLocation대신 IoCopyCurrentIrpStackLocationToNext 호출해야 합니다. 잘못 작성된 드라이버가 IoSkipCurrentIrpStackLocation 호출한 다음 완료 루틴을 설정하는 실수를 하는 경우 이 드라이버는 위의 드라이버에서 설정한 완료 루틴을 덮어쓸 수 있습니다.
드라이버가 IRP를 보류한 경우 드라이버가 IRP를 다음 하위 드라이버로 전달하기 전에 IoSkipCurrentIrpStackLocation 호출하지 않아야 합니다. 드라이버가 보류 중인 IRP에서 IoSkipCurrentIrpStackLocation 호출한 후 다음 하위 드라이버에 전달하면 SL_PENDING_RETURNED 플래그는 다음 드라이버에 대한 I/O 스택 위치의 Control 멤버에 설정됩니다. 다음 드라이버는 해당 스택 위치를 소유하고 수정할 수 있으므로 보류 중인 플래그를 지울 수 있습니다. 이 경우 운영 체제에서 버그 확인 또는 IRP 처리가 완료되지 않을 수 있습니다.
대신 IRP가 보류된 드라이버는 IoCopyCurrentIrpStackLocationToNext 호출하여 IoCallDriver호출하기 전에 다음 하위 드라이버에 대한 새 스택 위치를 설정해야 합니다.
드라이버가 IoSkipCurrentIrpStackLocation호출하는 경우 해당 드라이버와 관련하여 의도치 않게 낮은 드라이버 또는 시스템의 동작에 영향을 줄 수 있는 방식으로 IO_STACK_LOCATION 구조를 수정하지 않도록 주의해야 합니다. 예를 들어 IO_STACK_LOCATION 구조체의 매개 변수 공용 구조체를 수정하거나 IoMarkIrpPending호출합니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 |
헤더 | wdm.h |
IRQL | 모든 수준 |