Función IoAllocateIrpEx (wdm.h)

IoAllocateIrpEx asigna un IRP desde el grupo no paginado del sistema, posiblemente con una extensión IRP.

Sintaxis

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

Parámetros

DeviceObject

Puntero al objeto de dispositivo para comprobar si se va a agregar espacio para una extensión IRP. Cuando DeviceObject se establece en DEVICE_WITH_IRP_EXTENSION, también se asigna espacio para la extensión IRP.

StackSize

Número máximo de ubicaciones de pila que se asignarán para el IRP. StackSize debe ser al menos igual que el stackSize de del objeto de dispositivo del controlador inferior siguiente, pero puede ser uno mayor que este valor. El controlador que realiza la llamada no necesita asignar una ubicación de pila en el IRP para sí mismo.

ChargeQuota

Establecer ChargeQuota en TRUE hace que la memoria asignada para irP se cobre con la cuota del proceso actual. Este parámetro se puede establecer TRUE solo por los controladores de nivel superior a los que se llama en el contexto del subproceso que origina la solicitud de E/S para la que el controlador asigna otro IRP. Los controladores intermedios deben establecer este parámetro en FALSE.

Valor devuelto

ioAllocateIrpEx devuelve un puntero al IRP asignado e inicializado, o NULL si no se pudo asignar un IRP.

Observaciones

IoAllocateIrpEx asigna StackSize ubicaciones de pila e inicializa el IRP. No asocia el IRP a un subproceso. El controlador de asignación debe liberar el IRP en lugar de volver a completarlo en el administrador de E/S.

Un controlador intermedio o de nivel superior puede llamar a ioAllocateIrpEx para crear IRP para las solicitudes que envía a controladores de nivel inferior. Este controlador debe inicializar el IRP y debe establecer su IoCompletion rutina de devolución de llamada en el IRP que crea para que el autor de la llamada pueda eliminar el IRP cuando los controladores de nivel inferior hayan completado el procesamiento de la solicitud. IoAllocateIrp inicializa automáticamente los miembros del IRP. No use IoInitializeIrp para inicializar el IRP antes de su primer uso. (Puede usar IoInitializeIrp para reutilizar un IRP que ya ha usado en determinadas circunstancias especiales. Consulte reutilización de irP para obtener más información). Un controlador intermedio o de nivel superior también puede llamar a IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest o IoBuildSynchronousFsdRequest para configurar las solicitudes que envía a controladores de nivel inferior. Solo un controlador de nivel superior puede llamar a IoMakeAssociatedIrp.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible a partir de Windows 10 (versión 1507)
de la plataforma de destino de Universal
encabezado de wdm.h (include wdm.h, ntddk.h, ntifs.h)
biblioteca de ntoskrnl.lib
DLL de ntoskrnl.exe
irQL <= DISPATCH_LEVEL

Consulte también

IO_STACK_LOCATION

IRP

ioAllocateIrp

ioBuildAsynchronousFsdRequest

ioBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

ioFreeIrp

ioMakeAssociatedIrp

ioReuseIrp

IoSetCompletionRoutine