diff --git a/Misc/NEWS.d/next/Windows/2026-07-04-18-57-47.gh-issue-152433.tO5k5t.rst b/Misc/NEWS.d/next/Windows/2026-07-04-18-57-47.gh-issue-152433.tO5k5t.rst new file mode 100644 index 00000000000000..fa814a5fb3bbc0 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2026-07-04-18-57-47.gh-issue-152433.tO5k5t.rst @@ -0,0 +1 @@ +Allow build :mod:`!_overlapped` module for Universal Windows Platform. diff --git a/Modules/overlapped.c b/Modules/overlapped.c index 255576cc057cdd..b7dea3802e4fbd 100644 --- a/Modules/overlapped.c +++ b/Modules/overlapped.c @@ -35,6 +35,10 @@ #define T_HANDLE T_POINTER +#ifndef HasOverlappedIoCompleted +#define HasOverlappedIoCompleted(lpOverlapped) (lpOverlapped)->Internal != STATUS_PENDING +#endif + /*[python input] class pointer_converter(CConverter): format_unit = '"F_POINTER"' @@ -359,6 +363,9 @@ _overlapped_RegisterWaitWithQueue_impl(PyObject *module, HANDLE Object, DWORD Milliseconds) /*[clinic end generated code: output=c2ace732e447fe45 input=2dd4efee44abe8ee]*/ { +#ifndef MS_WINDOWS_DESKTOP + return NULL; +#else HANDLE NewWaitObject; struct PostCallbackData data = {CompletionPort, Overlapped}, *pdata; @@ -381,6 +388,7 @@ _overlapped_RegisterWaitWithQueue_impl(PyObject *module, HANDLE Object, } return Py_BuildValue(F_HANDLE, NewWaitObject); +#endif } /*[clinic input] @@ -396,6 +404,9 @@ static PyObject * _overlapped_UnregisterWait_impl(PyObject *module, HANDLE WaitHandle) /*[clinic end generated code: output=ec90cd955a9a617d input=a56709544cb2df0f]*/ { +#ifndef MS_WINDOWS_DESKTOP + Py_RETURN_NONE; +#else BOOL ret; Py_BEGIN_ALLOW_THREADS @@ -405,6 +416,7 @@ _overlapped_UnregisterWait_impl(PyObject *module, HANDLE WaitHandle) if (!ret) return SetFromWindowsErr(0); Py_RETURN_NONE; +#endif } /*[clinic input] @@ -422,6 +434,9 @@ _overlapped_UnregisterWaitEx_impl(PyObject *module, HANDLE WaitHandle, HANDLE Event) /*[clinic end generated code: output=2e3d84c1d5f65b92 input=953cddc1de50fab9]*/ { +#ifndef MS_WINDOWS_DESKTOP + Py_RETURN_NONE; +#else BOOL ret; Py_BEGIN_ALLOW_THREADS @@ -431,6 +446,7 @@ _overlapped_UnregisterWaitEx_impl(PyObject *module, HANDLE WaitHandle, if (!ret) return SetFromWindowsErr(0); Py_RETURN_NONE; +#endif } /*