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"));
}
}
内核模式下的注册表操作
最新推荐文章于 2023-05-08 15:10:56 发布