gh-156261: Move converters used in several files to Argument Clinic (GH-156262)

serhiy-storchaka <[email protected]>
Newsgroups gmane.comp.python.cvs
Message-ID <[email protected]>
https://github.com/python/cpython/commit/2c47c65f2e140ba6a1519252c36f454df38196b9
commit: 2c47c65f2e140ba6a1519252c36f454df38196b9
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-08-23T19:47:55+03:00
summary:

gh-156261: Move converters used in several files to Argument Clinic (GH-156262)

The pid_t, Py_off_t, HANDLE, DWORD and BOOL converters were defined in
9 files.  The Py_off_t type and its converter function are now shared too.
DWORD in _winapi is used with bitwise=True to keep accepting negative
values.

The pid_t converter is now used for the pid parameters in the
_remote_debugging module, which were declared as int.

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>

files:
A Misc/NEWS.d/next/Tools-Demos/2026-08-23-18-10-00.gh-issue-156261.Rw8pKd.rst
M Include/internal/pycore_fileutils.h
M Lib/test/test_clinic.py
M Modules/_io/_iomodule.h
M Modules/_multiprocessing/multiprocessing.c
M Modules/_posixsubprocess.c
M Modules/_remote_debugging/clinic/module.c.h
M Modules/_remote_debugging/module.c
M Modules/_ssl.c
M Modules/_winapi.c
M Modules/clinic/_posixsubprocess.c.h
M Modules/clinic/_ssl.c.h
M Modules/clinic/_winapi.c.h
M Modules/clinic/posixmodule.c.h
M Modules/clinic/resource.c.h
M Modules/overlapped.c
M Modules/posixmodule.c
M Modules/resource.c
M Objects/fileobject.c
M PC/_testconsole.c
M PC/clinic/msvcrtmodule.c.h
M PC/msvcrtmodule.c
M PC/winreg.c
M Tools/clinic/libclinic/converter.py
M Tools/clinic/libclinic/converters.py

diff --git a/Include/internal/pycore_fileutils.h b/Include/internal/pycore_fileutils.h
index 2c6d6daa01994ee..83cdc4f3dfdd44a 100644
--- a/Include/internal/pycore_fileutils.h
+++ b/Include/internal/pycore_fileutils.h
@@ -302,6 +302,16 @@ extern void _Py_skiproot(const wchar_t *path, Py_ssize_t size, Py_ssize_t *drvsi
 // Export for 'select' shared extension (Argument Clinic code)
 PyAPI_FUNC(int) _PyLong_FileDescriptor_Converter(PyObject *, void *);
 
+#ifdef MS_WINDOWS
+/* Windows uses long long for offsets */
+typedef long long Py_off_t;
+#else
+typedef off_t Py_off_t;
+#endif
+
+// Export for '_ssl' and 'zlib' shared extensions (Argument Clinic code)
+PyAPI_FUNC(int) _Py_Off_t_Converter(PyObject *, void *);
+
 // Export for test_peg_generator
 PyAPI_FUNC(char*) _Py_UniversalNewlineFgetsWithSize(char *, int, FILE*, PyObject *, size_t*);
 
diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index 43a1a52874e0196..d07447d66571e52 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -3561,18 +3561,23 @@ def test_cli_converters(self):
         """)
         expected_converters = (
             "bool",
+            "BOOL",
             "byte",
             "char",
             "defining_class",
             "double",
+            "DWORD",
             "fildes",
             "float",
+            "HANDLE",
             "int",
             "long",
             "long_long",
             "object",
+            "pid_t",
             "Py_buffer",
             "Py_complex",
+            "Py_off_t",
             "Py_ssize_t",
             "Py_UNICODE",
             "PyByteArrayObject",
diff --git a/Misc/NEWS.d/next/Tools-Demos/2026-08-23-18-10-00.gh-issue-156261.Rw8pKd.rst b/Misc/NEWS.d/next/Tools-Demos/2026-08-23-18-10-00.gh-issue-156261.Rw8pKd.rst
new file mode 100644
index 000000000000000..da5e42dfa744297
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2026-08-23-18-10-00.gh-issue-156261.Rw8pKd.rst
@@ -0,0 +1,3 @@
+Argument Clinic: the ``pid_t``, ``Py_off_t``, ``HANDLE``, ``DWORD`` and
+``BOOL`` converters, previously defined in 9 different files, are now
+provided by Argument Clinic itself.
diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h
index 4ae487c8e2adf72..c9bbbf24bd466d7 100644
--- a/Modules/_io/_iomodule.h
+++ b/Modules/_io/_iomodule.h
@@ -4,6 +4,7 @@
 
 #include "exports.h"
 
+#include "pycore_fileutils.h"     // Py_off_t
 #include "pycore_moduleobject.h"  // _PyModule_GetState()
 #include "pycore_typeobject.h"    // _PyType_GetModuleState()
 #include "structmember.h"
@@ -94,8 +95,6 @@ extern int _PyIO_trap_eintr(void);
 
 #ifdef MS_WINDOWS
 
-/* Windows uses long long for offsets */
-typedef long long Py_off_t;
 # define PyLong_AsOff_t     PyLong_AsLongLong
 # define PyLong_FromOff_t   PyLong_FromLongLong
 # define PY_OFF_T_MAX       LLONG_MAX
@@ -106,7 +105,6 @@ typedef long long Py_off_t;
 #else
 
 /* Other platforms use off_t */
-typedef off_t Py_off_t;
 #if (SIZEOF_OFF_T == SIZEOF_SIZE_T)
 # define PyLong_AsOff_t     PyLong_AsSsize_t
 # define PyLong_FromOff_t   PyLong_FromSsize_t
diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c
index 201cedbb59818f2..6ca1bbe30f20c77 100644
--- a/Modules/_multiprocessing/multiprocessing.c
+++ b/Modules/_multiprocessing/multiprocessing.c
@@ -9,22 +9,6 @@
 
 #include "multiprocessing.h"
 
-/*[python input]
-class HANDLE_converter(CConverter):
-    type = "HANDLE"
-    format_unit = '"F_HANDLE"'
-
-    def parse_arg(self, argname, displayname, *, limited_capi):
-        return self.format_code("""
-            {paramname} = PyLong_AsVoidPtr({argname});
-            if (!{paramname} && PyErr_Occurred()) {{{{
-                goto exit;
-            }}}}
-            """,
-            argname=argname)
-
-[python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=3cf0318efc6a8772]*/
 
 /*[clinic input]
 module _multiprocessing
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
index 5d8ee661fa3b6de..07cfba8c8be74be 100644
--- a/Modules/_posixsubprocess.c
+++ b/Modules/_posixsubprocess.c
@@ -84,22 +84,6 @@ module _posixsubprocess
 [clinic start generated code]*/
 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=c62211df27cf7334]*/
 
-/*[python input]
-class pid_t_converter(CConverter):
-    type = 'pid_t'
-    format_unit = '" _Py_PARSE_PID "'
-
-    def parse_arg(self, argname, displayname, *, limited_capi):
-        return self.format_code("""
-            {paramname} = PyLong_AsPid({argname});
-            if ({paramname} == -1 && PyErr_Occurred()) {{{{
-                goto exit;
-            }}}}
-            """,
-            argname=argname)
-[python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=c94349aa1aad151d]*/
-
 #include "clinic/_posixsubprocess.c.h"
 
 /* Convert ASCII to a positive int, no libc call. no overflow. -1 on error. */
diff --git a/Modules/_remote_debugging/clinic/module.c.h b/Modules/_remote_debugging/clinic/module.c.h
index d01f3d13e85f09f..ad66d947d19c52f 100644
--- a/Modules/_remote_debugging/clinic/module.c.h
+++ b/Modules/_remote_debugging/clinic/module.c.h
@@ -56,7 +56,7 @@ PyDoc_STRVAR(_remote_debugging_RemoteUnwinder___init____doc__,
 
 static int
 _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self,
-                                               int pid, int all_threads,
+                                               pid_t pid, int all_threads,
                                                int only_active_thread,
                                                int mode, int debug,
                                                int skip_non_matching_threads,
@@ -99,7 +99,7 @@ _remote_debugging_RemoteUnwinder___init__(PyObject *self, PyObject *args, PyObje
     PyObject * const *fastargs;
     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
     Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
-    int pid;
+    pid_t pid;
     int all_threads = 0;
     int only_active_thread = 0;
     int mode = 0;
@@ -116,8 +116,8 @@ _remote_debugging_RemoteUnwinder___init__(PyObject *self, PyObject *args, PyObje
     if (!fastargs) {
         goto exit;
     }
-    pid = PyLong_AsInt(fastargs[0]);
-    if (pid == -1 && PyErr_Occurred()) {
+    pid = PyLong_AsPid(fastargs[0]);
+    if (pid == (pid_t)(-1) && PyErr_Occurred()) {
         goto exit;
     }
     if (!noptargs) {
@@ -559,7 +559,7 @@ PyDoc_STRVAR(_remote_debugging_GCMonitor___init____doc__,
 "        target process");
 
 static int
-_remote_debugging_GCMonitor___init___impl(GCMonitorObject *self, int pid,
+_remote_debugging_GCMonitor___init___impl(GCMonitorObject *self, pid_t pid,
                                           int debug);
 
 static int
@@ -597,7 +597,7 @@ _remote_debugging_GCMonitor___init__(PyObject *self, PyObject *args, PyObject *k
     PyObject * const *fastargs;
     Py_ssize_t nargs = PyTuple_GET_SIZE(args);
     Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
-    int pid;
+    pid_t pid;
     int debug = 0;
 
     fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
@@ -605,8 +605,8 @@ _remote_debugging_GCMonitor___init__(PyObject *self, PyObject *args, PyObject *k
     if (!fastargs) {
         goto exit;
     }
-    pid = PyLong_AsInt(fastargs[0]);
-    if (pid == -1 && PyErr_Occurred()) {
+    pid = PyLong_AsPid(fastargs[0]);
+    if (pid == (pid_t)(-1) && PyErr_Occurred()) {
         goto exit;
     }
     if (!noptargs) {
@@ -1374,7 +1374,7 @@ PyDoc_STRVAR(_remote_debugging_get_child_pids__doc__,
     {"get_child_pids", _PyCFunction_CAST(_remote_debugging_get_child_pids), METH_FASTCALL|METH_KEYWORDS, _remote_debugging_get_child_pids__doc__},
 
 static PyObject *
-_remote_debugging_get_child_pids_impl(PyObject *module, int pid,
+_remote_debugging_get_child_pids_impl(PyObject *module, pid_t pid,
                                       int recursive);
 
 static PyObject *
@@ -1410,7 +1410,7 @@ _remote_debugging_get_child_pids(PyObject *module, PyObject *const *args, Py_ssi
     #undef KWTUPLE
     PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
-    int pid;
+    pid_t pid;
     int recursive = 1;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
@@ -1418,8 +1418,8 @@ _remote_debugging_get_child_pids(PyObject *module, PyObject *const *args, Py_ssi
     if (!args) {
         goto exit;
     }
-    pid = PyLong_AsInt(args[0]);
-    if (pid == -1 && PyErr_Occurred()) {
+    pid = PyLong_AsPid(args[0]);
+    if (pid == (pid_t)(-1) && PyErr_Occurred()) {
         goto exit;
     }
     if (!noptargs) {
@@ -1446,7 +1446,7 @@ PyDoc_STRVAR(_remote_debugging_is_python_process__doc__,
     {"is_python_process", _PyCFunction_CAST(_remote_debugging_is_python_process), METH_FASTCALL|METH_KEYWORDS, _remote_debugging_is_python_process__doc__},
 
 static PyObject *
-_remote_debugging_is_python_process_impl(PyObject *module, int pid);
+_remote_debugging_is_python_process_impl(PyObject *module, pid_t pid);
 
 static PyObject *
 _remote_debugging_is_python_process(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
@@ -1480,15 +1480,15 @@ _remote_debugging_is_python_process(PyObject *module, PyObject *const *args, Py_
     };
     #undef KWTUPLE
     PyObject *argsbuf[1];
-    int pid;
+    pid_t pid;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
             /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
     if (!args) {
         goto exit;
     }
-    pid = PyLong_AsInt(args[0]);
-    if (pid == -1 && PyErr_Occurred()) {
+    pid = PyLong_AsPid(args[0]);
+    if (pid == (pid_t)(-1) && PyErr_Occurred()) {
         goto exit;
     }
     return_value = _remote_debugging_is_python_process_impl(module, pid);
@@ -1527,7 +1527,7 @@ PyDoc_STRVAR(_remote_debugging_get_gc_stats__doc__,
     {"get_gc_stats", _PyCFunction_CAST(_remote_debugging_get_gc_stats), METH_FASTCALL|METH_KEYWORDS, _remote_debugging_get_gc_stats__doc__},
 
 static PyObject *
-_remote_debugging_get_gc_stats_impl(PyObject *module, int pid,
+_remote_debugging_get_gc_stats_impl(PyObject *module, pid_t pid,
                                     int all_interpreters);
 
 static PyObject *
@@ -1563,7 +1563,7 @@ _remote_debugging_get_gc_stats(PyObject *module, PyObject *const *args, Py_ssize
     #undef KWTUPLE
     PyObject *argsbuf[2];
     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
-    int pid;
+    pid_t pid;
     int all_interpreters = 0;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
@@ -1571,8 +1571,8 @@ _remote_debugging_get_gc_stats(PyObject *module, PyObject *const *args, Py_ssize
     if (!args) {
         goto exit;
     }
-    pid = PyLong_AsInt(args[0]);
-    if (pid == -1 && PyErr_Occurred()) {
+    pid = PyLong_AsPid(args[0]);
+    if (pid == (pid_t)(-1) && PyErr_Occurred()) {
         goto exit;
     }
     if (!noptargs) {
@@ -1588,4 +1588,4 @@ _remote_debugging_get_gc_stats(PyObject *module, PyObject *const *args, Py_ssize
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=a3df14a6ab7f2998 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=22511c10d9224b28 input=a9049054013a1b77]*/
diff --git a/Modules/_remote_debugging/module.c b/Modules/_remote_debugging/module.c
index adafee97a94ada7..4f365f303f14c77 100644
--- a/Modules/_remote_debugging/module.c
+++ b/Modules/_remote_debugging/module.c
@@ -281,7 +281,7 @@ class _remote_debugging.RemoteUnwinder "RemoteUnwinderObject *" "&RemoteUnwinder
 /*[clinic input]
 @permit_long_summary
 _remote_debugging.RemoteUnwinder.__init__
-    pid: int
+    pid: pid_t
     *
     all_threads: bool = False
     only_active_thread: bool = False
@@ -334,14 +334,14 @@ other runtime data.
 
 static int
 _remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self,
-                                               int pid, int all_threads,
+                                               pid_t pid, int all_threads,
                                                int only_active_thread,
                                                int mode, int debug,
                                                int skip_non_matching_threads,
                                                int native, int gc,
                                                int opcodes, int cache_frames,
                                                int stats)
-/*[clinic end generated code: output=0031f743f4b9ad52 input=9d25ae328d62626d]*/
+/*[clinic end generated code: output=acfe554c8a92cf6b input=3b5a5ad153709125]*/
 {
     // Validate that all_threads and only_active_thread are not both True
     if (all_threads && only_active_thread) {
@@ -1376,7 +1376,7 @@ cleanup_runtime_offsets(RuntimeOffsets *offsets)
 }
 
 static int
-init_runtime_offsets(RuntimeOffsets *offsets, int pid, int debug)
+init_runtime_offsets(RuntimeOffsets *offsets, pid_t pid, int debug)
 {
     offsets->debug = debug;
     if (_Py_RemoteDebug_InitProcHandle(&offsets->handle, pid) < 0) {
@@ -1414,7 +1414,7 @@ class _remote_debugging.GCMonitor "GCMonitorObject *" "&GCMonitor_Type"
 /*[clinic input]
 @permit_long_summary
 _remote_debugging.GCMonitor.__init__
-    pid: int
+    pid: pid_t
     *
     debug: bool = False
 
@@ -1437,9 +1437,9 @@ a running Python process.
 [clinic start generated code]*/
 
 static int
-_remote_debugging_GCMonitor___init___impl(GCMonitorObject *self, int pid,
+_remote_debugging_GCMonitor___init___impl(GCMonitorObject *self, pid_t pid,
                                           int debug)
-/*[clinic end generated code: output=2cdf351c2f6335db input=03da0b2d3282ae1b]*/
+/*[clinic end generated code: output=03b4c92bef0673ad input=dcc6ee2ec5a16fa1]*/
 {
     return init_runtime_offsets(&self->offsets, pid, debug);
 }
@@ -2226,7 +2226,7 @@ _remote_debugging_zstd_available_impl(PyObject *module)
 /*[clinic input]
 _remote_debugging.get_child_pids
 
-    pid: int
+    pid: pid_t
         Process ID of the parent process
     *
     recursive: bool = True
@@ -2248,24 +2248,24 @@ list is returned.
 [clinic start generated code]*/
 
 static PyObject *
-_remote_debugging_get_child_pids_impl(PyObject *module, int pid,
+_remote_debugging_get_child_pids_impl(PyObject *module, pid_t pid,
                                       int recursive)
-/*[clinic end generated code: output=1ae2289c6b953e4b input=c6437b52e2fdd880]*/
+/*[clinic end generated code: output=fa3dfd1b02eed29b input=3325d95e9f39d75d]*/
 {
-    return enumerate_child_pids((pid_t)pid, recursive);
+    return enumerate_child_pids(pid, recursive);
 }
 
 /*[clinic input]
 _remote_debugging.is_python_process
 
-    pid: int
+    pid: pid_t
 
 Check if a process is a Python process.
 [clinic start generated code]*/
 
 static PyObject *
-_remote_debugging_is_python_process_impl(PyObject *module, int pid)
-/*[clinic end generated code: output=22947dc8afcac362 input=13488e28c7295d84]*/
+_remote_debugging_is_python_process_impl(PyObject *module, pid_t pid)
+/*[clinic end generated code: output=63541478c889e536 input=ff998fef4aeef433]*/
 {
     proc_handle_t handle;
 
@@ -2288,7 +2288,7 @@ _remote_debugging_is_python_process_impl(PyObject *module, int pid)
 /*[clinic input]
 _remote_debugging.get_gc_stats
 
-    pid: int
+    pid: pid_t
     *
     all_interpreters: bool = False
         If True, return GC statistics from all interpreters.
@@ -2314,9 +2314,9 @@ Get garbage collector statistics from external Python process.
 [clinic start generated code]*/
 
 static PyObject *
-_remote_debugging_get_gc_stats_impl(PyObject *module, int pid,
+_remote_debugging_get_gc_stats_impl(PyObject *module, pid_t pid,
                                     int all_interpreters)
-/*[clinic end generated code: output=d9dce5f7add149bb input=a2a08a45a8f0b119]*/
+/*[clinic end generated code: output=dd33199ccb6a56e9 input=41399e77788aa369]*/
 {
     RuntimeOffsets offsets;
     if (init_runtime_offsets(&offsets, pid, /*debug=*/1) < 0) {
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 9f8a6a58cd9327e..aadc015405453f3 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -80,34 +80,6 @@
 #endif
 
 
-#ifdef BIO_get_ktls_send
-#  ifdef MS_WINDOWS
-typedef long long Py_off_t;
-#  else
-typedef off_t Py_off_t;
-#  endif
-
-static int
-Py_off_t_converter(PyObject *arg, void *addr)
-{
-#ifdef HAVE_LARGEFILE_SUPPORT
-    *((Py_off_t *)addr) = PyLong_AsLongLong(arg);
-#else
-    *((Py_off_t *)addr) = PyLong_AsLong(arg);
-#endif
-    return PyErr_Occurred() ? 0 : 1;
-}
-
-/*[python input]
-
-class Py_off_t_converter(CConverter):
-    type = 'Py_off_t'
-    converter = 'Py_off_t_converter'
-
-[python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=3fd9ca8ca6f0cbb8]*/
-#endif /* BIO_get_ktls_send */
-
 struct py_ssl_error_code {
     const char *mnemonic;
     int library, reason;
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
index a649d84a7925a04..36eb831044a7861 100644
--- a/Modules/_winapi.c
+++ b/Modules/_winapi.c
@@ -227,13 +227,10 @@ def create_converter(type_, format_unit):
     type(name, (CConverter,), {'type': type_, 'format_unit': format_unit})
 
 # format unit differs between platforms for these
-create_converter('HANDLE', '" F_HANDLE "')
 create_converter('HMODULE', '" F_HANDLE "')
 create_converter('LPSECURITY_ATTRIBUTES', '" F_POINTER "')
 create_converter('LPCVOID', '" F_POINTER "')
 
-create_converter('BOOL', 'i') # F_BOOL used previously (always 'i')
-create_converter('DWORD', 'k') # F_DWORD is always "k" (which is much shorter)
 create_converter('UINT', 'I') # F_UINT used previously (always 'I')
 
 class LPCWSTR_converter(Py_UNICODE_converter):
@@ -268,7 +265,7 @@ class LPVOID_return_converter(CReturnConverter):
         data.return_conversion.append(
             'return_value = HANDLE_TO_PYNUM(_return_value);\n')
 [python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=da0a4db751936ee7]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=59b6c67bbb5411d5]*/
 
 #include "clinic/_winapi.c.h"
 
@@ -520,11 +517,11 @@ _winapi_CreateEventW_impl(PyObject *module,
 _winapi.CreateFile -> HANDLE
 
     file_name: LPCWSTR
-    desired_access: DWORD
-    share_mode: DWORD
+    desired_access: DWORD(bitwise=True)
+    share_mode: DWORD(bitwise=True)
     security_attributes: LPSECURITY_ATTRIBUTES
-    creation_disposition: DWORD
-    flags_and_attributes: DWORD
+    creation_disposition: DWORD(bitwise=True)
+    flags_and_attributes: DWORD(bitwise=True)
     template_file: HANDLE
     /
 [clinic start generated code]*/
@@ -535,7 +532,7 @@ _winapi_CreateFile_impl(PyObject *module, LPCWSTR file_name,
                         LPSECURITY_ATTRIBUTES security_attributes,
                         DWORD creation_disposition,
                         DWORD flags_and_attributes, HANDLE template_file)
-/*[clinic end generated code: output=818c811e5e04d550 input=1fa870ed1c2e3d69]*/
+/*[clinic end generated code: output=818c811e5e04d550 input=de198846d329724e]*/
 {
     HANDLE handle;
 
@@ -564,9 +561,9 @@ _winapi.CreateFileMapping -> HANDLE
 
     file_handle: HANDLE
     security_attributes: LPSECURITY_ATTRIBUTES
-    protect: DWORD
-    max_size_high: DWORD
-    max_size_low: DWORD
+    protect: DWORD(bitwise=True)
+    max_size_high: DWORD(bitwise=True)
+    max_size_low: DWORD(bitwise=True)
     name: LPCWSTR
     /
 [clinic start generated code]*/
@@ -576,7 +573,7 @@ _winapi_CreateFileMapping_impl(PyObject *module, HANDLE file_handle,
                                LPSECURITY_ATTRIBUTES security_attributes,
                                DWORD protect, DWORD max_size_high,
                                DWORD max_size_low, LPCWSTR name)
-/*[clinic end generated code: output=6c0a4d5cf7f6fcc6 input=3dc5cf762a74dee8]*/
+/*[clinic end generated code: output=6c0a4d5cf7f6fcc6 input=06507c1bc186b047]*/
 {
     HANDLE handle;
 
@@ -787,12 +784,12 @@ _winapi_CreateMutexW_impl(PyObject *module,
 _winapi.CreateNamedPipe -> HANDLE
 
     name: LPCWSTR
-    open_mode: DWORD
-    pipe_mode: DWORD
-    max_instances: DWORD
-    out_buffer_size: DWORD
-    in_buffer_size: DWORD
-    default_timeout: DWORD
+    open_mode: DWORD(bitwise=True)
+    pipe_mode: DWORD(bitwise=True)
+    max_instances: DWORD(bitwise=True)
+    out_buffer_size: DWORD(bitwise=True)
+    in_buffer_size: DWORD(bitwise=True)
+    default_timeout: DWORD(bitwise=True)
     security_attributes: LPSECURITY_ATTRIBUTES
     /
 [clinic start generated code]*/
@@ -803,7 +800,7 @@ _winapi_CreateNamedPipe_impl(PyObject *module, LPCWSTR name, DWORD open_mode,
                              DWORD out_buffer_size, DWORD in_buffer_size,
                              DWORD default_timeout,
                              LPSECURITY_ATTRIBUTES security_attributes)
-/*[clinic end generated code: output=7d6fde93227680ba input=5bd4e4a55639ee02]*/
+/*[clinic end generated code: output=7d6fde93227680ba input=83dfbf822975724b]*/
 {
     HANDLE handle;
 
@@ -830,7 +827,7 @@ _winapi.CreatePipe
 
     pipe_attrs: object
         Ignored internally, can be None.
-    size: DWORD
+    size: DWORD(bitwise=True)
     /
 
 Create an anonymous pipe.
@@ -840,7 +837,7 @@ Returns a 2-tuple of handles, to the read and write ends of the pipe.
 
 static PyObject *
 _winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size)
-/*[clinic end generated code: output=1c4411d8699f0925 input=c4f2cfa56ef68d90]*/
+/*[clinic end generated code: output=1c4411d8699f0925 input=ccfdf00b218dfe06]*/
 {
     HANDLE read_pipe;
     HANDLE write_pipe;
@@ -1337,7 +1334,7 @@ _winapi.CreateProcess
     thread_attrs: object
         Ignored internally, can be None.
     inherit_handles: BOOL
-    creation_flags: DWORD
+    creation_flags: DWORD(bitwise=True)
     env_mapping: object
     current_directory: Py_UNICODE(accept={str, NoneType})
     startup_info: object
@@ -1356,7 +1353,7 @@ _winapi_CreateProcess_impl(PyObject *module, const wchar_t *application_name,
                            DWORD creation_flags, PyObject *env_mapping,
                            const wchar_t *current_directory,
                            PyObject *startup_info)
-/*[clinic end generated code: output=a25c8e49ea1d6427 input=42ac293eaea03fc4]*/
+/*[clinic end generated code: output=a25c8e49ea1d6427 input=84e2175279a3f5c2]*/
 {
     PyObject *ret = NULL;
     BOOL result;
@@ -1447,9 +1444,9 @@ _winapi.DuplicateHandle -> HANDLE
     source_process_handle: HANDLE
     source_handle: HANDLE
     target_process_handle: HANDLE
-    desired_access: DWORD
+    desired_access: DWORD(bitwise=True)
     inherit_handle: BOOL
-    options: DWORD = 0
+    options: DWORD(bitwise=True) = 0
     /
 
 Return a duplicate handle object.
@@ -1465,7 +1462,7 @@ _winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle,
                              HANDLE target_process_handle,
                              DWORD desired_access, BOOL inherit_handle,
                              DWORD options)
-/*[clinic end generated code: output=ad9711397b5dcd4e input=b933e3f2356a8c12]*/
+/*[clinic end generated code: output=ad9711397b5dcd4e input=f4965c09aa01993a]*/
 {
     HANDLE target_handle;
     BOOL result;
@@ -1698,7 +1695,7 @@ _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path)
 /*[clinic input]
 _winapi.GetStdHandle -> HANDLE
 
-    std_handle: DWORD
+    std_handle: DWORD(bitwise=True)
         One of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, or STD_ERROR_HANDLE.
     /
 
@@ -1709,7 +1706,7 @@ The integer associated with the handle object is returned.
 
 static HANDLE
 _winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle)
-/*[clinic end generated code: output=0e613001e73ab614 input=07016b06a2fc8826]*/
+/*[clinic end generated code: output=0e613001e73ab614 input=377191071925fe8d]*/
 {
     HANDLE handle;
 
@@ -1760,9 +1757,9 @@ _winapi_GetVersion_impl(PyObject *module)
 _winapi.MapViewOfFile -> LPVOID
 
     file_map: HANDLE
-    desired_access: DWORD
-    file_offset_high: DWORD
-    file_offset_low: DWORD
+    desired_access: DWORD(bitwise=True)
+    file_offset_high: DWORD(bitwise=True)
+    file_offset_low: DWORD(bitwise=True)
     number_bytes: size_t
     /
 [clinic start generated code]*/
@@ -1771,7 +1768,7 @@ static LPVOID
 _winapi_MapViewOfFile_impl(PyObject *module, HANDLE file_map,
                            DWORD desired_access, DWORD file_offset_high,
                            DWORD file_offset_low, size_t number_bytes)
-/*[clinic end generated code: output=f23b1ee4823663e3 input=177471073be1a103]*/
+/*[clinic end generated code: output=f23b1ee4823663e3 input=cc9e7e33663d3b8e]*/
 {
     LPVOID address;
 
@@ -1813,7 +1810,7 @@ _winapi_UnmapViewOfFile_impl(PyObject *module, LPCVOID address)
 /*[clinic input]
 _winapi.OpenEventW -> HANDLE
 
-    desired_access: DWORD
+    desired_access: DWORD(bitwise=True)
     inherit_handle: BOOL
     name: LPCWSTR
 [clinic start generated code]*/
@@ -1821,7 +1818,7 @@ _winapi.OpenEventW -> HANDLE
 static HANDLE
 _winapi_OpenEventW_impl(PyObject *module, DWORD desired_access,
                         BOOL inherit_handle, LPCWSTR name)
-/*[clinic end generated code: output=c4a45e95545a4bd2 input=dec26598748d35aa]*/
+/*[clinic end generated code: output=c4a45e95545a4bd2 input=ca388b35dcd10b1e]*/
 {
     HANDLE handle;
 
@@ -1844,7 +1841,7 @@ _winapi_OpenEventW_impl(PyObject *module, DWORD desired_access,
 /*[clinic input]
 _winapi.OpenMutexW -> HANDLE
 
-    desired_access: DWORD
+    desired_access: DWORD(bitwise=True)
     inherit_handle: BOOL
     name: LPCWSTR
 [clinic start generated code]*/
@@ -1852,7 +1849,7 @@ _winapi.OpenMutexW -> HANDLE
 static HANDLE
 _winapi_OpenMutexW_impl(PyObject *module, DWORD desired_access,
                         BOOL inherit_handle, LPCWSTR name)
-/*[clinic end generated code: output=dda39d7844397bf0 input=f3a7b466c5307712]*/
+/*[clinic end generated code: output=dda39d7844397bf0 input=c1a077777c7f88f6]*/
 {
     HANDLE handle;
 
@@ -1874,7 +1871,7 @@ _winapi_OpenMutexW_impl(PyObject *module, DWORD desired_access,
 /*[clinic input]
 _winapi.OpenFileMapping -> HANDLE
 
-    desired_access: DWORD
+    desired_access: DWORD(bitwise=True)
     inherit_handle: BOOL
     name: LPCWSTR
     /
@@ -1883,7 +1880,7 @@ _winapi.OpenFileMapping -> HANDLE
 static HANDLE
 _winapi_OpenFileMapping_impl(PyObject *module, DWORD desired_access,
                              BOOL inherit_handle, LPCWSTR name)
-/*[clinic end generated code: output=08cc44def1cb11f1 input=131f2a405359de7f]*/
+/*[clinic end generated code: output=08cc44def1cb11f1 input=1f82471d4cdc232f]*/
 {
     HANDLE handle;
 
@@ -1904,16 +1901,16 @@ _winapi_OpenFileMapping_impl(PyObject *module, DWORD desired_access,
 /*[clinic input]
 _winapi.OpenProcess -> HANDLE
 
-    desired_access: DWORD
+    desired_access: DWORD(bitwise=True)
     inherit_handle: BOOL
-    process_id: DWORD
+    process_id: DWORD(bitwise=True)
     /
 [clinic start generated code]*/
 
 static HANDLE
 _winapi_OpenProcess_impl(PyObject *module, DWORD desired_access,
                          BOOL inherit_handle, DWORD process_id)
-/*[clinic end generated code: output=b42b6b81ea5a0fc3 input=ec98c4cf4ea2ec36]*/
+/*[clinic end generated code: output=b42b6b81ea5a0fc3 input=13af8d7640f1313f]*/
 {
     HANDLE handle;
 
@@ -1990,7 +1987,7 @@ _winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size)
 _winapi.LCMapStringEx
 
     locale: LPCWSTR
-    flags: DWORD
+    flags: DWORD(bitwise=True)
     src: unicode
 
 [clinic start generated code]*/
@@ -1998,7 +1995,7 @@ _winapi.LCMapStringEx
 static PyObject *
 _winapi_LCMapStringEx_impl(PyObject *module, LPCWSTR locale, DWORD flags,
                            PyObject *src)
-/*[clinic end generated code: output=b90e6b26e028ff0a input=3e3dcd9b8164012f]*/
+/*[clinic end generated code: output=b90e6b26e028ff0a input=247d3967a9c480ba]*/
 {
     if (flags & (LCMAP_SORTHANDLE | LCMAP_HASH | LCMAP_BYTEREV |
                  LCMAP_SORTKEY)) {
@@ -2050,14 +2047,14 @@ _winapi_LCMapStringEx_impl(PyObject *module, LPCWSTR locale, DWORD flags,
 _winapi.ReadFile
 
     handle: HANDLE
-    size: DWORD
+    size: DWORD(bitwise=True)
     overlapped as use_overlapped: bool = False
 [clinic start generated code]*/
 
 static PyObject *
 _winapi_ReadFile_impl(PyObject *module, HANDLE handle, DWORD size,
                       int use_overlapped)
-/*[clinic end generated code: output=d3d5b44a8201b944 input=4f82f8e909ad91ad]*/
+/*[clinic end generated code: output=d3d5b44a8201b944 input=aa266e0df79fe16a]*/
 {
     DWORD nread;
     PyObject *buf;
@@ -2277,13 +2274,13 @@ _winapi_VirtualQuerySize_impl(PyObject *module, LPCVOID address)
 _winapi.WaitNamedPipe
 
     name: LPCWSTR
-    timeout: DWORD
+    timeout: DWORD(bitwise=True)
     /
 [clinic start generated code]*/
 
 static PyObject *
 _winapi_WaitNamedPipe_impl(PyObject *module, LPCWSTR name, DWORD timeout)
-/*[clinic end generated code: output=e161e2e630b3e9c2 input=099a4746544488fa]*/
+/*[clinic end generated code: output=e161e2e630b3e9c2 input=e35bf1f712f3193d]*/
 {
     BOOL success;
 
@@ -2334,7 +2331,7 @@ _winapi.BatchedWaitForMultipleObjects
 
     handle_seq: object
     wait_all: BOOL
-    milliseconds: DWORD(c_default='INFINITE') = _winapi.INFINITE
+    milliseconds: DWORD(bitwise=True, c_default='INFINITE') = _winapi.INFINITE
 
 Supports a larger number of handles than WaitForMultipleObjects
 
@@ -2356,7 +2353,7 @@ static PyObject *
 _winapi_BatchedWaitForMultipleObjects_impl(PyObject *module,
                                            PyObject *handle_seq,
                                            BOOL wait_all, DWORD milliseconds)
-/*[clinic end generated code: output=d21c1a4ad0a252fd input=7e196f29005dc77b]*/
+/*[clinic end generated code: output=d21c1a4ad0a252fd input=c93e93b7fce1da4f]*/
 {
     Py_ssize_t thread_count = 0, handle_count = 0, i;
     Py_ssize_t nhandles;
@@ -2607,14 +2604,14 @@ _winapi.WaitForMultipleObjects
 
     handle_seq: object
     wait_flag: BOOL
-    milliseconds: DWORD(c_default='INFINITE') = _winapi.INFINITE
+    milliseconds: DWORD(bitwise=True, c_default='INFINITE') = _winapi.INFINITE
     /
 [clinic start generated code]*/
 
 static PyObject *
 _winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq,
                                     BOOL wait_flag, DWORD milliseconds)
-/*[clinic end generated code: output=295e3f00b8e45899 input=36f76ca057cd28a0]*/
+/*[clinic end generated code: output=295e3f00b8e45899 input=8ea1dd762d873559]*/
 {
     DWORD result;
     HANDLE handles[MAXIMUM_WAIT_OBJECTS];
@@ -2677,7 +2674,7 @@ _winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq,
 _winapi.WaitForSingleObject -> long
 
     handle: HANDLE
-    milliseconds: DWORD
+    milliseconds: DWORD(bitwise=True)
     /
 
 Wait for a single object.
@@ -2690,7 +2687,7 @@ in milliseconds.
 static long
 _winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle,
                                  DWORD milliseconds)
-/*[clinic end generated code: output=3c4715d8f1b39859 input=443d1ab076edc7b1]*/
+/*[clinic end generated code: output=3c4715d8f1b39859 input=1f74a3422daef05c]*/
 {
     DWORD result;
 
@@ -2954,7 +2951,7 @@ _winapi.CopyFile2
 
     existing_file_name: LPCWSTR
     new_file_name: LPCWSTR
-    flags: DWORD
+    flags: DWORD(bitwise=True)
     progress_routine: object = None
 
 Copies a file from one name to a new name.
@@ -2970,7 +2967,7 @@ static PyObject *
 _winapi_CopyFile2_impl(PyObject *module, LPCWSTR existing_file_name,
                        LPCWSTR new_file_name, DWORD flags,
                        PyObject *progress_routine)
-/*[clinic end generated code: output=43d960d9df73d984 input=fb976b8d1492d130]*/
+/*[clinic end generated code: output=43d960d9df73d984 input=16394ddb6b3bd276]*/
 {
     HRESULT hr;
     COPYFILE2_EXTENDED_PARAMETERS params = { sizeof(COPYFILE2_EXTENDED_PARAMETERS) };
diff --git a/Modules/clinic/_posixsubprocess.c.h b/Modules/clinic/_posixsubprocess.c.h
index e7e9707f182a2ed..3414dc5fa261df0 100644
--- a/Modules/clinic/_posixsubprocess.c.h
+++ b/Modules/clinic/_posixsubprocess.c.h
@@ -134,7 +134,7 @@ subprocess_fork_exec(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
         goto exit;
     }
     pgid_to_set = PyLong_AsPid(args[16]);
-    if (pgid_to_set == -1 && PyErr_Occurred()) {
+    if (pgid_to_set == (pid_t)(-1) && PyErr_Occurred()) {
         goto exit;
     }
     gid_object = args[17];
@@ -150,4 +150,4 @@ subprocess_fork_exec(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=138941c284792aa1 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=59df66f994e6251d input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h
index 62d52fc5f1aa5dd..aa6416805e463a6 100644
--- a/Modules/clinic/_ssl.c.h
+++ b/Modules/clinic/_ssl.c.h
@@ -7,6 +7,7 @@ preserve
 #  include "pycore_runtime.h"     // _Py_ID()
 #endif
 #include "pycore_critical_section.h"// Py_BEGIN_CRITICAL_SECTION()
+#include "pycore_fileutils.h"     // _Py_Off_t_Converter()
 #include "pycore_long.h"          // _PyLong_Size_t_Converter()
 #include "pycore_modsupport.h"    // _PyArg_CheckPositional()
 
@@ -613,7 +614,7 @@ _ssl__SSLSocket_sendfile(PyObject *self, PyObject *const *args, Py_ssize_t nargs
     if (fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[1], &offset)) {
+    if (!_Py_Off_t_Converter(args[1], &offset)) {
         goto exit;
     }
     if (!_PyLong_Size_t_Converter(args[2], &size)) {
@@ -3398,4 +3399,4 @@ _ssl_enum_crls(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje
 #ifndef _SSL_ENUM_CRLS_METHODDEF
     #define _SSL_ENUM_CRLS_METHODDEF
 #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */
-/*[clinic end generated code: output=3a5bdd8db17e32b1 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=aef11b9d635db158 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h
index 031a0783aef60bb..144d03bdf30dcf0 100644
--- a/Modules/clinic/_winapi.c.h
+++ b/Modules/clinic/_winapi.c.h
@@ -88,7 +88,8 @@ _winapi_CloseHandle(PyObject *module, PyObject *arg)
     PyObject *return_value = NULL;
     HANDLE handle;
 
-    if (!PyArg_Parse(arg, "" F_HANDLE ":CloseHandle", &handle)) {
+    handle = PyLong_AsVoidPtr(arg);
+    if (!handle && PyErr_Occurred()) {
         goto exit;
     }
     return_value = _winapi_CloseHandle_impl(module, handle);
@@ -136,17 +137,32 @@ _winapi_ConnectNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nar
     static const char * const _keywords[] = {"handle", "overlapped", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "" F_HANDLE "|p:ConnectNamedPipe",
+        .fname = "ConnectNamedPipe",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[2];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
     HANDLE handle;
     int use_overlapped = 0;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &handle, &use_overlapped)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    handle = PyLong_AsVoidPtr(args[0]);
+    if (!handle && PyErr_Occurred()) {
         goto exit;
     }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    use_overlapped = PyObject_IsTrue(args[1]);
+    if (use_overlapped < 0) {
+        goto exit;
+    }
+skip_optional_pos:
     return_value = _winapi_ConnectNamedPipe_impl(module, handle, use_overlapped);
 
 exit:
@@ -255,7 +271,7 @@ _winapi_CreateFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     HANDLE template_file;
     HANDLE _return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, "O&kk" F_POINTER "kk" F_HANDLE ":CreateFile",
+    if (!_PyArg_ParseStack(args, nargs, "O&kk" F_POINTER "kk"_Py_PARSE_UINTPTR":CreateFile",
         _PyUnicode_WideCharString_Converter, &file_name, &desired_access, &share_mode, &security_attributes, &creation_disposition, &flags_and_attributes, &template_file)) {
         goto exit;
     }
@@ -302,7 +318,7 @@ _winapi_CreateFileMapping(PyObject *module, PyObject *const *args, Py_ssize_t na
     LPCWSTR name = NULL;
     HANDLE _return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "" F_POINTER "kkkO&:CreateFileMapping",
+    if (!_PyArg_ParseStack(args, nargs, ""_Py_PARSE_UINTPTR"" F_POINTER "kkkO&:CreateFileMapping",
         &file_handle, &security_attributes, &protect, &max_size_high, &max_size_low, _PyUnicode_WideCharString_Converter, &name)) {
         goto exit;
     }
@@ -515,10 +531,30 @@ _winapi_CreatePipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     PyObject *pipe_attrs;
     DWORD size;
 
-    if (!_PyArg_ParseStack(args, nargs, "Ok:CreatePipe",
-        &pipe_attrs, &size)) {
+    if (!_PyArg_CheckPositional("CreatePipe", nargs, 2, 2)) {
+        goto exit;
+    }
+    pipe_attrs = args[0];
+    if (!PyIndex_Check(args[1])) {
+        _PyArg_BadArgument("CreatePipe", "argument 2", "int", args[1]);
         goto exit;
     }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[1], &size, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
     return_value = _winapi_CreatePipe_impl(module, pipe_attrs, size);
 
 exit:
@@ -568,10 +604,64 @@ _winapi_CreateProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     const wchar_t *current_directory = NULL;
     PyObject *startup_info;
 
-    if (!_PyArg_ParseStack(args, nargs, "O&OOOikOO&O:CreateProcess",
-        _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)) {
+    if (!_PyArg_CheckPositional("CreateProcess", nargs, 9, 9)) {
+        goto exit;
+    }
+    if (args[0] == Py_None) {
+        application_name = NULL;
+    }
+    else if (PyUnicode_Check(args[0])) {
+        application_name = PyUnicode_AsWideCharString(args[0], NULL);
+        if (application_name == NULL) {
+            goto exit;
+        }
+    }
+    else {
+        _PyArg_BadArgument("CreateProcess", "argument 1", "str or None", args[0]);
+        goto exit;
+    }
+    command_line = args[1];
+    proc_attrs = args[2];
+    thread_attrs = args[3];
+    inherit_handles = PyLong_AsInt(args[4]);
+    if (inherit_handles == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[5])) {
+        _PyArg_BadArgument("CreateProcess", "argument 6", "int", args[5]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[5], &creation_flags, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    env_mapping = args[6];
+    if (args[7] == Py_None) {
+        current_directory = NULL;
+    }
+    else if (PyUnicode_Check(args[7])) {
+        current_directory = PyUnicode_AsWideCharString(args[7], NULL);
+        if (current_directory == NULL) {
+            goto exit;
+        }
+    }
+    else {
+        _PyArg_BadArgument("CreateProcess", "argument 8", "str or None", args[7]);
         goto exit;
     }
+    startup_info = args[8];
     return_value = _winapi_CreateProcess_impl(module, application_name, command_line, proc_attrs, thread_attrs, inherit_handles, creation_flags, env_mapping, current_directory, startup_info);
 
 exit:
@@ -617,10 +707,69 @@ _winapi_DuplicateHandle(PyObject *module, PyObject *const *args, Py_ssize_t narg
     DWORD options = 0;
     HANDLE _return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "" F_HANDLE "" F_HANDLE "ki|k:DuplicateHandle",
-        &source_process_handle, &source_handle, &target_process_handle, &desired_access, &inherit_handle, &options)) {
+    if (!_PyArg_CheckPositional("DuplicateHandle", nargs, 5, 6)) {
+        goto exit;
+    }
+    source_process_handle = PyLong_AsVoidPtr(args[0]);
+    if (!source_process_handle && PyErr_Occurred()) {
+        goto exit;
+    }
+    source_handle = PyLong_AsVoidPtr(args[1]);
+    if (!source_handle && PyErr_Occurred()) {
+        goto exit;
+    }
+    target_process_handle = PyLong_AsVoidPtr(args[2]);
+    if (!target_process_handle && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[3])) {
+        _PyArg_BadArgument("DuplicateHandle", "argument 4", "int", args[3]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[3], &desired_access, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    inherit_handle = PyLong_AsInt(args[4]);
+    if (inherit_handle == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (nargs < 6) {
+        goto skip_optional;
+    }
+    if (!PyIndex_Check(args[5])) {
+        _PyArg_BadArgument("DuplicateHandle", "argument 6", "int", args[5]);
         goto exit;
     }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[5], &options, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+skip_optional:
     _return_value = _winapi_DuplicateHandle_impl(module, source_process_handle, source_handle, target_process_handle, desired_access, inherit_handle, options);
     if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
         goto exit;
@@ -710,7 +859,8 @@ _winapi_GetExitCodeProcess(PyObject *module, PyObject *arg)
     HANDLE process;
     DWORD _return_value;
 
-    if (!PyArg_Parse(arg, "" F_HANDLE ":GetExitCodeProcess", &process)) {
+    process = PyLong_AsVoidPtr(arg);
+    if (!process && PyErr_Occurred()) {
         goto exit;
     }
     _return_value = _winapi_GetExitCodeProcess_impl(module, process);
@@ -958,9 +1108,26 @@ _winapi_GetStdHandle(PyObject *module, PyObject *arg)
     DWORD std_handle;
     HANDLE _return_value;
 
-    if (!PyArg_Parse(arg, "k:GetStdHandle", &std_handle)) {
+    if (!PyIndex_Check(arg)) {
+        _PyArg_BadArgument("GetStdHandle", "argument", "int", arg);
         goto exit;
     }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(arg, &std_handle, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
     _return_value = _winapi_GetStdHandle_impl(module, std_handle);
     if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
         goto exit;
@@ -1027,8 +1194,74 @@ _winapi_MapViewOfFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     size_t number_bytes;
     LPVOID _return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "kkkO&:MapViewOfFile",
-        &file_map, &desired_access, &file_offset_high, &file_offset_low, _PyLong_Size_t_Converter, &number_bytes)) {
+    if (!_PyArg_CheckPositional("MapViewOfFile", nargs, 5, 5)) {
+        goto exit;
+    }
+    file_map = PyLong_AsVoidPtr(args[0]);
+    if (!file_map && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[1])) {
+        _PyArg_BadArgument("MapViewOfFile", "argument 2", "int", args[1]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[1], &desired_access, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    if (!PyIndex_Check(args[2])) {
+        _PyArg_BadArgument("MapViewOfFile", "argument 3", "int", args[2]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[2], &file_offset_high, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    if (!PyIndex_Check(args[3])) {
+        _PyArg_BadArgument("MapViewOfFile", "argument 4", "int", args[3]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[3], &file_offset_low, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    if (!_PyLong_Size_t_Converter(args[4], &number_bytes)) {
         goto exit;
     }
     _return_value = _winapi_MapViewOfFile_impl(module, file_map, desired_access, file_offset_high, file_offset_low, number_bytes);
@@ -1106,17 +1339,51 @@ _winapi_OpenEventW(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py
     static const char * const _keywords[] = {"desired_access", "inherit_handle", "name", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "kiO&:OpenEventW",
+        .fname = "OpenEventW",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[3];
     DWORD desired_access;
     BOOL inherit_handle;
     LPCWSTR name = NULL;
     HANDLE _return_value;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &desired_access, &inherit_handle, _PyUnicode_WideCharString_Converter, &name)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 3, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[0])) {
+        _PyArg_BadArgument("OpenEventW", "argument 'desired_access'", "int", args[0]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[0], &desired_access, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    inherit_handle = PyLong_AsInt(args[1]);
+    if (inherit_handle == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[2])) {
+        _PyArg_BadArgument("OpenEventW", "argument 'name'", "str", args[2]);
+        goto exit;
+    }
+    name = PyUnicode_AsWideCharString(args[2], NULL);
+    if (name == NULL) {
         goto exit;
     }
     _return_value = _winapi_OpenEventW_impl(module, desired_access, inherit_handle, name);
@@ -1174,17 +1441,51 @@ _winapi_OpenMutexW(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py
     static const char * const _keywords[] = {"desired_access", "inherit_handle", "name", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "kiO&:OpenMutexW",
+        .fname = "OpenMutexW",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[3];
     DWORD desired_access;
     BOOL inherit_handle;
     LPCWSTR name = NULL;
     HANDLE _return_value;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &desired_access, &inherit_handle, _PyUnicode_WideCharString_Converter, &name)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 3, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[0])) {
+        _PyArg_BadArgument("OpenMutexW", "argument 'desired_access'", "int", args[0]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[0], &desired_access, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    inherit_handle = PyLong_AsInt(args[1]);
+    if (inherit_handle == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[2])) {
+        _PyArg_BadArgument("OpenMutexW", "argument 'name'", "str", args[2]);
+        goto exit;
+    }
+    name = PyUnicode_AsWideCharString(args[2], NULL);
+    if (name == NULL) {
         goto exit;
     }
     _return_value = _winapi_OpenMutexW_impl(module, desired_access, inherit_handle, name);
@@ -1224,8 +1525,39 @@ _winapi_OpenFileMapping(PyObject *module, PyObject *const *args, Py_ssize_t narg
     LPCWSTR name = NULL;
     HANDLE _return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, "kiO&:OpenFileMapping",
-        &desired_access, &inherit_handle, _PyUnicode_WideCharString_Converter, &name)) {
+    if (!_PyArg_CheckPositional("OpenFileMapping", nargs, 3, 3)) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[0])) {
+        _PyArg_BadArgument("OpenFileMapping", "argument 1", "int", args[0]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[0], &desired_access, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    inherit_handle = PyLong_AsInt(args[1]);
+    if (inherit_handle == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[2])) {
+        _PyArg_BadArgument("OpenFileMapping", "argument 3", "str", args[2]);
+        goto exit;
+    }
+    name = PyUnicode_AsWideCharString(args[2], NULL);
+    if (name == NULL) {
         goto exit;
     }
     _return_value = _winapi_OpenFileMapping_impl(module, desired_access, inherit_handle, name);
@@ -1265,10 +1597,53 @@ _winapi_OpenProcess(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     DWORD process_id;
     HANDLE _return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, "kik:OpenProcess",
-        &desired_access, &inherit_handle, &process_id)) {
+    if (!_PyArg_CheckPositional("OpenProcess", nargs, 3, 3)) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[0])) {
+        _PyArg_BadArgument("OpenProcess", "argument 1", "int", args[0]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[0], &desired_access, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    inherit_handle = PyLong_AsInt(args[1]);
+    if (inherit_handle == -1 && PyErr_Occurred()) {
         goto exit;
     }
+    if (!PyIndex_Check(args[2])) {
+        _PyArg_BadArgument("OpenProcess", "argument 3", "int", args[2]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[2], &process_id, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
     _return_value = _winapi_OpenProcess_impl(module, desired_access, inherit_handle, process_id);
     if ((_return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) {
         goto exit;
@@ -1300,10 +1675,21 @@ _winapi_PeekNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     HANDLE handle;
     int size = 0;
 
-    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "|i:PeekNamedPipe",
-        &handle, &size)) {
+    if (!_PyArg_CheckPositional("PeekNamedPipe", nargs, 1, 2)) {
+        goto exit;
+    }
+    handle = PyLong_AsVoidPtr(args[0]);
+    if (!handle && PyErr_Occurred()) {
         goto exit;
     }
+    if (nargs < 2) {
+        goto skip_optional;
+    }
+    size = PyLong_AsInt(args[1]);
+    if (size == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+skip_optional:
     return_value = _winapi_PeekNamedPipe_impl(module, handle, size);
 
 exit:
@@ -1349,18 +1735,53 @@ _winapi_LCMapStringEx(PyObject *module, PyObject *const *args, Py_ssize_t nargs,
     static const char * const _keywords[] = {"locale", "flags", "src", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "O&kU:LCMapStringEx",
+        .fname = "LCMapStringEx",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[3];
     LPCWSTR locale = NULL;
     DWORD flags;
     PyObject *src;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        _PyUnicode_WideCharString_Converter, &locale, &flags, &src)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 3, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[0])) {
+        _PyArg_BadArgument("LCMapStringEx", "argument 'locale'", "str", args[0]);
+        goto exit;
+    }
+    locale = PyUnicode_AsWideCharString(args[0], NULL);
+    if (locale == NULL) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[1])) {
+        _PyArg_BadArgument("LCMapStringEx", "argument 'flags'", "int", args[1]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[1], &flags, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    if (!PyUnicode_Check(args[2])) {
+        _PyArg_BadArgument("LCMapStringEx", "argument 'src'", "str", args[2]);
         goto exit;
     }
+    src = args[2];
     return_value = _winapi_LCMapStringEx_impl(module, locale, flags, src);
 
 exit:
@@ -1409,18 +1830,53 @@ _winapi_ReadFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb
     static const char * const _keywords[] = {"handle", "size", "overlapped", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "" F_HANDLE "k|p:ReadFile",
+        .fname = "ReadFile",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[3];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
     HANDLE handle;
     DWORD size;
     int use_overlapped = 0;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &handle, &size, &use_overlapped)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 2, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    handle = PyLong_AsVoidPtr(args[0]);
+    if (!handle && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[1])) {
+        _PyArg_BadArgument("ReadFile", "argument 'size'", "int", args[1]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[1], &size, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    use_overlapped = PyObject_IsTrue(args[2]);
+    if (use_overlapped < 0) {
         goto exit;
     }
+skip_optional_pos:
     return_value = _winapi_ReadFile_impl(module, handle, size, use_overlapped);
 
 exit:
@@ -1465,14 +1921,20 @@ _winapi_ReleaseMutex(PyObject *module, PyObject *const *args, Py_ssize_t nargs,
     static const char * const _keywords[] = {"mutex", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "" F_HANDLE ":ReleaseMutex",
+        .fname = "ReleaseMutex",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[1];
     HANDLE mutex;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &mutex)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    mutex = PyLong_AsVoidPtr(args[0]);
+    if (!mutex && PyErr_Occurred()) {
         goto exit;
     }
     return_value = _winapi_ReleaseMutex_impl(module, mutex);
@@ -1519,14 +1981,20 @@ _winapi_ResetEvent(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py
     static const char * const _keywords[] = {"event", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "" F_HANDLE ":ResetEvent",
+        .fname = "ResetEvent",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[1];
     HANDLE event;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &event)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    event = PyLong_AsVoidPtr(args[0]);
+    if (!event && PyErr_Occurred()) {
         goto exit;
     }
     return_value = _winapi_ResetEvent_impl(module, event);
@@ -1573,14 +2041,20 @@ _winapi_SetEvent(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb
     static const char * const _keywords[] = {"event", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "" F_HANDLE ":SetEvent",
+        .fname = "SetEvent",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[1];
     HANDLE event;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &event)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    event = PyLong_AsVoidPtr(args[0]);
+    if (!event && PyErr_Occurred()) {
         goto exit;
     }
     return_value = _winapi_SetEvent_impl(module, event);
@@ -1613,10 +2087,16 @@ _winapi_SetNamedPipeHandleState(PyObject *module, PyObject *const *args, Py_ssiz
     PyObject *max_collection_count;
     PyObject *collect_data_timeout;
 
-    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "OOO:SetNamedPipeHandleState",
-        &named_pipe, &mode, &max_collection_count, &collect_data_timeout)) {
+    if (!_PyArg_CheckPositional("SetNamedPipeHandleState", nargs, 4, 4)) {
         goto exit;
     }
+    named_pipe = PyLong_AsVoidPtr(args[0]);
+    if (!named_pipe && PyErr_Occurred()) {
+        goto exit;
+    }
+    mode = args[1];
+    max_collection_count = args[2];
+    collect_data_timeout = args[3];
     return_value = _winapi_SetNamedPipeHandleState_impl(module, named_pipe, mode, max_collection_count, collect_data_timeout);
 
 exit:
@@ -1643,7 +2123,7 @@ _winapi_TerminateProcess(PyObject *module, PyObject *const *args, Py_ssize_t nar
     HANDLE handle;
     UINT exit_code;
 
-    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "I:TerminateProcess",
+    if (!_PyArg_ParseStack(args, nargs, ""_Py_PARSE_UINTPTR"I:TerminateProcess",
         &handle, &exit_code)) {
         goto exit;
     }
@@ -1702,10 +2182,37 @@ _winapi_WaitNamedPipe(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     LPCWSTR name = NULL;
     DWORD timeout;
 
-    if (!_PyArg_ParseStack(args, nargs, "O&k:WaitNamedPipe",
-        _PyUnicode_WideCharString_Converter, &name, &timeout)) {
+    if (!_PyArg_CheckPositional("WaitNamedPipe", nargs, 2, 2)) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[0])) {
+        _PyArg_BadArgument("WaitNamedPipe", "argument 1", "str", args[0]);
+        goto exit;
+    }
+    name = PyUnicode_AsWideCharString(args[0], NULL);
+    if (name == NULL) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[1])) {
+        _PyArg_BadArgument("WaitNamedPipe", "argument 2", "int", args[1]);
         goto exit;
     }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[1], &timeout, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
     return_value = _winapi_WaitNamedPipe_impl(module, name, timeout);
 
 exit:
@@ -1770,18 +2277,50 @@ _winapi_BatchedWaitForMultipleObjects(PyObject *module, PyObject *const *args, P
     static const char * const _keywords[] = {"handle_seq", "wait_all", "milliseconds", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "Oi|k:BatchedWaitForMultipleObjects",
+        .fname = "BatchedWaitForMultipleObjects",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[3];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
     PyObject *handle_seq;
     BOOL wait_all;
     DWORD milliseconds = INFINITE;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &handle_seq, &wait_all, &milliseconds)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 2, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    handle_seq = args[0];
+    wait_all = PyLong_AsInt(args[1]);
+    if (wait_all == -1 && PyErr_Occurred()) {
         goto exit;
     }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    if (!PyIndex_Check(args[2])) {
+        _PyArg_BadArgument("BatchedWaitForMultipleObjects", "argument 'milliseconds'", "int", args[2]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[2], &milliseconds, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+skip_optional_pos:
     return_value = _winapi_BatchedWaitForMultipleObjects_impl(module, handle_seq, wait_all, milliseconds);
 
 exit:
@@ -1809,10 +2348,38 @@ _winapi_WaitForMultipleObjects(PyObject *module, PyObject *const *args, Py_ssize
     BOOL wait_flag;
     DWORD milliseconds = INFINITE;
 
-    if (!_PyArg_ParseStack(args, nargs, "Oi|k:WaitForMultipleObjects",
-        &handle_seq, &wait_flag, &milliseconds)) {
+    if (!_PyArg_CheckPositional("WaitForMultipleObjects", nargs, 2, 3)) {
+        goto exit;
+    }
+    handle_seq = args[0];
+    wait_flag = PyLong_AsInt(args[1]);
+    if (wait_flag == -1 && PyErr_Occurred()) {
         goto exit;
     }
+    if (nargs < 3) {
+        goto skip_optional;
+    }
+    if (!PyIndex_Check(args[2])) {
+        _PyArg_BadArgument("WaitForMultipleObjects", "argument 3", "int", args[2]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[2], &milliseconds, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+skip_optional:
     return_value = _winapi_WaitForMultipleObjects_impl(module, handle_seq, wait_flag, milliseconds);
 
 exit:
@@ -1844,10 +2411,33 @@ _winapi_WaitForSingleObject(PyObject *module, PyObject *const *args, Py_ssize_t
     DWORD milliseconds;
     long _return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "k:WaitForSingleObject",
-        &handle, &milliseconds)) {
+    if (!_PyArg_CheckPositional("WaitForSingleObject", nargs, 2, 2)) {
+        goto exit;
+    }
+    handle = PyLong_AsVoidPtr(args[0]);
+    if (!handle && PyErr_Occurred()) {
         goto exit;
     }
+    if (!PyIndex_Check(args[1])) {
+        _PyArg_BadArgument("WaitForSingleObject", "argument 2", "int", args[1]);
+        goto exit;
+    }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[1], &milliseconds, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
     _return_value = _winapi_WaitForSingleObject_impl(module, handle, milliseconds);
     if ((_return_value == -1) && PyErr_Occurred()) {
         goto exit;
@@ -1897,18 +2487,34 @@ _winapi_WriteFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyO
     static const char * const _keywords[] = {"handle", "buffer", "overlapped", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "" F_HANDLE "O|p:WriteFile",
+        .fname = "WriteFile",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[3];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
     HANDLE handle;
     PyObject *buffer;
     int use_overlapped = 0;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &handle, &buffer, &use_overlapped)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 2, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
         goto exit;
     }
+    handle = PyLong_AsVoidPtr(args[0]);
+    if (!handle && PyErr_Occurred()) {
+        goto exit;
+    }
+    buffer = args[1];
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    use_overlapped = PyObject_IsTrue(args[2]);
+    if (use_overlapped < 0) {
+        goto exit;
+    }
+skip_optional_pos:
     return_value = _winapi_WriteFile_impl(module, handle, buffer, use_overlapped);
 
 exit:
@@ -1989,15 +2595,21 @@ _winapi_GetFileType(PyObject *module, PyObject *const *args, Py_ssize_t nargs, P
     static const char * const _keywords[] = {"handle", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "" F_HANDLE ":GetFileType",
+        .fname = "GetFileType",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[1];
     HANDLE handle;
     DWORD _return_value;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        &handle)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    handle = PyLong_AsVoidPtr(args[0]);
+    if (!handle && PyErr_Occurred()) {
         goto exit;
     }
     _return_value = _winapi_GetFileType_impl(module, handle);
@@ -2160,19 +2772,63 @@ _winapi_CopyFile2(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyO
     static const char * const _keywords[] = {"existing_file_name", "new_file_name", "flags", "progress_routine", NULL};
     static _PyArg_Parser _parser = {
         .keywords = _keywords,
-        .format = "O&O&k|O:CopyFile2",
+        .fname = "CopyFile2",
         .kwtuple = KWTUPLE,
     };
     #undef KWTUPLE
+    PyObject *argsbuf[4];
+    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
     LPCWSTR existing_file_name = NULL;
     LPCWSTR new_file_name = NULL;
     DWORD flags;
     PyObject *progress_routine = Py_None;
 
-    if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
-        _PyUnicode_WideCharString_Converter, &existing_file_name, _PyUnicode_WideCharString_Converter, &new_file_name, &flags, &progress_routine)) {
+    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
+            /*minpos*/ 3, /*maxpos*/ 4, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
+    if (!args) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[0])) {
+        _PyArg_BadArgument("CopyFile2", "argument 'existing_file_name'", "str", args[0]);
+        goto exit;
+    }
+    existing_file_name = PyUnicode_AsWideCharString(args[0], NULL);
+    if (existing_file_name == NULL) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[1])) {
+        _PyArg_BadArgument("CopyFile2", "argument 'new_file_name'", "str", args[1]);
+        goto exit;
+    }
+    new_file_name = PyUnicode_AsWideCharString(args[1], NULL);
+    if (new_file_name == NULL) {
+        goto exit;
+    }
+    if (!PyIndex_Check(args[2])) {
+        _PyArg_BadArgument("CopyFile2", "argument 'flags'", "int", args[2]);
         goto exit;
     }
+    {
+        Py_ssize_t _bytes = PyLong_AsNativeBytes(args[2], &flags, sizeof(DWORD),
+                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
+                Py_ASNATIVEBYTES_ALLOW_INDEX |
+                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
+        if (_bytes < 0) {
+            goto exit;
+        }
+        if ((size_t)_bytes > sizeof(DWORD)) {
+            if (PyErr_WarnEx(PyExc_DeprecationWarning,
+                "integer value out of range", 1) < 0)
+            {
+                goto exit;
+            }
+        }
+    }
+    if (!noptargs) {
+        goto skip_optional_pos;
+    }
+    progress_routine = args[3];
+skip_optional_pos:
     return_value = _winapi_CopyFile2_impl(module, existing_file_name, new_file_name, flags, progress_routine);
 
 exit:
@@ -2274,7 +2930,8 @@ _winapi_DeregisterEventSource(PyObject *module, PyObject *arg)
     PyObject *return_value = NULL;
     HANDLE handle;
 
-    if (!PyArg_Parse(arg, "" F_HANDLE ":DeregisterEventSource", &handle)) {
+    handle = PyLong_AsVoidPtr(arg);
+    if (!handle && PyErr_Occurred()) {
         goto exit;
     }
     return_value = _winapi_DeregisterEventSource_impl(module, handle);
@@ -2318,8 +2975,28 @@ _winapi_ReportEvent(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     unsigned int event_id;
     LPCWSTR string = NULL;
 
-    if (!_PyArg_ParseStack(args, nargs, "" F_HANDLE "O&O&O&O&:ReportEvent",
-        &handle, _PyLong_UnsignedShort_Converter, &type, _PyLong_UnsignedShort_Converter, &category, _PyLong_UnsignedInt_Converter, &event_id, _PyUnicode_WideCharString_Converter, &string)) {
+    if (!_PyArg_CheckPositional("ReportEvent", nargs, 5, 5)) {
+        goto exit;
+    }
+    handle = PyLong_AsVoidPtr(args[0]);
+    if (!handle && PyErr_Occurred()) {
+        goto exit;
+    }
+    if (!_PyLong_UnsignedShort_Converter(args[1], &type)) {
+        goto exit;
+    }
+    if (!_PyLong_UnsignedShort_Converter(args[2], &category)) {
+        goto exit;
+    }
+    if (!_PyLong_UnsignedInt_Converter(args[3], &event_id)) {
+        goto exit;
+    }
+    if (!PyUnicode_Check(args[4])) {
+        _PyArg_BadArgument("ReportEvent", "argument 5", "str", args[4]);
+        goto exit;
+    }
+    string = PyUnicode_AsWideCharString(args[4], NULL);
+    if (string == NULL) {
         goto exit;
     }
     return_value = _winapi_ReportEvent_impl(module, handle, type, category, event_id, string);
@@ -2349,7 +3026,8 @@ _winapi_GetProcessMemoryInfo(PyObject *module, PyObject *arg)
     PyObject *return_value = NULL;
     HANDLE handle;
 
-    if (!PyArg_Parse(arg, "" F_HANDLE ":GetProcessMemoryInfo", &handle)) {
+    handle = PyLong_AsVoidPtr(arg);
+    if (!handle && PyErr_Occurred()) {
         goto exit;
     }
     return_value = _winapi_GetProcessMemoryInfo_impl(module, handle);
@@ -2379,4 +3057,4 @@ _winapi_GetTickCount64(PyObject *module, PyObject *Py_UNUSED(ignored))
 #ifndef _WINAPI_GETSHORTPATHNAME_METHODDEF
     #define _WINAPI_GETSHORTPATHNAME_METHODDEF
 #endif /* !defined(_WINAPI_GETSHORTPATHNAME_METHODDEF) */
-/*[clinic end generated code: output=713a8ce97185b017 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=8173751196d44211 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h
index c9307a1c44d315c..6278eb81481402d 100644
--- a/Modules/clinic/posixmodule.c.h
+++ b/Modules/clinic/posixmodule.c.h
@@ -7,6 +7,7 @@ preserve
 #  include "pycore_runtime.h"     // _Py_ID()
 #endif
 #include "pycore_abstract.h"      // _PyNumber_Index()
+#include "pycore_fileutils.h"     // _Py_Off_t_Converter()
 #include "pycore_long.h"          // _PyLong_UnsignedInt_Converter()
 #include "pycore_modsupport.h"    // _PyArg_UnpackKeywords()
 
@@ -7761,7 +7762,7 @@ os_lockf(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     if (command == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[2], &length)) {
+    if (!_Py_Off_t_Converter(args[2], &length)) {
         goto exit;
     }
     return_value = os_lockf_impl(module, fd, command, length);
@@ -7813,7 +7814,7 @@ os_lseek(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     if (fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[1], &position)) {
+    if (!_Py_Off_t_Converter(args[1], &position)) {
         goto exit;
     }
     how = PyLong_AsInt(args[2]);
@@ -8024,7 +8025,7 @@ os_pread(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
         }
         length = ival;
     }
-    if (!Py_off_t_converter(args[2], &offset)) {
+    if (!_Py_Off_t_Converter(args[2], &offset)) {
         goto exit;
     }
     return_value = os_pread_impl(module, fd, length, offset);
@@ -8084,7 +8085,7 @@ os_preadv(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
         goto exit;
     }
     buffers = args[1];
-    if (!Py_off_t_converter(args[2], &offset)) {
+    if (!_Py_Off_t_Converter(args[2], &offset)) {
         goto exit;
     }
     if (nargs < 4) {
@@ -8223,10 +8224,10 @@ os_sendfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject
     if (in_fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[2], &offset)) {
+    if (!_Py_Off_t_Converter(args[2], &offset)) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[3], &sbytes)) {
+    if (!_Py_Off_t_Converter(args[3], &sbytes)) {
         goto exit;
     }
     if (!noptargs) {
@@ -8328,7 +8329,7 @@ os_sendfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject
     if (in_fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[2], &offset)) {
+    if (!_Py_Off_t_Converter(args[2], &offset)) {
         goto exit;
     }
     {
@@ -8757,7 +8758,7 @@ os_pwrite(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     if (PyObject_GetBuffer(args[1], &buffer, PyBUF_SIMPLE) != 0) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[2], &offset)) {
+    if (!_Py_Off_t_Converter(args[2], &offset)) {
         goto exit;
     }
     _return_value = os_pwrite_impl(module, fd, &buffer, offset);
@@ -8830,7 +8831,7 @@ os_pwritev(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
         goto exit;
     }
     buffers = args[1];
-    if (!Py_off_t_converter(args[2], &offset)) {
+    if (!_Py_Off_t_Converter(args[2], &offset)) {
         goto exit;
     }
     if (nargs < 4) {
@@ -9444,7 +9445,7 @@ os_ftruncate(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     if (fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[1], &length)) {
+    if (!_Py_Off_t_Converter(args[1], &length)) {
         goto exit;
     }
     return_value = os_ftruncate_impl(module, fd, length);
@@ -9516,7 +9517,7 @@ os_truncate(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject
     if (!path_converter(args[0], &path)) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[1], &length)) {
+    if (!_Py_Off_t_Converter(args[1], &length)) {
         goto exit;
     }
     return_value = os_truncate_impl(module, &path, length);
@@ -9564,10 +9565,10 @@ os_posix_fallocate(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     if (fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[1], &offset)) {
+    if (!_Py_Off_t_Converter(args[1], &offset)) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[2], &length)) {
+    if (!_Py_Off_t_Converter(args[2], &length)) {
         goto exit;
     }
     return_value = os_posix_fallocate_impl(module, fd, offset, length);
@@ -9617,10 +9618,10 @@ os_posix_fadvise(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     if (fd == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[1], &offset)) {
+    if (!_Py_Off_t_Converter(args[1], &offset)) {
         goto exit;
     }
-    if (!Py_off_t_converter(args[2], &length)) {
+    if (!_Py_Off_t_Converter(args[2], &length)) {
         goto exit;
     }
     advice = PyLong_AsInt(args[3]);
@@ -13746,4 +13747,4 @@ os__emscripten_log(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py
 #ifndef OS__EMSCRIPTEN_LOG_METHODDEF
     #define OS__EMSCRIPTEN_LOG_METHODDEF
 #endif /* !defined(OS__EMSCRIPTEN_LOG_METHODDEF) */
-/*[clinic end generated code: output=f77ed566165d51da input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a5bea01c02d27152 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/resource.c.h b/Modules/clinic/resource.c.h
index e4ef93900d17978..173e3f977721c27 100644
--- a/Modules/clinic/resource.c.h
+++ b/Modules/clinic/resource.c.h
@@ -120,7 +120,7 @@ resource_prlimit(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
         goto exit;
     }
     pid = PyLong_AsPid(args[0]);
-    if (pid == -1 && PyErr_Occurred()) {
+    if (pid == (pid_t)(-1) && PyErr_Occurred()) {
         goto exit;
     }
     resource = PyLong_AsInt(args[1]);
@@ -174,4 +174,4 @@ resource_getpagesize(PyObject *module, PyObject *Py_UNUSED(ignored))
 #ifndef RESOURCE_PRLIMIT_METHODDEF
     #define RESOURCE_PRLIMIT_METHODDEF
 #endif /* !defined(RESOURCE_PRLIMIT_METHODDEF) */
-/*[clinic end generated code: output=8e905b2f5c35170e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=4044ef9ffbf7278b input=a9049054013a1b77]*/
diff --git a/Modules/overlapped.c b/Modules/overlapped.c
index 255576cc057cdd4..646cb66605295e7 100644
--- a/Modules/overlapped.c
+++ b/Modules/overlapped.c
@@ -51,9 +51,6 @@ class pointer_converter(CConverter):
 class OVERLAPPED_converter(pointer_converter):
     type = 'OVERLAPPED *'
 
-class HANDLE_converter(pointer_converter):
-    type = 'HANDLE'
-
 class ULONG_PTR_converter(pointer_converter):
     type = 'ULONG_PTR'
 
@@ -66,13 +63,8 @@ class ULONG_PTR_converter(pointer_converter):
             """,
             argname=argname)
 
-class DWORD_converter(unsigned_long_converter):
-    type = 'DWORD'
-
-class BOOL_converter(int_converter):
-    type = 'BOOL'
 [python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=436f4440630a304c]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=e3b1c126cba99725]*/
 
 /*[clinic input]
 module _overlapped
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index bec305a4042c49d..a9375e48a11d899 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1702,25 +1702,6 @@ idtype_t_converter(PyObject *arg, void *addr)
 }
 #endif
 
-#ifdef MS_WINDOWS
-    typedef long long Py_off_t;
-#else
-    typedef off_t Py_off_t;
-#endif
-
-static int
-Py_off_t_converter(PyObject *arg, void *addr)
-{
-#ifdef HAVE_LARGEFILE_SUPPORT
-    *((Py_off_t *)addr) = PyLong_AsLongLong(arg);
-#else
-    *((Py_off_t *)addr) = PyLong_AsLong(arg);
-#endif
-    if (PyErr_Occurred())
-        return 0;
-    return 1;
-}
-
 static PyObject *
 PyLong_FromPy_off_t(Py_off_t offset)
 {
@@ -3221,18 +3202,6 @@ class dev_t_return_converter(unsigned_long_return_converter):
     conversion_fn = '_PyLong_FromDev'
     unsigned_cast = '(dev_t)'
 
-class pid_t_converter(CConverter):
-    type = 'pid_t'
-    format_unit = '" _Py_PARSE_PID "'
-
-    def parse_arg(self, argname, displayname, *, limited_capi):
-        return self.format_code("""
-            {paramname} = PyLong_AsPid({argname});
-            if ({paramname} == (pid_t)(-1) && PyErr_Occurred()) {{{{
-                goto exit;
-            }}}}
-            """, argname=argname)
-
 class idtype_t_converter(CConverter):
     type = 'idtype_t'
     converter = 'idtype_t_converter'
@@ -3261,10 +3230,6 @@ class intptr_t_converter(CConverter):
             }}}}
             """, argname=argname)
 
-class Py_off_t_converter(CConverter):
-    type = 'Py_off_t'
-    converter = 'Py_off_t_converter'
-
 class Py_off_t_return_converter(long_return_converter):
     type = 'Py_off_t'
     conversion_fn = 'PyLong_FromPy_off_t'
@@ -3284,7 +3249,7 @@ class confname_converter(CConverter):
         """, argname=argname, converter=self.converter, table=self.table)
 
 [python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=ddbf3ac90a981122]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=e459765bdf453ebf]*/
 
 /*[clinic input]
 
@@ -12642,7 +12607,7 @@ os_sendfile_impl(PyObject *module, int out_fd, int in_fd, PyObject *offobj,
     }
 #endif
     off_t offset;
-    if (!Py_off_t_converter(offobj, &offset))
+    if (!_Py_Off_t_Converter(offobj, &offset))
         return NULL;
 
 #if defined(__sun) && defined(__SVR4)
@@ -13176,14 +13141,14 @@ os_copy_file_range_impl(PyObject *module, int src, int dst, Py_ssize_t count,
 
 
     if (offset_src != Py_None) {
-        if (!Py_off_t_converter(offset_src, &offset_src_val)) {
+        if (!_Py_Off_t_Converter(offset_src, &offset_src_val)) {
             return NULL;
         }
         p_offset_src = &offset_src_val;
     }
 
     if (offset_dst != Py_None) {
-        if (!Py_off_t_converter(offset_dst, &offset_dst_val)) {
+        if (!_Py_Off_t_Converter(offset_dst, &offset_dst_val)) {
             return NULL;
         }
         p_offset_dst = &offset_dst_val;
@@ -13247,14 +13212,14 @@ os_splice_impl(PyObject *module, int src, int dst, Py_ssize_t count,
 
 
     if (offset_src != Py_None) {
-        if (!Py_off_t_converter(offset_src, &offset_src_val)) {
+        if (!_Py_Off_t_Converter(offset_src, &offset_src_val)) {
             return NULL;
         }
         p_offset_src = &offset_src_val;
     }
 
     if (offset_dst != Py_None) {
-        if (!Py_off_t_converter(offset_dst, &offset_dst_val)) {
+        if (!_Py_Off_t_Converter(offset_dst, &offset_dst_val)) {
             return NULL;
         }
         p_offset_dst = &offset_dst_val;
diff --git a/Modules/resource.c b/Modules/resource.c
index 9bf8d2782766ccb..614b05769869a1e 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -22,22 +22,6 @@ module resource
 [clinic start generated code]*/
 /*[clinic end generated code: output=da39a3ee5e6b4b0d input=e89d38ed52609d7c]*/
 
-/*[python input]
-class pid_t_converter(CConverter):
-    type = 'pid_t'
-    format_unit = '" _Py_PARSE_PID "'
-
-    def parse_arg(self, argname, displayname, *, limited_capi):
-        return self.format_code("""
-            {paramname} = PyLong_AsPid({argname});
-            if ({paramname} == -1 && PyErr_Occurred()) {{{{
-                goto exit;
-            }}}}
-            """,
-            argname=argname)
-[python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=c94349aa1aad151d]*/
-
 #include "clinic/resource.c.h"
 
 PyDoc_STRVAR(struct_rusage__doc__,
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 05c3e75b4642ee5..d5cdea1410b46aa 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -216,6 +216,17 @@ PyObject_AsFileDescriptor(PyObject *o)
     return fd;
 }
 
+int
+_Py_Off_t_Converter(PyObject *arg, void *addr)
+{
+#ifdef HAVE_LARGEFILE_SUPPORT
+    *((Py_off_t *)addr) = PyLong_AsLongLong(arg);
+#else
+    *((Py_off_t *)addr) = PyLong_AsLong(arg);
+#endif
+    return PyErr_Occurred() ? 0 : 1;
+}
+
 int
 _PyLong_FileDescriptor_Converter(PyObject *o, void *ptr)
 {
diff --git a/PC/_testconsole.c b/PC/_testconsole.c
index 2538ae3ceba643d..76a4033bbbb1381 100644
--- a/PC/_testconsole.c
+++ b/PC/_testconsole.c
@@ -35,21 +35,6 @@ PyModuleDef_Slot testconsole_slots[] = {
     {0, NULL},
 };
 
-/*[python input]
-class HANDLE_converter(CConverter):
-    type = 'void *'
-    format_unit = '"_Py_PARSE_UINTPTR"'
-
-    def parse_arg(self, argname, displayname, *, limited_capi):
-        return self.format_code("""
-            {paramname} = PyLong_AsVoidPtr({argname});
-            if (!{paramname} && PyErr_Occurred()) {{{{
-                goto exit;
-            }}}}
-            """,
-            argname=argname)
-[python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=380aa5c91076742b]*/
 /*[python end generated code:]*/
 
 /*[clinic input]
diff --git a/PC/clinic/msvcrtmodule.c.h b/PC/clinic/msvcrtmodule.c.h
index 647aadfa46bbed4..7a43daa987b2066 100644
--- a/PC/clinic/msvcrtmodule.c.h
+++ b/PC/clinic/msvcrtmodule.c.h
@@ -133,13 +133,13 @@ PyDoc_STRVAR(msvcrt_open_osfhandle__doc__,
     {"open_osfhandle", _PyCFunction_CAST(msvcrt_open_osfhandle), METH_FASTCALL, msvcrt_open_osfhandle__doc__},
 
 static long
-msvcrt_open_osfhandle_impl(PyObject *module, void *handle, int flags);
+msvcrt_open_osfhandle_impl(PyObject *module, HANDLE handle, int flags);
 
 static PyObject *
 msvcrt_open_osfhandle(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 {
     PyObject *return_value = NULL;
-    void *handle;
+    HANDLE handle;
     int flags;
     long _return_value;
 
@@ -531,14 +531,14 @@ PyDoc_STRVAR(msvcrt_CrtSetReportFile__doc__,
     {"CrtSetReportFile", _PyCFunction_CAST(msvcrt_CrtSetReportFile), METH_FASTCALL, msvcrt_CrtSetReportFile__doc__},
 
 static void *
-msvcrt_CrtSetReportFile_impl(PyObject *module, int type, void *file);
+msvcrt_CrtSetReportFile_impl(PyObject *module, int type, HANDLE file);
 
 static PyObject *
 msvcrt_CrtSetReportFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
 {
     PyObject *return_value = NULL;
     int type;
-    void *file;
+    HANDLE file;
     void *_return_value;
 
     if (!_PyArg_CheckPositional("CrtSetReportFile", nargs, 2, 2)) {
@@ -743,4 +743,4 @@ msvcrt_SetErrorMode(PyObject *module, PyObject *arg)
 #ifndef MSVCRT_GETERRORMODE_METHODDEF
     #define MSVCRT_GETERRORMODE_METHODDEF
 #endif /* !defined(MSVCRT_GETERRORMODE_METHODDEF) */
-/*[clinic end generated code: output=f67eaf745685429d input=a9049054013a1b77]*/
+/*[clinic end generated code: output=58c1771c8b9a209b input=a9049054013a1b77]*/
diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c
index 26d7547c387f5f8..868650dd31d9a1b 100644
--- a/PC/msvcrtmodule.c
+++ b/PC/msvcrtmodule.c
@@ -34,19 +34,6 @@
 #endif
 
 /*[python input]
-class HANDLE_converter(CConverter):
-    type = 'void *'
-    format_unit = '"_Py_PARSE_UINTPTR"'
-
-    def parse_arg(self, argname, displayname, *, limited_capi):
-        return self.format_code("""
-            {paramname} = PyLong_AsVoidPtr({argname});
-            if (!{paramname} && PyErr_Occurred()) {{{{
-                goto exit;
-            }}}}
-            """,
-            argname=argname)
-
 class HANDLE_return_converter(CReturnConverter):
     type = 'void *'
 
@@ -76,7 +63,7 @@ class wchar_t_return_converter(CReturnConverter):
             f'{data.parser_retval} = '
             f'PyUnicode_FromOrdinal({data.converter_retval});\n')
 [python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=ed7a4a045a6d0496]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=f61ae699a69482ba]*/
 
 /*[clinic input]
 module msvcrt
@@ -185,8 +172,8 @@ to os.fdopen() to create a file object.
 [clinic start generated code]*/
 
 static long
-msvcrt_open_osfhandle_impl(PyObject *module, void *handle, int flags)
-/*[clinic end generated code: output=b2fb97c4b515e4e6 input=d5db190a307cf4bb]*/
+msvcrt_open_osfhandle_impl(PyObject *module, HANDLE handle, int flags)
+/*[clinic end generated code: output=646759b9fd02ca7b input=d5db190a307cf4bb]*/
 {
     if (PySys_Audit("msvcrt.open_osfhandle", "Ki", handle, flags) < 0) {
         return -1;
@@ -460,8 +447,8 @@ Only available on Debug builds.
 [clinic start generated code]*/
 
 static void *
-msvcrt_CrtSetReportFile_impl(PyObject *module, int type, void *file)
-/*[clinic end generated code: output=9393e8c77088bbe9 input=290809b5f19e65b9]*/
+msvcrt_CrtSetReportFile_impl(PyObject *module, int type, HANDLE file)
+/*[clinic end generated code: output=55858e446d583c5f input=290809b5f19e65b9]*/
 {
     HANDLE res;
 
diff --git a/PC/winreg.c b/PC/winreg.c
index 26bcd259efd9879..1fe5020419c3dac 100644
--- a/PC/winreg.c
+++ b/PC/winreg.c
@@ -238,9 +238,6 @@ class winreg.HKEYType "PyHKEYObject *" "&PyHKEY_Type"
 class REGSAM_converter(int_converter):
     type = 'REGSAM'
 
-class DWORD_converter(unsigned_long_converter):
-    type = 'DWORD'
-
 class HKEY_converter(CConverter):
     type = 'HKEY'
     converter = 'clinic_HKEY_converter'
@@ -265,7 +262,7 @@ class HKEY_return_converter(CReturnConverter):
         data.return_conversion.append(
             'return_value = PyHKEY_FromHKEY(_PyModule_GetState(module), _return_value);\n')
 [python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=b34c8217647f5fef]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=e345501438d93fa2]*/
 
 #include "clinic/winreg.c.h"
 
diff --git a/Tools/clinic/libclinic/converter.py b/Tools/clinic/libclinic/converter.py
index c10235237d4b716..29cbad4d5a84c42 100644
--- a/Tools/clinic/libclinic/converter.py
+++ b/Tools/clinic/libclinic/converter.py
@@ -44,7 +44,10 @@ def add_default_legacy_c_converter(cls: CConverterClassT) -> CConverterClassT:
     # automatically add converter for default format unit
     # (but without stomping on the existing one if it's already
     # set, in case you subclass)
+    # A format unit which contains a quote is a C expression, not a legacy
+    # format unit which can be used as an annotation.
     if ((cls.format_unit not in ('O&', '')) and
+        ('"' not in cls.format_unit) and
         (cls.format_unit not in legacy_converters)):
         legacy_converters[cls.format_unit] = cls
     return cls
diff --git a/Tools/clinic/libclinic/converters.py b/Tools/clinic/libclinic/converters.py
index 5539bd2e12e35f5..c2ac6fd22d5bdc9 100644
--- a/Tools/clinic/libclinic/converters.py
+++ b/Tools/clinic/libclinic/converters.py
@@ -601,6 +601,50 @@ def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> st
             argname=argname)
 
 
+class pid_t_converter(CConverter):
+    type = 'pid_t'
+    format_unit = '" _Py_PARSE_PID "'
+
+    def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None:
+        return self.format_code("""
+            {paramname} = PyLong_AsPid({argname});
+            if ({paramname} == (pid_t)(-1) && PyErr_Occurred()) {{{{
+                goto exit;
+            }}}}
+            """,
+            argname=argname)
+
+
+class Py_off_t_converter(CConverter):
+    type = 'Py_off_t'
+    converter = '_Py_Off_t_Converter'
+
+    def use_converter(self) -> None:
+        self.add_include('pycore_fileutils.h', '_Py_Off_t_Converter()')
+
+
+class BOOL_converter(int_converter):
+    type = 'BOOL'
+
+
+class DWORD_converter(unsigned_long_converter):
+    type = 'DWORD'
+
+
+class HANDLE_converter(CConverter):
+    type = 'HANDLE'
+    format_unit = '"_Py_PARSE_UINTPTR"'
+
+    def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None:
+        return self.format_code("""
+            {paramname} = PyLong_AsVoidPtr({argname});
+            if (!{paramname} && PyErr_Occurred()) {{{{
+                goto exit;
+            }}}}
+            """,
+            argname=argname)
+
+
 class float_converter(CConverter):
     type = 'float'
     default_type = float

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.