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

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

?? driver.cpp

?? 《Windows驅動開發詳解》一書各章的源代碼
?? CPP
字號:
/************************************************************************
* 文件名稱:Driver.cpp                                                 
* 作    者:張帆
* 完成日期:2007-11-1
*************************************************************************/

#include "Driver.h"

#pragma INITCODE
VOID CreateFileTest() 
{
	OBJECT_ATTRIBUTES objectAttributes;
	IO_STATUS_BLOCK iostatus;
	HANDLE hfile;
	UNICODE_STRING logFileUnicodeString;

	//初始化UNICODE_STRING字符串
	RtlInitUnicodeString( &logFileUnicodeString, 
		L"\\??\\C:\\1.log");
	//或者寫成 "\\Device\\HarddiskVolume1\\1.LOG"


	//初始化objectAttributes
	InitializeObjectAttributes(&objectAttributes, 
							&logFileUnicodeString,
							OBJ_CASE_INSENSITIVE, 
							NULL, 
							NULL );

	//創建文件
	NTSTATUS ntStatus = ZwCreateFile( &hfile, 
							GENERIC_WRITE,
							&objectAttributes, 
							&iostatus, 
							NULL,
							FILE_ATTRIBUTE_NORMAL, 
							FILE_SHARE_READ,
							FILE_OPEN_IF,//即使存在該文件,也創建 
							FILE_SYNCHRONOUS_IO_NONALERT, 
							NULL, 
							0 );
	if ( NT_SUCCESS(ntStatus))
	{
		KdPrint(("Create file succussfully!\n"));
	}else
	{
		KdPrint(("Create file  unsuccessfully!\n"));
	}

	//文件操作
	//.......

	//關閉文件句柄
	ZwClose(hfile);
}


#pragma INITCODE
VOID OpenFileTest2() 
{
	OBJECT_ATTRIBUTES objectAttributes;
	IO_STATUS_BLOCK iostatus;
	HANDLE hfile;
	UNICODE_STRING logFileUnicodeString;

	//初始化UNICODE_STRING字符串
	RtlInitUnicodeString( &logFileUnicodeString, 
		L"\\??\\C:\\1.log");
	//或者寫成 "\\Device\\HarddiskVolume1\\1.LOG"


	//初始化objectAttributes
	InitializeObjectAttributes(&objectAttributes, 
							&logFileUnicodeString,
							OBJ_CASE_INSENSITIVE, 
							NULL, 
							NULL );

	//創建文件
	NTSTATUS ntStatus = ZwOpenFile( &hfile, 
							GENERIC_ALL,
							&objectAttributes, 
							&iostatus, 
							FILE_SHARE_READ|FILE_SHARE_WRITE,
							FILE_SYNCHRONOUS_IO_NONALERT);
	if ( NT_SUCCESS(ntStatus))
	{
		KdPrint(("Create file succussfully!\n"));
	}else
	{
		KdPrint(("Create file  unsuccessfully!\n"));
	}

	//文件操作
	//.......

	//關閉文件句柄
	ZwClose(hfile);
}


#pragma INITCODE
VOID OpenFileTest1() 
{
	OBJECT_ATTRIBUTES objectAttributes;
	IO_STATUS_BLOCK iostatus;
	HANDLE hfile;
	UNICODE_STRING logFileUnicodeString;

	//初始化UNICODE_STRING字符串
	RtlInitUnicodeString( &logFileUnicodeString, 
		L"\\??\\C:\\1.log");
	//或者寫成 "\\Device\\HarddiskVolume1\\1.LOG"

	//初始化objectAttributes
	InitializeObjectAttributes(&objectAttributes,
							&logFileUnicodeString,
							OBJ_CASE_INSENSITIVE,//對大小寫敏感 
							NULL, 
							NULL );

	//創建文件
	NTSTATUS ntStatus = ZwCreateFile( &hfile, 
							GENERIC_READ,
							&objectAttributes, 
							&iostatus, 
							NULL,
							FILE_ATTRIBUTE_NORMAL, 
							FILE_SHARE_WRITE,
							FILE_OPEN,//對文件打開,如果不存在則返回錯誤 
							FILE_SYNCHRONOUS_IO_NONALERT, 
							NULL, 
							0 );
	if ( NT_SUCCESS(ntStatus))
	{
		KdPrint(("Open file succussfully!\n"));
	}else
	{
		KdPrint(("Open file  unsuccessfully!\n"));
	}

	//文件操作
	//.......

	//關閉文件句柄
	ZwClose(hfile);
}


