3 Copyright (C) Microsoft Corporation, 1991 - 1999
11 Client IRP queuing routines for CLASSPNP
27 * EnqueueDeferredClientIrp
29 * Note: we currently do not support Cancel for storage irps.
31 VOID NTAPI
EnqueueDeferredClientIrp(PCLASS_PRIVATE_FDO_DATA FdoData
, PIRP Irp
)
35 KeAcquireSpinLock(&FdoData
->SpinLock
, &oldIrql
);
36 InsertTailList(&FdoData
->DeferredClientIrpList
, &Irp
->Tail
.Overlay
.ListEntry
);
37 KeReleaseSpinLock(&FdoData
->SpinLock
, oldIrql
);
42 * DequeueDeferredClientIrp
45 PIRP NTAPI
DequeueDeferredClientIrp(PCLASS_PRIVATE_FDO_DATA FdoData
)
48 PLIST_ENTRY listEntry
;
51 KeAcquireSpinLock(&FdoData
->SpinLock
, &oldIrql
);
52 if (IsListEmpty(&FdoData
->DeferredClientIrpList
)){
56 listEntry
= RemoveHeadList(&FdoData
->DeferredClientIrpList
);
58 KeReleaseSpinLock(&FdoData
->SpinLock
, oldIrql
);
60 if (listEntry
== NULL
) {
63 irp
= CONTAINING_RECORD(listEntry
, IRP
, Tail
.Overlay
.ListEntry
);
64 ASSERT(irp
->Type
== IO_TYPE_IRP
);
65 InitializeListHead(&irp
->Tail
.Overlay
.ListEntry
);