我正在编写一个 Uart16550 驱动程序,我要做的一件事是使用 RtlQueryRegistryValues 从注册表中读取一些初始化参数。
(跳过了很多代码......)
RTL_QUERY_REGISTRY_TABLE table[2];
和
table[1].QueryRoutine = NULL;
table[1].Name = NULL;
该参数作为 REG_DWORD 存储在注册表中,我正在尝试设置我的表:
unsigned long buffer;
(因为 ntddk.h 中没有定义 DWORD,而且我不确定我是否破坏了包括 WinDef.h 在内的任何内容)和
table[0].EntryContext = &buffer;
调用 RtlQueryRegistryValues 的状态为 STATUS_SUCCESS
status = RtlQueryRegistryValues(
RTL_REGISTRY_ABSOLUTE,
path,
table,
NULL,
NULL);
但是当我尝试
DbgPrint("registry: %lu", buffer)
我得到的数字太大(我预计结果是 1 或 2)。
我是否对 DbgPrint 做错了,或者我的参数没有为查询表正确设置?
RED_DWORD 数据类型在哪里定义?
编辑:
WCHAR keyname[20] = "parameter";
CHAR def[20] = "parameter";
WCHAR path[100] = L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\hello\\Parameters";
unsigned long buffer;
table[0].QueryRoutine = NULL;
table[0].Name = keyname;
table[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
table[0].EntryContext = &buffer;
table[0].DefaultType = REG_DWORD;
table[0].DefaultData = def;
table[0].DefaultLength = strlen(def) + 1;