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

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

?? pnp.c

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

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


extern PFFS_GLOBAL FFSGlobal;

#if (_WIN32_WINNT >= 0x0500)

/* Globals */

extern PFFS_GLOBAL FFSGlobal;

/* Definitions */

#define DBG_PNP DBG_USER

NTSTATUS
FFSPnpCompletionRoutine(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP           Irp,
	IN PVOID          Contxt);


#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FFSPnp)
#pragma alloc_text(PAGE, FFSPnpQueryRemove)
#pragma alloc_text(PAGE, FFSPnpRemove)
#pragma alloc_text(PAGE, FFSPnpCancelRemove)
#pragma alloc_text(PAGE, FFSPnpSurpriseRemove)
#endif



NTSTATUS
FFSPnpCompletionRoutine(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp,
	IN PVOID Contxt)
{
	PKEVENT Event = (PKEVENT) Contxt;

	KeSetEvent(Event, 0, FALSE);

	return STATUS_MORE_PROCESSING_REQUIRED;

	UNREFERENCED_PARAMETER(DeviceObject);
	UNREFERENCED_PARAMETER(Contxt);
}


NTSTATUS
FFSPnp(
	IN PFFS_IRP_CONTEXT IrpContext)
{
	NTSTATUS            Status = STATUS_INVALID_PARAMETER;

	PIRP                Irp;
	PIO_STACK_LOCATION  IrpSp;
	PFFS_VCB            Vcb;
	PDEVICE_OBJECT      DeviceObject;

	__try
	{
		ASSERT(IrpContext);

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

		DeviceObject = IrpContext->DeviceObject;

		Vcb = (PFFS_VCB)DeviceObject->DeviceExtension;

		ASSERT(Vcb != NULL);

		if (!((Vcb->Identifier.Type == FFSVCB) &&
			(Vcb->Identifier.Size == sizeof(FFS_VCB))))
		{
			__leave; // Status = STATUS_INVALID_PARAMETER
		}

		Irp = IrpContext->Irp;
		IrpSp = IoGetCurrentIrpStackLocation(Irp);

		SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT);

		switch (IrpSp->MinorFunction)
		{

			case IRP_MN_QUERY_REMOVE_DEVICE:

				FFSPrint((DBG_PNP, "FFSPnp: FFSPnpQueryRemove...\n"));
				Status = FFSPnpQueryRemove(IrpContext, Vcb);

				break;

			case IRP_MN_REMOVE_DEVICE:

				FFSPrint((DBG_PNP, "FFSPnp: FFSPnpRemove...\n"));
				Status = FFSPnpRemove(IrpContext, Vcb);
				break;

			case IRP_MN_CANCEL_REMOVE_DEVICE:

				FFSPrint((DBG_PNP, "FFSPnp: FFSPnpCancelRemove...\n"));
				Status = FFSPnpCancelRemove(IrpContext, Vcb);
				break;

			case IRP_MN_SURPRISE_REMOVAL:

				FFSPrint((DBG_PNP, "FFSPnp: FFSPnpSupriseRemove...\n"));
				Status = FFSPnpSurpriseRemove(IrpContext, Vcb);
				break;

			default:
				break;
		}
	}

	__finally
	{
		if (!IrpContext->ExceptionInProgress)
		{
			Irp = IrpContext->Irp;

			if (Irp)
			{
				//
				// Here we need pass the IRP to the disk driver.
				//

				IoSkipCurrentIrpStackLocation(Irp);

				Status = IoCallDriver(Vcb->TargetDeviceObject, Irp);

				IrpContext->Irp = NULL;
			}

			FFSCompleteIrpContext(IrpContext, Status);
		}
	}

	return Status;
}


