Función IoBuildSynchronousFsdRequest (wdm.h)
La rutina IoBuildSynchronousFsdRequest asigna y configura un IRP para una solicitud de E/S procesada sincrónicamente.
Sintaxis
__drv_aliasesMem PIRP IoBuildSynchronousFsdRequest(
[in] ULONG MajorFunction,
[in] PDEVICE_OBJECT DeviceObject,
[in, out] PVOID Buffer,
[in, optional] ULONG Length,
[in, optional] PLARGE_INTEGER StartingOffset,
[in] PKEVENT Event,
[out] PIO_STATUS_BLOCK IoStatusBlock
);
Parámetros
[in] MajorFunction
Código de función principal para IRP. Este código puede ser IRP_MJ_PNP, IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_FLUSH_BUFFERSo IRP_MJ_SHUTDOWN.
[in] DeviceObject
Puntero a la estructura de DEVICE_OBJECT del objeto de dispositivo del controlador inferior siguiente, que representa el dispositivo de destino.
[in, out] Buffer
Puntero a un búfer de datos. Si MajorFunction es IRP_MJ_WRITE, el búfer contiene los datos que se van a escribir. Si MajorFunction es IRP_MJ_READ, el búfer recibe datos. Si MajorFunction es IRP_MJ_FLUSH_BUFFERS o IRP_MJ_SHUTDOWN, este parámetro debe ser NULL.
[in, optional] Length
Longitud, en bytes, del búfer al que apunta Búfer. Para dispositivos como discos, este valor debe ser un entero múltiplo del tamaño del sector. A partir de Windows 8, el tamaño del sector puede ser de 4096 o 512 bytes. En versiones anteriores de Windows, el tamaño del sector siempre es de 512 bytes. Este parámetro es necesario para las solicitudes de lectura y escritura, pero debe ser cero para las solicitudes de vaciado y apagado.
[in, optional] StartingOffset
Puntero al desplazamiento en el disco para las solicitudes de lectura y escritura. Las unidades y el significado de este valor son específicas del controlador. Este parámetro es necesario para las solicitudes de lectura y escritura, pero debe ser cero para las solicitudes de vaciado y apagado.
[in] Event
Puntero a un objeto de evento asignado por el autor de la llamada e inicializado. El administrador de E/S establece el evento en el estado Señalizado cuando un controlador de nivel inferior completa la operación solicitada. Después de llamar a IoCallDriver, el controlador puede esperar al objeto de evento.
[out] IoStatusBlock
Puntero a una ubicación que recibe el bloque de estado de E/S que se establece cuando el IRP se completa mediante un controlador de nivel inferior.
Valor devuelto
Si la operación se realiza correctamente, ioBuildSynchronousFsdRequest devuelve un puntero a una estructura de IRP inicializada, con la ubicación de pila de E/S del controlador siguiente inferior configurada desde los parámetros proporcionados. De lo contrario, la rutina devuelve NULL.
Observaciones
Un controlador del sistema de archivos (FSD) u otro controlador de nivel superior puede llamar a IoBuildSynchronousFsdRequest para configurar IRP que envía de forma sincrónica a controladores de nivel inferior.
IoBuildSynchronousFsdRequest asigna y configura un IRP que solicita controladores de nivel inferior para realizar una operación de lectura, escritura, vaciado o apagado sincrónicos. IrP contiene suficiente información para iniciar la operación.
Los controladores de nivel inferior pueden imponer restricciones a los parámetros proporcionados a esta rutina. Por ejemplo, los controladores de disco pueden requerir que los valores proporcionados para Longitud y StartingOffset sean múltiplos enteros del tamaño del sector del dispositivo.
Después de llamar a ioBuildSynchronousFsdRequest para crear una solicitud, el controlador debe llamar a IoCallDriver para enviar la solicitud al controlador siguiente inferior. Si ioCallDriver devuelve STATUS_PENDING, el controlador debe esperar a que se complete el IRP llamando a KeWaitForSingleObject en el evento deespecificado. La mayoría de los controladores no necesitan establecer una rutina de IoCompletion para irP.
Los IRP creados por ioBuildSynchronousFsdRequest deben completarse mediante la llamada de un controlador a IoCompleteRequest. Un controlador que llama a ioBuildSynchronousFsdRequest no debe llamar a ioFreeIrp, ya que el administrador de E/S libera estos IRP sincrónicos después de se ha llamado a ioCompleteRequest.
IoBuildSynchronousFsdRequest pone en cola los IRP que crea en una cola IRP específica del subproceso actual. Si se cierra el subproceso, el administrador de E/S cancela el IRP.
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 | <= APC_LEVEL |
reglas de cumplimiento de DDI | ForwardedAtBadIrqlFsdSync(wdm), HwStorPortProhibitedDDIs(storport), IoBuildSynchronousFsdRequestNoFree(wdm), IoBuildSynch, IoBuildSynchronousFsdRequestWaitTimeout(wdm), PowerIrpDDis(wdm)SignalEventInCompletion(wdm) |