Windows内核函数 - 其他

        之前介绍了部分内核模式下操作注册表的函数,使用方法都比较繁琐,往往一个操作需要若干个函数的共同配合。

        为了简化注册表操作,DDK还提供了一些列以Rtl开头的运行时函数,这些函数把前面介绍的函数进行了封装。往往一条函数就能实现前面介绍的若干条函数的功能。

表Rtl**关于注册表的操作

分类

描述
RtlCreateRegistryKey创建注册表
RtlCheckRegistryKey查看某注册表项是否存在
RtlCreateRegistryValue写注册表
RtlDeleteRegistryValue删除注册表的子键

        从上表中可以看出,Rtl**系列函数对注册表的相关操作。下面的代码演示了再驱动程序中如何使用这些函数。从代码中可以看出,其操作比Zw**系列函数的操作要简单得多。

	NTSTATUS ntStatus = RtlCreateRegistryKey(RTL_REGISTRY_SERVICES, L"HelloDDK\\XH");
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Create the item successfully!\n"));
	}

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

	// 写入REG_DWORD数据
	ULONG value1 = 100;
	// 写注册表
	ntStatus = RtlWriteRegistryValue(RTL_REGISTRY_SERVICES, L"HelloDDK\\XH", L"DWORD_Value", REG_DWORD, &value1, sizeof(value1));
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Write the DWORD value successfully!\n"));
	}

	PWCHAR szString = L"Hello DDK";
	// 写注册表
	ntStatus = RtlWriteRegistryValue(RTL_REGISTRY_SERVICES, L"HelloDDK\\XH", L"SZ_Value", REG_SZ, &szString, sizeof(szString)*2+2);
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Write the REG_SZ value successfully!\n"));
	}

	// 初始化变量
	PRTL_QUERY_REGISTRY_TABLE paramTable[2];
	RtlZeroMemory(paramTable, sizeof(paramTable));

	ULONG defaultData = 0;
	ULONG uQueryValue = 0;
	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\\XH", paramTable[0], 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\\XH", L"DWORD_Value");
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Delete the value successfully.\n"));
	}


        本章介绍了Windows内核模式下的一些常用内核函数,这些函数在驱动程序的开发中将会经常用到。对这些函数的熟练掌握是十分必要的。本章介绍了字符串相关的一些内核函数。这些函数包括操作标准C语言字符串的,也包括操作UNICODE字符串的。另外,内核函数这块还介绍了与文件及注册表相关的内核函数。这些内核函数在后面的章节会经常用到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WendyWJGu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值