Expand Minimize

IoCsqInsertIrpEx routine

The IoCsqInsertIrpEx routine inserts an IRP into the driver's cancel-safe IRP queue.

Syntax


NTSTATUS IoCsqInsertIrpEx(
  _Inout_    PIO_CSQ             Csq,
  _Inout_    PIRP                Irp,
  _Out_opt_  PIO_CSQ_IRP_CONTEXT Context,
  _In_opt_   PVOID               InsertContext
);

Parameters

Csq [in, out]

Pointer to the IO_CSQ structure for the driver's cancel-safe IRP queue. This structure must have been initialized by IoCsqInitialize or IoCsqInitializeEx.

Irp [in, out]

Pointer to the IRP to be queued.

Context [out, optional]

Pointer to an IO_CSQ_IRP_CONTEXT structure. IoCsqInsertIrpEx initializes this structure with context information for the inserted IRP. The driver passes this value to IoCsqRemoveIrp to delete the IRP from the queue. Context can be NULL if the driver will not use IoCsqRemoveIrp to remove this IRP from the queue.

InsertContext [in, optional]

Pointer to a driver-defined context value. This parameter is passed to the driver's CsqInsertIrpEx routine, if it has one. Otherwise, this parameter is ignored.

Return value

If the Csq parameter was initialized with IoCsqInitialize, IoCsqInsertIrpEx always returns STATUS_SUCCESS. If Csq was initialized with IoCsqInitializeEx, IoCsqInsertIrpEx returns the value that was returned by the driver's CsqInsertIrpEx routine.

Remarks

IoCsqInsertIrpEx uses the queue's dispatch routines to insert the IRP. The IoCsqInsertIrpEx routine:

  1. Calls the queue's CsqAcquireLock routine to lock the queue.

  2. If the queue's IO_CSQ structure was initialized by IoCsqInitialize, IoCsqInsertIrpEx calls the queue's CsqInsertIrp routine to insert the IRP. If the queue's IO_CSQ structure was initialized by IoCsqInitializeEx, IoCsqInsertIrpEx calls the queue's CsqInsertIrpEx routine to insert the IRP, and passes the InsertContext parameter as the InsertContext parameter of CsqInsertIrpEx.

  3. Calls the queue's CsqReleaseLock routine to unlock the queue.

If the IRP to be inserted has already been canceled, IoCsqInsertIrpEx does not attempt to insert the IRP into the queue.

For more information, see Cancel-Safe IRP Queues.

Note that IoCsqXxx routines use the DriverContext[3] member of the IRP to hold IRP context information. Drivers that use these routines to queue IRPs must leave that member unused.

Callers of IoCsqInsertIrpEx must be running at an IRQL <= DISPATCH_LEVEL. The driver's callback routines must work correctly at this IRQL.

Requirements

Target platform

Universal

Version

Available in Windows Server 2003 and later versions of the Windows operating system. The routine is also available in the Csq.lib library that ships with the Windows Driver Kit (WDK) and the Driver Development Kit (DDK) for Windows Server 2003. Drivers that must also work for on Windows XP, Windows 2000, and Windows 98/Me can instead link to Csq.lib to use the routine.

Header

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

Library

Ntoskrnl.lib

IRQL

<= DISPATCH_LEVEL (see Remarks section)

DDI compliance rules

IoAllocateFree, IoReuseIrp, IrpCancelField, RemoveLockCheck, RemoveLockForward, RemoveLockForward2, RemoveLockForwardDeviceControl, RemoveLockForwardDeviceControl2, RemoveLockForwardDeviceControlInternal, RemoveLockForwardDeviceControlInternal2, RemoveLockForwardRead, RemoveLockForwardRead2, RemoveLockForwardWrite, RemoveLockForwardWrite2, RemoveLockReleaseCleanup, RemoveLockReleaseClose, RemoveLockReleaseCreate, RemoveLockReleaseDeviceControl, RemoveLockReleaseInternalDeviceControl, RemoveLockReleasePower, RemoveLockReleaseRead, RemoveLockReleaseShutdown, RemoveLockReleaseSystemControl, RemoveLockReleaseWrite

See also

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

 

 

Send comments about this topic to Microsoft

Show:
© 2015 Microsoft