"winreg" --- 윈도우 레지스트리 액세스
*************************************

======================================================================

이 함수들은 윈도우 레지스트리 API를 파이썬에 노출합니다. 프로그래머가
명시적으로 닫는 것을 무시하더라도 핸들이 올바르게 닫히도록 하기 위해,
레지스트리 핸들로 정수를 사용하는 대신 핸들 객체가 사용됩니다.

버전 3.3에서 변경: 이 모듈의 여러 함수는 "WindowsError"를 발생시켜왔는
데, 이제는 "OSError"의 별칭입니다.


함수
====

이 모듈은 다음 함수를 제공합니다:

winreg.CloseKey(hkey)

   이전에 열린 레지스트리 키를 닫습니다. *hkey* 인자는 이전에 열린 키
   를 지정합니다.

   참고:

     이 메서드를 사용하여 (또는 "hkey.Close()"를 통해) *hkey*가 닫히지
     않으면, *hkey* 객체가 파이썬에 의해 파괴될 때 닫힙니다.

winreg.ConnectRegistry(computer_name, key)

   다른 컴퓨터에 있는 사전 정의된 레지스트리 핸들에 연결하고, 핸들 객
   체를 반환합니다.

   *computer_name*은 "r"\\computername"" 형식의 원격 컴퓨터 이름입니다
   . "None"이면, 로컬 컴퓨터가 사용됩니다.

   *key*는 연결할 사전 정의된 핸들입니다.

   반환 값은 열린 키의 핸들입니다. 함수가 실패하면, "OSError" 예외가
   발생합니다.

   인자 "computer_name", "key"로 감사 이벤트 "winreg.ConnectRegistry"
   를 발생시킵니다.

   버전 3.3에서 변경: 위를 참조하십시오.

winreg.CreateKey(key, sub_key)

   지정된 키를 만들거나 열어, 핸들 객체를 반환합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *sub_key*는 이 메서드가 열거나 만드는 키의 이름을 지정하는 문자열입
   니다.

   *key*가 사전 정의된 키 중 하나이면, *sub_key*는 "None"일 수 있습니
   다. 이 경우, 반환된 핸들은 함수에 전달된 것과 같은 키 핸들입니다.

   키가 이미 존재하면, 이 함수는 기존 키를 엽니다.

   반환 값은 열린 키의 핸들입니다. 함수가 실패하면, "OSError" 예외가
   발생합니다.

   인자 "key", "sub_key", "access"로 감사 이벤트 "winreg.CreateKey"를
   발생시킵니다.

   인자 "key"로 감사 이벤트 "winreg.OpenKey/result"를 발생시킵니다.

   버전 3.3에서 변경: 위를 참조하십시오.

winreg.CreateKeyEx(key, sub_key, reserved=0, access=KEY_WRITE)

   지정된 키를 만들거나 열어, 핸들 객체를 반환합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *sub_key*는 이 메서드가 열거나 만드는 키의 이름을 지정하는 문자열입
   니다.

   *reserved*는 예약된 정수이며, 0이어야 합니다. 기본값은 0입니다.

   *access*는 키에 대한 원하는 보안 액세스를 기술하는 액세스 마스크를
   지정하는 정수입니다. 기본값은 "KEY_WRITE"입니다. 허용되는 다른 값은
   액세스 권한을 참조하십시오.

   *key*가 사전 정의된 키 중 하나이면, *sub_key*는 "None"일 수 있습니
   다. 이 경우, 반환된 핸들은 함수에 전달된 것과 같은 키 핸들입니다.

   키가 이미 존재하면, 이 함수는 기존 키를 엽니다.

   반환 값은 열린 키의 핸들입니다. 함수가 실패하면, "OSError" 예외가
   발생합니다.

   인자 "key", "sub_key", "access"로 감사 이벤트 "winreg.CreateKey"를
   발생시킵니다.

   인자 "key"로 감사 이벤트 "winreg.OpenKey/result"를 발생시킵니다.

   버전 3.2에 추가.

   버전 3.3에서 변경: 위를 참조하십시오.

