NdisQueueIoWorkItem function (ndis.h)
NDIS drivers call the NdisQueueIoWorkItem function to queue a work item.
Syntax
void NdisQueueIoWorkItem(
[in] NDIS_HANDLE NdisIoWorkItemHandle,
[in] NDIS_IO_WORKITEM_ROUTINE Routine,
[in] PVOID WorkItemContext
);
Parameters
[in] NdisIoWorkItemHandle
A handle to a private IO_WORKITEM structure that was returned by a previous call to the NdisAllocateIoWorkItem function.
[in] Routine
The entry point to the function that NDIS calls to process the work item. NDIS calls this routine in the context of a system thread.
WorkItemContext
A pointer to the context area that the driver passed to the WorkItemContext parameter of NdisQueueIoWorkItem.
NdisIoWorkItemHandle
A handle to a private NDIS_IO_WORKITEM structure that was returned by a previous call to the NdisAllocateIoWorkItem function.
[in] WorkItemContext
A pointer to a caller-supplied context area that NDIS passes through to the callback routine. WorkItemContext can be any caller-specified data that the driver requires to manage the work item.
Return value
None
Remarks
NdisQueueIoWorkItem calls IoQueueWorkItem to queue a work item. NDIS work items use the CriticalWorkQueue queue type.
The caller-supplied callback routine (NDIS_IO_WORKITEM_ROUTINE) runs in a system thread context at IRQL = PASSIVE_LEVEL.
This caller-supplied routine can call the NdisFreeIoWorkItem function to reclaim the storage allocated for the work item.
Examples
To define a Routine function, you must first provide a function declaration that identifies the type of function you're defining. Windows provides a set of function types for drivers. Declaring a function using the 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 a Routine function that is named "MyWorkitemRoutine", use the NDIS_IO_WORKITEM_FUNCTION type as shown in this code example:
NDIS_IO_WORKITEM_FUNCTION MyWorkitemRoutine;
Then, implement your function as follows:
_Use_decl_annotations_
VOID
MyWorkitemRoutine(
PVOID WorkItemContext,
NDIS_HANDLE NdisIoWorkItemHandle
)
{...}
The NDIS_IO_WORKITEM_FUNCTION function type is defined in the Ndis.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 NDIS_IO_WORKITEM_FUNCTION 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 NDIS Drivers.
For information about Use_decl_annotations, see Annotating Function Behavior.
Requirements
Requirement | Value |
---|---|
Minimum supported client | Supported in NDIS 6.0 and later. |
Target Platform | Universal |
Header | ndis.h (include Ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI compliance rules | Irql_Miscellaneous_Function(ndis) |