Compartir a través de


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 van a asignar para el IRP. Este valor 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.

[in] ChargeQuota

Si se establece en TRUE , la memoria asignada para el IRP se cobrará con respecto a la cuota del proceso actual. Debe establecerse en FALSE mediante controladores intermedios. Esto solo se puede establecer en TRUE mediante 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.

Comentarios

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 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 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL 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)

Consulte también

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine