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

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

?? driverentry.cpp

?? WDM驅動程序參考例子,windows DDK編寫.
?? CPP
字號:
// Main program for ioctl driver

// Copyright (C) 1999 by Walter Oney

// All rights reserved



#include "stddcls.h"

#include "driver.h"



NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo);

VOID DriverUnload(IN PDRIVER_OBJECT fdo);



BOOLEAN win98 = FALSE;



UNICODE_STRING servkey;



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



#pragma PAGEDCODE



extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,

	IN PUNICODE_STRING RegistryPath)

	{							// DriverEntry

	KdPrint((DRIVERNAME " - Entering DriverEntry: DriverObject %8.8lX\n", DriverObject));



	// Insist that OS support at least the WDM level of the DDK we use



	if (!IoIsWdmVersionAvailable(1, 0))

		{

		KdPrint((DRIVERNAME " - Expected version of WDM (%d.%2.2d) not available\n", 1, 0));

		return STATUS_UNSUCCESSFUL;

		}



	// See if we're running under Win98 or NT:



	win98 = IsWin98();



#if DBG

	if (win98)

		KdPrint((DRIVERNAME " - Running under Windows 98\n"));

	else

		KdPrint((DRIVERNAME " - Running under NT\n"));

#endif



	// Save the name of the service key



	servkey.Buffer = (PWSTR) ExAllocatePool(PagedPool, RegistryPath->Length + sizeof(WCHAR));

	if (!servkey.Buffer)

		{

		KdPrint((DRIVERNAME " - Unable to allocate %d bytes for copy of service key name\n", RegistryPath->Length + sizeof(WCHAR)));

		return STATUS_INSUFFICIENT_RESOURCES;

		}

	servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR);

	RtlCopyUnicodeString(&servkey, RegistryPath);

	servkey.Buffer[RegistryPath->Length / 2] = 0;



	// Initialize function pointers



	DriverObject->DriverUnload = DriverUnload;

	DriverObject->DriverExtension->AddDevice = AddDevice;



	DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;

	DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;

	DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchControl;

	DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;

	DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;

	DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = DispatchWmi;

	

	return STATUS_SUCCESS;

	}							// DriverEntry



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



#pragma PAGEDCODE



VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)

	{							// DriverUnload

	PAGED_CODE();

	DBG_UNREFERENCED_LOCAL_VARIABLE(DriverObject);

	KdPrint((DRIVERNAME " - Entering DriverUnload: DriverObject %8.8lX\n", DriverObject));

	RtlFreeUnicodeString(&servkey);

	}							// DriverUnload



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



NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo)

	{							// AddDevice

	PAGED_CODE();

	KdPrint((DRIVERNAME " - Entering AddDevice: DriverObject %8.8lX, pdo %8.8lX\n", DriverObject, pdo));



	NTSTATUS status;



	// Create a function device object to represent the hardware we're managing.



	PDEVICE_OBJECT fdo;

	

	ULONG dxsize = (sizeof(DEVICE_EXTENSION) + 7) & ~7;

	ULONG xsize = dxsize + GetSizeofGenericExtension();

	

	UNICODE_STRING devname;

	RtlInitUnicodeString(&devname, L"\\DosDevices\\IOCTL");



	status = IoCreateDevice(DriverObject, xsize, &devname,

		FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &fdo);

	if (!NT_SUCCESS(status))

		{						// can't create device object

		KdPrint((DRIVERNAME " - IoCreateDevice failed - %X\n", status));

		return status;

		}						// can't create device object

	

	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;



	// From this point forward, any error will have side effects that need to

	// be cleaned up.



	do

		{						// finish initialization

		pdx->DeviceObject = fdo;

		pdx->Pdo = pdo;



		// Make a copy of the device name



		pdx->devname.Buffer = (PWCHAR) ExAllocatePool(NonPagedPool, devname.MaximumLength);

		if (!pdx->devname.Buffer)

			{					// can't allocate buffer

			status = STATUS_INSUFFICIENT_RESOURCES;

			KdPrint((DRIVERNAME " - Unable to allocate %d bytes for copy of name\n", devname.MaximumLength));

			break;;

			}					// can't allocate buffer

		pdx->devname.MaximumLength = devname.MaximumLength;

		RtlCopyUnicodeString(&pdx->devname, &devname);



		// Link our device object into the stack leading to the PDO

		

		pdx->LowerDeviceObject = IoAttachDeviceToDeviceStack(fdo, pdo);

		if (!pdx->LowerDeviceObject)

			{					// can't attach								 

			KdPrint((DRIVERNAME " - IoAttachDeviceToDeviceStack failed\n"));

			status = STATUS_DEVICE_REMOVED;

			break;;

			}					// can't attach



		// Initialize to use the GENERIC.SYS library



		pdx->pgx = (PGENERIC_EXTENSION) ((PUCHAR) pdx + dxsize);



		GENERIC_INIT_STRUCT gis = {sizeof(GENERIC_INIT_STRUCT)};

		gis.DeviceObject = fdo;

		gis.Pdo = pdo;

		gis.Ldo = pdx->LowerDeviceObject;

		gis.RemoveLock = &pdx->RemoveLock;

		gis.StartDevice = StartDevice;

		gis.StopDevice = StopDevice;

		gis.RemoveDevice = RemoveDevice;

		RtlInitUnicodeString(&gis.DebugName, LDRIVERNAME);



		status = InitializeGenericExtension(pdx->pgx, &gis);

		if (!NT_SUCCESS(status))

			{

			KdPrint((DRIVERNAME " - InitializeGenericExtension failed - %X\n", status));

			break;;

			}



		// Clear the "initializing" flag so that we can get IRPs



		fdo->Flags &= ~DO_DEVICE_INITIALIZING;

		}						// finish initialization

	while (FALSE);



	if (!NT_SUCCESS(status))

		{					// need to cleanup

		if (pdx->devname.Buffer)

			RtlFreeUnicodeString(&pdx->devname);

		if (pdx->LowerDeviceObject)

			IoDetachDevice(pdx->LowerDeviceObject);

		IoDeleteDevice(fdo);

		}					// need to cleanup



	return status;

	}							// AddDevice



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



