blob: e21f2bc2b6fd6f6fd44186a0a5af258f9477145d [file] [log] [blame]
Zachary Waref2244ea2015-05-13 01:22:54 -05001/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(_winapi_Overlapped_GetOverlappedResult__doc__,
6"GetOverlappedResult($self, wait, /)\n"
7"--\n"
8"\n");
9
10#define _WINAPI_OVERLAPPED_GETOVERLAPPEDRESULT_METHODDEF \
11 {"GetOverlappedResult", (PyCFunction)_winapi_Overlapped_GetOverlappedResult, METH_O, _winapi_Overlapped_GetOverlappedResult__doc__},
12
13static PyObject *
14_winapi_Overlapped_GetOverlappedResult_impl(OverlappedObject *self, int wait);
15
16static PyObject *
17_winapi_Overlapped_GetOverlappedResult(OverlappedObject *self, PyObject *arg)
18{
19 PyObject *return_value = NULL;
20 int wait;
21
Serhiy Storchaka32d96a22018-12-25 13:23:47 +020022 wait = PyObject_IsTrue(arg);
23 if (wait < 0) {
Zachary Waref2244ea2015-05-13 01:22:54 -050024 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030025 }
Zachary Waref2244ea2015-05-13 01:22:54 -050026 return_value = _winapi_Overlapped_GetOverlappedResult_impl(self, wait);
27
28exit:
29 return return_value;
30}
31
32PyDoc_STRVAR(_winapi_Overlapped_getbuffer__doc__,
33"getbuffer($self, /)\n"
34"--\n"
35"\n");
36
37#define _WINAPI_OVERLAPPED_GETBUFFER_METHODDEF \
38 {"getbuffer", (PyCFunction)_winapi_Overlapped_getbuffer, METH_NOARGS, _winapi_Overlapped_getbuffer__doc__},
39
40static PyObject *
41_winapi_Overlapped_getbuffer_impl(OverlappedObject *self);
42
43static PyObject *
44_winapi_Overlapped_getbuffer(OverlappedObject *self, PyObject *Py_UNUSED(ignored))
45{
46 return _winapi_Overlapped_getbuffer_impl(self);
47}
48
49PyDoc_STRVAR(_winapi_Overlapped_cancel__doc__,
50"cancel($self, /)\n"
51"--\n"
52"\n");
53
54#define _WINAPI_OVERLAPPED_CANCEL_METHODDEF \
55 {"cancel", (PyCFunction)_winapi_Overlapped_cancel, METH_NOARGS, _winapi_Overlapped_cancel__doc__},
56
57static PyObject *
58_winapi_Overlapped_cancel_impl(OverlappedObject *self);
59
60static PyObject *
61_winapi_Overlapped_cancel(OverlappedObject *self, PyObject *Py_UNUSED(ignored))
62{
63 return _winapi_Overlapped_cancel_impl(self);
64}
65
66PyDoc_STRVAR(_winapi_CloseHandle__doc__,
67"CloseHandle($module, handle, /)\n"
68"--\n"
69"\n"
70"Close handle.");
71
72#define _WINAPI_CLOSEHANDLE_METHODDEF \
73 {"CloseHandle", (PyCFunction)_winapi_CloseHandle, METH_O, _winapi_CloseHandle__doc__},
74
75static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030076_winapi_CloseHandle_impl(PyObject *module, HANDLE handle);
Zachary Waref2244ea2015-05-13 01:22:54 -050077
78static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030079_winapi_CloseHandle(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -050080{
81 PyObject *return_value = NULL;
82 HANDLE handle;
83
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030084 if (!PyArg_Parse(arg, "" F_HANDLE ":CloseHandle", &handle)) {
Zachary Waref2244ea2015-05-13 01:22:54 -050085 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030086 }
Zachary Waref2244ea2015-05-13 01:22:54 -050087 return_value = _winapi_CloseHandle_impl(module, handle);
88
89exit:
90 return return_value;
91}
92
93PyDoc_STRVAR(_winapi_ConnectNamedPipe__doc__,
94"ConnectNamedPipe($module, /, handle, overlapped=False)\n"
95"--\n"
96"\n");
97
98#define _WINAPI_CONNECTNAMEDPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +020099 {"ConnectNamedPipe", (PyCFunction)(void(*)(void))_winapi_ConnectNamedPipe, METH_FASTCALL|METH_KEYWORDS, _winapi_ConnectNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500100
101static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300102_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500103 int use_overlapped);
Zachary Waref2244ea2015-05-13 01:22:54 -0500104
105static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200106_winapi_ConnectNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500107{
108 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300109 static const char * const _keywords[] = {"handle", "overlapped", NULL};
110 static _PyArg_Parser _parser = {"" F_HANDLE "|i:ConnectNamedPipe", _keywords, 0};
Zachary Waref2244ea2015-05-13 01:22:54 -0500111 HANDLE handle;
112 int use_overlapped = 0;
113
Victor Stinner3e1fad62017-01-17 01:29:01 +0100114 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300115 &handle, &use_overlapped)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500116 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300117 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500118 return_value = _winapi_ConnectNamedPipe_impl(module, handle, use_overlapped);
119
120exit:
121 return return_value;
122}
123
124PyDoc_STRVAR(_winapi_CreateFile__doc__,
125"CreateFile($module, file_name, desired_access, share_mode,\n"
126" security_attributes, creation_disposition,\n"
127" flags_and_attributes, template_file, /)\n"
128"--\n"
129"\n");
130
131#define _WINAPI_CREATEFILE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200132 {"CreateFile", (PyCFunction)(void(*)(void))_winapi_CreateFile, METH_FASTCALL, _winapi_CreateFile__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500133
134static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300135_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name,
Zachary Ware77772c02015-05-13 10:58:35 -0500136 DWORD desired_access, DWORD share_mode,
137 LPSECURITY_ATTRIBUTES security_attributes,
138 DWORD creation_disposition,
139 DWORD flags_and_attributes, HANDLE template_file);
Zachary Waref2244ea2015-05-13 01:22:54 -0500140
141static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200142_winapi_CreateFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500143{
144 PyObject *return_value = NULL;
145 LPCTSTR file_name;
146 DWORD desired_access;
147 DWORD share_mode;
148 LPSECURITY_ATTRIBUTES security_attributes;
149 DWORD creation_disposition;
150 DWORD flags_and_attributes;
151 HANDLE template_file;
152 HANDLE _return_value;
153
Sylvain74453812017-06-10 06:51:48 +0200154 if (!_PyArg_ParseStack(args, nargs, "skk" F_POINTER "kk" F_HANDLE ":CreateFile",
155 &file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100156 goto exit;
157 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500158 _return_value = _winapi_CreateFile_impl(module, file_name, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300159 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500160 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300161 }
162 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500163 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300164 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500165 return_value = HANDLE_TO_PYNUM(_return_value);
166
167exit:
168 return return_value;
169}
170
Davin Pottse895de32019-02-23 22:08:16 -0600171PyDoc_STRVAR(_winapi_CreateFileMapping__doc__,
172"CreateFileMapping($module, file_handle, security_attributes, protect,\n"
173" max_size_high, max_size_low, name, /)\n"
174"--\n"
175"\n");
176
177#define _WINAPI_CREATEFILEMAPPING_METHODDEF \
178 {"CreateFileMapping", (PyCFunction)(void(*)(void))_winapi_CreateFileMapping, METH_FASTCALL, _winapi_CreateFileMapping__doc__},
179
180static HANDLE
181_winapi_CreateFileMapping_impl(PyObject *module, HANDLE file_handle,
182 LPSECURITY_ATTRIBUTES security_attributes,
183 DWORD protect, DWORD max_size_high,
184 DWORD max_size_low, LPCWSTR name);
185
186static PyObject *
187_winapi_CreateFileMapping(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
188{
189 PyObject *return_value = NULL;
190 HANDLE file_handle;
191 LPSECURITY_ATTRIBUTES security_attributes;
192 DWORD protect;
193 DWORD max_size_high;
194 DWORD max_size_low;
195 LPCWSTR name;
196 HANDLE _return_value;
197
198 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "" F_POINTER "kkku:CreateFileMapping",
199 &file_handle, &security_attributes, &protect, &max_size_high, &max_size_low, &name)) {
200 goto exit;
201 }
202 _return_value = _winapi_CreateFileMapping_impl(module, file_handle, security_attributes, protect, max_size_high, max_size_low, name);
203 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
204 goto exit;
205 }
206 if (_return_value == NULL) {
207 Py_RETURN_NONE;
208 }
209 return_value = HANDLE_TO_PYNUM(_return_value);
210
211exit:
212 return return_value;
213}
214
Zachary Waref2244ea2015-05-13 01:22:54 -0500215PyDoc_STRVAR(_winapi_CreateJunction__doc__,
216"CreateJunction($module, src_path, dst_path, /)\n"
217"--\n"
218"\n");
219
220#define _WINAPI_CREATEJUNCTION_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200221 {"CreateJunction", (PyCFunction)(void(*)(void))_winapi_CreateJunction, METH_FASTCALL, _winapi_CreateJunction__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500222
223static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300224_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path,
Zachary Ware77772c02015-05-13 10:58:35 -0500225 LPWSTR dst_path);
Zachary Waref2244ea2015-05-13 01:22:54 -0500226
227static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200228_winapi_CreateJunction(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500229{
230 PyObject *return_value = NULL;
231 LPWSTR src_path;
232 LPWSTR dst_path;
233
Sylvain74453812017-06-10 06:51:48 +0200234 if (!_PyArg_ParseStack(args, nargs, "uu:CreateJunction",
235 &src_path, &dst_path)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100236 goto exit;
237 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500238 return_value = _winapi_CreateJunction_impl(module, src_path, dst_path);
239
240exit:
241 return return_value;
242}
243
244PyDoc_STRVAR(_winapi_CreateNamedPipe__doc__,
245"CreateNamedPipe($module, name, open_mode, pipe_mode, max_instances,\n"
246" out_buffer_size, in_buffer_size, default_timeout,\n"
247" security_attributes, /)\n"
248"--\n"
249"\n");
250
251#define _WINAPI_CREATENAMEDPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200252 {"CreateNamedPipe", (PyCFunction)(void(*)(void))_winapi_CreateNamedPipe, METH_FASTCALL, _winapi_CreateNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500253
254static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300255_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode,
256 DWORD pipe_mode, DWORD max_instances,
257 DWORD out_buffer_size, DWORD in_buffer_size,
258 DWORD default_timeout,
Zachary Ware77772c02015-05-13 10:58:35 -0500259 LPSECURITY_ATTRIBUTES security_attributes);
Zachary Waref2244ea2015-05-13 01:22:54 -0500260
261static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200262_winapi_CreateNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500263{
264 PyObject *return_value = NULL;
265 LPCTSTR name;
266 DWORD open_mode;
267 DWORD pipe_mode;
268 DWORD max_instances;
269 DWORD out_buffer_size;
270 DWORD in_buffer_size;
271 DWORD default_timeout;
272 LPSECURITY_ATTRIBUTES security_attributes;
273 HANDLE _return_value;
274
Sylvain74453812017-06-10 06:51:48 +0200275 if (!_PyArg_ParseStack(args, nargs, "skkkkkk" F_POINTER ":CreateNamedPipe",
276 &name, &open_mode, &pipe_mode, &max_instances, &out_buffer_size, &in_buffer_size, &default_timeout, &security_attributes)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100277 goto exit;
278 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500279 _return_value = _winapi_CreateNamedPipe_impl(module, name, open_mode, pipe_mode, max_instances, out_buffer_size, in_buffer_size, default_timeout, security_attributes);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300280 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500281 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300282 }
283 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500284 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300285 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500286 return_value = HANDLE_TO_PYNUM(_return_value);
287
288exit:
289 return return_value;
290}
291
292PyDoc_STRVAR(_winapi_CreatePipe__doc__,
293"CreatePipe($module, pipe_attrs, size, /)\n"
294"--\n"
295"\n"
296"Create an anonymous pipe.\n"
297"\n"
298" pipe_attrs\n"
299" Ignored internally, can be None.\n"
300"\n"
301"Returns a 2-tuple of handles, to the read and write ends of the pipe.");
302
303#define _WINAPI_CREATEPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200304 {"CreatePipe", (PyCFunction)(void(*)(void))_winapi_CreatePipe, METH_FASTCALL, _winapi_CreatePipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500305
306static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300307_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size);
Zachary Waref2244ea2015-05-13 01:22:54 -0500308
309static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200310_winapi_CreatePipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500311{
312 PyObject *return_value = NULL;
313 PyObject *pipe_attrs;
314 DWORD size;
315
Sylvain74453812017-06-10 06:51:48 +0200316 if (!_PyArg_ParseStack(args, nargs, "Ok:CreatePipe",
317 &pipe_attrs, &size)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100318 goto exit;
319 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500320 return_value = _winapi_CreatePipe_impl(module, pipe_attrs, size);
321
322exit:
323 return return_value;
324}
325
326PyDoc_STRVAR(_winapi_CreateProcess__doc__,
327"CreateProcess($module, application_name, command_line, proc_attrs,\n"
328" thread_attrs, inherit_handles, creation_flags,\n"
329" env_mapping, current_directory, startup_info, /)\n"
330"--\n"
331"\n"
332"Create a new process and its primary thread.\n"
333"\n"
Vladimir Matveev7b360162018-12-14 00:30:51 -0800334" command_line\n"
335" Can be str or None\n"
Zachary Waref2244ea2015-05-13 01:22:54 -0500336" proc_attrs\n"
337" Ignored internally, can be None.\n"
338" thread_attrs\n"
339" Ignored internally, can be None.\n"
340"\n"
341"The return value is a tuple of the process handle, thread handle,\n"
342"process ID, and thread ID.");
343
344#define _WINAPI_CREATEPROCESS_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200345 {"CreateProcess", (PyCFunction)(void(*)(void))_winapi_CreateProcess, METH_FASTCALL, _winapi_CreateProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500346
347static PyObject *
Serhiy Storchakaafb3e712018-12-14 11:19:51 +0200348_winapi_CreateProcess_impl(PyObject *module,
349 const Py_UNICODE *application_name,
Vladimir Matveev7b360162018-12-14 00:30:51 -0800350 PyObject *command_line, PyObject *proc_attrs,
Zachary Ware77772c02015-05-13 10:58:35 -0500351 PyObject *thread_attrs, BOOL inherit_handles,
352 DWORD creation_flags, PyObject *env_mapping,
Serhiy Storchakaafb3e712018-12-14 11:19:51 +0200353 const Py_UNICODE *current_directory,
Zachary Ware77772c02015-05-13 10:58:35 -0500354 PyObject *startup_info);
Zachary Waref2244ea2015-05-13 01:22:54 -0500355
356static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200357_winapi_CreateProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500358{
359 PyObject *return_value = NULL;
Serhiy Storchakaafb3e712018-12-14 11:19:51 +0200360 const Py_UNICODE *application_name;
Vladimir Matveev7b360162018-12-14 00:30:51 -0800361 PyObject *command_line;
Zachary Waref2244ea2015-05-13 01:22:54 -0500362 PyObject *proc_attrs;
363 PyObject *thread_attrs;
364 BOOL inherit_handles;
365 DWORD creation_flags;
366 PyObject *env_mapping;
Serhiy Storchakaafb3e712018-12-14 11:19:51 +0200367 const Py_UNICODE *current_directory;
Zachary Waref2244ea2015-05-13 01:22:54 -0500368 PyObject *startup_info;
369
Vladimir Matveev7b360162018-12-14 00:30:51 -0800370 if (!_PyArg_ParseStack(args, nargs, "ZOOOikOZO:CreateProcess",
Sylvain74453812017-06-10 06:51:48 +0200371 &application_name, &command_line, &proc_attrs, &thread_attrs, &inherit_handles, &creation_flags, &env_mapping, &current_directory, &startup_info)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100372 goto exit;
373 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500374 return_value = _winapi_CreateProcess_impl(module, application_name, command_line, proc_attrs, thread_attrs, inherit_handles, creation_flags, env_mapping, current_directory, startup_info);
375
376exit:
377 return return_value;
378}
379
380PyDoc_STRVAR(_winapi_DuplicateHandle__doc__,
381"DuplicateHandle($module, source_process_handle, source_handle,\n"
382" target_process_handle, desired_access, inherit_handle,\n"
383" options=0, /)\n"
384"--\n"
385"\n"
386"Return a duplicate handle object.\n"
387"\n"
388"The duplicate handle refers to the same object as the original\n"
389"handle. Therefore, any changes to the object are reflected\n"
390"through both handles.");
391
392#define _WINAPI_DUPLICATEHANDLE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200393 {"DuplicateHandle", (PyCFunction)(void(*)(void))_winapi_DuplicateHandle, METH_FASTCALL, _winapi_DuplicateHandle__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500394
395static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300396_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500397 HANDLE source_handle,
398 HANDLE target_process_handle,
399 DWORD desired_access, BOOL inherit_handle,
400 DWORD options);
Zachary Waref2244ea2015-05-13 01:22:54 -0500401
402static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200403_winapi_DuplicateHandle(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500404{
405 PyObject *return_value = NULL;
406 HANDLE source_process_handle;
407 HANDLE source_handle;
408 HANDLE target_process_handle;
409 DWORD desired_access;
410 BOOL inherit_handle;
411 DWORD options = 0;
412 HANDLE _return_value;
413
Sylvain74453812017-06-10 06:51:48 +0200414 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle",
415 &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100416 goto exit;
417 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500418 _return_value = _winapi_DuplicateHandle_impl(module, source_process_handle, source_handle, target_process_handle, desired_access, inherit_handle, options);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300419 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500420 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300421 }
422 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500423 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300424 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500425 return_value = HANDLE_TO_PYNUM(_return_value);
426
427exit:
428 return return_value;
429}
430
431PyDoc_STRVAR(_winapi_ExitProcess__doc__,
432"ExitProcess($module, ExitCode, /)\n"
433"--\n"
434"\n");
435
436#define _WINAPI_EXITPROCESS_METHODDEF \
437 {"ExitProcess", (PyCFunction)_winapi_ExitProcess, METH_O, _winapi_ExitProcess__doc__},
438
439static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300440_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode);
Zachary Waref2244ea2015-05-13 01:22:54 -0500441
442static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300443_winapi_ExitProcess(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500444{
445 PyObject *return_value = NULL;
446 UINT ExitCode;
447
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300448 if (!PyArg_Parse(arg, "I:ExitProcess", &ExitCode)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500449 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300450 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500451 return_value = _winapi_ExitProcess_impl(module, ExitCode);
452
453exit:
454 return return_value;
455}
456
457PyDoc_STRVAR(_winapi_GetCurrentProcess__doc__,
458"GetCurrentProcess($module, /)\n"
459"--\n"
460"\n"
461"Return a handle object for the current process.");
462
463#define _WINAPI_GETCURRENTPROCESS_METHODDEF \
464 {"GetCurrentProcess", (PyCFunction)_winapi_GetCurrentProcess, METH_NOARGS, _winapi_GetCurrentProcess__doc__},
465
466static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300467_winapi_GetCurrentProcess_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500468
469static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300470_winapi_GetCurrentProcess(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500471{
472 PyObject *return_value = NULL;
473 HANDLE _return_value;
474
475 _return_value = _winapi_GetCurrentProcess_impl(module);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300476 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500477 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300478 }
479 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500480 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300481 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500482 return_value = HANDLE_TO_PYNUM(_return_value);
483
484exit:
485 return return_value;
486}
487
488PyDoc_STRVAR(_winapi_GetExitCodeProcess__doc__,
489"GetExitCodeProcess($module, process, /)\n"
490"--\n"
491"\n"
492"Return the termination status of the specified process.");
493
494#define _WINAPI_GETEXITCODEPROCESS_METHODDEF \
495 {"GetExitCodeProcess", (PyCFunction)_winapi_GetExitCodeProcess, METH_O, _winapi_GetExitCodeProcess__doc__},
496
497static DWORD
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300498_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process);
Zachary Waref2244ea2015-05-13 01:22:54 -0500499
500static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300501_winapi_GetExitCodeProcess(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500502{
503 PyObject *return_value = NULL;
504 HANDLE process;
505 DWORD _return_value;
506
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300507 if (!PyArg_Parse(arg, "" F_HANDLE ":GetExitCodeProcess", &process)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500508 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300509 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500510 _return_value = _winapi_GetExitCodeProcess_impl(module, process);
Victor Stinner850a18e2017-10-24 16:53:32 -0700511 if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500512 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300513 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500514 return_value = Py_BuildValue("k", _return_value);
515
516exit:
517 return return_value;
518}
519
520PyDoc_STRVAR(_winapi_GetLastError__doc__,
521"GetLastError($module, /)\n"
522"--\n"
523"\n");
524
525#define _WINAPI_GETLASTERROR_METHODDEF \
526 {"GetLastError", (PyCFunction)_winapi_GetLastError, METH_NOARGS, _winapi_GetLastError__doc__},
527
528static DWORD
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300529_winapi_GetLastError_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500530
531static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300532_winapi_GetLastError(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500533{
534 PyObject *return_value = NULL;
535 DWORD _return_value;
536
537 _return_value = _winapi_GetLastError_impl(module);
Victor Stinner850a18e2017-10-24 16:53:32 -0700538 if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500539 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300540 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500541 return_value = Py_BuildValue("k", _return_value);
542
543exit:
544 return return_value;
545}
546
547PyDoc_STRVAR(_winapi_GetModuleFileName__doc__,
548"GetModuleFileName($module, module_handle, /)\n"
549"--\n"
550"\n"
551"Return the fully-qualified path for the file that contains module.\n"
552"\n"
553"The module must have been loaded by the current process.\n"
554"\n"
555"The module parameter should be a handle to the loaded module\n"
556"whose path is being requested. If this parameter is 0,\n"
557"GetModuleFileName retrieves the path of the executable file\n"
558"of the current process.");
559
560#define _WINAPI_GETMODULEFILENAME_METHODDEF \
561 {"GetModuleFileName", (PyCFunction)_winapi_GetModuleFileName, METH_O, _winapi_GetModuleFileName__doc__},
562
563static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300564_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle);
Zachary Waref2244ea2015-05-13 01:22:54 -0500565
566static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300567_winapi_GetModuleFileName(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500568{
569 PyObject *return_value = NULL;
570 HMODULE module_handle;
571
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300572 if (!PyArg_Parse(arg, "" F_HANDLE ":GetModuleFileName", &module_handle)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500573 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300574 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500575 return_value = _winapi_GetModuleFileName_impl(module, module_handle);
576
577exit:
578 return return_value;
579}
580
581PyDoc_STRVAR(_winapi_GetStdHandle__doc__,
582"GetStdHandle($module, std_handle, /)\n"
583"--\n"
584"\n"
585"Return a handle to the specified standard device.\n"
586"\n"
587" std_handle\n"
588" One of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, or STD_ERROR_HANDLE.\n"
589"\n"
590"The integer associated with the handle object is returned.");
591
592#define _WINAPI_GETSTDHANDLE_METHODDEF \
593 {"GetStdHandle", (PyCFunction)_winapi_GetStdHandle, METH_O, _winapi_GetStdHandle__doc__},
594
595static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300596_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle);
Zachary Waref2244ea2015-05-13 01:22:54 -0500597
598static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300599_winapi_GetStdHandle(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500600{
601 PyObject *return_value = NULL;
602 DWORD std_handle;
603 HANDLE _return_value;
604
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300605 if (!PyArg_Parse(arg, "k:GetStdHandle", &std_handle)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500606 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300607 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500608 _return_value = _winapi_GetStdHandle_impl(module, std_handle);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300609 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500610 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300611 }
612 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500613 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300614 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500615 return_value = HANDLE_TO_PYNUM(_return_value);
616
617exit:
618 return return_value;
619}
620
621PyDoc_STRVAR(_winapi_GetVersion__doc__,
622"GetVersion($module, /)\n"
623"--\n"
624"\n"
625"Return the version number of the current operating system.");
626
627#define _WINAPI_GETVERSION_METHODDEF \
628 {"GetVersion", (PyCFunction)_winapi_GetVersion, METH_NOARGS, _winapi_GetVersion__doc__},
629
630static long
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300631_winapi_GetVersion_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500632
633static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300634_winapi_GetVersion(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500635{
636 PyObject *return_value = NULL;
637 long _return_value;
638
639 _return_value = _winapi_GetVersion_impl(module);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300640 if ((_return_value == -1) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500641 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300642 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500643 return_value = PyLong_FromLong(_return_value);
644
645exit:
646 return return_value;
647}
648
Davin Pottse895de32019-02-23 22:08:16 -0600649PyDoc_STRVAR(_winapi_MapViewOfFile__doc__,
650"MapViewOfFile($module, file_map, desired_access, file_offset_high,\n"
651" file_offset_low, number_bytes, /)\n"
652"--\n"
653"\n");
654
655#define _WINAPI_MAPVIEWOFFILE_METHODDEF \
656 {"MapViewOfFile", (PyCFunction)(void(*)(void))_winapi_MapViewOfFile, METH_FASTCALL, _winapi_MapViewOfFile__doc__},
657
658static LPVOID
659_winapi_MapViewOfFile_impl(PyObject *module, HANDLE file_map,
660 DWORD desired_access, DWORD file_offset_high,
661 DWORD file_offset_low, size_t number_bytes);
662
663static PyObject *
664_winapi_MapViewOfFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
665{
666 PyObject *return_value = NULL;
667 HANDLE file_map;
668 DWORD desired_access;
669 DWORD file_offset_high;
670 DWORD file_offset_low;
671 size_t number_bytes;
672 LPVOID _return_value;
673
674 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "kkkO&:MapViewOfFile",
675 &file_map, &desired_access, &file_offset_high, &file_offset_low, _PyLong_Size_t_Converter, &number_bytes)) {
676 goto exit;
677 }
678 _return_value = _winapi_MapViewOfFile_impl(module, file_map, desired_access, file_offset_high, file_offset_low, number_bytes);
679 if ((_return_value == NULL) && PyErr_Occurred()) {
680 goto exit;
681 }
682 return_value = HANDLE_TO_PYNUM(_return_value);
683
684exit:
685 return return_value;
686}
687
688PyDoc_STRVAR(_winapi_OpenFileMapping__doc__,
689"OpenFileMapping($module, desired_access, inherit_handle, name, /)\n"
690"--\n"
691"\n");
692
693#define _WINAPI_OPENFILEMAPPING_METHODDEF \
694 {"OpenFileMapping", (PyCFunction)(void(*)(void))_winapi_OpenFileMapping, METH_FASTCALL, _winapi_OpenFileMapping__doc__},
695
696static HANDLE
697_winapi_OpenFileMapping_impl(PyObject *module, DWORD desired_access,
698 BOOL inherit_handle, LPCWSTR name);
699
700static PyObject *
701_winapi_OpenFileMapping(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
702{
703 PyObject *return_value = NULL;
704 DWORD desired_access;
705 BOOL inherit_handle;
706 LPCWSTR name;
707 HANDLE _return_value;
708
709 if (!_PyArg_ParseStack(args, nargs, "kiu:OpenFileMapping",
710 &desired_access, &inherit_handle, &name)) {
711 goto exit;
712 }
713 _return_value = _winapi_OpenFileMapping_impl(module, desired_access, inherit_handle, name);
714 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
715 goto exit;
716 }
717 if (_return_value == NULL) {
718 Py_RETURN_NONE;
719 }
720 return_value = HANDLE_TO_PYNUM(_return_value);
721
722exit:
723 return return_value;
724}
725
Zachary Waref2244ea2015-05-13 01:22:54 -0500726PyDoc_STRVAR(_winapi_OpenProcess__doc__,
727"OpenProcess($module, desired_access, inherit_handle, process_id, /)\n"
728"--\n"
729"\n");
730
731#define _WINAPI_OPENPROCESS_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200732 {"OpenProcess", (PyCFunction)(void(*)(void))_winapi_OpenProcess, METH_FASTCALL, _winapi_OpenProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500733
734static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300735_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access,
Zachary Ware77772c02015-05-13 10:58:35 -0500736 BOOL inherit_handle, DWORD process_id);
Zachary Waref2244ea2015-05-13 01:22:54 -0500737
738static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200739_winapi_OpenProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500740{
741 PyObject *return_value = NULL;
742 DWORD desired_access;
743 BOOL inherit_handle;
744 DWORD process_id;
745 HANDLE _return_value;
746
Sylvain74453812017-06-10 06:51:48 +0200747 if (!_PyArg_ParseStack(args, nargs, "kik:OpenProcess",
748 &desired_access, &inherit_handle, &process_id)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100749 goto exit;
750 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500751 _return_value = _winapi_OpenProcess_impl(module, desired_access, inherit_handle, process_id);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300752 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500753 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300754 }
755 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500756 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300757 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500758 return_value = HANDLE_TO_PYNUM(_return_value);
759
760exit:
761 return return_value;
762}
763
764PyDoc_STRVAR(_winapi_PeekNamedPipe__doc__,
765"PeekNamedPipe($module, handle, size=0, /)\n"
766"--\n"
767"\n");
768
769#define _WINAPI_PEEKNAMEDPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200770 {"PeekNamedPipe", (PyCFunction)(void(*)(void))_winapi_PeekNamedPipe, METH_FASTCALL, _winapi_PeekNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500771
772static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300773_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size);
Zachary Waref2244ea2015-05-13 01:22:54 -0500774
775static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200776_winapi_PeekNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500777{
778 PyObject *return_value = NULL;
779 HANDLE handle;
780 int size = 0;
781
Sylvain74453812017-06-10 06:51:48 +0200782 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "|i:PeekNamedPipe",
783 &handle, &size)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100784 goto exit;
785 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500786 return_value = _winapi_PeekNamedPipe_impl(module, handle, size);
787
788exit:
789 return return_value;
790}
791
792PyDoc_STRVAR(_winapi_ReadFile__doc__,
793"ReadFile($module, /, handle, size, overlapped=False)\n"
794"--\n"
795"\n");
796
797#define _WINAPI_READFILE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200798 {"ReadFile", (PyCFunction)(void(*)(void))_winapi_ReadFile, METH_FASTCALL|METH_KEYWORDS, _winapi_ReadFile__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500799
800static PyObject *
Alexander Buchkovsky266f4902018-09-04 19:10:28 +0300801_winapi_ReadFile_impl(PyObject *module, HANDLE handle, DWORD size,
Zachary Ware77772c02015-05-13 10:58:35 -0500802 int use_overlapped);
Zachary Waref2244ea2015-05-13 01:22:54 -0500803
804static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200805_winapi_ReadFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500806{
807 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300808 static const char * const _keywords[] = {"handle", "size", "overlapped", NULL};
Alexander Buchkovsky266f4902018-09-04 19:10:28 +0300809 static _PyArg_Parser _parser = {"" F_HANDLE "k|i:ReadFile", _keywords, 0};
Zachary Waref2244ea2015-05-13 01:22:54 -0500810 HANDLE handle;
Alexander Buchkovsky266f4902018-09-04 19:10:28 +0300811 DWORD size;
Zachary Waref2244ea2015-05-13 01:22:54 -0500812 int use_overlapped = 0;
813
Victor Stinner3e1fad62017-01-17 01:29:01 +0100814 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300815 &handle, &size, &use_overlapped)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500816 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300817 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500818 return_value = _winapi_ReadFile_impl(module, handle, size, use_overlapped);
819
820exit:
821 return return_value;
822}
823
824PyDoc_STRVAR(_winapi_SetNamedPipeHandleState__doc__,
825"SetNamedPipeHandleState($module, named_pipe, mode,\n"
826" max_collection_count, collect_data_timeout, /)\n"
827"--\n"
828"\n");
829
830#define _WINAPI_SETNAMEDPIPEHANDLESTATE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200831 {"SetNamedPipeHandleState", (PyCFunction)(void(*)(void))_winapi_SetNamedPipeHandleState, METH_FASTCALL, _winapi_SetNamedPipeHandleState__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500832
833static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300834_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe,
Zachary Ware77772c02015-05-13 10:58:35 -0500835 PyObject *mode,
836 PyObject *max_collection_count,
837 PyObject *collect_data_timeout);
Zachary Waref2244ea2015-05-13 01:22:54 -0500838
839static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200840_winapi_SetNamedPipeHandleState(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500841{
842 PyObject *return_value = NULL;
843 HANDLE named_pipe;
844 PyObject *mode;
845 PyObject *max_collection_count;
846 PyObject *collect_data_timeout;
847
Sylvain74453812017-06-10 06:51:48 +0200848 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "OOO:SetNamedPipeHandleState",
849 &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100850 goto exit;
851 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500852 return_value = _winapi_SetNamedPipeHandleState_impl(module, named_pipe, mode, max_collection_count, collect_data_timeout);
853
854exit:
855 return return_value;
856}
857
858PyDoc_STRVAR(_winapi_TerminateProcess__doc__,
859"TerminateProcess($module, handle, exit_code, /)\n"
860"--\n"
861"\n"
862"Terminate the specified process and all of its threads.");
863
864#define _WINAPI_TERMINATEPROCESS_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200865 {"TerminateProcess", (PyCFunction)(void(*)(void))_winapi_TerminateProcess, METH_FASTCALL, _winapi_TerminateProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500866
867static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300868_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500869 UINT exit_code);
Zachary Waref2244ea2015-05-13 01:22:54 -0500870
871static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200872_winapi_TerminateProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500873{
874 PyObject *return_value = NULL;
875 HANDLE handle;
876 UINT exit_code;
877
Sylvain74453812017-06-10 06:51:48 +0200878 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "I:TerminateProcess",
879 &handle, &exit_code)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100880 goto exit;
881 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500882 return_value = _winapi_TerminateProcess_impl(module, handle, exit_code);
883
884exit:
885 return return_value;
886}
887
Davin Pottse895de32019-02-23 22:08:16 -0600888PyDoc_STRVAR(_winapi_VirtualQuerySize__doc__,
889"VirtualQuerySize($module, address, /)\n"
890"--\n"
891"\n");
892
893#define _WINAPI_VIRTUALQUERYSIZE_METHODDEF \
894 {"VirtualQuerySize", (PyCFunction)_winapi_VirtualQuerySize, METH_O, _winapi_VirtualQuerySize__doc__},
895
896static size_t
897_winapi_VirtualQuerySize_impl(PyObject *module, LPCVOID address);
898
899static PyObject *
900_winapi_VirtualQuerySize(PyObject *module, PyObject *arg)
901{
902 PyObject *return_value = NULL;
903 LPCVOID address;
904 size_t _return_value;
905
906 if (!PyArg_Parse(arg, "" F_POINTER ":VirtualQuerySize", &address)) {
907 goto exit;
908 }
909 _return_value = _winapi_VirtualQuerySize_impl(module, address);
910 if ((_return_value == (size_t)-1) && PyErr_Occurred()) {
911 goto exit;
912 }
913 return_value = PyLong_FromSize_t(_return_value);
914
915exit:
916 return return_value;
917}
918
Zachary Waref2244ea2015-05-13 01:22:54 -0500919PyDoc_STRVAR(_winapi_WaitNamedPipe__doc__,
920"WaitNamedPipe($module, name, timeout, /)\n"
921"--\n"
922"\n");
923
924#define _WINAPI_WAITNAMEDPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200925 {"WaitNamedPipe", (PyCFunction)(void(*)(void))_winapi_WaitNamedPipe, METH_FASTCALL, _winapi_WaitNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500926
927static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300928_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout);
Zachary Waref2244ea2015-05-13 01:22:54 -0500929
930static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200931_winapi_WaitNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500932{
933 PyObject *return_value = NULL;
934 LPCTSTR name;
935 DWORD timeout;
936
Sylvain74453812017-06-10 06:51:48 +0200937 if (!_PyArg_ParseStack(args, nargs, "sk:WaitNamedPipe",
938 &name, &timeout)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100939 goto exit;
940 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500941 return_value = _winapi_WaitNamedPipe_impl(module, name, timeout);
942
943exit:
944 return return_value;
945}
946
947PyDoc_STRVAR(_winapi_WaitForMultipleObjects__doc__,
948"WaitForMultipleObjects($module, handle_seq, wait_flag,\n"
949" milliseconds=_winapi.INFINITE, /)\n"
950"--\n"
951"\n");
952
953#define _WINAPI_WAITFORMULTIPLEOBJECTS_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200954 {"WaitForMultipleObjects", (PyCFunction)(void(*)(void))_winapi_WaitForMultipleObjects, METH_FASTCALL, _winapi_WaitForMultipleObjects__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500955
956static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300957_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq,
958 BOOL wait_flag, DWORD milliseconds);
Zachary Waref2244ea2015-05-13 01:22:54 -0500959
960static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200961_winapi_WaitForMultipleObjects(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500962{
963 PyObject *return_value = NULL;
964 PyObject *handle_seq;
965 BOOL wait_flag;
966 DWORD milliseconds = INFINITE;
967
Sylvain74453812017-06-10 06:51:48 +0200968 if (!_PyArg_ParseStack(args, nargs, "Oi|k:WaitForMultipleObjects",
969 &handle_seq, &wait_flag, &milliseconds)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100970 goto exit;
971 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500972 return_value = _winapi_WaitForMultipleObjects_impl(module, handle_seq, wait_flag, milliseconds);
973
974exit:
975 return return_value;
976}
977
978PyDoc_STRVAR(_winapi_WaitForSingleObject__doc__,
979"WaitForSingleObject($module, handle, milliseconds, /)\n"
980"--\n"
981"\n"
982"Wait for a single object.\n"
983"\n"
984"Wait until the specified object is in the signaled state or\n"
985"the time-out interval elapses. The timeout value is specified\n"
986"in milliseconds.");
987
988#define _WINAPI_WAITFORSINGLEOBJECT_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200989 {"WaitForSingleObject", (PyCFunction)(void(*)(void))_winapi_WaitForSingleObject, METH_FASTCALL, _winapi_WaitForSingleObject__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500990
991static long
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300992_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500993 DWORD milliseconds);
Zachary Waref2244ea2015-05-13 01:22:54 -0500994
995static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200996_winapi_WaitForSingleObject(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500997{
998 PyObject *return_value = NULL;
999 HANDLE handle;
1000 DWORD milliseconds;
1001 long _return_value;
1002
Sylvain74453812017-06-10 06:51:48 +02001003 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "k:WaitForSingleObject",
1004 &handle, &milliseconds)) {
Victor Stinner259f0e42017-01-17 01:35:17 +01001005 goto exit;
1006 }
Zachary Waref2244ea2015-05-13 01:22:54 -05001007 _return_value = _winapi_WaitForSingleObject_impl(module, handle, milliseconds);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001008 if ((_return_value == -1) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -05001009 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001010 }
Zachary Waref2244ea2015-05-13 01:22:54 -05001011 return_value = PyLong_FromLong(_return_value);
1012
1013exit:
1014 return return_value;
1015}
1016
1017PyDoc_STRVAR(_winapi_WriteFile__doc__,
1018"WriteFile($module, /, handle, buffer, overlapped=False)\n"
1019"--\n"
1020"\n");
1021
1022#define _WINAPI_WRITEFILE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +02001023 {"WriteFile", (PyCFunction)(void(*)(void))_winapi_WriteFile, METH_FASTCALL|METH_KEYWORDS, _winapi_WriteFile__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -05001024
1025static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +03001026_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer,
Zachary Ware77772c02015-05-13 10:58:35 -05001027 int use_overlapped);
Zachary Waref2244ea2015-05-13 01:22:54 -05001028
1029static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +02001030_winapi_WriteFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -05001031{
1032 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001033 static const char * const _keywords[] = {"handle", "buffer", "overlapped", NULL};
1034 static _PyArg_Parser _parser = {"" F_HANDLE "O|i:WriteFile", _keywords, 0};
Zachary Waref2244ea2015-05-13 01:22:54 -05001035 HANDLE handle;
1036 PyObject *buffer;
1037 int use_overlapped = 0;
1038
Victor Stinner3e1fad62017-01-17 01:29:01 +01001039 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001040 &handle, &buffer, &use_overlapped)) {
Zachary Waref2244ea2015-05-13 01:22:54 -05001041 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +03001042 }
Zachary Waref2244ea2015-05-13 01:22:54 -05001043 return_value = _winapi_WriteFile_impl(module, handle, buffer, use_overlapped);
1044
1045exit:
1046 return return_value;
1047}
Victor Stinner91106cd2017-12-13 12:29:09 +01001048
1049PyDoc_STRVAR(_winapi_GetACP__doc__,
1050"GetACP($module, /)\n"
1051"--\n"
1052"\n"
1053"Get the current Windows ANSI code page identifier.");
1054
1055#define _WINAPI_GETACP_METHODDEF \
1056 {"GetACP", (PyCFunction)_winapi_GetACP, METH_NOARGS, _winapi_GetACP__doc__},
1057
1058static PyObject *
1059_winapi_GetACP_impl(PyObject *module);
1060
1061static PyObject *
1062_winapi_GetACP(PyObject *module, PyObject *Py_UNUSED(ignored))
1063{
1064 return _winapi_GetACP_impl(module);
1065}
Segev Finerb2a60832017-12-18 11:28:19 +02001066
1067PyDoc_STRVAR(_winapi_GetFileType__doc__,
1068"GetFileType($module, /, handle)\n"
1069"--\n"
1070"\n");
1071
1072#define _WINAPI_GETFILETYPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +02001073 {"GetFileType", (PyCFunction)(void(*)(void))_winapi_GetFileType, METH_FASTCALL|METH_KEYWORDS, _winapi_GetFileType__doc__},
Segev Finerb2a60832017-12-18 11:28:19 +02001074
1075static DWORD
1076_winapi_GetFileType_impl(PyObject *module, HANDLE handle);
1077
1078static PyObject *
1079_winapi_GetFileType(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1080{
1081 PyObject *return_value = NULL;
1082 static const char * const _keywords[] = {"handle", NULL};
1083 static _PyArg_Parser _parser = {"" F_HANDLE ":GetFileType", _keywords, 0};
1084 HANDLE handle;
1085 DWORD _return_value;
1086
1087 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
1088 &handle)) {
1089 goto exit;
1090 }
1091 _return_value = _winapi_GetFileType_impl(module, handle);
1092 if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
1093 goto exit;
1094 }
1095 return_value = Py_BuildValue("k", _return_value);
1096
1097exit:
1098 return return_value;
1099}
Davin Pottse895de32019-02-23 22:08:16 -06001100/*[clinic end generated code: output=f3897898ea1da99d input=a9049054013a1b77]*/