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 |