#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



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



#pragma PAGEDCODE



NTSTATUS DispatchPnp(PDEVICE_OBJECT fdo, PIRP Irp)

	{							// DispatchPnp

	PAGED_CODE();

	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	return GenericDispatchPnp(pdx->pgx, Irp);

	}							// DispatchPnp



NTSTATUS DispatchPower(PDEVICE_OBJECT fdo, PIRP Irp)

	{							// DispatchPower

	PAGED_CODE();

	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	return GenericDispatchPower(pdx->pgx, Irp);

	}							// DispatchPower



NTSTATUS DispatchWmi(PDEVICE_OBJECT fdo, PIRP Irp)

	{							// DispatchWmi

	PAGED_CODE();

	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	IoSkipCurrentIrpStackLocation(Irp);

	return IoCallDriver(pdx->LowerDeviceObject, Irp);

	}							// DispatchWmi



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



#pragma PAGEDCODE



VOID RemoveDevice(IN PDEVICE_OBJECT fdo)

	{							// RemoveDevice

	PAGED_CODE();

	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;



	RtlFreeUnicodeString(&pdx->devname);



	if (pdx->LowerDeviceObject)

		IoDetachDevice(pdx->LowerDeviceObject);



	IoDeleteDevice(fdo);

	}							// RemoveDevice



