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

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

?? driverentry.cpp

?? 一本在講述USB驅動程式的書 及其范例原碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
						result = FALSE;
						}		// found higher version
					else
						KdPrint((DRIVERNAME " - Overriding WDMSTUB clone version %d.%2.2d\n", version >> 16, version & 0xFFFF));
					}			// check version #
				else
					KdPrint((DRIVERNAME " - IOCTL_INTERNAL_WDMSTUB_GET_VERSION failed to %ws - %X\n", devname, status));
				}				// send IRP

			// Dereference the file object to release our hold on the clone device object

			ObDereferenceObject(fop);
			}					// found a clone

		// If there's no device object by this name, remember the index for when we need to create our own
		// device object

		else if (avail == 0xFFFFFFFF)
			avail = index;
		}						// for each possible driver index

	// Check the result of the version comparisons

	if (!result)
		return FALSE;

	// We have decided to stub some functions. Create a dummy device object so
	// other clones can find us. Also take an extra reference to the driver object
	// to pin us into memory -- some other WDM driver may end up using one of our
	// stubs

	if (avail == 0xFFFFFFFF)
		{
		KdPrint((DRIVERNAME " - More than 100 WDMSTUB clones are loaded in this system!\n"));
		return FALSE;
		}

	_snwprintf(namebuf, arraysize(namebuf), L"\\Device\\WDMSTUB%d", avail);
	RtlInitUnicodeString(&devname, namebuf);

	status = IoCreateDevice(DriverObject, sizeof(DUMMY_DEVICE_EXTENSION), &devname, FILE_DEVICE_UNKNOWN, 0, FALSE, &DummyDeviceObject);
	if (!NT_SUCCESS(status))
		{
		KdPrint((DRIVERNAME " - IoCreateDevice failed - %X\n", status));
		return FALSE;
		}

	ObReferenceObject(DriverObject);	// pin this driver into memory forever

	// Initialize the dummy device extension so IRP dispatch functions can distinguish between this
	// and a layered device object

	PDUMMY_DEVICE_EXTENSION ddx = (PDUMMY_DEVICE_EXTENSION) DummyDeviceObject->DeviceExtension;
	ddx->flags |= DUMMY_DEVICE_FLAG;

	return TRUE;
	}							// CheckCloneVersions

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

#pragma LOCKEDCODE

NTSTATUS CompleteRequest(IN PIRP Irp, IN NTSTATUS status, IN ULONG_PTR info)
	{							// CompleteRequest
	Irp->IoStatus.Status = status;
	Irp->IoStatus.Information = info;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return status;
	}							// CompleteRequest

NTSTATUS CompleteRequest(IN PIRP Irp, IN NTSTATUS status)
	{							// CompleteRequest
	Irp->IoStatus.Status = status;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return status;
	}							// CompleteRequest

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

#pragma LOCKEDCODE				// make no assumptions about pageability of dispatch fcns

NTSTATUS DispatchAny(IN PDEVICE_OBJECT fido, IN PIRP Irp)
	{							// DispatchAny
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fido->DeviceExtension;
	
	// Fail any IRPs addressed to the dummy device object other than CREATE and CLOSE

	if (pdx->flags & DUMMY_DEVICE_FLAG)
		{						// IRP for dummy device
		PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
		NTSTATUS status = STATUS_INVALID_DEVICE_REQUEST;
		if (stack->MajorFunction == IRP_MJ_CREATE || stack->MajorFunction == IRP_MJ_CLOSE)
			status = STATUS_SUCCESS;
		return CompleteRequest(Irp, status);
		}						// IRP for dummy device

	// Pass down IRPs addressed to the FiDO

	IoSkipCurrentIrpStackLocation(Irp);
	return IoCallDriver(pdx->LowerDeviceObject, Irp);
	}							// DispatchAny

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

NTSTATUS DispatchInternalControl(PDEVICE_OBJECT dummy, PIRP Irp)
	{							// DispatchInternalControl
	PDUMMY_DEVICE_EXTENSION ddx = (PDUMMY_DEVICE_EXTENSION) dummy->DeviceExtension;
	if (!(ddx->flags & DUMMY_DEVICE_FLAG))
		{						// not for us
		IoSkipCurrentIrpStackLocation(Irp);
		return IoCallDriver(((PDEVICE_EXTENSION)(ddx))->LowerDeviceObject, Irp);
		}						// not for us

	NTSTATUS status;
	ULONG info = 0;
	
	PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
	ULONG code = stack->Parameters.DeviceIoControl.IoControlCode;
	ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength;
	ULONG cbout = stack->Parameters.DeviceIoControl.OutputBufferLength;

	switch (code)
		{						// process internal control operation

	// Version query: return the version number of this driver

	case IOCTL_INTERNAL_WDMSTUB_GET_VERSION:
		if (cbout < sizeof(ULONG))
			{					// wrong output buffer length
			status = STATUS_INVALID_PARAMETER;
			break;
			}					// wrong output buffer length
		*(PULONG)(Irp->UserBuffer) = (VERMAJOR << 16) | VERMINOR;
		info = sizeof(ULONG);
		status = STATUS_SUCCESS;
		break;

	default:
		status = STATUS_INVALID_DEVICE_REQUEST;
		break;
		}						// process internal control operation

	return CompleteRequest(Irp, status, info);
	}							// DispatchInternalControl

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

