Home | History | Annotate | Download | only in clinic
      1 /*[clinic input]
      2 preserve
      3 [clinic start generated code]*/
      4 
      5 PyDoc_STRVAR(winreg_HKEYType_Close__doc__,
      6 "Close($self, /)\n"
      7 "--\n"
      8 "\n"
      9 "Closes the underlying Windows handle.\n"
     10 "\n"
     11 "If the handle is already closed, no error is raised.");
     12 
     13 #define WINREG_HKEYTYPE_CLOSE_METHODDEF    \
     14     {"Close", (PyCFunction)winreg_HKEYType_Close, METH_NOARGS, winreg_HKEYType_Close__doc__},
     15 
     16 static PyObject *
     17 winreg_HKEYType_Close_impl(PyHKEYObject *self);
     18 
     19 static PyObject *
     20 winreg_HKEYType_Close(PyHKEYObject *self, PyObject *Py_UNUSED(ignored))
     21 {
     22     return winreg_HKEYType_Close_impl(self);
     23 }
     24 
     25 PyDoc_STRVAR(winreg_HKEYType_Detach__doc__,
     26 "Detach($self, /)\n"
     27 "--\n"
     28 "\n"
     29 "Detaches the Windows handle from the handle object.\n"
     30 "\n"
     31 "The result is the value of the handle before it is detached.  If the\n"
     32 "handle is already detached, this will return zero.\n"
     33 "\n"
     34 "After calling this function, the handle is effectively invalidated,\n"
     35 "but the handle is not closed.  You would call this function when you\n"
     36 "need the underlying win32 handle to exist beyond the lifetime of the\n"
     37 "handle object.");
     38 
     39 #define WINREG_HKEYTYPE_DETACH_METHODDEF    \
     40     {"Detach", (PyCFunction)winreg_HKEYType_Detach, METH_NOARGS, winreg_HKEYType_Detach__doc__},
     41 
     42 static PyObject *
     43 winreg_HKEYType_Detach_impl(PyHKEYObject *self);
     44 
     45 static PyObject *
     46 winreg_HKEYType_Detach(PyHKEYObject *self, PyObject *Py_UNUSED(ignored))
     47 {
     48     return winreg_HKEYType_Detach_impl(self);
     49 }
     50 
     51 PyDoc_STRVAR(winreg_HKEYType___enter____doc__,
     52 "__enter__($self, /)\n"
     53 "--\n"
     54 "\n");
     55 
     56 #define WINREG_HKEYTYPE___ENTER___METHODDEF    \
     57     {"__enter__", (PyCFunction)winreg_HKEYType___enter__, METH_NOARGS, winreg_HKEYType___enter____doc__},
     58 
     59 static PyHKEYObject *
     60 winreg_HKEYType___enter___impl(PyHKEYObject *self);
     61 
     62 static PyObject *
     63 winreg_HKEYType___enter__(PyHKEYObject *self, PyObject *Py_UNUSED(ignored))
     64 {
     65     PyObject *return_value = NULL;
     66     PyHKEYObject *_return_value;
     67 
     68     _return_value = winreg_HKEYType___enter___impl(self);
     69     return_value = (PyObject *)_return_value;
     70 
     71     return return_value;
     72 }
     73 
     74 PyDoc_STRVAR(winreg_HKEYType___exit____doc__,
     75 "__exit__($self, /, exc_type, exc_value, traceback)\n"
     76 "--\n"
     77 "\n");
     78 
     79 #define WINREG_HKEYTYPE___EXIT___METHODDEF    \
     80     {"__exit__", (PyCFunction)winreg_HKEYType___exit__, METH_FASTCALL, winreg_HKEYType___exit____doc__},
     81 
     82 static PyObject *
     83 winreg_HKEYType___exit___impl(PyHKEYObject *self, PyObject *exc_type,
     84                               PyObject *exc_value, PyObject *traceback);
     85 
     86 static PyObject *
     87 winreg_HKEYType___exit__(PyHKEYObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
     88 {
     89     PyObject *return_value = NULL;
     90     static const char * const _keywords[] = {"exc_type", "exc_value", "traceback", NULL};
     91     static _PyArg_Parser _parser = {"OOO:__exit__", _keywords, 0};
     92     PyObject *exc_type;
     93     PyObject *exc_value;
     94     PyObject *traceback;
     95 
     96     if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
     97         &exc_type, &exc_value, &traceback)) {
     98         goto exit;
     99     }
    100     return_value = winreg_HKEYType___exit___impl(self, exc_type, exc_value, traceback);
    101 
    102 exit:
    103     return return_value;
    104 }
    105 
    106 PyDoc_STRVAR(winreg_CloseKey__doc__,
    107 "CloseKey($module, hkey, /)\n"
    108 "--\n"
    109 "\n"
    110 "Closes a previously opened registry key.\n"
    111 "\n"
    112 "  hkey\n"
    113 "    A previously opened key.\n"
    114 "\n"
    115 "Note that if the key is not closed using this method, it will be\n"
    116 "closed when the hkey object is destroyed by Python.");
    117 
    118 #define WINREG_CLOSEKEY_METHODDEF    \
    119     {"CloseKey", (PyCFunction)winreg_CloseKey, METH_O, winreg_CloseKey__doc__},
    120 
    121 PyDoc_STRVAR(winreg_ConnectRegistry__doc__,
    122 "ConnectRegistry($module, computer_name, key, /)\n"
    123 "--\n"
    124 "\n"
    125 "Establishes a connection to the registry on another computer.\n"
    126 "\n"
    127 "  computer_name\n"
    128 "    The name of the remote computer, of the form r\"\\\\computername\".  If\n"
    129 "    None, the local computer is used.\n"
    130 "  key\n"
    131 "    The predefined key to connect to.\n"
    132 "\n"
    133 "The return value is the handle of the opened key.\n"
    134 "If the function fails, an OSError exception is raised.");
    135 
    136 #define WINREG_CONNECTREGISTRY_METHODDEF    \
    137     {"ConnectRegistry", (PyCFunction)winreg_ConnectRegistry, METH_VARARGS, winreg_ConnectRegistry__doc__},
    138 
    139 static HKEY
    140 winreg_ConnectRegistry_impl(PyObject *module, Py_UNICODE *computer_name,
    141                             HKEY key);
    142 
    143 static PyObject *
    144 winreg_ConnectRegistry(PyObject *module, PyObject *args)
    145 {
    146     PyObject *return_value = NULL;
    147     Py_UNICODE *computer_name;
    148     HKEY key;
    149     HKEY _return_value;
    150 
    151     if (!PyArg_ParseTuple(args, "ZO&:ConnectRegistry",
    152         &computer_name, clinic_HKEY_converter, &key)) {
    153         goto exit;
    154     }
    155     _return_value = winreg_ConnectRegistry_impl(module, computer_name, key);
    156     if (_return_value == NULL) {
    157         goto exit;
    158     }
    159     return_value = PyHKEY_FromHKEY(_return_value);
    160 
    161 exit:
    162     return return_value;
    163 }
    164 
    165 PyDoc_STRVAR(winreg_CreateKey__doc__,
    166 "CreateKey($module, key, sub_key, /)\n"
    167 "--\n"
    168 "\n"
    169 "Creates or opens the specified key.\n"
    170 "\n"
    171 "  key\n"
    172 "    An already open key, or one of the predefined HKEY_* constants.\n"
    173 "  sub_key\n"
    174 "    The name of the key this method opens or creates.\n"
    175 "\n"
    176 "If key is one of the predefined keys, sub_key may be None. In that case,\n"
    177 "the handle returned is the same key handle passed in to the function.\n"
    178 "\n"
    179 "If the key already exists, this function opens the existing key.\n"
    180 "\n"
    181 "The return value is the handle of the opened key.\n"
    182 "If the function fails, an OSError exception is raised.");
    183 
    184 #define WINREG_CREATEKEY_METHODDEF    \
    185     {"CreateKey", (PyCFunction)winreg_CreateKey, METH_VARARGS, winreg_CreateKey__doc__},
    186 
    187 static HKEY
    188 winreg_CreateKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key);
    189 
    190 static PyObject *
    191 winreg_CreateKey(PyObject *module, PyObject *args)
    192 {
    193     PyObject *return_value = NULL;
    194     HKEY key;
    195     Py_UNICODE *sub_key;
    196     HKEY _return_value;
    197 
    198     if (!PyArg_ParseTuple(args, "O&Z:CreateKey",
    199         clinic_HKEY_converter, &key, &sub_key)) {
    200         goto exit;
    201     }
    202     _return_value = winreg_CreateKey_impl(module, key, sub_key);
    203     if (_return_value == NULL) {
    204         goto exit;
    205     }
    206     return_value = PyHKEY_FromHKEY(_return_value);
    207 
    208 exit:
    209     return return_value;
    210 }
    211 
    212 PyDoc_STRVAR(winreg_CreateKeyEx__doc__,
    213 "CreateKeyEx($module, /, key, sub_key, reserved=0,\n"
    214 "            access=winreg.KEY_WRITE)\n"
    215 "--\n"
    216 "\n"
    217 "Creates or opens the specified key.\n"
    218 "\n"
    219 "  key\n"
    220 "    An already open key, or one of the predefined HKEY_* constants.\n"
    221 "  sub_key\n"
    222 "    The name of the key this method opens or creates.\n"
    223 "  reserved\n"
    224 "    A reserved integer, and must be zero.  Default is zero.\n"
    225 "  access\n"
    226 "    An integer that specifies an access mask that describes the\n"
    227 "    desired security access for the key. Default is KEY_WRITE.\n"
    228 "\n"
    229 "If key is one of the predefined keys, sub_key may be None. In that case,\n"
    230 "the handle returned is the same key handle passed in to the function.\n"
    231 "\n"
    232 "If the key already exists, this function opens the existing key\n"
    233 "\n"
    234 "The return value is the handle of the opened key.\n"
    235 "If the function fails, an OSError exception is raised.");
    236 
    237 #define WINREG_CREATEKEYEX_METHODDEF    \
    238     {"CreateKeyEx", (PyCFunction)winreg_CreateKeyEx, METH_FASTCALL, winreg_CreateKeyEx__doc__},
    239 
    240 static HKEY
    241 winreg_CreateKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key,
    242                         int reserved, REGSAM access);
    243 
    244 static PyObject *
    245 winreg_CreateKeyEx(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
    246 {
    247     PyObject *return_value = NULL;
    248     static const char * const _keywords[] = {"key", "sub_key", "reserved", "access", NULL};
    249     static _PyArg_Parser _parser = {"O&Z|ii:CreateKeyEx", _keywords, 0};
    250     HKEY key;
    251     Py_UNICODE *sub_key;
    252     int reserved = 0;
    253     REGSAM access = KEY_WRITE;
    254     HKEY _return_value;
    255 
    256     if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
    257         clinic_HKEY_converter, &key, &sub_key, &reserved, &access)) {
    258         goto exit;
    259     }
    260     _return_value = winreg_CreateKeyEx_impl(module, key, sub_key, reserved, access);
    261     if (_return_value == NULL) {
    262         goto exit;
    263     }
    264     return_value = PyHKEY_FromHKEY(_return_value);
    265 
    266 exit:
    267     return return_value;
    268 }
    269 
    270 PyDoc_STRVAR(winreg_DeleteKey__doc__,
    271 "DeleteKey($module, key, sub_key, /)\n"
    272 "--\n"
    273 "\n"
    274 "Deletes the specified key.\n"
    275 "\n"
    276 "  key\n"
    277 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    278 "  sub_key\n"
    279 "    A string that must be the name of a subkey of the key identified by\n"
    280 "    the key parameter. This value must not be None, and the key may not\n"
    281 "    have subkeys.\n"
    282 "\n"
    283 "This method can not delete keys with subkeys.\n"
    284 "\n"
    285 "If the function succeeds, the entire key, including all of its values,\n"
    286 "is removed.  If the function fails, an OSError exception is raised.");
    287 
    288 #define WINREG_DELETEKEY_METHODDEF    \
    289     {"DeleteKey", (PyCFunction)winreg_DeleteKey, METH_VARARGS, winreg_DeleteKey__doc__},
    290 
    291 static PyObject *
    292 winreg_DeleteKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key);
    293 
    294 static PyObject *
    295 winreg_DeleteKey(PyObject *module, PyObject *args)
    296 {
    297     PyObject *return_value = NULL;
    298     HKEY key;
    299     Py_UNICODE *sub_key;
    300 
    301     if (!PyArg_ParseTuple(args, "O&u:DeleteKey",
    302         clinic_HKEY_converter, &key, &sub_key)) {
    303         goto exit;
    304     }
    305     return_value = winreg_DeleteKey_impl(module, key, sub_key);
    306 
    307 exit:
    308     return return_value;
    309 }
    310 
    311 PyDoc_STRVAR(winreg_DeleteKeyEx__doc__,
    312 "DeleteKeyEx($module, /, key, sub_key, access=winreg.KEY_WOW64_64KEY,\n"
    313 "            reserved=0)\n"
    314 "--\n"
    315 "\n"
    316 "Deletes the specified key (64-bit OS only).\n"
    317 "\n"
    318 "  key\n"
    319 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    320 "  sub_key\n"
    321 "    A string that must be the name of a subkey of the key identified by\n"
    322 "    the key parameter. This value must not be None, and the key may not\n"
    323 "    have subkeys.\n"
    324 "  access\n"
    325 "    An integer that specifies an access mask that describes the\n"
    326 "    desired security access for the key. Default is KEY_WOW64_64KEY.\n"
    327 "  reserved\n"
    328 "    A reserved integer, and must be zero.  Default is zero.\n"
    329 "\n"
    330 "This method can not delete keys with subkeys.\n"
    331 "\n"
    332 "If the function succeeds, the entire key, including all of its values,\n"
    333 "is removed.  If the function fails, an OSError exception is raised.\n"
    334 "On unsupported Windows versions, NotImplementedError is raised.");
    335 
    336 #define WINREG_DELETEKEYEX_METHODDEF    \
    337     {"DeleteKeyEx", (PyCFunction)winreg_DeleteKeyEx, METH_FASTCALL, winreg_DeleteKeyEx__doc__},
    338 
    339 static PyObject *
    340 winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key,
    341                         REGSAM access, int reserved);
    342 
    343 static PyObject *
    344 winreg_DeleteKeyEx(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
    345 {
    346     PyObject *return_value = NULL;
    347     static const char * const _keywords[] = {"key", "sub_key", "access", "reserved", NULL};
    348     static _PyArg_Parser _parser = {"O&u|ii:DeleteKeyEx", _keywords, 0};
    349     HKEY key;
    350     Py_UNICODE *sub_key;
    351     REGSAM access = KEY_WOW64_64KEY;
    352     int reserved = 0;
    353 
    354     if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
    355         clinic_HKEY_converter, &key, &sub_key, &access, &reserved)) {
    356         goto exit;
    357     }
    358     return_value = winreg_DeleteKeyEx_impl(module, key, sub_key, access, reserved);
    359 
    360 exit:
    361     return return_value;
    362 }
    363 
    364 PyDoc_STRVAR(winreg_DeleteValue__doc__,
    365 "DeleteValue($module, key, value, /)\n"
    366 "--\n"
    367 "\n"
    368 "Removes a named value from a registry key.\n"
    369 "\n"
    370 "  key\n"
    371 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    372 "  value\n"
    373 "    A string that identifies the value to remove.");
    374 
    375 #define WINREG_DELETEVALUE_METHODDEF    \
    376     {"DeleteValue", (PyCFunction)winreg_DeleteValue, METH_VARARGS, winreg_DeleteValue__doc__},
    377 
    378 static PyObject *
    379 winreg_DeleteValue_impl(PyObject *module, HKEY key, Py_UNICODE *value);
    380 
    381 static PyObject *
    382 winreg_DeleteValue(PyObject *module, PyObject *args)
    383 {
    384     PyObject *return_value = NULL;
    385     HKEY key;
    386     Py_UNICODE *value;
    387 
    388     if (!PyArg_ParseTuple(args, "O&Z:DeleteValue",
    389         clinic_HKEY_converter, &key, &value)) {
    390         goto exit;
    391     }
    392     return_value = winreg_DeleteValue_impl(module, key, value);
    393 
    394 exit:
    395     return return_value;
    396 }
    397 
    398 PyDoc_STRVAR(winreg_EnumKey__doc__,
    399 "EnumKey($module, key, index, /)\n"
    400 "--\n"
    401 "\n"
    402 "Enumerates subkeys of an open registry key.\n"
    403 "\n"
    404 "  key\n"
    405 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    406 "  index\n"
    407 "    An integer that identifies the index of the key to retrieve.\n"
    408 "\n"
    409 "The function retrieves the name of one subkey each time it is called.\n"
    410 "It is typically called repeatedly until an OSError exception is\n"
    411 "raised, indicating no more values are available.");
    412 
    413 #define WINREG_ENUMKEY_METHODDEF    \
    414     {"EnumKey", (PyCFunction)winreg_EnumKey, METH_VARARGS, winreg_EnumKey__doc__},
    415 
    416 static PyObject *
    417 winreg_EnumKey_impl(PyObject *module, HKEY key, int index);
    418 
    419 static PyObject *
    420 winreg_EnumKey(PyObject *module, PyObject *args)
    421 {
    422     PyObject *return_value = NULL;
    423     HKEY key;
    424     int index;
    425 
    426     if (!PyArg_ParseTuple(args, "O&i:EnumKey",
    427         clinic_HKEY_converter, &key, &index)) {
    428         goto exit;
    429     }
    430     return_value = winreg_EnumKey_impl(module, key, index);
    431 
    432 exit:
    433     return return_value;
    434 }
    435 
    436 PyDoc_STRVAR(winreg_EnumValue__doc__,
    437 "EnumValue($module, key, index, /)\n"
    438 "--\n"
    439 "\n"
    440 "Enumerates values of an open registry key.\n"
    441 "\n"
    442 "  key\n"
    443 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    444 "  index\n"
    445 "    An integer that identifies the index of the value to retrieve.\n"
    446 "\n"
    447 "The function retrieves the name of one subkey each time it is called.\n"
    448 "It is typically called repeatedly, until an OSError exception\n"
    449 "is raised, indicating no more values.\n"
    450 "\n"
    451 "The result is a tuple of 3 items:\n"
    452 "  value_name\n"
    453 "    A string that identifies the value.\n"
    454 "  value_data\n"
    455 "    An object that holds the value data, and whose type depends\n"
    456 "    on the underlying registry type.\n"
    457 "  data_type\n"
    458 "    An integer that identifies the type of the value data.");
    459 
    460 #define WINREG_ENUMVALUE_METHODDEF    \
    461     {"EnumValue", (PyCFunction)winreg_EnumValue, METH_VARARGS, winreg_EnumValue__doc__},
    462 
    463 static PyObject *
    464 winreg_EnumValue_impl(PyObject *module, HKEY key, int index);
    465 
    466 static PyObject *
    467 winreg_EnumValue(PyObject *module, PyObject *args)
    468 {
    469     PyObject *return_value = NULL;
    470     HKEY key;
    471     int index;
    472 
    473     if (!PyArg_ParseTuple(args, "O&i:EnumValue",
    474         clinic_HKEY_converter, &key, &index)) {
    475         goto exit;
    476     }
    477     return_value = winreg_EnumValue_impl(module, key, index);
    478 
    479 exit:
    480     return return_value;
    481 }
    482 
    483 PyDoc_STRVAR(winreg_ExpandEnvironmentStrings__doc__,
    484 "ExpandEnvironmentStrings($module, string, /)\n"
    485 "--\n"
    486 "\n"
    487 "Expand environment vars.");
    488 
    489 #define WINREG_EXPANDENVIRONMENTSTRINGS_METHODDEF    \
    490     {"ExpandEnvironmentStrings", (PyCFunction)winreg_ExpandEnvironmentStrings, METH_O, winreg_ExpandEnvironmentStrings__doc__},
    491 
    492 static PyObject *
    493 winreg_ExpandEnvironmentStrings_impl(PyObject *module, Py_UNICODE *string);
    494 
    495 static PyObject *
    496 winreg_ExpandEnvironmentStrings(PyObject *module, PyObject *arg)
    497 {
    498     PyObject *return_value = NULL;
    499     Py_UNICODE *string;
    500 
    501     if (!PyArg_Parse(arg, "u:ExpandEnvironmentStrings", &string)) {
    502         goto exit;
    503     }
    504     return_value = winreg_ExpandEnvironmentStrings_impl(module, string);
    505 
    506 exit:
    507     return return_value;
    508 }
    509 
    510 PyDoc_STRVAR(winreg_FlushKey__doc__,
    511 "FlushKey($module, key, /)\n"
    512 "--\n"
    513 "\n"
    514 "Writes all the attributes of a key to the registry.\n"
    515 "\n"
    516 "  key\n"
    517 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    518 "\n"
    519 "It is not necessary to call FlushKey to change a key.  Registry changes\n"
    520 "are flushed to disk by the registry using its lazy flusher.  Registry\n"
    521 "changes are also flushed to disk at system shutdown.  Unlike\n"
    522 "CloseKey(), the FlushKey() method returns only when all the data has\n"
    523 "been written to the registry.\n"
    524 "\n"
    525 "An application should only call FlushKey() if it requires absolute\n"
    526 "certainty that registry changes are on disk.  If you don\'t know whether\n"
    527 "a FlushKey() call is required, it probably isn\'t.");
    528 
    529 #define WINREG_FLUSHKEY_METHODDEF    \
    530     {"FlushKey", (PyCFunction)winreg_FlushKey, METH_O, winreg_FlushKey__doc__},
    531 
    532 static PyObject *
    533 winreg_FlushKey_impl(PyObject *module, HKEY key);
    534 
    535 static PyObject *
    536 winreg_FlushKey(PyObject *module, PyObject *arg)
    537 {
    538     PyObject *return_value = NULL;
    539     HKEY key;
    540 
    541     if (!PyArg_Parse(arg, "O&:FlushKey", clinic_HKEY_converter, &key)) {
    542         goto exit;
    543     }
    544     return_value = winreg_FlushKey_impl(module, key);
    545 
    546 exit:
    547     return return_value;
    548 }
    549 
    550 PyDoc_STRVAR(winreg_LoadKey__doc__,
    551 "LoadKey($module, key, sub_key, file_name, /)\n"
    552 "--\n"
    553 "\n"
    554 "Insert data into the registry from a file.\n"
    555 "\n"
    556 "  key\n"
    557 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    558 "  sub_key\n"
    559 "    A string that identifies the sub-key to load.\n"
    560 "  file_name\n"
    561 "    The name of the file to load registry data from.  This file must\n"
    562 "    have been created with the SaveKey() function.  Under the file\n"
    563 "    allocation table (FAT) file system, the filename may not have an\n"
    564 "    extension.\n"
    565 "\n"
    566 "Creates a subkey under the specified key and stores registration\n"
    567 "information from a specified file into that subkey.\n"
    568 "\n"
    569 "A call to LoadKey() fails if the calling process does not have the\n"
    570 "SE_RESTORE_PRIVILEGE privilege.\n"
    571 "\n"
    572 "If key is a handle returned by ConnectRegistry(), then the path\n"
    573 "specified in fileName is relative to the remote computer.\n"
    574 "\n"
    575 "The MSDN docs imply key must be in the HKEY_USER or HKEY_LOCAL_MACHINE\n"
    576 "tree.");
    577 
    578 #define WINREG_LOADKEY_METHODDEF    \
    579     {"LoadKey", (PyCFunction)winreg_LoadKey, METH_VARARGS, winreg_LoadKey__doc__},
    580 
    581 static PyObject *
    582 winreg_LoadKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key,
    583                     Py_UNICODE *file_name);
    584 
    585 static PyObject *
    586 winreg_LoadKey(PyObject *module, PyObject *args)
    587 {
    588     PyObject *return_value = NULL;
    589     HKEY key;
    590     Py_UNICODE *sub_key;
    591     Py_UNICODE *file_name;
    592 
    593     if (!PyArg_ParseTuple(args, "O&uu:LoadKey",
    594         clinic_HKEY_converter, &key, &sub_key, &file_name)) {
    595         goto exit;
    596     }
    597     return_value = winreg_LoadKey_impl(module, key, sub_key, file_name);
    598 
    599 exit:
    600     return return_value;
    601 }
    602 
    603 PyDoc_STRVAR(winreg_OpenKey__doc__,
    604 "OpenKey($module, /, key, sub_key, reserved=0, access=winreg.KEY_READ)\n"
    605 "--\n"
    606 "\n"
    607 "Opens the specified key.\n"
    608 "\n"
    609 "  key\n"
    610 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    611 "  sub_key\n"
    612 "    A string that identifies the sub_key to open.\n"
    613 "  reserved\n"
    614 "    A reserved integer that must be zero.  Default is zero.\n"
    615 "  access\n"
    616 "    An integer that specifies an access mask that describes the desired\n"
    617 "    security access for the key.  Default is KEY_READ.\n"
    618 "\n"
    619 "The result is a new handle to the specified key.\n"
    620 "If the function fails, an OSError exception is raised.");
    621 
    622 #define WINREG_OPENKEY_METHODDEF    \
    623     {"OpenKey", (PyCFunction)winreg_OpenKey, METH_FASTCALL, winreg_OpenKey__doc__},
    624 
    625 static HKEY
    626 winreg_OpenKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key,
    627                     int reserved, REGSAM access);
    628 
    629 static PyObject *
    630 winreg_OpenKey(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
    631 {
    632     PyObject *return_value = NULL;
    633     static const char * const _keywords[] = {"key", "sub_key", "reserved", "access", NULL};
    634     static _PyArg_Parser _parser = {"O&Z|ii:OpenKey", _keywords, 0};
    635     HKEY key;
    636     Py_UNICODE *sub_key;
    637     int reserved = 0;
    638     REGSAM access = KEY_READ;
    639     HKEY _return_value;
    640 
    641     if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
    642         clinic_HKEY_converter, &key, &sub_key, &reserved, &access)) {
    643         goto exit;
    644     }
    645     _return_value = winreg_OpenKey_impl(module, key, sub_key, reserved, access);
    646     if (_return_value == NULL) {
    647         goto exit;
    648     }
    649     return_value = PyHKEY_FromHKEY(_return_value);
    650 
    651 exit:
    652     return return_value;
    653 }
    654 
    655 PyDoc_STRVAR(winreg_OpenKeyEx__doc__,
    656 "OpenKeyEx($module, /, key, sub_key, reserved=0, access=winreg.KEY_READ)\n"
    657 "--\n"
    658 "\n"
    659 "Opens the specified key.\n"
    660 "\n"
    661 "  key\n"
    662 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    663 "  sub_key\n"
    664 "    A string that identifies the sub_key to open.\n"
    665 "  reserved\n"
    666 "    A reserved integer that must be zero.  Default is zero.\n"
    667 "  access\n"
    668 "    An integer that specifies an access mask that describes the desired\n"
    669 "    security access for the key.  Default is KEY_READ.\n"
    670 "\n"
    671 "The result is a new handle to the specified key.\n"
    672 "If the function fails, an OSError exception is raised.");
    673 
    674 #define WINREG_OPENKEYEX_METHODDEF    \
    675     {"OpenKeyEx", (PyCFunction)winreg_OpenKeyEx, METH_FASTCALL, winreg_OpenKeyEx__doc__},
    676 
    677 static HKEY
    678 winreg_OpenKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key,
    679                       int reserved, REGSAM access);
    680 
    681 static PyObject *
    682 winreg_OpenKeyEx(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
    683 {
    684     PyObject *return_value = NULL;
    685     static const char * const _keywords[] = {"key", "sub_key", "reserved", "access", NULL};
    686     static _PyArg_Parser _parser = {"O&Z|ii:OpenKeyEx", _keywords, 0};
    687     HKEY key;
    688     Py_UNICODE *sub_key;
    689     int reserved = 0;
    690     REGSAM access = KEY_READ;
    691     HKEY _return_value;
    692 
    693     if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
    694         clinic_HKEY_converter, &key, &sub_key, &reserved, &access)) {
    695         goto exit;
    696     }
    697     _return_value = winreg_OpenKeyEx_impl(module, key, sub_key, reserved, access);
    698     if (_return_value == NULL) {
    699         goto exit;
    700     }
    701     return_value = PyHKEY_FromHKEY(_return_value);
    702 
    703 exit:
    704     return return_value;
    705 }
    706 
    707 PyDoc_STRVAR(winreg_QueryInfoKey__doc__,
    708 "QueryInfoKey($module, key, /)\n"
    709 "--\n"
    710 "\n"
    711 "Returns information about a key.\n"
    712 "\n"
    713 "  key\n"
    714 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    715 "\n"
    716 "The result is a tuple of 3 items:\n"
    717 "An integer that identifies the number of sub keys this key has.\n"
    718 "An integer that identifies the number of values this key has.\n"
    719 "An integer that identifies when the key was last modified (if available)\n"
    720 "as 100\'s of nanoseconds since Jan 1, 1600.");
    721 
    722 #define WINREG_QUERYINFOKEY_METHODDEF    \
    723     {"QueryInfoKey", (PyCFunction)winreg_QueryInfoKey, METH_O, winreg_QueryInfoKey__doc__},
    724 
    725 static PyObject *
    726 winreg_QueryInfoKey_impl(PyObject *module, HKEY key);
    727 
    728 static PyObject *
    729 winreg_QueryInfoKey(PyObject *module, PyObject *arg)
    730 {
    731     PyObject *return_value = NULL;
    732     HKEY key;
    733 
    734     if (!PyArg_Parse(arg, "O&:QueryInfoKey", clinic_HKEY_converter, &key)) {
    735         goto exit;
    736     }
    737     return_value = winreg_QueryInfoKey_impl(module, key);
    738 
    739 exit:
    740     return return_value;
    741 }
    742 
    743 PyDoc_STRVAR(winreg_QueryValue__doc__,
    744 "QueryValue($module, key, sub_key, /)\n"
    745 "--\n"
    746 "\n"
    747 "Retrieves the unnamed value for a key.\n"
    748 "\n"
    749 "  key\n"
    750 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    751 "  sub_key\n"
    752 "    A string that holds the name of the subkey with which the value\n"
    753 "    is associated.  If this parameter is None or empty, the function\n"
    754 "    retrieves the value set by the SetValue() method for the key\n"
    755 "    identified by key.\n"
    756 "\n"
    757 "Values in the registry have name, type, and data components. This method\n"
    758 "retrieves the data for a key\'s first value that has a NULL name.\n"
    759 "But since the underlying API call doesn\'t return the type, you\'ll\n"
    760 "probably be happier using QueryValueEx; this function is just here for\n"
    761 "completeness.");
    762 
    763 #define WINREG_QUERYVALUE_METHODDEF    \
    764     {"QueryValue", (PyCFunction)winreg_QueryValue, METH_VARARGS, winreg_QueryValue__doc__},
    765 
    766 static PyObject *
    767 winreg_QueryValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key);
    768 
    769 static PyObject *
    770 winreg_QueryValue(PyObject *module, PyObject *args)
    771 {
    772     PyObject *return_value = NULL;
    773     HKEY key;
    774     Py_UNICODE *sub_key;
    775 
    776     if (!PyArg_ParseTuple(args, "O&Z:QueryValue",
    777         clinic_HKEY_converter, &key, &sub_key)) {
    778         goto exit;
    779     }
    780     return_value = winreg_QueryValue_impl(module, key, sub_key);
    781 
    782 exit:
    783     return return_value;
    784 }
    785 
    786 PyDoc_STRVAR(winreg_QueryValueEx__doc__,
    787 "QueryValueEx($module, key, name, /)\n"
    788 "--\n"
    789 "\n"
    790 "Retrieves the type and value of a specified sub-key.\n"
    791 "\n"
    792 "  key\n"
    793 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    794 "  name\n"
    795 "    A string indicating the value to query.\n"
    796 "\n"
    797 "Behaves mostly like QueryValue(), but also returns the type of the\n"
    798 "specified value name associated with the given open registry key.\n"
    799 "\n"
    800 "The return value is a tuple of the value and the type_id.");
    801 
    802 #define WINREG_QUERYVALUEEX_METHODDEF    \
    803     {"QueryValueEx", (PyCFunction)winreg_QueryValueEx, METH_VARARGS, winreg_QueryValueEx__doc__},
    804 
    805 static PyObject *
    806 winreg_QueryValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *name);
    807 
    808 static PyObject *
    809 winreg_QueryValueEx(PyObject *module, PyObject *args)
    810 {
    811     PyObject *return_value = NULL;
    812     HKEY key;
    813     Py_UNICODE *name;
    814 
    815     if (!PyArg_ParseTuple(args, "O&Z:QueryValueEx",
    816         clinic_HKEY_converter, &key, &name)) {
    817         goto exit;
    818     }
    819     return_value = winreg_QueryValueEx_impl(module, key, name);
    820 
    821 exit:
    822     return return_value;
    823 }
    824 
    825 PyDoc_STRVAR(winreg_SaveKey__doc__,
    826 "SaveKey($module, key, file_name, /)\n"
    827 "--\n"
    828 "\n"
    829 "Saves the specified key, and all its subkeys to the specified file.\n"
    830 "\n"
    831 "  key\n"
    832 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    833 "  file_name\n"
    834 "    The name of the file to save registry data to.  This file cannot\n"
    835 "    already exist. If this filename includes an extension, it cannot be\n"
    836 "    used on file allocation table (FAT) file systems by the LoadKey(),\n"
    837 "    ReplaceKey() or RestoreKey() methods.\n"
    838 "\n"
    839 "If key represents a key on a remote computer, the path described by\n"
    840 "file_name is relative to the remote computer.\n"
    841 "\n"
    842 "The caller of this method must possess the SeBackupPrivilege\n"
    843 "security privilege.  This function passes NULL for security_attributes\n"
    844 "to the API.");
    845 
    846 #define WINREG_SAVEKEY_METHODDEF    \
    847     {"SaveKey", (PyCFunction)winreg_SaveKey, METH_VARARGS, winreg_SaveKey__doc__},
    848 
    849 static PyObject *
    850 winreg_SaveKey_impl(PyObject *module, HKEY key, Py_UNICODE *file_name);
    851 
    852 static PyObject *
    853 winreg_SaveKey(PyObject *module, PyObject *args)
    854 {
    855     PyObject *return_value = NULL;
    856     HKEY key;
    857     Py_UNICODE *file_name;
    858 
    859     if (!PyArg_ParseTuple(args, "O&u:SaveKey",
    860         clinic_HKEY_converter, &key, &file_name)) {
    861         goto exit;
    862     }
    863     return_value = winreg_SaveKey_impl(module, key, file_name);
    864 
    865 exit:
    866     return return_value;
    867 }
    868 
    869 PyDoc_STRVAR(winreg_SetValue__doc__,
    870 "SetValue($module, key, sub_key, type, value, /)\n"
    871 "--\n"
    872 "\n"
    873 "Associates a value with a specified key.\n"
    874 "\n"
    875 "  key\n"
    876 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    877 "  sub_key\n"
    878 "    A string that names the subkey with which the value is associated.\n"
    879 "  type\n"
    880 "    An integer that specifies the type of the data.  Currently this must\n"
    881 "    be REG_SZ, meaning only strings are supported.\n"
    882 "  value\n"
    883 "    A string that specifies the new value.\n"
    884 "\n"
    885 "If the key specified by the sub_key parameter does not exist, the\n"
    886 "SetValue function creates it.\n"
    887 "\n"
    888 "Value lengths are limited by available memory. Long values (more than\n"
    889 "2048 bytes) should be stored as files with the filenames stored in\n"
    890 "the configuration registry to help the registry perform efficiently.\n"
    891 "\n"
    892 "The key identified by the key parameter must have been opened with\n"
    893 "KEY_SET_VALUE access.");
    894 
    895 #define WINREG_SETVALUE_METHODDEF    \
    896     {"SetValue", (PyCFunction)winreg_SetValue, METH_VARARGS, winreg_SetValue__doc__},
    897 
    898 static PyObject *
    899 winreg_SetValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key,
    900                      DWORD type, Py_UNICODE *value,
    901                      Py_ssize_clean_t value_length);
    902 
    903 static PyObject *
    904 winreg_SetValue(PyObject *module, PyObject *args)
    905 {
    906     PyObject *return_value = NULL;
    907     HKEY key;
    908     Py_UNICODE *sub_key;
    909     DWORD type;
    910     Py_UNICODE *value;
    911     Py_ssize_clean_t value_length;
    912 
    913     if (!PyArg_ParseTuple(args, "O&Zku#:SetValue",
    914         clinic_HKEY_converter, &key, &sub_key, &type, &value, &value_length)) {
    915         goto exit;
    916     }
    917     return_value = winreg_SetValue_impl(module, key, sub_key, type, value, value_length);
    918 
    919 exit:
    920     return return_value;
    921 }
    922 
    923 PyDoc_STRVAR(winreg_SetValueEx__doc__,
    924 "SetValueEx($module, key, value_name, reserved, type, value, /)\n"
    925 "--\n"
    926 "\n"
    927 "Stores data in the value field of an open registry key.\n"
    928 "\n"
    929 "  key\n"
    930 "    An already open key, or any one of the predefined HKEY_* constants.\n"
    931 "  value_name\n"
    932 "    A string containing the name of the value to set, or None.\n"
    933 "  reserved\n"
    934 "    Can be anything - zero is always passed to the API.\n"
    935 "  type\n"
    936 "    An integer that specifies the type of the data, one of:\n"
    937 "    REG_BINARY -- Binary data in any form.\n"
    938 "    REG_DWORD -- A 32-bit number.\n"
    939 "    REG_DWORD_LITTLE_ENDIAN -- A 32-bit number in little-endian format. Equivalent to REG_DWORD\n"
    940 "    REG_DWORD_BIG_ENDIAN -- A 32-bit number in big-endian format.\n"
    941 "    REG_EXPAND_SZ -- A null-terminated string that contains unexpanded\n"
    942 "                     references to environment variables (for example,\n"
    943 "                     %PATH%).\n"
    944 "    REG_LINK -- A Unicode symbolic link.\n"
    945 "    REG_MULTI_SZ -- A sequence of null-terminated strings, terminated\n"
    946 "                    by two null characters.  Note that Python handles\n"
    947 "                    this termination automatically.\n"
    948 "    REG_NONE -- No defined value type.\n"
    949 "    REG_QWORD -- A 64-bit number.\n"
    950 "    REG_QWORD_LITTLE_ENDIAN -- A 64-bit number in little-endian format. Equivalent to REG_QWORD.\n"
    951 "    REG_RESOURCE_LIST -- A device-driver resource list.\n"
    952 "    REG_SZ -- A null-terminated string.\n"
    953 "  value\n"
    954 "    A string that specifies the new value.\n"
    955 "\n"
    956 "This method can also set additional value and type information for the\n"
    957 "specified key.  The key identified by the key parameter must have been\n"
    958 "opened with KEY_SET_VALUE access.\n"
    959 "\n"
    960 "To open the key, use the CreateKeyEx() or OpenKeyEx() methods.\n"
    961 "\n"
    962 "Value lengths are limited by available memory. Long values (more than\n"
    963 "2048 bytes) should be stored as files with the filenames stored in\n"
    964 "the configuration registry to help the registry perform efficiently.");
    965 
    966 #define WINREG_SETVALUEEX_METHODDEF    \
    967     {"SetValueEx", (PyCFunction)winreg_SetValueEx, METH_VARARGS, winreg_SetValueEx__doc__},
    968 
    969 static PyObject *
    970 winreg_SetValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *value_name,
    971                        PyObject *reserved, DWORD type, PyObject *value);
    972 
    973 static PyObject *
    974 winreg_SetValueEx(PyObject *module, PyObject *args)
    975 {
    976     PyObject *return_value = NULL;
    977     HKEY key;
    978     Py_UNICODE *value_name;
    979     PyObject *reserved;
    980     DWORD type;
    981     PyObject *value;
    982 
    983     if (!PyArg_ParseTuple(args, "O&ZOkO:SetValueEx",
    984         clinic_HKEY_converter, &key, &value_name, &reserved, &type, &value)) {
    985         goto exit;
    986     }
    987     return_value = winreg_SetValueEx_impl(module, key, value_name, reserved, type, value);
    988 
    989 exit:
    990     return return_value;
    991 }
    992 
    993 PyDoc_STRVAR(winreg_DisableReflectionKey__doc__,
    994 "DisableReflectionKey($module, key, /)\n"
    995 "--\n"
    996 "\n"
    997 "Disables registry reflection for 32bit processes running on a 64bit OS.\n"
    998 "\n"
    999 "  key\n"
   1000 "    An already open key, or any one of the predefined HKEY_* constants.\n"
   1001 "\n"
   1002 "Will generally raise NotImplemented if executed on a 32bit OS.\n"
   1003 "\n"
   1004 "If the key is not on the reflection list, the function succeeds but has\n"
   1005 "no effect.  Disabling reflection for a key does not affect reflection\n"
   1006 "of any subkeys.");
   1007 
   1008 #define WINREG_DISABLEREFLECTIONKEY_METHODDEF    \
   1009     {"DisableReflectionKey", (PyCFunction)winreg_DisableReflectionKey, METH_O, winreg_DisableReflectionKey__doc__},
   1010 
   1011 static PyObject *
   1012 winreg_DisableReflectionKey_impl(PyObject *module, HKEY key);
   1013 
   1014 static PyObject *
   1015 winreg_DisableReflectionKey(PyObject *module, PyObject *arg)
   1016 {
   1017     PyObject *return_value = NULL;
   1018     HKEY key;
   1019 
   1020     if (!PyArg_Parse(arg, "O&:DisableReflectionKey", clinic_HKEY_converter, &key)) {
   1021         goto exit;
   1022     }
   1023     return_value = winreg_DisableReflectionKey_impl(module, key);
   1024 
   1025 exit:
   1026     return return_value;
   1027 }
   1028 
   1029 PyDoc_STRVAR(winreg_EnableReflectionKey__doc__,
   1030 "EnableReflectionKey($module, key, /)\n"
   1031 "--\n"
   1032 "\n"
   1033 "Restores registry reflection for the specified disabled key.\n"
   1034 "\n"
   1035 "  key\n"
   1036 "    An already open key, or any one of the predefined HKEY_* constants.\n"
   1037 "\n"
   1038 "Will generally raise NotImplemented if executed on a 32bit OS.\n"
   1039 "Restoring reflection for a key does not affect reflection of any\n"
   1040 "subkeys.");
   1041 
   1042 #define WINREG_ENABLEREFLECTIONKEY_METHODDEF    \
   1043     {"EnableReflectionKey", (PyCFunction)winreg_EnableReflectionKey, METH_O, winreg_EnableReflectionKey__doc__},
   1044 
   1045 static PyObject *
   1046 winreg_EnableReflectionKey_impl(PyObject *module, HKEY key);
   1047 
   1048 static PyObject *
   1049 winreg_EnableReflectionKey(PyObject *module, PyObject *arg)
   1050 {
   1051     PyObject *return_value = NULL;
   1052     HKEY key;
   1053 
   1054     if (!PyArg_Parse(arg, "O&:EnableReflectionKey", clinic_HKEY_converter, &key)) {
   1055         goto exit;
   1056     }
   1057     return_value = winreg_EnableReflectionKey_impl(module, key);
   1058 
   1059 exit:
   1060     return return_value;
   1061 }
   1062 
   1063 PyDoc_STRVAR(winreg_QueryReflectionKey__doc__,
   1064 "QueryReflectionKey($module, key, /)\n"
   1065 "--\n"
   1066 "\n"
   1067 "Returns the reflection state for the specified key as a bool.\n"
   1068 "\n"
   1069 "  key\n"
   1070 "    An already open key, or any one of the predefined HKEY_* constants.\n"
   1071 "\n"
   1072 "Will generally raise NotImplemented if executed on a 32bit OS.");
   1073 
   1074 #define WINREG_QUERYREFLECTIONKEY_METHODDEF    \
   1075     {"QueryReflectionKey", (PyCFunction)winreg_QueryReflectionKey, METH_O, winreg_QueryReflectionKey__doc__},
   1076 
   1077 static PyObject *
   1078 winreg_QueryReflectionKey_impl(PyObject *module, HKEY key);
   1079 
   1080 static PyObject *
   1081 winreg_QueryReflectionKey(PyObject *module, PyObject *arg)
   1082 {
   1083     PyObject *return_value = NULL;
   1084     HKEY key;
   1085 
   1086     if (!PyArg_Parse(arg, "O&:QueryReflectionKey", clinic_HKEY_converter, &key)) {
   1087         goto exit;
   1088     }
   1089     return_value = winreg_QueryReflectionKey_impl(module, key);
   1090 
   1091 exit:
   1092     return return_value;
   1093 }
   1094 /*[clinic end generated code: output=16dd06be6e14b86e input=a9049054013a1b77]*/
   1095