winreg.DeleteKey(key, sub_key)

   지정된 키를 삭제합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *sub_key*는 *key* 매개 변수로 식별된 키의 서브 키여야 하는 문자열입
   니다. 이 값은 "None"이 아니어야 하며, 키에 서브 키가 없을 수 있습니
   다.

   *이 메서드는 서브 키가 있는 키를 삭제할 수 없습니다.*

   메서드가 성공하면, 모든 값을 포함하여 전체 키가 제거됩니다. 메서드
   가 실패하면, "OSError" 예외가 발생합니다.

   인자 "key", "sub_key", "access"로 감사 이벤트 "winreg.DeleteKey"를
   발생시킵니다.

   버전 3.3에서 변경: 위를 참조하십시오.

winreg.DeleteKeyEx(key, sub_key, access=KEY_WOW64_64KEY, reserved=0)

   지정된 키를 삭제합니다.

   참고:

     "DeleteKeyEx()" 함수는 64비트 버전의 윈도우에 특정한
     RegDeleteKeyEx 윈도우 API 함수로 구현됩니다. RegDeleteKeyEx 설명
     서를 참조하십시오.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *sub_key*는 *key* 매개 변수로 식별된 키의 서브 키여야 하는 문자열입
   니다. 이 값은 "None"이 아니어야 하며, 키에 서브 키가 없을 수 있습니
   다.

   *reserved*는 예약된 정수이며, 0이어야 합니다. 기본값은 0입니다.

   *access*는 키에 대한 원하는 보안 액세스를 기술하는 액세스 마스크를
   지정하는 정수입니다. 기본값은 "KEY_WOW64_64KEY"입니다. 허용되는 다
   른 값은 액세스 권한을 참조하십시오.

   *이 메서드는 서브 키가 있는 키를 삭제할 수 없습니다.*

   메서드가 성공하면, 모든 값을 포함하여 전체 키가 제거됩니다. 메서드
   가 실패하면, "OSError" 예외가 발생합니다.

   지원되지 않는 윈도우 버전에서는, "NotImplementedError" 가 발생합니
   다.

   인자 "key", "sub_key", "access"로 감사 이벤트 "winreg.DeleteKey"를
   발생시킵니다.

   버전 3.2에 추가.

   버전 3.3에서 변경: 위를 참조하십시오.

winreg.DeleteValue(key, value)

   레지스트리 키에서 명명된 값을 제거합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *value*는 제거할 값을 식별하는 문자열입니다.

   인자 "key", "value"로 감사 이벤트 "winreg.DeleteValue"를 발생시킵니
   다.

winreg.EnumKey(key, index)

   열린 레지스트리 키의 서브 키를 열거하고, 문자열을 반환합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *index*는 꺼낼 키의 인덱스를 식별하는 정수입니다.

   이 함수는 호출될 때마다 하나의 서브 키 이름을 꺼냅니다. 일반적으로
   더 이상 사용할 수 있는 값이 없음을 나타내는 "OSError" 예외가 발생할
   때까지 반복적으로 호출됩니다.

   인자 "key", "index"로 감사 이벤트 "winreg.EnumKey"를 발생시킵니다.

   버전 3.3에서 변경: 위를 참조하십시오.

winreg.EnumValue(key, index)

   열린 레지스트리 키의 값을 열거하고, 튜플을 반환합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *index*는 꺼낼 값의 인덱스를 식별하는 정수입니다.

   이 함수는 호출될 때마다 하나의 서브 키 이름을 꺼냅니다. 일반적으로
   더는 값이 없음을 표시하는 "OSError" 예외가 발생할 때까지 반복적으로
   호출됩니다.

   결과는 3개의 항목으로 구성된 튜플입니다:

   +---------+----------------------------------------------+
   | 인덱스  | 의미                                         |
   |=========|==============================================|
   | "0"     | 값 이름을 식별하는 문자열                    |
   +---------+----------------------------------------------+
   | "1"     | 값 데이터를 담은 객체, 형이 하부 레지스트리  |
   |         | 유형에 따라 달라집니다                       |
   +---------+----------------------------------------------+
   | "2"     | 값 데이터의 형을 식별하는 정수               |
   |         | ("SetValueEx()"에 대한 설명서에 있는 표를 참 |
   |         | 조하십시오)                                  |
   +---------+----------------------------------------------+

   인자 "key", "index"로 감사 이벤트 "winreg.EnumValue"를 발생시킵니다
   .

   버전 3.3에서 변경: 위를 참조하십시오.

