2014-07-08 13 views
3

나는 윈도우 7 비주얼 스튜디오 2010과 함께 작업하고 64 비트에서 실행하기 이전의 Visual Studio C++ COM이 실행 업데이트 임무를 봤는데 HKCR에 기록 (자체가 32 비트 인 프로그램입니다.)시도 레지스트리 쓰기 대신

그 과정의 일부는 레지스트리 읽기/쓰기/생성이 여전히 작동하는지 확인하고/또는 HKEY_LOCAL_MACHINE이 아닌 HKEY_CURRENT_USER을 사용하도록 업데이트하는 것과 관련됩니다. 그러나 RegCreateKeyEx, RegQueryValue, RegSetValue 등을 사용하는 레지스트리 기능을 테스트 할 때 ProcessMonitor를 사용하여 레지스트리 액세스를 관찰 할 때 (잠재적으로?) 이상한 행동을 발견했습니다.

루트가 HKEY_CURRENT_USER으로 지정되면 모든 것이 예상대로 작동하는 것 같습니다. 예를 들어, 다음 키 존재가 만들어 보여줍니다 키

HKCU\Software\Classes\CLSID\[Guid] 

ProcessMonitor를 만들려고

예상된다
HKCU\Software\Classes\Wow6432Node\CLSID\[Guid] 

(64 비트 시스템에서 32 비트 응용 프로그램). 의 키

가 가
HKLM\Software\Classes\CLSID\[Guid] 
가 가

ProcessMonitor 만든 다음 키의 존재를 보여줍니다 만들

HKCR\Wow6432Node\CLSID\[Guid] 

을 시도 할 때 루트가 HKEY_LOCAL_MACHINE 경우

그러나이 예상되는 동작인가? HKEY_LOCAL_MACHINE에 쓰기 제한과 관련이 있습니까? 이것은 레지스트리 액세스를 다루는 첫 번째 시간이기 때문에 나는 핵심적인 세부 사항에 익숙하지 않습니다. 어떤 연구를 통해 나는 HKEY_CLASSES_ROOTHKCUHKLM과 같은 종류의 조합이라는 것을 알았지 만 관련성이 있는지 확실하지 않습니다.

프로그램이 UAC가 비활성화 된 상태에서 관리자로 실행 중입니다. 첫 번째 레지스트리 액세스 pszRootKey = 'Software/Classes'로, 다음과 같습니다, 그리고 모든 다른 m_hk

dwErr = RegCreateKeyEx(
     HKEY_LOCAL_MACHINE, pszRootKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL, 
     &m_hk, NULL 
     ); 

편집 오프 빌드 :

코드를 통해 RegCreateKeyEx (위의 호출을 스테핑)을 ProcessMonitor에 다음과 같은 생산 :

Operation  | Path | Result | Detail 
--------------------------------------------------------------------------------- 
RegQueryKey | HKLM | SUCCESS | Query: HandleTags, HandleTags: 0x0 
RegCreateKey | HKCR | SUCCESS | Desired Access: All Access, Disposition:REG_OPENED_EXISTING_KEY 
RegSetInfoKey | HKCR | SUCCESS | KeySetInformationClass: KeySetHandleTagsInformation, Length: 0 
+0

당신이 VS 내부에서이 작업을 실행하고 있습니까? –

+0

실제로. VS 및 대상 컴퓨터 (Windows 7 64 비트)에서 실행하면 결과가 동일합니다. –

답변

0

UAC를 사용하지 않도록 설정 한 관리자 권한으로 프로그램을 실행하면 사용자 계정 컨트롤과 관련된 문제가 아닌 것으로 나타납니다. 이 문제는 WOW64가 원인 일 가능성이 큽니다. 당신은이 위치에서 이에 대한 자세한 정보를 확인할 수 있습니다

관련 문제