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

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

?? driver.cpp

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

#include "Driver.h"

#pragma INITCODE
VOID StringInitTest() 
{
	//(1)用RtlInitAnsiString初始化字符串
	ANSI_STRING  AnsiString1;
	CHAR * string1= "hello";
	//初始化ANSI_STRING字符串
	RtlInitAnsiString(&AnsiString1,string1);
	KdPrint(("AnsiString1:%Z\n",&AnsiString1));//打印hello

	string1[0]='H';
	string1[1]='E';
	string1[2]='L';
	string1[3]='L';
	string1[4]='O';
	//改變string1,AnsiString1同樣會導致變化
	KdPrint(("AnsiString1:%Z\n",&AnsiString1));//打印HELLO

	//(2)程序員自己初始化字符串
#define BUFFER_SIZE 1024
	UNICODE_STRING UnicodeString1 = {0};
	//設置緩沖區(qū)大小
	UnicodeString1.MaximumLength = BUFFER_SIZE;
	//分配內存
	UnicodeString1.Buffer = (PWSTR)ExAllocatePool(PagedPool,BUFFER_SIZE);
	WCHAR* wideString = L"hello";

	//設置字符長度,因為是寬字符,所以是字符長度的2倍
	UnicodeString1.Length = 2*wcslen(wideString);

	//保證緩沖區(qū)足夠大,否則程序終止
	ASSERT(UnicodeString1.MaximumLength>=UnicodeString1.Length);
	//內存拷貝,
	RtlCopyMemory(UnicodeString1.Buffer,wideString,UnicodeString1.Length);
	//設置字符長度
	UnicodeString1.Length = 2*wcslen(wideString);

	KdPrint(("UnicodeString:%wZ\n",&UnicodeString1));

	//清理內存
	ExFreePool(UnicodeString1.Buffer);
	UnicodeString1.Buffer = NULL;
	UnicodeString1.Length = UnicodeString1.MaximumLength = 0;
}

#pragma INITCODE
VOID StringCopyTest() 
{
	//初始化UnicodeString1
	UNICODE_STRING UnicodeString1;
	RtlInitUnicodeString(&UnicodeString1,L"Hello World");

	//初始化UnicodeString2
	UNICODE_STRING UnicodeString2={0};
	UnicodeString2.Buffer = (PWSTR)ExAllocatePool(PagedPool,BUFFER_SIZE);
	UnicodeString2.MaximumLength = BUFFER_SIZE;

	//將初始化UnicodeString2拷貝到UnicodeString1
	RtlCopyUnicodeString(&UnicodeString2,&UnicodeString1);

	//分別顯示UnicodeString1和UnicodeString2
	KdPrint(("UnicodeString1:%wZ\n",&UnicodeString1));
	KdPrint(("UnicodeString2:%wZ\n",&UnicodeString2));

	//銷毀UnicodeString2
	//注意!!UnicodeString1不用銷毀
	RtlFreeUnicodeString(&UnicodeString2);
		
}

#pragma INITCODE
VOID StringCompareTest() 
{
	//初始化UnicodeString1
	UNICODE_STRING UnicodeString1;
	RtlInitUnicodeString(&UnicodeString1,L"Hello World");

	//初始化UnicodeString2
	UNICODE_STRING UnicodeString2;
	RtlInitUnicodeString(&UnicodeString1,L"Hello");

	if (RtlEqualUnicodeString(&UnicodeString1,&UnicodeString2,TRUE))
	{
		KdPrint(("UnicodeString1 and UnicodeString2 are equal\n"));
	}else
	{
		KdPrint(("UnicodeString1 and UnicodeString2 are NOT equal\n"));
	}

}

#pragma INITCODE
VOID StringToUpperTest() 
{
	//初始化UnicodeString1
	UNICODE_STRING UnicodeString1;
	RtlInitUnicodeString(&UnicodeString1,L"Hello World");

	//變化前
	KdPrint(("UnicodeString1:%wZ\n",&UnicodeString1));

	//變大寫
	RtlUpcaseUnicodeString(&UnicodeString1,&UnicodeString1,FALSE);

	//變化后
	KdPrint(("UnicodeString1:%wZ\n",&UnicodeString1));
}

