CsqRemoveIrp routine

The CsqRemoveIrp routine is used by the system to remove the specified IRP from a driver-implemented, cancel-safe IRP queue.

Syntax


IO_CSQ_REMOVE_IRP CsqRemoveIrp;

VOID CsqRemoveIrp(
  _In_  PIO_CSQ Csq,
  _In_  PIRP Irp
)
{ ... }

Parameters

Csq [in]

Pointer to the IO_CSQ structure for the cancel-safe IRP queue.

Irp [in]

Pointer to the IRP to remove from the IRP queue.

Return value

None

Remarks

The driver specifies the CsqRemoveIrp routine for a cancel-safe IRP queue when it initializes the queue's IO_CSQ structure. The driver specifies the routine as the CsqRemoveIrp parameter of IoCsqInitialize or IoCsqInitializeEx when it initializes IO_CSQ. For more information, see Cancel-Safe IRP Queues.

The IoCsqRemoveIrp and IoCsqRemoveNextIrp routines call the cancel-safe IRP queue's CsqRemoveIrp routine to remove the specified IRP from the queue. The system also uses CsqRemoveIrp to remove a canceled IRP from the queue.

Examples

To define a CsqRemoveIrp callback routine, you must first provide a function declaration that identifies the type of callback routine 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 a CsqRemoveIrp callback routine that is named MyCsqRemoveIrp, use the IO_CSQ_REMOVE_IRP type as shown in this code example:


IO_CSQ_REMOVE_IRP MyCsqRemoveIrp;

Then, implement your callback routine as follows:


_Use_decl_annotations_
VOID 
 MyCsqRemoveIrp(
    PIO_CSQ  Csq,
    PIRP  Irp
    )
  {
      // Function body
  }

The IO_CSQ_REMOVE_IRP function type is defined in the Wdm.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 IO_CSQ_REMOVE_IRP 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 WDM Drivers. For information about _Use_decl_annotations_, see Annotating Function Behavior.

Requirements

Header

Wdm.h (include Wdm.h, Ntddk.h, or Ntifs.h)

See also

IO_CSQ
IoCsqInitialize
IoCsqInitializeEx
IoCsqInsertIrp
IoCsqInsertIrpEx
IoCsqRemoveIrp
IoCsqRemoveNextIrp
CsqAcquireLock
CsqCompleteCanceledIrp
CsqInsertIrp
CsqInsertIrpEx
CsqPeekNextIrp
CsqReleaseLock

 

 

Send comments about this topic to Microsoft

Show:
© 2014 Microsoft