blob: f1158a006210d41ae878af770047d518f45d8082 [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
171PyDoc_STRVAR(_winapi_CreateJunction__doc__,
172"CreateJunction($module, src_path, dst_path, /)\n"
173"--\n"
174"\n");
175
176#define _WINAPI_CREATEJUNCTION_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200177 {"CreateJunction", (PyCFunction)(void(*)(void))_winapi_CreateJunction, METH_FASTCALL, _winapi_CreateJunction__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500178
179static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300180_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path,
Zachary Ware77772c02015-05-13 10:58:35 -0500181 LPWSTR dst_path);
Zachary Waref2244ea2015-05-13 01:22:54 -0500182
183static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200184_winapi_CreateJunction(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500185{
186 PyObject *return_value = NULL;
187 LPWSTR src_path;
188 LPWSTR dst_path;
189
Sylvain74453812017-06-10 06:51:48 +0200190 if (!_PyArg_ParseStack(args, nargs, "uu:CreateJunction",
191 &src_path, &dst_path)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100192 goto exit;
193 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500194 return_value = _winapi_CreateJunction_impl(module, src_path, dst_path);
195
196exit:
197 return return_value;
198}
199
200PyDoc_STRVAR(_winapi_CreateNamedPipe__doc__,
201"CreateNamedPipe($module, name, open_mode, pipe_mode, max_instances,\n"
202" out_buffer_size, in_buffer_size, default_timeout,\n"
203" security_attributes, /)\n"
204"--\n"
205"\n");
206
207#define _WINAPI_CREATENAMEDPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200208 {"CreateNamedPipe", (PyCFunction)(void(*)(void))_winapi_CreateNamedPipe, METH_FASTCALL, _winapi_CreateNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500209
210static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300211_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode,
212 DWORD pipe_mode, DWORD max_instances,
213 DWORD out_buffer_size, DWORD in_buffer_size,
214 DWORD default_timeout,
Zachary Ware77772c02015-05-13 10:58:35 -0500215 LPSECURITY_ATTRIBUTES security_attributes);
Zachary Waref2244ea2015-05-13 01:22:54 -0500216
217static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200218_winapi_CreateNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500219{
220 PyObject *return_value = NULL;
221 LPCTSTR name;
222 DWORD open_mode;
223 DWORD pipe_mode;
224 DWORD max_instances;
225 DWORD out_buffer_size;
226 DWORD in_buffer_size;
227 DWORD default_timeout;
228 LPSECURITY_ATTRIBUTES security_attributes;
229 HANDLE _return_value;
230
Sylvain74453812017-06-10 06:51:48 +0200231 if (!_PyArg_ParseStack(args, nargs, "skkkkkk" F_POINTER ":CreateNamedPipe",
232 &name, &open_mode, &pipe_mode, &max_instances, &out_buffer_size, &in_buffer_size, &default_timeout, &security_attributes)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100233 goto exit;
234 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500235 _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 +0300236 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500237 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300238 }
239 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500240 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300241 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500242 return_value = HANDLE_TO_PYNUM(_return_value);
243
244exit:
245 return return_value;
246}
247
248PyDoc_STRVAR(_winapi_CreatePipe__doc__,
249"CreatePipe($module, pipe_attrs, size, /)\n"
250"--\n"
251"\n"
252"Create an anonymous pipe.\n"
253"\n"
254" pipe_attrs\n"
255" Ignored internally, can be None.\n"
256"\n"
257"Returns a 2-tuple of handles, to the read and write ends of the pipe.");
258
259#define _WINAPI_CREATEPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200260 {"CreatePipe", (PyCFunction)(void(*)(void))_winapi_CreatePipe, METH_FASTCALL, _winapi_CreatePipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500261
262static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300263_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size);
Zachary Waref2244ea2015-05-13 01:22:54 -0500264
265static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200266_winapi_CreatePipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500267{
268 PyObject *return_value = NULL;
269 PyObject *pipe_attrs;
270 DWORD size;
271
Sylvain74453812017-06-10 06:51:48 +0200272 if (!_PyArg_ParseStack(args, nargs, "Ok:CreatePipe",
273 &pipe_attrs, &size)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100274 goto exit;
275 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500276 return_value = _winapi_CreatePipe_impl(module, pipe_attrs, size);
277
278exit:
279 return return_value;
280}
281
282PyDoc_STRVAR(_winapi_CreateProcess__doc__,
283"CreateProcess($module, application_name, command_line, proc_attrs,\n"
284" thread_attrs, inherit_handles, creation_flags,\n"
285" env_mapping, current_directory, startup_info, /)\n"
286"--\n"
287"\n"
288"Create a new process and its primary thread.\n"
289"\n"
Vladimir Matveev7b360162018-12-14 00:30:51 -0800290" command_line\n"
291" Can be str or None\n"
Zachary Waref2244ea2015-05-13 01:22:54 -0500292" proc_attrs\n"
293" Ignored internally, can be None.\n"
294" thread_attrs\n"
295" Ignored internally, can be None.\n"
296"\n"
297"The return value is a tuple of the process handle, thread handle,\n"
298"process ID, and thread ID.");
299
300#define _WINAPI_CREATEPROCESS_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200301 {"CreateProcess", (PyCFunction)(void(*)(void))_winapi_CreateProcess, METH_FASTCALL, _winapi_CreateProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500302
303static PyObject *
Serhiy Storchakaafb3e712018-12-14 11:19:51 +0200304_winapi_CreateProcess_impl(PyObject *module,
305 const Py_UNICODE *application_name,
Vladimir Matveev7b360162018-12-14 00:30:51 -0800306 PyObject *command_line, PyObject *proc_attrs,
Zachary Ware77772c02015-05-13 10:58:35 -0500307 PyObject *thread_attrs, BOOL inherit_handles,
308 DWORD creation_flags, PyObject *env_mapping,
Serhiy Storchakaafb3e712018-12-14 11:19:51 +0200309 const Py_UNICODE *current_directory,
Zachary Ware77772c02015-05-13 10:58:35 -0500310 PyObject *startup_info);
Zachary Waref2244ea2015-05-13 01:22:54 -0500311
312static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200313_winapi_CreateProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500314{
315 PyObject *return_value = NULL;
Serhiy Storchakaafb3e712018-12-14 11:19:51 +0200316 const Py_UNICODE *application_name;
Vladimir Matveev7b360162018-12-14 00:30:51 -0800317 PyObject *command_line;
Zachary Waref2244ea2015-05-13 01:22:54 -0500318 PyObject *proc_attrs;
319 PyObject *thread_attrs;
320 BOOL inherit_handles;
321 DWORD creation_flags;
322 PyObject *env_mapping;
Serhiy Storchakaafb3e712018-12-14 11:19:51 +0200323 const Py_UNICODE *current_directory;
Zachary Waref2244ea2015-05-13 01:22:54 -0500324 PyObject *startup_info;
325
Vladimir Matveev7b360162018-12-14 00:30:51 -0800326 if (!_PyArg_ParseStack(args, nargs, "ZOOOikOZO:CreateProcess",
Sylvain74453812017-06-10 06:51:48 +0200327 &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 +0100328 goto exit;
329 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500330 return_value = _winapi_CreateProcess_impl(module, application_name, command_line, proc_attrs, thread_attrs, inherit_handles, creation_flags, env_mapping, current_directory, startup_info);
331
332exit:
333 return return_value;
334}
335
336PyDoc_STRVAR(_winapi_DuplicateHandle__doc__,
337"DuplicateHandle($module, source_process_handle, source_handle,\n"
338" target_process_handle, desired_access, inherit_handle,\n"
339" options=0, /)\n"
340"--\n"
341"\n"
342"Return a duplicate handle object.\n"
343"\n"
344"The duplicate handle refers to the same object as the original\n"
345"handle. Therefore, any changes to the object are reflected\n"
346"through both handles.");
347
348#define _WINAPI_DUPLICATEHANDLE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200349 {"DuplicateHandle", (PyCFunction)(void(*)(void))_winapi_DuplicateHandle, METH_FASTCALL, _winapi_DuplicateHandle__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500350
351static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300352_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500353 HANDLE source_handle,
354 HANDLE target_process_handle,
355 DWORD desired_access, BOOL inherit_handle,
356 DWORD options);
Zachary Waref2244ea2015-05-13 01:22:54 -0500357
358static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200359_winapi_DuplicateHandle(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500360{
361 PyObject *return_value = NULL;
362 HANDLE source_process_handle;
363 HANDLE source_handle;
364 HANDLE target_process_handle;
365 DWORD desired_access;
366 BOOL inherit_handle;
367 DWORD options = 0;
368 HANDLE _return_value;
369
Sylvain74453812017-06-10 06:51:48 +0200370 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle",
371 &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100372 goto exit;
373 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500374 _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 +0300375 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500376 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300377 }
378 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500379 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300380 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500381 return_value = HANDLE_TO_PYNUM(_return_value);
382
383exit:
384 return return_value;
385}
386
387PyDoc_STRVAR(_winapi_ExitProcess__doc__,
388"ExitProcess($module, ExitCode, /)\n"
389"--\n"
390"\n");
391
392#define _WINAPI_EXITPROCESS_METHODDEF \
393 {"ExitProcess", (PyCFunction)_winapi_ExitProcess, METH_O, _winapi_ExitProcess__doc__},
394
395static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300396_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode);
Zachary Waref2244ea2015-05-13 01:22:54 -0500397
398static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300399_winapi_ExitProcess(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500400{
401 PyObject *return_value = NULL;
402 UINT ExitCode;
403
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300404 if (!PyArg_Parse(arg, "I:ExitProcess", &ExitCode)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500405 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300406 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500407 return_value = _winapi_ExitProcess_impl(module, ExitCode);
408
409exit:
410 return return_value;
411}
412
413PyDoc_STRVAR(_winapi_GetCurrentProcess__doc__,
414"GetCurrentProcess($module, /)\n"
415"--\n"
416"\n"
417"Return a handle object for the current process.");
418
419#define _WINAPI_GETCURRENTPROCESS_METHODDEF \
420 {"GetCurrentProcess", (PyCFunction)_winapi_GetCurrentProcess, METH_NOARGS, _winapi_GetCurrentProcess__doc__},
421
422static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300423_winapi_GetCurrentProcess_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500424
425static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300426_winapi_GetCurrentProcess(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500427{
428 PyObject *return_value = NULL;
429 HANDLE _return_value;
430
431 _return_value = _winapi_GetCurrentProcess_impl(module);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300432 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500433 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300434 }
435 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500436 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300437 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500438 return_value = HANDLE_TO_PYNUM(_return_value);
439
440exit:
441 return return_value;
442}
443
444PyDoc_STRVAR(_winapi_GetExitCodeProcess__doc__,
445"GetExitCodeProcess($module, process, /)\n"
446"--\n"
447"\n"
448"Return the termination status of the specified process.");
449
450#define _WINAPI_GETEXITCODEPROCESS_METHODDEF \
451 {"GetExitCodeProcess", (PyCFunction)_winapi_GetExitCodeProcess, METH_O, _winapi_GetExitCodeProcess__doc__},
452
453static DWORD
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300454_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process);
Zachary Waref2244ea2015-05-13 01:22:54 -0500455
456static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300457_winapi_GetExitCodeProcess(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500458{
459 PyObject *return_value = NULL;
460 HANDLE process;
461 DWORD _return_value;
462
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300463 if (!PyArg_Parse(arg, "" F_HANDLE ":GetExitCodeProcess", &process)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500464 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300465 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500466 _return_value = _winapi_GetExitCodeProcess_impl(module, process);
Victor Stinner850a18e2017-10-24 16:53:32 -0700467 if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500468 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300469 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500470 return_value = Py_BuildValue("k", _return_value);
471
472exit:
473 return return_value;
474}
475
476PyDoc_STRVAR(_winapi_GetLastError__doc__,
477"GetLastError($module, /)\n"
478"--\n"
479"\n");
480
481#define _WINAPI_GETLASTERROR_METHODDEF \
482 {"GetLastError", (PyCFunction)_winapi_GetLastError, METH_NOARGS, _winapi_GetLastError__doc__},
483
484static DWORD
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300485_winapi_GetLastError_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500486
487static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300488_winapi_GetLastError(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500489{
490 PyObject *return_value = NULL;
491 DWORD _return_value;
492
493 _return_value = _winapi_GetLastError_impl(module);
Victor Stinner850a18e2017-10-24 16:53:32 -0700494 if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500495 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300496 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500497 return_value = Py_BuildValue("k", _return_value);
498
499exit:
500 return return_value;
501}
502
503PyDoc_STRVAR(_winapi_GetModuleFileName__doc__,
504"GetModuleFileName($module, module_handle, /)\n"
505"--\n"
506"\n"
507"Return the fully-qualified path for the file that contains module.\n"
508"\n"
509"The module must have been loaded by the current process.\n"
510"\n"
511"The module parameter should be a handle to the loaded module\n"
512"whose path is being requested. If this parameter is 0,\n"
513"GetModuleFileName retrieves the path of the executable file\n"
514"of the current process.");
515
516#define _WINAPI_GETMODULEFILENAME_METHODDEF \
517 {"GetModuleFileName", (PyCFunction)_winapi_GetModuleFileName, METH_O, _winapi_GetModuleFileName__doc__},
518
519static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300520_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle);
Zachary Waref2244ea2015-05-13 01:22:54 -0500521
522static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300523_winapi_GetModuleFileName(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500524{
525 PyObject *return_value = NULL;
526 HMODULE module_handle;
527
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300528 if (!PyArg_Parse(arg, "" F_HANDLE ":GetModuleFileName", &module_handle)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500529 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300530 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500531 return_value = _winapi_GetModuleFileName_impl(module, module_handle);
532
533exit:
534 return return_value;
535}
536
537PyDoc_STRVAR(_winapi_GetStdHandle__doc__,
538"GetStdHandle($module, std_handle, /)\n"
539"--\n"
540"\n"
541"Return a handle to the specified standard device.\n"
542"\n"
543" std_handle\n"
544" One of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, or STD_ERROR_HANDLE.\n"
545"\n"
546"The integer associated with the handle object is returned.");
547
548#define _WINAPI_GETSTDHANDLE_METHODDEF \
549 {"GetStdHandle", (PyCFunction)_winapi_GetStdHandle, METH_O, _winapi_GetStdHandle__doc__},
550
551static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300552_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle);
Zachary Waref2244ea2015-05-13 01:22:54 -0500553
554static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300555_winapi_GetStdHandle(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500556{
557 PyObject *return_value = NULL;
558 DWORD std_handle;
559 HANDLE _return_value;
560
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300561 if (!PyArg_Parse(arg, "k:GetStdHandle", &std_handle)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500562 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300563 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500564 _return_value = _winapi_GetStdHandle_impl(module, std_handle);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300565 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500566 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300567 }
568 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500569 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300570 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500571 return_value = HANDLE_TO_PYNUM(_return_value);
572
573exit:
574 return return_value;
575}
576
577PyDoc_STRVAR(_winapi_GetVersion__doc__,
578"GetVersion($module, /)\n"
579"--\n"
580"\n"
581"Return the version number of the current operating system.");
582
583#define _WINAPI_GETVERSION_METHODDEF \
584 {"GetVersion", (PyCFunction)_winapi_GetVersion, METH_NOARGS, _winapi_GetVersion__doc__},
585
586static long
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300587_winapi_GetVersion_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500588
589static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300590_winapi_GetVersion(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500591{
592 PyObject *return_value = NULL;
593 long _return_value;
594
595 _return_value = _winapi_GetVersion_impl(module);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300596 if ((_return_value == -1) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500597 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300598 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500599 return_value = PyLong_FromLong(_return_value);
600
601exit:
602 return return_value;
603}
604
605PyDoc_STRVAR(_winapi_OpenProcess__doc__,
606"OpenProcess($module, desired_access, inherit_handle, process_id, /)\n"
607"--\n"
608"\n");
609
610#define _WINAPI_OPENPROCESS_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200611 {"OpenProcess", (PyCFunction)(void(*)(void))_winapi_OpenProcess, METH_FASTCALL, _winapi_OpenProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500612
613static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300614_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access,
Zachary Ware77772c02015-05-13 10:58:35 -0500615 BOOL inherit_handle, DWORD process_id);
Zachary Waref2244ea2015-05-13 01:22:54 -0500616
617static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200618_winapi_OpenProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500619{
620 PyObject *return_value = NULL;
621 DWORD desired_access;
622 BOOL inherit_handle;
623 DWORD process_id;
624 HANDLE _return_value;
625
Sylvain74453812017-06-10 06:51:48 +0200626 if (!_PyArg_ParseStack(args, nargs, "kik:OpenProcess",
627 &desired_access, &inherit_handle, &process_id)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100628 goto exit;
629 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500630 _return_value = _winapi_OpenProcess_impl(module, desired_access, inherit_handle, process_id);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300631 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500632 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300633 }
634 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500635 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300636 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500637 return_value = HANDLE_TO_PYNUM(_return_value);
638
639exit:
640 return return_value;
641}
642
643PyDoc_STRVAR(_winapi_PeekNamedPipe__doc__,
644"PeekNamedPipe($module, handle, size=0, /)\n"
645"--\n"
646"\n");
647
648#define _WINAPI_PEEKNAMEDPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200649 {"PeekNamedPipe", (PyCFunction)(void(*)(void))_winapi_PeekNamedPipe, METH_FASTCALL, _winapi_PeekNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500650
651static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300652_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size);
Zachary Waref2244ea2015-05-13 01:22:54 -0500653
654static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200655_winapi_PeekNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500656{
657 PyObject *return_value = NULL;
658 HANDLE handle;
659 int size = 0;
660
Sylvain74453812017-06-10 06:51:48 +0200661 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "|i:PeekNamedPipe",
662 &handle, &size)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100663 goto exit;
664 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500665 return_value = _winapi_PeekNamedPipe_impl(module, handle, size);
666
667exit:
668 return return_value;
669}
670
671PyDoc_STRVAR(_winapi_ReadFile__doc__,
672"ReadFile($module, /, handle, size, overlapped=False)\n"
673"--\n"
674"\n");
675
676#define _WINAPI_READFILE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200677 {"ReadFile", (PyCFunction)(void(*)(void))_winapi_ReadFile, METH_FASTCALL|METH_KEYWORDS, _winapi_ReadFile__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500678
679static PyObject *
Alexander Buchkovsky266f4902018-09-04 19:10:28 +0300680_winapi_ReadFile_impl(PyObject *module, HANDLE handle, DWORD size,
Zachary Ware77772c02015-05-13 10:58:35 -0500681 int use_overlapped);
Zachary Waref2244ea2015-05-13 01:22:54 -0500682
683static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200684_winapi_ReadFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500685{
686 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300687 static const char * const _keywords[] = {"handle", "size", "overlapped", NULL};
Alexander Buchkovsky266f4902018-09-04 19:10:28 +0300688 static _PyArg_Parser _parser = {"" F_HANDLE "k|i:ReadFile", _keywords, 0};
Zachary Waref2244ea2015-05-13 01:22:54 -0500689 HANDLE handle;
Alexander Buchkovsky266f4902018-09-04 19:10:28 +0300690 DWORD size;
Zachary Waref2244ea2015-05-13 01:22:54 -0500691 int use_overlapped = 0;
692
Victor Stinner3e1fad62017-01-17 01:29:01 +0100693 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300694 &handle, &size, &use_overlapped)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500695 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300696 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500697 return_value = _winapi_ReadFile_impl(module, handle, size, use_overlapped);
698
699exit:
700 return return_value;
701}
702
703PyDoc_STRVAR(_winapi_SetNamedPipeHandleState__doc__,
704"SetNamedPipeHandleState($module, named_pipe, mode,\n"
705" max_collection_count, collect_data_timeout, /)\n"
706"--\n"
707"\n");
708
709#define _WINAPI_SETNAMEDPIPEHANDLESTATE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200710 {"SetNamedPipeHandleState", (PyCFunction)(void(*)(void))_winapi_SetNamedPipeHandleState, METH_FASTCALL, _winapi_SetNamedPipeHandleState__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500711
712static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300713_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe,
Zachary Ware77772c02015-05-13 10:58:35 -0500714 PyObject *mode,
715 PyObject *max_collection_count,
716 PyObject *collect_data_timeout);
Zachary Waref2244ea2015-05-13 01:22:54 -0500717
718static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200719_winapi_SetNamedPipeHandleState(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500720{
721 PyObject *return_value = NULL;
722 HANDLE named_pipe;
723 PyObject *mode;
724 PyObject *max_collection_count;
725 PyObject *collect_data_timeout;
726
Sylvain74453812017-06-10 06:51:48 +0200727 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "OOO:SetNamedPipeHandleState",
728 &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100729 goto exit;
730 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500731 return_value = _winapi_SetNamedPipeHandleState_impl(module, named_pipe, mode, max_collection_count, collect_data_timeout);
732
733exit:
734 return return_value;
735}
736
737PyDoc_STRVAR(_winapi_TerminateProcess__doc__,
738"TerminateProcess($module, handle, exit_code, /)\n"
739"--\n"
740"\n"
741"Terminate the specified process and all of its threads.");
742
743#define _WINAPI_TERMINATEPROCESS_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200744 {"TerminateProcess", (PyCFunction)(void(*)(void))_winapi_TerminateProcess, METH_FASTCALL, _winapi_TerminateProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500745
746static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300747_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500748 UINT exit_code);
Zachary Waref2244ea2015-05-13 01:22:54 -0500749
750static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200751_winapi_TerminateProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500752{
753 PyObject *return_value = NULL;
754 HANDLE handle;
755 UINT exit_code;
756
Sylvain74453812017-06-10 06:51:48 +0200757 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "I:TerminateProcess",
758 &handle, &exit_code)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100759 goto exit;
760 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500761 return_value = _winapi_TerminateProcess_impl(module, handle, exit_code);
762
763exit:
764 return return_value;
765}
766
767PyDoc_STRVAR(_winapi_WaitNamedPipe__doc__,
768"WaitNamedPipe($module, name, timeout, /)\n"
769"--\n"
770"\n");
771
772#define _WINAPI_WAITNAMEDPIPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200773 {"WaitNamedPipe", (PyCFunction)(void(*)(void))_winapi_WaitNamedPipe, METH_FASTCALL, _winapi_WaitNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500774
775static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300776_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout);
Zachary Waref2244ea2015-05-13 01:22:54 -0500777
778static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200779_winapi_WaitNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500780{
781 PyObject *return_value = NULL;
782 LPCTSTR name;
783 DWORD timeout;
784
Sylvain74453812017-06-10 06:51:48 +0200785 if (!_PyArg_ParseStack(args, nargs, "sk:WaitNamedPipe",
786 &name, &timeout)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100787 goto exit;
788 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500789 return_value = _winapi_WaitNamedPipe_impl(module, name, timeout);
790
791exit:
792 return return_value;
793}
794
795PyDoc_STRVAR(_winapi_WaitForMultipleObjects__doc__,
796"WaitForMultipleObjects($module, handle_seq, wait_flag,\n"
797" milliseconds=_winapi.INFINITE, /)\n"
798"--\n"
799"\n");
800
801#define _WINAPI_WAITFORMULTIPLEOBJECTS_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200802 {"WaitForMultipleObjects", (PyCFunction)(void(*)(void))_winapi_WaitForMultipleObjects, METH_FASTCALL, _winapi_WaitForMultipleObjects__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500803
804static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300805_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq,
806 BOOL wait_flag, DWORD milliseconds);
Zachary Waref2244ea2015-05-13 01:22:54 -0500807
808static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200809_winapi_WaitForMultipleObjects(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500810{
811 PyObject *return_value = NULL;
812 PyObject *handle_seq;
813 BOOL wait_flag;
814 DWORD milliseconds = INFINITE;
815
Sylvain74453812017-06-10 06:51:48 +0200816 if (!_PyArg_ParseStack(args, nargs, "Oi|k:WaitForMultipleObjects",
817 &handle_seq, &wait_flag, &milliseconds)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100818 goto exit;
819 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500820 return_value = _winapi_WaitForMultipleObjects_impl(module, handle_seq, wait_flag, milliseconds);
821
822exit:
823 return return_value;
824}
825
826PyDoc_STRVAR(_winapi_WaitForSingleObject__doc__,
827"WaitForSingleObject($module, handle, milliseconds, /)\n"
828"--\n"
829"\n"
830"Wait for a single object.\n"
831"\n"
832"Wait until the specified object is in the signaled state or\n"
833"the time-out interval elapses. The timeout value is specified\n"
834"in milliseconds.");
835
836#define _WINAPI_WAITFORSINGLEOBJECT_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200837 {"WaitForSingleObject", (PyCFunction)(void(*)(void))_winapi_WaitForSingleObject, METH_FASTCALL, _winapi_WaitForSingleObject__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500838
839static long
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300840_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500841 DWORD milliseconds);
Zachary Waref2244ea2015-05-13 01:22:54 -0500842
843static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200844_winapi_WaitForSingleObject(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
Zachary Waref2244ea2015-05-13 01:22:54 -0500845{
846 PyObject *return_value = NULL;
847 HANDLE handle;
848 DWORD milliseconds;
849 long _return_value;
850
Sylvain74453812017-06-10 06:51:48 +0200851 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "k:WaitForSingleObject",
852 &handle, &milliseconds)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100853 goto exit;
854 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500855 _return_value = _winapi_WaitForSingleObject_impl(module, handle, milliseconds);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300856 if ((_return_value == -1) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500857 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300858 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500859 return_value = PyLong_FromLong(_return_value);
860
861exit:
862 return return_value;
863}
864
865PyDoc_STRVAR(_winapi_WriteFile__doc__,
866"WriteFile($module, /, handle, buffer, overlapped=False)\n"
867"--\n"
868"\n");
869
870#define _WINAPI_WRITEFILE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200871 {"WriteFile", (PyCFunction)(void(*)(void))_winapi_WriteFile, METH_FASTCALL|METH_KEYWORDS, _winapi_WriteFile__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500872
873static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300874_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer,
Zachary Ware77772c02015-05-13 10:58:35 -0500875 int use_overlapped);
Zachary Waref2244ea2015-05-13 01:22:54 -0500876
877static PyObject *
Serhiy Storchakaa5552f02017-12-15 13:11:11 +0200878_winapi_WriteFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500879{
880 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300881 static const char * const _keywords[] = {"handle", "buffer", "overlapped", NULL};
882 static _PyArg_Parser _parser = {"" F_HANDLE "O|i:WriteFile", _keywords, 0};
Zachary Waref2244ea2015-05-13 01:22:54 -0500883 HANDLE handle;
884 PyObject *buffer;
885 int use_overlapped = 0;
886
Victor Stinner3e1fad62017-01-17 01:29:01 +0100887 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300888 &handle, &buffer, &use_overlapped)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500889 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300890 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500891 return_value = _winapi_WriteFile_impl(module, handle, buffer, use_overlapped);
892
893exit:
894 return return_value;
895}
Victor Stinner91106cd2017-12-13 12:29:09 +0100896
897PyDoc_STRVAR(_winapi_GetACP__doc__,
898"GetACP($module, /)\n"
899"--\n"
900"\n"
901"Get the current Windows ANSI code page identifier.");
902
903#define _WINAPI_GETACP_METHODDEF \
904 {"GetACP", (PyCFunction)_winapi_GetACP, METH_NOARGS, _winapi_GetACP__doc__},
905
906static PyObject *
907_winapi_GetACP_impl(PyObject *module);
908
909static PyObject *
910_winapi_GetACP(PyObject *module, PyObject *Py_UNUSED(ignored))
911{
912 return _winapi_GetACP_impl(module);
913}
Segev Finerb2a60832017-12-18 11:28:19 +0200914
915PyDoc_STRVAR(_winapi_GetFileType__doc__,
916"GetFileType($module, /, handle)\n"
917"--\n"
918"\n");
919
920#define _WINAPI_GETFILETYPE_METHODDEF \
Serhiy Storchaka4a934d42018-11-27 11:27:36 +0200921 {"GetFileType", (PyCFunction)(void(*)(void))_winapi_GetFileType, METH_FASTCALL|METH_KEYWORDS, _winapi_GetFileType__doc__},
Segev Finerb2a60832017-12-18 11:28:19 +0200922
923static DWORD
924_winapi_GetFileType_impl(PyObject *module, HANDLE handle);
925
926static PyObject *
927_winapi_GetFileType(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
928{
929 PyObject *return_value = NULL;
930 static const char * const _keywords[] = {"handle", NULL};
931 static _PyArg_Parser _parser = {"" F_HANDLE ":GetFileType", _keywords, 0};
932 HANDLE handle;
933 DWORD _return_value;
934
935 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
936 &handle)) {
937 goto exit;
938 }
939 _return_value = _winapi_GetFileType_impl(module, handle);
940 if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
941 goto exit;
942 }
943 return_value = Py_BuildValue("k", _return_value);
944
945exit:
946 return return_value;
947}
Serhiy Storchaka32d96a22018-12-25 13:23:47 +0200948/*[clinic end generated code: output=5063c84b2d125488 input=a9049054013a1b77]*/