xref: /third_party/python/Doc/library/winreg.rst (revision 7db96d56)
17db96d56Sopenharmony_ci:mod:`winreg` --- Windows registry access
27db96d56Sopenharmony_ci=========================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: winreg
57db96d56Sopenharmony_ci   :platform: Windows
67db96d56Sopenharmony_ci   :synopsis: Routines and objects for manipulating the Windows registry.
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci.. sectionauthor:: Mark Hammond <MarkH@ActiveState.com>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci--------------
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ciThese functions expose the Windows registry API to Python.  Instead of using an
137db96d56Sopenharmony_ciinteger as the registry handle, a :ref:`handle object <handle-object>` is used
147db96d56Sopenharmony_cito ensure that the handles are closed correctly, even if the programmer neglects
157db96d56Sopenharmony_cito explicitly close them.
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci.. _exception-changed:
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci.. versionchanged:: 3.3
207db96d56Sopenharmony_ci   Several functions in this module used to raise a
217db96d56Sopenharmony_ci   :exc:`WindowsError`, which is now an alias of :exc:`OSError`.
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci.. _functions:
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ciFunctions
267db96d56Sopenharmony_ci------------------
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciThis module offers the following functions:
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci.. function:: CloseKey(hkey)
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci   Closes a previously opened registry key.  The *hkey* argument specifies a
347db96d56Sopenharmony_ci   previously opened key.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci   .. note::
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci      If *hkey* is not closed using this method (or via :meth:`hkey.Close()
397db96d56Sopenharmony_ci      <PyHKEY.Close>`), it is closed when the *hkey* object is destroyed by
407db96d56Sopenharmony_ci      Python.
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci.. function:: ConnectRegistry(computer_name, key)
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci   Establishes a connection to a predefined registry handle on another computer,
467db96d56Sopenharmony_ci   and returns a :ref:`handle object <handle-object>`.
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci   *computer_name* is the name of the remote computer, of the form
497db96d56Sopenharmony_ci   ``r"\\computername"``.  If ``None``, the local computer is used.
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci   *key* is the predefined handle to connect to.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci   The return value is the handle of the opened key. If the function fails, an
547db96d56Sopenharmony_ci   :exc:`OSError` exception is raised.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   .. audit-event:: winreg.ConnectRegistry computer_name,key winreg.ConnectRegistry
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci   .. versionchanged:: 3.3
597db96d56Sopenharmony_ci      See :ref:`above <exception-changed>`.
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci.. function:: CreateKey(key, sub_key)
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci   Creates or opens the specified key, returning a
657db96d56Sopenharmony_ci   :ref:`handle object <handle-object>`.
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
687db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci   *sub_key* is a string that names the key this method opens or creates.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci   If *key* is one of the predefined keys, *sub_key* may be ``None``. In that
737db96d56Sopenharmony_ci   case, the handle returned is the same key handle passed in to the function.
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci   If the key already exists, this function opens the existing key.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   The return value is the handle of the opened key. If the function fails, an
787db96d56Sopenharmony_ci   :exc:`OSError` exception is raised.
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   .. audit-event:: winreg.CreateKey key,sub_key,access winreg.CreateKey
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci   .. audit-event:: winreg.OpenKey/result key winreg.CreateKey
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci   .. versionchanged:: 3.3
857db96d56Sopenharmony_ci      See :ref:`above <exception-changed>`.
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci.. function:: CreateKeyEx(key, sub_key, reserved=0, access=KEY_WRITE)
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   Creates or opens the specified key, returning a
917db96d56Sopenharmony_ci   :ref:`handle object <handle-object>`.
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
947db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci   *sub_key* is a string that names the key this method opens or creates.
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci   *reserved* is a reserved integer, and must be zero. The default is zero.
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   *access* is an integer that specifies an access mask that describes the desired
1017db96d56Sopenharmony_ci   security access for the key.  Default is :const:`KEY_WRITE`.  See
1027db96d56Sopenharmony_ci   :ref:`Access Rights <access-rights>` for other allowed values.
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   If *key* is one of the predefined keys, *sub_key* may be ``None``. In that
1057db96d56Sopenharmony_ci   case, the handle returned is the same key handle passed in to the function.
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci   If the key already exists, this function opens the existing key.
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci   The return value is the handle of the opened key. If the function fails, an
1107db96d56Sopenharmony_ci   :exc:`OSError` exception is raised.
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci   .. audit-event:: winreg.CreateKey key,sub_key,access winreg.CreateKeyEx
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci   .. audit-event:: winreg.OpenKey/result key winreg.CreateKeyEx
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci   .. versionadded:: 3.2
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci   .. versionchanged:: 3.3
1197db96d56Sopenharmony_ci      See :ref:`above <exception-changed>`.
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci.. function:: DeleteKey(key, sub_key)
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci   Deletes the specified key.
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
1277db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci   *sub_key* is a string that must be a subkey of the key identified by the *key*
1307db96d56Sopenharmony_ci   parameter.  This value must not be ``None``, and the key may not have subkeys.
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci   *This method can not delete keys with subkeys.*
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci   If the method succeeds, the entire key, including all of its values, is removed.
1357db96d56Sopenharmony_ci   If the method fails, an :exc:`OSError` exception is raised.
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci   .. audit-event:: winreg.DeleteKey key,sub_key,access winreg.DeleteKey
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci   .. versionchanged:: 3.3
1407db96d56Sopenharmony_ci      See :ref:`above <exception-changed>`.
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci.. function:: DeleteKeyEx(key, sub_key, access=KEY_WOW64_64KEY, reserved=0)
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci   Deletes the specified key.
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
1487db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci   *sub_key* is a string that must be a subkey of the key identified by the
1517db96d56Sopenharmony_ci   *key* parameter. This value must not be ``None``, and the key may not have
1527db96d56Sopenharmony_ci   subkeys.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci   *reserved* is a reserved integer, and must be zero. The default is zero.
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci   *access* is an integer that specifies an access mask that describes the
1577db96d56Sopenharmony_ci   desired security access for the key.  Default is :const:`KEY_WOW64_64KEY`.
1587db96d56Sopenharmony_ci   On 32-bit Windows, the WOW64 constants are ignored.
1597db96d56Sopenharmony_ci   See :ref:`Access Rights <access-rights>` for other allowed values.
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci   *This method can not delete keys with subkeys.*
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci   If the method succeeds, the entire key, including all of its values, is
1647db96d56Sopenharmony_ci   removed. If the method fails, an :exc:`OSError` exception is raised.
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   On unsupported Windows versions, :exc:`NotImplementedError` is raised.
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ci   .. audit-event:: winreg.DeleteKey key,sub_key,access winreg.DeleteKeyEx
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci   .. versionadded:: 3.2
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci   .. versionchanged:: 3.3
1737db96d56Sopenharmony_ci      See :ref:`above <exception-changed>`.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci.. function:: DeleteValue(key, value)
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci   Removes a named value from a registry key.
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
1817db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci   *value* is a string that identifies the value to remove.
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci   .. audit-event:: winreg.DeleteValue key,value winreg.DeleteValue
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci.. function:: EnumKey(key, index)
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci   Enumerates subkeys of an open registry key, returning a string.
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
1937db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   *index* is an integer that identifies the index of the key to retrieve.
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci   The function retrieves the name of one subkey each time it is called.  It is
1987db96d56Sopenharmony_ci   typically called repeatedly until an :exc:`OSError` exception is
1997db96d56Sopenharmony_ci   raised, indicating, no more values are available.
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci   .. audit-event:: winreg.EnumKey key,index winreg.EnumKey
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   .. versionchanged:: 3.3
2047db96d56Sopenharmony_ci      See :ref:`above <exception-changed>`.
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci.. function:: EnumValue(key, index)
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci   Enumerates values of an open registry key, returning a tuple.
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
2127db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci   *index* is an integer that identifies the index of the value to retrieve.
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci   The function retrieves the name of one subkey each time it is called. It is
2177db96d56Sopenharmony_ci   typically called repeatedly, until an :exc:`OSError` exception is
2187db96d56Sopenharmony_ci   raised, indicating no more values.
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci   The result is a tuple of 3 items:
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci   +-------+--------------------------------------------+
2237db96d56Sopenharmony_ci   | Index | Meaning                                    |
2247db96d56Sopenharmony_ci   +=======+============================================+
2257db96d56Sopenharmony_ci   | ``0`` | A string that identifies the value name    |
2267db96d56Sopenharmony_ci   +-------+--------------------------------------------+
2277db96d56Sopenharmony_ci   | ``1`` | An object that holds the value data, and   |
2287db96d56Sopenharmony_ci   |       | whose type depends on the underlying       |
2297db96d56Sopenharmony_ci   |       | registry type                              |
2307db96d56Sopenharmony_ci   +-------+--------------------------------------------+
2317db96d56Sopenharmony_ci   | ``2`` | An integer that identifies the type of the |
2327db96d56Sopenharmony_ci   |       | value data (see table in docs for          |
2337db96d56Sopenharmony_ci   |       | :meth:`SetValueEx`)                        |
2347db96d56Sopenharmony_ci   +-------+--------------------------------------------+
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci   .. audit-event:: winreg.EnumValue key,index winreg.EnumValue
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci   .. versionchanged:: 3.3
2397db96d56Sopenharmony_ci      See :ref:`above <exception-changed>`.
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci.. index::
2437db96d56Sopenharmony_ci   single: % (percent); environment variables expansion (Windows)
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci.. function:: ExpandEnvironmentStrings(str)
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci   Expands environment variable placeholders ``%NAME%`` in strings like
2487db96d56Sopenharmony_ci   :const:`REG_EXPAND_SZ`::
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci      >>> ExpandEnvironmentStrings('%windir%')
2517db96d56Sopenharmony_ci      'C:\\Windows'
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci   .. audit-event:: winreg.ExpandEnvironmentStrings str winreg.ExpandEnvironmentStrings
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci.. function:: FlushKey(key)
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   Writes all the attributes of a key to the registry.
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
2617db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ci   It is not necessary to call :func:`FlushKey` to change a key. Registry changes are
2647db96d56Sopenharmony_ci   flushed to disk by the registry using its lazy flusher.  Registry changes are
2657db96d56Sopenharmony_ci   also flushed to disk at system shutdown.  Unlike :func:`CloseKey`, the
2667db96d56Sopenharmony_ci   :func:`FlushKey` method returns only when all the data has been written to the
2677db96d56Sopenharmony_ci   registry. An application should only call :func:`FlushKey` if it requires
2687db96d56Sopenharmony_ci   absolute certainty that registry changes are on disk.
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci   .. note::
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci      If you don't know whether a :func:`FlushKey` call is required, it probably
2737db96d56Sopenharmony_ci      isn't.
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci.. function:: LoadKey(key, sub_key, file_name)
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ci   Creates a subkey under the specified key and stores registration information
2797db96d56Sopenharmony_ci   from a specified file into that subkey.
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci   *key* is a handle returned by :func:`ConnectRegistry` or one of the constants
2827db96d56Sopenharmony_ci   :const:`HKEY_USERS` or :const:`HKEY_LOCAL_MACHINE`.
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci   *sub_key* is a string that identifies the subkey to load.
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ci   *file_name* is the name of the file to load registry data from. This file must
2877db96d56Sopenharmony_ci   have been created with the :func:`SaveKey` function. Under the file allocation
2887db96d56Sopenharmony_ci   table (FAT) file system, the filename may not have an extension.
2897db96d56Sopenharmony_ci
2907db96d56Sopenharmony_ci   A call to :func:`LoadKey` fails if the calling process does not have the
2917db96d56Sopenharmony_ci   :const:`SE_RESTORE_PRIVILEGE` privilege.  Note that privileges are different
2927db96d56Sopenharmony_ci   from permissions -- see the `RegLoadKey documentation
2937db96d56Sopenharmony_ci   <https://msdn.microsoft.com/en-us/library/ms724889%28v=VS.85%29.aspx>`__ for
2947db96d56Sopenharmony_ci   more details.
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ci   If *key* is a handle returned by :func:`ConnectRegistry`, then the path
2977db96d56Sopenharmony_ci   specified in *file_name* is relative to the remote computer.
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci   .. audit-event:: winreg.LoadKey key,sub_key,file_name winreg.LoadKey
3007db96d56Sopenharmony_ci
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_ci.. function:: OpenKey(key, sub_key, reserved=0, access=KEY_READ)
3037db96d56Sopenharmony_ci              OpenKeyEx(key, sub_key, reserved=0, access=KEY_READ)
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_ci   Opens the specified key, returning a :ref:`handle object <handle-object>`.
3067db96d56Sopenharmony_ci
3077db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
3087db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
3097db96d56Sopenharmony_ci
3107db96d56Sopenharmony_ci   *sub_key* is a string that identifies the sub_key to open.
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci   *reserved* is a reserved integer, and must be zero.  The default is zero.
3137db96d56Sopenharmony_ci
3147db96d56Sopenharmony_ci   *access* is an integer that specifies an access mask that describes the desired
3157db96d56Sopenharmony_ci   security access for the key.  Default is :const:`KEY_READ`.  See :ref:`Access
3167db96d56Sopenharmony_ci   Rights <access-rights>` for other allowed values.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci   The result is a new handle to the specified key.
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci   If the function fails, :exc:`OSError` is raised.
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ci   .. audit-event:: winreg.OpenKey key,sub_key,access winreg.OpenKey
3237db96d56Sopenharmony_ci
3247db96d56Sopenharmony_ci   .. audit-event:: winreg.OpenKey/result key winreg.OpenKey
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ci   .. versionchanged:: 3.2
3277db96d56Sopenharmony_ci      Allow the use of named arguments.
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci   .. versionchanged:: 3.3
3307db96d56Sopenharmony_ci      See :ref:`above <exception-changed>`.
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci
3337db96d56Sopenharmony_ci.. function:: QueryInfoKey(key)
3347db96d56Sopenharmony_ci
3357db96d56Sopenharmony_ci   Returns information about a key, as a tuple.
3367db96d56Sopenharmony_ci
3377db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
3387db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ci   The result is a tuple of 3 items:
3417db96d56Sopenharmony_ci
3427db96d56Sopenharmony_ci   +-------+---------------------------------------------+
3437db96d56Sopenharmony_ci   | Index | Meaning                                     |
3447db96d56Sopenharmony_ci   +=======+=============================================+
3457db96d56Sopenharmony_ci   | ``0`` | An integer giving the number of sub keys    |
3467db96d56Sopenharmony_ci   |       | this key has.                               |
3477db96d56Sopenharmony_ci   +-------+---------------------------------------------+
3487db96d56Sopenharmony_ci   | ``1`` | An integer giving the number of values this |
3497db96d56Sopenharmony_ci   |       | key has.                                    |
3507db96d56Sopenharmony_ci   +-------+---------------------------------------------+
3517db96d56Sopenharmony_ci   | ``2`` | An integer giving when the key was last     |
3527db96d56Sopenharmony_ci   |       | modified (if available) as 100's of         |
3537db96d56Sopenharmony_ci   |       | nanoseconds since Jan 1, 1601.              |
3547db96d56Sopenharmony_ci   +-------+---------------------------------------------+
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci   .. audit-event:: winreg.QueryInfoKey key winreg.QueryInfoKey
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci
3597db96d56Sopenharmony_ci.. function:: QueryValue(key, sub_key)
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ci   Retrieves the unnamed value for a key, as a string.
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
3647db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci   *sub_key* is a string that holds the name of the subkey with which the value is
3677db96d56Sopenharmony_ci   associated.  If this parameter is ``None`` or empty, the function retrieves the
3687db96d56Sopenharmony_ci   value set by the :func:`SetValue` method for the key identified by *key*.
3697db96d56Sopenharmony_ci
3707db96d56Sopenharmony_ci   Values in the registry have name, type, and data components. This method
3717db96d56Sopenharmony_ci   retrieves the data for a key's first value that has a ``NULL`` name. But the
3727db96d56Sopenharmony_ci   underlying API call doesn't return the type, so always use
3737db96d56Sopenharmony_ci   :func:`QueryValueEx` if possible.
3747db96d56Sopenharmony_ci
3757db96d56Sopenharmony_ci   .. audit-event:: winreg.QueryValue key,sub_key,value_name winreg.QueryValue
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci.. function:: QueryValueEx(key, value_name)
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci   Retrieves the type and data for a specified value name associated with
3817db96d56Sopenharmony_ci   an open registry key.
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
3847db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
3857db96d56Sopenharmony_ci
3867db96d56Sopenharmony_ci   *value_name* is a string indicating the value to query.
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci   The result is a tuple of 2 items:
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci   +-------+-----------------------------------------+
3917db96d56Sopenharmony_ci   | Index | Meaning                                 |
3927db96d56Sopenharmony_ci   +=======+=========================================+
3937db96d56Sopenharmony_ci   | ``0`` | The value of the registry item.         |
3947db96d56Sopenharmony_ci   +-------+-----------------------------------------+
3957db96d56Sopenharmony_ci   | ``1`` | An integer giving the registry type for |
3967db96d56Sopenharmony_ci   |       | this value (see table in docs for       |
3977db96d56Sopenharmony_ci   |       | :meth:`SetValueEx`)                     |
3987db96d56Sopenharmony_ci   +-------+-----------------------------------------+
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci   .. audit-event:: winreg.QueryValue key,sub_key,value_name winreg.QueryValueEx
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci
4037db96d56Sopenharmony_ci.. function:: SaveKey(key, file_name)
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ci   Saves the specified key, and all its subkeys to the specified file.
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
4087db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   *file_name* is the name of the file to save registry data to.  This file
4117db96d56Sopenharmony_ci   cannot already exist. If this filename includes an extension, it cannot be
4127db96d56Sopenharmony_ci   used on file allocation table (FAT) file systems by the :meth:`LoadKey`
4137db96d56Sopenharmony_ci   method.
4147db96d56Sopenharmony_ci
4157db96d56Sopenharmony_ci   If *key* represents a key on a remote computer, the path described by
4167db96d56Sopenharmony_ci   *file_name* is relative to the remote computer. The caller of this method must
4177db96d56Sopenharmony_ci   possess the :const:`SeBackupPrivilege` security privilege.  Note that
4187db96d56Sopenharmony_ci   privileges are different than permissions -- see the
4197db96d56Sopenharmony_ci   `Conflicts Between User Rights and Permissions documentation
4207db96d56Sopenharmony_ci   <https://msdn.microsoft.com/en-us/library/ms724878%28v=VS.85%29.aspx>`__
4217db96d56Sopenharmony_ci   for more details.
4227db96d56Sopenharmony_ci
4237db96d56Sopenharmony_ci   This function passes ``NULL`` for *security_attributes* to the API.
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci   .. audit-event:: winreg.SaveKey key,file_name winreg.SaveKey
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_ci.. function:: SetValue(key, sub_key, type, value)
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci   Associates a value with a specified key.
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
4337db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci   *sub_key* is a string that names the subkey with which the value is associated.
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci   *type* is an integer that specifies the type of the data. Currently this must be
4387db96d56Sopenharmony_ci   :const:`REG_SZ`, meaning only strings are supported.  Use the :func:`SetValueEx`
4397db96d56Sopenharmony_ci   function for support for other data types.
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ci   *value* is a string that specifies the new value.
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci   If the key specified by the *sub_key* parameter does not exist, the SetValue
4447db96d56Sopenharmony_ci   function creates it.
4457db96d56Sopenharmony_ci
4467db96d56Sopenharmony_ci   Value lengths are limited by available memory. Long values (more than 2048
4477db96d56Sopenharmony_ci   bytes) should be stored as files with the filenames stored in the configuration
4487db96d56Sopenharmony_ci   registry.  This helps the registry perform efficiently.
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci   The key identified by the *key* parameter must have been opened with
4517db96d56Sopenharmony_ci   :const:`KEY_SET_VALUE` access.
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ci   .. audit-event:: winreg.SetValue key,sub_key,type,value winreg.SetValue
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ci.. function:: SetValueEx(key, value_name, reserved, type, value)
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci   Stores data in the value field of an open registry key.
4597db96d56Sopenharmony_ci
4607db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
4617db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci   *value_name* is a string that names the subkey with which the value is
4647db96d56Sopenharmony_ci   associated.
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci   *reserved* can be anything -- zero is always passed to the API.
4677db96d56Sopenharmony_ci
4687db96d56Sopenharmony_ci   *type* is an integer that specifies the type of the data. See
4697db96d56Sopenharmony_ci   :ref:`Value Types <value-types>` for the available types.
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci   *value* is a string that specifies the new value.
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci   This method can also set additional value and type information for the specified
4747db96d56Sopenharmony_ci   key.  The key identified by the key parameter must have been opened with
4757db96d56Sopenharmony_ci   :const:`KEY_SET_VALUE` access.
4767db96d56Sopenharmony_ci
4777db96d56Sopenharmony_ci   To open the key, use the :func:`CreateKey` or :func:`OpenKey` methods.
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_ci   Value lengths are limited by available memory. Long values (more than 2048
4807db96d56Sopenharmony_ci   bytes) should be stored as files with the filenames stored in the configuration
4817db96d56Sopenharmony_ci   registry.  This helps the registry perform efficiently.
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci   .. audit-event:: winreg.SetValue key,sub_key,type,value winreg.SetValueEx
4847db96d56Sopenharmony_ci
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci.. function:: DisableReflectionKey(key)
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci   Disables registry reflection for 32-bit processes running on a 64-bit
4897db96d56Sopenharmony_ci   operating system.
4907db96d56Sopenharmony_ci
4917db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined :ref:`HKEY_* constants
4927db96d56Sopenharmony_ci   <hkey-constants>`.
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_ci   Will generally raise :exc:`NotImplementedError` if executed on a 32-bit operating
4957db96d56Sopenharmony_ci   system.
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci   If the key is not on the reflection list, the function succeeds but has no
4987db96d56Sopenharmony_ci   effect.  Disabling reflection for a key does not affect reflection of any
4997db96d56Sopenharmony_ci   subkeys.
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ci   .. audit-event:: winreg.DisableReflectionKey key winreg.DisableReflectionKey
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci
5047db96d56Sopenharmony_ci.. function:: EnableReflectionKey(key)
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci   Restores registry reflection for the specified disabled key.
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined :ref:`HKEY_* constants
5097db96d56Sopenharmony_ci   <hkey-constants>`.
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci   Will generally raise :exc:`NotImplementedError` if executed on a 32-bit operating
5127db96d56Sopenharmony_ci   system.
5137db96d56Sopenharmony_ci
5147db96d56Sopenharmony_ci   Restoring reflection for a key does not affect reflection of any subkeys.
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_ci   .. audit-event:: winreg.EnableReflectionKey key winreg.EnableReflectionKey
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ci.. function:: QueryReflectionKey(key)
5207db96d56Sopenharmony_ci
5217db96d56Sopenharmony_ci   Determines the reflection state for the specified key.
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci   *key* is an already open key, or one of the predefined
5247db96d56Sopenharmony_ci   :ref:`HKEY_* constants <hkey-constants>`.
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_ci   Returns ``True`` if reflection is disabled.
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ci   Will generally raise :exc:`NotImplementedError` if executed on a 32-bit
5297db96d56Sopenharmony_ci   operating system.
5307db96d56Sopenharmony_ci
5317db96d56Sopenharmony_ci   .. audit-event:: winreg.QueryReflectionKey key winreg.QueryReflectionKey
5327db96d56Sopenharmony_ci
5337db96d56Sopenharmony_ci
5347db96d56Sopenharmony_ci.. _constants:
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ciConstants
5377db96d56Sopenharmony_ci------------------
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ciThe following constants are defined for use in many :mod:`_winreg` functions.
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci.. _hkey-constants:
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ciHKEY_* Constants
5447db96d56Sopenharmony_ci++++++++++++++++
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ci.. data:: HKEY_CLASSES_ROOT
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci   Registry entries subordinate to this key define types (or classes) of
5497db96d56Sopenharmony_ci   documents and the properties associated with those types. Shell and
5507db96d56Sopenharmony_ci   COM applications use the information stored under this key.
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ci
5537db96d56Sopenharmony_ci.. data:: HKEY_CURRENT_USER
5547db96d56Sopenharmony_ci
5557db96d56Sopenharmony_ci   Registry entries subordinate to this key define the preferences of
5567db96d56Sopenharmony_ci   the current user. These preferences include the settings of
5577db96d56Sopenharmony_ci   environment variables, data about program groups, colors, printers,
5587db96d56Sopenharmony_ci   network connections, and application preferences.
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci.. data:: HKEY_LOCAL_MACHINE
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci   Registry entries subordinate to this key define the physical state
5637db96d56Sopenharmony_ci   of the computer, including data about the bus type, system memory,
5647db96d56Sopenharmony_ci   and installed hardware and software.
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci.. data:: HKEY_USERS
5677db96d56Sopenharmony_ci
5687db96d56Sopenharmony_ci   Registry entries subordinate to this key define the default user
5697db96d56Sopenharmony_ci   configuration for new users on the local computer and the user
5707db96d56Sopenharmony_ci   configuration for the current user.
5717db96d56Sopenharmony_ci
5727db96d56Sopenharmony_ci.. data:: HKEY_PERFORMANCE_DATA
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci   Registry entries subordinate to this key allow you to access
5757db96d56Sopenharmony_ci   performance data. The data is not actually stored in the registry;
5767db96d56Sopenharmony_ci   the registry functions cause the system to collect the data from
5777db96d56Sopenharmony_ci   its source.
5787db96d56Sopenharmony_ci
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci.. data:: HKEY_CURRENT_CONFIG
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_ci   Contains information about the current hardware profile of the
5837db96d56Sopenharmony_ci   local computer system.
5847db96d56Sopenharmony_ci
5857db96d56Sopenharmony_ci.. data:: HKEY_DYN_DATA
5867db96d56Sopenharmony_ci
5877db96d56Sopenharmony_ci   This key is not used in versions of Windows after 98.
5887db96d56Sopenharmony_ci
5897db96d56Sopenharmony_ci
5907db96d56Sopenharmony_ci.. _access-rights:
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ciAccess Rights
5937db96d56Sopenharmony_ci+++++++++++++
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ciFor more information, see `Registry Key Security and Access
5967db96d56Sopenharmony_ci<https://msdn.microsoft.com/en-us/library/ms724878%28v=VS.85%29.aspx>`__.
5977db96d56Sopenharmony_ci
5987db96d56Sopenharmony_ci.. data:: KEY_ALL_ACCESS
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci   Combines the STANDARD_RIGHTS_REQUIRED, :const:`KEY_QUERY_VALUE`,
6017db96d56Sopenharmony_ci   :const:`KEY_SET_VALUE`, :const:`KEY_CREATE_SUB_KEY`,
6027db96d56Sopenharmony_ci   :const:`KEY_ENUMERATE_SUB_KEYS`, :const:`KEY_NOTIFY`,
6037db96d56Sopenharmony_ci   and :const:`KEY_CREATE_LINK` access rights.
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci.. data:: KEY_WRITE
6067db96d56Sopenharmony_ci
6077db96d56Sopenharmony_ci   Combines the STANDARD_RIGHTS_WRITE, :const:`KEY_SET_VALUE`, and
6087db96d56Sopenharmony_ci   :const:`KEY_CREATE_SUB_KEY` access rights.
6097db96d56Sopenharmony_ci
6107db96d56Sopenharmony_ci.. data:: KEY_READ
6117db96d56Sopenharmony_ci
6127db96d56Sopenharmony_ci   Combines the STANDARD_RIGHTS_READ, :const:`KEY_QUERY_VALUE`,
6137db96d56Sopenharmony_ci   :const:`KEY_ENUMERATE_SUB_KEYS`, and :const:`KEY_NOTIFY` values.
6147db96d56Sopenharmony_ci
6157db96d56Sopenharmony_ci.. data:: KEY_EXECUTE
6167db96d56Sopenharmony_ci
6177db96d56Sopenharmony_ci   Equivalent to :const:`KEY_READ`.
6187db96d56Sopenharmony_ci
6197db96d56Sopenharmony_ci.. data:: KEY_QUERY_VALUE
6207db96d56Sopenharmony_ci
6217db96d56Sopenharmony_ci   Required to query the values of a registry key.
6227db96d56Sopenharmony_ci
6237db96d56Sopenharmony_ci.. data:: KEY_SET_VALUE
6247db96d56Sopenharmony_ci
6257db96d56Sopenharmony_ci   Required to create, delete, or set a registry value.
6267db96d56Sopenharmony_ci
6277db96d56Sopenharmony_ci.. data:: KEY_CREATE_SUB_KEY
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_ci   Required to create a subkey of a registry key.
6307db96d56Sopenharmony_ci
6317db96d56Sopenharmony_ci.. data:: KEY_ENUMERATE_SUB_KEYS
6327db96d56Sopenharmony_ci
6337db96d56Sopenharmony_ci   Required to enumerate the subkeys of a registry key.
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci.. data:: KEY_NOTIFY
6367db96d56Sopenharmony_ci
6377db96d56Sopenharmony_ci   Required to request change notifications for a registry key or for
6387db96d56Sopenharmony_ci   subkeys of a registry key.
6397db96d56Sopenharmony_ci
6407db96d56Sopenharmony_ci.. data:: KEY_CREATE_LINK
6417db96d56Sopenharmony_ci
6427db96d56Sopenharmony_ci   Reserved for system use.
6437db96d56Sopenharmony_ci
6447db96d56Sopenharmony_ci
6457db96d56Sopenharmony_ci.. _64-bit-access-rights:
6467db96d56Sopenharmony_ci
6477db96d56Sopenharmony_ci64-bit Specific
6487db96d56Sopenharmony_ci***************
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ciFor more information, see `Accessing an Alternate Registry View
6517db96d56Sopenharmony_ci<https://msdn.microsoft.com/en-us/library/aa384129(v=VS.85).aspx>`__.
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci.. data:: KEY_WOW64_64KEY
6547db96d56Sopenharmony_ci
6557db96d56Sopenharmony_ci   Indicates that an application on 64-bit Windows should operate on
6567db96d56Sopenharmony_ci   the 64-bit registry view. On 32-bit Windows, this constant is ignored.
6577db96d56Sopenharmony_ci
6587db96d56Sopenharmony_ci.. data:: KEY_WOW64_32KEY
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ci   Indicates that an application on 64-bit Windows should operate on
6617db96d56Sopenharmony_ci   the 32-bit registry view. On 32-bit Windows, this constant is ignored.
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_ci.. _value-types:
6647db96d56Sopenharmony_ci
6657db96d56Sopenharmony_ciValue Types
6667db96d56Sopenharmony_ci+++++++++++
6677db96d56Sopenharmony_ci
6687db96d56Sopenharmony_ciFor more information, see `Registry Value Types
6697db96d56Sopenharmony_ci<https://msdn.microsoft.com/en-us/library/ms724884%28v=VS.85%29.aspx>`__.
6707db96d56Sopenharmony_ci
6717db96d56Sopenharmony_ci.. data:: REG_BINARY
6727db96d56Sopenharmony_ci
6737db96d56Sopenharmony_ci   Binary data in any form.
6747db96d56Sopenharmony_ci
6757db96d56Sopenharmony_ci.. data:: REG_DWORD
6767db96d56Sopenharmony_ci
6777db96d56Sopenharmony_ci   32-bit number.
6787db96d56Sopenharmony_ci
6797db96d56Sopenharmony_ci.. data:: REG_DWORD_LITTLE_ENDIAN
6807db96d56Sopenharmony_ci
6817db96d56Sopenharmony_ci   A 32-bit number in little-endian format. Equivalent to :const:`REG_DWORD`.
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci.. data:: REG_DWORD_BIG_ENDIAN
6847db96d56Sopenharmony_ci
6857db96d56Sopenharmony_ci   A 32-bit number in big-endian format.
6867db96d56Sopenharmony_ci
6877db96d56Sopenharmony_ci.. data:: REG_EXPAND_SZ
6887db96d56Sopenharmony_ci
6897db96d56Sopenharmony_ci   Null-terminated string containing references to environment
6907db96d56Sopenharmony_ci   variables (``%PATH%``).
6917db96d56Sopenharmony_ci
6927db96d56Sopenharmony_ci.. data:: REG_LINK
6937db96d56Sopenharmony_ci
6947db96d56Sopenharmony_ci   A Unicode symbolic link.
6957db96d56Sopenharmony_ci
6967db96d56Sopenharmony_ci.. data:: REG_MULTI_SZ
6977db96d56Sopenharmony_ci
6987db96d56Sopenharmony_ci   A sequence of null-terminated strings, terminated by two null characters.
6997db96d56Sopenharmony_ci   (Python handles this termination automatically.)
7007db96d56Sopenharmony_ci
7017db96d56Sopenharmony_ci.. data:: REG_NONE
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci   No defined value type.
7047db96d56Sopenharmony_ci
7057db96d56Sopenharmony_ci.. data:: REG_QWORD
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci   A 64-bit number.
7087db96d56Sopenharmony_ci
7097db96d56Sopenharmony_ci   .. versionadded:: 3.6
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ci.. data:: REG_QWORD_LITTLE_ENDIAN
7127db96d56Sopenharmony_ci
7137db96d56Sopenharmony_ci   A 64-bit number in little-endian format. Equivalent to :const:`REG_QWORD`.
7147db96d56Sopenharmony_ci
7157db96d56Sopenharmony_ci   .. versionadded:: 3.6
7167db96d56Sopenharmony_ci
7177db96d56Sopenharmony_ci.. data:: REG_RESOURCE_LIST
7187db96d56Sopenharmony_ci
7197db96d56Sopenharmony_ci   A device-driver resource list.
7207db96d56Sopenharmony_ci
7217db96d56Sopenharmony_ci.. data:: REG_FULL_RESOURCE_DESCRIPTOR
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci   A hardware setting.
7247db96d56Sopenharmony_ci
7257db96d56Sopenharmony_ci.. data:: REG_RESOURCE_REQUIREMENTS_LIST
7267db96d56Sopenharmony_ci
7277db96d56Sopenharmony_ci   A hardware resource list.
7287db96d56Sopenharmony_ci
7297db96d56Sopenharmony_ci.. data:: REG_SZ
7307db96d56Sopenharmony_ci
7317db96d56Sopenharmony_ci   A null-terminated string.
7327db96d56Sopenharmony_ci
7337db96d56Sopenharmony_ci
7347db96d56Sopenharmony_ci.. _handle-object:
7357db96d56Sopenharmony_ci
7367db96d56Sopenharmony_ciRegistry Handle Objects
7377db96d56Sopenharmony_ci-----------------------
7387db96d56Sopenharmony_ci
7397db96d56Sopenharmony_ciThis object wraps a Windows HKEY object, automatically closing it when the
7407db96d56Sopenharmony_ciobject is destroyed.  To guarantee cleanup, you can call either the
7417db96d56Sopenharmony_ci:meth:`~PyHKEY.Close` method on the object, or the :func:`CloseKey` function.
7427db96d56Sopenharmony_ci
7437db96d56Sopenharmony_ciAll registry functions in this module return one of these objects.
7447db96d56Sopenharmony_ci
7457db96d56Sopenharmony_ciAll registry functions in this module which accept a handle object also accept
7467db96d56Sopenharmony_cian integer, however, use of the handle object is encouraged.
7477db96d56Sopenharmony_ci
7487db96d56Sopenharmony_ciHandle objects provide semantics for :meth:`__bool__` -- thus ::
7497db96d56Sopenharmony_ci
7507db96d56Sopenharmony_ci   if handle:
7517db96d56Sopenharmony_ci       print("Yes")
7527db96d56Sopenharmony_ci
7537db96d56Sopenharmony_ciwill print ``Yes`` if the handle is currently valid (has not been closed or
7547db96d56Sopenharmony_cidetached).
7557db96d56Sopenharmony_ci
7567db96d56Sopenharmony_ciThe object also support comparison semantics, so handle objects will compare
7577db96d56Sopenharmony_citrue if they both reference the same underlying Windows handle value.
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ciHandle objects can be converted to an integer (e.g., using the built-in
7607db96d56Sopenharmony_ci:func:`int` function), in which case the underlying Windows handle value is
7617db96d56Sopenharmony_cireturned.  You can also use the :meth:`~PyHKEY.Detach` method to return the
7627db96d56Sopenharmony_ciinteger handle, and also disconnect the Windows handle from the handle object.
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ci
7657db96d56Sopenharmony_ci.. method:: PyHKEY.Close()
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci   Closes the underlying Windows handle.
7687db96d56Sopenharmony_ci
7697db96d56Sopenharmony_ci   If the handle is already closed, no error is raised.
7707db96d56Sopenharmony_ci
7717db96d56Sopenharmony_ci
7727db96d56Sopenharmony_ci.. method:: PyHKEY.Detach()
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci   Detaches the Windows handle from the handle object.
7757db96d56Sopenharmony_ci
7767db96d56Sopenharmony_ci   The result is an integer that holds the value of the handle before it is
7777db96d56Sopenharmony_ci   detached.  If the handle is already detached or closed, this will return
7787db96d56Sopenharmony_ci   zero.
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci   After calling this function, the handle is effectively invalidated, but the
7817db96d56Sopenharmony_ci   handle is not closed.  You would call this function when you need the
7827db96d56Sopenharmony_ci   underlying Win32 handle to exist beyond the lifetime of the handle object.
7837db96d56Sopenharmony_ci
7847db96d56Sopenharmony_ci   .. audit-event:: winreg.PyHKEY.Detach key winreg.PyHKEY.Detach
7857db96d56Sopenharmony_ci
7867db96d56Sopenharmony_ci
7877db96d56Sopenharmony_ci.. method:: PyHKEY.__enter__()
7887db96d56Sopenharmony_ci            PyHKEY.__exit__(*exc_info)
7897db96d56Sopenharmony_ci
7907db96d56Sopenharmony_ci   The HKEY object implements :meth:`~object.__enter__` and
7917db96d56Sopenharmony_ci   :meth:`~object.__exit__` and thus supports the context protocol for the
7927db96d56Sopenharmony_ci   :keyword:`with` statement::
7937db96d56Sopenharmony_ci
7947db96d56Sopenharmony_ci      with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key:
7957db96d56Sopenharmony_ci          ...  # work with key
7967db96d56Sopenharmony_ci
7977db96d56Sopenharmony_ci   will automatically close *key* when control leaves the :keyword:`with` block.
7987db96d56Sopenharmony_ci
7997db96d56Sopenharmony_ci
800