winreg.ExpandEnvironmentStrings(str)

   "REG_EXPAND_SZ"와 같은 문자열에서 환경 변수 자리 표시자 "%NAME%"을
   확장합니다:

      >>> ExpandEnvironmentStrings('%windir%')
      'C:\\Windows'

   인자 "str"로 감사 이벤트 "winreg.ExpandEnvironmentStrings"를 발생시
   킵니다.

winreg.FlushKey(key)

   키의 모든 어트리뷰트를 레지스트리에 씁니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   키를 변경하기 위해 "FlushKey()"를 호출할 필요는 없습니다. 레지스트
   리 변경은 지연 플러셔를 사용하여 레지스트리에 의해 디스크로 플러시
   됩니다. 레지스트리 변경은 시스템 종료 시에도 디스크로 플러시 됩니다
   . "CloseKey()"와 달리, "FlushKey()" 메서드는 모든 데이터가 레지스트
   리에 기록될 때만 반환합니다. 응용 프로그램은 레지스트리 변경이 디스
   크에 있다는 절대적인 확신이 필요할 때만 "FlushKey()"를 호출해야 합
   니다.

   참고:

     "FlushKey()" 호출이 필요한지 모른다면, 아마도 필요하지 않습니다.

winreg.LoadKey(key, sub_key, file_name)

   지정된 키 아래에 서브 키를 만들고 지정된 파일에 있는 등록 정보를 그
   서브 키에 저장합니다.

   *key*는 "ConnectRegistry()"가 반환한 핸들이거나 상수 "HKEY_USERS"나
   "HKEY_LOCAL_MACHINE" 중 하나입니다.

   *sub_key*는 로드할 서브 키를 식별하는 문자열입니다.

   *file_name*은 레지스트리 데이터를 로드할 파일의 이름입니다. 이 파일
   은 "SaveKey()" 함수로 만들어졌어야 합니다. FAT(file allocation
   table) 파일 시스템에서, 파일명은 확장자가 없을 수 있습니다.

   호출하는 프로세스에 "SE_RESTORE_PRIVILEGE" 권한(privilege)이 없으면
   "LoadKey()"에 대한 호출이 실패합니다. 권한(privilege)은 허가
   (permissions)와 다름에 유의하십시오 -- 자세한 내용은 RegLoadKey 설
   명서를 참조하십시오.

   *key*가 "ConnectRegistry()"가 반환한 핸들이면, *file_name*에 지정된
   경로는 원격 컴퓨터에 상대적입니다.

   인자 "key", "sub_key", "file_name"으로 감사 이벤트 "winreg.LoadKey"
   를 발생시킵니다.

winreg.OpenKey(key, sub_key, reserved=0, access=KEY_READ)
winreg.OpenKeyEx(key, sub_key, reserved=0, access=KEY_READ)

   지정된 키를 열고, 핸들 객체를 반환합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *sub_key*는 열 서브 키를 식별하는 문자열입니다.

   *reserved*는 예약된 정수이며, 0이어야 합니다. 기본값은 0입니다.

   *access*는 키에 대한 원하는 보안 액세스를 기술하는 액세스 마스크를
   지정하는 정수입니다. 기본값은 "KEY_READ"입니다. 허용되는 다른 값은
   액세스 권한을 참조하십시오.

   결과는 지정된 키에 대한 새로운 핸들입니다.

   함수가 실패하면, "OSError"가 발생합니다.

   인자 "key", "sub_key", "access"로 감사 이벤트 "winreg.OpenKey"를 발
   생시킵니다.

   인자 "key"로 감사 이벤트 "winreg.OpenKey/result"를 발생시킵니다.

   버전 3.2에서 변경: 명명된 인자 사용을 허용합니다.

   버전 3.3에서 변경: 위를 참조하십시오.

