我在寫一個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數據類型定義在哪裏?
編輯:
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;
定義是否有更多的代碼不見了?其他'table [0]'成員的其他值是什麼? 'status'的結果是什麼? –
'WCHAR keyname [20] =「參數」; CHAR def [20] =「參數」; WCHAR路徑[100] = L「\\ Registry \\ Machine \\ SYSTEM \\ CurrentControlSet \\ Services \\ hello \\ Parameters」; unsigned long buffer [100]; 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; 表[0]。DefaultLength = strlen的(DEF)+ 1;' ,狀態爲STATUS_SUCCESS '開關(狀態) { 情況STATUS_SUCCESS: \t DbgPrint( 「!實測值的值」); \t突破;' – johnye2e
對不起,這是我寫的: 'unsigned long類型緩衝區;'和'表[0] .EntryContext =緩存;' – johnye2e