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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? hellowdm.cpp

?? 《Windows驅(qū)動開發(fā)技術(shù)詳解》隨書源碼
?? CPP
字號:
/************************************************************************
* 文件名稱:HelloWDM.cpp                                                 
* 作    者:張帆
* 完成日期:2007-11-1
*************************************************************************/
#include "HelloWDM.h"

/************************************************************************
* 函數(shù)名稱:DriverEntry
* 功能描述:初始化驅(qū)動程序,定位和申請硬件資源,創(chuàng)建內(nèi)核對象
* 參數(shù)列表:
      pDriverObject:從I/O管理器中傳進(jìn)來的驅(qū)動對象
      pRegistryPath:驅(qū)動程序在注冊表的中的路徑
* 返回 值:返回初始化驅(qū)動狀態(tài)
*************************************************************************/
#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;
}

/************************************************************************
* 函數(shù)名稱:HelloWDMAddDevice
* 功能描述:添加新設(shè)備
* 參數(shù)列表:
      DriverObject:從I/O管理器中傳進(jìn)來的驅(qū)動對象
      PhysicalDeviceObject:從I/O管理器中傳進(jìn)來的物理設(shè)備對象
* 返回 值:返回添加新設(shè)備狀態(tài)
*************************************************************************/
#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;
}

/************************************************************************
* 函數(shù)名稱:DefaultPnpHandler
* 功能描述:對PNP IRP進(jìn)行缺省處理
* 參數(shù)列表:
      pdx:設(shè)備對象的擴展
      Irp:從IO請求包
* 返回 值:返回狀態(tài)
*************************************************************************/ 
#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);
}

/************************************************************************
* 函數(shù)名稱:HandleRemoveDevice
* 功能描述:對IRP_MN_REMOVE_DEVICE IRP進(jìn)行處理
* 參數(shù)列表:
      fdo:功能設(shè)備對象
      Irp:從IO請求包
* 返回 值:返回狀態(tài)
*************************************************************************/
#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);

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

/************************************************************************
* 函數(shù)名稱:HelloWDMPnp
* 功能描述:對即插即用IRP進(jìn)行處理
* 參數(shù)列表:
      fdo:功能設(shè)備對象
      Irp:從IO請求包
* 返回 值:返回狀態(tài)
*************************************************************************/
#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))
	{						// 未知的子功能代碼
		status = DefaultPnpHandler(pdx, Irp); // some function we don't know about
		return status;
	}						

#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;
}

