亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? close.c

?? FSD file system driver
?? C
字號:
/* 
 * FFS File System Driver for Windows
 *
 * close.c
 *
 * 2004.5.6 ~
 *
 * Lee Jae-Hong, http://www.pyrasis.com
 *
 * See License.txt
 *
 */

#include "ntifs.h"
#include "ffsdrv.h"

/* Globals */

extern PFFS_GLOBAL FFSGlobal;

/* Definitions */

#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FFSClose)
#pragma alloc_text(PAGE, FFSQueueCloseRequest)
#pragma alloc_text(PAGE, FFSDeQueueCloseRequest)
#endif


NTSTATUS
FFSClose(
	IN PFFS_IRP_CONTEXT IrpContext)
{
	PDEVICE_OBJECT  DeviceObject;
	NTSTATUS        Status = STATUS_SUCCESS;
	PFFS_VCB        Vcb;
	BOOLEAN         VcbResourceAcquired = FALSE;
	PFILE_OBJECT    FileObject;
	PFFS_FCB        Fcb;
	BOOLEAN         FcbResourceAcquired = FALSE;
	PFFS_CCB        Ccb;
	BOOLEAN         FreeVcb = FALSE;

	__try
	{
		ASSERT(IrpContext != NULL);

		ASSERT((IrpContext->Identifier.Type == FFSICX) &&
				(IrpContext->Identifier.Size == sizeof(FFS_IRP_CONTEXT)));

		DeviceObject = IrpContext->DeviceObject;

		if (DeviceObject == FFSGlobal->DeviceObject)
		{
			Status = STATUS_SUCCESS;
			__leave;
		}

		Vcb = (PFFS_VCB) DeviceObject->DeviceExtension;

		ASSERT(Vcb != NULL);

		ASSERT((Vcb->Identifier.Type == FFSVCB) &&
				(Vcb->Identifier.Size == sizeof(FFS_VCB)));

		ASSERT(IsMounted(Vcb));

		if (!ExAcquireResourceExclusiveLite(
					&Vcb->MainResource,
					IrpContext->IsSynchronous))
		{
			FFSPrint((DBG_INFO, "FFSClose: PENDING ... Vcb: %xh/%xh\n",
						Vcb->OpenFileHandleCount, Vcb->ReferenceCount));

			Status = STATUS_PENDING;
			__leave;
		}

		VcbResourceAcquired = TRUE;

		FileObject = IrpContext->FileObject;

		if (IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_DELAY_CLOSE))
		{
			Fcb = IrpContext->Fcb;
			Ccb = IrpContext->Ccb;
		}
		else
		{
			Fcb = (PFFS_FCB)FileObject->FsContext;

			if (!Fcb)
			{
				Status = STATUS_SUCCESS;
				__leave;
			}

			ASSERT(Fcb != NULL);

			Ccb = (PFFS_CCB)FileObject->FsContext2;
		}

		if (Fcb->Identifier.Type == FFSVCB)
		{
			Vcb->ReferenceCount--;

			if (!Vcb->ReferenceCount && FlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING))
			{
				FreeVcb = TRUE;
			}

			if (Ccb)
			{
				FFSFreeCcb(Ccb);
				if (FileObject)
				{
					FileObject->FsContext2 = Ccb = NULL;
				}
			}

			Status = STATUS_SUCCESS;

			__leave;
		}

		if (Fcb->Identifier.Type != FFSFCB || Fcb->Identifier.Size != sizeof(FFS_FCB))
		{
#if DBG
			FFSPrint((DBG_ERROR, "FFSClose: Strange IRP_MJ_CLOSE by system!\n"));
			ExAcquireResourceExclusiveLite(
					&FFSGlobal->CountResource,
					TRUE);

			FFSGlobal->IRPCloseCount++;

			ExReleaseResourceForThreadLite(
					&FFSGlobal->CountResource,
					ExGetCurrentResourceThread());
#endif
			__leave;
		}

		ASSERT((Fcb->Identifier.Type == FFSFCB) &&
				(Fcb->Identifier.Size == sizeof(FFS_FCB)));

		/*        
			  if ((!IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) && 
			  (!IsFlagOn(Fcb->Flags, FCB_PAGE_FILE)))
			  */
		{
			if (!ExAcquireResourceExclusiveLite(
						&Fcb->MainResource,
						IrpContext->IsSynchronous))
			{
				Status = STATUS_PENDING;
				__leave;
			}

			FcbResourceAcquired = TRUE;
		}

		if (!Ccb)
		{
			Status = STATUS_SUCCESS;
			__leave;
		}

		ASSERT((Ccb->Identifier.Type == FFSCCB) &&
				(Ccb->Identifier.Size == sizeof(FFS_CCB)));

		Fcb->ReferenceCount--;
		Vcb->ReferenceCount--;

		if (!Vcb->ReferenceCount && IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING))
		{
			FreeVcb = TRUE;
		}

		FFSPrint((DBG_INFO, "FFSClose: OpenHandleCount: %u ReferenceCount: %u %s\n",
					Fcb->OpenHandleCount, Fcb->ReferenceCount, Fcb->AnsiFileName.Buffer));

		if (Ccb)
		{
			FFSFreeCcb(Ccb);

			if (FileObject)
			{
				FileObject->FsContext2 = Ccb = NULL;
			}
		}

		if (!Fcb->ReferenceCount)
		{
			//
			// Remove Fcb from Vcb->FcbList ...
			//

			RemoveEntryList(&Fcb->Next);

			FFSFreeFcb(Fcb);

			FcbResourceAcquired = FALSE;
		}

		Status = STATUS_SUCCESS;
	}

	__finally
	{
		if (FcbResourceAcquired)
		{
			ExReleaseResourceForThreadLite(
					&Fcb->MainResource,
					ExGetCurrentResourceThread());
		}

		if (VcbResourceAcquired)
		{
			ExReleaseResourceForThreadLite(
					&Vcb->MainResource,
					ExGetCurrentResourceThread());
		}

		if (!IrpContext->ExceptionInProgress)
		{
			if (Status == STATUS_PENDING)
			{
				FFSQueueCloseRequest(IrpContext);
#if 0
/*
				Status = STATUS_SUCCESS;

				if (IrpContext->Irp != NULL)
				{
					IrpContext->Irp->IoStatus.Status = Status;

					FFSCompleteRequest(
							IrpContext->Irp,
							(BOOLEAN)!IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_REQUEUED),
							(CCHAR)
							(NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT));

					IrpContext->Irp = NULL;
				}
*/
#endif
			}
			else
			{
				FFSCompleteIrpContext(IrpContext, Status);

				if (FreeVcb)
				{
					ExAcquireResourceExclusiveLite(
							&FFSGlobal->Resource, TRUE);

					FFSClearVpbFlag(Vcb->Vpb, VPB_MOUNTED);

					FFSRemoveVcb(Vcb);

					ExReleaseResourceForThreadLite(
							&FFSGlobal->Resource,
							ExGetCurrentResourceThread());

					FFSFreeVcb(Vcb);
				}
			}
		}
	}

	return Status;
}


