EvtIoWrite function
[Applies to KMDF and UMDF]
A driver's EvtIoWrite event callback function processes a specified write request.
Syntax
EVT_WDF_IO_QUEUE_IO_WRITE EvtIoWrite; VOID EvtIoWrite( _In_ WDFQUEUE Queue, _In_ WDFREQUEST Request, _In_ size_t Length ) { ... }
Parameters
- Queue [in]
-
A handle to the framework queue object that is associated with the I/O request.
- Request [in]
-
A handle to a framework request object.
- Length [in]
-
The number of bytes to be written.
Return value
None
Remarks
A driver registers an EvtIoWrite callback function when it calls WdfIoQueueCreate. For more information about calling WdfIoQueueCreate, see Creating I/O Queues.
If a driver has registered an EvtIoWrite callback function for a device's I/O queue, the callback function receives every write request from the queue. For more information, see Request Handlers.
The EvtIoWrite callback function must process each received I/O request in some manner. For more information, see Processing I/O Requests.
Write requests require an input buffer, which contains data that the driver receives. For information about how the driver can access a write request's buffer, see Accessing Data Buffers in Framework-Based Drivers.
This callback function can be called at IRQL <= DISPATCH_LEVEL, unless the ExecutionLevel member of the device or driver's WDF_OBJECT_ATTRIBUTES structure is set to WdfExecutionLevelPassive. (If your driver is at the top of its driver stack, the callback function is called at IRQL = PASSIVE_LEVEL.)
If the IRQL is PASSIVE_LEVEL, the framework calls the callback function within a critical region.
For more information about IRQL levels for request handlers, see Using Automatic Synchronization.
A driver's EvtIoWrite callback function should not call the following queue object methods:
Examples
To define an EvtIoWrite callback function, you must first provide a function declaration that identifies the type of callback function you’re defining. Windows provides a set of callback function types for drivers. Declaring a function using the callback function types helps Code Analysis for Drivers, Static Driver Verifier (SDV), and other verification tools find errors, and it’s a requirement for writing drivers for the Windows operating system.
For example, to define an EvtIoWrite callback function that is named MyIoWrite, use the EVT_WDF_IO_QUEUE_IO_WRITE type as shown in this code example:
EVT_WDF_IO_QUEUE_IO_WRITE MyIoWrite;
Then, implement your callback function as follows:
_Use_decl_annotations_ VOID MyIoWrite ( WDFQUEUE Queue, WDFREQUEST Request, size_t Length ) ..{...}
The EVT_WDF_IO_QUEUE_IO_WRITE function type is defined in the Wdfio.h header file. To more accurately identify errors when you run the code analysis tools, be sure to add the _Use_decl_annotations_ annotation to your function definition. The _Use_decl_annotations_ annotation ensures that the annotations that are applied to the EVT_WDF_IO_QUEUE_IO_WRITE function type in the header file are used. For more information about the requirements for function declarations, see Declaring Functions by Using Function Role Types for KMDF Drivers. For information about _Use_decl_annotations_, see Annotating Function Behavior.
Requirements
Minimum KMDF version | 1.0 |
---|---|
Minimum UMDF version | 2.0 |
Header |
|
IRQL | <= DISPATCH_LEVEL (see Remarks section) |
See also