#pragma LOCKEDCODE

NTSTATUS DispatchPower(IN PDEVICE_OBJECT fido, IN PIRP Irp)
	{							// DispatchPower
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fido->DeviceExtension;
	PoStartNextPowerIrp(Irp);	// must be done while we own the IRP

	if (pdx->flags & DUMMY_DEVICE_FLAG)
		return CompleteRequest(Irp, STATUS_SUCCESS);	// shouldn't happen in the 1st place

	IoSkipCurrentIrpStackLocation(Irp);
	return PoCallDriver(pdx->LowerDeviceObject, Irp);
	}							// DispatchPower

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

#pragma LOCKEDCODE

NTSTATUS DispatchPnp(IN PDEVICE_OBJECT fido, IN PIRP Irp)
	{							// DispatchPnp
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fido->DeviceExtension;

	// The dummy device shouldn't get any PnP IRPs

	if (pdx->flags & DUMMY_DEVICE_FLAG)
		return CompleteRequest(Irp, STATUS_SUCCESS);	// don't change Information field

	// Pass down PnP request 

	PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
	ULONG fcn = stack->MinorFunction;

	NTSTATUS status;

	IoSkipCurrentIrpStackLocation(Irp);
	status = IoCallDriver(pdx->LowerDeviceObject, Irp);

	if (fcn == IRP_MN_REMOVE_DEVICE)
		RemoveDevice(fido);

	return status;
	}							// DispatchPnp

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

#pragma PAGEDCODE

VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
	{							// DriverUnload
	PAGED_CODE();

	// Delete our dummy device object

	if (DummyDeviceObject)
		IoDeleteDevice(DummyDeviceObject);

	// It should not be possible for this driver to be unloaded if we defined
	// any stubs. Don't preclude this, though, because there may be some future
	// mechanism that would make this safe.

	if (StubsDefined)
		UndefineStubs();
	}							// DriverUnload

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

#pragma PAGEDCODE

VOID RemoveDevice(IN PDEVICE_OBJECT fdo)
	{							// RemoveDevice
	PAGED_CODE();
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	ASSERT(!(pdx->flags & DUMMY_DEVICE_FLAG));	// shouldn't be possible
	NTSTATUS status;

	if (pdx->LowerDeviceObject)
		IoDetachDevice(pdx->LowerDeviceObject);

	IoDeleteDevice(fdo);
	}							// RemoveDevice

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

#pragma INITCODE

BOOLEAN IsWin98()
	{							// IsWin98
#ifdef _X86_

	// Windows 98 (including 2d ed) supports WDM version 1.0, whereas Win2K
	// supports 1.10.

	return !IoIsWdmVersionAvailable(1, 0x10);
#else // not _X86_
	return FALSE;
#endif // not _X86_
	}							// IsWin98