winreg.QueryInfoKey(key)

   키에 대한 정보를 튜플로 반환합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   결과는 3개의 항목으로 구성된 튜플입니다:

   +---------+-----------------------------------------------+
   | 인덱스  | 의미                                          |
   |=========|===============================================|
   | "0"     | 이 키가 가진 서브 키의 수를 제공하는 정수.    |
   +---------+-----------------------------------------------+
   | "1"     | 이 키가 가진 값의 수를 제공하는 정수.         |
   +---------+-----------------------------------------------+
   | "2"     | 키가 마지막으로 수정된 때(있다면)를 1601년 1  |
   |         | 월 1일 이후로 지난 100 나노초로 제공하는 정수 |
   |         | .                                             |
   +---------+-----------------------------------------------+

   인자 "key"로 감사 이벤트 "winreg.QueryInfoKey"를 발생시킵니다.

winreg.QueryValue(key, sub_key)

   키의 이름이 없는 값을 문자열로 가져옵니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *sub_key*는 값이 연관된 서브 키의 이름을 담은 문자열입니다. 이 매개
   변수가 "None"이거나 비어있으면, 함수는 *key*로 식별된 키에 대해
   "SetValue()" 메서드로 설정된 값을 가져옵니다.

   레지스트리의 값에는 이름, 형 및 데이터 구성 요소가 있습니다. 이 메
   서드는 "NULL" 이름을 가진 키의 첫 번째 값에 대한 데이터를 가져옵니
   다. 그러나 하부 API 호출은 형을 반환하지 않아서, 가능하다면 항상
   "QueryValueEx()"를 사용하십시오.

   인자 "key", "sub_key", "value_name"으로 감사 이벤트
   "winreg.QueryValue"를 발생시킵니다.

winreg.QueryValueEx(key, value_name)

   열린 레지스트리 키와 연관된 지정된 값 이름의 형과 데이터를 가져옵니
   다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *value_name*은 조회할 값을 나타내는 문자열입니다.

   결과는 2개의 항목으로 구성된 튜플입니다:

   +---------+-------------------------------------------+
   | 인덱스  | 의미                                      |
   |=========|===========================================|
   | "0"     | 레지스트리 항목의 값.                     |
   +---------+-------------------------------------------+
   | "1"     | 이 값에 대한 레지스트리 유형을 제공하는   |
   |         | 정수 ("SetValueEx()"의 설명 서에 있는 표  |
   |         | 를 참조하십시오)                          |
   +---------+-------------------------------------------+

   인자 "key", "sub_key", "value_name"으로 감사 이벤트
   "winreg.QueryValue"를 발생시킵니다.

winreg.SaveKey(key, file_name)

   지정된 키와 그것의 모든 서브 키를 지정된 파일에 저장합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *file_name*은 레지스트리 데이터를 저장할 파일 이름입니다. 이 파일은
   이미 존재할 수 없습니다. 이 파일명에 확장자가 포함되어 있으면,
   "LoadKey()" 메서드로 FAT(file allocation table) 파일 시스템에서 사
   용할 수 없습니다.

   *key*가 원격 컴퓨터의 키를 나타내면, *file_name*이 기술하는 경로는
   원격 컴퓨터에 상대적입니다. 이 메서드의 호출자는
   "SeBackupPrivilege" 보안 권한(privilege)을 가지고 있어야 합니다. 권
   한(privilege)은 허가(permissions)와 다름에 유의하십시오 -- 자세한
   내용은 사용자 권한과 허가 간의 충돌 설명서를 참조하십시오.

   이 함수는 *security_attributes*로 "NULL"을 API로 전달합니다.

   인자 "key", "file_name"으로 감사 이벤트 "winreg.SaveKey"를 발생시킵
   니다.

