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

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

?? hellowdm.cpp

?? 《Windows驅動開發技術詳解》隨書源碼
?? 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一区二区三区免费野_久草精品视频
极品少妇xxxx精品少妇偷拍| 夜夜操天天操亚洲| 欧美一区二区免费观在线| 色婷婷综合久久久中文一区二区| 99久久精品久久久久久清纯| 成人丝袜高跟foot| 91在线云播放| 精品视频一区二区不卡| 欧美日韩国产首页| 欧美一区二区大片| 亚洲精品一区在线观看| 国产欧美日韩在线| 亚洲欧美一区二区在线观看| 亚洲卡通欧美制服中文| 亚洲一区在线电影| 麻豆精品一区二区三区| 国产一区二区三区黄视频| 国产999精品久久| 一本高清dvd不卡在线观看| 欧美亚洲高清一区二区三区不卡| 久久午夜电影网| 国产亚洲欧美日韩日本| 亚洲欧洲精品天堂一级| 亚洲3atv精品一区二区三区| 麻豆精品国产91久久久久久| 成人免费三级在线| 在线一区二区三区| 精品国产乱码久久久久久图片 | 777色狠狠一区二区三区| 日韩久久精品一区| 亚洲伦理在线精品| 日本午夜一本久久久综合| 国产美女视频91| 在线免费观看日本欧美| 精品久久国产字幕高潮| 亚洲免费色视频| 国产一区三区三区| 欧美日韩午夜在线| 国产精品久久久久久亚洲伦 | 经典三级在线一区| 91浏览器入口在线观看| 欧美一区二区三区在线| 亚洲欧美韩国综合色| 激情小说亚洲一区| 欧美人妖巨大在线| 一区二区三区四区乱视频| 国产一区二区三区四区五区美女 | 亚洲一区二区偷拍精品| 国产精品66部| 91麻豆精品国产91久久久资源速度 | 欧美在线免费播放| 国产亚洲1区2区3区| 麻豆精品在线视频| 欧美日韩卡一卡二| 一区二区三区丝袜| 成人avav在线| 国产香蕉久久精品综合网| 久久福利视频一区二区| 欧美精品电影在线播放| 一级女性全黄久久生活片免费| 处破女av一区二区| 久久午夜国产精品| 韩国女主播一区二区三区| 777亚洲妇女| 爽爽淫人综合网网站| 欧美午夜一区二区| 亚洲午夜激情网站| 欧美日免费三级在线| 亚洲一区二区三区爽爽爽爽爽| 91热门视频在线观看| 中文字幕在线播放不卡一区| 成人一区二区三区视频在线观看| 久久精品在线免费观看| 国产91在线观看| 国产精品视频一二三区| 不卡的电影网站| 日韩精品1区2区3区| 4438x亚洲最大成人网| 日韩国产欧美在线观看| 欧美日韩的一区二区| 三级精品在线观看| 精品理论电影在线| 夫妻av一区二区| 成人免费视频在线观看| 一本高清dvd不卡在线观看| 一二三区精品福利视频| 在线综合亚洲欧美在线视频| 久久国产精品免费| 国产精品久久久一区麻豆最新章节| 成人白浆超碰人人人人| 一级特黄大欧美久久久| 日韩久久精品一区| 国产91对白在线观看九色| 亚洲女人小视频在线观看| 欧美挠脚心视频网站| 国产一区二区三区观看| 亚洲四区在线观看| 51精品久久久久久久蜜臀| 国产高清在线精品| 亚洲综合久久久| 精品精品欲导航| 91蜜桃视频在线| 蜜桃视频第一区免费观看| 国产欧美综合在线观看第十页 | 日韩专区欧美专区| 久久久99精品免费观看| 91色综合久久久久婷婷| 久久精品国产一区二区三区免费看| 国产无人区一区二区三区| 欧美主播一区二区三区| 国产精品1区二区.| 亚洲成av人**亚洲成av**| 国产亚洲制服色| 欧美日本乱大交xxxxx| 成人国产在线观看| 麻豆精品视频在线观看| 亚洲精品一二三区| 久久久91精品国产一区二区精品| 欧美吻胸吃奶大尺度电影 | 欧美另类久久久品| 不卡一区中文字幕| 激情欧美一区二区三区在线观看| 亚洲一区二区三区在线播放| 国产欧美一区视频| 日韩三级视频中文字幕| 在线视频国内自拍亚洲视频| 国产91丝袜在线播放| 久久狠狠亚洲综合| 日日摸夜夜添夜夜添亚洲女人| 国产精品久久久久久久久免费相片 | 欧美日韩精品一区视频| www.综合网.com| 国产不卡免费视频| 国产一区二三区| 免费看欧美女人艹b| 亚洲午夜一二三区视频| 一区二区三区资源| 亚洲色图一区二区| 国产精品色哟哟| 国产亚洲精品bt天堂精选| 26uuu国产电影一区二区| 欧美一区二区三区在线观看| 欧美日韩精品电影| 在线影视一区二区三区| 一本色道**综合亚洲精品蜜桃冫| jvid福利写真一区二区三区| 国产福利精品一区| 高清不卡一二三区| 国产99久久精品| 成人午夜视频网站| 成年人网站91| 91亚洲资源网| 欧美最新大片在线看| 色噜噜狠狠成人中文综合| 色欧美88888久久久久久影院| 91视频国产观看| 欧美在线一区二区| 在线不卡的av| 欧美大尺度电影在线| 日韩一区二区精品在线观看| 精品成人免费观看| 国产精品色婷婷久久58| 亚洲免费视频成人| 视频一区二区不卡| 国产乱对白刺激视频不卡| 成人丝袜视频网| 在线精品国精品国产尤物884a| 欧美日韩免费高清一区色橹橹| 91精品国产一区二区三区蜜臀| 欧美xfplay| 中文av字幕一区| 亚洲chinese男男1069| 麻豆精品国产传媒mv男同| 懂色av中文字幕一区二区三区| 91免费国产视频网站| 欧美一区二区三区电影| 国产欧美日韩在线观看| 一区二区三区四区乱视频| 麻豆一区二区99久久久久| 不卡在线观看av| 91精品国产全国免费观看| 久久精品日韩一区二区三区| 一二三四社区欧美黄| 国产一区二区免费视频| 色综合天天视频在线观看| 日韩欧美国产一区在线观看| 国产精品超碰97尤物18| 美日韩一级片在线观看| 91麻豆精品在线观看| 久久午夜国产精品| 午夜久久久久久久久久一区二区| 国产凹凸在线观看一区二区| 精品视频一区 二区 三区| 国产欧美精品日韩区二区麻豆天美| 亚洲国产欧美在线人成| av中文字幕亚洲| 久久中文字幕电影| 日本三级亚洲精品| 日本久久一区二区| 中文字幕av免费专区久久|