나는 윈도우 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_ROOT
이 HKCU
과 HKLM
과 같은 종류의 조합이라는 것을 알았지 만 관련성이 있는지 확실하지 않습니다.
프로그램이 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
당신이 VS 내부에서이 작업을 실행하고 있습니까? –
실제로. VS 및 대상 컴퓨터 (Windows 7 64 비트)에서 실행하면 결과가 동일합니다. –