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

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

?? driver.cpp

?? 驅動開發技術詳解附書源碼示例
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		KdPrint(("Open register successfully\n"));
	}

	ULONG ulSize;
	//第一次調用ZwQueryKey為了獲取KEY_FULL_INFORMATION數據的長度
	ZwQueryKey(hRegister,
		KeyFullInformation,
		NULL,
		0,
		&ulSize);

	PKEY_FULL_INFORMATION pfi = 
		(PKEY_FULL_INFORMATION)
		ExAllocatePool(PagedPool,ulSize);

	//第二次調用ZwQueryKey為了獲取KEY_FULL_INFORMATION數據的數據
	ZwQueryKey(hRegister,
		KeyFullInformation,
		pfi,
		ulSize,
		&ulSize);

	for (ULONG i=0;i<pfi->SubKeys;i++)
	{
		//第一次調用ZwEnumerateKey為了獲取KEY_BASIC_INFORMATION數據的長度
		ZwEnumerateKey(hRegister,
				i,
				KeyBasicInformation,
				NULL,
				0,
				&ulSize);

		PKEY_BASIC_INFORMATION pbi =
			(PKEY_BASIC_INFORMATION)
			ExAllocatePool(PagedPool,ulSize);

		//第二次調用ZwEnumerateKey為了獲取KEY_BASIC_INFORMATION數據的數據
		ZwEnumerateKey(hRegister,
				i,
				KeyBasicInformation,
				pbi,
				ulSize,
				&ulSize);

		UNICODE_STRING uniKeyName;
		uniKeyName.Length = 
		uniKeyName.MaximumLength =
		(USHORT)pbi->NameLength;

		uniKeyName.Buffer = pbi->Name;

		KdPrint(("The %d sub item name:%wZ\n",i,&uniKeyName));

		ExFreePool(pbi);
	}

	ExFreePool(pfi);
	ZwClose(hRegister);
}

#pragma INITCODE
VOID EnumerateSubValueRegTest()
{
	UNICODE_STRING RegUnicodeString;
	HANDLE hRegister;

	//初始化UNICODE_STRING字符串
	RtlInitUnicodeString( &RegUnicodeString, 
		MY_REG_SOFTWARE_KEY_NAME);
	
	OBJECT_ATTRIBUTES objectAttributes;
	//初始化objectAttributes
	InitializeObjectAttributes(&objectAttributes,
							&RegUnicodeString,
							OBJ_CASE_INSENSITIVE,//對大小寫敏感
							NULL, 
							NULL );
	//打開注冊表
	NTSTATUS ntStatus = ZwOpenKey( &hRegister,
							KEY_ALL_ACCESS,
							&objectAttributes);

	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Open register successfully\n"));
	}

	ULONG ulSize;
	ZwQueryKey(hRegister,
		KeyFullInformation,
		NULL,
		0,
		&ulSize);

	PKEY_FULL_INFORMATION pfi = 
		(PKEY_FULL_INFORMATION)
		ExAllocatePool(PagedPool,ulSize);

	ZwQueryKey(hRegister,
		KeyFullInformation,
		pfi,
		ulSize,
		&ulSize);

	for (ULONG i=0;i<pfi->Values;i++)
	{
		ZwEnumerateValueKey(hRegister,
				i,
				KeyValueBasicInformation,
				NULL,
				0,
				&ulSize);

		PKEY_VALUE_BASIC_INFORMATION pvbi =
			(PKEY_VALUE_BASIC_INFORMATION)
			ExAllocatePool(PagedPool,ulSize);

		ZwEnumerateValueKey(hRegister,
				i,
				KeyValueBasicInformation,
				pvbi,
				ulSize,
				&ulSize);

		UNICODE_STRING uniKeyName;
		uniKeyName.Length = 
		uniKeyName.MaximumLength =
		(USHORT)pvbi->NameLength;

		uniKeyName.Buffer = pvbi->Name;

		KdPrint(("The %d sub value name:%wZ\n",i,&uniKeyName));

		if (pvbi->Type==REG_SZ)
		{
			KdPrint(("The sub value type:REG_SZ\n"));
		}else if (pvbi->Type==REG_MULTI_SZ)
		{
			KdPrint(("The sub value type:REG_MULTI_SZ\n")); 

		}else if (pvbi->Type==REG_DWORD)
		{
			KdPrint(("The sub value type:REG_DWORD\n")); 
		}else if (pvbi->Type==REG_BINARY)
		{
			KdPrint(("The sub value type:REG_BINARY\n")); 
		}

		ExFreePool(pvbi);
	}

	ExFreePool(pfi);
	ZwClose(hRegister);
}

