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

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

?? plugplay.cpp

?? 智能卡的讀寫程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	// (We can now be stopped or working)

	pdx->prevstate = pdx->state;
	pdx->state = PENDINGREMOVE;
	return DefaultPnpHandler(fdo, Irp);
	}							// HandleQueryRemove

///////////////////////////////////////////////////////////////////////////////

NTSTATUS HandleQueryStop(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
	{							// HandleQueryStop
	ASSERT(IoGetCurrentIrpStackLocation(Irp)->MinorFunction == IRP_MN_QUERY_STOP_DEVICE);
	Irp->IoStatus.Status = STATUS_SUCCESS;	// flag that we handled this IRP
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	
	// Boot devices may get this query before they even start, so check to see
	// if we're in the WORKING state before doing anything.

	if (pdx->state != WORKING)
		return DefaultPnpHandler(fdo, Irp);

	KdPrint((DRIVERNAME " - To PENDINGSTOP from %s\n", statenames[pdx->state]));
	pdx->state = PENDINGSTOP;
	return DefaultPnpHandler(fdo, Irp);
	}							// HandleQueryStop

///////////////////////////////////////////////////////////////////////////////

NTSTATUS HandleRemoveDevice(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
	{							// HandleRemoveDevice
	ASSERT(IoGetCurrentIrpStackLocation(Irp)->MinorFunction == IRP_MN_REMOVE_DEVICE);
	Irp->IoStatus.Status = STATUS_SUCCESS;	// flag that we handled this IRP
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	// Cancel any queued IRPs and start rejecting new ones

	// Disable all device interfaces. This triggers PnP notifications that will 
	// allow apps to close their handles.

	DeregisterAllInterfaces(pdx);

	// Release our I/O resources

	StopDevice(fdo, pdx->state == WORKING);

	KdPrint((DRIVERNAME " - To REMOVED from %s\n", statenames[pdx->state]));
	pdx->state = REMOVED;

	// Let lower-level drivers handle this request. Ignore whatever
	// result eventuates.

	NTSTATUS status = DefaultPnpHandler(fdo, Irp);

	// Wait for all claims against this device to vanish before removing
	// the device object.

	IoReleaseRemoveLockAndWait(&pdx->RemoveLock, Irp);

	// Remove the device object

	RemoveDevice(fdo);

	return status;				// lower-level completed IoStatus already
	}							// HandleRemoveDevice

///////////////////////////////////////////////////////////////////////////////

NTSTATUS HandleStartDevice(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
	{							// HandleStartDevice
	ASSERT(IoGetCurrentIrpStackLocation(Irp)->MinorFunction == IRP_MN_START_DEVICE);
	Irp->IoStatus.Status = STATUS_SUCCESS;	// flag that we handled this IRP
	NTSTATUS status = ForwardAndWait(fdo, Irp);
	if (!NT_SUCCESS(status))
		return CompleteRequest(Irp, status);

	PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	status = StartDevice(fdo);

	// While we were in the stopped state, we were stalling incoming requests.
	// Now we can release any pending IRPs and start processing new ones

	if (NT_SUCCESS(status))
		{						// started okay

		// Enable all registered device interfaces.

		EnableAllInterfaces(pdx, TRUE);

		KdPrint((DRIVERNAME " - To WORKING from %s\n", statenames[pdx->state]));
		pdx->state = WORKING;
		}						// started okay

	return CompleteRequest(Irp, status);
	}							// HandleStartDevice

///////////////////////////////////////////////////////////////////////////////	

NTSTATUS HandleStopDevice(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
	{							// HandleStopDevice
	ASSERT(IoGetCurrentIrpStackLocation(Irp)->MinorFunction == IRP_MN_STOP_DEVICE);
	Irp->IoStatus.Status = STATUS_SUCCESS;	// flag that we handled this IRP
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	// We're supposed to always get a query before we're stopped, so
	// we should already be in the PENDINGSTOP state. There's a Win98 bug that
	// can sometimes cause us to get a STOP instead of a REMOVE, in which case
	// we should start rejecting IRPs

	if (pdx->state != PENDINGSTOP)
		{						// no previous query
		KdPrint((DRIVERNAME " - STOP with no previous QUERY_STOP!\n"));
		}						// no previous query
	StopDevice(fdo, pdx->state == WORKING);
	KdPrint((DRIVERNAME " - To STOPPED from %s\n", statenames[pdx->state]));
	pdx->state = STOPPED;
	return DefaultPnpHandler(fdo, Irp);
	}							// HandleStopDevice

///////////////////////////////////////////////////////////////////////////////

NTSTATUS HandleSurpriseRemoval(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
	{							// HandleSurpriseRemoval
	ASSERT(IoGetCurrentIrpStackLocation(Irp)->MinorFunction == IRP_MN_SURPRISE_REMOVAL);
	Irp->IoStatus.Status = STATUS_SUCCESS;	// flag that we handled this IRP
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	// Cancel any queued IRPs and start rejecting new ones
	EnableAllInterfaces(pdx, FALSE);
	KdPrint((DRIVERNAME " - To SURPRISEREMOVED from %s\n", statenames[pdx->state]));

	BOOLEAN oktouch = pdx->state == WORKING;
	pdx->state = SURPRISEREMOVED;
	StopDevice(fdo, oktouch);

	return DefaultPnpHandler(fdo, Irp);
	}							// HandleSurpriseRemoval
	
///////////////////////////////////////////////////////////////////////////////
// AdjustDeviceCapabilities corrects the reported device capabilities to
// workaround the fact that many back-level bus drivers simply don't report
// them correctly. Cf. toaster.sys sample in the DDK and talk given by
// Adrian Oney (no relation) at WinHEC 2002.

#pragma PAGEDCODE

__inline SYSTEM_POWER_STATE& operator++(SYSTEM_POWER_STATE& ss) {ss = (SYSTEM_POWER_STATE) (ss + 1); return ss;}
__inline SYSTEM_POWER_STATE& operator--(SYSTEM_POWER_STATE& ss) {ss = (SYSTEM_POWER_STATE) (ss - 1); return ss;}

VOID AdjustDeviceCapabilities(PDEVICE_EXTENSION pdx, PDEVICE_CAPABILITIES pdc)
	{							// AdjustDeviceCapabilities

	// Adjust power capabilities to compensate for bus driver written to
	// WDM 1.0 spec. First infer D1 and D2 capabilities from S->D state map.

	for (SYSTEM_POWER_STATE sstate = PowerSystemSleeping1; sstate <= PowerSystemHibernate; ++sstate)
		{					// for each S-state
		if (pdc->DeviceState[sstate] == PowerDeviceD1)
			pdc->DeviceD1 = TRUE;
		if (pdc->DeviceState[sstate] == PowerDeviceD2)
			pdc->DeviceD2 = TRUE;
		}					// for each S-state

	// Set the WakeFromDx flags based on the reported DeviceWake state and
	// on the D-state corresponding to the reported SystemWake state

	AdjustWakeCapabilities(pdc, pdc->DeviceWake);
	if (pdc->SystemWake != PowerSystemUnspecified)
		AdjustWakeCapabilities(pdc, pdc->DeviceState[pdc->SystemWake]);

	// Find the deepest D-state from which this device can wake the system

	DEVICE_POWER_STATE wakestate = PowerDeviceD0;	// assume no wakeup capability

	if (pdc->WakeFromD3)
		wakestate = PowerDeviceD3;
	else if (pdc->WakeFromD2)
		wakestate = PowerDeviceD2;
	else if (pdc->WakeFromD1)
		wakestate = PowerDeviceD1;
	else if (pdc->WakeFromD0)
		wakestate = PowerDeviceD0;

	// If SystemWake is specified, the corresponding D-state had better be at
	// least as powered as the state we just discovered, or else there's a bug
	// in our bus driver...

	if (pdc->SystemWake != PowerSystemUnspecified)
		{
		ASSERT(pdc->DeviceState[pdc->SystemWake] <= wakestate);
		}

	// If SystemWake wasn't specified, infer it from the S->D state map by
	// finding the lowest S-state whose D-state is at least as powered as the
	// lowest D-state from which wakeup is possible (I think I got that right...)

	else if (wakestate != PowerDeviceD0 && wakestate != PowerDeviceUnspecified)
		{						// infer system wake state
		for (sstate = PowerSystemSleeping3; sstate >= PowerSystemWorking; --sstate)
			{					// for each S-state
			if (pdc->DeviceState[sstate] != PowerDeviceUnspecified
				&& pdc->DeviceState[sstate] <= wakestate)
				{				// found the S-state
				KdPrint((DRIVERNAME " - Inferring that wakeup from S%d state possible\n", sstate - 1));
				pdc->SystemWake = sstate;
				break;
				}				// found the S-state
			}					// for each S-state
		}						// infer system wake state
	}							// AdjustDeviceCapabilities

///////////////////////////////////////////////////////////////////////////////
// AdjustWakeCapabilities adjusts the wakeup capabilities for a device.	

VOID AdjustWakeCapabilities(PDEVICE_CAPABILITIES pdc, DEVICE_POWER_STATE dstate)
	{							// AdjustWakeCapabilities
	switch (dstate)
		{						// select on D-state
	case PowerDeviceUnspecified:
		break;
	case PowerDeviceD0:
		pdc->WakeFromD0 = TRUE;
		break;
	case PowerDeviceD1:
		pdc->DeviceD1 = TRUE;
		pdc->WakeFromD1 = TRUE;
		break;
	case PowerDeviceD2:
		pdc->DeviceD2 = TRUE;
		pdc->WakeFromD2 = TRUE;
		break;
	case PowerDeviceD3:
		pdc->WakeFromD3 = TRUE;
		break;
	default:
		ASSERT(FALSE);
		}						// select on D-state
	}							// AdjustWakeCapabilities

///////////////////////////////////////////////////////////////////////////////	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品欧美极品| 国产精品一区二区果冻传媒| 午夜久久久久久| 精品写真视频在线观看| 欧美性色黄大片| 国产精品嫩草99a| 日韩成人精品在线观看| 99久久久国产精品| 久久九九久精品国产免费直播| 亚洲影院免费观看| 不卡一区二区在线| 2017欧美狠狠色| 性欧美疯狂xxxxbbbb| 成人一区二区三区视频在线观看 | 国产大陆亚洲精品国产| 精品视频在线看| 亚洲精品国产成人久久av盗摄| 国产一区在线看| 日韩欧美一级二级三级| 午夜国产不卡在线观看视频| 91看片淫黄大片一级在线观看| 久久久国际精品| 久久国产乱子精品免费女| 69堂国产成人免费视频| 亚洲午夜影视影院在线观看| 91在线一区二区三区| 中文字幕成人av| 成人白浆超碰人人人人| 国产欧美日韩久久| 国产伦精一区二区三区| 亚洲精品一区二区三区影院| 免费观看在线综合色| 欧美日韩久久一区| 亚洲成av人影院| 欧美色涩在线第一页| 一区二区在线免费| 91老师片黄在线观看| 亚洲欧美二区三区| 91看片淫黄大片一级在线观看| 自拍偷拍国产亚洲| 91免费观看国产| 亚洲欧美日韩一区二区| 久久蜜桃av一区精品变态类天堂| 日韩精品乱码免费| 日韩亚洲欧美综合| 麻豆精品视频在线观看| 日韩欧美资源站| 国产乱码精品一品二品| 国产日韩欧美精品一区| jvid福利写真一区二区三区| 亚洲久本草在线中文字幕| 在线观看亚洲精品| 青娱乐精品视频| 日本一区二区三区高清不卡| 9l国产精品久久久久麻豆| 亚洲视频在线一区| 欧美日韩免费一区二区三区| 日韩中文字幕区一区有砖一区| 欧美久久一区二区| 久久精品国产99| 2欧美一区二区三区在线观看视频| 久久精品国产成人一区二区三区| 精品国产免费久久| 成人v精品蜜桃久久一区| 亚洲久草在线视频| 欧美一区二区久久| 国产精品99久久久久久似苏梦涵| 亚洲美女屁股眼交| 日韩欧美高清一区| jizzjizzjizz欧美| 日韩电影在线观看一区| 国产女人aaa级久久久级| 欧美视频在线一区二区三区| 国精品**一区二区三区在线蜜桃| 亚洲品质自拍视频网站| 在线不卡中文字幕播放| 成人福利视频在线| 亚洲一区在线电影| 欧美tickle裸体挠脚心vk| 99re热这里只有精品免费视频| 日本一区中文字幕| 成人免费视频在线观看| 日韩欧美色综合网站| 91欧美一区二区| 久久91精品久久久久久秒播| 亚洲人成精品久久久久| 久久久久免费观看| 欧美日韩aaa| 一本大道久久精品懂色aⅴ| 另类小说欧美激情| 一区二区三区在线视频观看58| 欧美精品一区视频| 欧美精品一二三四| 色综合中文字幕国产| 看电影不卡的网站| 亚洲国产日韩精品| 日韩美女视频一区二区| 久久一区二区视频| 日韩一区二区视频在线观看| 色94色欧美sute亚洲线路一ni| 国产美女一区二区| 久久精品国产免费| 麻豆精品一区二区综合av| 一区二区三区成人| 亚洲视频一二三区| 亚洲欧洲www| 中文字幕免费观看一区| 久久亚洲精品国产精品紫薇| 日韩一区二区电影在线| 欧美三级韩国三级日本一级| 在线免费视频一区二区| 欧洲人成人精品| 欧美私人免费视频| 色国产综合视频| 91国偷自产一区二区使用方法| 成人av免费观看| 成人自拍视频在线| 成人激情开心网| 成人精品gif动图一区| 成人福利在线看| 94-欧美-setu| 91福利视频久久久久| 在线亚洲一区观看| 欧美视频第二页| 欧美精品粉嫩高潮一区二区| 欧美日韩精品系列| 7777精品伊人久久久大香线蕉经典版下载 | 日韩精品最新网址| 欧美成人在线直播| 久久人人97超碰com| 国产精品私房写真福利视频| 国产精品网曝门| 亚洲日本va午夜在线影院| 亚洲免费观看高清完整版在线 | 色哟哟国产精品免费观看| 91偷拍与自偷拍精品| 欧美三级电影在线观看| 91精品久久久久久久久99蜜臂| 欧美一级夜夜爽| 国产三级久久久| 一区二区三区四区不卡在线 | 欧美性做爰猛烈叫床潮| 欧美日韩精品一区视频| 精品国产百合女同互慰| 国产精品人成在线观看免费 | 日本一区免费视频| 亚洲欧美日韩国产手机在线| 亚洲sss视频在线视频| 国产真实乱对白精彩久久| 91在线观看高清| 日韩精品一区二区三区中文精品| 久久久久免费观看| 亚洲免费电影在线| 美女久久久精品| www.亚洲色图.com| 欧美精品久久99久久在免费线| 精品噜噜噜噜久久久久久久久试看| 中文字幕欧美日本乱码一线二线| 亚洲在线成人精品| 国产成人午夜电影网| 欧美日韩国产精选| 国产精品麻豆一区二区| 爽爽淫人综合网网站| 国产不卡在线播放| 91精品国产一区二区| 国产精品免费aⅴ片在线观看| 亚洲高清中文字幕| 成人午夜免费电影| 欧美色综合天天久久综合精品| 欧美一区二区三区视频| 亚洲欧洲三级电影| 国产精品亚洲成人| 欧美一级电影网站| 亚洲一区二区三区四区五区中文| 韩国理伦片一区二区三区在线播放 | 欧美亚洲一区二区在线| 国产亚洲精品久| 日韩精品一二区| 在线视频一区二区三| 国产精品久久网站| 国产一区二区三区在线观看免费 | proumb性欧美在线观看| 日韩精品一区二区三区蜜臀| 亚洲成av人片在www色猫咪| 懂色中文一区二区在线播放| 欧美va亚洲va在线观看蝴蝶网| 亚洲五码中文字幕| 日本精品一区二区三区高清| 中日韩av电影| 成人激情av网| 久久综合九色综合欧美亚洲| 蜜臀精品一区二区三区在线观看 | 一区二区三区国产| av网站免费线看精品| 欧美激情资源网| 国产99久久久久| 久久精品一区八戒影视| 国产精品一级黄| 国产日韩欧美不卡在线| 国产精品中文有码|