3 Copyright (C) Microsoft Corporation, 1991 - 1999
11 Client IRP queuing routines for CLASSPNP
29 * EnqueueDeferredClientIrp
31 * Note: we currently do not support Cancel for storage irps.
33 VOID
EnqueueDeferredClientIrp(PCLASS_PRIVATE_FDO_DATA FdoData
, PIRP Irp
)
37 KeAcquireSpinLock(&FdoData
->SpinLock
, &oldIrql
);
38 InsertTailList(&FdoData
->DeferredClientIrpList
, &Irp
->Tail
.Overlay
.ListEntry
);
39 KeReleaseSpinLock(&FdoData
->SpinLock
, oldIrql
);
44 * DequeueDeferredClientIrp
47 PIRP
DequeueDeferredClientIrp(PCLASS_PRIVATE_FDO_DATA FdoData
)
50 PLIST_ENTRY listEntry
;
53 KeAcquireSpinLock(&FdoData
->SpinLock
, &oldIrql
);
54 if (IsListEmpty(&FdoData
->DeferredClientIrpList
)){
58 listEntry
= RemoveHeadList(&FdoData
->DeferredClientIrpList
);
60 KeReleaseSpinLock(&FdoData
->SpinLock
, oldIrql
);
62 if (listEntry
== NULL
) {
65 irp
= CONTAINING_RECORD(listEntry
, IRP
, Tail
.Overlay
.ListEntry
);
66 ASSERT(irp
->Type
== IO_TYPE_IRP
);
67 InitializeListHead(&irp
->Tail
.Overlay
.ListEntry
);