Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenclntirp.c
Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (C) Microsoft Corporation, 1991 - 1999 00004 00005 Module Name: 00006 00007 clntirp.c 00008 00009 Abstract: 00010 00011 Client IRP queuing routines for CLASSPNP 00012 00013 Environment: 00014 00015 kernel mode only 00016 00017 Notes: 00018 00019 00020 Revision History: 00021 00022 --*/ 00023 00024 #include "classp.h" 00025 #include "debug.h" 00026 00027 00028 /* 00029 * EnqueueDeferredClientIrp 00030 * 00031 * Note: we currently do not support Cancel for storage irps. 00032 */ 00033 VOID EnqueueDeferredClientIrp(PCLASS_PRIVATE_FDO_DATA FdoData, PIRP Irp) 00034 { 00035 KIRQL oldIrql; 00036 00037 KeAcquireSpinLock(&FdoData->SpinLock, &oldIrql); 00038 InsertTailList(&FdoData->DeferredClientIrpList, &Irp->Tail.Overlay.ListEntry); 00039 KeReleaseSpinLock(&FdoData->SpinLock, oldIrql); 00040 } 00041 00042 00043 /* 00044 * DequeueDeferredClientIrp 00045 * 00046 */ 00047 PIRP DequeueDeferredClientIrp(PCLASS_PRIVATE_FDO_DATA FdoData) 00048 { 00049 KIRQL oldIrql; 00050 PLIST_ENTRY listEntry; 00051 PIRP irp; 00052 00053 KeAcquireSpinLock(&FdoData->SpinLock, &oldIrql); 00054 if (IsListEmpty(&FdoData->DeferredClientIrpList)){ 00055 listEntry = NULL; 00056 } 00057 else { 00058 listEntry = RemoveHeadList(&FdoData->DeferredClientIrpList); 00059 } 00060 KeReleaseSpinLock(&FdoData->SpinLock, oldIrql); 00061 00062 if (listEntry == NULL) { 00063 irp = NULL; 00064 } else { 00065 irp = CONTAINING_RECORD(listEntry, IRP, Tail.Overlay.ListEntry); 00066 ASSERT(irp->Type == IO_TYPE_IRP); 00067 InitializeListHead(&irp->Tail.Overlay.ListEntry); 00068 } 00069 00070 return irp; 00071 } 00072 00073 00074 Generated on Sun May 27 2012 04:28:21 for ReactOS by
1.7.6.1
|