#pragma LOCKEDCODE				// force inline functions into locked code

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人在线一区| 国产午夜精品一区二区三区四区| 成人av免费网站| 色美美综合视频| 日韩视频免费观看高清完整版在线观看| 制服丝袜中文字幕亚洲| 国产欧美日韩中文久久| 亚洲不卡av一区二区三区| 国产一区二区成人久久免费影院| 成人网男人的天堂| 久久精品人人做人人爽97| 国产白丝精品91爽爽久久| 欧美午夜在线一二页| 国产精品福利电影一区二区三区四区| 日产精品久久久久久久性色| 精品国产sm最大网站免费看| 国产很黄免费观看久久| 在线中文字幕一区二区| 美女一区二区在线观看| 欧美日韩你懂的| 亚洲成人精品在线观看| 2021中文字幕一区亚洲| 日韩1区2区日韩1区2区| 一区二区三区日韩在线观看| 成人免费看视频| 国产在线一区二区| 欧美经典一区二区| 国产成人av网站| 国产一区二区调教| 麻豆极品一区二区三区| 日本色综合中文字幕| 亚洲国产日韩精品| 欧美岛国在线观看| 欧洲国内综合视频| 亚洲乱码国产乱码精品精98午夜 | 午夜精品视频一区| 欧洲另类一二三四区| 99re这里都是精品| 亚洲精品国产无天堂网2021| 国产精品嫩草99a| 色综合天天做天天爱| 亚洲香肠在线观看| 亚洲天堂免费看| 色婷婷av一区二区三区大白胸| 一区二区三区不卡视频| 亚洲天天做日日做天天谢日日欢| 欧美激情在线一区二区三区| 中文字幕一区二区三区不卡| 91在线高清观看| 午夜精品久久一牛影视| 日本麻豆一区二区三区视频| 美脚の诱脚舐め脚责91 | 欧美成人女星排名| 色吊一区二区三区| 欧美日韩aaaaa| 91免费小视频| 欧美一区二区在线视频| 粉嫩av一区二区三区粉嫩 | 亚洲精品在线电影| 国产精品欧美一区喷水| 亚洲人快播电影网| 日韩欧美中文一区二区| 欧美一级专区免费大片| 日韩视频在线一区二区| 欧美tickling挠脚心丨vk| 日韩欧美一级片| 中文字幕亚洲不卡| 亚洲午夜羞羞片| 国产xxx精品视频大全| 欧美区在线观看| 中文字幕中文字幕在线一区 | 国产精品夫妻自拍| 蜜桃视频在线一区| 欧美无砖专区一中文字| 国产精品福利影院| 一区二区三区四区五区视频在线观看 | 91麻豆精品91久久久久久清纯| 日韩免费观看高清完整版| 亚洲色图欧美激情| 粉嫩久久99精品久久久久久夜| 在线成人av网站| 欧美日韩一级视频| 亚洲视频一区二区在线观看| 国产福利一区二区三区视频在线 | 国产精品久久久一本精品 | 精品三级在线看| 免费观看日韩av| 成人h版在线观看| 国产精品午夜免费| 丁香激情综合国产| 国产精品全国免费观看高清| 国产成人在线免费观看| 国产日产亚洲精品系列| 国产成人免费xxxxxxxx| 2021久久国产精品不只是精品| 毛片av一区二区| 久久久不卡网国产精品一区| 一卡二卡欧美日韩| 欧美精品黑人性xxxx| 日韩精品一级中文字幕精品视频免费观看 | 亚洲一区视频在线| 国产乱色国产精品免费视频| aa级大片欧美| 久久综合色天天久久综合图片| 成人av免费观看| 亚洲一区二区精品久久av| 精品视频一区三区九区| 麻豆精品视频在线| 国产精品久久久久久久久久久免费看 | 欧美日韩精品一区二区三区四区| 亚洲日本欧美天堂| 欧美卡1卡2卡| 国产98色在线|日韩| 一区二区三区中文字幕精品精品 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲精品中文字幕在线观看| 欧美伦理影视网| 国产精品一区一区三区| 一区二区高清视频在线观看| 日韩免费观看高清完整版 | 亚洲黄色av一区| 欧美一卡2卡3卡4卡| 在线一区二区三区做爰视频网站| 日本伊人午夜精品| 一区二区三区电影在线播| 国产视频视频一区| 亚洲国产精品v| 日韩午夜激情av| 在线一区二区三区| 色综合天天综合网天天看片| 久久99国产精品尤物| 91精品国产综合久久久久久| av在线播放一区二区三区| 国产精品一区不卡| 黑人巨大精品欧美黑白配亚洲| 亚洲国产婷婷综合在线精品| 中文字幕在线观看一区二区| 久久久久久黄色| 久久众筹精品私拍模特| 久久久亚洲精品一区二区三区| 91麻豆精品国产91久久久| 欧美日本一区二区在线观看| 91久久精品一区二区二区| 91社区在线播放| 欧美疯狂性受xxxxx喷水图片| 色女孩综合影院| 欧美日韩免费一区二区三区| 色婷婷精品大在线视频| 欧美色图激情小说| 欧美精三区欧美精三区| 成人欧美一区二区三区视频网页 | 亚洲婷婷综合久久一本伊一区| 国产精品久久久久三级| 亚洲欧美激情视频在线观看一区二区三区 | 99久久99久久免费精品蜜臀| 91蜜桃婷婷狠狠久久综合9色| 91视频免费看| 欧美xingq一区二区| 国产蜜臀97一区二区三区| 日韩一区欧美小说| 日韩二区三区四区| 成人小视频在线| 欧美亚洲国产bt| 久久先锋影音av鲁色资源| 中文字幕在线一区| 奇米777欧美一区二区| 大尺度一区二区| 欧美人与性动xxxx| 久久久国产精品麻豆| 丝袜诱惑亚洲看片| 成人丝袜18视频在线观看| 91精品在线一区二区| 国产精品久线在线观看| 久久超碰97人人做人人爱| 亚洲国产精品一区二区久久| 国产精品美女久久久久av爽李琼| 日本一区二区三区电影| 香港成人在线视频| 欧美午夜精品一区二区三区| 精品成人在线观看| 午夜国产精品一区| 一本大道久久a久久综合| 国产欧美精品一区aⅴ影院| 亚洲电影在线播放| 在线观看一区日韩| 亚洲蜜桃精久久久久久久| 高清不卡一区二区在线| 亚洲四区在线观看| 黑人巨大精品欧美黑白配亚洲| 日韩午夜激情视频| 蜜臀久久久99精品久久久久久| 欧美日韩国产首页| 亚洲国产日韩一级| 欧美日韩一区成人| 午夜精品久久久久久久久| 欧美精品777| 蜜臀99久久精品久久久久久软件| 欧美酷刑日本凌虐凌虐| 久久99久久久久| 久久久久久99精品|