winreg.SetValue(key, sub_key, type, value)

   값을 지정된 키와 연관시킵니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *sub_key*는 값이 연관된 서브 키의 이름을 지정하는 문자열입니다.

   *type*은 데이터의 형을 지정하는 정수입니다. 현재 이것은 "REG_SZ" 여
   야 하는데, 문자열만 지원된다는 뜻입니다. 다른 데이터형을 지원하려면
   "SetValueEx()" 함수를 사용하십시오.

   *value*는 새 값을 지정하는 문자열입니다.

   *sub_key* 매개 변수로 지정된 키가 존재하지 않으면, SetValue 함수가
   이를 만듭니다.

   값 길이는 사용 가능한 메모리에 따라 제한됩니다. 긴 값(2048바이트보
   다 긴)은 구성 레지스트리에 저장된 파일명을 가진 파일로 저장해야 합
   니다. 이렇게 하면 레지스트리가 효율적으로 수행하는 데 도움을 줍니다
   .

   *key* 매개 변수로 식별된 키는 "KEY_SET_VALUE" 액세스로 열렸어야 합
   니다.

   인자 "key", "sub_key", "type", "value"로 감사 이벤트
   "winreg.SetValue"를 발생시킵니다.

winreg.SetValueEx(key, value_name, reserved, type, value)

   열린 레지스트리 키의 값 필드에 데이터를 저장합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   *value_name*은 값이 연관된 서브 키의 이름을 지정하는 문자열입니다.

   *reserved*는 무엇이든 가능합니다 -- 0이 항상 API로 전달됩니다.

   *type*은 데이터의 형을 지정하는 정수입니다. 사용 가능한 형은 값 형
   을 참조하십시오.

   *value*는 새 값을 지정하는 문자열입니다.

   이 메서드는 지정된 키에 대한 추가 값과 형 정보를 설정할 수도 있습니
   다. key 매개 변수로 식별된 키는 "KEY_SET_VALUE" 액세스로 열렸어야
   합니다.

   키를 열려면, "CreateKey()"나 "OpenKey()" 메서드를 사용하십시오.

   값 길이는 사용 가능한 메모리에 따라 제한됩니다. 긴 값(2048바이트보
   다 긴)은 구성 레지스트리에 저장된 파일명을 가진 파일로 저장해야 합
   니다. 이렇게 하면 레지스트리가 효율적으로 수행하는 데 도움을 줍니다
   .

   인자 "key", "sub_key", "type", "value"로 감사 이벤트
   "winreg.SetValue"를 발생시킵니다.

winreg.DisableReflectionKey(key)

   64비트 운영 체제에서 실행 중인 32비트 프로세스에 대한 레지스트리 리
   플렉션(reflection)을 비활성화합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   32비트 운영 체제에서 실행하면 일반적으로 "NotImplementedError" 가
   발생합니다.

   키가 리플렉션 목록에 없으면, 함수는 성공하지만 아무런 효과가 없습니
   다. 키에 대한 리플렉션을 비활성화해도 서브 키의 리플렉션에는 영향을
   미치지 않습니다.

   인자 "key"로 감사 이벤트 "winreg.DisableReflectionKey"를 발생시킵니
   다.

winreg.EnableReflectionKey(key)

   지정된 비활성화 된 키에 대한 레지스트리 리플렉션(reflection)을 복원
   합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   32비트 운영 체제에서 실행하면 일반적으로 "NotImplementedError" 가
   발생합니다.

   키에 대한 리플렉션을 복원해도 서브 키의 리플렉션에 영향을 미치지 않
   습니다.

   인자 "key"로 감사 이벤트 "winreg.EnableReflectionKey"를 발생시킵니
   다.

winreg.QueryReflectionKey(key)

   지정된 키의 리플렉션(reflection) 상태를 판단합니다.

   *key*는 이미 열린 키이거나, 사전 정의된 HKEY_* 상수 중 하나입니다.

   리플렉션이 비활성화되었으면 "True"를 반환합니다.

   32비트 운영 체제에서 실행하면 일반적으로 "NotImplementedError" 가
   발생합니다.

   인자 "key"로 감사 이벤트 "winreg.QueryReflectionKey"를 발생시킵니다
   .


상수
====

많은 "_winreg" 함수에 사용하기 위해 다음 상수가 정의되어 있습니다.


HKEY_* 상수
-----------

