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

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

?? hellowdm.cpp

?? 找了很久才找到的入門驅動程序事例
?? CPP
字號:
/************************************************************************
* 文件名稱:HelloWDM.cpp                                                 
* 作    者:張帆
* 完成日期:2007-11-1
*************************************************************************/
#include "HelloWDM.h"

/************************************************************************
* 函數名稱:DriverEntry
* 功能描述:初始化驅動程序,定位和申請硬件資源,創建內核對象
* 參數列表:
      pDriverObject:從I/O管理器中傳進來的驅動對象
      pRegistryPath:驅動程序在注冊表的中的路徑
* 返回 值:返回初始化驅動狀態
*************************************************************************/
#pragma INITCODE 
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,
								IN PUNICODE_STRING pRegistryPath)
{
	KdPrint(("Enter DriverEntry\n"));

	pDriverObject->DriverExtension->AddDevice = HelloWDMAddDevice;
	pDriverObject->MajorFunction[IRP_MJ_PNP] = HelloWDMPnp;
	pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = 
	pDriverObject->MajorFunction[IRP_MJ_CREATE] = 
	pDriverObject->MajorFunction[IRP_MJ_READ] = 
	pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloWDMDispatchRoutine;
	pDriverObject->DriverUnload = HelloWDMUnload;

	KdPrint(("Leave DriverEntry\n"));
	return STATUS_SUCCESS;
}

/************************************************************************
* 函數名稱:HelloWDMAddDevice
* 功能描述:添加新設備
* 參數列表:
      DriverObject:從I/O管理器中傳進來的驅動對象
      PhysicalDeviceObject:從I/O管理器中傳進來的物理設備對象
* 返回 值:返回添加新設備狀態
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject,
                           IN PDEVICE_OBJECT PhysicalDeviceObject)
{ 
	PAGED_CODE();
	KdPrint(("Enter HelloWDMAddDevice\n"));

	NTSTATUS status;
	PDEVICE_OBJECT fdo;
	UNICODE_STRING devName;
	RtlInitUnicodeString(&devName,L"\\Device\\MyWDMDevice");
	status = IoCreateDevice(
		DriverObject,
		sizeof(DEVICE_EXTENSION),
		&(UNICODE_STRING)devName,
		FILE_DEVICE_UNKNOWN,
		0,
		FALSE,
		&fdo);
	if( !NT_SUCCESS(status))
		return status;
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fdo->DeviceExtension;
	pdx->fdo = fdo;
	pdx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo, PhysicalDeviceObject);
	UNICODE_STRING symLinkName;
	RtlInitUnicodeString(&symLinkName,L"\\DosDevices\\HelloWDM");

	pdx->ustrDeviceName = devName;
	pdx->ustrSymLinkName = symLinkName;
	status = IoCreateSymbolicLink(&(UNICODE_STRING)symLinkName,&(UNICODE_STRING)devName);

	if( !NT_SUCCESS(status))
	{
		IoDeleteSymbolicLink(&pdx->ustrSymLinkName);
		status = IoCreateSymbolicLink(&symLinkName,&devName);
		if( !NT_SUCCESS(status))
		{
			return status;
		}
	}

	fdo->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;
	fdo->Flags &= ~DO_DEVICE_INITIALIZING;

	KdPrint(("Leave HelloWDMAddDevice\n"));
	return STATUS_SUCCESS;
}

/************************************************************************
* 函數名稱:DefaultPnpHandler
* 功能描述:對PNP IRP進行缺省處理
* 參數列表:
      pdx:設備對象的擴展
      Irp:從IO請求包
* 返回 值:返回狀態
*************************************************************************/ 
#pragma PAGEDCODE
NTSTATUS DefaultPnpHandler(PDEVICE_EXTENSION pdx, PIRP Irp)
{
	PAGED_CODE();
	KdPrint(("Enter DefaultPnpHandler\n"));
	IoSkipCurrentIrpStackLocation(Irp);
	KdPrint(("Leave DefaultPnpHandler\n"));
	return IoCallDriver(pdx->NextStackDevice, Irp);
}