NTSTATUS
FFSPnpQueryRemove(
	PFFS_IRP_CONTEXT IrpContext,
	PFFS_VCB         Vcb)
{
	NTSTATUS Status;
	KEVENT   Event;
	BOOLEAN  bDeleted = FALSE;
	BOOLEAN  VcbAcquired = FALSE;

	__try {

		FFSPrint((DBG_PNP, "FFSPnpQueryRemove by FFSPnp ...\n"));

		FFSPrint((DBG_PNP, "FFSPnpQueryRemove: FFSFlushVolume ...\n"));

#if (_WIN32_WINNT >= 0x0500)
		CcWaitForCurrentLazyWriterActivity();
#endif

		ExAcquireResourceExclusiveLite(
			&Vcb->MainResource, TRUE);
		VcbAcquired = TRUE;

		FFSFlushFiles(Vcb, FALSE);

		FFSFlushVolume(Vcb, FALSE);

		FFSPrint((DBG_PNP, "FFSPnpQueryRemove: FFSLockVcb: Vcb=%xh FileObject=%xh ...\n", Vcb, IrpContext->FileObject));
		Status = FFSLockVcb(Vcb, IrpContext->FileObject);

		FFSPrint((DBG_PNP, "FFSPnpQueryRemove: FFSPurgeVolume ...\n"));
		FFSPurgeVolume(Vcb, TRUE);

		if (!NT_SUCCESS(Status))
		{
			__leave;
		}

		ExReleaseResourceForThreadLite(
				&Vcb->MainResource,
				ExGetCurrentResourceThread());
		VcbAcquired = FALSE;

		IoCopyCurrentIrpStackLocationToNext(IrpContext->Irp);

		KeInitializeEvent(&Event, NotificationEvent, FALSE);
		IoSetCompletionRoutine(IrpContext->Irp,
				FFSPnpCompletionRoutine,
				&Event,
				TRUE,
				TRUE,
				TRUE);

		FFSPrint((DBG_PNP, "FFSPnpQueryRemove: Call lower level driver...\n"));
		Status = IoCallDriver(Vcb->TargetDeviceObject, 
				IrpContext->Irp);

		if (Status == STATUS_PENDING)
		{
			KeWaitForSingleObject(&Event,
					Executive,
					KernelMode,
					FALSE,
					NULL);

			Status = IrpContext->Irp->IoStatus.Status;
		}

		if (NT_SUCCESS(Status))
		{
			FFSPrint((DBG_PNP, "FFSPnpQueryRemove: FFSCheckDismount ...\n"));
			bDeleted = FFSCheckDismount(IrpContext, Vcb, TRUE);
			FFSPrint((DBG_PNP, "FFSPnpQueryRemove: FFSFlushVolume bDelted=%xh ...\n", bDeleted));
		}

		ASSERT(!(NT_SUCCESS(Status) && !bDeleted));
	}

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

		FFSCompleteRequest(
				IrpContext->Irp, FALSE, (CCHAR)(NT_SUCCESS(Status) ?
					IO_DISK_INCREMENT : IO_NO_INCREMENT));

		IrpContext->Irp = NULL;
	}

	return Status;
}


NTSTATUS
FFSPnpRemove(
	PFFS_IRP_CONTEXT IrpContext,
	PFFS_VCB         Vcb)
{
	NTSTATUS Status;
	KEVENT   Event;
	BOOLEAN  bDeleted;

	__try
	{

		FFSPrint((DBG_PNP, "FFSPnpRemove by FFSPnp ...\n"));
#if (_WIN32_WINNT >= 0x0500)
		CcWaitForCurrentLazyWriterActivity();
#endif
		ExAcquireResourceExclusiveLite(
				&Vcb->MainResource,  TRUE);

		Status = FFSLockVcb(Vcb, IrpContext->FileObject);

		ExReleaseResourceForThreadLite(
				&Vcb->MainResource,
				ExGetCurrentResourceThread());

		//
		// Setup the Irp. We'll send it to the lower disk driver.
		//

		IoCopyCurrentIrpStackLocationToNext(IrpContext->Irp);

		KeInitializeEvent(&Event, NotificationEvent, FALSE);
		IoSetCompletionRoutine(IrpContext->Irp,
				FFSPnpCompletionRoutine,
				&Event,
				TRUE,
				TRUE,
				TRUE);

		Status = IoCallDriver(Vcb->TargetDeviceObject, 
				IrpContext->Irp);

		if (Status == STATUS_PENDING)
		{

			KeWaitForSingleObject(&Event,
					Executive,
					KernelMode,
					FALSE,
					NULL);

			Status = IrpContext->Irp->IoStatus.Status;
		}

		ExAcquireResourceExclusiveLite(
				&Vcb->MainResource, TRUE);

		FFSPurgeVolume(Vcb, FALSE);

		ExReleaseResourceForThreadLite(
				&Vcb->MainResource,
				ExGetCurrentResourceThread());

		bDeleted = FFSCheckDismount(IrpContext, Vcb, TRUE);
	}

	__finally
	{
		FFSCompleteRequest(
				IrpContext->Irp, FALSE, (CCHAR)(NT_SUCCESS(Status)?
					IO_DISK_INCREMENT : IO_NO_INCREMENT));

		IrpContext->Irp = NULL;
	}

	return Status;
}


