Compartir a través de


Función IoAllocateIrpEx (wdm.h)

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

Sintaxis

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

Parámetros

DeviceObject

Puntero al objeto de dispositivo que se va a comprobar para determinar 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 van a asignar para el IRP. StackSize debe ser al menos igual que StackSize del objeto de dispositivo del controlador inferior siguiente, pero puede ser uno mayor que este valor. El controlador de llamada no necesita asignar una ubicación de pila en el IRP por sí mismo.

ChargeQuota

Al establecer ChargeQuota en TRUE , la memoria asignada para el IRP se cargará con la cuota del proceso actual. Este parámetro solo se puede establecer en TRUE 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.

Comentarios

IoAllocateIrpEx asigna ubicaciones de pila StackSize 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 los controladores de nivel inferior. Este controlador debe inicializar el IRP y debe establecer su rutina de devolución de llamada de IoCompletion 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 haya 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 Value
Cliente mínimo compatible Disponible a partir de Windows 10 (versión 1507)
Plataforma de destino Universal
Encabezado wdm.h (include wdm.h, ntddk.h, ntifs.h)
Library ntoskrnl.lib
Archivo DLL ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Consulte también

IO_STACK_LOCATION

IRP

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine