2012-06-21 5 views
4

확실히 존재하는 키에 대해 레지스트리 함수가 "찾을 수 없음"을 반환합니다. 올바른 문자셋을 사용하고 이중 백 슬래시를 사용하므로 문제가되지 않습니다.RegOpenKeyEx/RegGetValue 존재하는 키에 대해 ERROR_FILE_NOT_FOUND를 반환합니다.

여기
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Netmon3] 
"NetmonVersion"="3.4.2350.0" 
"NPLVersion"="03.02" 
"InstallDir"="C:\\prog\\netmon3\\" 
"NetmonEdition"="Capture and Parser Engine" 

함수 호출이다 :

x = RegOpenKeyExA(
      HKEY_LOCAL_MACHINE, 
      "SOFTWARE\\Microsoft\\Netmon3", 
      0, 
      KEY_READ, &hKey); 

리턴 값 X가 ERROR_FILE_NOT_FOUND 의미 2 여기

키 수출로부터 출력된다. 단순히 " SOFTWARE\\Microsoft"문자열을 사용하여 잘 작동합니다. 내가 찾을 수 없습니다 의미하는 결과로 2를 얻고, 다시

x = RegGetValueA(
     HKEY_LOCAL_MACHINE, 
     "SOFTWARE\\Microsoft\\Netmon3", 
     "InstallDir", 
     RRF_RT_ANY, 
     NULL, 
     (PVOID)install_directory, 
     &BufferSize 
     ); 

: RegGetValue()를 호출

같은 문제가있다.

모든 권한은 "읽기"권한이 있습니다.

내가 무엇을 놓치고 있더라도, 그것은 명백한 무엇인가보아야한다. 그러나 나의 두뇌를 긁어 모으고, 나는 그것을 볼 수 없다. -

마쉬 레이는 아래의 답이있다 : 나는 64 비트 시스템에서 32 비트를 컴파일되었다, 그리고 Netmon3 설치했다 64 비트. 빌드 설정을 64 비트로 변경하면 문제가 해결됩니다.

+0

이 32 비트 코드가 64 비트 운영 체제에서 실행되고 있습니까? –

+1

가상 키를 확인하십시오 (Wow6432Node 검색). –

답변

4

아마도 64 비트 Windows OS에서 32 비트 프로세스로 실행하고 있습니까?

1

은 또한 32 비트 코드를 사용할 수 있습니다,하지만 당신은 추가 플래그 지정해야 다음 isWin64Bit 방법의 구현이 here을 찾을 수 있습니다

REGSAM flag = KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS; 

if(isWin64Bit()) flag |= KEY_WOW64_64KEY; 
else flag |= KEY_WOW64_32KEY; 

LONG err = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, SOME_REGKEY, 0, flag, &hKey); 

합니다.

+0

감사합니다. 작동합니다! –

관련 문제