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

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

?? driver.cpp

?? 驅動開發技術詳解附書源碼示例
?? 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一区二区三区免费野_久草精品视频
jvid福利写真一区二区三区| 天天综合日日夜夜精品| 国内精品伊人久久久久av一坑| 欧美福利一区二区| 免费欧美高清视频| 久久久午夜精品| 成人免费va视频| 自拍偷拍欧美精品| 在线观看免费亚洲| 五月天视频一区| 日韩精品一区二区三区swag| 国内外成人在线| 国产精品国产三级国产a| av电影在线观看一区| 亚洲主播在线观看| 日韩午夜中文字幕| 国产精品一区二区不卡| 亚洲欧洲日本在线| 欧美日韩在线播| 久久99精品久久久| 国产精品美女久久福利网站| 欧洲一区在线电影| 欧美a级理论片| 国产精品美女一区二区| 欧洲国内综合视频| 九九九精品视频| 中文字幕一区二区三区乱码在线 | 久久国产欧美日韩精品| 久久久国产精华| 色天天综合久久久久综合片| 日韩成人免费电影| 中文字幕国产一区| 欧美日韩精品一区二区天天拍小说 | 欧美成人r级一区二区三区| 国产精品18久久久久久vr | 国产精品久久久久aaaa樱花| 91极品视觉盛宴| 老司机精品视频线观看86| 亚洲欧洲一区二区三区| 欧美一级高清大全免费观看| 99精品国产视频| 日本不卡一区二区三区高清视频| 国产精品蜜臀在线观看| 日韩一区二区三区视频在线观看| 白白色亚洲国产精品| 日本成人在线不卡视频| 国产精品家庭影院| 欧美成人在线直播| 欧美日韩一区在线| 91首页免费视频| 精品亚洲成av人在线观看| 精品一区二区三区不卡| 亚洲自拍与偷拍| 国产精品你懂的| 精品捆绑美女sm三区| 欧美日韩国产影片| 一本色道久久综合亚洲91 | 久久影院午夜片一区| 欧美色电影在线| 91在线播放网址| 韩国一区二区三区| 日本vs亚洲vs韩国一区三区 | 色综合久久综合网欧美综合网| 一区二区三区中文字幕电影 | 亚洲视频一区二区在线观看| 91精品国产一区二区| 色国产精品一区在线观看| 国产精品一区二区在线观看网站| 午夜精品爽啪视频| 亚洲一区视频在线| 亚洲欧美日韩在线| 亚洲理论在线观看| 成人三级伦理片| 国内精品久久久久影院色| 日韩影院免费视频| 日韩专区欧美专区| 午夜精品福利久久久| 亚洲精品自拍动漫在线| **性色生活片久久毛片| 中文文精品字幕一区二区| 精品理论电影在线观看| 欧美不卡一二三| 欧美精品一区二区三区一线天视频 | 久久色视频免费观看| 久久综合九色综合欧美98| 日韩免费观看高清完整版在线观看| 91精品国产欧美日韩| 69久久99精品久久久久婷婷| 欧美高清精品3d| 欧美mv日韩mv国产网站| 亚洲精品在线观| 久久久久88色偷偷免费| 国产欧美一区二区精品性| 国产欧美日韩激情| 中文字幕亚洲一区二区av在线| 国产精品久久夜| 国产精品久久免费看| 中文字幕五月欧美| 亚洲一区二区在线视频| 日日摸夜夜添夜夜添精品视频| 午夜精品福利一区二区三区av| 日本麻豆一区二区三区视频| 久久成人免费网站| 丰满少妇久久久久久久| 国产欧美一区视频| 中文字幕va一区二区三区| 日韩一区日韩二区| 亚洲成人自拍网| 久久99九九99精品| 成人午夜av电影| 欧美私人免费视频| 日韩午夜电影av| 久久精品一区蜜桃臀影院| 亚洲欧美另类小说视频| 天天爽夜夜爽夜夜爽精品视频| 久久er精品视频| 国产福利一区二区| 欧美三级在线播放| 欧美xxxxx牲另类人与| 中文字幕日韩av资源站| 亚洲精品视频在线观看免费| 日韩成人免费在线| 99久久国产综合精品女不卡| 欧美日韩一区在线观看| 国产网站一区二区| 亚洲一二三四在线| 狠狠色狠狠色综合日日91app| 成人高清视频在线| 欧美一区二区高清| 国产精品久久三| 久久精品999| 91年精品国产| 久久先锋影音av鲁色资源网| 波多野结衣欧美| 日韩欧美国产精品| 亚洲一区二区av电影| 久久机这里只有精品| 91福利小视频| 国产三级一区二区三区| 亚洲电影在线播放| 成人伦理片在线| 日韩欧美不卡在线观看视频| 一区二区三区四区在线播放 | 亚洲国产三级在线| 国产精品一区二区免费不卡 | 亚洲精品在线一区二区| 亚洲综合丝袜美腿| 国产成人免费av在线| 日韩一级在线观看| 亚洲成人福利片| 92国产精品观看| 中文无字幕一区二区三区| 精品无人码麻豆乱码1区2区| 欧美一区二区三区四区视频| 亚洲精品国产精华液| 成人午夜电影久久影院| 精品国产乱码91久久久久久网站| 亚洲成人一区在线| 色婷婷综合久久久中文一区二区| 国产亚洲欧洲997久久综合| 免费观看久久久4p| 欧美日高清视频| 亚洲一区二区三区中文字幕 | 亚洲欧洲三级电影| 成人午夜碰碰视频| 国产欧美日本一区视频| 国产麻豆视频一区二区| 日韩精品在线一区二区| 麻豆免费精品视频| 欧美一级一区二区| 日韩电影在线免费观看| 欧美色电影在线| 亚洲第四色夜色| 欧美精品1区2区3区| 亚州成人在线电影| 欧美美女直播网站| 日韩在线a电影| 日韩一区二区电影| 国内精品自线一区二区三区视频| 欧美电影免费观看高清完整版在 | 欧美日韩国产色站一区二区三区| 一区二区三区国产豹纹内裤在线| 91浏览器打开| 亚洲国产精品麻豆| 91精品国产手机| 免费视频一区二区| 久久蜜桃香蕉精品一区二区三区| 精品在线播放午夜| 国产日韩欧美一区二区三区乱码| 国产成+人+日韩+欧美+亚洲| 国产精品乱码人人做人人爱 | 国产午夜亚洲精品理论片色戒| 韩国av一区二区三区四区| 久久久.com| 99久久精品国产麻豆演员表| 亚洲自拍与偷拍| 欧美一激情一区二区三区| 国产资源在线一区| 日韩一区在线看| 91精品黄色片免费大全|