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

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

?? driver.cpp

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

#include "Driver.h"

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

	//注冊其他驅(qū)動調(diào)用函數(shù)入口
	pDriverObject->DriverUnload = HelloDDKUnload;
	pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKCreate;
	pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKClose;
	pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloDDKDispatchRoutine;
	pDriverObject->MajorFunction[IRP_MJ_READ] = HelloDDKRead;
	
	//創(chuàng)建驅(qū)動設(shè)備對象
	status = CreateDevice(pDriverObject);

	KdPrint(("DriverA:Leave A DriverEntry\n"));
	return status;
}

#pragma LOCKEDCODE
VOID OnTimerDpc( IN PKDPC pDpc,
					  IN PVOID pContext,
					  IN PVOID SysArg1,
					  IN PVOID SysArg2 ) 
{
	PDEVICE_OBJECT pDevObj = (PDEVICE_OBJECT)pContext;
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;

	PIRP currentPendingIRP = pdx->currentPendingIRP;

	KdPrint(("DriverA:complete the Driver A IRP_MJ_READ irp!\n"));

	//設(shè)置完成狀態(tài)為STATUS_SUCCESS
 	currentPendingIRP->IoStatus.Status = STATUS_SUCCESS;
 	currentPendingIRP->IoStatus.Information = 0;	// bytes xfered
 	IoCompleteRequest( currentPendingIRP, IO_NO_INCREMENT );
}

/************************************************************************
* 函數(shù)名稱:CreateDevice
* 功能描述:初始化設(shè)備對象
* 參數(shù)列表:
      pDriverObject:從I/O管理器中傳進來的驅(qū)動對象
* 返回 值:返回初始化狀態(tài)
*************************************************************************/
#pragma INITCODE
NTSTATUS CreateDevice (
		IN PDRIVER_OBJECT	pDriverObject) 
{
	NTSTATUS status;
	PDEVICE_OBJECT pDevObj;
	PDEVICE_EXTENSION pDevExt;
	
	//創(chuàng)建設(shè)備名稱
	UNICODE_STRING devName;
	RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDeviceA");
	
	//創(chuàng)建設(shè)備
	status = IoCreateDevice( pDriverObject,
						sizeof(DEVICE_EXTENSION),
						&(UNICODE_STRING)devName,
						FILE_DEVICE_UNKNOWN,
						0, TRUE,
						&pDevObj );
	if (!NT_SUCCESS(status))
		return status;

	pDevObj->Flags |= DO_BUFFERED_IO;
	pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
	pDevExt->pDevice = pDevObj;
	pDevExt->ustrDeviceName = devName;

	KeInitializeTimer( &pDevExt->pollingTimer );

	KeInitializeDpc( &pDevExt->pollingDPC,
						OnTimerDpc,
						(PVOID) pDevObj );

	//創(chuàng)建符號鏈接
	UNICODE_STRING symLinkName;
	RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDKA");
	pDevExt->ustrSymLinkName = symLinkName;
	status = IoCreateSymbolicLink( &symLinkName,&devName );
	if (!NT_SUCCESS(status)) 
	{
		IoDeleteDevice( pDevObj );
		return status;
	}
	return STATUS_SUCCESS;
}

/************************************************************************
* 函數(shù)名稱:HelloDDKUnload
* 功能描述:負責(zé)驅(qū)動程序的卸載操作
* 參數(shù)列表:
      pDriverObject:驅(qū)動對象
* 返回 值:返回狀態(tài)
*************************************************************************/
#pragma PAGEDCODE
VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
	PDEVICE_OBJECT	pNextObj;
	KdPrint(("DriverA:Enter A DriverUnload\n"));
	pNextObj = pDriverObject->DeviceObject;
	while (pNextObj != NULL) 
	{
		PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
			pNextObj->DeviceExtension;

		//刪除符號鏈接
		UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
		IoDeleteSymbolicLink(&pLinkName);
		pNextObj = pNextObj->NextDevice;
		IoDeleteDevice( pDevExt->pDevice );
	}
	KdPrint(("DriverA:Leave A DriverUnload\n"));
}