#pragma INITCODE
VOID FileAttributeTest() 
{
	OBJECT_ATTRIBUTES objectAttributes;
	IO_STATUS_BLOCK iostatus;
	HANDLE hfile;
	UNICODE_STRING logFileUnicodeString;

	//初始化UNICODE_STRING字符串
	RtlInitUnicodeString( &logFileUnicodeString, 
		L"\\??\\C:\\1.log");
	//或者寫成 "\\Device\\HarddiskVolume1\\1.LOG"

	//初始化objectAttributes
	InitializeObjectAttributes(&objectAttributes,
							&logFileUnicodeString,
							OBJ_CASE_INSENSITIVE,//對大小寫敏感 
							NULL, 
							NULL );

	//創建文件
	NTSTATUS ntStatus = ZwCreateFile( &hfile, 
							GENERIC_READ,
							&objectAttributes, 
							&iostatus, 
							NULL,
							FILE_ATTRIBUTE_NORMAL, 
							0,
							FILE_OPEN,//對文件打開,如果不存在則返回錯誤 
							FILE_SYNCHRONOUS_IO_NONALERT, 
							NULL, 
							0 );
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("open file successfully.\n"));
	}

	FILE_STANDARD_INFORMATION fsi;
	//讀取文件長度
	ntStatus = ZwQueryInformationFile(hfile,
									&iostatus,
									&fsi,
									sizeof(FILE_STANDARD_INFORMATION),
									FileStandardInformation);
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("file length:%u\n",fsi.EndOfFile.QuadPart));
	}
	
	//修改當前文件指針
	FILE_POSITION_INFORMATION fpi;
	fpi.CurrentByteOffset.QuadPart = 100i64;
	ntStatus = ZwSetInformationFile(hfile,
								&iostatus,
								&fpi,
								sizeof(FILE_POSITION_INFORMATION),
								FilePositionInformation);
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("update the file pointer successfully.\n"));
	}

	//關閉文件句柄
	ZwClose(hfile);
}


#pragma INITCODE
VOID WriteFileTest() 
{
	OBJECT_ATTRIBUTES objectAttributes;
	IO_STATUS_BLOCK iostatus;
	HANDLE hfile;
	UNICODE_STRING logFileUnicodeString;

	//初始化UNICODE_STRING字符串
	RtlInitUnicodeString( &logFileUnicodeString, 
		L"\\??\\C:\\1.log");
	//或者寫成 "\\Device\\HarddiskVolume1\\1.LOG"

	//初始化objectAttributes
	InitializeObjectAttributes(&objectAttributes,
							&logFileUnicodeString,
							OBJ_CASE_INSENSITIVE,//對大小寫敏感 
							NULL, 
							NULL );

	//創建文件
	NTSTATUS ntStatus = ZwCreateFile( &hfile, 
							GENERIC_WRITE,
							&objectAttributes, 
							&iostatus, 
							NULL,
							FILE_ATTRIBUTE_NORMAL, 
							FILE_SHARE_WRITE,
							FILE_OPEN_IF,//即使存在該文件,也創建 
							FILE_SYNCHRONOUS_IO_NONALERT, 
							NULL, 
							0 );
#define BUFFER_SIZE 1024
	PUCHAR pBuffer = (PUCHAR)ExAllocatePool(PagedPool,BUFFER_SIZE);
	//構造要填充的數據
	RtlFillMemory(pBuffer,BUFFER_SIZE,0xAA);

	KdPrint(("The program will write %d bytes\n",BUFFER_SIZE));
	//寫文件
	ZwWriteFile(hfile,NULL,NULL,NULL,&iostatus,pBuffer,BUFFER_SIZE,NULL,NULL);
	KdPrint(("The program really wrote %d bytes\n",iostatus.Information));


	//構造要填充的數據
	RtlFillMemory(pBuffer,BUFFER_SIZE,0xBB);

	KdPrint(("The program will append %d bytes\n",BUFFER_SIZE));
	//追加數據
	LARGE_INTEGER number;
	number.QuadPart = 1024i64;//設置文件指針
	//對文件進行附加寫
	ZwWriteFile(hfile,NULL,NULL,NULL,&iostatus,pBuffer,BUFFER_SIZE,&number,NULL);
	KdPrint(("The program really appended %d bytes\n",iostatus.Information));

	//關閉文件句柄
	ZwClose(hfile);

	ExFreePool(pBuffer);
}
#pragma INITCODE
VOID ReadFileTest() 
{
	OBJECT_ATTRIBUTES objectAttributes;
	IO_STATUS_BLOCK iostatus;
	HANDLE hfile;
	UNICODE_STRING logFileUnicodeString;

	//初始化UNICODE_STRING字符串
	RtlInitUnicodeString( &logFileUnicodeString, 
		L"\\??\\C:\\1.log");
	//或者寫成 "\\Device\\HarddiskVolume1\\1.LOG"

	//初始化objectAttributes
	InitializeObjectAttributes(&objectAttributes,
							&logFileUnicodeString,
							OBJ_CASE_INSENSITIVE,//對大小寫敏感 
							NULL, 
							NULL );

	//創建文件
	NTSTATUS ntStatus = ZwCreateFile( &hfile, 
							GENERIC_READ,
							&objectAttributes, 
							&iostatus, 
							NULL,
							FILE_ATTRIBUTE_NORMAL, 
							FILE_SHARE_READ,
							FILE_OPEN,//即使存在該文件,也創建 
							FILE_SYNCHRONOUS_IO_NONALERT, 
							NULL, 
							0 );

	if (!NT_SUCCESS(ntStatus))
	{
		KdPrint(("The file is not exist!\n"));
		return;
	}

	FILE_STANDARD_INFORMATION fsi;
	//讀取文件長度
	ntStatus = ZwQueryInformationFile(hfile,
									&iostatus,
									&fsi,
									sizeof(FILE_STANDARD_INFORMATION),
									FileStandardInformation);

	KdPrint(("The program want to read %d bytes\n",fsi.EndOfFile.QuadPart));

	//為讀取的文件分配緩沖區
 	PUCHAR pBuffer = (PUCHAR)ExAllocatePool(PagedPool,
								(LONG)fsi.EndOfFile.QuadPart);

	//讀取文件
	ZwReadFile(hfile,NULL,
				NULL,NULL,
				&iostatus,
				pBuffer,
				(LONG)fsi.EndOfFile.QuadPart,
				NULL,NULL);
	KdPrint(("The program really read %d bytes\n",iostatus.Information));
	//關閉文件句柄
	ZwClose(hfile);

	//釋放緩沖區
	ExFreePool(pBuffer);
}
#pragma INITCODE
VOID FileTest() 
{
	//創建文件實驗
//	CreateFileTest();

	//打開文件實驗
//	OpenFileTest1();
	OpenFileTest2();

//	FileAttributeTest();

	//寫文件、追加文件實驗
//	WriteFileTest();

//	ReadFileTest();

}

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

	//注冊其他驅動調用函數入口
	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;
	
	//創建驅動設備對象
	status = CreateDevice(pDriverObject);

	FileTest();

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

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

