Я пишу драйвер Uart16550, и одна из вещей, которую мне нужно сделать, - это прочитать из реестра некоторые параметры инициализации, используя RtlQueryRegistryValues.RtlQueryRegistryValues read REG_DWORD
(много кода пропущено ...)
RTL_QUERY_REGISTRY_TABLE table[2];
и
table[1].QueryRoutine = NULL;
table[1].Name = NULL;
Параметр хранится в реестре как REG_DWORD и я пытаюсь установить свою таблицу:
unsigned long buffer;
(потому что DWORD не определен в ntddk.h, и я не уверен, если я нарушу что-нибудь в том числе 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?
EDIT:
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;
Есть больше кода не хватает? Каковы остальные значения для остальных членов таблицы [0] '? И каков результат «статуса»? –
'WCHAR keyname [20] =" параметр "; CHAR def [20] = "параметр"; Путь WCHAR [100] = L "\\ Реестр \\ Машина \\ SYSTEM \\ CurrentControlSet \\ Services \\ hello \\ Параметры"; unsigned long buffer [100]; таблица [0] .QueryRoutine = NULL; таблица [0] .Name = keyname; таблица [0] .Flags = RTL_QUERY_REGISTRY_DIRECT; таблица [0] .EntryContext = buffer; таблица [0] .DefaultType = REG_DWORD; таблица [0] .DefaultData = def; таблица [0].DefaultLength = StrLen (DEF) + 1; ' и статус STATUS_SUCCESS ' переключатель (статус) { случай STATUS_SUCCESS: \t DbgPrint ("! Найдено значение"); \t перерыв, ' – johnye2e
К сожалению, это то, что я писал: ' неподписанных долго буфер, и 'таблица [0] .EntryContext = & буфер;' – johnye2e