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
El código de función principal del IRP. Este código puede ser IRP_MJ_PNP, IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_FLUSH_BUFFERS o IRP_MJ_SHUTDOWN.
[in] DeviceObject
Puntero a la estructura DEVICE_OBJECT para el 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 está 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 buffer. Para dispositivos como discos, este valor debe ser un número 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 un controlador de nivel inferior completa el IRP.
Valor devuelto
Si la operación se realiza correctamente, IoBuildSynchronousFsdRequest devuelve un puntero a una estructura IRP inicializada, con la ubicación de pila de E/S del controlador siguiente inferior configurada a partir de los parámetros proporcionados. De lo contrario, la rutina devuelve NULL.
Comentarios
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ónica. El IRP contiene suficiente información para iniciar la operación.
Los controladores de nivel inferior pueden imponer restricciones en los parámetros proporcionados a esta rutina. Por ejemplo, los controladores de disco pueden requerir que los valores proporcionados para Length 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 inferior siguiente. Si IoCallDriver devuelve STATUS_PENDING, el controlador debe esperar a que se complete el IRP llamando a KeWaitForSingleObject en el evento especificado. La mayoría de los controladores no necesitan establecer una rutina de IoCompletion para irP.
Las IRP creadas por IoBuildSynchronousFsdRequest deben completarse mediante la llamada de un controlador a IoCompleteRequest. Un controlador que llama a IoBuildSynchronousFsdRequest no debe llamar a IoFreeIrp, porque el administrador de E/S libera estas IRP sincrónicas después de llamar 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 | 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 | <= APC_LEVEL |
Reglas de cumplimiento de DDI | ForwardedAtBadIrqlFsdSync(wdm), HwStorPortProhibitedDIs(storport), IoBuildSynchronousFsdRequestNoFree(wdm), IoBuildSynchronousFsdRequestWait(wdm), IoBuildSynchronousFsdRequestWaitTimeout(wdm), PowerIrpDDis(wdm), SignalEventInCompletion(wdm) |