/************************************************************************
* 函數(shù)名稱:HelloDDKRead
* 功能描述:對讀IRP進行處理
* 參數(shù)列表:
      pDevObj:功能設(shè)備對象
      pIrp:從IO請求包
* 返回 值:返回狀態(tài)
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("DriverA:Enter A HelloDDKRead\n"));

	PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
			pDevObj->DeviceExtension;

	//將IRP設(shè)置為掛起
	IoMarkIrpPending(pIrp);

	//將掛起的IRP記錄下來
	pDevExt->currentPendingIRP = pIrp;

	//定義3秒后將IRP_MJ_READ的IRP完成
	ULONG ulMicroSecond = 3000000;

	//將32位整數(shù)轉(zhuǎn)化成64位整數(shù)
	LARGE_INTEGER timeout = RtlConvertLongToLargeInteger(-10*ulMicroSecond);
	
	KeSetTimer(
		&pDevExt->pollingTimer,
		timeout,
		&pDevExt->pollingDPC );

	KdPrint(("DriverA:Leave A HelloDDKRead\n"));

	//返回pending狀態(tài)
	return STATUS_PENDING;
}


/************************************************************************
* 函數(shù)名稱:HelloDDKDispatchRoutine
* 功能描述:對讀IRP進行處理
* 參數(shù)列表:
      pDevObj:功能設(shè)備對象
      pIrp:從IO請求包
* 返回 值:返回狀態(tài)
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("DriverA:Enter A HelloDDKDispatchRoutine\n"));
	NTSTATUS status = STATUS_SUCCESS;
	// 完成IRP
	pIrp->IoStatus.Status = status;
	pIrp->IoStatus.Information = 0;	// bytes xfered
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );
	KdPrint(("DriverA:Leave A HelloDDKDispatchRoutine\n"));
	return status;
}

#pragma PAGEDCODE
NTSTATUS HelloDDKCreate(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("DriverA:Enter A HelloDDKCreate\n"));
	NTSTATUS status = STATUS_SUCCESS;
	// 完成IRP
	pIrp->IoStatus.Status = status;
	pIrp->IoStatus.Information = 0;	// bytes xfered
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );
	KdPrint(("DriverA:Leave A HelloDDKCreate\n"));
	return status;
}

#pragma PAGEDCODE
NTSTATUS HelloDDKClose(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("DriverA:Enter A HelloDDKClose\n"));
	NTSTATUS status = STATUS_SUCCESS;
	// 完成IRP
	pIrp->IoStatus.Status = status;
	pIrp->IoStatus.Information = 0;	// bytes xfered
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );
	KdPrint(("DriverA:Leave A HelloDDKClose\n"));
	return status;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一二三| 亚洲伊人伊色伊影伊综合网 | 国产成人午夜精品5599| 国产黄色成人av| 成人高清伦理免费影院在线观看| 不卡的av电影在线观看| 欧美日本一区二区三区四区| 日韩午夜av一区| 精品福利av导航| 亚洲蜜臀av乱码久久精品蜜桃| 婷婷久久综合九色综合绿巨人 | 日韩精品综合一本久道在线视频| 国产欧美日韩卡一| 一区二区三区日韩精品| 久久99国产精品麻豆| 懂色一区二区三区免费观看| 欧美精品日韩精品| 国产精品久久久久久久久快鸭| 日本sm残虐另类| 国产mv日韩mv欧美| 在线电影一区二区三区| 国产精品青草综合久久久久99| 欧美a级一区二区| 成人免费视频视频在线观看免费| 欧美丰满少妇xxxxx高潮对白 | 五月婷婷色综合| 国产成+人+日韩+欧美+亚洲| 日韩一区二区精品葵司在线| 中文字幕在线观看不卡| 老司机一区二区| 欧美日韩国产在线观看| 中文字幕在线免费不卡| 国产一区二区三区四区五区入口| 欧美日本在线一区| 亚洲图片另类小说| 国产91精品一区二区麻豆网站| 欧美人狂配大交3d怪物一区| 亚洲欧美怡红院| 国产精品亚洲一区二区三区在线| 日韩精品一区二区三区蜜臀| 亚洲一区在线视频| 91免费国产在线| 亚洲欧洲成人精品av97| 久久av中文字幕片| 欧美成人一区二区三区在线观看| 午夜伊人狠狠久久| 欧美视频在线播放| 亚洲成人精品在线观看| 欧美午夜电影在线播放| 亚洲国产日韩精品| 欧美写真视频网站| 亚洲激情av在线| 欧美在线不卡一区| 亚洲一区电影777| 欧美三级视频在线播放| 一区二区三区不卡在线观看| 欧美日韩一区二区在线视频| 亚洲bt欧美bt精品777| 欧美乱妇15p| 久久国产夜色精品鲁鲁99| 精品国产网站在线观看| 国产精品一级黄| 国产精品欧美一区喷水| a亚洲天堂av| 亚洲一二三四在线| 欧美一区二区国产| 国产成人精品亚洲777人妖| 欧美激情综合网| 色94色欧美sute亚洲线路二| 国产精品久久久久久久午夜片| 97久久精品人人做人人爽50路| 亚洲欧美激情小说另类| 欧美日韩国产123区| 国产一区二区成人久久免费影院 | 国产精品中文欧美| 亚洲国产岛国毛片在线| 欧美主播一区二区三区| 激情综合色综合久久综合| 亚洲日本在线看| 欧美一区二区三区男人的天堂| 成人av在线影院| 美国一区二区三区在线播放| 一区二区在线观看免费| 久久久久久9999| 91精品国产手机| 欧美综合天天夜夜久久| 国产成人午夜视频| 久久国产福利国产秒拍| 香蕉加勒比综合久久| 亚洲欧美日韩国产综合在线| 国产三区在线成人av| 日韩你懂的电影在线观看| 精品视频123区在线观看| 成人av资源下载| 国产成人h网站| 国产在线精品一区在线观看麻豆| 亚洲大型综合色站| 亚洲欧美日韩久久精品| 国产精品成人免费精品自在线观看| 精品卡一卡二卡三卡四在线| 4438x成人网最大色成网站| 91国产丝袜在线播放| 91在线视频播放| 99在线精品一区二区三区| 国产**成人网毛片九色| 国产成人免费高清| 国内精品不卡在线| 久久精品国产第一区二区三区| 日本不卡在线视频| 视频在线观看91| 午夜视频在线观看一区二区| 五月开心婷婷久久| 午夜私人影院久久久久| 午夜激情久久久| 日韩和欧美的一区| 奇米在线7777在线精品| 美女一区二区在线观看| 免费在线看成人av| 久久电影网站中文字幕| 国产一区二区免费视频| 国产精品一区在线观看你懂的| 国产露脸91国语对白| 国产福利一区二区三区在线视频| 国产精品系列在线播放| 国产sm精品调教视频网站| 成人一区在线观看| 97精品久久久午夜一区二区三区| 色婷婷av一区二区三区之一色屋| 在线看不卡av| 欧美一级日韩免费不卡| 久久午夜羞羞影院免费观看| 国产精品免费av| 亚洲品质自拍视频网站| 亚洲一级二级在线| 久久se这里有精品| 国产成人精品免费在线| 色成年激情久久综合| 欧美理论在线播放| 欧美v日韩v国产v| 中文字幕巨乱亚洲| 亚洲综合色视频| 久久精品av麻豆的观看方式| 国产999精品久久久久久| 日本精品裸体写真集在线观看| 欧美一卡二卡在线| 国产欧美精品一区二区三区四区| 洋洋成人永久网站入口| 久久电影国产免费久久电影| 99精品视频在线观看| 欧美美女激情18p| 国产女主播在线一区二区| 亚洲精品高清在线观看| 精品一区二区三区视频| 91成人在线免费观看| 久久一区二区视频| 亚洲在线视频一区| 国产成人在线色| 在线播放一区二区三区| 欧美国产精品一区| 丝袜亚洲另类丝袜在线| 国产不卡视频一区二区三区| 欧美一区二区三区小说| 国产精品国产精品国产专区不蜜 | 人人狠狠综合久久亚洲| 成人av一区二区三区| 日韩视频一区在线观看| 国产精品久久久久精k8 | 欧美成人高清电影在线| 亚洲男人天堂一区| 狠狠色丁香婷综合久久| 欧美另类变人与禽xxxxx| 国产精品你懂的| 国产在线视频不卡二| 精品视频资源站| 综合久久国产九一剧情麻豆| 国产精品一区二区黑丝 | 欧美日韩在线观看一区二区 | 亚洲美女视频一区| 国产精品888| 26uuu色噜噜精品一区二区| 亚洲成人动漫一区| 色婷婷精品久久二区二区蜜臀av| 国产三级一区二区| 蜜臀av性久久久久av蜜臀妖精| 精品视频一区二区不卡| 亚洲日本护士毛茸茸| 高清国产一区二区三区| 2020国产精品| 久久97超碰国产精品超碰| 日韩一区二区在线观看| 日精品一区二区| 欧美美女一区二区三区| 亚洲妇熟xx妇色黄| 欧美系列日韩一区| 一级日本不卡的影视| 欧美伊人久久大香线蕉综合69| 亚洲伦理在线精品| 91色porny蝌蚪| 一区二区三区资源| 欧美色精品天天在线观看视频|