# `winreg` — Windows registry access

이 함수들은 윈도우 레지스트리 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`를 발생시킵니다.

  Added in version 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`를 발생시킵니다.

  Added in version 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) 파일 시스템에서, 파일명은 확장자가 없을 수 있습니다.

  A call to `LoadKey()` fails if the calling process does not have the `SE_RESTORE_PRIVILEGE` privilege. Note that privileges are different from permissions – see the RegLoadKey documentation for more details.

  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) 파일 시스템에서 사용할 수 없습니다.

  If key represents a key on a remote computer, the path described by file_name is relative to the remote computer. The caller of this method must possess the SeBackupPrivilege security privilege. Note that privileges are different than permissions – see the Conflicts Between User Rights and Permissions documentation for more details.

  이 함수는 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`를 발생시킵니다.

## 상수

The following constants are defined for use in many `winreg` functions.

### 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비트 숫자.

  Added in version 3.6.

winreg.REG_QWORD_LITTLE_ENDIAN

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

  Added in version 3.6.

winreg.REG_RESOURCE_LIST

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

winreg.REG_FULL_RESOURCE_DESCRIPTOR

  하드웨어 설정.

winreg.REG_RESOURCE_REQUIREMENTS_LIST

  하드웨어 리소스 목록.

winreg.REG_SZ

  널 종료 문자열.

## 레지스트리 핸들 객체

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

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

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

Handle objects provide semantics for `__bool__()` – thus

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