# `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)

  지정된 키를 삭제합니다.

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

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

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

  access is an integer that specifies an access mask that describes the desired security access for the key. Default is `KEY_WOW64_64KEY`. On 32-bit Windows, the WOW64 constants are ignored. See Access Rights for other allowed values.

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

  메서드가 성공하면, 모든 값을 포함하여 전체 키가 제거됩니다. 메서드가 실패하면, `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`

  Indicates that an application on 64-bit Windows should operate on the 64-bit registry view. On 32-bit Windows, this constant is ignored.

`winreg.``KEY_WOW64_32KEY`

  Indicates that an application on 64-bit Windows should operate on the 32-bit registry view. On 32-bit Windows, this constant is ignored.

### 값 형

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

`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를 자동으로 닫습니다.