#pragma INITCODE
VOID StringToIntegerTest() 
{
	//(1)字符串轉換成數(shù)字
	//初始化UnicodeString1
	UNICODE_STRING UnicodeString1;
	RtlInitUnicodeString(&UnicodeString1,L"-100");

	ULONG lNumber;
	NTSTATUS nStatus = RtlUnicodeStringToInteger(&UnicodeString1,10,&lNumber);
	if ( NT_SUCCESS(nStatus))
	{
		KdPrint(("Conver to integer succussfully!\n"));
		KdPrint(("Result:%d\n",lNumber));
	}else
	{
		KdPrint(("Conver to integer unsuccessfully!\n"));
	}

	//(2)數(shù)字轉換成字符串
	//初始化UnicodeString2
	UNICODE_STRING UnicodeString2={0};
	UnicodeString2.Buffer = (PWSTR)ExAllocatePool(PagedPool,BUFFER_SIZE);
	UnicodeString2.MaximumLength = BUFFER_SIZE;
	nStatus = RtlIntegerToUnicodeString(200,10,&UnicodeString2);

	if ( NT_SUCCESS(nStatus))
	{
		KdPrint(("Conver to string succussfully!\n"));
		KdPrint(("Result:%wZ\n",&UnicodeString2));
	}else
	{
		KdPrint(("Conver to string unsuccessfully!\n"));
	}

	//銷毀UnicodeString2
	//注意!!UnicodeString1不用銷毀
	RtlFreeUnicodeString(&UnicodeString2);

}

#pragma INITCODE
VOID StringConverTest() 
{
	//(1)將UNICODE_STRING字符串轉換成ANSI_STRING字符串
	//初始化UnicodeString1
	UNICODE_STRING UnicodeString1;
	RtlInitUnicodeString(&UnicodeString1,L"Hello World");

	ANSI_STRING AnsiString1;
	NTSTATUS nStatus = RtlUnicodeStringToAnsiString(&AnsiString1,&UnicodeString1,TRUE);
	
	if ( NT_SUCCESS(nStatus))
	{
		KdPrint(("Conver succussfully!\n"));
		KdPrint(("Result:%Z\n",&AnsiString1));
	}else
	{
		KdPrint(("Conver unsuccessfully!\n"));
	}

 	//銷毀AnsiString1
	RtlFreeAnsiString(&AnsiString1);

	//(2)將ANSI_STRING字符串轉換成UNICODE_STRING字符串
	//初始化AnsiString2
	ANSI_STRING AnsiString2;
	RtlInitString(&AnsiString2,"Hello World");

	UNICODE_STRING UnicodeString2;
	nStatus = RtlAnsiStringToUnicodeString(&UnicodeString2,&AnsiString2,TRUE);
	
	if ( NT_SUCCESS(nStatus))
	{
		KdPrint(("Conver succussfully!\n"));
		KdPrint(("Result:%wZ\n",&UnicodeString2));
	}else
	{
		KdPrint(("Conver unsuccessfully!\n"));
	}

 	//銷毀UnicodeString2
	RtlFreeUnicodeString(&UnicodeString2);
}


VOID StringTest()
{
	//字符串初始化實驗
//	StringInitTest();

	//字符串拷貝實驗
//	StringCopyTest();

	//字符串比較實驗
//	StringCompareTest();

	//字符串變大寫實驗
//	StringToUpperTest();

	//字符串與整型相互轉化實驗
//	StringToIntegerTest();

	//ANSI_STRING字符串與UNICODE_STRING字符串相互轉換實驗
	StringConverTest();

}

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

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

	StringTest();

	KdPrint(("DriverEntry end\n"));
	return status;
}

