blob: bee75bbec14f9740ff9a6e789294d60d3f699dbc [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 Storchaka5dee6552016-06-09 16:16:06 +030022 if (!PyArg_Parse(arg, "p:GetOverlappedResult", &wait)) {
Zachary Waref2244ea2015-05-13 01:22:54 -050023 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030024 }
Zachary Waref2244ea2015-05-13 01:22:54 -050025 return_value = _winapi_Overlapped_GetOverlappedResult_impl(self, wait);
26
27exit:
28 return return_value;
29}
30
31PyDoc_STRVAR(_winapi_Overlapped_getbuffer__doc__,
32"getbuffer($self, /)\n"
33"--\n"
34"\n");
35
36#define _WINAPI_OVERLAPPED_GETBUFFER_METHODDEF \
37 {"getbuffer", (PyCFunction)_winapi_Overlapped_getbuffer, METH_NOARGS, _winapi_Overlapped_getbuffer__doc__},
38
39static PyObject *
40_winapi_Overlapped_getbuffer_impl(OverlappedObject *self);
41
42static PyObject *
43_winapi_Overlapped_getbuffer(OverlappedObject *self, PyObject *Py_UNUSED(ignored))
44{
45 return _winapi_Overlapped_getbuffer_impl(self);
46}
47
48PyDoc_STRVAR(_winapi_Overlapped_cancel__doc__,
49"cancel($self, /)\n"
50"--\n"
51"\n");
52
53#define _WINAPI_OVERLAPPED_CANCEL_METHODDEF \
54 {"cancel", (PyCFunction)_winapi_Overlapped_cancel, METH_NOARGS, _winapi_Overlapped_cancel__doc__},
55
56static PyObject *
57_winapi_Overlapped_cancel_impl(OverlappedObject *self);
58
59static PyObject *
60_winapi_Overlapped_cancel(OverlappedObject *self, PyObject *Py_UNUSED(ignored))
61{
62 return _winapi_Overlapped_cancel_impl(self);
63}
64
65PyDoc_STRVAR(_winapi_CloseHandle__doc__,
66"CloseHandle($module, handle, /)\n"
67"--\n"
68"\n"
69"Close handle.");
70
71#define _WINAPI_CLOSEHANDLE_METHODDEF \
72 {"CloseHandle", (PyCFunction)_winapi_CloseHandle, METH_O, _winapi_CloseHandle__doc__},
73
74static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030075_winapi_CloseHandle_impl(PyObject *module, HANDLE handle);
Zachary Waref2244ea2015-05-13 01:22:54 -050076
77static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +030078_winapi_CloseHandle(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -050079{
80 PyObject *return_value = NULL;
81 HANDLE handle;
82
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030083 if (!PyArg_Parse(arg, "" F_HANDLE ":CloseHandle", &handle)) {
Zachary Waref2244ea2015-05-13 01:22:54 -050084 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +030085 }
Zachary Waref2244ea2015-05-13 01:22:54 -050086 return_value = _winapi_CloseHandle_impl(module, handle);
87
88exit:
89 return return_value;
90}
91
92PyDoc_STRVAR(_winapi_ConnectNamedPipe__doc__,
93"ConnectNamedPipe($module, /, handle, overlapped=False)\n"
94"--\n"
95"\n");
96
97#define _WINAPI_CONNECTNAMEDPIPE_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -070098 {"ConnectNamedPipe", (PyCFunction)_winapi_ConnectNamedPipe, METH_FASTCALL, _winapi_ConnectNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -050099
100static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300101_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500102 int use_overlapped);
Zachary Waref2244ea2015-05-13 01:22:54 -0500103
104static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700105_winapi_ConnectNamedPipe(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500106{
107 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300108 static const char * const _keywords[] = {"handle", "overlapped", NULL};
109 static _PyArg_Parser _parser = {"" F_HANDLE "|i:ConnectNamedPipe", _keywords, 0};
Zachary Waref2244ea2015-05-13 01:22:54 -0500110 HANDLE handle;
111 int use_overlapped = 0;
112
Victor Stinner3e1fad62017-01-17 01:29:01 +0100113 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300114 &handle, &use_overlapped)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500115 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300116 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500117 return_value = _winapi_ConnectNamedPipe_impl(module, handle, use_overlapped);
118
119exit:
120 return return_value;
121}
122
123PyDoc_STRVAR(_winapi_CreateFile__doc__,
124"CreateFile($module, file_name, desired_access, share_mode,\n"
125" security_attributes, creation_disposition,\n"
126" flags_and_attributes, template_file, /)\n"
127"--\n"
128"\n");
129
130#define _WINAPI_CREATEFILE_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100131 {"CreateFile", (PyCFunction)_winapi_CreateFile, METH_FASTCALL, _winapi_CreateFile__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500132
133static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300134_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name,
Zachary Ware77772c02015-05-13 10:58:35 -0500135 DWORD desired_access, DWORD share_mode,
136 LPSECURITY_ATTRIBUTES security_attributes,
137 DWORD creation_disposition,
138 DWORD flags_and_attributes, HANDLE template_file);
Zachary Waref2244ea2015-05-13 01:22:54 -0500139
140static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100141_winapi_CreateFile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500142{
143 PyObject *return_value = NULL;
144 LPCTSTR file_name;
145 DWORD desired_access;
146 DWORD share_mode;
147 LPSECURITY_ATTRIBUTES security_attributes;
148 DWORD creation_disposition;
149 DWORD flags_and_attributes;
150 HANDLE template_file;
151 HANDLE _return_value;
152
Sylvain74453812017-06-10 06:51:48 +0200153 if (!_PyArg_NoStackKeywords("CreateFile", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500154 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300155 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100156
Sylvain74453812017-06-10 06:51:48 +0200157 if (!_PyArg_ParseStack(args, nargs, "skk" F_POINTER "kk" F_HANDLE ":CreateFile",
158 &file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100159 goto exit;
160 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500161 _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 +0300162 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500163 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300164 }
165 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500166 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300167 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500168 return_value = HANDLE_TO_PYNUM(_return_value);
169
170exit:
171 return return_value;
172}
173
174PyDoc_STRVAR(_winapi_CreateJunction__doc__,
175"CreateJunction($module, src_path, dst_path, /)\n"
176"--\n"
177"\n");
178
179#define _WINAPI_CREATEJUNCTION_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100180 {"CreateJunction", (PyCFunction)_winapi_CreateJunction, METH_FASTCALL, _winapi_CreateJunction__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500181
182static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300183_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path,
Zachary Ware77772c02015-05-13 10:58:35 -0500184 LPWSTR dst_path);
Zachary Waref2244ea2015-05-13 01:22:54 -0500185
186static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100187_winapi_CreateJunction(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500188{
189 PyObject *return_value = NULL;
190 LPWSTR src_path;
191 LPWSTR dst_path;
192
Sylvain74453812017-06-10 06:51:48 +0200193 if (!_PyArg_NoStackKeywords("CreateJunction", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500194 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300195 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100196
Sylvain74453812017-06-10 06:51:48 +0200197 if (!_PyArg_ParseStack(args, nargs, "uu:CreateJunction",
198 &src_path, &dst_path)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100199 goto exit;
200 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500201 return_value = _winapi_CreateJunction_impl(module, src_path, dst_path);
202
203exit:
204 return return_value;
205}
206
207PyDoc_STRVAR(_winapi_CreateNamedPipe__doc__,
208"CreateNamedPipe($module, name, open_mode, pipe_mode, max_instances,\n"
209" out_buffer_size, in_buffer_size, default_timeout,\n"
210" security_attributes, /)\n"
211"--\n"
212"\n");
213
214#define _WINAPI_CREATENAMEDPIPE_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100215 {"CreateNamedPipe", (PyCFunction)_winapi_CreateNamedPipe, METH_FASTCALL, _winapi_CreateNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500216
217static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300218_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode,
219 DWORD pipe_mode, DWORD max_instances,
220 DWORD out_buffer_size, DWORD in_buffer_size,
221 DWORD default_timeout,
Zachary Ware77772c02015-05-13 10:58:35 -0500222 LPSECURITY_ATTRIBUTES security_attributes);
Zachary Waref2244ea2015-05-13 01:22:54 -0500223
224static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100225_winapi_CreateNamedPipe(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500226{
227 PyObject *return_value = NULL;
228 LPCTSTR name;
229 DWORD open_mode;
230 DWORD pipe_mode;
231 DWORD max_instances;
232 DWORD out_buffer_size;
233 DWORD in_buffer_size;
234 DWORD default_timeout;
235 LPSECURITY_ATTRIBUTES security_attributes;
236 HANDLE _return_value;
237
Sylvain74453812017-06-10 06:51:48 +0200238 if (!_PyArg_NoStackKeywords("CreateNamedPipe", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500239 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300240 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100241
Sylvain74453812017-06-10 06:51:48 +0200242 if (!_PyArg_ParseStack(args, nargs, "skkkkkk" F_POINTER ":CreateNamedPipe",
243 &name, &open_mode, &pipe_mode, &max_instances, &out_buffer_size, &in_buffer_size, &default_timeout, &security_attributes)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100244 goto exit;
245 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500246 _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 +0300247 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500248 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300249 }
250 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500251 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300252 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500253 return_value = HANDLE_TO_PYNUM(_return_value);
254
255exit:
256 return return_value;
257}
258
259PyDoc_STRVAR(_winapi_CreatePipe__doc__,
260"CreatePipe($module, pipe_attrs, size, /)\n"
261"--\n"
262"\n"
263"Create an anonymous pipe.\n"
264"\n"
265" pipe_attrs\n"
266" Ignored internally, can be None.\n"
267"\n"
268"Returns a 2-tuple of handles, to the read and write ends of the pipe.");
269
270#define _WINAPI_CREATEPIPE_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100271 {"CreatePipe", (PyCFunction)_winapi_CreatePipe, METH_FASTCALL, _winapi_CreatePipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500272
273static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300274_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size);
Zachary Waref2244ea2015-05-13 01:22:54 -0500275
276static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100277_winapi_CreatePipe(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500278{
279 PyObject *return_value = NULL;
280 PyObject *pipe_attrs;
281 DWORD size;
282
Sylvain74453812017-06-10 06:51:48 +0200283 if (!_PyArg_NoStackKeywords("CreatePipe", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500284 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300285 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100286
Sylvain74453812017-06-10 06:51:48 +0200287 if (!_PyArg_ParseStack(args, nargs, "Ok:CreatePipe",
288 &pipe_attrs, &size)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100289 goto exit;
290 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500291 return_value = _winapi_CreatePipe_impl(module, pipe_attrs, size);
292
293exit:
294 return return_value;
295}
296
297PyDoc_STRVAR(_winapi_CreateProcess__doc__,
298"CreateProcess($module, application_name, command_line, proc_attrs,\n"
299" thread_attrs, inherit_handles, creation_flags,\n"
300" env_mapping, current_directory, startup_info, /)\n"
301"--\n"
302"\n"
303"Create a new process and its primary thread.\n"
304"\n"
305" proc_attrs\n"
306" Ignored internally, can be None.\n"
307" thread_attrs\n"
308" Ignored internally, can be None.\n"
309"\n"
310"The return value is a tuple of the process handle, thread handle,\n"
311"process ID, and thread ID.");
312
313#define _WINAPI_CREATEPROCESS_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100314 {"CreateProcess", (PyCFunction)_winapi_CreateProcess, METH_FASTCALL, _winapi_CreateProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500315
316static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300317_winapi_CreateProcess_impl(PyObject *module, Py_UNICODE *application_name,
Zachary Ware77772c02015-05-13 10:58:35 -0500318 Py_UNICODE *command_line, PyObject *proc_attrs,
319 PyObject *thread_attrs, BOOL inherit_handles,
320 DWORD creation_flags, PyObject *env_mapping,
321 Py_UNICODE *current_directory,
322 PyObject *startup_info);
Zachary Waref2244ea2015-05-13 01:22:54 -0500323
324static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100325_winapi_CreateProcess(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500326{
327 PyObject *return_value = NULL;
328 Py_UNICODE *application_name;
329 Py_UNICODE *command_line;
330 PyObject *proc_attrs;
331 PyObject *thread_attrs;
332 BOOL inherit_handles;
333 DWORD creation_flags;
334 PyObject *env_mapping;
335 Py_UNICODE *current_directory;
336 PyObject *startup_info;
337
Sylvain74453812017-06-10 06:51:48 +0200338 if (!_PyArg_NoStackKeywords("CreateProcess", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500339 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300340 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100341
Sylvain74453812017-06-10 06:51:48 +0200342 if (!_PyArg_ParseStack(args, nargs, "ZZOOikOZO:CreateProcess",
343 &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 +0100344 goto exit;
345 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500346 return_value = _winapi_CreateProcess_impl(module, application_name, command_line, proc_attrs, thread_attrs, inherit_handles, creation_flags, env_mapping, current_directory, startup_info);
347
348exit:
349 return return_value;
350}
351
352PyDoc_STRVAR(_winapi_DuplicateHandle__doc__,
353"DuplicateHandle($module, source_process_handle, source_handle,\n"
354" target_process_handle, desired_access, inherit_handle,\n"
355" options=0, /)\n"
356"--\n"
357"\n"
358"Return a duplicate handle object.\n"
359"\n"
360"The duplicate handle refers to the same object as the original\n"
361"handle. Therefore, any changes to the object are reflected\n"
362"through both handles.");
363
364#define _WINAPI_DUPLICATEHANDLE_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100365 {"DuplicateHandle", (PyCFunction)_winapi_DuplicateHandle, METH_FASTCALL, _winapi_DuplicateHandle__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500366
367static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300368_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500369 HANDLE source_handle,
370 HANDLE target_process_handle,
371 DWORD desired_access, BOOL inherit_handle,
372 DWORD options);
Zachary Waref2244ea2015-05-13 01:22:54 -0500373
374static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100375_winapi_DuplicateHandle(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500376{
377 PyObject *return_value = NULL;
378 HANDLE source_process_handle;
379 HANDLE source_handle;
380 HANDLE target_process_handle;
381 DWORD desired_access;
382 BOOL inherit_handle;
383 DWORD options = 0;
384 HANDLE _return_value;
385
Sylvain74453812017-06-10 06:51:48 +0200386 if (!_PyArg_NoStackKeywords("DuplicateHandle", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500387 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300388 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100389
Sylvain74453812017-06-10 06:51:48 +0200390 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle",
391 &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100392 goto exit;
393 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500394 _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 +0300395 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500396 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300397 }
398 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500399 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300400 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500401 return_value = HANDLE_TO_PYNUM(_return_value);
402
403exit:
404 return return_value;
405}
406
407PyDoc_STRVAR(_winapi_ExitProcess__doc__,
408"ExitProcess($module, ExitCode, /)\n"
409"--\n"
410"\n");
411
412#define _WINAPI_EXITPROCESS_METHODDEF \
413 {"ExitProcess", (PyCFunction)_winapi_ExitProcess, METH_O, _winapi_ExitProcess__doc__},
414
415static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300416_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode);
Zachary Waref2244ea2015-05-13 01:22:54 -0500417
418static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300419_winapi_ExitProcess(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500420{
421 PyObject *return_value = NULL;
422 UINT ExitCode;
423
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300424 if (!PyArg_Parse(arg, "I:ExitProcess", &ExitCode)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500425 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300426 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500427 return_value = _winapi_ExitProcess_impl(module, ExitCode);
428
429exit:
430 return return_value;
431}
432
433PyDoc_STRVAR(_winapi_GetCurrentProcess__doc__,
434"GetCurrentProcess($module, /)\n"
435"--\n"
436"\n"
437"Return a handle object for the current process.");
438
439#define _WINAPI_GETCURRENTPROCESS_METHODDEF \
440 {"GetCurrentProcess", (PyCFunction)_winapi_GetCurrentProcess, METH_NOARGS, _winapi_GetCurrentProcess__doc__},
441
442static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300443_winapi_GetCurrentProcess_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500444
445static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300446_winapi_GetCurrentProcess(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500447{
448 PyObject *return_value = NULL;
449 HANDLE _return_value;
450
451 _return_value = _winapi_GetCurrentProcess_impl(module);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300452 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500453 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300454 }
455 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500456 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300457 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500458 return_value = HANDLE_TO_PYNUM(_return_value);
459
460exit:
461 return return_value;
462}
463
464PyDoc_STRVAR(_winapi_GetExitCodeProcess__doc__,
465"GetExitCodeProcess($module, process, /)\n"
466"--\n"
467"\n"
468"Return the termination status of the specified process.");
469
470#define _WINAPI_GETEXITCODEPROCESS_METHODDEF \
471 {"GetExitCodeProcess", (PyCFunction)_winapi_GetExitCodeProcess, METH_O, _winapi_GetExitCodeProcess__doc__},
472
473static DWORD
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300474_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process);
Zachary Waref2244ea2015-05-13 01:22:54 -0500475
476static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300477_winapi_GetExitCodeProcess(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500478{
479 PyObject *return_value = NULL;
480 HANDLE process;
481 DWORD _return_value;
482
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300483 if (!PyArg_Parse(arg, "" F_HANDLE ":GetExitCodeProcess", &process)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500484 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300485 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500486 _return_value = _winapi_GetExitCodeProcess_impl(module, process);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300487 if ((_return_value == DWORD_MAX) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500488 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300489 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500490 return_value = Py_BuildValue("k", _return_value);
491
492exit:
493 return return_value;
494}
495
496PyDoc_STRVAR(_winapi_GetLastError__doc__,
497"GetLastError($module, /)\n"
498"--\n"
499"\n");
500
501#define _WINAPI_GETLASTERROR_METHODDEF \
502 {"GetLastError", (PyCFunction)_winapi_GetLastError, METH_NOARGS, _winapi_GetLastError__doc__},
503
504static DWORD
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300505_winapi_GetLastError_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500506
507static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300508_winapi_GetLastError(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500509{
510 PyObject *return_value = NULL;
511 DWORD _return_value;
512
513 _return_value = _winapi_GetLastError_impl(module);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300514 if ((_return_value == DWORD_MAX) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500515 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300516 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500517 return_value = Py_BuildValue("k", _return_value);
518
519exit:
520 return return_value;
521}
522
523PyDoc_STRVAR(_winapi_GetModuleFileName__doc__,
524"GetModuleFileName($module, module_handle, /)\n"
525"--\n"
526"\n"
527"Return the fully-qualified path for the file that contains module.\n"
528"\n"
529"The module must have been loaded by the current process.\n"
530"\n"
531"The module parameter should be a handle to the loaded module\n"
532"whose path is being requested. If this parameter is 0,\n"
533"GetModuleFileName retrieves the path of the executable file\n"
534"of the current process.");
535
536#define _WINAPI_GETMODULEFILENAME_METHODDEF \
537 {"GetModuleFileName", (PyCFunction)_winapi_GetModuleFileName, METH_O, _winapi_GetModuleFileName__doc__},
538
539static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300540_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle);
Zachary Waref2244ea2015-05-13 01:22:54 -0500541
542static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300543_winapi_GetModuleFileName(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500544{
545 PyObject *return_value = NULL;
546 HMODULE module_handle;
547
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300548 if (!PyArg_Parse(arg, "" F_HANDLE ":GetModuleFileName", &module_handle)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500549 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300550 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500551 return_value = _winapi_GetModuleFileName_impl(module, module_handle);
552
553exit:
554 return return_value;
555}
556
557PyDoc_STRVAR(_winapi_GetStdHandle__doc__,
558"GetStdHandle($module, std_handle, /)\n"
559"--\n"
560"\n"
561"Return a handle to the specified standard device.\n"
562"\n"
563" std_handle\n"
564" One of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, or STD_ERROR_HANDLE.\n"
565"\n"
566"The integer associated with the handle object is returned.");
567
568#define _WINAPI_GETSTDHANDLE_METHODDEF \
569 {"GetStdHandle", (PyCFunction)_winapi_GetStdHandle, METH_O, _winapi_GetStdHandle__doc__},
570
571static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300572_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle);
Zachary Waref2244ea2015-05-13 01:22:54 -0500573
574static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300575_winapi_GetStdHandle(PyObject *module, PyObject *arg)
Zachary Waref2244ea2015-05-13 01:22:54 -0500576{
577 PyObject *return_value = NULL;
578 DWORD std_handle;
579 HANDLE _return_value;
580
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300581 if (!PyArg_Parse(arg, "k:GetStdHandle", &std_handle)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500582 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300583 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500584 _return_value = _winapi_GetStdHandle_impl(module, std_handle);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300585 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500586 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300587 }
588 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500589 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300590 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500591 return_value = HANDLE_TO_PYNUM(_return_value);
592
593exit:
594 return return_value;
595}
596
597PyDoc_STRVAR(_winapi_GetVersion__doc__,
598"GetVersion($module, /)\n"
599"--\n"
600"\n"
601"Return the version number of the current operating system.");
602
603#define _WINAPI_GETVERSION_METHODDEF \
604 {"GetVersion", (PyCFunction)_winapi_GetVersion, METH_NOARGS, _winapi_GetVersion__doc__},
605
606static long
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300607_winapi_GetVersion_impl(PyObject *module);
Zachary Waref2244ea2015-05-13 01:22:54 -0500608
609static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300610_winapi_GetVersion(PyObject *module, PyObject *Py_UNUSED(ignored))
Zachary Waref2244ea2015-05-13 01:22:54 -0500611{
612 PyObject *return_value = NULL;
613 long _return_value;
614
615 _return_value = _winapi_GetVersion_impl(module);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300616 if ((_return_value == -1) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500617 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300618 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500619 return_value = PyLong_FromLong(_return_value);
620
621exit:
622 return return_value;
623}
624
625PyDoc_STRVAR(_winapi_OpenProcess__doc__,
626"OpenProcess($module, desired_access, inherit_handle, process_id, /)\n"
627"--\n"
628"\n");
629
630#define _WINAPI_OPENPROCESS_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100631 {"OpenProcess", (PyCFunction)_winapi_OpenProcess, METH_FASTCALL, _winapi_OpenProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500632
633static HANDLE
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300634_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access,
Zachary Ware77772c02015-05-13 10:58:35 -0500635 BOOL inherit_handle, DWORD process_id);
Zachary Waref2244ea2015-05-13 01:22:54 -0500636
637static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100638_winapi_OpenProcess(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500639{
640 PyObject *return_value = NULL;
641 DWORD desired_access;
642 BOOL inherit_handle;
643 DWORD process_id;
644 HANDLE _return_value;
645
Sylvain74453812017-06-10 06:51:48 +0200646 if (!_PyArg_NoStackKeywords("OpenProcess", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500647 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300648 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100649
Sylvain74453812017-06-10 06:51:48 +0200650 if (!_PyArg_ParseStack(args, nargs, "kik:OpenProcess",
651 &desired_access, &inherit_handle, &process_id)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100652 goto exit;
653 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500654 _return_value = _winapi_OpenProcess_impl(module, desired_access, inherit_handle, process_id);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300655 if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500656 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300657 }
658 if (_return_value == NULL) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500659 Py_RETURN_NONE;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300660 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500661 return_value = HANDLE_TO_PYNUM(_return_value);
662
663exit:
664 return return_value;
665}
666
667PyDoc_STRVAR(_winapi_PeekNamedPipe__doc__,
668"PeekNamedPipe($module, handle, size=0, /)\n"
669"--\n"
670"\n");
671
672#define _WINAPI_PEEKNAMEDPIPE_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100673 {"PeekNamedPipe", (PyCFunction)_winapi_PeekNamedPipe, METH_FASTCALL, _winapi_PeekNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500674
675static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300676_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size);
Zachary Waref2244ea2015-05-13 01:22:54 -0500677
678static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100679_winapi_PeekNamedPipe(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500680{
681 PyObject *return_value = NULL;
682 HANDLE handle;
683 int size = 0;
684
Sylvain74453812017-06-10 06:51:48 +0200685 if (!_PyArg_NoStackKeywords("PeekNamedPipe", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500686 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300687 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100688
Sylvain74453812017-06-10 06:51:48 +0200689 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "|i:PeekNamedPipe",
690 &handle, &size)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100691 goto exit;
692 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500693 return_value = _winapi_PeekNamedPipe_impl(module, handle, size);
694
695exit:
696 return return_value;
697}
698
699PyDoc_STRVAR(_winapi_ReadFile__doc__,
700"ReadFile($module, /, handle, size, overlapped=False)\n"
701"--\n"
702"\n");
703
704#define _WINAPI_READFILE_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700705 {"ReadFile", (PyCFunction)_winapi_ReadFile, METH_FASTCALL, _winapi_ReadFile__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500706
707static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300708_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size,
Zachary Ware77772c02015-05-13 10:58:35 -0500709 int use_overlapped);
Zachary Waref2244ea2015-05-13 01:22:54 -0500710
711static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700712_winapi_ReadFile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500713{
714 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300715 static const char * const _keywords[] = {"handle", "size", "overlapped", NULL};
716 static _PyArg_Parser _parser = {"" F_HANDLE "i|i:ReadFile", _keywords, 0};
Zachary Waref2244ea2015-05-13 01:22:54 -0500717 HANDLE handle;
718 int size;
719 int use_overlapped = 0;
720
Victor Stinner3e1fad62017-01-17 01:29:01 +0100721 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300722 &handle, &size, &use_overlapped)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500723 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300724 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500725 return_value = _winapi_ReadFile_impl(module, handle, size, use_overlapped);
726
727exit:
728 return return_value;
729}
730
731PyDoc_STRVAR(_winapi_SetNamedPipeHandleState__doc__,
732"SetNamedPipeHandleState($module, named_pipe, mode,\n"
733" max_collection_count, collect_data_timeout, /)\n"
734"--\n"
735"\n");
736
737#define _WINAPI_SETNAMEDPIPEHANDLESTATE_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100738 {"SetNamedPipeHandleState", (PyCFunction)_winapi_SetNamedPipeHandleState, METH_FASTCALL, _winapi_SetNamedPipeHandleState__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500739
740static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300741_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe,
Zachary Ware77772c02015-05-13 10:58:35 -0500742 PyObject *mode,
743 PyObject *max_collection_count,
744 PyObject *collect_data_timeout);
Zachary Waref2244ea2015-05-13 01:22:54 -0500745
746static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100747_winapi_SetNamedPipeHandleState(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500748{
749 PyObject *return_value = NULL;
750 HANDLE named_pipe;
751 PyObject *mode;
752 PyObject *max_collection_count;
753 PyObject *collect_data_timeout;
754
Sylvain74453812017-06-10 06:51:48 +0200755 if (!_PyArg_NoStackKeywords("SetNamedPipeHandleState", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500756 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300757 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100758
Sylvain74453812017-06-10 06:51:48 +0200759 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "OOO:SetNamedPipeHandleState",
760 &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100761 goto exit;
762 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500763 return_value = _winapi_SetNamedPipeHandleState_impl(module, named_pipe, mode, max_collection_count, collect_data_timeout);
764
765exit:
766 return return_value;
767}
768
769PyDoc_STRVAR(_winapi_TerminateProcess__doc__,
770"TerminateProcess($module, handle, exit_code, /)\n"
771"--\n"
772"\n"
773"Terminate the specified process and all of its threads.");
774
775#define _WINAPI_TERMINATEPROCESS_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100776 {"TerminateProcess", (PyCFunction)_winapi_TerminateProcess, METH_FASTCALL, _winapi_TerminateProcess__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500777
778static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300779_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500780 UINT exit_code);
Zachary Waref2244ea2015-05-13 01:22:54 -0500781
782static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100783_winapi_TerminateProcess(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500784{
785 PyObject *return_value = NULL;
786 HANDLE handle;
787 UINT exit_code;
788
Sylvain74453812017-06-10 06:51:48 +0200789 if (!_PyArg_NoStackKeywords("TerminateProcess", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500790 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300791 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100792
Sylvain74453812017-06-10 06:51:48 +0200793 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "I:TerminateProcess",
794 &handle, &exit_code)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100795 goto exit;
796 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500797 return_value = _winapi_TerminateProcess_impl(module, handle, exit_code);
798
799exit:
800 return return_value;
801}
802
803PyDoc_STRVAR(_winapi_WaitNamedPipe__doc__,
804"WaitNamedPipe($module, name, timeout, /)\n"
805"--\n"
806"\n");
807
808#define _WINAPI_WAITNAMEDPIPE_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100809 {"WaitNamedPipe", (PyCFunction)_winapi_WaitNamedPipe, METH_FASTCALL, _winapi_WaitNamedPipe__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500810
811static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300812_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout);
Zachary Waref2244ea2015-05-13 01:22:54 -0500813
814static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100815_winapi_WaitNamedPipe(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500816{
817 PyObject *return_value = NULL;
818 LPCTSTR name;
819 DWORD timeout;
820
Sylvain74453812017-06-10 06:51:48 +0200821 if (!_PyArg_NoStackKeywords("WaitNamedPipe", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500822 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300823 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100824
Sylvain74453812017-06-10 06:51:48 +0200825 if (!_PyArg_ParseStack(args, nargs, "sk:WaitNamedPipe",
826 &name, &timeout)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100827 goto exit;
828 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500829 return_value = _winapi_WaitNamedPipe_impl(module, name, timeout);
830
831exit:
832 return return_value;
833}
834
835PyDoc_STRVAR(_winapi_WaitForMultipleObjects__doc__,
836"WaitForMultipleObjects($module, handle_seq, wait_flag,\n"
837" milliseconds=_winapi.INFINITE, /)\n"
838"--\n"
839"\n");
840
841#define _WINAPI_WAITFORMULTIPLEOBJECTS_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100842 {"WaitForMultipleObjects", (PyCFunction)_winapi_WaitForMultipleObjects, METH_FASTCALL, _winapi_WaitForMultipleObjects__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500843
844static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300845_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq,
846 BOOL wait_flag, DWORD milliseconds);
Zachary Waref2244ea2015-05-13 01:22:54 -0500847
848static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100849_winapi_WaitForMultipleObjects(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500850{
851 PyObject *return_value = NULL;
852 PyObject *handle_seq;
853 BOOL wait_flag;
854 DWORD milliseconds = INFINITE;
855
Sylvain74453812017-06-10 06:51:48 +0200856 if (!_PyArg_NoStackKeywords("WaitForMultipleObjects", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500857 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300858 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100859
Sylvain74453812017-06-10 06:51:48 +0200860 if (!_PyArg_ParseStack(args, nargs, "Oi|k:WaitForMultipleObjects",
861 &handle_seq, &wait_flag, &milliseconds)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100862 goto exit;
863 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500864 return_value = _winapi_WaitForMultipleObjects_impl(module, handle_seq, wait_flag, milliseconds);
865
866exit:
867 return return_value;
868}
869
870PyDoc_STRVAR(_winapi_WaitForSingleObject__doc__,
871"WaitForSingleObject($module, handle, milliseconds, /)\n"
872"--\n"
873"\n"
874"Wait for a single object.\n"
875"\n"
876"Wait until the specified object is in the signaled state or\n"
877"the time-out interval elapses. The timeout value is specified\n"
878"in milliseconds.");
879
880#define _WINAPI_WAITFORSINGLEOBJECT_METHODDEF \
Victor Stinner259f0e42017-01-17 01:35:17 +0100881 {"WaitForSingleObject", (PyCFunction)_winapi_WaitForSingleObject, METH_FASTCALL, _winapi_WaitForSingleObject__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500882
883static long
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300884_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle,
Zachary Ware77772c02015-05-13 10:58:35 -0500885 DWORD milliseconds);
Zachary Waref2244ea2015-05-13 01:22:54 -0500886
887static PyObject *
Victor Stinner259f0e42017-01-17 01:35:17 +0100888_winapi_WaitForSingleObject(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500889{
890 PyObject *return_value = NULL;
891 HANDLE handle;
892 DWORD milliseconds;
893 long _return_value;
894
Sylvain74453812017-06-10 06:51:48 +0200895 if (!_PyArg_NoStackKeywords("WaitForSingleObject", kwnames)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500896 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300897 }
Victor Stinner259f0e42017-01-17 01:35:17 +0100898
Sylvain74453812017-06-10 06:51:48 +0200899 if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "k:WaitForSingleObject",
900 &handle, &milliseconds)) {
Victor Stinner259f0e42017-01-17 01:35:17 +0100901 goto exit;
902 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500903 _return_value = _winapi_WaitForSingleObject_impl(module, handle, milliseconds);
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300904 if ((_return_value == -1) && PyErr_Occurred()) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500905 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300906 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500907 return_value = PyLong_FromLong(_return_value);
908
909exit:
910 return return_value;
911}
912
913PyDoc_STRVAR(_winapi_WriteFile__doc__,
914"WriteFile($module, /, handle, buffer, overlapped=False)\n"
915"--\n"
916"\n");
917
918#define _WINAPI_WRITEFILE_METHODDEF \
Victor Stinner37e4ef72016-09-09 20:00:13 -0700919 {"WriteFile", (PyCFunction)_winapi_WriteFile, METH_FASTCALL, _winapi_WriteFile__doc__},
Zachary Waref2244ea2015-05-13 01:22:54 -0500920
921static PyObject *
Serhiy Storchaka1a2b24f2016-07-07 17:35:15 +0300922_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer,
Zachary Ware77772c02015-05-13 10:58:35 -0500923 int use_overlapped);
Zachary Waref2244ea2015-05-13 01:22:54 -0500924
925static PyObject *
Victor Stinner37e4ef72016-09-09 20:00:13 -0700926_winapi_WriteFile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
Zachary Waref2244ea2015-05-13 01:22:54 -0500927{
928 PyObject *return_value = NULL;
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +0300929 static const char * const _keywords[] = {"handle", "buffer", "overlapped", NULL};
930 static _PyArg_Parser _parser = {"" F_HANDLE "O|i:WriteFile", _keywords, 0};
Zachary Waref2244ea2015-05-13 01:22:54 -0500931 HANDLE handle;
932 PyObject *buffer;
933 int use_overlapped = 0;
934
Victor Stinner3e1fad62017-01-17 01:29:01 +0100935 if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300936 &handle, &buffer, &use_overlapped)) {
Zachary Waref2244ea2015-05-13 01:22:54 -0500937 goto exit;
Serhiy Storchaka5dee6552016-06-09 16:16:06 +0300938 }
Zachary Waref2244ea2015-05-13 01:22:54 -0500939 return_value = _winapi_WriteFile_impl(module, handle, buffer, use_overlapped);
940
941exit:
942 return return_value;
943}
Sylvain74453812017-06-10 06:51:48 +0200944/*[clinic end generated code: output=9555c16ed2d95a9f input=a9049054013a1b77]*/