NTSTATUS
FFSPnpSurpriseRemove(
	PFFS_IRP_CONTEXT IrpContext,
	PFFS_VCB         Vcb)
{
	NTSTATUS Status;
	KEVENT   Event;
	BOOLEAN  bDeleted;

	__try
	{

		FFSPrint((DBG_PNP, "FFSPnpSupriseRemove by FFSPnp ...\n"));
#if (_WIN32_WINNT >= 0x0500)
		CcWaitForCurrentLazyWriterActivity();
#endif
		ExAcquireResourceExclusiveLite(
				&Vcb->MainResource,  TRUE);

		Status = FFSLockVcb(Vcb, IrpContext->FileObject);

		ExReleaseResourceForThreadLite(
				&Vcb->MainResource,
				ExGetCurrentResourceThread());

		//
		// Setup the Irp. We'll send it to the lower disk driver.
		//

		IoCopyCurrentIrpStackLocationToNext(IrpContext->Irp);

		KeInitializeEvent(&Event, NotificationEvent, FALSE);
		IoSetCompletionRoutine(IrpContext->Irp,
				FFSPnpCompletionRoutine,
				&Event,
				TRUE,
				TRUE,
				TRUE);

		Status = IoCallDriver(Vcb->TargetDeviceObject, 
					IrpContext->Irp);

		if (Status == STATUS_PENDING)
		{

			KeWaitForSingleObject(&Event,
					Executive,
					KernelMode,
					FALSE,
					NULL);

			Status = IrpContext->Irp->IoStatus.Status;
		}

		ExAcquireResourceExclusiveLite(
				&Vcb->MainResource, TRUE);

		FFSPurgeVolume(Vcb, FALSE);

		ExReleaseResourceForThreadLite(
				&Vcb->MainResource,
				ExGetCurrentResourceThread());

		bDeleted = FFSCheckDismount(IrpContext, Vcb, TRUE);
	}

	__finally
	{
		FFSCompleteRequest(
				IrpContext->Irp, FALSE, (CCHAR)(NT_SUCCESS(Status)?
					IO_DISK_INCREMENT : IO_NO_INCREMENT));

		IrpContext->Irp = NULL;
	}

	return Status;
}


NTSTATUS
FFSPnpCancelRemove(
	PFFS_IRP_CONTEXT IrpContext,
	PFFS_VCB         Vcb)
{
	NTSTATUS Status;

	FFSPrint((DBG_PNP, "FFSPnpCancelRemove by FFSPnp ...\n"));

	ExAcquireResourceExclusiveLite(
			&Vcb->MainResource, TRUE);

	Status = FFSUnlockVcb(Vcb, IrpContext->FileObject);

	ExReleaseResourceForThreadLite(
			&Vcb->MainResource,
			ExGetCurrentResourceThread());

	IoSkipCurrentIrpStackLocation(IrpContext->Irp);

	Status = IoCallDriver(Vcb->TargetDeviceObject, IrpContext->Irp);

	IrpContext->Irp = NULL;

	return Status;
}