#pragma LOCKEDCODE				// force inline functions into locked code

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女在线观看一区| 91麻豆免费观看| 舔着乳尖日韩一区| ㊣最新国产の精品bt伙计久久| 久久综合久色欧美综合狠狠| 日韩三级精品电影久久久| 欧美精品自拍偷拍| 91麻豆精品国产91久久久久久 | 欧美私模裸体表演在线观看| 91蜜桃免费观看视频| 91在线精品一区二区| 99精品视频在线观看| 97国产精品videossex| 91免费观看国产| 日本黄色一区二区| 欧美日韩精品免费观看视频| 欧美老肥妇做.爰bbww视频| 欧美电影在线免费观看| 91精品国产综合久久久蜜臀粉嫩| 7777精品伊人久久久大香线蕉经典版下载 | av在线不卡电影| 91麻豆自制传媒国产之光| 在线中文字幕一区二区| 欧美精品亚洲二区| 日韩一级片在线播放| 欧美大胆一级视频| 精品播放一区二区| 国产精品女主播av| 一区二区三区欧美亚洲| 视频一区二区国产| 国产乱妇无码大片在线观看| aaa欧美大片| 欧美日韩一区不卡| 精品久久久久一区| 日本怡春院一区二区| 麻豆精品国产传媒mv男同| 国产精品系列在线播放| 91免费视频大全| 欧美妇女性影城| 久久精品视频一区| 亚洲人成亚洲人成在线观看图片| 亚洲国产美国国产综合一区二区| 日韩va欧美va亚洲va久久| 国产乱子伦视频一区二区三区 | 国产成人精品影院| 成人精品电影在线观看| 欧美在线一区二区三区| 日韩视频123| 亚洲视频资源在线| 亚洲成a人v欧美综合天堂| 精品一区二区免费视频| 972aa.com艺术欧美| 日韩天堂在线观看| 成人欧美一区二区三区在线播放| 亚洲图片欧美色图| 国产精品99精品久久免费| 欧美丝袜丝交足nylons图片| 久久夜色精品国产噜噜av| 亚洲综合成人在线| 国产高清久久久久| 91.xcao| 日韩美女视频一区二区| 男人的j进女人的j一区| 91原创在线视频| 26uuu久久综合| 亚洲成人激情综合网| 成人精品国产一区二区4080| 欧美一级一区二区| 亚洲精品中文字幕在线观看| 国产美女精品人人做人人爽| 欧美日韩高清影院| 亚洲色图.com| 国产毛片精品一区| 日韩欧美国产1| 亚洲高清久久久| 91一区二区三区在线播放| 精品国产成人系列| 日本美女视频一区二区| 99riav久久精品riav| 欧美精品一区二区三| 日韩成人dvd| 久久九九全国免费| 婷婷一区二区三区| 在线观看日韩毛片| 亚洲欧洲国产专区| 高清国产一区二区三区| 精品久久人人做人人爽| 日本亚洲欧美天堂免费| 欧美日韩亚州综合| 亚洲精品乱码久久久久久久久| 国产成人a级片| 欧美大片一区二区| 蜜桃免费网站一区二区三区| 欧美片网站yy| 亚洲成人午夜影院| 欧美午夜电影在线播放| 一级特黄大欧美久久久| 91亚洲国产成人精品一区二区三| 亚洲国产精品精华液ab| 国产成人av一区| 2022国产精品视频| 狠狠狠色丁香婷婷综合久久五月| 91精品国产综合久久久久久 | 国产精品一区在线| 精品日韩欧美在线| 韩国视频一区二区| 精品国精品国产尤物美女| 麻豆一区二区在线| 日韩一区二区三区高清免费看看| 日韩 欧美一区二区三区| 欧美老肥妇做.爰bbww视频| 午夜电影久久久| 欧美剧情片在线观看| 日韩不卡免费视频| 日韩欧美国产午夜精品| 捆绑调教美女网站视频一区| 精品剧情在线观看| 国产高清一区日本| 国产精品三级视频| 色综合久久88色综合天天免费| 亚洲欧洲成人自拍| 91成人网在线| 日本午夜精品视频在线观看| 日韩视频一区二区三区| 国产在线观看一区二区| 日本一区二区不卡视频| 一本色道综合亚洲| 亚洲第一成人在线| 日韩欧美的一区二区| 国产主播一区二区| 中文字幕不卡一区| 色综合久久综合网97色综合| 亚洲自拍另类综合| 日韩欧美一级二级三级久久久| 一本色道久久综合狠狠躁的推荐 | 毛片基地黄久久久久久天堂| 精品国产伦一区二区三区观看方式| 韩国欧美国产一区| 国产精品理论片| 欧美曰成人黄网| 免费成人美女在线观看| 中文字幕免费不卡| 欧美日韩卡一卡二| 国产在线视频精品一区| 中文字幕在线一区| 欧美色欧美亚洲另类二区| 久久电影网电视剧免费观看| 国产精品久久网站| 在线观看91av| 成人教育av在线| 日韩成人免费电影| 国产精品免费网站在线观看| 欧美色图第一页| 国产高清不卡一区| 午夜亚洲国产au精品一区二区| 精品国产乱码久久久久久牛牛| 成人av免费在线| 免费不卡在线视频| 亚洲柠檬福利资源导航| 欧美tickling挠脚心丨vk| 91亚洲精华国产精华精华液| 蜜臀av性久久久久蜜臀aⅴ| 成人欧美一区二区三区| 日韩欧美一级二级| 色诱视频网站一区| 国产精品77777竹菊影视小说| 亚洲主播在线播放| 国产喂奶挤奶一区二区三区| 欧美日本精品一区二区三区| 成+人+亚洲+综合天堂| 免费在线观看成人| 一个色综合网站| 中文字幕不卡在线| 精品国产伦一区二区三区观看方式| 在线免费一区三区| 国产91丝袜在线观看| 丝瓜av网站精品一区二区| 国产精品日日摸夜夜摸av| 日韩欧美视频在线 | 亚洲精品老司机| 久久精品日产第一区二区三区高清版 | 精品影视av免费| 天堂av在线一区| 夜色激情一区二区| 亚洲特黄一级片| 国产欧美一区二区精品久导航 | 国产成a人无v码亚洲福利| 视频一区二区中文字幕| 亚洲尤物在线视频观看| 亚洲婷婷国产精品电影人久久| 久久网站热最新地址| 91精品一区二区三区久久久久久 | 91精品婷婷国产综合久久性色| 欧洲在线/亚洲| 91网站最新网址| 成人av一区二区三区| 国产成人啪午夜精品网站男同| 精品一区二区三区的国产在线播放| 五月婷婷另类国产| 亚洲电影第三页|