winreg.HKEY_CLASSES_ROOT

   이 키에 종속된 레지스트리 항목은 문서의 형(또는 클래스)과 해당 형과
   연관된 속성을 정의합니다. 셸과 COM 응용 프로그램은 이 키에 저장된
   정보를 사용합니다.

winreg.HKEY_CURRENT_USER

   이 키에 종속된 레지스트리 항목은 현재 사용자의 환경 설정
   (preferences)을 정의합니다. 이러한 환경 설정에는 환경 변수 설정, 프
   로그램 그룹, 색상, 프린터, 네트워크 연결 및 응용 프로그램 환경 설정
   에 대한 데이터가 포함됩니다.

winreg.HKEY_LOCAL_MACHINE

   이 키에 종속된 레지스트리 항목은 버스 유형, 시스템 메모리 및 설치된
   하드웨어와 소프트웨어에 대한 데이터를 포함하는 컴퓨터의 물리적 상태
   를 정의합니다.

winreg.HKEY_USERS

   이 키에 종속된 레지스트리 항목은 로컬 컴퓨터의 새 사용자를 위한 기
   본 사용자 구성과 현재 사용자의 사용자 구성을 정의합니다.

winreg.HKEY_PERFORMANCE_DATA

   이 키에 종속된 레지스트리 항목을 사용하면 성능 데이터에 액세스 할
   수 있습니다. 데이터는 실제로 레지스트리에 저장되지 않습니다; 레지스
   트리 함수는 시스템이 소스에서 데이터를 수집하도록 합니다.

winreg.HKEY_CURRENT_CONFIG

   로컬 컴퓨터 시스템의 현재 하드웨어 프로필에 대한 정보가 들어 있습니
   다.

winreg.HKEY_DYN_DATA

   이 키는 98 이후의 윈도우 버전에서는 사용되지 않습니다.


액세스 권한
-----------

자세한 내용은 레지스트리 키 보안과 액세스를 참조하십시오.

winreg.KEY_ALL_ACCESS

   STANDARD_RIGHTS_REQUIRED, "KEY_QUERY_VALUE", "KEY_SET_VALUE",
   "KEY_CREATE_SUB_KEY", "KEY_ENUMERATE_SUB_KEYS", "KEY_NOTIFY" 및
   "KEY_CREATE_LINK" 액세스 권한을 결합합니다.

winreg.KEY_WRITE

   STANDARD_RIGHTS_WRITE, "KEY_SET_VALUE" 및 "KEY_CREATE_SUB_KEY" 액세
   스 권한을 결합합니다.

winreg.KEY_READ

   STANDARD_RIGHTS_READ, "KEY_QUERY_VALUE", "KEY_ENUMERATE_SUB_KEYS"
   및 "KEY_NOTIFY" 값을 결합합니다.

winreg.KEY_EXECUTE

   "KEY_READ"와 동등합니다.

winreg.KEY_QUERY_VALUE

   레지스트리 키의 값을 조회하는 데 필요합니다.

winreg.KEY_SET_VALUE

   레지스트리 값을 생성, 삭제 또는 설정하는 데 필요합니다.

winreg.KEY_CREATE_SUB_KEY

   레지스트리 키의 서브 키를 만드는 데 필요합니다.

winreg.KEY_ENUMERATE_SUB_KEYS

   레지스트리 키의 서브 키를 열거하는 데 필요합니다.

winreg.KEY_NOTIFY

   레지스트리 키나 레지스트리 키의 서브 키에 대한 변경 알림을 요청하는
   데 필요합니다.

winreg.KEY_CREATE_LINK

   시스템 사용을 위해 예약되어 있습니다.


64비트 특정
~~~~~~~~~~~

자세한 내용은 대체 레지스트리 뷰에 액세스하기를 참조하십시오.

winreg.KEY_WOW64_64KEY

   64비트 윈도우의 응용 프로그램이 64비트 레지스트리 뷰에서 작동해야
   함을 나타냅니다.

winreg.KEY_WOW64_32KEY

   64비트 윈도우의 응용 프로그램이 32비트 레지스트리 뷰에서 작동해야
   함을 나타냅니다.


값 형
-----