VOID
FFSQueueCloseRequest(
	IN PFFS_IRP_CONTEXT IrpContext)
{
	ASSERT(IrpContext);

	ASSERT((IrpContext->Identifier.Type == FFSICX) &&
			(IrpContext->Identifier.Size == sizeof(FFS_IRP_CONTEXT)));

	if (!IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_DELAY_CLOSE))
	{
		SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_DELAY_CLOSE);

		IrpContext->Fcb = (PFFS_FCB)IrpContext->FileObject->FsContext;
		IrpContext->Ccb = (PFFS_CCB)IrpContext->FileObject->FsContext2;

		IrpContext->FileObject = NULL;
	}

	// IsSynchronous means we can block (so we don't requeue it)
	IrpContext->IsSynchronous = TRUE;

	ExInitializeWorkItem(
			&IrpContext->WorkQueueItem,
			FFSDeQueueCloseRequest,
			IrpContext);

	ExQueueWorkItem(&IrpContext->WorkQueueItem, CriticalWorkQueue);
}


VOID
FFSDeQueueCloseRequest(
	IN PVOID Context)
{
	PFFS_IRP_CONTEXT IrpContext;

	IrpContext = (PFFS_IRP_CONTEXT) Context;

	ASSERT(IrpContext);

	ASSERT((IrpContext->Identifier.Type == FFSICX) &&
			(IrpContext->Identifier.Size == sizeof(FFS_IRP_CONTEXT)));

	__try
	{
		__try
		{
			FsRtlEnterFileSystem();
			FFSClose(IrpContext);
		}
		__except (FFSExceptionFilter(IrpContext, GetExceptionInformation()))
		{
			FFSExceptionHandler(IrpContext);
		}
	}
	__finally
	{
		FsRtlExitFileSystem();
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲天堂免费看| 日韩经典中文字幕一区| 日韩精品专区在线| 制服视频三区第一页精品| 一本一道波多野结衣一区二区| 国产精品亚洲а∨天堂免在线| 激情图片小说一区| 成人黄色777网| bt7086福利一区国产| 91女人视频在线观看| 一本久久a久久精品亚洲| 精品精品国产高清a毛片牛牛 | 亚洲综合在线视频| 亚洲尤物在线视频观看| 婷婷六月综合亚洲| 久久99精品久久久久久国产越南| 久久国产精品99久久人人澡| 国产成人精品亚洲午夜麻豆| 色综合一区二区| 日韩激情中文字幕| 国产午夜精品久久久久久久 | 91国在线观看| 欧美日韩电影在线播放| 日韩欧美专区在线| 欧美激情资源网| 亚洲午夜免费视频| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲激情在线激情| 日韩av电影免费观看高清完整版在线观看| 性做久久久久久久久| 国产一区二区在线观看免费| 91精品啪在线观看国产60岁| 亚洲va韩国va欧美va| 欧美体内she精视频| 久久久久久久性| 一区二区三区波多野结衣在线观看| 国产在线观看一区二区| 欧美成人欧美edvon| |精品福利一区二区三区| 日本在线不卡视频| 91精品国产福利在线观看| 亚洲色图欧美激情| 91麻豆国产香蕉久久精品| 亚洲精品视频在线观看网站| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲123区在线观看| 欧美日本国产一区| 日韩av二区在线播放| 欧美大片一区二区| 国产一区二区看久久| 国产精品欧美一区喷水| 日韩国产成人精品| 精品久久久久香蕉网| 精品一区二区久久久| 国产亚洲一区二区三区四区| 成人av电影在线观看| 一区二区视频在线| 8x8x8国产精品| 国产一区不卡精品| 亚洲柠檬福利资源导航| 国产iv一区二区三区| 精品久久久久香蕉网| 99久久精品免费| 中文字幕欧美激情| 色婷婷国产精品| 麻豆91在线观看| 欧美一区二区视频在线观看2022| 狠狠色综合日日| 亚洲免费av高清| 欧美一级免费大片| 成人精品免费网站| 国产精品美女久久久久aⅴ国产馆| 91免费国产在线| 蜜臀va亚洲va欧美va天堂| 国产精品久久夜| 色综合天天狠狠| 蜜桃av噜噜一区二区三区小说| 国产精品视频在线看| 91超碰这里只有精品国产| 国产大片一区二区| 天堂资源在线中文精品| 中文字幕欧美日韩一区| 日韩欧美在线一区二区三区| 91麻豆精品秘密| 国产高清在线精品| 日韩国产欧美视频| 亚洲欧美日韩国产综合在线| 亚洲午夜激情网站| 欧美精品一区二区三区在线播放 | 欧美一级精品大片| heyzo一本久久综合| 日韩电影一区二区三区四区| 国产精品久久久久久亚洲伦| 性做久久久久久久免费看| 精品免费视频.| 色婷婷av久久久久久久| 国产寡妇亲子伦一区二区| 日产精品久久久久久久性色 | 欧美成人伊人久久综合网| 色老汉av一区二区三区| 懂色av一区二区三区蜜臀| 麻豆视频一区二区| 日韩福利视频导航| 香蕉久久一区二区不卡无毒影院 | 国产亚洲va综合人人澡精品| 制服丝袜中文字幕一区| 精品视频999| 午夜欧美大尺度福利影院在线看 | 亚洲国产毛片aaaaa无费看| 中文字幕巨乱亚洲| 精品久久一区二区三区| 日韩亚洲欧美综合| 欧美一区二区在线看| 欧美精品一级二级| 国产99久久久国产精品| 国产一区二区影院| 国产乱妇无码大片在线观看| 国产一区二区精品久久91| 国产一区二区免费视频| 国产米奇在线777精品观看| 九九久久精品视频| 国产一区999| aaa亚洲精品| 91蜜桃免费观看视频| 色综合天天综合在线视频| 91浏览器在线视频| 在线观看免费一区| 成人成人成人在线视频| 国产福利不卡视频| 91免费版在线| 欧美性大战久久久久久久| 欧美日韩国产天堂| 51精品视频一区二区三区| 精品日韩欧美一区二区| 久久久不卡影院| 亚洲欧洲国产日韩| 一区二区三区欧美在线观看| 亚洲第一久久影院| 男女性色大片免费观看一区二区| 亚洲天堂免费在线观看视频| 一区二区三区免费网站| 日韩av在线发布| 国产黄色成人av| 欧美手机在线视频| 欧美大片顶级少妇| 国产精品天美传媒沈樵| 亚洲福利一区二区三区| 国产真实乱偷精品视频免| 国产黄色精品网站| 欧美三级三级三级爽爽爽| 久久综合九色综合欧美98| 91精品国产综合久久久久久久久久| 538在线一区二区精品国产| 久久婷婷久久一区二区三区| 日韩理论电影院| 日本亚洲电影天堂| av网站免费线看精品| 69精品人人人人| 国产精品网站一区| 视频一区在线播放| 成人综合婷婷国产精品久久蜜臀 | 亚洲午夜一区二区三区| 看片网站欧美日韩| 91看片淫黄大片一级在线观看| 日韩一区二区影院| 亚洲国产成人午夜在线一区| 丝袜亚洲另类欧美| 97国产一区二区| 精品国产麻豆免费人成网站| 亚洲欧美偷拍另类a∨色屁股| 久久国产精品99久久久久久老狼 | 亚洲免费大片在线观看| 国产一区二区视频在线播放| 欧日韩精品视频| 国产亚洲1区2区3区| 久久精品国内一区二区三区| 在线免费不卡电影| 亚洲国产精品传媒在线观看| 青娱乐精品视频| 在线视频一区二区三区| 中文字幕在线观看不卡视频| 黄色日韩网站视频| 欧美一区二区日韩一区二区| 亚洲人被黑人高潮完整版| 国产91精品一区二区麻豆亚洲| 日韩一区二区电影在线| 亚洲午夜成aⅴ人片| 91亚洲大成网污www| 国产人成一区二区三区影院| 中文字幕在线不卡国产视频| 国产精品影视在线观看| 精品国产一区a| 蜜臀av一区二区在线免费观看 | 99精品视频在线免费观看| 久久亚洲免费视频| 免费视频最近日韩| 7777精品伊人久久久大香线蕉完整版| 亚洲成人一区二区| 欧洲精品一区二区三区在线观看| 亚洲天堂中文字幕|