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

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

?? hellowdm.cpp

?? windows driver for WDM
?? CPP
字號:
/************************************************************************
* 文件名稱:HelloWDM.cpp                                                 
* 作    者:張帆
* 完成日期:2007-11-1
*************************************************************************/
#include "HelloWDM.h"
//#include "stdafx.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一区二区三区免费野_久草精品视频
综合在线观看色| 天天做天天摸天天爽国产一区 | 日韩一区二区三区免费观看| 亚洲男人天堂一区| 美脚の诱脚舐め脚责91| 色综合久久88色综合天天免费| 日韩一区二区三区视频| 一区二区免费在线播放| 成人中文字幕电影| 亚洲精品一区二区三区影院 | 91麻豆国产精品久久| 久久免费精品国产久精品久久久久| 一区二区三区四区激情| 成人a区在线观看| 久久久久88色偷偷免费| 狠狠色综合日日| 欧美一区二区三区播放老司机| 一级做a爱片久久| 色综合中文综合网| 久久不见久久见免费视频7| 最新久久zyz资源站| 夜夜爽夜夜爽精品视频| 日韩国产精品久久久| 经典三级在线一区| 99久久er热在这里只有精品66| 欧美伊人久久久久久午夜久久久久| 欧美午夜片在线看| 久久综合九色综合欧美就去吻| 中文字幕精品—区二区四季| 亚洲成a天堂v人片| 国内精品国产三级国产a久久| 成人精品视频一区二区三区 | 日韩国产在线观看一区| 国产激情91久久精品导航| 色哟哟亚洲精品| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美国产激情一区二区三区蜜月| 夜夜嗨av一区二区三区四季av| 精品一区二区三区久久久| 97久久超碰国产精品| 日韩欧美不卡在线观看视频| 日韩美女视频一区| 国产综合久久久久久久久久久久| 在线影院国内精品| 国产亲近乱来精品视频| 日产欧产美韩系列久久99| 99久久综合99久久综合网站| 精品国产一区二区三区四区四| 亚洲精品va在线观看| 国产不卡视频在线播放| 9191精品国产综合久久久久久| 中文字幕视频一区二区三区久| 久久狠狠亚洲综合| 欧美另类变人与禽xxxxx| 亚洲三级在线播放| 大胆亚洲人体视频| 久久精品亚洲麻豆av一区二区 | 亚洲色图制服诱惑 | 91视视频在线观看入口直接观看www | 亚洲精品成人少妇| yourporn久久国产精品| 久久久不卡网国产精品一区| 日韩中文字幕区一区有砖一区| 一本一本大道香蕉久在线精品| 中文在线免费一区三区高中清不卡| 久久精品久久99精品久久| 欧美日韩中文一区| 亚洲成在人线在线播放| 欧美色成人综合| 亚洲大片一区二区三区| 欧美日本一道本| 婷婷中文字幕综合| 欧美老人xxxx18| 日本一道高清亚洲日美韩| 91麻豆精品国产91久久久久| 午夜视频一区二区三区| 欧美一区二区三区日韩| 蜜臀av一区二区在线观看| 欧美成人r级一区二区三区| 久久超碰97人人做人人爱| 久久久www免费人成精品| 国产麻豆日韩欧美久久| 中文字幕欧美日韩一区| 99国内精品久久| 亚洲综合在线五月| 91精品在线一区二区| 久久精品999| 欧美激情在线免费观看| 99久久国产综合精品女不卡| 一区二区三区鲁丝不卡| 777午夜精品免费视频| 免费高清在线一区| 国产农村妇女毛片精品久久麻豆| eeuss鲁一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 欧美三级电影一区| 精品中文av资源站在线观看| 国产精品精品国产色婷婷| 欧美色精品天天在线观看视频| 日欧美一区二区| 亚洲国产成人自拍| 欧美在线观看视频一区二区三区| 丝袜美腿亚洲一区| 欧美精彩视频一区二区三区| 91搞黄在线观看| 国产一区999| 亚洲国产成人av| 中文字幕不卡一区| 91麻豆精品国产91久久久资源速度| 国产精品一二三四区| 亚洲影视资源网| 亚洲国产精品t66y| 欧美精品久久一区| 99久久精品免费| 精彩视频一区二区| 五月开心婷婷久久| 亚洲欧洲精品天堂一级| 日韩精品一区二区三区视频播放 | 精品在线你懂的| 亚洲男同性视频| 国产日本亚洲高清| 91精品国产综合久久精品| 成人免费毛片嘿嘿连载视频| 日本在线不卡视频一二三区| 亚洲女同一区二区| 国产婷婷精品av在线| 91精品国产色综合久久| 欧美午夜寂寞影院| 91在线精品秘密一区二区| 久久99久久99精品免视看婷婷 | 欧美一卡2卡三卡4卡5免费| 99精品久久久久久| 国产aⅴ综合色| 国产一区二区精品在线观看| 日韩精品视频网站| 亚洲国产欧美日韩另类综合| 中文字幕中文字幕在线一区| 精品国产亚洲在线| 精品免费国产一区二区三区四区| 欧美三级三级三级| 欧美性受xxxx黑人xyx| 色屁屁一区二区| 91在线porny国产在线看| 成人性生交大片免费看视频在线 | 奇米精品一区二区三区在线观看| 亚洲乱码国产乱码精品精98午夜| 日本一区二区视频在线| 久久嫩草精品久久久精品一| 精品免费视频一区二区| 久久噜噜亚洲综合| 久久人人超碰精品| 26uuu久久天堂性欧美| 久久久国际精品| 国产欧美综合在线| 日韩一区在线播放| 亚洲女同一区二区| 亚洲成人自拍偷拍| 久久精品99国产精品| 国产一区二区三区四区在线观看| 精品中文字幕一区二区小辣椒| 国内精品自线一区二区三区视频| 精品亚洲porn| 成人av免费在线观看| 91亚洲精品久久久蜜桃网站| 91免费国产视频网站| 欧美色大人视频| 欧美不卡视频一区| 国产精品久久久久影院| 亚洲免费大片在线观看| 婷婷综合另类小说色区| 精品一区二区三区免费播放| 国产在线一区二区综合免费视频| 国产成人免费在线观看| 欧美在线小视频| 日韩欧美成人午夜| 中文字幕亚洲电影| 日产精品久久久久久久性色| 国产精品一区专区| 在线观看欧美日本| 欧美tickling挠脚心丨vk| 国产精品伦一区| 婷婷开心激情综合| 国产福利不卡视频| 欧美男生操女生| 国产日韩精品一区二区三区| 亚洲精品午夜久久久| 久久激情五月婷婷| 91福利精品视频| 国产性天天综合网| 亚洲电影视频在线| 成人av在线电影| 欧美电视剧在线看免费| 一区二区在线看| 国产盗摄女厕一区二区三区| 欧美三级蜜桃2在线观看| 欧美激情一区二区三区全黄| 午夜免费久久看| 91免费国产视频网站| 久久久综合精品| 美女视频黄 久久|