#pragma INITCODE
void RtlRegTest()
{
	//創建子項目
	NTSTATUS ntStatus =
		RtlCreateRegistryKey(RTL_REGISTRY_SERVICES,L"HelloDDK\\Zhangfan");
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Create the item successfully\n"));
	}

	//檢查某項是否存在
	ntStatus =
		RtlCheckRegistryKey(RTL_REGISTRY_SERVICES,L"HelloDDK\\Zhangfan");
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("The item is exist\n"));
	}

	//寫入REG_DWORD的數據
	ULONG value1 = 100;
	ntStatus = 
		RtlWriteRegistryValue(RTL_REGISTRY_SERVICES,
							L"HelloDDK\\Zhangfan",
							L"DWORD_Value",
							REG_DWORD,
							&value1,
							sizeof(value1));
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Write the DWORD value succuessfully\n"));
	}

	PWCHAR szString = L"Hello DDK";
	ntStatus = 
		RtlWriteRegistryValue(RTL_REGISTRY_SERVICES,
							L"HelloDDK\\Zhangfan",
							L"SZ_Value",
							REG_SZ,
							szString,
							wcslen(szString)*2+2);

	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Write the REG_SZ value succuessfully\n"));
	}

    RTL_QUERY_REGISTRY_TABLE paramTable[2];
    RtlZeroMemory(paramTable, sizeof(paramTable));

	ULONG defaultData=0;
	ULONG uQueryValue;
    paramTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
    paramTable[0].Name = L"DWORD_Value";
    paramTable[0].EntryContext = &uQueryValue;
    paramTable[0].DefaultType = REG_DWORD;
    paramTable[0].DefaultData = &defaultData;
    paramTable[0].DefaultLength = sizeof(ULONG);

	//查詢REG_DWORD的數據
	ntStatus = RtlQueryRegistryValues(RTL_REGISTRY_SERVICES,
						L"HelloDDK\\Zhangfan",
						paramTable,
						NULL,
						NULL);
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Query the item successfully\n"));
		KdPrint(("The item is :%d\n",uQueryValue));
	}
	
	//刪除子鍵
	ntStatus = RtlDeleteRegistryValue(RTL_REGISTRY_SERVICES,
					L"HelloDDK\\Zhangfan",
					L"DWORD_Value");
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("delete the value successfully\n"));
	}
}

#pragma INITCODE
VOID RegTest() 
{
 	CreateRegTest();
// 	OpenRegTest();
// 	SetRegTest();
//	QueryRegTest();
//	EnumerateSubItemRegTest();
//	EnumerateSubValueRegTest();
	DeleteItemRegTest();
//	RtlRegTest();
}

