IoBuildSynchronousFsdRequest
The IoBuildSynchronousFsdRequest routine allocates and sets up an IRP for a synchronously processed I/O request.
PIRP
IoBuildSynchronousFsdRequest(
IN ULONG MajorFunction,
IN PDEVICE_OBJECT DeviceObject,
IN OUT PVOID Buffer OPTIONAL,
IN ULONG Length OPTIONAL,
IN PLARGE_INTEGER StartingOffset OPTIONAL,
IN PKEVENT Event,
OUT PIO_STATUS_BLOCK IoStatusBlock
);
Parameters
MajorFunctionSupplies a major function code. This code can be IRP_MJ_PNP, IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_FLUSH_BUFFERS, or IRP_MJ_SHUTDOWN.
DeviceObjectSupplies a pointer to the DEVICE_OBJECT structure for the next-lower driver's device object, which represents the target device.
BufferSupplies a pointer to a buffer. If
MajorFunction is IRP_MJ_WRITE, the buffer contains data to be written. If
MajorFunction is IRP_MJ_READ, the buffer receives data. If
MajorFunction is IRP_MJ_FLUSH_BUFFERS or IRP_MJ_SHUTDOWN, this parameter must be NULL.
LengthSupplies the length, in bytes, of
Buffer. For devices such as disks,
this value must be an integral of 512. This parameter is required for read and write requests, but must be zero for flush and shutdown requests.
StartingOffsetSupplies a pointer to the offset on the disk, for read and write requests. The units and meaning of this value are driver-specific. This parameter is required for read and write requests but must be zero for flush and shutdown requests.
EventSupplies a pointer to a caller-allocated and initialized event object. The I/O manager sets the event to the Signaled state when a lower-level driver completes the requested operation. After calling
IoCallDriver, the driver can wait for the event object.
IoStatusBlockReceives the I/O status block that is set when the IRP is completed by a lower-level driver.
Return Value
If the operation succeeds, IoBuildSynchronousFsdRequest returns a pointer to an initialized IRP structure, with the next-lower driver's I/O stack location set up from the supplied parameters. Otherwise, the routine returns NULL.