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 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)

Consulte también

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

ioBuildAsynchronousFsdRequest

ioBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

ioFreeIrp

ioMakeAssociatedIrp

ioReuseIrp

IoSetCompletionRoutine