/************************************************************************
* 函數(shù)名稱:CreateDevice
* 功能描述:初始化設備對象
* 參數(shù)列表:
      pDriverObject:從I/O管理器中傳進來的驅動對象
* 返回 值:返回初始化狀態(tài)
*************************************************************************/
#pragma INITCODE
NTSTATUS CreateDevice (
		IN PDRIVER_OBJECT	pDriverObject) 
{
	NTSTATUS status;
	PDEVICE_OBJECT pDevObj;
	PDEVICE_EXTENSION pDevExt;
	
	//創(chuàng)建設備名稱
	UNICODE_STRING devName;
	RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
	
	//創(chuàng)建設備
	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;
	//創(chuàng)建符號鏈接
	UNICODE_STRING symLinkName;
	RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");
	pDevExt->ustrSymLinkName = symLinkName;
	status = IoCreateSymbolicLink( &symLinkName,&devName );
	if (!NT_SUCCESS(status)) 
	{
		IoDeleteDevice( pDevObj );
		return status;
	}
	return STATUS_SUCCESS;
}

/************************************************************************
* 函數(shù)名稱:HelloDDKUnload
* 功能描述:負責驅動程序的卸載操作
* 參數(shù)列表:
      pDriverObject:驅動對象
* 返回 值:返回狀態(tài)
*************************************************************************/
#pragma PAGEDCODE
VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
	PDEVICE_OBJECT	pNextObj;
	KdPrint(("Enter 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 );
	}
}

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美视频在线| 欧美色老头old∨ideo| 久久久久久久网| 国产在线精品一区二区不卡了| 久久亚洲综合色一区二区三区| 国内成人免费视频| 国产精品国产成人国产三级| 色综合中文字幕国产 | 亚洲欧洲精品一区二区精品久久久| 国产伦精品一区二区三区视频青涩| 久久九九影视网| 懂色av一区二区在线播放| 亚洲视频资源在线| 欧美精品丝袜中出| 国产一区二区三区最好精华液 | 国产精品乱码人人做人人爱| 91日韩在线专区| 亚洲成人自拍网| 久久蜜桃av一区二区天堂| 成人av网站大全| 亚洲高清免费观看| 久久精品人人爽人人爽| 欧美四级电影在线观看| 国产一区二区三区电影在线观看| 中文字幕一区av| 在线91免费看| jlzzjlzz欧美大全| 午夜精品久久久久久久| 国产欧美精品一区二区色综合朱莉| 欧美综合天天夜夜久久| 美女国产一区二区| 中文字幕一区日韩精品欧美| 日韩一级黄色片| 91亚洲永久精品| 六月婷婷色综合| 亚洲一区日韩精品中文字幕| 精品福利av导航| 在线视频欧美精品| 国产河南妇女毛片精品久久久| 国产精品美女久久久久aⅴ| 91精品麻豆日日躁夜夜躁| 99re亚洲国产精品| 国模一区二区三区白浆| 午夜免费久久看| 综合久久久久久| 国产欧美日本一区视频| 日韩欧美一级精品久久| 色女孩综合影院| 成人午夜视频免费看| 免费在线观看不卡| 亚洲成人av一区二区| 国产精品久久久久久久久免费桃花| 日韩一区二区三免费高清| 欧美亚洲国产一区二区三区 | 欧美一区二区视频免费观看| 91麻豆国产在线观看| 国产一区二区三区观看| 偷拍亚洲欧洲综合| 夜夜爽夜夜爽精品视频| 亚洲美女偷拍久久| 亚洲日本免费电影| 中文一区二区完整视频在线观看| 久久久综合视频| 久久精品视频在线看| 精品国产乱码久久| 日韩精品一区二区三区蜜臀| 欧美精品在线一区二区三区| 91久久精品日日躁夜夜躁欧美| 成a人片国产精品| 成人免费av资源| 成人a级免费电影| youjizz国产精品| 成人一道本在线| 99精品一区二区| 97精品久久久午夜一区二区三区| 成人精品gif动图一区| 福利一区福利二区| 成人深夜福利app| 91免费版在线看| 97精品视频在线观看自产线路二| 国产精品一区二区三区四区| 国产精品亚洲视频| 成人黄色一级视频| 色婷婷综合中文久久一本| 91在线观看美女| 欧美影院一区二区三区| 欧美日韩免费高清一区色橹橹| 欧美日韩高清在线播放| 91精品国产综合久久久蜜臀图片| 欧美一区二区播放| 久久精品视频在线免费观看| 中文字幕不卡在线观看| 亚洲精品自拍动漫在线| 亚洲成av人综合在线观看| 秋霞午夜av一区二区三区| 国产在线观看免费一区| 91麻豆文化传媒在线观看| 日本精品裸体写真集在线观看| 欧美日韩aaa| 精品88久久久久88久久久| 国产欧美精品国产国产专区 | 色菇凉天天综合网| 制服丝袜亚洲精品中文字幕| 26uuu久久天堂性欧美| 国产精品麻豆久久久| 亚洲一级二级三级| 黄色日韩网站视频| 色视频欧美一区二区三区| 91精品中文字幕一区二区三区| 26uuu国产一区二区三区| 中文字幕一区二区三区不卡在线 | 美女看a上一区| 成人动漫av在线| 欧美一区二区三区电影| 国产精品天天看| 蜜桃免费网站一区二区三区| 成人在线综合网| 这里只有精品视频在线观看| 中文字幕av不卡| 免费不卡在线视频| 色婷婷精品大在线视频| 精品久久久久久久久久久院品网| 亚洲日本在线观看| 国产一区二区女| 欧美日韩国产精品成人| 国产女人水真多18毛片18精品视频 | 久久激情五月激情| 91天堂素人约啪| 国产亚洲欧美中文| 亚洲电影视频在线| 成人免费黄色在线| 日韩精品一区二区三区中文不卡| 亚洲视频资源在线| 国产精品99久| 在线播放视频一区| ㊣最新国产の精品bt伙计久久| 久久aⅴ国产欧美74aaa| 欧美怡红院视频| 亚洲日穴在线视频| 成人一区在线看| 欧美变态tickle挠乳网站| 性欧美疯狂xxxxbbbb| 91蝌蚪porny| 国产精品理伦片| 国产一区二区伦理片| 欧美另类videos死尸| 亚洲欧美视频在线观看| 成人精品一区二区三区四区| 欧美成人精品高清在线播放 | 男男视频亚洲欧美| 在线免费精品视频| 国产精品久久久久久久蜜臀 | 91视频在线看| 国产精品网站在线播放| 国产成人免费高清| 欧美精品一区二区三| 免费在线看成人av| 欧美一卡二卡三卡四卡| 午夜欧美一区二区三区在线播放| 欧美最猛黑人xxxxx猛交| 亚洲精品videosex极品| 色综合色狠狠天天综合色| ...av二区三区久久精品| 99热精品国产| 亚洲欧美日韩一区二区三区在线观看| www.欧美亚洲| 国产精品盗摄一区二区三区| 成人免费看的视频| 综合色中文字幕| 在线观看国产91| 亚洲成人av在线电影| 91精品国产综合久久香蕉麻豆| 免费在线视频一区| 久久综合久久综合亚洲| 国产一区二区成人久久免费影院| 久久色在线视频| 国产成人av网站| 18成人在线观看| 91福利在线观看| 日日骚欧美日韩| 久久综合视频网| 成人三级伦理片| 亚洲一二三级电影| 欧美一区二区成人6969| 国产一区二区在线看| 国产精品免费丝袜| 91久久一区二区| 蜜桃av噜噜一区| 国产亚洲一区二区三区在线观看 | 在线观看欧美黄色| 午夜精品123| 国产亚洲午夜高清国产拍精品| 成人精品在线视频观看| 亚洲大片一区二区三区| 精品国产91洋老外米糕| 91丝袜美腿高跟国产极品老师| 舔着乳尖日韩一区| 久久精品人人做人人爽人人| 色呦呦网站一区| 久久成人免费网站|