/************************************************************************
* 函數(shù)名稱:HelloWDMDispatchRoutine
* 功能描述:對缺省IRP進(jìn)行處理
* 參數(shù)列表:
      fdo:功能設(shè)備對象
      Irp:從IO請求包
* 返回 值:返回狀態(tài)
*************************************************************************/
#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;
}

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91热门视频在线观看| 国产三级一区二区| 日本一区二区三区国色天香 | 亚洲激情成人在线| 久久99最新地址| 色妹子一区二区| 国产无人区一区二区三区| 日本va欧美va瓶| 91在线视频观看| 欧美激情在线一区二区三区| 蜜臀久久99精品久久久久久9 | 亚洲va中文字幕| 色综合久久综合网| 中文av一区特黄| 国产乱妇无码大片在线观看| 日韩欧美一区二区三区在线| 亚洲亚洲精品在线观看| 91蜜桃网址入口| 国产精品私人自拍| 国产精品18久久久久久久久| 日韩区在线观看| 日韩综合小视频| 7777精品久久久大香线蕉| 亚洲综合色噜噜狠狠| 91久久久免费一区二区| 亚洲婷婷在线视频| 色综合久久久久综合体桃花网| 国产精品丝袜久久久久久app| 国产精品一区二区不卡| 国产日产欧美一区二区三区| 国产一区美女在线| 久久综合精品国产一区二区三区| 黑人巨大精品欧美黑白配亚洲| 日韩免费看网站| 久久99国产精品久久99| 久久免费视频色| 国产一区二区三区电影在线观看| 精品对白一区国产伦| 韩国精品主播一区二区在线观看| 国产视频一区二区在线观看| 国产成人h网站| 中文字幕一区二区在线观看| 91麻豆福利精品推荐| 亚洲一区二区视频在线观看| 7777精品伊人久久久大香线蕉完整版 | 在线一区二区观看| 日日噜噜夜夜狠狠视频欧美人| 91麻豆精品国产91久久久| 久久精品国产精品亚洲综合| 久久一夜天堂av一区二区三区| 成人综合在线网站| 亚洲人成7777| 91精品国产综合久久久久久久| 久久国产福利国产秒拍| 国产精品久久久久aaaa樱花| 91福利精品第一导航| 另类人妖一区二区av| 国产精品毛片久久久久久久| 欧美视频在线一区二区三区 | 99久久免费国产| 亚洲成人综合网站| 国产亚洲午夜高清国产拍精品| 91在线观看免费视频| 日产国产高清一区二区三区 | 日韩欧美一级二级| 不卡一区在线观看| 免费亚洲电影在线| 自拍偷拍欧美激情| 亚洲精品在线观| 91亚洲精品久久久蜜桃网站| 久久精品国产免费看久久精品| 一区免费观看视频| 精品国产电影一区二区| 欧美自拍偷拍午夜视频| 国产成人福利片| 青青草国产精品亚洲专区无| 亚洲免费观看高清完整版在线观看熊 | 欧美日韩一级大片网址| 国产乱码字幕精品高清av | 亚洲一区二区3| 国产欧美va欧美不卡在线| 777奇米成人网| 色一区在线观看| 国产乱色国产精品免费视频| 三级一区在线视频先锋 | 欧美国产国产综合| 日韩一区二区在线观看| 在线日韩av片| 成人精品国产免费网站| 老司机精品视频导航| 婷婷成人激情在线网| 亚洲一区二区在线视频| 国产精品区一区二区三区| 欧美一区二区三区视频在线| 欧美日韩在线三级| 91亚洲精华国产精华精华液| 成人免费观看视频| 成人一区二区三区中文字幕| 久久99国产精品尤物| 日本中文字幕一区二区有限公司| 亚洲成人手机在线| 一区二区三区在线视频观看58 | 精品成人一区二区三区四区| 欧美一区二区二区| 日韩一区二区三区av| 日韩亚洲欧美成人一区| 欧美一区二区私人影院日本| 欧美日韩成人在线一区| 男人的j进女人的j一区| 久久精品国产久精国产| 亚洲一区二区av电影| 亚洲欧美日韩国产综合| 国产精品伦理一区二区| 欧美国产视频在线| 国产精品色眯眯| 亚洲日本中文字幕区| 玉米视频成人免费看| 亚洲福利视频一区二区| 亚洲成人在线免费| 蜜桃一区二区三区在线| 蜜臀精品久久久久久蜜臀| 精品一区二区三区视频在线观看| 久88久久88久久久| 成人涩涩免费视频| 99精品欧美一区二区三区综合在线| jlzzjlzz欧美大全| 欧美系列亚洲系列| 欧美一区二区三区性视频| 久久中文字幕电影| 国产精品成人午夜| 午夜在线成人av| 国产精品免费人成网站| 国产午夜三级一区二区三| 中文字幕av一区二区三区高| 国产精品乱人伦| 一区二区三区四区av| 亚洲成人免费视| 美国精品在线观看| 成人激情免费电影网址| 欧美三级电影在线看| 精品欧美一区二区三区精品久久| 国产婷婷精品av在线| 一区二区三区美女视频| 捆绑变态av一区二区三区| 成人av网站在线| 3d动漫精品啪啪1区2区免费| 国产亚洲1区2区3区| 伊人色综合久久天天人手人婷| 日韩电影在线一区二区三区| 成人免费黄色大片| 91精品国产色综合久久不卡电影 | 日韩精品中文字幕一区| 国产精品电影院| 蜜臀久久99精品久久久画质超高清 | 欧美美女网站色| 精品国产免费人成在线观看| 亚洲色欲色欲www| 激情久久久久久久久久久久久久久久| 成人av影视在线观看| 欧美一区二区三区在线看| 国产精品成人午夜| 精品一区二区三区蜜桃| 欧美综合天天夜夜久久| 国产欧美一区二区精品性色超碰| 亚洲国产aⅴ成人精品无吗| 粉嫩欧美一区二区三区高清影视| 欧美蜜桃一区二区三区| 国产精品入口麻豆原神| 激情综合网最新| 欧美视频一区二区在线观看| 国产精品欧美一级免费| 毛片av中文字幕一区二区| 一本色道久久综合狠狠躁的推荐| 精品国产免费久久| 日本三级亚洲精品| 欧美综合视频在线观看| 国产精品久久久久久久久免费相片| 午夜国产精品影院在线观看| 91丝袜美腿高跟国产极品老师 | 国产日韩欧美一区二区三区乱码| 肉肉av福利一精品导航| 日本久久一区二区三区| 成人欧美一区二区三区小说| 久久精品久久精品| 日韩欧美123| 日产精品久久久久久久性色| 欧美日韩精品欧美日韩精品一综合| 中文字幕亚洲电影| 成人丝袜高跟foot| 国产精品青草久久| 成人h动漫精品一区二区| 国产日产欧美一区二区三区| 国产成人自拍网| 久久色在线视频| 国产一区二区三区不卡在线观看| 久久综合九色综合97婷婷| 韩国女主播成人在线| 久久久久国产免费免费| 国产成人精品1024| 国产精品国产成人国产三级 |