IoAllocateIrpEx 함수(wdm.h)

IoAllocateIrpEx 시스템 비페이지 풀에서 IRP 확장을 사용하여 IRP를 할당합니다.

통사론

C++
PIRP IoAllocateIrpEx(
  PDEVICE_OBJECT DeviceObject,
  CCHAR          StackSize,
  BOOLEAN        ChargeQuota
);

매개 변수

DeviceObject

IRP 확장의 공간을 추가할지 여부를 확인하기 위해 확인할 디바이스 개체에 대한 포인터입니다. deviceObject DEVICE_WITH_IRP_EXTENSION 설정되면 IRP 확장의 공간도 할당됩니다.

StackSize

IRP에 할당할 최대 스택 위치 수입니다. StackSize 다음 하위 드라이버 디바이스 개체의 StackSize 동일해야 하지만 이 값보다 클 수 있습니다. 호출 드라이버는 IRP 자체에 스택 위치를 할당할 필요가 없습니다.

ChargeQuota

ChargeQuota TRUE 설정하면 IRP에 할당된 메모리가 현재 프로세스의 할당량에 대해 청구됩니다. 이 매개 변수는 드라이버가 다른 IRP를 할당하는 I/O 요청을 시작하는 스레드의 컨텍스트에서 호출되는 최상위 수준 드라이버에 의해서만 TRUE 설정할 수 있습니다. 중간 드라이버는 이 매개 변수를 false 설정해야 합니다.

반환 값

IoAllocateIrpEx 할당되고 초기화된 IRP에 대한 포인터를 반환하거나 IRP를 할당할 수 없는 경우 NULL .

발언

IoAllocateIrpExStackSize 스택 위치를 할당하고 IRP를 초기화합니다. IRP를 스레드와 연결하지 않습니다. 할당 드라이버는 I/O 관리자로 다시 완료하는 대신 IRP를 해제해야 합니다.

중간 또는 최상위 수준의 드라이버는 IoAllocateIrpEx 호출하여 하위 수준 드라이버에 보내는 요청에 대한 IRP를 만들 수 있습니다. 이러한 드라이버는 IRP를 초기화해야 하며, 하위 수준 드라이버가 요청 처리를 완료할 때 호출자가 IRP를 삭제할 수 있도록 IRP에서 IoCompletion 콜백 루틴을 설정해야 합니다. IoAllocateIrp는 IRP의 멤버를 자동으로 초기화합니다. IoInitializeIrp를 사용하여 IRP를 처음 사용하기 전에 초기화하지 마세요. (IoInitializeIrp를 사용하여 특정 특수 상황에서 이미 사용한 IRP를 다시 사용할 수 있습니다. 자세한 내용은 IRP 다시 사용 참조하세요.) 또한 중간 또는 최상위 수준의 드라이버는 IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest 또는 IoBuildSynchronousFsdRequest 호출하여 하위 수준 드라이버에 보내는 요청을 설정할 수 있습니다. 최상위 수준 드라이버만 IoMakeAssociatedIrp호출할 수 있습니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 10(버전 1507)부터 사용 가능
대상 플랫폼 보편적
헤더 wdm.h(wdm.h, ntddk.h, ntifs.h 포함)
라이브러리 ntoskrnl.lib
DLL ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

참고 항목

IO_STACK_LOCATION

IRP

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine