1/*[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
22    wait = PyObject_IsTrue(arg);
23    if (wait < 0) {
24        goto exit;
25    }
26    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 *
76_winapi_CloseHandle_impl(PyObject *module, HANDLE handle);
77
78static PyObject *
79_winapi_CloseHandle(PyObject *module, PyObject *arg)
80{
81    PyObject *return_value = NULL;
82    HANDLE handle;
83
84    if (!PyArg_Parse(arg, "" F_HANDLE ":CloseHandle", &handle)) {
85        goto exit;
86    }
87    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    \
99    {"ConnectNamedPipe", _PyCFunction_CAST(_winapi_ConnectNamedPipe), METH_FASTCALL|METH_KEYWORDS, _winapi_ConnectNamedPipe__doc__},
100
101static PyObject *
102_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle,
103                              int use_overlapped);
104
105static PyObject *
106_winapi_ConnectNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
107{
108    PyObject *return_value = NULL;
109    static const char * const _keywords[] = {"handle", "overlapped", NULL};
110    static _PyArg_Parser _parser = {"" F_HANDLE "|i:ConnectNamedPipe", _keywords, 0};
111    HANDLE handle;
112    int use_overlapped = 0;
113
114    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
115        &handle, &use_overlapped)) {
116        goto exit;
117    }
118    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    \
132    {"CreateFile", _PyCFunction_CAST(_winapi_CreateFile), METH_FASTCALL, _winapi_CreateFile__doc__},
133
134static HANDLE
135_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name,
136                        DWORD desired_access, DWORD share_mode,
137                        LPSECURITY_ATTRIBUTES security_attributes,
138                        DWORD creation_disposition,
139                        DWORD flags_and_attributes, HANDLE template_file);
140
141static PyObject *
142_winapi_CreateFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
143{
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
154    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)) {
156        goto exit;
157    }
158    _return_value = _winapi_CreateFile_impl(module, file_name, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file);
159    if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
160        goto exit;
161    }
162    if (_return_value == NULL) {
163        Py_RETURN_NONE;
164    }
165    return_value = HANDLE_TO_PYNUM(_return_value);
166
167exit:
168    return return_value;
169}
170
171PyDoc_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_CAST(_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 = NULL;
196    HANDLE _return_value;
197
198    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "" F_POINTER "kkkO&:CreateFileMapping",
199        &file_handle, &security_attributes, &protect, &max_size_high, &max_size_low, _PyUnicode_WideCharString_Converter, &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    /* Cleanup for name */
213    #if !USE_UNICODE_WCHAR_CACHE
214    PyMem_Free((void *)name);
215    #endif /* USE_UNICODE_WCHAR_CACHE */
216
217    return return_value;
218}
219
220PyDoc_STRVAR(_winapi_CreateJunction__doc__,
221"CreateJunction($module, src_path, dst_path, /)\n"
222"--\n"
223"\n");
224
225#define _WINAPI_CREATEJUNCTION_METHODDEF    \
226    {"CreateJunction", _PyCFunction_CAST(_winapi_CreateJunction), METH_FASTCALL, _winapi_CreateJunction__doc__},
227
228static PyObject *
229_winapi_CreateJunction_impl(PyObject *module, LPCWSTR src_path,
230                            LPCWSTR dst_path);
231
232static PyObject *
233_winapi_CreateJunction(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
234{
235    PyObject *return_value = NULL;
236    LPCWSTR src_path = NULL;
237    LPCWSTR dst_path = NULL;
238
239    if (!_PyArg_CheckPositional("CreateJunction", nargs, 2, 2)) {
240        goto exit;
241    }
242    if (!PyUnicode_Check(args[0])) {
243        _PyArg_BadArgument("CreateJunction", "argument 1", "str", args[0]);
244        goto exit;
245    }
246    #if USE_UNICODE_WCHAR_CACHE
247    src_path = _PyUnicode_AsUnicode(args[0]);
248    #else /* USE_UNICODE_WCHAR_CACHE */
249    src_path = PyUnicode_AsWideCharString(args[0], NULL);
250    #endif /* USE_UNICODE_WCHAR_CACHE */
251    if (src_path == NULL) {
252        goto exit;
253    }
254    if (!PyUnicode_Check(args[1])) {
255        _PyArg_BadArgument("CreateJunction", "argument 2", "str", args[1]);
256        goto exit;
257    }
258    #if USE_UNICODE_WCHAR_CACHE
259    dst_path = _PyUnicode_AsUnicode(args[1]);
260    #else /* USE_UNICODE_WCHAR_CACHE */
261    dst_path = PyUnicode_AsWideCharString(args[1], NULL);
262    #endif /* USE_UNICODE_WCHAR_CACHE */
263    if (dst_path == NULL) {
264        goto exit;
265    }
266    return_value = _winapi_CreateJunction_impl(module, src_path, dst_path);
267
268exit:
269    /* Cleanup for src_path */
270    #if !USE_UNICODE_WCHAR_CACHE
271    PyMem_Free((void *)src_path);
272    #endif /* USE_UNICODE_WCHAR_CACHE */
273    /* Cleanup for dst_path */
274    #if !USE_UNICODE_WCHAR_CACHE
275    PyMem_Free((void *)dst_path);
276    #endif /* USE_UNICODE_WCHAR_CACHE */
277
278    return return_value;
279}
280
281PyDoc_STRVAR(_winapi_CreateNamedPipe__doc__,
282"CreateNamedPipe($module, name, open_mode, pipe_mode, max_instances,\n"
283"                out_buffer_size, in_buffer_size, default_timeout,\n"
284"                security_attributes, /)\n"
285"--\n"
286"\n");
287
288#define _WINAPI_CREATENAMEDPIPE_METHODDEF    \
289    {"CreateNamedPipe", _PyCFunction_CAST(_winapi_CreateNamedPipe), METH_FASTCALL, _winapi_CreateNamedPipe__doc__},
290
291static HANDLE
292_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode,
293                             DWORD pipe_mode, DWORD max_instances,
294                             DWORD out_buffer_size, DWORD in_buffer_size,
295                             DWORD default_timeout,
296                             LPSECURITY_ATTRIBUTES security_attributes);
297
298static PyObject *
299_winapi_CreateNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
300{
301    PyObject *return_value = NULL;
302    LPCTSTR name;
303    DWORD open_mode;
304    DWORD pipe_mode;
305    DWORD max_instances;
306    DWORD out_buffer_size;
307    DWORD in_buffer_size;
308    DWORD default_timeout;
309    LPSECURITY_ATTRIBUTES security_attributes;
310    HANDLE _return_value;
311
312    if (!_PyArg_ParseStack(args, nargs, "skkkkkk" F_POINTER ":CreateNamedPipe",
313        &name, &open_mode, &pipe_mode, &max_instances, &out_buffer_size, &in_buffer_size, &default_timeout, &security_attributes)) {
314        goto exit;
315    }
316    _return_value = _winapi_CreateNamedPipe_impl(module, name, open_mode, pipe_mode, max_instances, out_buffer_size, in_buffer_size, default_timeout, security_attributes);
317    if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
318        goto exit;
319    }
320    if (_return_value == NULL) {
321        Py_RETURN_NONE;
322    }
323    return_value = HANDLE_TO_PYNUM(_return_value);
324
325exit:
326    return return_value;
327}
328
329PyDoc_STRVAR(_winapi_CreatePipe__doc__,
330"CreatePipe($module, pipe_attrs, size, /)\n"
331"--\n"
332"\n"
333"Create an anonymous pipe.\n"
334"\n"
335"  pipe_attrs\n"
336"    Ignored internally, can be None.\n"
337"\n"
338"Returns a 2-tuple of handles, to the read and write ends of the pipe.");
339
340#define _WINAPI_CREATEPIPE_METHODDEF    \
341    {"CreatePipe", _PyCFunction_CAST(_winapi_CreatePipe), METH_FASTCALL, _winapi_CreatePipe__doc__},
342
343static PyObject *
344_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size);
345
346static PyObject *
347_winapi_CreatePipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
348{
349    PyObject *return_value = NULL;
350    PyObject *pipe_attrs;
351    DWORD size;
352
353    if (!_PyArg_ParseStack(args, nargs, "Ok:CreatePipe",
354        &pipe_attrs, &size)) {
355        goto exit;
356    }
357    return_value = _winapi_CreatePipe_impl(module, pipe_attrs, size);
358
359exit:
360    return return_value;
361}
362
363PyDoc_STRVAR(_winapi_CreateProcess__doc__,
364"CreateProcess($module, application_name, command_line, proc_attrs,\n"
365"              thread_attrs, inherit_handles, creation_flags,\n"
366"              env_mapping, current_directory, startup_info, /)\n"
367"--\n"
368"\n"
369"Create a new process and its primary thread.\n"
370"\n"
371"  command_line\n"
372"    Can be str or None\n"
373"  proc_attrs\n"
374"    Ignored internally, can be None.\n"
375"  thread_attrs\n"
376"    Ignored internally, can be None.\n"
377"\n"
378"The return value is a tuple of the process handle, thread handle,\n"
379"process ID, and thread ID.");
380
381#define _WINAPI_CREATEPROCESS_METHODDEF    \
382    {"CreateProcess", _PyCFunction_CAST(_winapi_CreateProcess), METH_FASTCALL, _winapi_CreateProcess__doc__},
383
384static PyObject *
385_winapi_CreateProcess_impl(PyObject *module,
386                           const Py_UNICODE *application_name,
387                           PyObject *command_line, PyObject *proc_attrs,
388                           PyObject *thread_attrs, BOOL inherit_handles,
389                           DWORD creation_flags, PyObject *env_mapping,
390                           const Py_UNICODE *current_directory,
391                           PyObject *startup_info);
392
393static PyObject *
394_winapi_CreateProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
395{
396    PyObject *return_value = NULL;
397    const Py_UNICODE *application_name = NULL;
398    PyObject *command_line;
399    PyObject *proc_attrs;
400    PyObject *thread_attrs;
401    BOOL inherit_handles;
402    DWORD creation_flags;
403    PyObject *env_mapping;
404    const Py_UNICODE *current_directory = NULL;
405    PyObject *startup_info;
406
407    if (!_PyArg_ParseStack(args, nargs, "O&OOOikOO&O:CreateProcess",
408        _PyUnicode_WideCharString_Opt_Converter, &application_name, &command_line, &proc_attrs, &thread_attrs, &inherit_handles, &creation_flags, &env_mapping, _PyUnicode_WideCharString_Opt_Converter, &current_directory, &startup_info)) {
409        goto exit;
410    }
411    return_value = _winapi_CreateProcess_impl(module, application_name, command_line, proc_attrs, thread_attrs, inherit_handles, creation_flags, env_mapping, current_directory, startup_info);
412
413exit:
414    /* Cleanup for application_name */
415    #if !USE_UNICODE_WCHAR_CACHE
416    PyMem_Free((void *)application_name);
417    #endif /* USE_UNICODE_WCHAR_CACHE */
418    /* Cleanup for current_directory */
419    #if !USE_UNICODE_WCHAR_CACHE
420    PyMem_Free((void *)current_directory);
421    #endif /* USE_UNICODE_WCHAR_CACHE */
422
423    return return_value;
424}
425
426PyDoc_STRVAR(_winapi_DuplicateHandle__doc__,
427"DuplicateHandle($module, source_process_handle, source_handle,\n"
428"                target_process_handle, desired_access, inherit_handle,\n"
429"                options=0, /)\n"
430"--\n"
431"\n"
432"Return a duplicate handle object.\n"
433"\n"
434"The duplicate handle refers to the same object as the original\n"
435"handle. Therefore, any changes to the object are reflected\n"
436"through both handles.");
437
438#define _WINAPI_DUPLICATEHANDLE_METHODDEF    \
439    {"DuplicateHandle", _PyCFunction_CAST(_winapi_DuplicateHandle), METH_FASTCALL, _winapi_DuplicateHandle__doc__},
440
441static HANDLE
442_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle,
443                             HANDLE source_handle,
444                             HANDLE target_process_handle,
445                             DWORD desired_access, BOOL inherit_handle,
446                             DWORD options);
447
448static PyObject *
449_winapi_DuplicateHandle(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
450{
451    PyObject *return_value = NULL;
452    HANDLE source_process_handle;
453    HANDLE source_handle;
454    HANDLE target_process_handle;
455    DWORD desired_access;
456    BOOL inherit_handle;
457    DWORD options = 0;
458    HANDLE _return_value;
459
460    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle",
461        &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) {
462        goto exit;
463    }
464    _return_value = _winapi_DuplicateHandle_impl(module, source_process_handle, source_handle, target_process_handle, desired_access, inherit_handle, options);
465    if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
466        goto exit;
467    }
468    if (_return_value == NULL) {
469        Py_RETURN_NONE;
470    }
471    return_value = HANDLE_TO_PYNUM(_return_value);
472
473exit:
474    return return_value;
475}
476
477PyDoc_STRVAR(_winapi_ExitProcess__doc__,
478"ExitProcess($module, ExitCode, /)\n"
479"--\n"
480"\n");
481
482#define _WINAPI_EXITPROCESS_METHODDEF    \
483    {"ExitProcess", (PyCFunction)_winapi_ExitProcess, METH_O, _winapi_ExitProcess__doc__},
484
485static PyObject *
486_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode);
487
488static PyObject *
489_winapi_ExitProcess(PyObject *module, PyObject *arg)
490{
491    PyObject *return_value = NULL;
492    UINT ExitCode;
493
494    if (!PyArg_Parse(arg, "I:ExitProcess", &ExitCode)) {
495        goto exit;
496    }
497    return_value = _winapi_ExitProcess_impl(module, ExitCode);
498
499exit:
500    return return_value;
501}
502
503PyDoc_STRVAR(_winapi_GetCurrentProcess__doc__,
504"GetCurrentProcess($module, /)\n"
505"--\n"
506"\n"
507"Return a handle object for the current process.");
508
509#define _WINAPI_GETCURRENTPROCESS_METHODDEF    \
510    {"GetCurrentProcess", (PyCFunction)_winapi_GetCurrentProcess, METH_NOARGS, _winapi_GetCurrentProcess__doc__},
511
512static HANDLE
513_winapi_GetCurrentProcess_impl(PyObject *module);
514
515static PyObject *
516_winapi_GetCurrentProcess(PyObject *module, PyObject *Py_UNUSED(ignored))
517{
518    PyObject *return_value = NULL;
519    HANDLE _return_value;
520
521    _return_value = _winapi_GetCurrentProcess_impl(module);
522    if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
523        goto exit;
524    }
525    if (_return_value == NULL) {
526        Py_RETURN_NONE;
527    }
528    return_value = HANDLE_TO_PYNUM(_return_value);
529
530exit:
531    return return_value;
532}
533
534PyDoc_STRVAR(_winapi_GetExitCodeProcess__doc__,
535"GetExitCodeProcess($module, process, /)\n"
536"--\n"
537"\n"
538"Return the termination status of the specified process.");
539
540#define _WINAPI_GETEXITCODEPROCESS_METHODDEF    \
541    {"GetExitCodeProcess", (PyCFunction)_winapi_GetExitCodeProcess, METH_O, _winapi_GetExitCodeProcess__doc__},
542
543static DWORD
544_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process);
545
546static PyObject *
547_winapi_GetExitCodeProcess(PyObject *module, PyObject *arg)
548{
549    PyObject *return_value = NULL;
550    HANDLE process;
551    DWORD _return_value;
552
553    if (!PyArg_Parse(arg, "" F_HANDLE ":GetExitCodeProcess", &process)) {
554        goto exit;
555    }
556    _return_value = _winapi_GetExitCodeProcess_impl(module, process);
557    if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
558        goto exit;
559    }
560    return_value = Py_BuildValue("k", _return_value);
561
562exit:
563    return return_value;
564}
565
566PyDoc_STRVAR(_winapi_GetLastError__doc__,
567"GetLastError($module, /)\n"
568"--\n"
569"\n");
570
571#define _WINAPI_GETLASTERROR_METHODDEF    \
572    {"GetLastError", (PyCFunction)_winapi_GetLastError, METH_NOARGS, _winapi_GetLastError__doc__},
573
574static DWORD
575_winapi_GetLastError_impl(PyObject *module);
576
577static PyObject *
578_winapi_GetLastError(PyObject *module, PyObject *Py_UNUSED(ignored))
579{
580    PyObject *return_value = NULL;
581    DWORD _return_value;
582
583    _return_value = _winapi_GetLastError_impl(module);
584    if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
585        goto exit;
586    }
587    return_value = Py_BuildValue("k", _return_value);
588
589exit:
590    return return_value;
591}
592
593PyDoc_STRVAR(_winapi_GetModuleFileName__doc__,
594"GetModuleFileName($module, module_handle, /)\n"
595"--\n"
596"\n"
597"Return the fully-qualified path for the file that contains module.\n"
598"\n"
599"The module must have been loaded by the current process.\n"
600"\n"
601"The module parameter should be a handle to the loaded module\n"
602"whose path is being requested. If this parameter is 0,\n"
603"GetModuleFileName retrieves the path of the executable file\n"
604"of the current process.");
605
606#define _WINAPI_GETMODULEFILENAME_METHODDEF    \
607    {"GetModuleFileName", (PyCFunction)_winapi_GetModuleFileName, METH_O, _winapi_GetModuleFileName__doc__},
608
609static PyObject *
610_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle);
611
612static PyObject *
613_winapi_GetModuleFileName(PyObject *module, PyObject *arg)
614{
615    PyObject *return_value = NULL;
616    HMODULE module_handle;
617
618    if (!PyArg_Parse(arg, "" F_HANDLE ":GetModuleFileName", &module_handle)) {
619        goto exit;
620    }
621    return_value = _winapi_GetModuleFileName_impl(module, module_handle);
622
623exit:
624    return return_value;
625}
626
627PyDoc_STRVAR(_winapi_GetStdHandle__doc__,
628"GetStdHandle($module, std_handle, /)\n"
629"--\n"
630"\n"
631"Return a handle to the specified standard device.\n"
632"\n"
633"  std_handle\n"
634"    One of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, or STD_ERROR_HANDLE.\n"
635"\n"
636"The integer associated with the handle object is returned.");
637
638#define _WINAPI_GETSTDHANDLE_METHODDEF    \
639    {"GetStdHandle", (PyCFunction)_winapi_GetStdHandle, METH_O, _winapi_GetStdHandle__doc__},
640
641static HANDLE
642_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle);
643
644static PyObject *
645_winapi_GetStdHandle(PyObject *module, PyObject *arg)
646{
647    PyObject *return_value = NULL;
648    DWORD std_handle;
649    HANDLE _return_value;
650
651    if (!PyArg_Parse(arg, "k:GetStdHandle", &std_handle)) {
652        goto exit;
653    }
654    _return_value = _winapi_GetStdHandle_impl(module, std_handle);
655    if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
656        goto exit;
657    }
658    if (_return_value == NULL) {
659        Py_RETURN_NONE;
660    }
661    return_value = HANDLE_TO_PYNUM(_return_value);
662
663exit:
664    return return_value;
665}
666
667PyDoc_STRVAR(_winapi_GetVersion__doc__,
668"GetVersion($module, /)\n"
669"--\n"
670"\n"
671"Return the version number of the current operating system.");
672
673#define _WINAPI_GETVERSION_METHODDEF    \
674    {"GetVersion", (PyCFunction)_winapi_GetVersion, METH_NOARGS, _winapi_GetVersion__doc__},
675
676static long
677_winapi_GetVersion_impl(PyObject *module);
678
679static PyObject *
680_winapi_GetVersion(PyObject *module, PyObject *Py_UNUSED(ignored))
681{
682    PyObject *return_value = NULL;
683    long _return_value;
684
685    _return_value = _winapi_GetVersion_impl(module);
686    if ((_return_value == -1) && PyErr_Occurred()) {
687        goto exit;
688    }
689    return_value = PyLong_FromLong(_return_value);
690
691exit:
692    return return_value;
693}
694
695PyDoc_STRVAR(_winapi_MapViewOfFile__doc__,
696"MapViewOfFile($module, file_map, desired_access, file_offset_high,\n"
697"              file_offset_low, number_bytes, /)\n"
698"--\n"
699"\n");
700
701#define _WINAPI_MAPVIEWOFFILE_METHODDEF    \
702    {"MapViewOfFile", _PyCFunction_CAST(_winapi_MapViewOfFile), METH_FASTCALL, _winapi_MapViewOfFile__doc__},
703
704static LPVOID
705_winapi_MapViewOfFile_impl(PyObject *module, HANDLE file_map,
706                           DWORD desired_access, DWORD file_offset_high,
707                           DWORD file_offset_low, size_t number_bytes);
708
709static PyObject *
710_winapi_MapViewOfFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
711{
712    PyObject *return_value = NULL;
713    HANDLE file_map;
714    DWORD desired_access;
715    DWORD file_offset_high;
716    DWORD file_offset_low;
717    size_t number_bytes;
718    LPVOID _return_value;
719
720    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "kkkO&:MapViewOfFile",
721        &file_map, &desired_access, &file_offset_high, &file_offset_low, _PyLong_Size_t_Converter, &number_bytes)) {
722        goto exit;
723    }
724    _return_value = _winapi_MapViewOfFile_impl(module, file_map, desired_access, file_offset_high, file_offset_low, number_bytes);
725    if ((_return_value == NULL) && PyErr_Occurred()) {
726        goto exit;
727    }
728    return_value = HANDLE_TO_PYNUM(_return_value);
729
730exit:
731    return return_value;
732}
733
734PyDoc_STRVAR(_winapi_UnmapViewOfFile__doc__,
735"UnmapViewOfFile($module, address, /)\n"
736"--\n"
737"\n");
738
739#define _WINAPI_UNMAPVIEWOFFILE_METHODDEF    \
740    {"UnmapViewOfFile", (PyCFunction)_winapi_UnmapViewOfFile, METH_O, _winapi_UnmapViewOfFile__doc__},
741
742static PyObject *
743_winapi_UnmapViewOfFile_impl(PyObject *module, LPCVOID address);
744
745static PyObject *
746_winapi_UnmapViewOfFile(PyObject *module, PyObject *arg)
747{
748    PyObject *return_value = NULL;
749    LPCVOID address;
750
751    if (!PyArg_Parse(arg, "" F_POINTER ":UnmapViewOfFile", &address)) {
752        goto exit;
753    }
754    return_value = _winapi_UnmapViewOfFile_impl(module, address);
755
756exit:
757    return return_value;
758}
759
760PyDoc_STRVAR(_winapi_OpenFileMapping__doc__,
761"OpenFileMapping($module, desired_access, inherit_handle, name, /)\n"
762"--\n"
763"\n");
764
765#define _WINAPI_OPENFILEMAPPING_METHODDEF    \
766    {"OpenFileMapping", _PyCFunction_CAST(_winapi_OpenFileMapping), METH_FASTCALL, _winapi_OpenFileMapping__doc__},
767
768static HANDLE
769_winapi_OpenFileMapping_impl(PyObject *module, DWORD desired_access,
770                             BOOL inherit_handle, LPCWSTR name);
771
772static PyObject *
773_winapi_OpenFileMapping(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
774{
775    PyObject *return_value = NULL;
776    DWORD desired_access;
777    BOOL inherit_handle;
778    LPCWSTR name = NULL;
779    HANDLE _return_value;
780
781    if (!_PyArg_ParseStack(args, nargs, "kiO&:OpenFileMapping",
782        &desired_access, &inherit_handle, _PyUnicode_WideCharString_Converter, &name)) {
783        goto exit;
784    }
785    _return_value = _winapi_OpenFileMapping_impl(module, desired_access, inherit_handle, name);
786    if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
787        goto exit;
788    }
789    if (_return_value == NULL) {
790        Py_RETURN_NONE;
791    }
792    return_value = HANDLE_TO_PYNUM(_return_value);
793
794exit:
795    /* Cleanup for name */
796    #if !USE_UNICODE_WCHAR_CACHE
797    PyMem_Free((void *)name);
798    #endif /* USE_UNICODE_WCHAR_CACHE */
799
800    return return_value;
801}
802
803PyDoc_STRVAR(_winapi_OpenProcess__doc__,
804"OpenProcess($module, desired_access, inherit_handle, process_id, /)\n"
805"--\n"
806"\n");
807
808#define _WINAPI_OPENPROCESS_METHODDEF    \
809    {"OpenProcess", _PyCFunction_CAST(_winapi_OpenProcess), METH_FASTCALL, _winapi_OpenProcess__doc__},
810
811static HANDLE
812_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access,
813                         BOOL inherit_handle, DWORD process_id);
814
815static PyObject *
816_winapi_OpenProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
817{
818    PyObject *return_value = NULL;
819    DWORD desired_access;
820    BOOL inherit_handle;
821    DWORD process_id;
822    HANDLE _return_value;
823
824    if (!_PyArg_ParseStack(args, nargs, "kik:OpenProcess",
825        &desired_access, &inherit_handle, &process_id)) {
826        goto exit;
827    }
828    _return_value = _winapi_OpenProcess_impl(module, desired_access, inherit_handle, process_id);
829    if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
830        goto exit;
831    }
832    if (_return_value == NULL) {
833        Py_RETURN_NONE;
834    }
835    return_value = HANDLE_TO_PYNUM(_return_value);
836
837exit:
838    return return_value;
839}
840
841PyDoc_STRVAR(_winapi_PeekNamedPipe__doc__,
842"PeekNamedPipe($module, handle, size=0, /)\n"
843"--\n"
844"\n");
845
846#define _WINAPI_PEEKNAMEDPIPE_METHODDEF    \
847    {"PeekNamedPipe", _PyCFunction_CAST(_winapi_PeekNamedPipe), METH_FASTCALL, _winapi_PeekNamedPipe__doc__},
848
849static PyObject *
850_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size);
851
852static PyObject *
853_winapi_PeekNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
854{
855    PyObject *return_value = NULL;
856    HANDLE handle;
857    int size = 0;
858
859    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "|i:PeekNamedPipe",
860        &handle, &size)) {
861        goto exit;
862    }
863    return_value = _winapi_PeekNamedPipe_impl(module, handle, size);
864
865exit:
866    return return_value;
867}
868
869PyDoc_STRVAR(_winapi_LCMapStringEx__doc__,
870"LCMapStringEx($module, /, locale, flags, src)\n"
871"--\n"
872"\n");
873
874#define _WINAPI_LCMAPSTRINGEX_METHODDEF    \
875    {"LCMapStringEx", _PyCFunction_CAST(_winapi_LCMapStringEx), METH_FASTCALL|METH_KEYWORDS, _winapi_LCMapStringEx__doc__},
876
877static PyObject *
878_winapi_LCMapStringEx_impl(PyObject *module, PyObject *locale, DWORD flags,
879                           PyObject *src);
880
881static PyObject *
882_winapi_LCMapStringEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
883{
884    PyObject *return_value = NULL;
885    static const char * const _keywords[] = {"locale", "flags", "src", NULL};
886    static _PyArg_Parser _parser = {"UkU:LCMapStringEx", _keywords, 0};
887    PyObject *locale;
888    DWORD flags;
889    PyObject *src;
890
891    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
892        &locale, &flags, &src)) {
893        goto exit;
894    }
895    return_value = _winapi_LCMapStringEx_impl(module, locale, flags, src);
896
897exit:
898    return return_value;
899}
900
901PyDoc_STRVAR(_winapi_ReadFile__doc__,
902"ReadFile($module, /, handle, size, overlapped=False)\n"
903"--\n"
904"\n");
905
906#define _WINAPI_READFILE_METHODDEF    \
907    {"ReadFile", _PyCFunction_CAST(_winapi_ReadFile), METH_FASTCALL|METH_KEYWORDS, _winapi_ReadFile__doc__},
908
909static PyObject *
910_winapi_ReadFile_impl(PyObject *module, HANDLE handle, DWORD size,
911                      int use_overlapped);
912
913static PyObject *
914_winapi_ReadFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
915{
916    PyObject *return_value = NULL;
917    static const char * const _keywords[] = {"handle", "size", "overlapped", NULL};
918    static _PyArg_Parser _parser = {"" F_HANDLE "k|i:ReadFile", _keywords, 0};
919    HANDLE handle;
920    DWORD size;
921    int use_overlapped = 0;
922
923    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
924        &handle, &size, &use_overlapped)) {
925        goto exit;
926    }
927    return_value = _winapi_ReadFile_impl(module, handle, size, use_overlapped);
928
929exit:
930    return return_value;
931}
932
933PyDoc_STRVAR(_winapi_SetNamedPipeHandleState__doc__,
934"SetNamedPipeHandleState($module, named_pipe, mode,\n"
935"                        max_collection_count, collect_data_timeout, /)\n"
936"--\n"
937"\n");
938
939#define _WINAPI_SETNAMEDPIPEHANDLESTATE_METHODDEF    \
940    {"SetNamedPipeHandleState", _PyCFunction_CAST(_winapi_SetNamedPipeHandleState), METH_FASTCALL, _winapi_SetNamedPipeHandleState__doc__},
941
942static PyObject *
943_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe,
944                                     PyObject *mode,
945                                     PyObject *max_collection_count,
946                                     PyObject *collect_data_timeout);
947
948static PyObject *
949_winapi_SetNamedPipeHandleState(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
950{
951    PyObject *return_value = NULL;
952    HANDLE named_pipe;
953    PyObject *mode;
954    PyObject *max_collection_count;
955    PyObject *collect_data_timeout;
956
957    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "OOO:SetNamedPipeHandleState",
958        &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) {
959        goto exit;
960    }
961    return_value = _winapi_SetNamedPipeHandleState_impl(module, named_pipe, mode, max_collection_count, collect_data_timeout);
962
963exit:
964    return return_value;
965}
966
967PyDoc_STRVAR(_winapi_TerminateProcess__doc__,
968"TerminateProcess($module, handle, exit_code, /)\n"
969"--\n"
970"\n"
971"Terminate the specified process and all of its threads.");
972
973#define _WINAPI_TERMINATEPROCESS_METHODDEF    \
974    {"TerminateProcess", _PyCFunction_CAST(_winapi_TerminateProcess), METH_FASTCALL, _winapi_TerminateProcess__doc__},
975
976static PyObject *
977_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle,
978                              UINT exit_code);
979
980static PyObject *
981_winapi_TerminateProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
982{
983    PyObject *return_value = NULL;
984    HANDLE handle;
985    UINT exit_code;
986
987    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "I:TerminateProcess",
988        &handle, &exit_code)) {
989        goto exit;
990    }
991    return_value = _winapi_TerminateProcess_impl(module, handle, exit_code);
992
993exit:
994    return return_value;
995}
996
997PyDoc_STRVAR(_winapi_VirtualQuerySize__doc__,
998"VirtualQuerySize($module, address, /)\n"
999"--\n"
1000"\n");
1001
1002#define _WINAPI_VIRTUALQUERYSIZE_METHODDEF    \
1003    {"VirtualQuerySize", (PyCFunction)_winapi_VirtualQuerySize, METH_O, _winapi_VirtualQuerySize__doc__},
1004
1005static size_t
1006_winapi_VirtualQuerySize_impl(PyObject *module, LPCVOID address);
1007
1008static PyObject *
1009_winapi_VirtualQuerySize(PyObject *module, PyObject *arg)
1010{
1011    PyObject *return_value = NULL;
1012    LPCVOID address;
1013    size_t _return_value;
1014
1015    if (!PyArg_Parse(arg, "" F_POINTER ":VirtualQuerySize", &address)) {
1016        goto exit;
1017    }
1018    _return_value = _winapi_VirtualQuerySize_impl(module, address);
1019    if ((_return_value == (size_t)-1) && PyErr_Occurred()) {
1020        goto exit;
1021    }
1022    return_value = PyLong_FromSize_t(_return_value);
1023
1024exit:
1025    return return_value;
1026}
1027
1028PyDoc_STRVAR(_winapi_WaitNamedPipe__doc__,
1029"WaitNamedPipe($module, name, timeout, /)\n"
1030"--\n"
1031"\n");
1032
1033#define _WINAPI_WAITNAMEDPIPE_METHODDEF    \
1034    {"WaitNamedPipe", _PyCFunction_CAST(_winapi_WaitNamedPipe), METH_FASTCALL, _winapi_WaitNamedPipe__doc__},
1035
1036static PyObject *
1037_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout);
1038
1039static PyObject *
1040_winapi_WaitNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1041{
1042    PyObject *return_value = NULL;
1043    LPCTSTR name;
1044    DWORD timeout;
1045
1046    if (!_PyArg_ParseStack(args, nargs, "sk:WaitNamedPipe",
1047        &name, &timeout)) {
1048        goto exit;
1049    }
1050    return_value = _winapi_WaitNamedPipe_impl(module, name, timeout);
1051
1052exit:
1053    return return_value;
1054}
1055
1056PyDoc_STRVAR(_winapi_WaitForMultipleObjects__doc__,
1057"WaitForMultipleObjects($module, handle_seq, wait_flag,\n"
1058"                       milliseconds=_winapi.INFINITE, /)\n"
1059"--\n"
1060"\n");
1061
1062#define _WINAPI_WAITFORMULTIPLEOBJECTS_METHODDEF    \
1063    {"WaitForMultipleObjects", _PyCFunction_CAST(_winapi_WaitForMultipleObjects), METH_FASTCALL, _winapi_WaitForMultipleObjects__doc__},
1064
1065static PyObject *
1066_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq,
1067                                    BOOL wait_flag, DWORD milliseconds);
1068
1069static PyObject *
1070_winapi_WaitForMultipleObjects(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1071{
1072    PyObject *return_value = NULL;
1073    PyObject *handle_seq;
1074    BOOL wait_flag;
1075    DWORD milliseconds = INFINITE;
1076
1077    if (!_PyArg_ParseStack(args, nargs, "Oi|k:WaitForMultipleObjects",
1078        &handle_seq, &wait_flag, &milliseconds)) {
1079        goto exit;
1080    }
1081    return_value = _winapi_WaitForMultipleObjects_impl(module, handle_seq, wait_flag, milliseconds);
1082
1083exit:
1084    return return_value;
1085}
1086
1087PyDoc_STRVAR(_winapi_WaitForSingleObject__doc__,
1088"WaitForSingleObject($module, handle, milliseconds, /)\n"
1089"--\n"
1090"\n"
1091"Wait for a single object.\n"
1092"\n"
1093"Wait until the specified object is in the signaled state or\n"
1094"the time-out interval elapses. The timeout value is specified\n"
1095"in milliseconds.");
1096
1097#define _WINAPI_WAITFORSINGLEOBJECT_METHODDEF    \
1098    {"WaitForSingleObject", _PyCFunction_CAST(_winapi_WaitForSingleObject), METH_FASTCALL, _winapi_WaitForSingleObject__doc__},
1099
1100static long
1101_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle,
1102                                 DWORD milliseconds);
1103
1104static PyObject *
1105_winapi_WaitForSingleObject(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1106{
1107    PyObject *return_value = NULL;
1108    HANDLE handle;
1109    DWORD milliseconds;
1110    long _return_value;
1111
1112    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "k:WaitForSingleObject",
1113        &handle, &milliseconds)) {
1114        goto exit;
1115    }
1116    _return_value = _winapi_WaitForSingleObject_impl(module, handle, milliseconds);
1117    if ((_return_value == -1) && PyErr_Occurred()) {
1118        goto exit;
1119    }
1120    return_value = PyLong_FromLong(_return_value);
1121
1122exit:
1123    return return_value;
1124}
1125
1126PyDoc_STRVAR(_winapi_WriteFile__doc__,
1127"WriteFile($module, /, handle, buffer, overlapped=False)\n"
1128"--\n"
1129"\n");
1130
1131#define _WINAPI_WRITEFILE_METHODDEF    \
1132    {"WriteFile", _PyCFunction_CAST(_winapi_WriteFile), METH_FASTCALL|METH_KEYWORDS, _winapi_WriteFile__doc__},
1133
1134static PyObject *
1135_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer,
1136                       int use_overlapped);
1137
1138static PyObject *
1139_winapi_WriteFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1140{
1141    PyObject *return_value = NULL;
1142    static const char * const _keywords[] = {"handle", "buffer", "overlapped", NULL};
1143    static _PyArg_Parser _parser = {"" F_HANDLE "O|i:WriteFile", _keywords, 0};
1144    HANDLE handle;
1145    PyObject *buffer;
1146    int use_overlapped = 0;
1147
1148    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
1149        &handle, &buffer, &use_overlapped)) {
1150        goto exit;
1151    }
1152    return_value = _winapi_WriteFile_impl(module, handle, buffer, use_overlapped);
1153
1154exit:
1155    return return_value;
1156}
1157
1158PyDoc_STRVAR(_winapi_GetACP__doc__,
1159"GetACP($module, /)\n"
1160"--\n"
1161"\n"
1162"Get the current Windows ANSI code page identifier.");
1163
1164#define _WINAPI_GETACP_METHODDEF    \
1165    {"GetACP", (PyCFunction)_winapi_GetACP, METH_NOARGS, _winapi_GetACP__doc__},
1166
1167static PyObject *
1168_winapi_GetACP_impl(PyObject *module);
1169
1170static PyObject *
1171_winapi_GetACP(PyObject *module, PyObject *Py_UNUSED(ignored))
1172{
1173    return _winapi_GetACP_impl(module);
1174}
1175
1176PyDoc_STRVAR(_winapi_GetFileType__doc__,
1177"GetFileType($module, /, handle)\n"
1178"--\n"
1179"\n");
1180
1181#define _WINAPI_GETFILETYPE_METHODDEF    \
1182    {"GetFileType", _PyCFunction_CAST(_winapi_GetFileType), METH_FASTCALL|METH_KEYWORDS, _winapi_GetFileType__doc__},
1183
1184static DWORD
1185_winapi_GetFileType_impl(PyObject *module, HANDLE handle);
1186
1187static PyObject *
1188_winapi_GetFileType(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1189{
1190    PyObject *return_value = NULL;
1191    static const char * const _keywords[] = {"handle", NULL};
1192    static _PyArg_Parser _parser = {"" F_HANDLE ":GetFileType", _keywords, 0};
1193    HANDLE handle;
1194    DWORD _return_value;
1195
1196    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
1197        &handle)) {
1198        goto exit;
1199    }
1200    _return_value = _winapi_GetFileType_impl(module, handle);
1201    if ((_return_value == PY_DWORD_MAX) && PyErr_Occurred()) {
1202        goto exit;
1203    }
1204    return_value = Py_BuildValue("k", _return_value);
1205
1206exit:
1207    return return_value;
1208}
1209
1210PyDoc_STRVAR(_winapi__mimetypes_read_windows_registry__doc__,
1211"_mimetypes_read_windows_registry($module, /, on_type_read)\n"
1212"--\n"
1213"\n"
1214"Optimized function for reading all known MIME types from the registry.\n"
1215"\n"
1216"*on_type_read* is a callable taking *type* and *ext* arguments, as for\n"
1217"MimeTypes.add_type.");
1218
1219#define _WINAPI__MIMETYPES_READ_WINDOWS_REGISTRY_METHODDEF    \
1220    {"_mimetypes_read_windows_registry", _PyCFunction_CAST(_winapi__mimetypes_read_windows_registry), METH_FASTCALL|METH_KEYWORDS, _winapi__mimetypes_read_windows_registry__doc__},
1221
1222static PyObject *
1223_winapi__mimetypes_read_windows_registry_impl(PyObject *module,
1224                                              PyObject *on_type_read);
1225
1226static PyObject *
1227_winapi__mimetypes_read_windows_registry(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1228{
1229    PyObject *return_value = NULL;
1230    static const char * const _keywords[] = {"on_type_read", NULL};
1231    static _PyArg_Parser _parser = {NULL, _keywords, "_mimetypes_read_windows_registry", 0};
1232    PyObject *argsbuf[1];
1233    PyObject *on_type_read;
1234
1235    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
1236    if (!args) {
1237        goto exit;
1238    }
1239    on_type_read = args[0];
1240    return_value = _winapi__mimetypes_read_windows_registry_impl(module, on_type_read);
1241
1242exit:
1243    return return_value;
1244}
1245/*[clinic end generated code: output=9c08a7371fcf5dd4 input=a9049054013a1b77]*/
1246