/************************************************************************
* 函數名稱:HandleRemoveDevice
* 功能描述:對IRP_MN_REMOVE_DEVICE IRP進行處理
* 參數列表:
      fdo:功能設備對象
      Irp:從IO請求包
* 返回 值:返回狀態
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HandleRemoveDevice(PDEVICE_EXTENSION pdx, PIRP Irp)
{
	PAGED_CODE();
	KdPrint(("Enter HandleRemoveDevice\n"));

	Irp->IoStatus.Status = STATUS_SUCCESS;
	NTSTATUS status = DefaultPnpHandler(pdx, Irp);
	IoDeleteSymbolicLink(&(UNICODE_STRING)pdx->ustrSymLinkName);

    //調用IoDetachDevice()把fdo從設備棧中脫開:
    if (pdx->NextStackDevice)
        IoDetachDevice(pdx->NextStackDevice);
	
    //刪除fdo:
    IoDeleteDevice(pdx->fdo);
	KdPrint(("Leave HandleRemoveDevice\n"));
	return status;
}

/************************************************************************
* 函數名稱:HelloWDMPnp
* 功能描述:對即插即用IRP進行處理
* 參數列表:
      fdo:功能設備對象
      Irp:從IO請求包
* 返回 值:返回狀態
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloWDMPnp(IN PDEVICE_OBJECT fdo,
                        IN PIRP Irp)
{
	PAGED_CODE();

	KdPrint(("Enter HelloWDMPnp\n"));
	NTSTATUS status = STATUS_SUCCESS;
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp);
	static NTSTATUS (*fcntab[])(PDEVICE_EXTENSION pdx, PIRP Irp) = 
	{
		DefaultPnpHandler,		// IRP_MN_START_DEVICE
		DefaultPnpHandler,		// IRP_MN_QUERY_REMOVE_DEVICE
		HandleRemoveDevice,		// IRP_MN_REMOVE_DEVICE
		DefaultPnpHandler,		// IRP_MN_CANCEL_REMOVE_DEVICE
		DefaultPnpHandler,		// IRP_MN_STOP_DEVICE
		DefaultPnpHandler,		// IRP_MN_QUERY_STOP_DEVICE
		DefaultPnpHandler,		// IRP_MN_CANCEL_STOP_DEVICE
		DefaultPnpHandler,		// IRP_MN_QUERY_DEVICE_RELATIONS
		DefaultPnpHandler,		// IRP_MN_QUERY_INTERFACE
		DefaultPnpHandler,		// IRP_MN_QUERY_CAPABILITIES
		DefaultPnpHandler,		// IRP_MN_QUERY_RESOURCES
		DefaultPnpHandler,		// IRP_MN_QUERY_RESOURCE_REQUIREMENTS
		DefaultPnpHandler,		// IRP_MN_QUERY_DEVICE_TEXT
		DefaultPnpHandler,		// IRP_MN_FILTER_RESOURCE_REQUIREMENTS
		DefaultPnpHandler,		// 
		DefaultPnpHandler,		// IRP_MN_READ_CONFIG
		DefaultPnpHandler,		// IRP_MN_WRITE_CONFIG
		DefaultPnpHandler,		// IRP_MN_EJECT
		DefaultPnpHandler,		// IRP_MN_SET_LOCK
		DefaultPnpHandler,		// IRP_MN_QUERY_ID
		DefaultPnpHandler,		// IRP_MN_QUERY_PNP_DEVICE_STATE
		DefaultPnpHandler,		// IRP_MN_QUERY_BUS_INFORMATION
		DefaultPnpHandler,		// IRP_MN_DEVICE_USAGE_NOTIFICATION
		DefaultPnpHandler,		// IRP_MN_SURPRISE_REMOVAL
	};

	ULONG fcn = stack->MinorFunction;
	if (fcn >= arraysize(fcntab))
	{						// unknown function
		status = DefaultPnpHandler(pdx, Irp); // some function we don't know about
		return status;
	}						// unknown function

#if DBG
	static char* fcnname[] = 
	{
		"IRP_MN_START_DEVICE",
		"IRP_MN_QUERY_REMOVE_DEVICE",
		"IRP_MN_REMOVE_DEVICE",
		"IRP_MN_CANCEL_REMOVE_DEVICE",
		"IRP_MN_STOP_DEVICE",
		"IRP_MN_QUERY_STOP_DEVICE",
		"IRP_MN_CANCEL_STOP_DEVICE",
		"IRP_MN_QUERY_DEVICE_RELATIONS",
		"IRP_MN_QUERY_INTERFACE",
		"IRP_MN_QUERY_CAPABILITIES",
		"IRP_MN_QUERY_RESOURCES",
		"IRP_MN_QUERY_RESOURCE_REQUIREMENTS",
		"IRP_MN_QUERY_DEVICE_TEXT",
		"IRP_MN_FILTER_RESOURCE_REQUIREMENTS",
		"",
		"IRP_MN_READ_CONFIG",
		"IRP_MN_WRITE_CONFIG",
		"IRP_MN_EJECT",
		"IRP_MN_SET_LOCK",
		"IRP_MN_QUERY_ID",
		"IRP_MN_QUERY_PNP_DEVICE_STATE",
		"IRP_MN_QUERY_BUS_INFORMATION",
		"IRP_MN_DEVICE_USAGE_NOTIFICATION",
		"IRP_MN_SURPRISE_REMOVAL",
	};

	KdPrint(("PNP Request (%s)\n", fcnname[fcn]));
#endif // DBG

	status = (*fcntab[fcn])(pdx, Irp);
	KdPrint(("Leave HelloWDMPnp\n"));
	return status;
}

/************************************************************************
* 函數名稱:HelloWDMDispatchRoutine
* 功能描述:對缺省IRP進行處理
* 參數列表:
      fdo:功能設備對象
      Irp:從IO請求包
* 返回 值:返回狀態
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloWDMDispatchRoutine(IN PDEVICE_OBJECT fdo,
								 IN PIRP Irp)
{
	PAGED_CODE();
	KdPrint(("Enter HelloWDMDispatchRoutine\n"));
	Irp->IoStatus.Status = STATUS_SUCCESS;
	Irp->IoStatus.Information = 0;	// no bytes xfered
	IoCompleteRequest( Irp, IO_NO_INCREMENT );
	KdPrint(("Leave HelloWDMDispatchRoutine\n"));
	return STATUS_SUCCESS;
}

/************************************************************************
* 函數名稱:HelloWDMUnload
* 功能描述:負責驅動程序的卸載操作
* 參數列表:
      DriverObject:驅動對象
* 返回 值:返回狀態
*************************************************************************/
#pragma PAGEDCODE
void HelloWDMUnload(IN PDRIVER_OBJECT DriverObject)
{
	PAGED_CODE();
	KdPrint(("Enter HelloWDMUnload\n"));
	KdPrint(("Leave HelloWDMUnload\n"));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久电影网| 国产成人免费av在线| 久久av资源站| 色呦呦国产精品| 久久综合久久综合九色| 亚洲成人精品一区二区| 成人av在线播放网站| 宅男噜噜噜66一区二区66| 综合亚洲深深色噜噜狠狠网站| 亚洲a一区二区| 色综合久久久久久久久久久| 久久色视频免费观看| 首页国产欧美久久| 色嗨嗨av一区二区三区| 国产精品麻豆久久久| 精品在线你懂的| 欧美日韩性生活| 亚洲视频精选在线| 成人永久aaa| 久久久久久久久久美女| 日本在线不卡视频| 欧美另类高清zo欧美| 亚洲精品你懂的| 99re热这里只有精品视频| 久久久久国产精品厨房| 成人精品免费网站| 久久综合色天天久久综合图片| 日韩高清一区在线| 欧美一区二区私人影院日本| 亚洲国产成人av| 91成人在线观看喷潮| 亚洲精品视频免费观看| 日本韩国欧美一区二区三区| 亚洲欧美日韩小说| 一本到不卡精品视频在线观看| 国产精品久久久久婷婷二区次| 国产精品资源在线| 久久噜噜亚洲综合| 大尺度一区二区| 中文字幕不卡的av| 91麻豆精品在线观看| 一区二区三区四区精品在线视频| 91麻豆国产精品久久| 亚洲一区二区在线视频| 欧美日韩国产首页在线观看| 三级成人在线视频| 日韩美一区二区三区| 国产在线精品一区二区不卡了| 亚洲精品一区二区三区在线观看| 国产一区二区女| 亚洲视频你懂的| 欧美精品粉嫩高潮一区二区| 久久国产精品72免费观看| 欧美精品一区二区三| 成人毛片视频在线观看| 亚洲精品水蜜桃| 日韩欧美国产系列| 不卡一区二区三区四区| 亚洲va欧美va人人爽| 欧美大片在线观看| av综合在线播放| 午夜久久久久久久久| 久久嫩草精品久久久精品一| 99久久久久久99| 日本vs亚洲vs韩国一区三区二区| 精品人伦一区二区色婷婷| 国产a区久久久| 亚洲国产成人精品视频| 久久久久久亚洲综合| 日本久久一区二区三区| 精品一区精品二区高清| 亚洲欧美综合另类在线卡通| 在线综合亚洲欧美在线视频| 盗摄精品av一区二区三区| 亚洲成人动漫在线观看| 久久久久久免费毛片精品| 欧美亚洲图片小说| 国产精品一二二区| 亚洲sss视频在线视频| 欧美激情中文不卡| 欧美精品久久久久久久多人混战| 成人午夜私人影院| 久久精品国产第一区二区三区| 中文字幕一区二区三区四区不卡 | 亚洲色图色小说| 日韩一卡二卡三卡四卡| 91免费观看在线| 国产精品资源网站| 日本午夜精品一区二区三区电影| 亚洲欧美日韩国产综合在线 | 久久久久久久网| 欧美日韩国产精品自在自线| 高清视频一区二区| 免费一级欧美片在线观看| 一区二区三区精密机械公司| 国产婷婷色一区二区三区在线| 欧美日韩另类一区| 色综合亚洲欧洲| 夫妻av一区二区| 狠狠色2019综合网| 久久机这里只有精品| 午夜精品一区二区三区三上悠亚| 亚洲色图欧洲色图| 国产精品萝li| 国产精品人成在线观看免费| 久久亚洲综合色| 精品福利在线导航| 欧美zozo另类异族| 欧美大片一区二区| 日韩一级视频免费观看在线| 91精品国产品国语在线不卡| 精品污污网站免费看| 欧美中文字幕久久 | 国产精品中文字幕欧美| 开心九九激情九九欧美日韩精美视频电影| 一区二区三区影院| 亚洲综合免费观看高清完整版| 最新久久zyz资源站| 亚洲欧美成aⅴ人在线观看| 综合久久给合久久狠狠狠97色| 国产精品美女一区二区在线观看| 久久亚区不卡日本| 中文一区一区三区高中清不卡| 久久精品一区二区三区四区| 久久女同性恋中文字幕| 日韩精品国产欧美| 麻豆精品在线播放| 激情文学综合插| 高清国产一区二区| 99久久99久久久精品齐齐| 91丨国产丨九色丨pron| 91搞黄在线观看| 欧美一卡2卡3卡4卡| 日韩免费观看高清完整版 | 欧美性一级生活| 欧美三级蜜桃2在线观看| 91精品国产高清一区二区三区 | 欧美性感一类影片在线播放| 欧美日韩国产经典色站一区二区三区 | 91精彩视频在线| 在线成人免费观看| 日韩精品最新网址| 国产精品久久久99| 亚洲一线二线三线视频| 美女精品一区二区| 成人自拍视频在线观看| 欧美三级日韩在线| 久久精品在线免费观看| 亚洲精品国久久99热| 精品中文av资源站在线观看| 不卡免费追剧大全电视剧网站| 欧洲另类一二三四区| ww久久中文字幕| 亚洲线精品一区二区三区| 极品美女销魂一区二区三区免费| www.欧美.com| 亚洲精品在线免费播放| 亚洲色图在线看| 国模大尺度一区二区三区| 色一情一伦一子一伦一区| 精品久久久久久久人人人人传媒| 亚洲免费av在线| 国产不卡视频一区| 欧美一级日韩免费不卡| 亚洲欧美电影院| 国产精品亚洲一区二区三区在线 | 午夜在线成人av| 国产91丝袜在线18| 在线观看网站黄不卡| 欧美一区二区在线观看| 一区二区三区精品久久久| 久久99久久精品欧美| 99麻豆久久久国产精品免费优播| 欧美成人伊人久久综合网| 亚洲欧美偷拍卡通变态| 久久精品理论片| 国产suv精品一区二区883| 欧美电视剧在线看免费| 亚洲男人的天堂在线观看| 看电影不卡的网站| 日韩一区二区在线观看| 亚洲欧洲精品天堂一级| 老汉av免费一区二区三区| 免费精品视频在线| 欧美日韩亚洲综合| 国产精品久久久久婷婷| 精品影院一区二区久久久| 在线播放欧美女士性生活| 中文字幕一区二区5566日韩| 青娱乐精品视频在线| av中文字幕在线不卡| 日本一区二区免费在线观看视频| 亚洲成人福利片| 色欲综合视频天天天| 欧美乱熟臀69xxxxxx| 成人黄色a**站在线观看| 欧美性色aⅴ视频一区日韩精品| 日韩av在线免费观看不卡| 色婷婷av一区二区| 亚洲美女在线国产|