https://github.com/python/cpython/commit/20095fb29ac3fd386eae2189ed725571192ae0af
commit: 20095fb29ac3fd386eae2189ed725571192ae0af
branch: main
author: Max Bachmann <[email protected]>
committer: zooba <[email protected]>
date: 2025-05-15T21:12:10+01:00
summary:
Fix GetNamedPipeHandleStateW on non-desktop Windows API partitions (GH-134049)
files:
M Python/fileutils.c
diff --git a/Python/fileutils.c b/Python/fileutils.c
index 78603d40704f14..2a3f12d4e872f8 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -2784,6 +2784,43 @@ _Py_set_blocking(int fd, int blocking)
return -1;
}
#else /* MS_WINDOWS */
+
+// The Windows Games API family doesn't expose GetNamedPipeHandleStateW so
attempt
+// to load it directly from the Kernel32.dll
+#if !defined(MS_WINDOWS_APP) && !defined(MS_WINDOWS_SYSTEM)
+BOOL
+GetNamedPipeHandleStateW(HANDLE hNamedPipe, LPDWORD lpState, LPDWORD
lpCurInstances, LPDWORD lpMaxCollectionCount,
+ LPDWORD lpCollectDataTimeout, LPWSTR lpUserName,
DWORD nMaxUserNameSize)
+{
+ static int initialized = 0;
+ typedef BOOL(__stdcall* PGetNamedPipeHandleStateW) (
+ HANDLE hNamedPipe, LPDWORD lpState, LPDWORD lpCurInstances, LPDWORD
lpMaxCollectionCount,
+ LPDWORD lpCollectDataTimeout, LPWSTR lpUserName, DWORD
nMaxUserNameSize);
+ static PGetNamedPipeHandleStateW _GetNamedPipeHandleStateW;
+
+ if (initialized == 0) {
+ HMODULE api = LoadLibraryExW(L"Kernel32.dll", NULL,
LOAD_LIBRARY_SEARCH_SYSTEM32);
+ if (api) {
+ _GetNamedPipeHandleStateW =
(PGetNamedPipeHandleStateW)GetProcAddress(
+ api, "GetNamedPipeHandleStateW");
+ }
+ else {
+ _GetNamedPipeHandleStateW = NULL;
+ }
+ initialized = 1;
+ }
+
+ if (!_GetNamedPipeHandleStateW) {
+ SetLastError(E_NOINTERFACE);
+ return FALSE;
+ }
+
+ return _GetNamedPipeHandleStateW(
+ hNamedPipe, lpState, lpCurInstances, lpMaxCollectionCount,
lpCollectDataTimeout, lpUserName, nMaxUserNameSize
+ );
+}
+#endif /* !MS_WINDOWS_APP && !MS_WINDOWS_SYSTEM */
+
int
_Py_get_blocking(int fd)
{
_______________________________________________
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]