annotate PC/_winreg.c @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents b36cb4602e21
children ccbb16719540
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /*
13131
05cc45d57a7f Update the module name to _winreg, pending checkin of Paul Prescod's
Fred Drake <fdrake@acm.org>
parents: 12901
diff changeset
2 _winreg.c
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 Windows Registry access module for Python.
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 * Simple registry access written by Mark Hammond in win32api
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
7 module circa 1995.
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 * Bill Tutt expanded the support significantly not long after.
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 * Numerous other people have submitted patches since then.
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 * Ripped from win32api module 03-Feb-2000 by Mark Hammond, and
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 basic Unicode support added.
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 */
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 #include "Python.h"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 #include "structmember.h"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 #include "malloc.h" /* for alloca */
41884
389077a54fce Include <windows.h> after python.h, so that WINNT is properly set before windows.h is included. Fixes warnings in PC builds.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 41525
diff changeset
18 #include "windows.h"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 static BOOL PyHKEY_AsHKEY(PyObject *ob, HKEY *pRes, BOOL bNoneOK);
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 static PyObject *PyHKEY_FromHKEY(HKEY h);
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 static BOOL PyHKEY_Close(PyObject *obHandle);
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 static char errNotAHandle[] = "Object is not a handle";
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 /* The win32api module reports the function name that failed,
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 but this concept is not in the Python core.
55049
74c0a78114ae Merged revisions 69846 via svnmerge from
Jesus Cea <jcea@jcea.es>
parents: 47527
diff changeset
28 Hopefully it will one day, and in the meantime I don't
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 want to lose this info...
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 */
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 #define PyErr_SetFromWindowsErrWithFunction(rc, fnname) \
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
32 PyErr_SetFromWindowsErr(rc)
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 /* Forward declares */
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 /* Doc strings */
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
37 PyDoc_STRVAR(module_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 "This module provides access to the Windows registry API.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 "Functions:\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 "CloseKey() - Closes a registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 "ConnectRegistry() - Establishes a connection to a predefined registry handle\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 " on another computer.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 "CreateKey() - Creates the specified key, or opens it if it already exists.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 "DeleteKey() - Deletes the specified key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 "DeleteValue() - Removes a named value from the specified registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 "EnumKey() - Enumerates subkeys of the specified open registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 "EnumValue() - Enumerates values of the specified open registry key.\n"
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
50 "ExpandEnvironmentStrings() - Expand the env strings in a REG_EXPAND_SZ string.\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 "FlushKey() - Writes all the attributes of the specified key to the registry.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 "LoadKey() - Creates a subkey under HKEY_USER or HKEY_LOCAL_MACHINE and stores\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 " registration information from a specified file into that subkey.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 "OpenKey() - Alias for <om win32api.RegOpenKeyEx>\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 "OpenKeyEx() - Opens the specified key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 "QueryValue() - Retrieves the value associated with the unnamed value for a\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 " specified key in the registry.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 "QueryValueEx() - Retrieves the type and data for a specified value name\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 " associated with an open registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 "QueryInfoKey() - Returns information about the specified key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 "SaveKey() - Saves the specified key, and all its subkeys a file.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 "SetValue() - Associates a value with a specified key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 "SetValueEx() - Stores data in the value field of an open registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 "Special objects:\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 "HKEYType -- type object for HKEY objects\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 "error -- exception raised for Win32 errors\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 "Integer constants:\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 "Many constants are defined - see the documentation for each function\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
72 "to see what constants are used, and where.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
73
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
74
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
75 PyDoc_STRVAR(CloseKey_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 "CloseKey(hkey) - Closes a previously opened registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 "The hkey argument specifies a previously opened key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 "Note that if the key is not closed using this method, it will be\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
81 "closed when the hkey object is destroyed by Python.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
83 PyDoc_STRVAR(ConnectRegistry_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 "key = ConnectRegistry(computer_name, key) - "
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 "Establishes a connection to a predefined registry handle on another computer.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 "computer_name is the name of the remote computer, of the form \\\\computername.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 " If None, the local computer is used.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 "key is the predefined handle to connect to.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 "The return value is the handle of the opened key.\n"
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
92 "If the function fails, a WindowsError exception is raised.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
93
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
94 PyDoc_STRVAR(CreateKey_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 "key = CreateKey(key, sub_key) - Creates or opens the specified key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 "key is an already open key, or one of the predefined HKEY_* constants\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 "sub_key is a string that names the key this method opens or creates.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 " If key is one of the predefined keys, sub_key may be None. In that case,\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 " the handle returned is the same key handle passed in to the function.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 "If the key already exists, this function opens the existing key\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 "The return value is the handle of the opened key.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
105 "If the function fails, an exception is raised.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
106
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
107 PyDoc_STRVAR(CreateKeyEx_doc,
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
108 "key = CreateKeyEx(key, sub_key, res, sam) - Creates or opens the specified key.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
109 "\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
110 "key is an already open key, or one of the predefined HKEY_* constants\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
111 "sub_key is a string that names the key this method opens or creates.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
112 "res is a reserved integer, and must be zero. Default is zero.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
113 "sam is an integer that specifies an access mask that describes the desired\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
114 " If key is one of the predefined keys, sub_key may be None. In that case,\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
115 " the handle returned is the same key handle passed in to the function.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
116 "\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
117 "If the key already exists, this function opens the existing key\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
118 "\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
119 "The return value is the handle of the opened key.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
120 "If the function fails, an exception is raised.");
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
121
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
122 PyDoc_STRVAR(DeleteKey_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 "DeleteKey(key, sub_key) - Deletes the specified key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 "sub_key is a string that must be a subkey of the key identified by the key parameter.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 " This value must not be None, and the key may not have subkeys.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 "This method can not delete keys with subkeys.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 "If the method succeeds, the entire key, including all of its values,\n"
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
132 "is removed. If the method fails, a WindowsError exception is raised.");
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
133
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
134 PyDoc_STRVAR(DeleteKeyEx_doc,
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
135 "DeleteKeyEx(key, sub_key, sam, res) - Deletes the specified key.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
136 "\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
137 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
138 "sub_key is a string that must be a subkey of the key identified by the key parameter.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
139 "res is a reserved integer, and must be zero. Default is zero.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
140 "sam is an integer that specifies an access mask that describes the desired\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
141 " This value must not be None, and the key may not have subkeys.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
142 "\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
143 "This method can not delete keys with subkeys.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
144 "\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
145 "If the method succeeds, the entire key, including all of its values,\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
146 "is removed. If the method fails, a WindowsError exception is raised.\n"
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
147 "On unsupported Windows versions, NotImplementedError is raised.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
148
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
149 PyDoc_STRVAR(DeleteValue_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 "DeleteValue(key, value) - Removes a named value from a registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
153 "value is a string that identifies the value to remove.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
154
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
155 PyDoc_STRVAR(EnumKey_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 "string = EnumKey(key, index) - Enumerates subkeys of an open registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 "index is an integer that identifies the index of the key to retrieve.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 "The function retrieves the name of one subkey each time it is called.\n"
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
162 "It is typically called repeatedly until a WindowsError exception is\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
163 "raised, indicating no more values are available.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
164
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
165 PyDoc_STRVAR(EnumValue_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 "tuple = EnumValue(key, index) - Enumerates values of an open registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 "index is an integer that identifies the index of the value to retrieve.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 "The function retrieves the name of one subkey each time it is called.\n"
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
171 "It is typically called repeatedly, until a WindowsError exception\n"
12901
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
172 "is raised, indicating no more values.\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 "The result is a tuple of 3 items:\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 "value_name is a string that identifies the value.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 "value_data is an object that holds the value data, and whose type depends\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 " on the underlying registry type.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
178 "data_type is an integer that identifies the type of the value data.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
179
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
180 PyDoc_STRVAR(ExpandEnvironmentStrings_doc,
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
181 "string = ExpandEnvironmentStrings(string) - Expand environment vars.\n");
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
182
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
183 PyDoc_STRVAR(FlushKey_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 "FlushKey(key) - Writes all the attributes of a key to the registry.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 "It is not necessary to call RegFlushKey to change a key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 "Registry changes are flushed to disk by the registry using its lazy flusher.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 "Registry changes are also flushed to disk at system shutdown.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 "Unlike CloseKey(), the FlushKey() method returns only when all the data has\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 "been written to the registry.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 "An application should only call FlushKey() if it requires absolute certainty that registry changes are on disk.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
194 "If you don't know whether a FlushKey() call is required, it probably isn't.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
195
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
196 PyDoc_STRVAR(LoadKey_doc,
12901
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
197 "LoadKey(key, sub_key, file_name) - Creates a subkey under the specified key\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 "and stores registration information from a specified file into that subkey.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 "sub_key is a string that identifies the sub_key to load\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 "file_name is the name of the file to load registry data from.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 " This file must have been created with the SaveKey() function.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 " Under the file allocation table (FAT) file system, the filename may not\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 "have an extension.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 "A call to LoadKey() fails if the calling process does not have the\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 "SE_RESTORE_PRIVILEGE privilege.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 "If key is a handle returned by ConnectRegistry(), then the path specified\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 "in fileName is relative to the remote computer.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 "\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
213 "The docs imply key must be in the HKEY_USER or HKEY_LOCAL_MACHINE tree");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
214
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
215 PyDoc_STRVAR(OpenKey_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 "key = OpenKey(key, sub_key, res = 0, sam = KEY_READ) - Opens the specified key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 "sub_key is a string that identifies the sub_key to open\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 "res is a reserved integer, and must be zero. Default is zero.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 "sam is an integer that specifies an access mask that describes the desired\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 " security access for the key. Default is KEY_READ\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 "The result is a new handle to the specified key\n"
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
225 "If the function fails, a WindowsError exception is raised.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
226
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
227 PyDoc_STRVAR(OpenKeyEx_doc, "See OpenKey()");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
228
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
229 PyDoc_STRVAR(QueryInfoKey_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 "tuple = QueryInfoKey(key) - Returns information about a key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 "The result is a tuple of 3 items:"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 "An integer that identifies the number of sub keys this key has.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 "An integer that identifies the number of values this key has.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 "A long integer that identifies when the key was last modified (if available)\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
238 " as 100's of nanoseconds since Jan 1, 1600.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
239
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
240 PyDoc_STRVAR(QueryValue_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 "string = QueryValue(key, sub_key) - retrieves the unnamed value for a key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
12901
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
244 "sub_key is a string that holds the name of the subkey with which the value\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 " is associated. If this parameter is None or empty, the function retrieves\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 " the value set by the SetValue() method for the key identified by key."
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
247 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
248 "Values in the registry have name, type, and data components. This method\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 "retrieves the data for a key's first value that has a NULL name.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
250 "But the underlying API call doesn't return the type, Lame Lame Lame, DONT USE THIS!!!");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
251
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
252 PyDoc_STRVAR(QueryValueEx_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 "value,type_id = QueryValueEx(key, value_name) - Retrieves the type and data for a specified value name associated with an open registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
256 "value_name is a string indicating the value to query");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
257
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
258 PyDoc_STRVAR(SaveKey_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 "SaveKey(key, file_name) - Saves the specified key, and all its subkeys to the specified file.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 "file_name is the name of the file to save registry data to.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 " This file cannot already exist. If this filename includes an extension,\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 " it cannot be used on file allocation table (FAT) file systems by the\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 " LoadKey(), ReplaceKey() or RestoreKey() methods.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 "If key represents a key on a remote computer, the path described by\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 "file_name is relative to the remote computer.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 "The caller of this method must possess the SeBackupPrivilege security privilege.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
270 "This function passes NULL for security_attributes to the API.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
271
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
272 PyDoc_STRVAR(SetValue_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 "SetValue(key, sub_key, type, value) - Associates a value with a specified key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 "sub_key is a string that names the subkey with which the value is associated.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 "type is an integer that specifies the type of the data. Currently this\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 " must be REG_SZ, meaning only strings are supported.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
279 "value is a string that specifies the new value.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 "If the key specified by the sub_key parameter does not exist, the SetValue\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 "function creates it.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 "Value lengths are limited by available memory. Long values (more than\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 "2048 bytes) should be stored as files with the filenames stored in \n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
286 "the configuration registry. This helps the registry perform efficiently.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 "The key identified by the key parameter must have been opened with\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
289 "KEY_SET_VALUE access.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
290
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
291 PyDoc_STRVAR(SetValueEx_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 "SetValueEx(key, value_name, reserved, type, value) - Stores data in the value field of an open registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 "key is an already open key, or any one of the predefined HKEY_* constants.\n"
27259
faf256a59ece Correct docstring for SetValueEx()
Mark Hammond <mhammond@skippinet.com.au>
parents: 26735
diff changeset
295 "value_name is a string containing the name of the value to set, or None\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 "type is an integer that specifies the type of the data. This should be one of:\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
297 " REG_BINARY -- Binary data in any form.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 " REG_DWORD -- A 32-bit number.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 " REG_DWORD_LITTLE_ENDIAN -- A 32-bit number in little-endian format.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 " REG_DWORD_BIG_ENDIAN -- A 32-bit number in big-endian format.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 " REG_EXPAND_SZ -- A null-terminated string that contains unexpanded references\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 " to environment variables (for example, %PATH%).\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
303 " REG_LINK -- A Unicode symbolic link.\n"
12901
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
304 " REG_MULTI_SZ -- An sequence of null-terminated strings, terminated by\n"
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
305 " two null characters. Note that Python handles this\n"
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
306 " termination automatically.\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 " REG_NONE -- No defined value type.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 " REG_RESOURCE_LIST -- A device-driver resource list.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 " REG_SZ -- A null-terminated string.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 "reserved can be anything - zero is always passed to the API.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 "value is a string that specifies the new value.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 "This method can also set additional value and type information for the\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 "specified key. The key identified by the key parameter must have been\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 "opened with KEY_SET_VALUE access.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 "To open the key, use the CreateKeyEx() or OpenKeyEx() methods.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 "Value lengths are limited by available memory. Long values (more than\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 "2048 bytes) should be stored as files with the filenames stored in \n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
321 "the configuration registry. This helps the registry perform efficiently.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
322
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
323 PyDoc_STRVAR(DisableReflectionKey_doc,
46352
63a0d33c4cd3 Typographical fix: 32bit -> 32-bit, 64bit -> 64-bit
Andrew M. Kuchling <amk@amk.ca>
parents: 46320
diff changeset
324 "Disables registry reflection for 32-bit processes running on a 64-bit\n"
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
325 "Operating System. Will generally raise NotImplemented if executed on\n"
46352
63a0d33c4cd3 Typographical fix: 32bit -> 32-bit, 64bit -> 64-bit
Andrew M. Kuchling <amk@amk.ca>
parents: 46320
diff changeset
326 "a 32-bit Operating System.\n"
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
327 "If the key is not on the reflection list, the function succeeds but has no effect.\n"
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
328 "Disabling reflection for a key does not affect reflection of any subkeys.");
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
329
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
330 PyDoc_STRVAR(EnableReflectionKey_doc,
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
331 "Restores registry reflection for the specified disabled key.\n"
46352
63a0d33c4cd3 Typographical fix: 32bit -> 32-bit, 64bit -> 64-bit
Andrew M. Kuchling <amk@amk.ca>
parents: 46320
diff changeset
332 "Will generally raise NotImplemented if executed on a 32-bit Operating System.\n"
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
333 "Restoring reflection for a key does not affect reflection of any subkeys.");
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
334
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
335 PyDoc_STRVAR(QueryReflectionKey_doc,
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
336 "bool = QueryReflectionKey(hkey) - Determines the reflection state for the specified key.\n"
46352
63a0d33c4cd3 Typographical fix: 32bit -> 32-bit, 64bit -> 64-bit
Andrew M. Kuchling <amk@amk.ca>
parents: 46320
diff changeset
337 "Will generally raise NotImplemented if executed on a 32-bit Operating System.\n");
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
338
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
339 /* PyHKEY docstrings */
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
340 PyDoc_STRVAR(PyHKEY_doc,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 "PyHKEY Object - A Python object, representing a win32 registry key.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 "\n"
12901
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
343 "This object wraps a Windows HKEY object, automatically closing it when\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
344 "the object is destroyed. To guarantee cleanup, you can call either\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
345 "the Close() method on the PyHKEY, or the CloseKey() method.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
346 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
347 "All functions which accept a handle object also accept an integer - \n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
348 "however, use of the handle object is encouraged.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
349 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
350 "Functions:\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
351 "Close() - Closes the underlying handle.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
352 "Detach() - Returns the integer Win32 handle, detaching it from the object\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 "Properties:\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 "handle - The integer Win32 handle.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
356 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
357 "Operations:\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
358 "__nonzero__ - Handles with an open object return true, otherwise false.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
359 "__int__ - Converting a handle to an integer returns the Win32 handle.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
360 "__cmp__ - Handle objects are compared using the handle value.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
361
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
362
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
363 PyDoc_STRVAR(PyHKEY_Close_doc,
12901
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
364 "key.Close() - Closes the underlying Windows handle.\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
365 "\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
366 "If the handle is already closed, no error is raised.");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
367
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
368 PyDoc_STRVAR(PyHKEY_Detach_doc,
12901
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
369 "int = key.Detach() - Detaches the Windows handle from the handle object.\n"
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
370 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
371 "The result is the value of the handle before it is detached. If the\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
372 "handle is already detached, this will return zero.\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
373 "\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
374 "After calling this function, the handle is effectively invalidated,\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
375 "but the handle is not closed. You would call this function when you\n"
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
376 "need the underlying win32 handle to exist beyond the lifetime of the\n"
12901
eff2410685cc Cleanup a few docstrings.
Mark Hammond <mhammond@skippinet.com.au>
parents: 12576
diff changeset
377 "handle object.\n"
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22705
diff changeset
378 "On 64 bit windows, the result of this function is a long integer");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
379
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
380
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
381 /************************************************************************
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
382
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
383 The PyHKEY object definition
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
384
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 ************************************************************************/
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
386 typedef struct {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
387 PyObject_VAR_HEAD
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
388 HKEY hkey;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 } PyHKEYObject;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
390
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
391 #define PyHKEY_Check(op) ((op)->ob_type == &PyHKEY_Type)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
392
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
393 static char *failMsg = "bad operand type";
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
394
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
395 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
396 PyHKEY_unaryFailureFunc(PyObject *ob)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
397 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
398 PyErr_SetString(PyExc_TypeError, failMsg);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
399 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
401 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 PyHKEY_binaryFailureFunc(PyObject *ob1, PyObject *ob2)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
403 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
404 PyErr_SetString(PyExc_TypeError, failMsg);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
405 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
406 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
407 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
408 PyHKEY_ternaryFailureFunc(PyObject *ob1, PyObject *ob2, PyObject *ob3)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
409 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
410 PyErr_SetString(PyExc_TypeError, failMsg);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
411 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
412 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
413
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
414 static void
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
415 PyHKEY_deallocFunc(PyObject *ob)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
416 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
417 /* Can not call PyHKEY_Close, as the ob->tp_type
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
418 has already been cleared, thus causing the type
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
419 check to fail!
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
420 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
421 PyHKEYObject *obkey = (PyHKEYObject *)ob;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
422 if (obkey->hkey)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
423 RegCloseKey((HKEY)obkey->hkey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
424 PyObject_DEL(ob);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
425 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
426
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
427 static int
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
428 PyHKEY_nonzeroFunc(PyObject *ob)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
429 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
430 return ((PyHKEYObject *)ob)->hkey != 0;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
431 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
432
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
433 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
434 PyHKEY_intFunc(PyObject *ob)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
436 PyHKEYObject *pyhkey = (PyHKEYObject *)ob;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
437 return PyLong_FromVoidPtr(pyhkey->hkey);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
438 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
439
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
440 static int
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
441 PyHKEY_printFunc(PyObject *ob, FILE *fp, int flags)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
442 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
443 PyHKEYObject *pyhkey = (PyHKEYObject *)ob;
50781
a858b61db324 #4807: Remove a wrong usage of wsprintf in the winreg module
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47527
diff changeset
444 fprintf(fp, "<PyHKEY at %p (%p)>",
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
445 ob, pyhkey->hkey);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
446 return 0;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
447 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
448
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
449 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
450 PyHKEY_strFunc(PyObject *ob)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
451 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
452 PyHKEYObject *pyhkey = (PyHKEYObject *)ob;
50781
a858b61db324 #4807: Remove a wrong usage of wsprintf in the winreg module
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47527
diff changeset
453 return PyString_FromFormat("<PyHKEY:%p>", pyhkey->hkey);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
454 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
455
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
456 static int
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
457 PyHKEY_compareFunc(PyObject *ob1, PyObject *ob2)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
458 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
459 PyHKEYObject *pyhkey1 = (PyHKEYObject *)ob1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
460 PyHKEYObject *pyhkey2 = (PyHKEYObject *)ob2;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
461 return pyhkey1 == pyhkey2 ? 0 :
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
462 (pyhkey1 < pyhkey2 ? -1 : 1);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
463 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
464
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
465 static long
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
466 PyHKEY_hashFunc(PyObject *ob)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
467 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
468 /* Just use the address.
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
469 XXX - should we use the handle value?
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
470 */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
471 return _Py_HashPointer(ob);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
472 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
473
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
474
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
475 static PyNumberMethods PyHKEY_NumberMethods =
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
476 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
477 PyHKEY_binaryFailureFunc, /* nb_add */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
478 PyHKEY_binaryFailureFunc, /* nb_subtract */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
479 PyHKEY_binaryFailureFunc, /* nb_multiply */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
480 PyHKEY_binaryFailureFunc, /* nb_divide */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
481 PyHKEY_binaryFailureFunc, /* nb_remainder */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
482 PyHKEY_binaryFailureFunc, /* nb_divmod */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
483 PyHKEY_ternaryFailureFunc, /* nb_power */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
484 PyHKEY_unaryFailureFunc, /* nb_negative */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
485 PyHKEY_unaryFailureFunc, /* nb_positive */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
486 PyHKEY_unaryFailureFunc, /* nb_absolute */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
487 PyHKEY_nonzeroFunc, /* nb_nonzero */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
488 PyHKEY_unaryFailureFunc, /* nb_invert */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
489 PyHKEY_binaryFailureFunc, /* nb_lshift */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
490 PyHKEY_binaryFailureFunc, /* nb_rshift */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
491 PyHKEY_binaryFailureFunc, /* nb_and */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
492 PyHKEY_binaryFailureFunc, /* nb_xor */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
493 PyHKEY_binaryFailureFunc, /* nb_or */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
494 0, /* nb_coerce (allowed to be zero) */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
495 PyHKEY_intFunc, /* nb_int */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
496 PyHKEY_unaryFailureFunc, /* nb_long */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
497 PyHKEY_unaryFailureFunc, /* nb_float */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
498 PyHKEY_unaryFailureFunc, /* nb_oct */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
499 PyHKEY_unaryFailureFunc, /* nb_hex */
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
500 };
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
501
54652
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
502 static PyObject *PyHKEY_CloseMethod(PyObject *self, PyObject *args);
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
503 static PyObject *PyHKEY_DetachMethod(PyObject *self, PyObject *args);
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
504 static PyObject *PyHKEY_Enter(PyObject *self);
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
505 static PyObject *PyHKEY_Exit(PyObject *self, PyObject *args);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
506
54652
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
507 static struct PyMethodDef PyHKEY_methods[] = {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
508 {"Close", PyHKEY_CloseMethod, METH_VARARGS, PyHKEY_Close_doc},
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
509 {"Detach", PyHKEY_DetachMethod, METH_VARARGS, PyHKEY_Detach_doc},
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
510 {"__enter__", (PyCFunction)PyHKEY_Enter, METH_NOARGS, NULL},
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
511 {"__exit__", PyHKEY_Exit, METH_VARARGS, NULL},
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
512 {NULL}
54652
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
513 };
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
514
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
515 static PyMemberDef PyHKEY_memberlist[] = {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
516 {"handle", T_PYSSIZET, offsetof(PyHKEYObject, hkey), READONLY},
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
517 {NULL} /* Sentinel */
54652
9145f58f7499 #6201: Fix test_winreg on Windows:
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 51775
diff changeset
518 };
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
519
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
520 /* The type itself */
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
521 PyTypeObject PyHKEY_Type =
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
522 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
523 PyVarObject_HEAD_INIT(0, 0) /* fill in type at module init */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
524 "PyHKEY",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
525 sizeof(PyHKEYObject),
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
526 0,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
527 PyHKEY_deallocFunc, /* tp_dealloc */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
528 PyHKEY_printFunc, /* tp_print */
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
529 0, /* tp_getattr */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
530 0, /* tp_setattr */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
531 PyHKEY_compareFunc, /* tp_compare */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
532 0, /* tp_repr */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
533 &PyHKEY_NumberMethods, /* tp_as_number */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
534 0, /* tp_as_sequence */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
535 0, /* tp_as_mapping */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
536 PyHKEY_hashFunc, /* tp_hash */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
537 0, /* tp_call */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
538 PyHKEY_strFunc, /* tp_str */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
539 0, /* tp_getattro */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
540 0, /* tp_setattro */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
541 0, /* tp_as_buffer */
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
542 Py_TPFLAGS_DEFAULT, /* tp_flags */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
543 PyHKEY_doc, /* tp_doc */
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
544 0, /* tp_traverse */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
545 0, /* tp_clear */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
546 0, /* tp_richcompare */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
547 0, /* tp_weaklistoffset */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
548 0, /* tp_iter */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
549 0, /* tp_iternext */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
550 PyHKEY_methods, /* tp_methods */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
551 PyHKEY_memberlist, /* tp_members */
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
552 };
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
553
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
554 /************************************************************************
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
555
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
556 The PyHKEY object methods
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
557
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
558 ************************************************************************/
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
559 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
560 PyHKEY_CloseMethod(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
561 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
562 if (!PyArg_ParseTuple(args, ":Close"))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
563 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
564 if (!PyHKEY_Close(self))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
565 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
566 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
567 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
568 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
569
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
570 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
571 PyHKEY_DetachMethod(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
572 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
573 void* ret;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
574 PyHKEYObject *pThis = (PyHKEYObject *)self;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
575 if (!PyArg_ParseTuple(args, ":Detach"))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
576 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
577 ret = (void*)pThis->hkey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
578 pThis->hkey = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
579 return PyLong_FromVoidPtr(ret);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
580 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
581
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
582 static PyObject *
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
583 PyHKEY_Enter(PyObject *self)
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
584 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
585 Py_XINCREF(self);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
586 return self;
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
587 }
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
588
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
589 static PyObject *
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
590 PyHKEY_Exit(PyObject *self, PyObject *args)
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
591 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
592 if (!PyHKEY_Close(self))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
593 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
594 Py_RETURN_NONE;
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
595 }
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
596
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
597
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
598 /************************************************************************
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
599 The public PyHKEY API (well, not public yet :-)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
600 ************************************************************************/
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
601 PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
602 PyHKEY_New(HKEY hInit)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
603 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
604 PyHKEYObject *key = PyObject_NEW(PyHKEYObject, &PyHKEY_Type);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
605 if (key)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
606 key->hkey = hInit;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
607 return (PyObject *)key;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
608 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
609
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
610 BOOL
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
611 PyHKEY_Close(PyObject *ob_handle)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
612 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
613 LONG rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
614 PyHKEYObject *key;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
615
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
616 if (!PyHKEY_Check(ob_handle)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
617 PyErr_SetString(PyExc_TypeError, "bad operand type");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
618 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
619 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
620 key = (PyHKEYObject *)ob_handle;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
621 rc = key->hkey ? RegCloseKey((HKEY)key->hkey) : ERROR_SUCCESS;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
622 key->hkey = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
623 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
624 PyErr_SetFromWindowsErrWithFunction(rc, "RegCloseKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
625 return rc == ERROR_SUCCESS;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
626 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
627
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
628 BOOL
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
629 PyHKEY_AsHKEY(PyObject *ob, HKEY *pHANDLE, BOOL bNoneOK)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
630 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
631 if (ob == Py_None) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
632 if (!bNoneOK) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
633 PyErr_SetString(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
634 PyExc_TypeError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
635 "None is not a valid HKEY in this context");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
636 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
637 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
638 *pHANDLE = (HKEY)0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
639 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
640 else if (PyHKEY_Check(ob)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
641 PyHKEYObject *pH = (PyHKEYObject *)ob;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
642 *pHANDLE = pH->hkey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
643 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
644 else if (PyInt_Check(ob) || PyLong_Check(ob)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
645 /* We also support integers */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
646 PyErr_Clear();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
647 *pHANDLE = (HKEY)PyLong_AsVoidPtr(ob);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
648 if (PyErr_Occurred())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
649 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
650 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
651 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
652 PyErr_SetString(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
653 PyExc_TypeError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
654 "The object is not a PyHKEY object");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
655 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
656 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
657 return TRUE;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
658 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
659
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
660 PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
661 PyHKEY_FromHKEY(HKEY h)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
662 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
663 PyHKEYObject *op;
12576
1c7c2dd1beb1 Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents: 12076
diff changeset
664
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
665 /* Inline PyObject_New */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
666 op = (PyHKEYObject *) PyObject_MALLOC(sizeof(PyHKEYObject));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
667 if (op == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
668 return PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
669 PyObject_INIT(op, &PyHKEY_Type);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
670 op->hkey = h;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
671 return (PyObject *)op;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
672 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
673
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
674
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
675 /************************************************************************
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
676 The module methods
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
677 ************************************************************************/
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
678 BOOL
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
679 PyWinObject_CloseHKEY(PyObject *obHandle)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
680 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
681 BOOL ok;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
682 if (PyHKEY_Check(obHandle)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
683 ok = PyHKEY_Close(obHandle);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
684 }
13233
86c9f691f379 [*** Not tested as I don't have Windows running right now! ***]
Fred Drake <fdrake@acm.org>
parents: 13141
diff changeset
685 #if SIZEOF_LONG >= SIZEOF_HKEY
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
686 else if (PyInt_Check(obHandle)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
687 long rc = RegCloseKey((HKEY)PyInt_AsLong(obHandle));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
688 ok = (rc == ERROR_SUCCESS);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
689 if (!ok)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
690 PyErr_SetFromWindowsErrWithFunction(rc, "RegCloseKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
691 }
13233
86c9f691f379 [*** Not tested as I don't have Windows running right now! ***]
Fred Drake <fdrake@acm.org>
parents: 13141
diff changeset
692 #else
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
693 else if (PyLong_Check(obHandle)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
694 long rc = RegCloseKey((HKEY)PyLong_AsVoidPtr(obHandle));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
695 ok = (rc == ERROR_SUCCESS);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
696 if (!ok)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
697 PyErr_SetFromWindowsErrWithFunction(rc, "RegCloseKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
698 }
13233
86c9f691f379 [*** Not tested as I don't have Windows running right now! ***]
Fred Drake <fdrake@acm.org>
parents: 13141
diff changeset
699 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
700 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
701 PyErr_SetString(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
702 PyExc_TypeError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
703 "A handle must be a HKEY object or an integer");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
704 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
705 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
706 return ok;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
707 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
708
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
709
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
710 /*
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
711 Private Helper functions for the registry interfaces
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
712
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
713 ** Note that fixupMultiSZ and countString have both had changes
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
714 ** made to support "incorrect strings". The registry specification
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
715 ** calls for strings to be terminated with 2 null bytes. It seems
55049
74c0a78114ae Merged revisions 69846 via svnmerge from
Jesus Cea <jcea@jcea.es>
parents: 47527
diff changeset
716 ** some commercial packages install strings which don't conform,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
717 ** causing this code to fail - however, "regedit" etc still work
55049
74c0a78114ae Merged revisions 69846 via svnmerge from
Jesus Cea <jcea@jcea.es>
parents: 47527
diff changeset
718 ** with these strings (ie only we don't!).
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
719 */
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
720 static void
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
721 fixupMultiSZ(char **str, char *data, int len)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
722 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
723 char *P;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
724 int i;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
725 char *Q;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
726
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
727 Q = data + len;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
728 for (P = data, i = 0; P < Q && *P != '\0'; P++, i++) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
729 str[i] = P;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
730 for(; *P != '\0'; P++)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
731 ;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
732 }
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
733 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
734
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
735 static int
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
736 countStrings(char *data, int len)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
737 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
738 int strings;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
739 char *P;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
740 char *Q = data + len;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
741
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
742 for (P = data, strings = 0; P < Q && *P != '\0'; P++, strings++)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
743 for (; P < Q && *P != '\0'; P++)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
744 ;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
745 return strings;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
746 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
747
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
748 /* Convert PyObject into Registry data.
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
749 Allocates space as needed. */
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
750 static BOOL
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
751 Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
752 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
753 Py_ssize_t i,j;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
754 switch (typ) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
755 case REG_DWORD:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
756 if (value != Py_None && !PyInt_Check(value))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
757 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
758 *retDataBuf = (BYTE *)PyMem_NEW(DWORD, 1);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
759 if (*retDataBuf==NULL){
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
760 PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
761 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
762 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
763 *retDataSize = sizeof(DWORD);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
764 if (value == Py_None) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
765 DWORD zero = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
766 memcpy(*retDataBuf, &zero, sizeof(DWORD));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
767 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
768 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
769 memcpy(*retDataBuf,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
770 &PyInt_AS_LONG((PyIntObject *)value),
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
771 sizeof(DWORD));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
772 break;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
773 case REG_SZ:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
774 case REG_EXPAND_SZ:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
775 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
776 int need_decref = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
777 if (value == Py_None)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
778 *retDataSize = 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
779 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
780 if (PyUnicode_Check(value)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
781 value = PyUnicode_AsEncodedString(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
782 value,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
783 "mbcs",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
784 NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
785 if (value==NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
786 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
787 need_decref = 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
788 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
789 if (!PyString_Check(value))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
790 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
791 *retDataSize = 1 + strlen(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
792 PyString_AS_STRING(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
793 (PyStringObject *)value));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
794 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
795 *retDataBuf = (BYTE *)PyMem_NEW(DWORD, *retDataSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
796 if (*retDataBuf==NULL){
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
797 PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
798 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
799 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
800 if (value == Py_None)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
801 strcpy((char *)*retDataBuf, "");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
802 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
803 strcpy((char *)*retDataBuf,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
804 PyString_AS_STRING(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
805 (PyStringObject *)value));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
806 if (need_decref)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
807 Py_DECREF(value);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
808 break;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
809 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
810 case REG_MULTI_SZ:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
811 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
812 DWORD size = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
813 char *P;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
814 PyObject **obs = NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
815
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
816 if (value == Py_None)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
817 i = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
818 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
819 if (!PyList_Check(value))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
820 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
821 i = PyList_Size(value);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
822 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
823 obs = malloc(sizeof(PyObject *) * i);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
824 memset(obs, 0, sizeof(PyObject *) * i);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
825 for (j = 0; j < i; j++)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
826 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
827 PyObject *t;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
828 t = PyList_GET_ITEM(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
829 (PyListObject *)value,j);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
830 if (PyString_Check(t)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
831 obs[j] = t;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
832 Py_INCREF(t);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
833 } else if (PyUnicode_Check(t)) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
834 obs[j] = PyUnicode_AsEncodedString(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
835 t,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
836 "mbcs",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
837 NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
838 if (obs[j]==NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
839 goto reg_multi_fail;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
840 } else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
841 goto reg_multi_fail;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
842 size += 1 + strlen(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
843 PyString_AS_STRING(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
844 (PyStringObject *)obs[j]));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
845 }
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
846
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
847 *retDataSize = size + 1;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
848 *retDataBuf = (BYTE *)PyMem_NEW(char,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
849 *retDataSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
850 if (*retDataBuf==NULL){
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
851 PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
852 goto reg_multi_fail;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
853 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
854 P = (char *)*retDataBuf;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
855
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
856 for (j = 0; j < i; j++)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
857 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
858 PyObject *t;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
859 t = obs[j];
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
860 strcpy(P,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
861 PyString_AS_STRING(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
862 (PyStringObject *)t));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
863 P += 1 + strlen(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
864 PyString_AS_STRING(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
865 (PyStringObject *)t));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
866 Py_DECREF(obs[j]);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
867 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
868 /* And doubly-terminate the list... */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
869 *P = '\0';
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
870 free(obs);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
871 break;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
872 reg_multi_fail:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
873 if (obs) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
874 for (j = 0; j < i; j++)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
875 Py_XDECREF(obs[j]);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
876
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
877 free(obs);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
878 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
879 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
880 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
881 case REG_BINARY:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
882 /* ALSO handle ALL unknown data types here. Even if we can't
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
883 support it natively, we should handle the bits. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
884 default:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
885 if (value == Py_None)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
886 *retDataSize = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
887 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
888 void *src_buf;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
889 PyBufferProcs *pb = value->ob_type->tp_as_buffer;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
890 if (pb==NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
891 PyErr_Format(PyExc_TypeError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
892 "Objects of type '%s' can not "
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
893 "be used as binary registry values",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
894 value->ob_type->tp_name);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
895 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
896 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
897 *retDataSize = (*pb->bf_getreadbuffer)(value, 0, &src_buf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
898 *retDataBuf = (BYTE *)PyMem_NEW(char,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
899 *retDataSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
900 if (*retDataBuf==NULL){
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
901 PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
902 return FALSE;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
903 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
904 memcpy(*retDataBuf, src_buf, *retDataSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
905 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
906 break;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
907 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
908 return TRUE;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
909 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
910
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
911 /* Convert Registry data into PyObject*/
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
912 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
913 Reg2Py(char *retDataBuf, DWORD retDataSize, DWORD typ)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
914 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
915 PyObject *obData;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
916
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
917 switch (typ) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
918 case REG_DWORD:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
919 if (retDataSize == 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
920 obData = Py_BuildValue("i", 0);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
921 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
922 obData = Py_BuildValue("i",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
923 *(int *)retDataBuf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
924 break;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
925 case REG_SZ:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
926 case REG_EXPAND_SZ:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
927 /* retDataBuf may or may not have a trailing NULL in
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
928 the buffer. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
929 if (retDataSize && retDataBuf[retDataSize-1] == '\0')
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
930 --retDataSize;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
931 if (retDataSize ==0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
932 retDataBuf = "";
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
933 obData = PyUnicode_DecodeMBCS(retDataBuf,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
934 retDataSize,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
935 NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
936 break;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
937 case REG_MULTI_SZ:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
938 if (retDataSize == 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
939 obData = PyList_New(0);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
940 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
941 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
942 int index = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
943 int s = countStrings(retDataBuf, retDataSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
944 char **str = (char **)malloc(sizeof(char *)*s);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
945 if (str == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
946 return PyErr_NoMemory();
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
947
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
948 fixupMultiSZ(str, retDataBuf, retDataSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
949 obData = PyList_New(s);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
950 if (obData == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
951 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
952 for (index = 0; index < s; index++)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
953 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
954 size_t len = _mbstrlen(str[index]);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
955 if (len > INT_MAX) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
956 PyErr_SetString(PyExc_OverflowError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
957 "registry string is too long for a Python string");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
958 Py_DECREF(obData);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
959 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
960 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
961 PyList_SetItem(obData,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
962 index,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
963 PyUnicode_DecodeMBCS(
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
964 (const char *)str[index],
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
965 (int)len,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
966 NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
967 );
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
968 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
969 free(str);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
970
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
971 break;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
972 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
973 case REG_BINARY:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
974 /* ALSO handle ALL unknown data types here. Even if we can't
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
975 support it natively, we should handle the bits. */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
976 default:
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
977 if (retDataSize == 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
978 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
979 obData = Py_None;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
980 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
981 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
982 obData = Py_BuildValue("s#",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
983 (char *)retDataBuf,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
984 retDataSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
985 break;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
986 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
987 if (obData == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
988 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
989 else
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
990 return obData;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
991 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
992
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
993 /* The Python methods */
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
994
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
995 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
996 PyCloseKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
997 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
998 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
999 if (!PyArg_ParseTuple(args, "O:CloseKey", &obKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1000 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1001 if (!PyHKEY_Close(obKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1002 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1003 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1004 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1005 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1006
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1007 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1008 PyConnectRegistry(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1009 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1010 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1011 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1012 char *szCompName = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1013 HKEY retKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1014 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1015 if (!PyArg_ParseTuple(args, "zO:ConnectRegistry", &szCompName, &obKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1016 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1017 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1018 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1019 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1020 rc = RegConnectRegistry(szCompName, hKey, &retKey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1021 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1022 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1023 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1024 "ConnectRegistry");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1025 return PyHKEY_FromHKEY(retKey);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1026 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1027
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1028 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1029 PyCreateKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1030 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1031 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1032 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1033 char *subKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1034 HKEY retKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1035 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1036 if (!PyArg_ParseTuple(args, "Oz:CreateKey", &obKey, &subKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1037 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1038 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1039 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1040 rc = RegCreateKey(hKey, subKey, &retKey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1041 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1042 return PyErr_SetFromWindowsErrWithFunction(rc, "CreateKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1043 return PyHKEY_FromHKEY(retKey);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1044 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1045
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1046 static PyObject *
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1047 PyCreateKeyEx(PyObject *self, PyObject *args)
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1048 {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1049 HKEY hKey;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1050 PyObject *obKey;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1051 char *subKey;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1052 HKEY retKey;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1053 int res = 0;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1054 REGSAM sam = KEY_WRITE;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1055 long rc;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1056 if (!PyArg_ParseTuple(args, "Oz|ii:CreateKeyEx", &obKey, &subKey,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1057 &res, &sam))
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1058 return NULL;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1059 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1060 return NULL;
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1061
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1062 rc = RegCreateKeyEx(hKey, subKey, res, NULL, (DWORD)NULL,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1063 sam, NULL, &retKey, NULL);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1064 if (rc != ERROR_SUCCESS)
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1065 return PyErr_SetFromWindowsErrWithFunction(rc, "CreateKeyEx");
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1066 return PyHKEY_FromHKEY(retKey);
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1067 }
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1068
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1069 static PyObject *
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1070 PyDeleteKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1071 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1072 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1073 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1074 char *subKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1075 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1076 if (!PyArg_ParseTuple(args, "Os:DeleteKey", &obKey, &subKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1077 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1078 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1079 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1080 rc = RegDeleteKey(hKey, subKey );
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1081 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1082 return PyErr_SetFromWindowsErrWithFunction(rc, "RegDeleteKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1083 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1084 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1085 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1086
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1087 static PyObject *
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1088 PyDeleteKeyEx(PyObject *self, PyObject *args)
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1089 {
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1090 HKEY hKey;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1091 PyObject *obKey;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1092 HMODULE hMod;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1093 typedef LONG (WINAPI *RDKEFunc)(HKEY, const char*, REGSAM, int);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1094 RDKEFunc pfn = NULL;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1095 char *subKey;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1096 long rc;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1097 int res = 0;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1098 REGSAM sam = KEY_WOW64_64KEY;
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1099
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1100 if (!PyArg_ParseTuple(args, "Os|ii:DeleteKeyEx",
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1101 &obKey, &subKey, &sam, &res))
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1102 return NULL;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1103 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1104 return NULL;
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1105
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1106 /* Only available on 64bit platforms, so we must load it
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1107 dynamically. */
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1108 hMod = GetModuleHandle("advapi32.dll");
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1109 if (hMod)
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1110 pfn = (RDKEFunc)GetProcAddress(hMod,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1111 "RegDeleteKeyExA");
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1112 if (!pfn) {
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1113 PyErr_SetString(PyExc_NotImplementedError,
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1114 "not implemented on this platform");
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1115 return NULL;
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1116 }
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1117 Py_BEGIN_ALLOW_THREADS
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1118 rc = (*pfn)(hKey, subKey, sam, res);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1119 Py_END_ALLOW_THREADS
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1120
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1121 if (rc != ERROR_SUCCESS)
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1122 return PyErr_SetFromWindowsErrWithFunction(rc, "RegDeleteKeyEx");
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1123 Py_INCREF(Py_None);
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1124 return Py_None;
60184
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1125 }
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1126
377b26d876e0 Implement #7347. Add CreateKeyEx, DeleteKeyEx, and update _winreg tests.
Brian Curtin <brian.curtin@gmail.com>
parents: 54652
diff changeset
1127 static PyObject *
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1128 PyDeleteValue(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1129 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1130 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1131 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1132 char *subKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1133 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1134 if (!PyArg_ParseTuple(args, "Oz:DeleteValue", &obKey, &subKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1135 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1136 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1137 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1138 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1139 rc = RegDeleteValue(hKey, subKey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1140 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1141 if (rc !=ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1142 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1143 "RegDeleteValue");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1144 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1145 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1146 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1147
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1148 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1149 PyEnumKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1150 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1151 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1152 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1153 int index;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1154 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1155 PyObject *retStr;
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1156
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1157 /* The Windows docs claim that the max key name length is 255
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1158 * characters, plus a terminating nul character. However,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1159 * empirical testing demonstrates that it is possible to
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1160 * create a 256 character key that is missing the terminating
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1161 * nul. RegEnumKeyEx requires a 257 character buffer to
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1162 * retrieve such a key name. */
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1163 char tmpbuf[257];
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1164 DWORD len = sizeof(tmpbuf); /* includes NULL terminator */
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1165
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1166 if (!PyArg_ParseTuple(args, "Oi:EnumKey", &obKey, &index))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1167 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1168 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1169 return NULL;
36586
2475fe95782d PyEnumKey(): Stop including the trailing NUL byte
Tim Peters <tim.peters@gmail.com>
parents: 36585
diff changeset
1170
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1171 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1172 rc = RegEnumKeyEx(hKey, index, tmpbuf, &len, NULL, NULL, NULL, NULL);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1173 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1174 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1175 return PyErr_SetFromWindowsErrWithFunction(rc, "RegEnumKeyEx");
36586
2475fe95782d PyEnumKey(): Stop including the trailing NUL byte
Tim Peters <tim.peters@gmail.com>
parents: 36585
diff changeset
1176
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1177 retStr = PyString_FromStringAndSize(tmpbuf, len);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1178 return retStr; /* can be NULL */
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1179 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1180
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1181 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1182 PyEnumValue(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1183 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1184 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1185 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1186 int index;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1187 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1188 char *retValueBuf;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1189 char *retDataBuf;
62196
27d9bcc7e661 Merged revisions 81847 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61923
diff changeset
1190 char *tmpBuf;
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1191 DWORD retValueSize, bufValueSize;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1192 DWORD retDataSize, bufDataSize;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1193 DWORD typ;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1194 PyObject *obData;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1195 PyObject *retVal;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1196
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1197 if (!PyArg_ParseTuple(args, "Oi:EnumValue", &obKey, &index))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1198 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1199 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1200 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1201
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1202 if ((rc = RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1203 NULL,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1204 &retValueSize, &retDataSize, NULL, NULL))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1205 != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1206 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1207 "RegQueryInfoKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1208 ++retValueSize; /* include null terminators */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1209 ++retDataSize;
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1210 bufDataSize = retDataSize;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1211 bufValueSize = retValueSize;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1212 retValueBuf = (char *)PyMem_Malloc(retValueSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1213 if (retValueBuf == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1214 return PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1215 retDataBuf = (char *)PyMem_Malloc(retDataSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1216 if (retDataBuf == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1217 PyMem_Free(retValueBuf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1218 return PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1219 }
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1220
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1221 while (1) {
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1222 Py_BEGIN_ALLOW_THREADS
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1223 rc = RegEnumValue(hKey,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1224 index,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1225 retValueBuf,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1226 &retValueSize,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1227 NULL,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1228 &typ,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1229 (BYTE *)retDataBuf,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1230 &retDataSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1231 Py_END_ALLOW_THREADS
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1232
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1233 if (rc != ERROR_MORE_DATA)
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1234 break;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1235
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1236 bufDataSize *= 2;
62196
27d9bcc7e661 Merged revisions 81847 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61923
diff changeset
1237 tmpBuf = (char *)PyMem_Realloc(retDataBuf, bufDataSize);
27d9bcc7e661 Merged revisions 81847 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61923
diff changeset
1238 if (tmpBuf == NULL) {
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1239 PyErr_NoMemory();
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1240 retVal = NULL;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1241 goto fail;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1242 }
62196
27d9bcc7e661 Merged revisions 81847 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61923
diff changeset
1243 retDataBuf = tmpBuf;
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1244 retDataSize = bufDataSize;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1245 retValueSize = bufValueSize;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1246 }
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1247
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1248 if (rc != ERROR_SUCCESS) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1249 retVal = PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1250 "PyRegEnumValue");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1251 goto fail;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1252 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1253 obData = Reg2Py(retDataBuf, retDataSize, typ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1254 if (obData == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1255 retVal = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1256 goto fail;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1257 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1258 retVal = Py_BuildValue("sOi", retValueBuf, obData, typ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1259 Py_DECREF(obData);
31046
0ff69259b005 Backport:
Guido van Rossum <guido@python.org>
parents: 27259
diff changeset
1260 fail:
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1261 PyMem_Free(retValueBuf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1262 PyMem_Free(retDataBuf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1263 return retVal;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1264 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1265
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1266 static PyObject *
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
1267 PyExpandEnvironmentStrings(PyObject *self, PyObject *args)
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
1268 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1269 Py_UNICODE *retValue = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1270 Py_UNICODE *src;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1271 DWORD retValueSize;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1272 DWORD rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1273 PyObject *o;
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
1274
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1275 if (!PyArg_ParseTuple(args, "u:ExpandEnvironmentStrings", &src))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1276 return NULL;
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
1277
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1278 retValueSize = ExpandEnvironmentStringsW(src, retValue, 0);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1279 if (retValueSize == 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1280 return PyErr_SetFromWindowsErrWithFunction(retValueSize,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1281 "ExpandEnvironmentStrings");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1282 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1283 retValue = (Py_UNICODE *)PyMem_Malloc(retValueSize * sizeof(Py_UNICODE));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1284 if (retValue == NULL) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1285 return PyErr_NoMemory();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1286 }
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
1287
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1288 rc = ExpandEnvironmentStringsW(src, retValue, retValueSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1289 if (rc == 0) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1290 PyMem_Free(retValue);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1291 return PyErr_SetFromWindowsErrWithFunction(retValueSize,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1292 "ExpandEnvironmentStrings");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1293 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1294 o = PyUnicode_FromUnicode(retValue, wcslen(retValue));
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1295 PyMem_Free(retValue);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1296 return o;
44598
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
1297 }
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
1298
088b5077c900 Added __enter__ and __exit__ functions to HKEY object
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
1299 static PyObject *
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1300 PyFlushKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1301 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1302 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1303 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1304 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1305 if (!PyArg_ParseTuple(args, "O:FlushKey", &obKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1306 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1307 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1308 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1309 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1310 rc = RegFlushKey(hKey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1311 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1312 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1313 return PyErr_SetFromWindowsErrWithFunction(rc, "RegFlushKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1314 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1315 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1316 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1317 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1318 PyLoadKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1319 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1320 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1321 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1322 char *subKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1323 char *fileName;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1324
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1325 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1326 if (!PyArg_ParseTuple(args, "Oss:LoadKey", &obKey, &subKey, &fileName))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1327 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1328 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1329 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1330 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1331 rc = RegLoadKey(hKey, subKey, fileName );
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1332 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1333 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1334 return PyErr_SetFromWindowsErrWithFunction(rc, "RegLoadKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1335 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1336 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1337 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1338
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1339 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1340 PyOpenKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1341 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1342 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1343 PyObject *obKey;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1344
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1345 char *subKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1346 int res = 0;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1347 HKEY retKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1348 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1349 REGSAM sam = KEY_READ;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1350 if (!PyArg_ParseTuple(args, "Oz|ii:OpenKey", &obKey, &subKey,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1351 &res, &sam))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1352 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1353 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1354 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1355
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1356 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1357 rc = RegOpenKeyEx(hKey, subKey, res, sam, &retKey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1358 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1359 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1360 return PyErr_SetFromWindowsErrWithFunction(rc, "RegOpenKeyEx");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1361 return PyHKEY_FromHKEY(retKey);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1362 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1363
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1364
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1365 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1366 PyQueryInfoKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1367 {
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1368 HKEY hKey;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1369 PyObject *obKey;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1370 long rc;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1371 DWORD nSubKeys, nValues;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1372 FILETIME ft;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1373 LARGE_INTEGER li;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1374 PyObject *l;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1375 PyObject *ret;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1376 if (!PyArg_ParseTuple(args, "O:QueryInfoKey", &obKey))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1377 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1378 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1379 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1380 if ((rc = RegQueryInfoKey(hKey, NULL, NULL, 0, &nSubKeys, NULL, NULL,
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1381 &nValues, NULL, NULL, NULL, &ft))
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1382 != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1383 return PyErr_SetFromWindowsErrWithFunction(rc, "RegQueryInfoKey");
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1384 li.LowPart = ft.dwLowDateTime;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1385 li.HighPart = ft.dwHighDateTime;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1386 l = PyLong_FromLongLong(li.QuadPart);
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1387 if (l == NULL)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1388 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1389 ret = Py_BuildValue("iiO", nSubKeys, nValues, l);
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1390 Py_DECREF(l);
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1391 return ret;
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1392 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1393
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1394 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1395 PyQueryValue(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1396 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1397 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1398 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1399 char *subKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1400 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1401 PyObject *retStr;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1402 char *retBuf;
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1403 DWORD bufSize = 0;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1404 DWORD retSize = 0;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1405 char *tmp;
31046
0ff69259b005 Backport:
Guido van Rossum <guido@python.org>
parents: 27259
diff changeset
1406
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1407 if (!PyArg_ParseTuple(args, "Oz:QueryValue", &obKey, &subKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1408 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1409
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1410 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1411 return NULL;
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1412
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1413 rc = RegQueryValue(hKey, subKey, NULL, &retSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1414 if (rc == ERROR_MORE_DATA)
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1415 retSize = 256;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1416 else if (rc != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1417 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1418 "RegQueryValue");
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1419
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1420 bufSize = retSize;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1421 retBuf = (char *) PyMem_Malloc(bufSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1422 if (retBuf == NULL)
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1423 return PyErr_NoMemory();
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1424
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1425 while (1) {
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1426 retSize = bufSize;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1427 rc = RegQueryValue(hKey, subKey, retBuf, &retSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1428 if (rc != ERROR_MORE_DATA)
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1429 break;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1430
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1431 bufSize *= 2;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1432 tmp = (char *) PyMem_Realloc(retBuf, bufSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1433 if (tmp == NULL) {
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1434 PyMem_Free(retBuf);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1435 return PyErr_NoMemory();
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1436 }
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1437 retBuf = tmp;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1438 }
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1439
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1440 if (rc != ERROR_SUCCESS) {
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1441 PyMem_Free(retBuf);
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1442 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1443 "RegQueryValue");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1444 }
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1445
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1446 if (retBuf[retSize-1] == '\x00')
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1447 retSize--;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1448 retStr = PyString_FromStringAndSize(retBuf, retSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1449 if (retStr == NULL) {
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1450 PyMem_Free(retBuf);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1451 return NULL;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1452 }
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1453 return retStr;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1454 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1455
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1456 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1457 PyQueryValueEx(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1458 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1459 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1460 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1461 char *valueName;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1462
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1463 long rc;
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1464 char *retBuf, *tmp;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1465 DWORD bufSize = 0, retSize;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1466 DWORD typ;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1467 PyObject *obData;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1468 PyObject *result;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1469
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1470 if (!PyArg_ParseTuple(args, "Oz:QueryValueEx", &obKey, &valueName))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1471 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1472
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1473 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1474 return NULL;
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1475
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1476 rc = RegQueryValueEx(hKey, valueName, NULL, NULL, NULL, &bufSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1477 if (rc == ERROR_MORE_DATA)
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1478 bufSize = 256;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1479 else if (rc != ERROR_SUCCESS)
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1480 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1481 "RegQueryValueEx");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1482 retBuf = (char *)PyMem_Malloc(bufSize);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1483 if (retBuf == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1484 return PyErr_NoMemory();
61923
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1485
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1486 while (1) {
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1487 retSize = bufSize;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1488 rc = RegQueryValueEx(hKey, valueName, NULL, &typ,
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1489 (BYTE *)retBuf, &retSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1490 if (rc != ERROR_MORE_DATA)
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1491 break;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1492
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1493 bufSize *= 2;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1494 tmp = (char *) PyMem_Realloc(retBuf, bufSize);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1495 if (tmp == NULL) {
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1496 PyMem_Free(retBuf);
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1497 return PyErr_NoMemory();
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1498 }
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1499 retBuf = tmp;
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1500 }
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1501
9f79cb98d55f Merged revisions 81517 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 61465
diff changeset
1502 if (rc != ERROR_SUCCESS) {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1503 PyMem_Free(retBuf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1504 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1505 "RegQueryValueEx");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1506 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1507 obData = Reg2Py(retBuf, bufSize, typ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1508 PyMem_Free((void *)retBuf);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1509 if (obData == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1510 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1511 result = Py_BuildValue("Oi", obData, typ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1512 Py_DECREF(obData);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1513 return result;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1514 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1515
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1516
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1517 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1518 PySaveKey(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1519 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1520 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1521 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1522 char *fileName;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1523 LPSECURITY_ATTRIBUTES pSA = NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1524
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1525 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1526 if (!PyArg_ParseTuple(args, "Os:SaveKey", &obKey, &fileName))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1527 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1528 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1529 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1530 /* One day we may get security into the core?
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1531 if (!PyWinObject_AsSECURITY_ATTRIBUTES(obSA, &pSA, TRUE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1532 return NULL;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1533 */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1534 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1535 rc = RegSaveKey(hKey, fileName, pSA );
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1536 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1537 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1538 return PyErr_SetFromWindowsErrWithFunction(rc, "RegSaveKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1539 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1540 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1541 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1542
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1543 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1544 PySetValue(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1545 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1546 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1547 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1548 char *subKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1549 char *str;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1550 DWORD typ;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1551 DWORD len;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1552 long rc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1553 PyObject *obStrVal;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1554 PyObject *obSubKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1555 if (!PyArg_ParseTuple(args, "OOiO:SetValue",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1556 &obKey,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1557 &obSubKey,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1558 &typ,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1559 &obStrVal))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1560 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1561 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1562 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1563 if (typ != REG_SZ) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1564 PyErr_SetString(PyExc_TypeError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1565 "Type must be _winreg.REG_SZ");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1566 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1567 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1568 /* XXX - need Unicode support */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1569 str = PyString_AsString(obStrVal);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1570 if (str == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1571 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1572 len = PyString_Size(obStrVal);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1573 if (obSubKey == Py_None)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1574 subKey = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1575 else {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1576 subKey = PyString_AsString(obSubKey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1577 if (subKey == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1578 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1579 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1580 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1581 rc = RegSetValue(hKey, subKey, REG_SZ, str, len+1);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1582 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1583 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1584 return PyErr_SetFromWindowsErrWithFunction(rc, "RegSetValue");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1585 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1586 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1587 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1588
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1589 static PyObject *
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1590 PySetValueEx(PyObject *self, PyObject *args)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1591 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1592 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1593 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1594 char *valueName;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1595 PyObject *obRes;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1596 PyObject *value;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1597 BYTE *data;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1598 DWORD len;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1599 DWORD typ;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1600
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1601 LONG rc;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1602
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1603 if (!PyArg_ParseTuple(args, "OzOiO:SetValueEx",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1604 &obKey,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1605 &valueName,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1606 &obRes,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1607 &typ,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1608 &value))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1609 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1610 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1611 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1612 if (!Py2Reg(value, typ, &data, &len))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1613 {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1614 if (!PyErr_Occurred())
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1615 PyErr_SetString(PyExc_ValueError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1616 "Could not convert the data to the specified type.");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1617 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1618 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1619 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1620 rc = RegSetValueEx(hKey, valueName, 0, typ, data, len);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1621 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1622 PyMem_DEL(data);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1623 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1624 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1625 "RegSetValueEx");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1626 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1627 return Py_None;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1628 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1629
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1630 static PyObject *
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1631 PyDisableReflectionKey(PyObject *self, PyObject *args)
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1632 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1633 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1634 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1635 HMODULE hMod;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1636 typedef LONG (WINAPI *RDRKFunc)(HKEY);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1637 RDRKFunc pfn = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1638 LONG rc;
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1639
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1640 if (!PyArg_ParseTuple(args, "O:DisableReflectionKey", &obKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1641 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1642 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1643 return NULL;
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1644
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1645 /* Only available on 64bit platforms, so we must load it
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1646 dynamically. */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1647 hMod = GetModuleHandle("advapi32.dll");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1648 if (hMod)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1649 pfn = (RDRKFunc)GetProcAddress(hMod,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1650 "RegDisableReflectionKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1651 if (!pfn) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1652 PyErr_SetString(PyExc_NotImplementedError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1653 "not implemented on this platform");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1654 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1655 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1656 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1657 rc = (*pfn)(hKey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1658 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1659 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1660 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1661 "RegDisableReflectionKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1662 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1663 return Py_None;
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1664 }
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1665
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1666 static PyObject *
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1667 PyEnableReflectionKey(PyObject *self, PyObject *args)
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1668 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1669 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1670 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1671 HMODULE hMod;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1672 typedef LONG (WINAPI *RERKFunc)(HKEY);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1673 RERKFunc pfn = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1674 LONG rc;
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1675
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1676 if (!PyArg_ParseTuple(args, "O:EnableReflectionKey", &obKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1677 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1678 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1679 return NULL;
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1680
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1681 /* Only available on 64bit platforms, so we must load it
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1682 dynamically. */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1683 hMod = GetModuleHandle("advapi32.dll");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1684 if (hMod)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1685 pfn = (RERKFunc)GetProcAddress(hMod,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1686 "RegEnableReflectionKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1687 if (!pfn) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1688 PyErr_SetString(PyExc_NotImplementedError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1689 "not implemented on this platform");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1690 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1691 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1692 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1693 rc = (*pfn)(hKey);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1694 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1695 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1696 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1697 "RegEnableReflectionKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1698 Py_INCREF(Py_None);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1699 return Py_None;
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1700 }
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1701
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1702 static PyObject *
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1703 PyQueryReflectionKey(PyObject *self, PyObject *args)
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1704 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1705 HKEY hKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1706 PyObject *obKey;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1707 HMODULE hMod;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1708 typedef LONG (WINAPI *RQRKFunc)(HKEY, BOOL *);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1709 RQRKFunc pfn = NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1710 BOOL result;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1711 LONG rc;
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1712
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1713 if (!PyArg_ParseTuple(args, "O:QueryReflectionKey", &obKey))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1714 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1715 if (!PyHKEY_AsHKEY(obKey, &hKey, FALSE))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1716 return NULL;
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1717
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1718 /* Only available on 64bit platforms, so we must load it
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1719 dynamically. */
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1720 hMod = GetModuleHandle("advapi32.dll");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1721 if (hMod)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1722 pfn = (RQRKFunc)GetProcAddress(hMod,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1723 "RegQueryReflectionKey");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1724 if (!pfn) {
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1725 PyErr_SetString(PyExc_NotImplementedError,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1726 "not implemented on this platform");
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1727 return NULL;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1728 }
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1729 Py_BEGIN_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1730 rc = (*pfn)(hKey, &result);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1731 Py_END_ALLOW_THREADS
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1732 if (rc != ERROR_SUCCESS)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1733 return PyErr_SetFromWindowsErrWithFunction(rc,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1734 "RegQueryReflectionKey");
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1735 return PyBool_FromLong(result);
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1736 }
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1737
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1738 static struct PyMethodDef winreg_methods[] = {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1739 {"CloseKey", PyCloseKey, METH_VARARGS, CloseKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1740 {"ConnectRegistry", PyConnectRegistry, METH_VARARGS, ConnectRegistry_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1741 {"CreateKey", PyCreateKey, METH_VARARGS, CreateKey_doc},
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1742 {"CreateKeyEx", PyCreateKeyEx, METH_VARARGS, CreateKeyEx_doc},
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1743 {"DeleteKey", PyDeleteKey, METH_VARARGS, DeleteKey_doc},
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1744 {"DeleteKeyEx", PyDeleteKeyEx, METH_VARARGS, DeleteKeyEx_doc},
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1745 {"DeleteValue", PyDeleteValue, METH_VARARGS, DeleteValue_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1746 {"DisableReflectionKey", PyDisableReflectionKey, METH_VARARGS, DisableReflectionKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1747 {"EnableReflectionKey", PyEnableReflectionKey, METH_VARARGS, EnableReflectionKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1748 {"EnumKey", PyEnumKey, METH_VARARGS, EnumKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1749 {"EnumValue", PyEnumValue, METH_VARARGS, EnumValue_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1750 {"ExpandEnvironmentStrings", PyExpandEnvironmentStrings, METH_VARARGS,
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1751 ExpandEnvironmentStrings_doc },
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1752 {"FlushKey", PyFlushKey, METH_VARARGS, FlushKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1753 {"LoadKey", PyLoadKey, METH_VARARGS, LoadKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1754 {"OpenKey", PyOpenKey, METH_VARARGS, OpenKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1755 {"OpenKeyEx", PyOpenKey, METH_VARARGS, OpenKeyEx_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1756 {"QueryValue", PyQueryValue, METH_VARARGS, QueryValue_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1757 {"QueryValueEx", PyQueryValueEx, METH_VARARGS, QueryValueEx_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1758 {"QueryInfoKey", PyQueryInfoKey, METH_VARARGS, QueryInfoKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1759 {"QueryReflectionKey",PyQueryReflectionKey,METH_VARARGS, QueryReflectionKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1760 {"SaveKey", PySaveKey, METH_VARARGS, SaveKey_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1761 {"SetValue", PySetValue, METH_VARARGS, SetValue_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1762 {"SetValueEx", PySetValueEx, METH_VARARGS, SetValueEx_doc},
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1763 NULL,
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1764 };
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1765
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1766 static void
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1767 insint(PyObject * d, char * name, long value)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1768 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1769 PyObject *v = PyInt_FromLong(value);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1770 if (!v || PyDict_SetItemString(d, name, v))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1771 PyErr_Clear();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1772 Py_XDECREF(v);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1773 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1774
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1775 #define ADD_INT(val) insint(d, #val, val)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1776
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1777 static void
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1778 inskey(PyObject * d, char * name, HKEY key)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1779 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1780 PyObject *v = PyLong_FromVoidPtr(key);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1781 if (!v || PyDict_SetItemString(d, name, v))
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1782 PyErr_Clear();
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1783 Py_XDECREF(v);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1784 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1785
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1786 #define ADD_KEY(val) inskey(d, #val, val)
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1787
24315
a8df0c0be242 Land Patch [ 566100 ] Rationalize DL_IMPORT and DL_EXPORT.
Mark Hammond <mhammond@skippinet.com.au>
parents: 23832
diff changeset
1788 PyMODINIT_FUNC init_winreg(void)
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1789 {
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1790 PyObject *m, *d;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1791 m = Py_InitModule3("_winreg", winreg_methods, module_doc);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1792 if (m == NULL)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1793 return;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1794 d = PyModule_GetDict(m);
61463
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1795 if (PyType_Ready(&PyHKEY_Type) < 0)
fd25030223b0 Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents: 60184
diff changeset
1796 return;
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1797 PyHKEY_Type.tp_doc = PyHKEY_doc;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1798 Py_INCREF(&PyHKEY_Type);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1799 if (PyDict_SetItemString(d, "HKEYType",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1800 (PyObject *)&PyHKEY_Type) != 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1801 return;
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1802 Py_INCREF(PyExc_WindowsError);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1803 if (PyDict_SetItemString(d, "error",
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1804 PyExc_WindowsError) != 0)
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1805 return;
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1806
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1807 /* Add the relevant constants */
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1808 ADD_KEY(HKEY_CLASSES_ROOT);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1809 ADD_KEY(HKEY_CURRENT_USER);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1810 ADD_KEY(HKEY_LOCAL_MACHINE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1811 ADD_KEY(HKEY_USERS);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1812 ADD_KEY(HKEY_PERFORMANCE_DATA);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1813 #ifdef HKEY_CURRENT_CONFIG
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1814 ADD_KEY(HKEY_CURRENT_CONFIG);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1815 #endif
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1816 #ifdef HKEY_DYN_DATA
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1817 ADD_KEY(HKEY_DYN_DATA);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1818 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1819 ADD_INT(KEY_QUERY_VALUE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1820 ADD_INT(KEY_SET_VALUE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1821 ADD_INT(KEY_CREATE_SUB_KEY);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1822 ADD_INT(KEY_ENUMERATE_SUB_KEYS);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1823 ADD_INT(KEY_NOTIFY);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1824 ADD_INT(KEY_CREATE_LINK);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1825 ADD_INT(KEY_READ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1826 ADD_INT(KEY_WRITE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1827 ADD_INT(KEY_EXECUTE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1828 ADD_INT(KEY_ALL_ACCESS);
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1829 #ifdef KEY_WOW64_64KEY
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1830 ADD_INT(KEY_WOW64_64KEY);
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1831 #endif
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1832 #ifdef KEY_WOW64_32KEY
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1833 ADD_INT(KEY_WOW64_32KEY);
46320
012d97bbeeaf From issue 1753245 - better _winreg support for x64.
Mark Hammond <mhammond@skippinet.com.au>
parents: 46062
diff changeset
1834 #endif
61465
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1835 ADD_INT(REG_OPTION_RESERVED);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1836 ADD_INT(REG_OPTION_NON_VOLATILE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1837 ADD_INT(REG_OPTION_VOLATILE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1838 ADD_INT(REG_OPTION_CREATE_LINK);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1839 ADD_INT(REG_OPTION_BACKUP_RESTORE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1840 ADD_INT(REG_OPTION_OPEN_LINK);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1841 ADD_INT(REG_LEGAL_OPTION);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1842 ADD_INT(REG_CREATED_NEW_KEY);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1843 ADD_INT(REG_OPENED_EXISTING_KEY);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1844 ADD_INT(REG_WHOLE_HIVE_VOLATILE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1845 ADD_INT(REG_REFRESH_HIVE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1846 ADD_INT(REG_NO_LAZY_FLUSH);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1847 ADD_INT(REG_NOTIFY_CHANGE_NAME);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1848 ADD_INT(REG_NOTIFY_CHANGE_ATTRIBUTES);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1849 ADD_INT(REG_NOTIFY_CHANGE_LAST_SET);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1850 ADD_INT(REG_NOTIFY_CHANGE_SECURITY);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1851 ADD_INT(REG_LEGAL_CHANGE_FILTER);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1852 ADD_INT(REG_NONE);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1853 ADD_INT(REG_SZ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1854 ADD_INT(REG_EXPAND_SZ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1855 ADD_INT(REG_BINARY);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1856 ADD_INT(REG_DWORD);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1857 ADD_INT(REG_DWORD_LITTLE_ENDIAN);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1858 ADD_INT(REG_DWORD_BIG_ENDIAN);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1859 ADD_INT(REG_LINK);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1860 ADD_INT(REG_MULTI_SZ);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1861 ADD_INT(REG_RESOURCE_LIST);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1862 ADD_INT(REG_FULL_RESOURCE_DESCRIPTOR);
e38335d4df91 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 55049
diff changeset
1863 ADD_INT(REG_RESOURCE_REQUIREMENTS_LIST);
12076
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1864 }
4a61cc81f367 Mark Hammond: new winreg module; updated dllbase file.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1865