Función IoAllocateIrp (wdm.h)
La rutina IoAllocateIrp asigna un IRP, dado el número de ubicaciones de pila de E/S para cada controlador en capas bajo el autor de la llamada y, opcionalmente, para el autor de la llamada. Consulte también ioAllocateIrpEx.
Sintaxis
PIRP IoAllocateIrp(
[in] CCHAR StackSize,
[in] BOOLEAN ChargeQuota
);
Parámetros
[in] StackSize
Especifica el número de ubicaciones de pila de E/S que se asignarán para el IRP. Este valor debe ser al menos igual al StackSize 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.
[in] ChargeQuota
Si se establece en TRUE, la memoria asignada para irP se cargará con la cuota del proceso actual. Debe establecerse en FALSE por controladores intermedios. Esto se puede establecer en 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.
Valor devuelto
IoAllocateIrp devuelve un puntero a un IRP, que se asignó desde el espacio del sistema no paginado o NULL si no se pudo asignar un IRP.
Observaciones
La rutina IoAllocateIrp 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 ioAllocateIrp para crear IRP para las solicitudes que envía a controladores de nivel inferior. Este controlador debe inicializar el IRP y debe establecer su rutina 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 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 2000. |
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 |
reglas de cumplimiento de DDI | ForwardedAtBadIrqlAllocate(wdm), HwStorPortProhibitedDDIs(storport), IoAllocateComplete(wdm), IoAllocateForward(wdm), IoAllocateFree(wdm), IoAllocateIrpSignalEventInCompletion(wdm), IoAllocateIrpSignalEventInCompletion2(wdm), IoAllocateIrpSignalEventInCompletion3(wdm), IoAllocateIrpSignalEventInCompletionTimeout(wdm), IoFreeIrp(storport), IoReuseIrp(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), SpNoWait(storport), StorPortStartIo(storport) |