17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_HKEYType_Close__doc__,
67db96d56Sopenharmony_ci"Close($self, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Closes the underlying Windows handle.\n"
107db96d56Sopenharmony_ci"\n"
117db96d56Sopenharmony_ci"If the handle is already closed, no error is raised.");
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci#define WINREG_HKEYTYPE_CLOSE_METHODDEF    \
147db96d56Sopenharmony_ci    {"Close", (PyCFunction)winreg_HKEYType_Close, METH_NOARGS, winreg_HKEYType_Close__doc__},
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_cistatic PyObject *
177db96d56Sopenharmony_ciwinreg_HKEYType_Close_impl(PyHKEYObject *self);
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_cistatic PyObject *
207db96d56Sopenharmony_ciwinreg_HKEYType_Close(PyHKEYObject *self, PyObject *Py_UNUSED(ignored))
217db96d56Sopenharmony_ci{
227db96d56Sopenharmony_ci    return winreg_HKEYType_Close_impl(self);
237db96d56Sopenharmony_ci}
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_HKEYType_Detach__doc__,
267db96d56Sopenharmony_ci"Detach($self, /)\n"
277db96d56Sopenharmony_ci"--\n"
287db96d56Sopenharmony_ci"\n"
297db96d56Sopenharmony_ci"Detaches the Windows handle from the handle object.\n"
307db96d56Sopenharmony_ci"\n"
317db96d56Sopenharmony_ci"The result is the value of the handle before it is detached.  If the\n"
327db96d56Sopenharmony_ci"handle is already detached, this will return zero.\n"
337db96d56Sopenharmony_ci"\n"
347db96d56Sopenharmony_ci"After calling this function, the handle is effectively invalidated,\n"
357db96d56Sopenharmony_ci"but the handle is not closed.  You would call this function when you\n"
367db96d56Sopenharmony_ci"need the underlying win32 handle to exist beyond the lifetime of the\n"
377db96d56Sopenharmony_ci"handle object.");
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci#define WINREG_HKEYTYPE_DETACH_METHODDEF    \
407db96d56Sopenharmony_ci    {"Detach", (PyCFunction)winreg_HKEYType_Detach, METH_NOARGS, winreg_HKEYType_Detach__doc__},
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_cistatic PyObject *
437db96d56Sopenharmony_ciwinreg_HKEYType_Detach_impl(PyHKEYObject *self);
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_cistatic PyObject *
467db96d56Sopenharmony_ciwinreg_HKEYType_Detach(PyHKEYObject *self, PyObject *Py_UNUSED(ignored))
477db96d56Sopenharmony_ci{
487db96d56Sopenharmony_ci    return winreg_HKEYType_Detach_impl(self);
497db96d56Sopenharmony_ci}
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_HKEYType___enter____doc__,
527db96d56Sopenharmony_ci"__enter__($self, /)\n"
537db96d56Sopenharmony_ci"--\n"
547db96d56Sopenharmony_ci"\n");
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci#define WINREG_HKEYTYPE___ENTER___METHODDEF    \
577db96d56Sopenharmony_ci    {"__enter__", (PyCFunction)winreg_HKEYType___enter__, METH_NOARGS, winreg_HKEYType___enter____doc__},
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_cistatic PyHKEYObject *
607db96d56Sopenharmony_ciwinreg_HKEYType___enter___impl(PyHKEYObject *self);
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_cistatic PyObject *
637db96d56Sopenharmony_ciwinreg_HKEYType___enter__(PyHKEYObject *self, PyObject *Py_UNUSED(ignored))
647db96d56Sopenharmony_ci{
657db96d56Sopenharmony_ci    PyObject *return_value = NULL;
667db96d56Sopenharmony_ci    PyHKEYObject *_return_value;
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci    _return_value = winreg_HKEYType___enter___impl(self);
697db96d56Sopenharmony_ci    return_value = (PyObject *)_return_value;
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci    return return_value;
727db96d56Sopenharmony_ci}
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_HKEYType___exit____doc__,
757db96d56Sopenharmony_ci"__exit__($self, /, exc_type, exc_value, traceback)\n"
767db96d56Sopenharmony_ci"--\n"
777db96d56Sopenharmony_ci"\n");
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci#define WINREG_HKEYTYPE___EXIT___METHODDEF    \
807db96d56Sopenharmony_ci    {"__exit__", _PyCFunction_CAST(winreg_HKEYType___exit__), METH_FASTCALL|METH_KEYWORDS, winreg_HKEYType___exit____doc__},
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_cistatic PyObject *
837db96d56Sopenharmony_ciwinreg_HKEYType___exit___impl(PyHKEYObject *self, PyObject *exc_type,
847db96d56Sopenharmony_ci                              PyObject *exc_value, PyObject *traceback);
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_cistatic PyObject *
877db96d56Sopenharmony_ciwinreg_HKEYType___exit__(PyHKEYObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
887db96d56Sopenharmony_ci{
897db96d56Sopenharmony_ci    PyObject *return_value = NULL;
907db96d56Sopenharmony_ci    static const char * const _keywords[] = {"exc_type", "exc_value", "traceback", NULL};
917db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "__exit__", 0};
927db96d56Sopenharmony_ci    PyObject *argsbuf[3];
937db96d56Sopenharmony_ci    PyObject *exc_type;
947db96d56Sopenharmony_ci    PyObject *exc_value;
957db96d56Sopenharmony_ci    PyObject *traceback;
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
987db96d56Sopenharmony_ci    if (!args) {
997db96d56Sopenharmony_ci        goto exit;
1007db96d56Sopenharmony_ci    }
1017db96d56Sopenharmony_ci    exc_type = args[0];
1027db96d56Sopenharmony_ci    exc_value = args[1];
1037db96d56Sopenharmony_ci    traceback = args[2];
1047db96d56Sopenharmony_ci    return_value = winreg_HKEYType___exit___impl(self, exc_type, exc_value, traceback);
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ciexit:
1077db96d56Sopenharmony_ci    return return_value;
1087db96d56Sopenharmony_ci}
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_CloseKey__doc__,
1117db96d56Sopenharmony_ci"CloseKey($module, hkey, /)\n"
1127db96d56Sopenharmony_ci"--\n"
1137db96d56Sopenharmony_ci"\n"
1147db96d56Sopenharmony_ci"Closes a previously opened registry key.\n"
1157db96d56Sopenharmony_ci"\n"
1167db96d56Sopenharmony_ci"  hkey\n"
1177db96d56Sopenharmony_ci"    A previously opened key.\n"
1187db96d56Sopenharmony_ci"\n"
1197db96d56Sopenharmony_ci"Note that if the key is not closed using this method, it will be\n"
1207db96d56Sopenharmony_ci"closed when the hkey object is destroyed by Python.");
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci#define WINREG_CLOSEKEY_METHODDEF    \
1237db96d56Sopenharmony_ci    {"CloseKey", (PyCFunction)winreg_CloseKey, METH_O, winreg_CloseKey__doc__},
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_ConnectRegistry__doc__,
1267db96d56Sopenharmony_ci"ConnectRegistry($module, computer_name, key, /)\n"
1277db96d56Sopenharmony_ci"--\n"
1287db96d56Sopenharmony_ci"\n"
1297db96d56Sopenharmony_ci"Establishes a connection to the registry on another computer.\n"
1307db96d56Sopenharmony_ci"\n"
1317db96d56Sopenharmony_ci"  computer_name\n"
1327db96d56Sopenharmony_ci"    The name of the remote computer, of the form r\"\\\\computername\".  If\n"
1337db96d56Sopenharmony_ci"    None, the local computer is used.\n"
1347db96d56Sopenharmony_ci"  key\n"
1357db96d56Sopenharmony_ci"    The predefined key to connect to.\n"
1367db96d56Sopenharmony_ci"\n"
1377db96d56Sopenharmony_ci"The return value is the handle of the opened key.\n"
1387db96d56Sopenharmony_ci"If the function fails, an OSError exception is raised.");
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci#define WINREG_CONNECTREGISTRY_METHODDEF    \
1417db96d56Sopenharmony_ci    {"ConnectRegistry", _PyCFunction_CAST(winreg_ConnectRegistry), METH_FASTCALL, winreg_ConnectRegistry__doc__},
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_cistatic HKEY
1447db96d56Sopenharmony_ciwinreg_ConnectRegistry_impl(PyObject *module,
1457db96d56Sopenharmony_ci                            const Py_UNICODE *computer_name, HKEY key);
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_cistatic PyObject *
1487db96d56Sopenharmony_ciwinreg_ConnectRegistry(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1497db96d56Sopenharmony_ci{
1507db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1517db96d56Sopenharmony_ci    const Py_UNICODE *computer_name = NULL;
1527db96d56Sopenharmony_ci    HKEY key;
1537db96d56Sopenharmony_ci    HKEY _return_value;
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("ConnectRegistry", nargs, 2, 2)) {
1567db96d56Sopenharmony_ci        goto exit;
1577db96d56Sopenharmony_ci    }
1587db96d56Sopenharmony_ci    if (args[0] == Py_None) {
1597db96d56Sopenharmony_ci        computer_name = NULL;
1607db96d56Sopenharmony_ci    }
1617db96d56Sopenharmony_ci    else if (PyUnicode_Check(args[0])) {
1627db96d56Sopenharmony_ci        #if USE_UNICODE_WCHAR_CACHE
1637db96d56Sopenharmony_ci        computer_name = _PyUnicode_AsUnicode(args[0]);
1647db96d56Sopenharmony_ci        #else /* USE_UNICODE_WCHAR_CACHE */
1657db96d56Sopenharmony_ci        computer_name = PyUnicode_AsWideCharString(args[0], NULL);
1667db96d56Sopenharmony_ci        #endif /* USE_UNICODE_WCHAR_CACHE */
1677db96d56Sopenharmony_ci        if (computer_name == NULL) {
1687db96d56Sopenharmony_ci            goto exit;
1697db96d56Sopenharmony_ci        }
1707db96d56Sopenharmony_ci    }
1717db96d56Sopenharmony_ci    else {
1727db96d56Sopenharmony_ci        _PyArg_BadArgument("ConnectRegistry", "argument 1", "str or None", args[0]);
1737db96d56Sopenharmony_ci        goto exit;
1747db96d56Sopenharmony_ci    }
1757db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[1], &key)) {
1767db96d56Sopenharmony_ci        goto exit;
1777db96d56Sopenharmony_ci    }
1787db96d56Sopenharmony_ci    _return_value = winreg_ConnectRegistry_impl(module, computer_name, key);
1797db96d56Sopenharmony_ci    if (_return_value == NULL) {
1807db96d56Sopenharmony_ci        goto exit;
1817db96d56Sopenharmony_ci    }
1827db96d56Sopenharmony_ci    return_value = PyHKEY_FromHKEY(_return_value);
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ciexit:
1857db96d56Sopenharmony_ci    /* Cleanup for computer_name */
1867db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
1877db96d56Sopenharmony_ci    PyMem_Free((void *)computer_name);
1887db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci    return return_value;
1917db96d56Sopenharmony_ci}
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_CreateKey__doc__,
1947db96d56Sopenharmony_ci"CreateKey($module, key, sub_key, /)\n"
1957db96d56Sopenharmony_ci"--\n"
1967db96d56Sopenharmony_ci"\n"
1977db96d56Sopenharmony_ci"Creates or opens the specified key.\n"
1987db96d56Sopenharmony_ci"\n"
1997db96d56Sopenharmony_ci"  key\n"
2007db96d56Sopenharmony_ci"    An already open key, or one of the predefined HKEY_* constants.\n"
2017db96d56Sopenharmony_ci"  sub_key\n"
2027db96d56Sopenharmony_ci"    The name of the key this method opens or creates.\n"
2037db96d56Sopenharmony_ci"\n"
2047db96d56Sopenharmony_ci"If key is one of the predefined keys, sub_key may be None. In that case,\n"
2057db96d56Sopenharmony_ci"the handle returned is the same key handle passed in to the function.\n"
2067db96d56Sopenharmony_ci"\n"
2077db96d56Sopenharmony_ci"If the key already exists, this function opens the existing key.\n"
2087db96d56Sopenharmony_ci"\n"
2097db96d56Sopenharmony_ci"The return value is the handle of the opened key.\n"
2107db96d56Sopenharmony_ci"If the function fails, an OSError exception is raised.");
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci#define WINREG_CREATEKEY_METHODDEF    \
2137db96d56Sopenharmony_ci    {"CreateKey", _PyCFunction_CAST(winreg_CreateKey), METH_FASTCALL, winreg_CreateKey__doc__},
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_cistatic HKEY
2167db96d56Sopenharmony_ciwinreg_CreateKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key);
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_cistatic PyObject *
2197db96d56Sopenharmony_ciwinreg_CreateKey(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
2207db96d56Sopenharmony_ci{
2217db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2227db96d56Sopenharmony_ci    HKEY key;
2237db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
2247db96d56Sopenharmony_ci    HKEY _return_value;
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("CreateKey", nargs, 2, 2)) {
2277db96d56Sopenharmony_ci        goto exit;
2287db96d56Sopenharmony_ci    }
2297db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
2307db96d56Sopenharmony_ci        goto exit;
2317db96d56Sopenharmony_ci    }
2327db96d56Sopenharmony_ci    if (args[1] == Py_None) {
2337db96d56Sopenharmony_ci        sub_key = NULL;
2347db96d56Sopenharmony_ci    }
2357db96d56Sopenharmony_ci    else if (PyUnicode_Check(args[1])) {
2367db96d56Sopenharmony_ci        #if USE_UNICODE_WCHAR_CACHE
2377db96d56Sopenharmony_ci        sub_key = _PyUnicode_AsUnicode(args[1]);
2387db96d56Sopenharmony_ci        #else /* USE_UNICODE_WCHAR_CACHE */
2397db96d56Sopenharmony_ci        sub_key = PyUnicode_AsWideCharString(args[1], NULL);
2407db96d56Sopenharmony_ci        #endif /* USE_UNICODE_WCHAR_CACHE */
2417db96d56Sopenharmony_ci        if (sub_key == NULL) {
2427db96d56Sopenharmony_ci            goto exit;
2437db96d56Sopenharmony_ci        }
2447db96d56Sopenharmony_ci    }
2457db96d56Sopenharmony_ci    else {
2467db96d56Sopenharmony_ci        _PyArg_BadArgument("CreateKey", "argument 2", "str or None", args[1]);
2477db96d56Sopenharmony_ci        goto exit;
2487db96d56Sopenharmony_ci    }
2497db96d56Sopenharmony_ci    _return_value = winreg_CreateKey_impl(module, key, sub_key);
2507db96d56Sopenharmony_ci    if (_return_value == NULL) {
2517db96d56Sopenharmony_ci        goto exit;
2527db96d56Sopenharmony_ci    }
2537db96d56Sopenharmony_ci    return_value = PyHKEY_FromHKEY(_return_value);
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ciexit:
2567db96d56Sopenharmony_ci    /* Cleanup for sub_key */
2577db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
2587db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
2597db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci    return return_value;
2627db96d56Sopenharmony_ci}
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_CreateKeyEx__doc__,
2657db96d56Sopenharmony_ci"CreateKeyEx($module, /, key, sub_key, reserved=0,\n"
2667db96d56Sopenharmony_ci"            access=winreg.KEY_WRITE)\n"
2677db96d56Sopenharmony_ci"--\n"
2687db96d56Sopenharmony_ci"\n"
2697db96d56Sopenharmony_ci"Creates or opens the specified key.\n"
2707db96d56Sopenharmony_ci"\n"
2717db96d56Sopenharmony_ci"  key\n"
2727db96d56Sopenharmony_ci"    An already open key, or one of the predefined HKEY_* constants.\n"
2737db96d56Sopenharmony_ci"  sub_key\n"
2747db96d56Sopenharmony_ci"    The name of the key this method opens or creates.\n"
2757db96d56Sopenharmony_ci"  reserved\n"
2767db96d56Sopenharmony_ci"    A reserved integer, and must be zero.  Default is zero.\n"
2777db96d56Sopenharmony_ci"  access\n"
2787db96d56Sopenharmony_ci"    An integer that specifies an access mask that describes the\n"
2797db96d56Sopenharmony_ci"    desired security access for the key. Default is KEY_WRITE.\n"
2807db96d56Sopenharmony_ci"\n"
2817db96d56Sopenharmony_ci"If key is one of the predefined keys, sub_key may be None. In that case,\n"
2827db96d56Sopenharmony_ci"the handle returned is the same key handle passed in to the function.\n"
2837db96d56Sopenharmony_ci"\n"
2847db96d56Sopenharmony_ci"If the key already exists, this function opens the existing key\n"
2857db96d56Sopenharmony_ci"\n"
2867db96d56Sopenharmony_ci"The return value is the handle of the opened key.\n"
2877db96d56Sopenharmony_ci"If the function fails, an OSError exception is raised.");
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci#define WINREG_CREATEKEYEX_METHODDEF    \
2907db96d56Sopenharmony_ci    {"CreateKeyEx", _PyCFunction_CAST(winreg_CreateKeyEx), METH_FASTCALL|METH_KEYWORDS, winreg_CreateKeyEx__doc__},
2917db96d56Sopenharmony_ci
2927db96d56Sopenharmony_cistatic HKEY
2937db96d56Sopenharmony_ciwinreg_CreateKeyEx_impl(PyObject *module, HKEY key,
2947db96d56Sopenharmony_ci                        const Py_UNICODE *sub_key, int reserved,
2957db96d56Sopenharmony_ci                        REGSAM access);
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_cistatic PyObject *
2987db96d56Sopenharmony_ciwinreg_CreateKeyEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
2997db96d56Sopenharmony_ci{
3007db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3017db96d56Sopenharmony_ci    static const char * const _keywords[] = {"key", "sub_key", "reserved", "access", NULL};
3027db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {"O&O&|ii:CreateKeyEx", _keywords, 0};
3037db96d56Sopenharmony_ci    HKEY key;
3047db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
3057db96d56Sopenharmony_ci    int reserved = 0;
3067db96d56Sopenharmony_ci    REGSAM access = KEY_WRITE;
3077db96d56Sopenharmony_ci    HKEY _return_value;
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
3107db96d56Sopenharmony_ci        clinic_HKEY_converter, &key, _PyUnicode_WideCharString_Opt_Converter, &sub_key, &reserved, &access)) {
3117db96d56Sopenharmony_ci        goto exit;
3127db96d56Sopenharmony_ci    }
3137db96d56Sopenharmony_ci    _return_value = winreg_CreateKeyEx_impl(module, key, sub_key, reserved, access);
3147db96d56Sopenharmony_ci    if (_return_value == NULL) {
3157db96d56Sopenharmony_ci        goto exit;
3167db96d56Sopenharmony_ci    }
3177db96d56Sopenharmony_ci    return_value = PyHKEY_FromHKEY(_return_value);
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ciexit:
3207db96d56Sopenharmony_ci    /* Cleanup for sub_key */
3217db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
3227db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
3237db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ci    return return_value;
3267db96d56Sopenharmony_ci}
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_DeleteKey__doc__,
3297db96d56Sopenharmony_ci"DeleteKey($module, key, sub_key, /)\n"
3307db96d56Sopenharmony_ci"--\n"
3317db96d56Sopenharmony_ci"\n"
3327db96d56Sopenharmony_ci"Deletes the specified key.\n"
3337db96d56Sopenharmony_ci"\n"
3347db96d56Sopenharmony_ci"  key\n"
3357db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
3367db96d56Sopenharmony_ci"  sub_key\n"
3377db96d56Sopenharmony_ci"    A string that must be the name of a subkey of the key identified by\n"
3387db96d56Sopenharmony_ci"    the key parameter. This value must not be None, and the key may not\n"
3397db96d56Sopenharmony_ci"    have subkeys.\n"
3407db96d56Sopenharmony_ci"\n"
3417db96d56Sopenharmony_ci"This method can not delete keys with subkeys.\n"
3427db96d56Sopenharmony_ci"\n"
3437db96d56Sopenharmony_ci"If the function succeeds, the entire key, including all of its values,\n"
3447db96d56Sopenharmony_ci"is removed.  If the function fails, an OSError exception is raised.");
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci#define WINREG_DELETEKEY_METHODDEF    \
3477db96d56Sopenharmony_ci    {"DeleteKey", _PyCFunction_CAST(winreg_DeleteKey), METH_FASTCALL, winreg_DeleteKey__doc__},
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_cistatic PyObject *
3507db96d56Sopenharmony_ciwinreg_DeleteKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key);
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_cistatic PyObject *
3537db96d56Sopenharmony_ciwinreg_DeleteKey(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
3547db96d56Sopenharmony_ci{
3557db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3567db96d56Sopenharmony_ci    HKEY key;
3577db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
3587db96d56Sopenharmony_ci
3597db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("DeleteKey", nargs, 2, 2)) {
3607db96d56Sopenharmony_ci        goto exit;
3617db96d56Sopenharmony_ci    }
3627db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
3637db96d56Sopenharmony_ci        goto exit;
3647db96d56Sopenharmony_ci    }
3657db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[1])) {
3667db96d56Sopenharmony_ci        _PyArg_BadArgument("DeleteKey", "argument 2", "str", args[1]);
3677db96d56Sopenharmony_ci        goto exit;
3687db96d56Sopenharmony_ci    }
3697db96d56Sopenharmony_ci    #if USE_UNICODE_WCHAR_CACHE
3707db96d56Sopenharmony_ci    sub_key = _PyUnicode_AsUnicode(args[1]);
3717db96d56Sopenharmony_ci    #else /* USE_UNICODE_WCHAR_CACHE */
3727db96d56Sopenharmony_ci    sub_key = PyUnicode_AsWideCharString(args[1], NULL);
3737db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
3747db96d56Sopenharmony_ci    if (sub_key == NULL) {
3757db96d56Sopenharmony_ci        goto exit;
3767db96d56Sopenharmony_ci    }
3777db96d56Sopenharmony_ci    return_value = winreg_DeleteKey_impl(module, key, sub_key);
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ciexit:
3807db96d56Sopenharmony_ci    /* Cleanup for sub_key */
3817db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
3827db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
3837db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci    return return_value;
3867db96d56Sopenharmony_ci}
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_DeleteKeyEx__doc__,
3897db96d56Sopenharmony_ci"DeleteKeyEx($module, /, key, sub_key, access=winreg.KEY_WOW64_64KEY,\n"
3907db96d56Sopenharmony_ci"            reserved=0)\n"
3917db96d56Sopenharmony_ci"--\n"
3927db96d56Sopenharmony_ci"\n"
3937db96d56Sopenharmony_ci"Deletes the specified key (intended for 64-bit OS).\n"
3947db96d56Sopenharmony_ci"\n"
3957db96d56Sopenharmony_ci"  key\n"
3967db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
3977db96d56Sopenharmony_ci"  sub_key\n"
3987db96d56Sopenharmony_ci"    A string that must be the name of a subkey of the key identified by\n"
3997db96d56Sopenharmony_ci"    the key parameter. This value must not be None, and the key may not\n"
4007db96d56Sopenharmony_ci"    have subkeys.\n"
4017db96d56Sopenharmony_ci"  access\n"
4027db96d56Sopenharmony_ci"    An integer that specifies an access mask that describes the\n"
4037db96d56Sopenharmony_ci"    desired security access for the key. Default is KEY_WOW64_64KEY.\n"
4047db96d56Sopenharmony_ci"  reserved\n"
4057db96d56Sopenharmony_ci"    A reserved integer, and must be zero.  Default is zero.\n"
4067db96d56Sopenharmony_ci"\n"
4077db96d56Sopenharmony_ci"While this function is intended to be used for 64-bit OS, it is also\n"
4087db96d56Sopenharmony_ci" available on 32-bit systems.\n"
4097db96d56Sopenharmony_ci"\n"
4107db96d56Sopenharmony_ci"This method can not delete keys with subkeys.\n"
4117db96d56Sopenharmony_ci"\n"
4127db96d56Sopenharmony_ci"If the function succeeds, the entire key, including all of its values,\n"
4137db96d56Sopenharmony_ci"is removed.  If the function fails, an OSError exception is raised.\n"
4147db96d56Sopenharmony_ci"On unsupported Windows versions, NotImplementedError is raised.");
4157db96d56Sopenharmony_ci
4167db96d56Sopenharmony_ci#define WINREG_DELETEKEYEX_METHODDEF    \
4177db96d56Sopenharmony_ci    {"DeleteKeyEx", _PyCFunction_CAST(winreg_DeleteKeyEx), METH_FASTCALL|METH_KEYWORDS, winreg_DeleteKeyEx__doc__},
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_cistatic PyObject *
4207db96d56Sopenharmony_ciwinreg_DeleteKeyEx_impl(PyObject *module, HKEY key,
4217db96d56Sopenharmony_ci                        const Py_UNICODE *sub_key, REGSAM access,
4227db96d56Sopenharmony_ci                        int reserved);
4237db96d56Sopenharmony_ci
4247db96d56Sopenharmony_cistatic PyObject *
4257db96d56Sopenharmony_ciwinreg_DeleteKeyEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
4267db96d56Sopenharmony_ci{
4277db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4287db96d56Sopenharmony_ci    static const char * const _keywords[] = {"key", "sub_key", "access", "reserved", NULL};
4297db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {"O&O&|ii:DeleteKeyEx", _keywords, 0};
4307db96d56Sopenharmony_ci    HKEY key;
4317db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
4327db96d56Sopenharmony_ci    REGSAM access = KEY_WOW64_64KEY;
4337db96d56Sopenharmony_ci    int reserved = 0;
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
4367db96d56Sopenharmony_ci        clinic_HKEY_converter, &key, _PyUnicode_WideCharString_Converter, &sub_key, &access, &reserved)) {
4377db96d56Sopenharmony_ci        goto exit;
4387db96d56Sopenharmony_ci    }
4397db96d56Sopenharmony_ci    return_value = winreg_DeleteKeyEx_impl(module, key, sub_key, access, reserved);
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ciexit:
4427db96d56Sopenharmony_ci    /* Cleanup for sub_key */
4437db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
4447db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
4457db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
4467db96d56Sopenharmony_ci
4477db96d56Sopenharmony_ci    return return_value;
4487db96d56Sopenharmony_ci}
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_DeleteValue__doc__,
4517db96d56Sopenharmony_ci"DeleteValue($module, key, value, /)\n"
4527db96d56Sopenharmony_ci"--\n"
4537db96d56Sopenharmony_ci"\n"
4547db96d56Sopenharmony_ci"Removes a named value from a registry key.\n"
4557db96d56Sopenharmony_ci"\n"
4567db96d56Sopenharmony_ci"  key\n"
4577db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
4587db96d56Sopenharmony_ci"  value\n"
4597db96d56Sopenharmony_ci"    A string that identifies the value to remove.");
4607db96d56Sopenharmony_ci
4617db96d56Sopenharmony_ci#define WINREG_DELETEVALUE_METHODDEF    \
4627db96d56Sopenharmony_ci    {"DeleteValue", _PyCFunction_CAST(winreg_DeleteValue), METH_FASTCALL, winreg_DeleteValue__doc__},
4637db96d56Sopenharmony_ci
4647db96d56Sopenharmony_cistatic PyObject *
4657db96d56Sopenharmony_ciwinreg_DeleteValue_impl(PyObject *module, HKEY key, const Py_UNICODE *value);
4667db96d56Sopenharmony_ci
4677db96d56Sopenharmony_cistatic PyObject *
4687db96d56Sopenharmony_ciwinreg_DeleteValue(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
4697db96d56Sopenharmony_ci{
4707db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4717db96d56Sopenharmony_ci    HKEY key;
4727db96d56Sopenharmony_ci    const Py_UNICODE *value = NULL;
4737db96d56Sopenharmony_ci
4747db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("DeleteValue", nargs, 2, 2)) {
4757db96d56Sopenharmony_ci        goto exit;
4767db96d56Sopenharmony_ci    }
4777db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
4787db96d56Sopenharmony_ci        goto exit;
4797db96d56Sopenharmony_ci    }
4807db96d56Sopenharmony_ci    if (args[1] == Py_None) {
4817db96d56Sopenharmony_ci        value = NULL;
4827db96d56Sopenharmony_ci    }
4837db96d56Sopenharmony_ci    else if (PyUnicode_Check(args[1])) {
4847db96d56Sopenharmony_ci        #if USE_UNICODE_WCHAR_CACHE
4857db96d56Sopenharmony_ci        value = _PyUnicode_AsUnicode(args[1]);
4867db96d56Sopenharmony_ci        #else /* USE_UNICODE_WCHAR_CACHE */
4877db96d56Sopenharmony_ci        value = PyUnicode_AsWideCharString(args[1], NULL);
4887db96d56Sopenharmony_ci        #endif /* USE_UNICODE_WCHAR_CACHE */
4897db96d56Sopenharmony_ci        if (value == NULL) {
4907db96d56Sopenharmony_ci            goto exit;
4917db96d56Sopenharmony_ci        }
4927db96d56Sopenharmony_ci    }
4937db96d56Sopenharmony_ci    else {
4947db96d56Sopenharmony_ci        _PyArg_BadArgument("DeleteValue", "argument 2", "str or None", args[1]);
4957db96d56Sopenharmony_ci        goto exit;
4967db96d56Sopenharmony_ci    }
4977db96d56Sopenharmony_ci    return_value = winreg_DeleteValue_impl(module, key, value);
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ciexit:
5007db96d56Sopenharmony_ci    /* Cleanup for value */
5017db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
5027db96d56Sopenharmony_ci    PyMem_Free((void *)value);
5037db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci    return return_value;
5067db96d56Sopenharmony_ci}
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_EnumKey__doc__,
5097db96d56Sopenharmony_ci"EnumKey($module, key, index, /)\n"
5107db96d56Sopenharmony_ci"--\n"
5117db96d56Sopenharmony_ci"\n"
5127db96d56Sopenharmony_ci"Enumerates subkeys of an open registry key.\n"
5137db96d56Sopenharmony_ci"\n"
5147db96d56Sopenharmony_ci"  key\n"
5157db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
5167db96d56Sopenharmony_ci"  index\n"
5177db96d56Sopenharmony_ci"    An integer that identifies the index of the key to retrieve.\n"
5187db96d56Sopenharmony_ci"\n"
5197db96d56Sopenharmony_ci"The function retrieves the name of one subkey each time it is called.\n"
5207db96d56Sopenharmony_ci"It is typically called repeatedly until an OSError exception is\n"
5217db96d56Sopenharmony_ci"raised, indicating no more values are available.");
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci#define WINREG_ENUMKEY_METHODDEF    \
5247db96d56Sopenharmony_ci    {"EnumKey", _PyCFunction_CAST(winreg_EnumKey), METH_FASTCALL, winreg_EnumKey__doc__},
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_cistatic PyObject *
5277db96d56Sopenharmony_ciwinreg_EnumKey_impl(PyObject *module, HKEY key, int index);
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_cistatic PyObject *
5307db96d56Sopenharmony_ciwinreg_EnumKey(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
5317db96d56Sopenharmony_ci{
5327db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5337db96d56Sopenharmony_ci    HKEY key;
5347db96d56Sopenharmony_ci    int index;
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("EnumKey", nargs, 2, 2)) {
5377db96d56Sopenharmony_ci        goto exit;
5387db96d56Sopenharmony_ci    }
5397db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
5407db96d56Sopenharmony_ci        goto exit;
5417db96d56Sopenharmony_ci    }
5427db96d56Sopenharmony_ci    index = _PyLong_AsInt(args[1]);
5437db96d56Sopenharmony_ci    if (index == -1 && PyErr_Occurred()) {
5447db96d56Sopenharmony_ci        goto exit;
5457db96d56Sopenharmony_ci    }
5467db96d56Sopenharmony_ci    return_value = winreg_EnumKey_impl(module, key, index);
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ciexit:
5497db96d56Sopenharmony_ci    return return_value;
5507db96d56Sopenharmony_ci}
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_EnumValue__doc__,
5537db96d56Sopenharmony_ci"EnumValue($module, key, index, /)\n"
5547db96d56Sopenharmony_ci"--\n"
5557db96d56Sopenharmony_ci"\n"
5567db96d56Sopenharmony_ci"Enumerates values of an open registry key.\n"
5577db96d56Sopenharmony_ci"\n"
5587db96d56Sopenharmony_ci"  key\n"
5597db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
5607db96d56Sopenharmony_ci"  index\n"
5617db96d56Sopenharmony_ci"    An integer that identifies the index of the value to retrieve.\n"
5627db96d56Sopenharmony_ci"\n"
5637db96d56Sopenharmony_ci"The function retrieves the name of one subkey each time it is called.\n"
5647db96d56Sopenharmony_ci"It is typically called repeatedly, until an OSError exception\n"
5657db96d56Sopenharmony_ci"is raised, indicating no more values.\n"
5667db96d56Sopenharmony_ci"\n"
5677db96d56Sopenharmony_ci"The result is a tuple of 3 items:\n"
5687db96d56Sopenharmony_ci"  value_name\n"
5697db96d56Sopenharmony_ci"    A string that identifies the value.\n"
5707db96d56Sopenharmony_ci"  value_data\n"
5717db96d56Sopenharmony_ci"    An object that holds the value data, and whose type depends\n"
5727db96d56Sopenharmony_ci"    on the underlying registry type.\n"
5737db96d56Sopenharmony_ci"  data_type\n"
5747db96d56Sopenharmony_ci"    An integer that identifies the type of the value data.");
5757db96d56Sopenharmony_ci
5767db96d56Sopenharmony_ci#define WINREG_ENUMVALUE_METHODDEF    \
5777db96d56Sopenharmony_ci    {"EnumValue", _PyCFunction_CAST(winreg_EnumValue), METH_FASTCALL, winreg_EnumValue__doc__},
5787db96d56Sopenharmony_ci
5797db96d56Sopenharmony_cistatic PyObject *
5807db96d56Sopenharmony_ciwinreg_EnumValue_impl(PyObject *module, HKEY key, int index);
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_cistatic PyObject *
5837db96d56Sopenharmony_ciwinreg_EnumValue(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
5847db96d56Sopenharmony_ci{
5857db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5867db96d56Sopenharmony_ci    HKEY key;
5877db96d56Sopenharmony_ci    int index;
5887db96d56Sopenharmony_ci
5897db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("EnumValue", nargs, 2, 2)) {
5907db96d56Sopenharmony_ci        goto exit;
5917db96d56Sopenharmony_ci    }
5927db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
5937db96d56Sopenharmony_ci        goto exit;
5947db96d56Sopenharmony_ci    }
5957db96d56Sopenharmony_ci    index = _PyLong_AsInt(args[1]);
5967db96d56Sopenharmony_ci    if (index == -1 && PyErr_Occurred()) {
5977db96d56Sopenharmony_ci        goto exit;
5987db96d56Sopenharmony_ci    }
5997db96d56Sopenharmony_ci    return_value = winreg_EnumValue_impl(module, key, index);
6007db96d56Sopenharmony_ci
6017db96d56Sopenharmony_ciexit:
6027db96d56Sopenharmony_ci    return return_value;
6037db96d56Sopenharmony_ci}
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_ExpandEnvironmentStrings__doc__,
6067db96d56Sopenharmony_ci"ExpandEnvironmentStrings($module, string, /)\n"
6077db96d56Sopenharmony_ci"--\n"
6087db96d56Sopenharmony_ci"\n"
6097db96d56Sopenharmony_ci"Expand environment vars.");
6107db96d56Sopenharmony_ci
6117db96d56Sopenharmony_ci#define WINREG_EXPANDENVIRONMENTSTRINGS_METHODDEF    \
6127db96d56Sopenharmony_ci    {"ExpandEnvironmentStrings", (PyCFunction)winreg_ExpandEnvironmentStrings, METH_O, winreg_ExpandEnvironmentStrings__doc__},
6137db96d56Sopenharmony_ci
6147db96d56Sopenharmony_cistatic PyObject *
6157db96d56Sopenharmony_ciwinreg_ExpandEnvironmentStrings_impl(PyObject *module,
6167db96d56Sopenharmony_ci                                     const Py_UNICODE *string);
6177db96d56Sopenharmony_ci
6187db96d56Sopenharmony_cistatic PyObject *
6197db96d56Sopenharmony_ciwinreg_ExpandEnvironmentStrings(PyObject *module, PyObject *arg)
6207db96d56Sopenharmony_ci{
6217db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6227db96d56Sopenharmony_ci    const Py_UNICODE *string = NULL;
6237db96d56Sopenharmony_ci
6247db96d56Sopenharmony_ci    if (!PyUnicode_Check(arg)) {
6257db96d56Sopenharmony_ci        _PyArg_BadArgument("ExpandEnvironmentStrings", "argument", "str", arg);
6267db96d56Sopenharmony_ci        goto exit;
6277db96d56Sopenharmony_ci    }
6287db96d56Sopenharmony_ci    #if USE_UNICODE_WCHAR_CACHE
6297db96d56Sopenharmony_ci    string = _PyUnicode_AsUnicode(arg);
6307db96d56Sopenharmony_ci    #else /* USE_UNICODE_WCHAR_CACHE */
6317db96d56Sopenharmony_ci    string = PyUnicode_AsWideCharString(arg, NULL);
6327db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
6337db96d56Sopenharmony_ci    if (string == NULL) {
6347db96d56Sopenharmony_ci        goto exit;
6357db96d56Sopenharmony_ci    }
6367db96d56Sopenharmony_ci    return_value = winreg_ExpandEnvironmentStrings_impl(module, string);
6377db96d56Sopenharmony_ci
6387db96d56Sopenharmony_ciexit:
6397db96d56Sopenharmony_ci    /* Cleanup for string */
6407db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
6417db96d56Sopenharmony_ci    PyMem_Free((void *)string);
6427db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
6437db96d56Sopenharmony_ci
6447db96d56Sopenharmony_ci    return return_value;
6457db96d56Sopenharmony_ci}
6467db96d56Sopenharmony_ci
6477db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_FlushKey__doc__,
6487db96d56Sopenharmony_ci"FlushKey($module, key, /)\n"
6497db96d56Sopenharmony_ci"--\n"
6507db96d56Sopenharmony_ci"\n"
6517db96d56Sopenharmony_ci"Writes all the attributes of a key to the registry.\n"
6527db96d56Sopenharmony_ci"\n"
6537db96d56Sopenharmony_ci"  key\n"
6547db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
6557db96d56Sopenharmony_ci"\n"
6567db96d56Sopenharmony_ci"It is not necessary to call FlushKey to change a key.  Registry changes\n"
6577db96d56Sopenharmony_ci"are flushed to disk by the registry using its lazy flusher.  Registry\n"
6587db96d56Sopenharmony_ci"changes are also flushed to disk at system shutdown.  Unlike\n"
6597db96d56Sopenharmony_ci"CloseKey(), the FlushKey() method returns only when all the data has\n"
6607db96d56Sopenharmony_ci"been written to the registry.\n"
6617db96d56Sopenharmony_ci"\n"
6627db96d56Sopenharmony_ci"An application should only call FlushKey() if it requires absolute\n"
6637db96d56Sopenharmony_ci"certainty that registry changes are on disk.  If you don\'t know whether\n"
6647db96d56Sopenharmony_ci"a FlushKey() call is required, it probably isn\'t.");
6657db96d56Sopenharmony_ci
6667db96d56Sopenharmony_ci#define WINREG_FLUSHKEY_METHODDEF    \
6677db96d56Sopenharmony_ci    {"FlushKey", (PyCFunction)winreg_FlushKey, METH_O, winreg_FlushKey__doc__},
6687db96d56Sopenharmony_ci
6697db96d56Sopenharmony_cistatic PyObject *
6707db96d56Sopenharmony_ciwinreg_FlushKey_impl(PyObject *module, HKEY key);
6717db96d56Sopenharmony_ci
6727db96d56Sopenharmony_cistatic PyObject *
6737db96d56Sopenharmony_ciwinreg_FlushKey(PyObject *module, PyObject *arg)
6747db96d56Sopenharmony_ci{
6757db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6767db96d56Sopenharmony_ci    HKEY key;
6777db96d56Sopenharmony_ci
6787db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(arg, &key)) {
6797db96d56Sopenharmony_ci        goto exit;
6807db96d56Sopenharmony_ci    }
6817db96d56Sopenharmony_ci    return_value = winreg_FlushKey_impl(module, key);
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ciexit:
6847db96d56Sopenharmony_ci    return return_value;
6857db96d56Sopenharmony_ci}
6867db96d56Sopenharmony_ci
6877db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_LoadKey__doc__,
6887db96d56Sopenharmony_ci"LoadKey($module, key, sub_key, file_name, /)\n"
6897db96d56Sopenharmony_ci"--\n"
6907db96d56Sopenharmony_ci"\n"
6917db96d56Sopenharmony_ci"Insert data into the registry from a file.\n"
6927db96d56Sopenharmony_ci"\n"
6937db96d56Sopenharmony_ci"  key\n"
6947db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
6957db96d56Sopenharmony_ci"  sub_key\n"
6967db96d56Sopenharmony_ci"    A string that identifies the sub-key to load.\n"
6977db96d56Sopenharmony_ci"  file_name\n"
6987db96d56Sopenharmony_ci"    The name of the file to load registry data from.  This file must\n"
6997db96d56Sopenharmony_ci"    have been created with the SaveKey() function.  Under the file\n"
7007db96d56Sopenharmony_ci"    allocation table (FAT) file system, the filename may not have an\n"
7017db96d56Sopenharmony_ci"    extension.\n"
7027db96d56Sopenharmony_ci"\n"
7037db96d56Sopenharmony_ci"Creates a subkey under the specified key and stores registration\n"
7047db96d56Sopenharmony_ci"information from a specified file into that subkey.\n"
7057db96d56Sopenharmony_ci"\n"
7067db96d56Sopenharmony_ci"A call to LoadKey() fails if the calling process does not have the\n"
7077db96d56Sopenharmony_ci"SE_RESTORE_PRIVILEGE privilege.\n"
7087db96d56Sopenharmony_ci"\n"
7097db96d56Sopenharmony_ci"If key is a handle returned by ConnectRegistry(), then the path\n"
7107db96d56Sopenharmony_ci"specified in fileName is relative to the remote computer.\n"
7117db96d56Sopenharmony_ci"\n"
7127db96d56Sopenharmony_ci"The MSDN docs imply key must be in the HKEY_USER or HKEY_LOCAL_MACHINE\n"
7137db96d56Sopenharmony_ci"tree.");
7147db96d56Sopenharmony_ci
7157db96d56Sopenharmony_ci#define WINREG_LOADKEY_METHODDEF    \
7167db96d56Sopenharmony_ci    {"LoadKey", _PyCFunction_CAST(winreg_LoadKey), METH_FASTCALL, winreg_LoadKey__doc__},
7177db96d56Sopenharmony_ci
7187db96d56Sopenharmony_cistatic PyObject *
7197db96d56Sopenharmony_ciwinreg_LoadKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key,
7207db96d56Sopenharmony_ci                    const Py_UNICODE *file_name);
7217db96d56Sopenharmony_ci
7227db96d56Sopenharmony_cistatic PyObject *
7237db96d56Sopenharmony_ciwinreg_LoadKey(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
7247db96d56Sopenharmony_ci{
7257db96d56Sopenharmony_ci    PyObject *return_value = NULL;
7267db96d56Sopenharmony_ci    HKEY key;
7277db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
7287db96d56Sopenharmony_ci    const Py_UNICODE *file_name = NULL;
7297db96d56Sopenharmony_ci
7307db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("LoadKey", nargs, 3, 3)) {
7317db96d56Sopenharmony_ci        goto exit;
7327db96d56Sopenharmony_ci    }
7337db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
7347db96d56Sopenharmony_ci        goto exit;
7357db96d56Sopenharmony_ci    }
7367db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[1])) {
7377db96d56Sopenharmony_ci        _PyArg_BadArgument("LoadKey", "argument 2", "str", args[1]);
7387db96d56Sopenharmony_ci        goto exit;
7397db96d56Sopenharmony_ci    }
7407db96d56Sopenharmony_ci    #if USE_UNICODE_WCHAR_CACHE
7417db96d56Sopenharmony_ci    sub_key = _PyUnicode_AsUnicode(args[1]);
7427db96d56Sopenharmony_ci    #else /* USE_UNICODE_WCHAR_CACHE */
7437db96d56Sopenharmony_ci    sub_key = PyUnicode_AsWideCharString(args[1], NULL);
7447db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
7457db96d56Sopenharmony_ci    if (sub_key == NULL) {
7467db96d56Sopenharmony_ci        goto exit;
7477db96d56Sopenharmony_ci    }
7487db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[2])) {
7497db96d56Sopenharmony_ci        _PyArg_BadArgument("LoadKey", "argument 3", "str", args[2]);
7507db96d56Sopenharmony_ci        goto exit;
7517db96d56Sopenharmony_ci    }
7527db96d56Sopenharmony_ci    #if USE_UNICODE_WCHAR_CACHE
7537db96d56Sopenharmony_ci    file_name = _PyUnicode_AsUnicode(args[2]);
7547db96d56Sopenharmony_ci    #else /* USE_UNICODE_WCHAR_CACHE */
7557db96d56Sopenharmony_ci    file_name = PyUnicode_AsWideCharString(args[2], NULL);
7567db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
7577db96d56Sopenharmony_ci    if (file_name == NULL) {
7587db96d56Sopenharmony_ci        goto exit;
7597db96d56Sopenharmony_ci    }
7607db96d56Sopenharmony_ci    return_value = winreg_LoadKey_impl(module, key, sub_key, file_name);
7617db96d56Sopenharmony_ci
7627db96d56Sopenharmony_ciexit:
7637db96d56Sopenharmony_ci    /* Cleanup for sub_key */
7647db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
7657db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
7667db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
7677db96d56Sopenharmony_ci    /* Cleanup for file_name */
7687db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
7697db96d56Sopenharmony_ci    PyMem_Free((void *)file_name);
7707db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
7717db96d56Sopenharmony_ci
7727db96d56Sopenharmony_ci    return return_value;
7737db96d56Sopenharmony_ci}
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_OpenKey__doc__,
7767db96d56Sopenharmony_ci"OpenKey($module, /, key, sub_key, reserved=0, access=winreg.KEY_READ)\n"
7777db96d56Sopenharmony_ci"--\n"
7787db96d56Sopenharmony_ci"\n"
7797db96d56Sopenharmony_ci"Opens the specified key.\n"
7807db96d56Sopenharmony_ci"\n"
7817db96d56Sopenharmony_ci"  key\n"
7827db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
7837db96d56Sopenharmony_ci"  sub_key\n"
7847db96d56Sopenharmony_ci"    A string that identifies the sub_key to open.\n"
7857db96d56Sopenharmony_ci"  reserved\n"
7867db96d56Sopenharmony_ci"    A reserved integer that must be zero.  Default is zero.\n"
7877db96d56Sopenharmony_ci"  access\n"
7887db96d56Sopenharmony_ci"    An integer that specifies an access mask that describes the desired\n"
7897db96d56Sopenharmony_ci"    security access for the key.  Default is KEY_READ.\n"
7907db96d56Sopenharmony_ci"\n"
7917db96d56Sopenharmony_ci"The result is a new handle to the specified key.\n"
7927db96d56Sopenharmony_ci"If the function fails, an OSError exception is raised.");
7937db96d56Sopenharmony_ci
7947db96d56Sopenharmony_ci#define WINREG_OPENKEY_METHODDEF    \
7957db96d56Sopenharmony_ci    {"OpenKey", _PyCFunction_CAST(winreg_OpenKey), METH_FASTCALL|METH_KEYWORDS, winreg_OpenKey__doc__},
7967db96d56Sopenharmony_ci
7977db96d56Sopenharmony_cistatic HKEY
7987db96d56Sopenharmony_ciwinreg_OpenKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key,
7997db96d56Sopenharmony_ci                    int reserved, REGSAM access);
8007db96d56Sopenharmony_ci
8017db96d56Sopenharmony_cistatic PyObject *
8027db96d56Sopenharmony_ciwinreg_OpenKey(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
8037db96d56Sopenharmony_ci{
8047db96d56Sopenharmony_ci    PyObject *return_value = NULL;
8057db96d56Sopenharmony_ci    static const char * const _keywords[] = {"key", "sub_key", "reserved", "access", NULL};
8067db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {"O&O&|ii:OpenKey", _keywords, 0};
8077db96d56Sopenharmony_ci    HKEY key;
8087db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
8097db96d56Sopenharmony_ci    int reserved = 0;
8107db96d56Sopenharmony_ci    REGSAM access = KEY_READ;
8117db96d56Sopenharmony_ci    HKEY _return_value;
8127db96d56Sopenharmony_ci
8137db96d56Sopenharmony_ci    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
8147db96d56Sopenharmony_ci        clinic_HKEY_converter, &key, _PyUnicode_WideCharString_Opt_Converter, &sub_key, &reserved, &access)) {
8157db96d56Sopenharmony_ci        goto exit;
8167db96d56Sopenharmony_ci    }
8177db96d56Sopenharmony_ci    _return_value = winreg_OpenKey_impl(module, key, sub_key, reserved, access);
8187db96d56Sopenharmony_ci    if (_return_value == NULL) {
8197db96d56Sopenharmony_ci        goto exit;
8207db96d56Sopenharmony_ci    }
8217db96d56Sopenharmony_ci    return_value = PyHKEY_FromHKEY(_return_value);
8227db96d56Sopenharmony_ci
8237db96d56Sopenharmony_ciexit:
8247db96d56Sopenharmony_ci    /* Cleanup for sub_key */
8257db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
8267db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
8277db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
8287db96d56Sopenharmony_ci
8297db96d56Sopenharmony_ci    return return_value;
8307db96d56Sopenharmony_ci}
8317db96d56Sopenharmony_ci
8327db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_OpenKeyEx__doc__,
8337db96d56Sopenharmony_ci"OpenKeyEx($module, /, key, sub_key, reserved=0, access=winreg.KEY_READ)\n"
8347db96d56Sopenharmony_ci"--\n"
8357db96d56Sopenharmony_ci"\n"
8367db96d56Sopenharmony_ci"Opens the specified key.\n"
8377db96d56Sopenharmony_ci"\n"
8387db96d56Sopenharmony_ci"  key\n"
8397db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
8407db96d56Sopenharmony_ci"  sub_key\n"
8417db96d56Sopenharmony_ci"    A string that identifies the sub_key to open.\n"
8427db96d56Sopenharmony_ci"  reserved\n"
8437db96d56Sopenharmony_ci"    A reserved integer that must be zero.  Default is zero.\n"
8447db96d56Sopenharmony_ci"  access\n"
8457db96d56Sopenharmony_ci"    An integer that specifies an access mask that describes the desired\n"
8467db96d56Sopenharmony_ci"    security access for the key.  Default is KEY_READ.\n"
8477db96d56Sopenharmony_ci"\n"
8487db96d56Sopenharmony_ci"The result is a new handle to the specified key.\n"
8497db96d56Sopenharmony_ci"If the function fails, an OSError exception is raised.");
8507db96d56Sopenharmony_ci
8517db96d56Sopenharmony_ci#define WINREG_OPENKEYEX_METHODDEF    \
8527db96d56Sopenharmony_ci    {"OpenKeyEx", _PyCFunction_CAST(winreg_OpenKeyEx), METH_FASTCALL|METH_KEYWORDS, winreg_OpenKeyEx__doc__},
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_cistatic HKEY
8557db96d56Sopenharmony_ciwinreg_OpenKeyEx_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key,
8567db96d56Sopenharmony_ci                      int reserved, REGSAM access);
8577db96d56Sopenharmony_ci
8587db96d56Sopenharmony_cistatic PyObject *
8597db96d56Sopenharmony_ciwinreg_OpenKeyEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
8607db96d56Sopenharmony_ci{
8617db96d56Sopenharmony_ci    PyObject *return_value = NULL;
8627db96d56Sopenharmony_ci    static const char * const _keywords[] = {"key", "sub_key", "reserved", "access", NULL};
8637db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {"O&O&|ii:OpenKeyEx", _keywords, 0};
8647db96d56Sopenharmony_ci    HKEY key;
8657db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
8667db96d56Sopenharmony_ci    int reserved = 0;
8677db96d56Sopenharmony_ci    REGSAM access = KEY_READ;
8687db96d56Sopenharmony_ci    HKEY _return_value;
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ci    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
8717db96d56Sopenharmony_ci        clinic_HKEY_converter, &key, _PyUnicode_WideCharString_Opt_Converter, &sub_key, &reserved, &access)) {
8727db96d56Sopenharmony_ci        goto exit;
8737db96d56Sopenharmony_ci    }
8747db96d56Sopenharmony_ci    _return_value = winreg_OpenKeyEx_impl(module, key, sub_key, reserved, access);
8757db96d56Sopenharmony_ci    if (_return_value == NULL) {
8767db96d56Sopenharmony_ci        goto exit;
8777db96d56Sopenharmony_ci    }
8787db96d56Sopenharmony_ci    return_value = PyHKEY_FromHKEY(_return_value);
8797db96d56Sopenharmony_ci
8807db96d56Sopenharmony_ciexit:
8817db96d56Sopenharmony_ci    /* Cleanup for sub_key */
8827db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
8837db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
8847db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
8857db96d56Sopenharmony_ci
8867db96d56Sopenharmony_ci    return return_value;
8877db96d56Sopenharmony_ci}
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_QueryInfoKey__doc__,
8907db96d56Sopenharmony_ci"QueryInfoKey($module, key, /)\n"
8917db96d56Sopenharmony_ci"--\n"
8927db96d56Sopenharmony_ci"\n"
8937db96d56Sopenharmony_ci"Returns information about a key.\n"
8947db96d56Sopenharmony_ci"\n"
8957db96d56Sopenharmony_ci"  key\n"
8967db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
8977db96d56Sopenharmony_ci"\n"
8987db96d56Sopenharmony_ci"The result is a tuple of 3 items:\n"
8997db96d56Sopenharmony_ci"An integer that identifies the number of sub keys this key has.\n"
9007db96d56Sopenharmony_ci"An integer that identifies the number of values this key has.\n"
9017db96d56Sopenharmony_ci"An integer that identifies when the key was last modified (if available)\n"
9027db96d56Sopenharmony_ci"as 100\'s of nanoseconds since Jan 1, 1600.");
9037db96d56Sopenharmony_ci
9047db96d56Sopenharmony_ci#define WINREG_QUERYINFOKEY_METHODDEF    \
9057db96d56Sopenharmony_ci    {"QueryInfoKey", (PyCFunction)winreg_QueryInfoKey, METH_O, winreg_QueryInfoKey__doc__},
9067db96d56Sopenharmony_ci
9077db96d56Sopenharmony_cistatic PyObject *
9087db96d56Sopenharmony_ciwinreg_QueryInfoKey_impl(PyObject *module, HKEY key);
9097db96d56Sopenharmony_ci
9107db96d56Sopenharmony_cistatic PyObject *
9117db96d56Sopenharmony_ciwinreg_QueryInfoKey(PyObject *module, PyObject *arg)
9127db96d56Sopenharmony_ci{
9137db96d56Sopenharmony_ci    PyObject *return_value = NULL;
9147db96d56Sopenharmony_ci    HKEY key;
9157db96d56Sopenharmony_ci
9167db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(arg, &key)) {
9177db96d56Sopenharmony_ci        goto exit;
9187db96d56Sopenharmony_ci    }
9197db96d56Sopenharmony_ci    return_value = winreg_QueryInfoKey_impl(module, key);
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_ciexit:
9227db96d56Sopenharmony_ci    return return_value;
9237db96d56Sopenharmony_ci}
9247db96d56Sopenharmony_ci
9257db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_QueryValue__doc__,
9267db96d56Sopenharmony_ci"QueryValue($module, key, sub_key, /)\n"
9277db96d56Sopenharmony_ci"--\n"
9287db96d56Sopenharmony_ci"\n"
9297db96d56Sopenharmony_ci"Retrieves the unnamed value for a key.\n"
9307db96d56Sopenharmony_ci"\n"
9317db96d56Sopenharmony_ci"  key\n"
9327db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
9337db96d56Sopenharmony_ci"  sub_key\n"
9347db96d56Sopenharmony_ci"    A string that holds the name of the subkey with which the value\n"
9357db96d56Sopenharmony_ci"    is associated.  If this parameter is None or empty, the function\n"
9367db96d56Sopenharmony_ci"    retrieves the value set by the SetValue() method for the key\n"
9377db96d56Sopenharmony_ci"    identified by key.\n"
9387db96d56Sopenharmony_ci"\n"
9397db96d56Sopenharmony_ci"Values in the registry have name, type, and data components. This method\n"
9407db96d56Sopenharmony_ci"retrieves the data for a key\'s first value that has a NULL name.\n"
9417db96d56Sopenharmony_ci"But since the underlying API call doesn\'t return the type, you\'ll\n"
9427db96d56Sopenharmony_ci"probably be happier using QueryValueEx; this function is just here for\n"
9437db96d56Sopenharmony_ci"completeness.");
9447db96d56Sopenharmony_ci
9457db96d56Sopenharmony_ci#define WINREG_QUERYVALUE_METHODDEF    \
9467db96d56Sopenharmony_ci    {"QueryValue", _PyCFunction_CAST(winreg_QueryValue), METH_FASTCALL, winreg_QueryValue__doc__},
9477db96d56Sopenharmony_ci
9487db96d56Sopenharmony_cistatic PyObject *
9497db96d56Sopenharmony_ciwinreg_QueryValue_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key);
9507db96d56Sopenharmony_ci
9517db96d56Sopenharmony_cistatic PyObject *
9527db96d56Sopenharmony_ciwinreg_QueryValue(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
9537db96d56Sopenharmony_ci{
9547db96d56Sopenharmony_ci    PyObject *return_value = NULL;
9557db96d56Sopenharmony_ci    HKEY key;
9567db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
9577db96d56Sopenharmony_ci
9587db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("QueryValue", nargs, 2, 2)) {
9597db96d56Sopenharmony_ci        goto exit;
9607db96d56Sopenharmony_ci    }
9617db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
9627db96d56Sopenharmony_ci        goto exit;
9637db96d56Sopenharmony_ci    }
9647db96d56Sopenharmony_ci    if (args[1] == Py_None) {
9657db96d56Sopenharmony_ci        sub_key = NULL;
9667db96d56Sopenharmony_ci    }
9677db96d56Sopenharmony_ci    else if (PyUnicode_Check(args[1])) {
9687db96d56Sopenharmony_ci        #if USE_UNICODE_WCHAR_CACHE
9697db96d56Sopenharmony_ci        sub_key = _PyUnicode_AsUnicode(args[1]);
9707db96d56Sopenharmony_ci        #else /* USE_UNICODE_WCHAR_CACHE */
9717db96d56Sopenharmony_ci        sub_key = PyUnicode_AsWideCharString(args[1], NULL);
9727db96d56Sopenharmony_ci        #endif /* USE_UNICODE_WCHAR_CACHE */
9737db96d56Sopenharmony_ci        if (sub_key == NULL) {
9747db96d56Sopenharmony_ci            goto exit;
9757db96d56Sopenharmony_ci        }
9767db96d56Sopenharmony_ci    }
9777db96d56Sopenharmony_ci    else {
9787db96d56Sopenharmony_ci        _PyArg_BadArgument("QueryValue", "argument 2", "str or None", args[1]);
9797db96d56Sopenharmony_ci        goto exit;
9807db96d56Sopenharmony_ci    }
9817db96d56Sopenharmony_ci    return_value = winreg_QueryValue_impl(module, key, sub_key);
9827db96d56Sopenharmony_ci
9837db96d56Sopenharmony_ciexit:
9847db96d56Sopenharmony_ci    /* Cleanup for sub_key */
9857db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
9867db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
9877db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
9887db96d56Sopenharmony_ci
9897db96d56Sopenharmony_ci    return return_value;
9907db96d56Sopenharmony_ci}
9917db96d56Sopenharmony_ci
9927db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_QueryValueEx__doc__,
9937db96d56Sopenharmony_ci"QueryValueEx($module, key, name, /)\n"
9947db96d56Sopenharmony_ci"--\n"
9957db96d56Sopenharmony_ci"\n"
9967db96d56Sopenharmony_ci"Retrieves the type and value of a specified sub-key.\n"
9977db96d56Sopenharmony_ci"\n"
9987db96d56Sopenharmony_ci"  key\n"
9997db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
10007db96d56Sopenharmony_ci"  name\n"
10017db96d56Sopenharmony_ci"    A string indicating the value to query.\n"
10027db96d56Sopenharmony_ci"\n"
10037db96d56Sopenharmony_ci"Behaves mostly like QueryValue(), but also returns the type of the\n"
10047db96d56Sopenharmony_ci"specified value name associated with the given open registry key.\n"
10057db96d56Sopenharmony_ci"\n"
10067db96d56Sopenharmony_ci"The return value is a tuple of the value and the type_id.");
10077db96d56Sopenharmony_ci
10087db96d56Sopenharmony_ci#define WINREG_QUERYVALUEEX_METHODDEF    \
10097db96d56Sopenharmony_ci    {"QueryValueEx", _PyCFunction_CAST(winreg_QueryValueEx), METH_FASTCALL, winreg_QueryValueEx__doc__},
10107db96d56Sopenharmony_ci
10117db96d56Sopenharmony_cistatic PyObject *
10127db96d56Sopenharmony_ciwinreg_QueryValueEx_impl(PyObject *module, HKEY key, const Py_UNICODE *name);
10137db96d56Sopenharmony_ci
10147db96d56Sopenharmony_cistatic PyObject *
10157db96d56Sopenharmony_ciwinreg_QueryValueEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
10167db96d56Sopenharmony_ci{
10177db96d56Sopenharmony_ci    PyObject *return_value = NULL;
10187db96d56Sopenharmony_ci    HKEY key;
10197db96d56Sopenharmony_ci    const Py_UNICODE *name = NULL;
10207db96d56Sopenharmony_ci
10217db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("QueryValueEx", nargs, 2, 2)) {
10227db96d56Sopenharmony_ci        goto exit;
10237db96d56Sopenharmony_ci    }
10247db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
10257db96d56Sopenharmony_ci        goto exit;
10267db96d56Sopenharmony_ci    }
10277db96d56Sopenharmony_ci    if (args[1] == Py_None) {
10287db96d56Sopenharmony_ci        name = NULL;
10297db96d56Sopenharmony_ci    }
10307db96d56Sopenharmony_ci    else if (PyUnicode_Check(args[1])) {
10317db96d56Sopenharmony_ci        #if USE_UNICODE_WCHAR_CACHE
10327db96d56Sopenharmony_ci        name = _PyUnicode_AsUnicode(args[1]);
10337db96d56Sopenharmony_ci        #else /* USE_UNICODE_WCHAR_CACHE */
10347db96d56Sopenharmony_ci        name = PyUnicode_AsWideCharString(args[1], NULL);
10357db96d56Sopenharmony_ci        #endif /* USE_UNICODE_WCHAR_CACHE */
10367db96d56Sopenharmony_ci        if (name == NULL) {
10377db96d56Sopenharmony_ci            goto exit;
10387db96d56Sopenharmony_ci        }
10397db96d56Sopenharmony_ci    }
10407db96d56Sopenharmony_ci    else {
10417db96d56Sopenharmony_ci        _PyArg_BadArgument("QueryValueEx", "argument 2", "str or None", args[1]);
10427db96d56Sopenharmony_ci        goto exit;
10437db96d56Sopenharmony_ci    }
10447db96d56Sopenharmony_ci    return_value = winreg_QueryValueEx_impl(module, key, name);
10457db96d56Sopenharmony_ci
10467db96d56Sopenharmony_ciexit:
10477db96d56Sopenharmony_ci    /* Cleanup for name */
10487db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
10497db96d56Sopenharmony_ci    PyMem_Free((void *)name);
10507db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
10517db96d56Sopenharmony_ci
10527db96d56Sopenharmony_ci    return return_value;
10537db96d56Sopenharmony_ci}
10547db96d56Sopenharmony_ci
10557db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_SaveKey__doc__,
10567db96d56Sopenharmony_ci"SaveKey($module, key, file_name, /)\n"
10577db96d56Sopenharmony_ci"--\n"
10587db96d56Sopenharmony_ci"\n"
10597db96d56Sopenharmony_ci"Saves the specified key, and all its subkeys to the specified file.\n"
10607db96d56Sopenharmony_ci"\n"
10617db96d56Sopenharmony_ci"  key\n"
10627db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
10637db96d56Sopenharmony_ci"  file_name\n"
10647db96d56Sopenharmony_ci"    The name of the file to save registry data to.  This file cannot\n"
10657db96d56Sopenharmony_ci"    already exist. If this filename includes an extension, it cannot be\n"
10667db96d56Sopenharmony_ci"    used on file allocation table (FAT) file systems by the LoadKey(),\n"
10677db96d56Sopenharmony_ci"    ReplaceKey() or RestoreKey() methods.\n"
10687db96d56Sopenharmony_ci"\n"
10697db96d56Sopenharmony_ci"If key represents a key on a remote computer, the path described by\n"
10707db96d56Sopenharmony_ci"file_name is relative to the remote computer.\n"
10717db96d56Sopenharmony_ci"\n"
10727db96d56Sopenharmony_ci"The caller of this method must possess the SeBackupPrivilege\n"
10737db96d56Sopenharmony_ci"security privilege.  This function passes NULL for security_attributes\n"
10747db96d56Sopenharmony_ci"to the API.");
10757db96d56Sopenharmony_ci
10767db96d56Sopenharmony_ci#define WINREG_SAVEKEY_METHODDEF    \
10777db96d56Sopenharmony_ci    {"SaveKey", _PyCFunction_CAST(winreg_SaveKey), METH_FASTCALL, winreg_SaveKey__doc__},
10787db96d56Sopenharmony_ci
10797db96d56Sopenharmony_cistatic PyObject *
10807db96d56Sopenharmony_ciwinreg_SaveKey_impl(PyObject *module, HKEY key, const Py_UNICODE *file_name);
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_cistatic PyObject *
10837db96d56Sopenharmony_ciwinreg_SaveKey(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
10847db96d56Sopenharmony_ci{
10857db96d56Sopenharmony_ci    PyObject *return_value = NULL;
10867db96d56Sopenharmony_ci    HKEY key;
10877db96d56Sopenharmony_ci    const Py_UNICODE *file_name = NULL;
10887db96d56Sopenharmony_ci
10897db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("SaveKey", nargs, 2, 2)) {
10907db96d56Sopenharmony_ci        goto exit;
10917db96d56Sopenharmony_ci    }
10927db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(args[0], &key)) {
10937db96d56Sopenharmony_ci        goto exit;
10947db96d56Sopenharmony_ci    }
10957db96d56Sopenharmony_ci    if (!PyUnicode_Check(args[1])) {
10967db96d56Sopenharmony_ci        _PyArg_BadArgument("SaveKey", "argument 2", "str", args[1]);
10977db96d56Sopenharmony_ci        goto exit;
10987db96d56Sopenharmony_ci    }
10997db96d56Sopenharmony_ci    #if USE_UNICODE_WCHAR_CACHE
11007db96d56Sopenharmony_ci    file_name = _PyUnicode_AsUnicode(args[1]);
11017db96d56Sopenharmony_ci    #else /* USE_UNICODE_WCHAR_CACHE */
11027db96d56Sopenharmony_ci    file_name = PyUnicode_AsWideCharString(args[1], NULL);
11037db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
11047db96d56Sopenharmony_ci    if (file_name == NULL) {
11057db96d56Sopenharmony_ci        goto exit;
11067db96d56Sopenharmony_ci    }
11077db96d56Sopenharmony_ci    return_value = winreg_SaveKey_impl(module, key, file_name);
11087db96d56Sopenharmony_ci
11097db96d56Sopenharmony_ciexit:
11107db96d56Sopenharmony_ci    /* Cleanup for file_name */
11117db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
11127db96d56Sopenharmony_ci    PyMem_Free((void *)file_name);
11137db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
11147db96d56Sopenharmony_ci
11157db96d56Sopenharmony_ci    return return_value;
11167db96d56Sopenharmony_ci}
11177db96d56Sopenharmony_ci
11187db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_SetValue__doc__,
11197db96d56Sopenharmony_ci"SetValue($module, key, sub_key, type, value, /)\n"
11207db96d56Sopenharmony_ci"--\n"
11217db96d56Sopenharmony_ci"\n"
11227db96d56Sopenharmony_ci"Associates a value with a specified key.\n"
11237db96d56Sopenharmony_ci"\n"
11247db96d56Sopenharmony_ci"  key\n"
11257db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
11267db96d56Sopenharmony_ci"  sub_key\n"
11277db96d56Sopenharmony_ci"    A string that names the subkey with which the value is associated.\n"
11287db96d56Sopenharmony_ci"  type\n"
11297db96d56Sopenharmony_ci"    An integer that specifies the type of the data.  Currently this must\n"
11307db96d56Sopenharmony_ci"    be REG_SZ, meaning only strings are supported.\n"
11317db96d56Sopenharmony_ci"  value\n"
11327db96d56Sopenharmony_ci"    A string that specifies the new value.\n"
11337db96d56Sopenharmony_ci"\n"
11347db96d56Sopenharmony_ci"If the key specified by the sub_key parameter does not exist, the\n"
11357db96d56Sopenharmony_ci"SetValue function creates it.\n"
11367db96d56Sopenharmony_ci"\n"
11377db96d56Sopenharmony_ci"Value lengths are limited by available memory. Long values (more than\n"
11387db96d56Sopenharmony_ci"2048 bytes) should be stored as files with the filenames stored in\n"
11397db96d56Sopenharmony_ci"the configuration registry to help the registry perform efficiently.\n"
11407db96d56Sopenharmony_ci"\n"
11417db96d56Sopenharmony_ci"The key identified by the key parameter must have been opened with\n"
11427db96d56Sopenharmony_ci"KEY_SET_VALUE access.");
11437db96d56Sopenharmony_ci
11447db96d56Sopenharmony_ci#define WINREG_SETVALUE_METHODDEF    \
11457db96d56Sopenharmony_ci    {"SetValue", _PyCFunction_CAST(winreg_SetValue), METH_FASTCALL, winreg_SetValue__doc__},
11467db96d56Sopenharmony_ci
11477db96d56Sopenharmony_cistatic PyObject *
11487db96d56Sopenharmony_ciwinreg_SetValue_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key,
11497db96d56Sopenharmony_ci                     DWORD type, PyObject *value_obj);
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_cistatic PyObject *
11527db96d56Sopenharmony_ciwinreg_SetValue(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
11537db96d56Sopenharmony_ci{
11547db96d56Sopenharmony_ci    PyObject *return_value = NULL;
11557db96d56Sopenharmony_ci    HKEY key;
11567db96d56Sopenharmony_ci    const Py_UNICODE *sub_key = NULL;
11577db96d56Sopenharmony_ci    DWORD type;
11587db96d56Sopenharmony_ci    PyObject *value_obj;
11597db96d56Sopenharmony_ci
11607db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "O&O&kU:SetValue",
11617db96d56Sopenharmony_ci        clinic_HKEY_converter, &key, _PyUnicode_WideCharString_Opt_Converter, &sub_key, &type, &value_obj)) {
11627db96d56Sopenharmony_ci        goto exit;
11637db96d56Sopenharmony_ci    }
11647db96d56Sopenharmony_ci    return_value = winreg_SetValue_impl(module, key, sub_key, type, value_obj);
11657db96d56Sopenharmony_ci
11667db96d56Sopenharmony_ciexit:
11677db96d56Sopenharmony_ci    /* Cleanup for sub_key */
11687db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
11697db96d56Sopenharmony_ci    PyMem_Free((void *)sub_key);
11707db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
11717db96d56Sopenharmony_ci
11727db96d56Sopenharmony_ci    return return_value;
11737db96d56Sopenharmony_ci}
11747db96d56Sopenharmony_ci
11757db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_SetValueEx__doc__,
11767db96d56Sopenharmony_ci"SetValueEx($module, key, value_name, reserved, type, value, /)\n"
11777db96d56Sopenharmony_ci"--\n"
11787db96d56Sopenharmony_ci"\n"
11797db96d56Sopenharmony_ci"Stores data in the value field of an open registry key.\n"
11807db96d56Sopenharmony_ci"\n"
11817db96d56Sopenharmony_ci"  key\n"
11827db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
11837db96d56Sopenharmony_ci"  value_name\n"
11847db96d56Sopenharmony_ci"    A string containing the name of the value to set, or None.\n"
11857db96d56Sopenharmony_ci"  reserved\n"
11867db96d56Sopenharmony_ci"    Can be anything - zero is always passed to the API.\n"
11877db96d56Sopenharmony_ci"  type\n"
11887db96d56Sopenharmony_ci"    An integer that specifies the type of the data, one of:\n"
11897db96d56Sopenharmony_ci"    REG_BINARY -- Binary data in any form.\n"
11907db96d56Sopenharmony_ci"    REG_DWORD -- A 32-bit number.\n"
11917db96d56Sopenharmony_ci"    REG_DWORD_LITTLE_ENDIAN -- A 32-bit number in little-endian format. Equivalent to REG_DWORD\n"
11927db96d56Sopenharmony_ci"    REG_DWORD_BIG_ENDIAN -- A 32-bit number in big-endian format.\n"
11937db96d56Sopenharmony_ci"    REG_EXPAND_SZ -- A null-terminated string that contains unexpanded\n"
11947db96d56Sopenharmony_ci"                     references to environment variables (for example,\n"
11957db96d56Sopenharmony_ci"                     %PATH%).\n"
11967db96d56Sopenharmony_ci"    REG_LINK -- A Unicode symbolic link.\n"
11977db96d56Sopenharmony_ci"    REG_MULTI_SZ -- A sequence of null-terminated strings, terminated\n"
11987db96d56Sopenharmony_ci"                    by two null characters.  Note that Python handles\n"
11997db96d56Sopenharmony_ci"                    this termination automatically.\n"
12007db96d56Sopenharmony_ci"    REG_NONE -- No defined value type.\n"
12017db96d56Sopenharmony_ci"    REG_QWORD -- A 64-bit number.\n"
12027db96d56Sopenharmony_ci"    REG_QWORD_LITTLE_ENDIAN -- A 64-bit number in little-endian format. Equivalent to REG_QWORD.\n"
12037db96d56Sopenharmony_ci"    REG_RESOURCE_LIST -- A device-driver resource list.\n"
12047db96d56Sopenharmony_ci"    REG_SZ -- A null-terminated string.\n"
12057db96d56Sopenharmony_ci"  value\n"
12067db96d56Sopenharmony_ci"    A string that specifies the new value.\n"
12077db96d56Sopenharmony_ci"\n"
12087db96d56Sopenharmony_ci"This method can also set additional value and type information for the\n"
12097db96d56Sopenharmony_ci"specified key.  The key identified by the key parameter must have been\n"
12107db96d56Sopenharmony_ci"opened with KEY_SET_VALUE access.\n"
12117db96d56Sopenharmony_ci"\n"
12127db96d56Sopenharmony_ci"To open the key, use the CreateKeyEx() or OpenKeyEx() methods.\n"
12137db96d56Sopenharmony_ci"\n"
12147db96d56Sopenharmony_ci"Value lengths are limited by available memory. Long values (more than\n"
12157db96d56Sopenharmony_ci"2048 bytes) should be stored as files with the filenames stored in\n"
12167db96d56Sopenharmony_ci"the configuration registry to help the registry perform efficiently.");
12177db96d56Sopenharmony_ci
12187db96d56Sopenharmony_ci#define WINREG_SETVALUEEX_METHODDEF    \
12197db96d56Sopenharmony_ci    {"SetValueEx", _PyCFunction_CAST(winreg_SetValueEx), METH_FASTCALL, winreg_SetValueEx__doc__},
12207db96d56Sopenharmony_ci
12217db96d56Sopenharmony_cistatic PyObject *
12227db96d56Sopenharmony_ciwinreg_SetValueEx_impl(PyObject *module, HKEY key,
12237db96d56Sopenharmony_ci                       const Py_UNICODE *value_name, PyObject *reserved,
12247db96d56Sopenharmony_ci                       DWORD type, PyObject *value);
12257db96d56Sopenharmony_ci
12267db96d56Sopenharmony_cistatic PyObject *
12277db96d56Sopenharmony_ciwinreg_SetValueEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
12287db96d56Sopenharmony_ci{
12297db96d56Sopenharmony_ci    PyObject *return_value = NULL;
12307db96d56Sopenharmony_ci    HKEY key;
12317db96d56Sopenharmony_ci    const Py_UNICODE *value_name = NULL;
12327db96d56Sopenharmony_ci    PyObject *reserved;
12337db96d56Sopenharmony_ci    DWORD type;
12347db96d56Sopenharmony_ci    PyObject *value;
12357db96d56Sopenharmony_ci
12367db96d56Sopenharmony_ci    if (!_PyArg_ParseStack(args, nargs, "O&O&OkO:SetValueEx",
12377db96d56Sopenharmony_ci        clinic_HKEY_converter, &key, _PyUnicode_WideCharString_Opt_Converter, &value_name, &reserved, &type, &value)) {
12387db96d56Sopenharmony_ci        goto exit;
12397db96d56Sopenharmony_ci    }
12407db96d56Sopenharmony_ci    return_value = winreg_SetValueEx_impl(module, key, value_name, reserved, type, value);
12417db96d56Sopenharmony_ci
12427db96d56Sopenharmony_ciexit:
12437db96d56Sopenharmony_ci    /* Cleanup for value_name */
12447db96d56Sopenharmony_ci    #if !USE_UNICODE_WCHAR_CACHE
12457db96d56Sopenharmony_ci    PyMem_Free((void *)value_name);
12467db96d56Sopenharmony_ci    #endif /* USE_UNICODE_WCHAR_CACHE */
12477db96d56Sopenharmony_ci
12487db96d56Sopenharmony_ci    return return_value;
12497db96d56Sopenharmony_ci}
12507db96d56Sopenharmony_ci
12517db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_DisableReflectionKey__doc__,
12527db96d56Sopenharmony_ci"DisableReflectionKey($module, key, /)\n"
12537db96d56Sopenharmony_ci"--\n"
12547db96d56Sopenharmony_ci"\n"
12557db96d56Sopenharmony_ci"Disables registry reflection for 32bit processes running on a 64bit OS.\n"
12567db96d56Sopenharmony_ci"\n"
12577db96d56Sopenharmony_ci"  key\n"
12587db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
12597db96d56Sopenharmony_ci"\n"
12607db96d56Sopenharmony_ci"Will generally raise NotImplementedError if executed on a 32bit OS.\n"
12617db96d56Sopenharmony_ci"\n"
12627db96d56Sopenharmony_ci"If the key is not on the reflection list, the function succeeds but has\n"
12637db96d56Sopenharmony_ci"no effect.  Disabling reflection for a key does not affect reflection\n"
12647db96d56Sopenharmony_ci"of any subkeys.");
12657db96d56Sopenharmony_ci
12667db96d56Sopenharmony_ci#define WINREG_DISABLEREFLECTIONKEY_METHODDEF    \
12677db96d56Sopenharmony_ci    {"DisableReflectionKey", (PyCFunction)winreg_DisableReflectionKey, METH_O, winreg_DisableReflectionKey__doc__},
12687db96d56Sopenharmony_ci
12697db96d56Sopenharmony_cistatic PyObject *
12707db96d56Sopenharmony_ciwinreg_DisableReflectionKey_impl(PyObject *module, HKEY key);
12717db96d56Sopenharmony_ci
12727db96d56Sopenharmony_cistatic PyObject *
12737db96d56Sopenharmony_ciwinreg_DisableReflectionKey(PyObject *module, PyObject *arg)
12747db96d56Sopenharmony_ci{
12757db96d56Sopenharmony_ci    PyObject *return_value = NULL;
12767db96d56Sopenharmony_ci    HKEY key;
12777db96d56Sopenharmony_ci
12787db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(arg, &key)) {
12797db96d56Sopenharmony_ci        goto exit;
12807db96d56Sopenharmony_ci    }
12817db96d56Sopenharmony_ci    return_value = winreg_DisableReflectionKey_impl(module, key);
12827db96d56Sopenharmony_ci
12837db96d56Sopenharmony_ciexit:
12847db96d56Sopenharmony_ci    return return_value;
12857db96d56Sopenharmony_ci}
12867db96d56Sopenharmony_ci
12877db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_EnableReflectionKey__doc__,
12887db96d56Sopenharmony_ci"EnableReflectionKey($module, key, /)\n"
12897db96d56Sopenharmony_ci"--\n"
12907db96d56Sopenharmony_ci"\n"
12917db96d56Sopenharmony_ci"Restores registry reflection for the specified disabled key.\n"
12927db96d56Sopenharmony_ci"\n"
12937db96d56Sopenharmony_ci"  key\n"
12947db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
12957db96d56Sopenharmony_ci"\n"
12967db96d56Sopenharmony_ci"Will generally raise NotImplementedError if executed on a 32bit OS.\n"
12977db96d56Sopenharmony_ci"Restoring reflection for a key does not affect reflection of any\n"
12987db96d56Sopenharmony_ci"subkeys.");
12997db96d56Sopenharmony_ci
13007db96d56Sopenharmony_ci#define WINREG_ENABLEREFLECTIONKEY_METHODDEF    \
13017db96d56Sopenharmony_ci    {"EnableReflectionKey", (PyCFunction)winreg_EnableReflectionKey, METH_O, winreg_EnableReflectionKey__doc__},
13027db96d56Sopenharmony_ci
13037db96d56Sopenharmony_cistatic PyObject *
13047db96d56Sopenharmony_ciwinreg_EnableReflectionKey_impl(PyObject *module, HKEY key);
13057db96d56Sopenharmony_ci
13067db96d56Sopenharmony_cistatic PyObject *
13077db96d56Sopenharmony_ciwinreg_EnableReflectionKey(PyObject *module, PyObject *arg)
13087db96d56Sopenharmony_ci{
13097db96d56Sopenharmony_ci    PyObject *return_value = NULL;
13107db96d56Sopenharmony_ci    HKEY key;
13117db96d56Sopenharmony_ci
13127db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(arg, &key)) {
13137db96d56Sopenharmony_ci        goto exit;
13147db96d56Sopenharmony_ci    }
13157db96d56Sopenharmony_ci    return_value = winreg_EnableReflectionKey_impl(module, key);
13167db96d56Sopenharmony_ci
13177db96d56Sopenharmony_ciexit:
13187db96d56Sopenharmony_ci    return return_value;
13197db96d56Sopenharmony_ci}
13207db96d56Sopenharmony_ci
13217db96d56Sopenharmony_ciPyDoc_STRVAR(winreg_QueryReflectionKey__doc__,
13227db96d56Sopenharmony_ci"QueryReflectionKey($module, key, /)\n"
13237db96d56Sopenharmony_ci"--\n"
13247db96d56Sopenharmony_ci"\n"
13257db96d56Sopenharmony_ci"Returns the reflection state for the specified key as a bool.\n"
13267db96d56Sopenharmony_ci"\n"
13277db96d56Sopenharmony_ci"  key\n"
13287db96d56Sopenharmony_ci"    An already open key, or any one of the predefined HKEY_* constants.\n"
13297db96d56Sopenharmony_ci"\n"
13307db96d56Sopenharmony_ci"Will generally raise NotImplementedError if executed on a 32bit OS.");
13317db96d56Sopenharmony_ci
13327db96d56Sopenharmony_ci#define WINREG_QUERYREFLECTIONKEY_METHODDEF    \
13337db96d56Sopenharmony_ci    {"QueryReflectionKey", (PyCFunction)winreg_QueryReflectionKey, METH_O, winreg_QueryReflectionKey__doc__},
13347db96d56Sopenharmony_ci
13357db96d56Sopenharmony_cistatic PyObject *
13367db96d56Sopenharmony_ciwinreg_QueryReflectionKey_impl(PyObject *module, HKEY key);
13377db96d56Sopenharmony_ci
13387db96d56Sopenharmony_cistatic PyObject *
13397db96d56Sopenharmony_ciwinreg_QueryReflectionKey(PyObject *module, PyObject *arg)
13407db96d56Sopenharmony_ci{
13417db96d56Sopenharmony_ci    PyObject *return_value = NULL;
13427db96d56Sopenharmony_ci    HKEY key;
13437db96d56Sopenharmony_ci
13447db96d56Sopenharmony_ci    if (!clinic_HKEY_converter(arg, &key)) {
13457db96d56Sopenharmony_ci        goto exit;
13467db96d56Sopenharmony_ci    }
13477db96d56Sopenharmony_ci    return_value = winreg_QueryReflectionKey_impl(module, key);
13487db96d56Sopenharmony_ci
13497db96d56Sopenharmony_ciexit:
13507db96d56Sopenharmony_ci    return return_value;
13517db96d56Sopenharmony_ci}
13527db96d56Sopenharmony_ci/*[clinic end generated code: output=e83bdaabb4fa2167 input=a9049054013a1b77]*/
1353