자세한 내용은 레지스트리 값 형을 참조하십시오.

winreg.REG_BINARY

   모든 형태의 바이너리 데이터.

winreg.REG_DWORD

   32비트 숫자.

winreg.REG_DWORD_LITTLE_ENDIAN

   리틀 엔디안 형식의 32비트 숫자. "REG_DWORD"와 동등합니다.

winreg.REG_DWORD_BIG_ENDIAN

   빅 엔디안 형식의 32비트 숫자.

winreg.REG_EXPAND_SZ

   환경 변수("%PATH%")에 대한 참조를 포함하는 널 종료 문자열.

winreg.REG_LINK

   유니코드 심볼릭 링크.

winreg.REG_MULTI_SZ

   두 개의 널 문자로 끝나는 널 종료 문자열의 시퀀스. (파이썬은 이 종료
   를 자동으로 처리합니다.)

winreg.REG_NONE

   정의된 값 형이 없습니다.

winreg.REG_QWORD

   64비트 숫자.

   버전 3.6에 추가.

winreg.REG_QWORD_LITTLE_ENDIAN

   리틀 엔디안 형식의 64비트 숫자. "REG_QWORD"와 동등합니다.

   버전 3.6에 추가.

winreg.REG_RESOURCE_LIST

   장치 드라이버 리소스 목록.

winreg.REG_FULL_RESOURCE_DESCRIPTOR

   하드웨어 설정.

winreg.REG_RESOURCE_REQUIREMENTS_LIST

   하드웨어 리소스 목록.

winreg.REG_SZ

   널 종료 문자열.


레지스트리 핸들 객체
====================

이 객체는 윈도우 HKEY 객체를 감싸서, 객체가 파괴될 때 자동으로 닫습니
다. 정리를 보장하기 위해, 객체의 "Close()" 메서드나 "CloseKey()" 함수
를 호출할 수 있습니다.

이 모듈의 모든 레지스트리 함수는 이러한 객체 중 하나를 반환합니다.

핸들 객체를 받아들이는 이 모듈의 모든 레지스트리 함수는 정수도 받아들
이지만, 핸들 객체의 사용을 권장합니다.

핸들 객체는 "__bool__()"에 대한 의미를 제공합니다 -- 그래서

   if handle:
       print("Yes")

는 핸들이 현재 유효하면 (닫혔거나 분리되지(detached) 않았으면) "Yes"를
인쇄합니다.

객체는 또한 비교 개념을 지원하므로, 핸들 객체가 모두 같은 하부 윈도우
핸들값을 참조하면 참으로 비교됩니다.

핸들 객체는 정수로 변환될 수 있으며 (예를 들어, 내장 "int()" 함수 사용
해서), 이 경우 하부 윈도우 핸들값이 반환됩니다. "Detach()" 메서드를 사
용하여 정수 핸들을 반환하고 핸들 객체에서 윈도우 핸들을 분리할 수도 있
습니다.

PyHKEY.Close()

   하부 윈도우 핸들을 닫습니다.

   핸들이 이미 닫혀 있으면, 에러가 발생하지 않습니다.

PyHKEY.Detach()

   핸들 객체에서 윈도우 핸들을 분리합니다.

   결과는 핸들이 분리되기 전의 핸들 값을 담고 있는 정수입니다. 핸들이
   이미 분리되었거나 닫혔으면 0이 반환됩니다.

   이 함수를 호출한 후에는, 핸들이 효과적으로 무효가 되지만, 핸들이 닫
   히지는 않습니다. 하부 Win32 핸들이 핸들 객체의 수명을 넘어 존재해야
   할 때 이 함수를 호출합니다.

   인자 "key"로 감사 이벤트 "winreg.PyHKEY.Detach"를 발생시킵니다.

PyHKEY.__enter__()
PyHKEY.__exit__(*exc_info)

   HKEY 객체는 "__enter__()"와 "__exit__()"를 구현하므로 "with" 문의
   컨텍스트 프로토콜을 지원합니다:

      with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key:
          ...  # work with key

   는 제어가 "with" 블록을 벗어날 때 *key*를 자동으로 닫습니다.
