3 Copyright (C) Microsoft Corporation, 1991 - 1999
11 Client IRP queuing routines for CLASSPNP
28 * EnqueueDeferredClientIrp
30 * Note: we currently do not support Cancel for storage irps.
32 VOID NTAPI
EnqueueDeferredClientIrp(PCLASS_PRIVATE_FDO_DATA FdoData
, PIRP Irp
)
36 KeAcquireSpinLock(&FdoData
->SpinLock
, &oldIrql
);
37 InsertTailList(&FdoData
->DeferredClientIrpList
, &Irp
->Tail
.Overlay
.ListEntry
);
38 KeReleaseSpinLock(&FdoData
->SpinLock
, oldIrql
);
43 * DequeueDeferredClientIrp
46 PIRP NTAPI
DequeueDeferredClientIrp(PCLASS_PRIVATE_FDO_DATA FdoData
)
49 PLIST_ENTRY listEntry
;
52 KeAcquireSpinLock(&FdoData
->SpinLock
, &oldIrql
);
53 if (IsListEmpty(&FdoData
->DeferredClientIrpList
)){
57 listEntry
= RemoveHeadList(&FdoData
->DeferredClientIrpList
);
59 KeReleaseSpinLock(&FdoData
->SpinLock
, oldIrql
);
61 if (listEntry
== NULL
) {
64 irp
= CONTAINING_RECORD(listEntry
, IRP
, Tail
.Overlay
.ListEntry
);
65 ASSERT(irp
->Type
== IO_TYPE_IRP
);
66 InitializeListHead(&irp
->Tail
.Overlay
.ListEntry
);