저는 Uart16550 드라이버를 작성하고 있는데, RtlQueryRegistryValues를 사용하여 초기화 매개 변수를 레지스트리에서 읽어야합니다. RtlQueryRegistryValues REG_DWORD를 읽습니다.
는 매개 변수가 REG_DWORD로 레지스트리에 저장됩니다RTL_QUERY_REGISTRY_TABLE table[2];
및
table[1].QueryRoutine = NULL;
table[1].Name = NULL;
을 (코드의 많은 ... 생략) 나는 내 테이블을 설정하기 위해 노력하고있어 :
unsigned long buffer;
(DWORD가 ntddk.h에 정의되어 있지 나는 내가 WinDef.h 포함 치신 있는지 확실하지 않습니다 때문에),451,515,및
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]'의 나머지 멤버들에 대한 다른 값은 무엇입니까? 그리고'상태'의 결과는 무엇입니까? –
'WCHAR keyname [20] = "매개 변수"; CHAR def [20] = "매개 변수"; WCHAR 경로 [100] = L "\\ Registry \\ Machine \\ SYSTEM \\ CurrentControlSet \\ Services \\ hello \\ Parameters"; 부호없는 긴 버퍼 [100]; 테이블 [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 (! "의 값을 발견"); 에서' – johnye2e
레지스트리)? 나는 똑같은 문제에 직면하고있다. 키 저장 가치는 어디 있나? – johnye2e