内核模式下的注册表操作

VOID RegTest()
{
	WCHAR* pKey=L"\\Registry\\Machine\\SOFTWARE\\Yjz";
	// 查找项
	if (!NT_SUCCESS(RtlCheckRegistryKey(RTL_REGISTRY_ABSOLUTE,pKey)))
	{
		KdPrint(("注册表项不存在\r\n"));
		// 创建项
		if (NT_SUCCESS(RtlCreateRegistryKey(RTL_REGISTRY_ABSOLUTE,pKey)))
		{
			KdPrint(("注册表项创建成功\r\n"));
			// 查找键值
			WCHAR* pBuf=(WCHAR*)ExAllocatePool(PagedPool,30);
			RtlZeroMemory(pBuf,30);
			RtlCopyMemory(pBuf,L"Hello,World",wcslen(L"Hello,World")*sizeof(WCHAR));
			RTL_QUERY_REGISTRY_TABLE RegTable;
			RegTable.Flags=RTL_QUERY_REGISTRY_DIRECT;
			RegTable.Name=L"Hello";
			RegTable.EntryContext=pBuf;
			RegTable.DefaultType=REG_SZ;
			RegTable.DefaultLength=30;
			RegTable.DefaultData=REG_NONE;
			if (!NT_SUCCESS(RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE,pKey,&RegTable,NULL,NULL)))
			{
				KdPrint(("查询注册表键失败\r\n"));
				// 写入键值
				if (!NT_SUCCESS(RtlWriteRegistryValue(RTL_REGISTRY_ABSOLUTE,pKey,L"Hello",REG_SZ,pBuf,30+2)))
				{
					KdPrint(("写入注册表键值失败\r\n"));
				}
				else
				{
					KdPrint(("写入注册表键值=%ws\r\n",pBuf));
					ExFreePool(pBuf);
					pBuf=NULL;
					// 删除键值
					if (NT_SUCCESS(RtlDeleteRegistryValue(RTL_REGISTRY_ABSOLUTE,pKey,L"Hello")))
					{
						KdPrint(("删除键值成功\r\n"));
					}
					else
					{
						KdPrint(("删除键值失败\r\n"));
					}
				}
			}
			else
				KdPrint(("查询到的注册表键=%ws\r\n",pBuf));
		}
		else
			KdPrint(("注册表项创建失败\r\n"));
	}
	else
	{
		KdPrint(("注册表项存在\r\n"));
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值