#endif //(_WIN32_WINNT >= 0x0500)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产另类不卡| 日本视频免费一区| 国产午夜精品福利| 日韩精品一区二区三区视频播放 | 欧美日韩一级视频| 欧美中文字幕一区| 欧美无砖砖区免费| 欧美日韩久久不卡| 日韩一区二区电影网| 欧美一区二区观看视频| 精品国产一区二区亚洲人成毛片| 日韩午夜电影av| 精品国产a毛片| 国产精品美日韩| 一区二区三区中文在线观看| 亚洲国产日日夜夜| 青青青伊人色综合久久| 国产一区二区免费在线| 99视频在线精品| 在线观看免费视频综合| 欧美一区二区精美| 国产精品高潮呻吟| 亚洲国产裸拍裸体视频在线观看乱了| 日韩成人av影视| 国产精品系列在线观看| 色爱区综合激月婷婷| 欧美一卡2卡3卡4卡| 国产日本欧美一区二区| 一区二区在线观看免费 | 国产精品美女久久久久久久久| 国产精品久久午夜夜伦鲁鲁| 亚洲一二三四在线| 久久精品二区亚洲w码| 国产mv日韩mv欧美| 555www色欧美视频| 1000部国产精品成人观看| 午夜精品在线视频一区| 成人免费视频视频在线观看免费| 欧美日韩一区二区三区不卡| 国产日韩视频一区二区三区| 亚洲国产另类av| 国产 欧美在线| 欧美一区二区视频在线观看2022| 国产精品天天摸av网| 日韩国产精品久久久久久亚洲| heyzo一本久久综合| 精品欧美乱码久久久久久| 亚洲精品视频在线观看网站| 国产福利视频一区二区三区| 欧美区一区二区三区| 亚洲视频在线一区观看| 韩国欧美国产1区| 欧美日韩不卡一区二区| 亚洲人123区| av成人老司机| 国产精品美女久久福利网站| 精品在线观看免费| 欧美精品v日韩精品v韩国精品v| 国产精品国产三级国产普通话蜜臀 | 日本午夜精品视频在线观看| 91视频国产观看| 亚洲人成在线观看一区二区| 国产精品一区二区果冻传媒| 欧美不卡在线视频| 青青草成人在线观看| 欧美亚洲愉拍一区二区| 亚洲日本va午夜在线影院| 国产成人小视频| 国产亚洲综合在线| 国内精品不卡在线| 亚洲精品一区在线观看| 国产麻豆视频一区| 久久视频一区二区| 国产毛片精品视频| 久久久久综合网| 国产精品91xxx| 欧美国产日韩亚洲一区| 国产91丝袜在线播放九色| 国产亚洲欧美一区在线观看| 国产成人免费视频网站 | 亚洲图片自拍偷拍| 欧美一a一片一级一片| 一区二区三区色| 欧美中文字幕亚洲一区二区va在线| 亚洲一区视频在线| 欧美精品在线观看播放| 免费观看成人鲁鲁鲁鲁鲁视频| 制服丝袜中文字幕亚洲| 秋霞成人午夜伦在线观看| 日韩久久免费av| 国产91精品一区二区| 日韩毛片视频在线看| 欧美亚洲国产一卡| 免播放器亚洲一区| 国产三级精品视频| 欧洲国内综合视频| 激情综合五月天| 国产精品第四页| 欧美猛男gaygay网站| 麻豆一区二区在线| 国产欧美日产一区| 欧美自拍偷拍一区| 国产在线视频精品一区| 亚洲黄色免费网站| 欧美大片在线观看一区| 91麻豆免费在线观看| 日韩精品欧美成人高清一区二区| 久久久蜜桃精品| 欧美熟乱第一页| 国产精品白丝av| 亚洲一区视频在线| 国产女主播在线一区二区| 欧美午夜精品理论片a级按摩| 国产精品自拍三区| 午夜欧美2019年伦理| 国产片一区二区三区| 91精品国产综合久久久久久漫画 | 国产精品白丝在线| 日韩一区二区在线免费观看| youjizz久久| 久久国产精品区| 亚洲一区二区三区中文字幕 | www.欧美日韩| 免费看欧美女人艹b| 亚洲国产精品自拍| 亚洲免费三区一区二区| 国产日韩欧美精品一区| 日韩欧美黄色影院| 欧美性大战久久久久久久| 成人av在线影院| 久久精品免费观看| 奇米精品一区二区三区在线观看一| 亚洲卡通动漫在线| 国产精品色噜噜| 久久精品一区二区| 亚洲精品在线免费播放| 日韩午夜在线播放| 6080亚洲精品一区二区| 色www精品视频在线观看| 波多野洁衣一区| 成人性色生活片免费看爆迷你毛片| 秋霞av亚洲一区二区三| 日韩高清在线不卡| 免费看精品久久片| 青草国产精品久久久久久| 亚洲不卡在线观看| 性欧美疯狂xxxxbbbb| 午夜精品福利一区二区三区av | 日韩一级片网站| 欧美精品乱码久久久久久按摩| 在线区一区二视频| 欧美图区在线视频| 欧美日韩国产乱码电影| 欧美电影在哪看比较好| 91精品婷婷国产综合久久竹菊| 欧美日韩国产高清一区二区三区| 欧美另类久久久品| 欧美一二三四在线| 久久美女艺术照精彩视频福利播放| 欧美一区二区视频在线观看2022 | 欧日韩精品视频| 91国产视频在线观看| 欧美日韩综合在线| 日韩一级高清毛片| 久久久综合视频| 国产精品美女www爽爽爽| 亚洲色图清纯唯美| 亚洲成a人片在线观看中文| 日韩二区三区四区| 国产一区二区三区国产| 9人人澡人人爽人人精品| 色八戒一区二区三区| 在线不卡中文字幕播放| 亚洲精品一区二区三区影院 | 久久精品国产亚洲高清剧情介绍| 老司机免费视频一区二区三区| 国产成人免费在线视频| 一本一本大道香蕉久在线精品| 欧洲激情一区二区| 精品久久久久久久久久久院品网| 国产色产综合色产在线视频 | 91精品国产91久久综合桃花| 日韩欧美电影一二三| 国产精品乱人伦中文| 午夜精品爽啪视频| 粉嫩av一区二区三区在线播放 | 色天天综合色天天久久| 欧美一级夜夜爽| 综合久久给合久久狠狠狠97色| 日韩精品成人一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 91麻豆6部合集magnet| 欧美tickling挠脚心丨vk| 亚洲日本丝袜连裤袜办公室| 精品一区二区三区在线观看| 99久久久久久| ww久久中文字幕| 视频一区二区三区入口| av网站免费线看精品| 精品福利一二区|