/************************************************************************
* 函數名稱:HelloDDKUnload
* 功能描述:負責驅動程序的卸載操作
* 參數列表:
      pDriverObject:驅動對象
* 返回 值:返回狀態
*************************************************************************/
#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 );
	}
}

/************************************************************************
* 函數名稱:HelloDDKDispatchRoutine
* 功能描述:對讀IRP進行處理
* 參數列表:
      pDevObj:功能設備對象
      pIrp:從IO請求包
* 返回 值:返回狀態
*************************************************************************/
#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一区二区三区免费野_久草精品视频
色网综合在线观看| 久久精品国产一区二区三 | 亚洲伦理在线精品| 欧美变态口味重另类| 日本午夜一本久久久综合| 日韩欧美亚洲一区二区| 激情综合网最新| 欧美国产禁国产网站cc| 99国产麻豆精品| 亚洲综合久久av| 日韩欧美国产午夜精品| 国产精品99久久久久久宅男| 国产精品久久国产精麻豆99网站 | 99久久99久久精品免费观看| 国产精品伦理一区二区| 91久久精品一区二区| 婷婷中文字幕综合| 久久久久久久精| 99久久精品国产导航| 亚洲一区二区视频在线观看| 日韩色在线观看| 成人国产精品免费观看动漫| 亚洲国产精品久久一线不卡| 日韩精品影音先锋| 91丨九色丨蝌蚪富婆spa| 五月婷婷激情综合网| 久久久亚洲高清| 欧美性xxxxxx少妇| 国产精品亚洲视频| 亚洲第一主播视频| 欧美激情综合网| 在线91免费看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产亚洲精品bt天堂精选| 色8久久精品久久久久久蜜| 久久精品国产亚洲高清剧情介绍| 国产精品美女久久久久久| 91精品国产乱| 91欧美一区二区| 国产一区二区精品久久99| 亚洲黄色尤物视频| 国产日产亚洲精品系列| 欧美日韩aaa| 99精品欧美一区二区蜜桃免费| 蜜臀久久99精品久久久久宅男| 亚洲私人影院在线观看| 精品国产一区二区三区久久影院| 在线观看视频一区二区 | 国产日产亚洲精品系列| 911国产精品| 91成人看片片| 成人高清免费在线播放| 久久国产精品无码网站| 天堂影院一区二区| 一区二区三区四区亚洲| 亚洲国产精华液网站w| 精品少妇一区二区三区 | 三级一区在线视频先锋 | 久久亚洲私人国产精品va媚药| 欧美日韩精品三区| 91丝袜国产在线播放| 福利电影一区二区| 国产乱子轮精品视频| 免费观看日韩电影| 天天av天天翘天天综合网| 自拍偷拍国产精品| 亚洲丝袜美腿综合| 国产精品美女久久久久久久| 久久久久久久av麻豆果冻| 精品免费国产二区三区| 精品奇米国产一区二区三区| 日韩午夜三级在线| 91精品国产综合久久婷婷香蕉| 欧美日韩一区成人| 欧美日韩精品一区二区三区 | 1024成人网| 1区2区3区国产精品| 国产精品理伦片| 国产精品视频在线看| 国产精品污污网站在线观看| 中文字幕乱码日本亚洲一区二区| 欧美国产一区视频在线观看| 日本一区二区三区在线不卡| 国产精品家庭影院| 亚洲天堂网中文字| 亚洲午夜视频在线| 水野朝阳av一区二区三区| 日韩电影在线一区| 黄一区二区三区| 国产成人aaa| 93久久精品日日躁夜夜躁欧美| 97精品久久久久中文字幕| 在线观看av一区二区| 69堂成人精品免费视频| 精品国产网站在线观看| 久久99国产精品久久| 国内一区二区视频| av在线一区二区三区| 91极品视觉盛宴| 7777精品伊人久久久大香线蕉| 日韩美一区二区三区| 国产日韩欧美高清| 一区二区三区四区蜜桃| 日本不卡高清视频| 国产精品羞羞答答xxdd| 99re亚洲国产精品| 欧美一卡2卡3卡4卡| 久久先锋影音av鲁色资源| 一区视频在线播放| 日韩精品福利网| 国产成人自拍网| 欧美主播一区二区三区| 欧美精品一区二区久久婷婷 | 亚洲另类在线视频| 日本视频中文字幕一区二区三区| 国产成人自拍高清视频在线免费播放| 91蜜桃视频在线| 精品国产乱码91久久久久久网站| 国产精品欧美久久久久无广告| 亚洲成人免费视频| 床上的激情91.| 欧美一级欧美三级| 亚洲免费在线电影| 韩国精品主播一区二区在线观看| 91国偷自产一区二区使用方法| 精品第一国产综合精品aⅴ| 亚洲精品一卡二卡| 国产高清一区日本| 欧美精品一卡二卡| 亚洲桃色在线一区| 国产麻豆精品在线观看| 欧美日韩成人综合在线一区二区| 国产亲近乱来精品视频| 日本伊人色综合网| 色菇凉天天综合网| 欧美国产综合一区二区| 蜜臀久久99精品久久久久久9| 色成年激情久久综合| 国产欧美日韩另类一区| 精一区二区三区| 欧美日韩高清在线| 一区二区三区高清在线| av在线不卡免费看| 国产日韩欧美一区二区三区综合| 亚洲成人av一区二区三区| 91日韩精品一区| 国产精品久久综合| 福利视频网站一区二区三区| 一区二区三区在线观看国产| 成人激情免费视频| 国产亚洲女人久久久久毛片| 美女国产一区二区| 91精品久久久久久久99蜜桃| 亚洲第一会所有码转帖| 色久优优欧美色久优优| 国产精品久久久久久亚洲毛片| 国产麻豆精品在线| 久久香蕉国产线看观看99| 精品午夜久久福利影院| 欧美电影一区二区| 日韩福利视频导航| 9191成人精品久久| 视频在线在亚洲| 在线成人av网站| 日韩高清一区在线| 欧美精品xxxxbbbb| 日韩一区精品字幕| 日韩一区二区三区视频| 免费高清不卡av| 精品福利一二区| 国产一区二区三区观看| www日韩大片| 国产成人自拍高清视频在线免费播放| 久久久久久久电影| 成人av资源在线观看| 亚洲色欲色欲www| 在线观看欧美精品| 日韩和的一区二区| 日韩免费一区二区三区在线播放| 久久精品国产免费看久久精品| 精品88久久久久88久久久| 国产精品一二三在| 亚洲日本va午夜在线影院| 色视频欧美一区二区三区| 亚洲二区在线视频| 日韩欧美国产三级电影视频| 国产一区二区三区免费| 国产精品动漫网站| 欧洲人成人精品| 蜜臀久久久99精品久久久久久| 精品国产露脸精彩对白 | 国产精品进线69影院| 日本高清无吗v一区| 日日噜噜夜夜狠狠视频欧美人| 精品噜噜噜噜久久久久久久久试看 | 成人精品gif动图一区| 亚洲精品精品亚洲| 日韩欧美区一区二| 成人黄色免费短视频| 亚洲国产aⅴ成人精品无吗|