2013-06-21 1 views
0

왜 파이썬 모듈 winreg가 Win7 호스트의 모든 하위 키와 값을 반환하지 않는지 궁금합니다. 나는 다음과 같은 얻을 레지스트리를 조회 할 기본 레지있는 CmdLine 명령을 사용하는 경우Python winreg Win7에서 하위 키가 누락되어

:

>reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI" 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI 
    ShowTabletKeyboard  REG_DWORD 0x0 
    LastLoggedOnProvider REG_SZ  {2A1ABE6F-476D-4E5B-FB68-21EF45555CC37} 
    LastLoggedOnSAMUser  REG_SZ  DOMAIN\USERNAME 
    LastLoggedOnUser REG_SZ  DOMAIN\USERNAME 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\BootAnimation 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\LogonSoundPlayed 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData 

나는 단지 다음과 같은 값과 하위 키 얻을 같은 위치 조회 할 수 파이썬 스크립트를 사용하는 경우 :

regread.py 값 : 마이크로 소프트 \ 윈도우 \ CurrentVersion을 \ 인증 \ 로그온 UI \ 소프트웨어 { 'ShowTabletKeyboard'0}

Subkeys: 
SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI 
['Background', 'BootAnimation'] 

보시다시피 일부 품목이 누락되었습니다. \ winreg를가 HKLM \ 소프트웨어에서 모든 값과 하위 키를 반환 wouln't 이유 이 http://bytes.com/topic/python/answers/802172-scanning-through-windows-registry

사람이 알고 있나요 : regread.py 다른 레지스트리 위치를 잡아 당겨 때 확인을 작동하는 것 같다 여기에 팀 골든 게시 한 코드를 기반으로 Windows 7 호스트의 Microsoft \ Windows \ CurrentVersion \ Authentication \ LogonUI. 저는 로컬 관리자입니다. 도메인 관리자 인 경우에도 여전히 작동하지 않습니다. 파이썬 3.3 (32 비트) 및 pywin32-218을 사용하고 있습니다.

답변

0

일단이 문제가 64/32 비트 창 리디렉션과 관련되어 있다는 것을 알게되면 주변을 둘러보기가 쉽습니다.

64 비트 호스트에서 레지스트리 값을 가져 오려면 다음을 사용해야했습니다.

key = winreg.OpenKey(aReg, subkey, 0, (winreg.KEY_WOW64_64KEY + winreg.KEY_READ)) 

(www.stackoverflow.com/ 질문/8506646/변경 - 64 비트 - 레지스트리에서-32-파이썬)

이 사이트는 무슨 일이 일어나고 있는지 아주 간단한 설명이 있습니다

python.6을 .x6.nabble.com/Seven-64bits-and-system32-syswow64-paths-td4540789.html

"64 비트 시스템에서 모든 64 비트 명령과 DLL은 \ windows \ system32에 있으며 모든 32 비트 명령과 DLL 중 \ windows \ SysWOW64에 있습니다 .64 비트 프로세스는 32 비트 프로세스에서 운영 체제가 경로를 다시 작성하고 \ windows \ system32를 참조 할 때 OS가 \ windows \ SysWOW64에 대한 참조를 다시 작성합니다. "

관련 문제