/************************************************************************
* 函數名稱: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);

	RegTest();

	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一区二区三区免费野_久草精品视频
欧美日本在线看| 欧美亚洲另类激情小说| 一区二区三区成人在线视频| 中文字幕欧美国产| 精品毛片乱码1区2区3区| 欧美日韩精品系列| 欧洲av一区二区嗯嗯嗯啊| 成人看片黄a免费看在线| 美女一区二区三区在线观看| 日韩av电影免费观看高清完整版| 亚洲电影一区二区三区| 一二三四社区欧美黄| 亚洲色图在线看| 亚洲日穴在线视频| 一区二区三区资源| 亚洲妇女屁股眼交7| 日韩精品一卡二卡三卡四卡无卡| 午夜精品一区在线观看| 日本大胆欧美人术艺术动态 | 久久国产综合精品| 日本特黄久久久高潮| 日日欢夜夜爽一区| 日本不卡一区二区三区高清视频| 婷婷中文字幕综合| 美女诱惑一区二区| 从欧美一区二区三区| 国产91丝袜在线观看| 不卡的电视剧免费网站有什么| 国产91对白在线观看九色| av激情亚洲男人天堂| 92国产精品观看| 欧美影片第一页| 欧美精品日日鲁夜夜添| 精品国产污污免费网站入口| 久久久久久久久久久久久夜| 国产精品国产三级国产aⅴ入口| 亚洲视频 欧洲视频| 天堂久久一区二区三区| 日本不卡的三区四区五区| 国产乱码精品一区二区三区忘忧草| 国产在线视频一区二区三区| 91在线小视频| 欧美人妖巨大在线| 欧美极品另类videosde| 亚洲一区二区三区不卡国产欧美| 久久99精品国产.久久久久| 成人手机在线视频| 欧美日韩一区二区在线观看视频| 精品成人一区二区三区四区| 玉足女爽爽91| 国产一区二区三区四区在线观看| 色综合天天在线| 日韩午夜小视频| 亚洲欧美在线另类| 九色综合狠狠综合久久| 色综合久久天天| 久久久久久久久久看片| 天天色天天操综合| 99精品国产视频| 精品久久久久av影院| 一个色在线综合| 成人在线综合网| 8x8x8国产精品| 亚洲三级电影网站| 成人一区二区在线观看| 欧美日本在线观看| 亚洲精品国产品国语在线app| 国产另类ts人妖一区二区| 欧美另类久久久品| 一级中文字幕一区二区| 成人一区在线看| 亚洲精品在线一区二区| 日韩国产欧美三级| 欧美精选午夜久久久乱码6080| 中文字幕欧美激情| 国产91精品一区二区麻豆网站 | 国产精品女人毛片| 韩国三级在线一区| 日韩欧美国产一区二区在线播放 | 天天操天天干天天综合网| 99re在线精品| 亚洲午夜在线视频| 国产日韩精品久久久| 日韩电影在线观看网站| 欧美综合天天夜夜久久| 国产精品全国免费观看高清| 精品一区二区三区免费视频| 欧美一区二区三区免费在线看| 亚洲最色的网站| 91丨九色丨国产丨porny| 国产日韩欧美精品一区| 国产一区二区三区久久悠悠色av| 日韩午夜电影在线观看| 麻豆国产欧美日韩综合精品二区| 777午夜精品免费视频| 五月激情综合婷婷| 欧美一区永久视频免费观看| 日韩电影免费在线观看网站| 91精品国产乱码| 九九国产精品视频| 精品国产亚洲在线| 国产精品羞羞答答xxdd| 中文字幕欧美日韩一区| 91麻豆免费观看| 亚洲亚洲精品在线观看| 在线不卡的av| 精品中文字幕一区二区小辣椒| 精品第一国产综合精品aⅴ| 高清shemale亚洲人妖| 亚洲欧美偷拍卡通变态| 欧美日韩国产一级二级| 麻豆成人免费电影| 国产精品久久久久影院老司| 一本一本久久a久久精品综合麻豆| 一区二区三区中文字幕在线观看| 91精品国产综合久久精品app| 伦理电影国产精品| 国产精品护士白丝一区av| 欧美日韩精品系列| 国产一区视频导航| 亚洲欧美日韩国产综合| 精品理论电影在线观看| 成人性生交大片免费看视频在线| 一区二区三区四区在线播放| 日韩精品一区二区三区在线| 国产成人精品免费视频网站| 亚洲一二三四在线观看| 精品国产人成亚洲区| 91麻豆精东视频| 激情综合网天天干| 亚洲国产精品尤物yw在线观看| 久久久不卡影院| 欧美三级中文字| jlzzjlzz欧美大全| 久久国产麻豆精品| 亚洲国产视频在线| 国产欧美一区二区精品久导航 | 欧美精三区欧美精三区| 粉嫩av一区二区三区在线播放| 亚洲国产精品久久人人爱| 日本一区二区视频在线观看| 日韩一区二区三区在线视频| 色偷偷久久一区二区三区| 国产一区二区按摩在线观看| 亚洲午夜免费视频| 国产精品福利av| 精品久久久久一区| 宅男噜噜噜66一区二区66| 色综合色综合色综合| 国产成人av电影在线播放| 久久国内精品视频| 免费人成精品欧美精品| 午夜精品福利久久久| 一区二区三区 在线观看视频| 国产三级久久久| 欧美电影免费观看完整版| 欧美日韩免费一区二区三区视频| 99久久久久久99| 成人av网址在线| 国产成人av电影在线| 国产乱码精品一区二区三区忘忧草| 青椒成人免费视频| 日本三级亚洲精品| 日韩精品1区2区3区| 天天综合色天天综合色h| 亚洲国产sm捆绑调教视频| 亚洲国产日韩a在线播放| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲国产精品精华液2区45| 欧美国产日产图区| 国产精品久久久久久久裸模| 国产精品乱码久久久久久| 国产精品乱码久久久久久| 国产精品视频观看| 136国产福利精品导航| 亚洲欧美激情小说另类| 一区二区三区四区不卡视频| 亚洲综合视频网| 亚洲成人av在线电影| 青青草91视频| 国产一区二区三区精品欧美日韩一区二区三区| 免费观看日韩电影| 国产伦精品一区二区三区视频青涩 | 中国色在线观看另类| 国产精品国产三级国产aⅴ入口| 国产精品夫妻自拍| 午夜一区二区三区视频| 日本不卡高清视频| 国产成人av影院| 91在线码无精品| 欧美日韩三级一区二区| 日韩一区二区三区三四区视频在线观看 | 成人av资源在线观看| 色综合亚洲欧洲| 日韩小视频在线观看专区| 日本一区二区成人在线| 亚洲国产一区二区a毛片| 国模娜娜一区二区三区| 91视频国产观看| 日韩亚洲欧美中文三级|