Comments
Patch
@@ -5,7 +5,7 @@
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
-import ctypes, errno, os, subprocess, random
+import ctypes, errno, msvcrt, os, subprocess, random
_kernel32 = ctypes.windll.kernel32
_advapi32 = ctypes.windll.advapi32
@@ -174,6 +174,10 @@
_kernel32.GetModuleFileNameA.argtypes = [_HANDLE, ctypes.c_void_p, _DWORD]
_kernel32.GetModuleFileNameA.restype = _DWORD
+_kernel32.GetNamedPipeHandleStateA.argtypes = [_HANDLE, ctypes.c_void_p,
+ ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, _LPSTR, _DWORD]
+_kernel32.GetNamedPipeHandleStateA.restype = _BOOL
+
_kernel32.CreateProcessA.argtypes = [_LPCSTR, _LPCSTR, ctypes.c_void_p,
ctypes.c_void_p, _BOOL, _DWORD, ctypes.c_void_p, _LPCSTR, ctypes.c_void_p,
ctypes.c_void_p]
@@ -235,6 +239,19 @@
finally:
_kernel32.CloseHandle(fh)
+def getpipestate(pipe):
+ handle = msvcrt.get_osfhandle(pipe.fileno())
+ if handle == -1:
+ raise ctypes.WinError()
+
+ state = _DWORD()
+
+ if not _kernel32.GetNamedPipeHandleStateA(handle, ctypes.byref(state), None,
+ None, None, None, 0):
+ raise ctypes.WinError()
+
+ return state.value
+
def oslink(src, dst):
try:
if not _kernel32.CreateHardLinkA(dst, src, None):