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