def test_open_process(): pid = rwin32.GetCurrentProcessId() assert pid != 0 handle = rwin32.OpenProcess(rwin32.PROCESS_QUERY_INFORMATION, False, pid) rwin32.CloseHandle(handle) py.test.raises(WindowsError, rwin32.OpenProcess, rwin32.PROCESS_TERMINATE, False, 0)
def os_utime_llimpl(path, tp): hFile = win32traits.CreateFile(path, win32traits.FILE_WRITE_ATTRIBUTES, 0, None, win32traits.OPEN_EXISTING, win32traits.FILE_FLAG_BACKUP_SEMANTICS, rwin32.NULL_HANDLE) if hFile == rwin32.INVALID_HANDLE_VALUE: raise rwin32.lastSavedWindowsError() ctime = lltype.nullptr(rwin32.FILETIME) atime = lltype.malloc(rwin32.FILETIME, flavor='raw') mtime = lltype.malloc(rwin32.FILETIME, flavor='raw') try: if tp is None: now = lltype.malloc(rwin32.SYSTEMTIME, flavor='raw') try: GetSystemTime(now) if (not SystemTimeToFileTime(now, atime) or not SystemTimeToFileTime(now, mtime)): raise rwin32.lastSavedWindowsError() finally: lltype.free(now, flavor='raw') else: actime, modtime = tp time_t_to_FILE_TIME(actime, atime) time_t_to_FILE_TIME(modtime, mtime) if not SetFileTime(hFile, ctime, atime, mtime): raise rwin32.lastSavedWindowsError() finally: rwin32.CloseHandle(hFile) lltype.free(atime, flavor='raw') lltype.free(mtime, flavor='raw')
def _getfinalpathname_llimpl(path): if not win32traits.check_GetFinalPathNameByHandle(): raise LLNotImplemented("GetFinalPathNameByHandle not available on " "this platform") hFile = win32traits.CreateFile(path, 0, 0, None, win32traits.OPEN_EXISTING, win32traits.FILE_FLAG_BACKUP_SEMANTICS, rwin32.NULL_HANDLE) if hFile == rwin32.INVALID_HANDLE_VALUE: raise rwin32.lastSavedWindowsError("CreateFile") VOLUME_NAME_DOS = rffi.cast(rwin32.DWORD, win32traits.VOLUME_NAME_DOS) try: usize = win32traits.GetFinalPathNameByHandle( hFile, lltype.nullptr(traits.CCHARP.TO), rffi.cast(rwin32.DWORD, 0), VOLUME_NAME_DOS) if usize == 0: raise rwin32.lastSavedWindowsError("GetFinalPathNameByHandle") size = rffi.cast(lltype.Signed, usize) with rffi.scoped_alloc_unicodebuffer(size + 1) as buf: result = win32traits.GetFinalPathNameByHandle( hFile, buf.raw, usize, VOLUME_NAME_DOS) if result == 0: raise rwin32.lastSavedWindowsError("GetFinalPathNameByHandle") return buf.str(rffi.cast(lltype.Signed, result)) finally: rwin32.CloseHandle(hFile)
def test_terminate_process(): import subprocess, signal, sys proc = subprocess.Popen([sys.executable, "-c", "import time;" "time.sleep(10)", ], ) print proc.pid handle = rwin32.OpenProcess(rwin32.PROCESS_ALL_ACCESS, False, proc.pid) assert rwin32.TerminateProcess(handle, signal.SIGTERM) == 1 rwin32.CloseHandle(handle) assert proc.wait() == signal.SIGTERM
def win32_xstat3(traits, path, traverse=False): # This is the Python3 version of os.stat() or lstat(). # XXX 'traverse' is ignored, and everything related to # the "reparse points" is missing win32traits = make_win32_traits(traits) hFile = win32traits.CreateFile( path, win32traits.FILE_READ_ATTRIBUTES, 0, lltype.nullptr(rwin32.LPSECURITY_ATTRIBUTES.TO), win32traits.OPEN_EXISTING, win32traits.FILE_ATTRIBUTE_NORMAL | win32traits.FILE_FLAG_BACKUP_SEMANTICS | 0, # win32traits.FILE_FLAG_OPEN_REPARSE_POINT, rwin32.NULL_HANDLE) if hFile == rwin32.INVALID_HANDLE_VALUE: errcode = rwin32.GetLastError_saved() if (errcode != win32traits.ERROR_ACCESS_DENIED and errcode != win32traits.ERROR_SHARING_VIOLATION): raise WindowsError(errcode, "os_stat failed") with lltype.scoped_alloc( win32traits.WIN32_FILE_ATTRIBUTE_DATA) as data: if win32_attributes_from_dir(win32traits, path, data) == 0: raise WindowsError(rwin32.GetLastError_saved(), "win32_attributes_from_dir failed") return win32_attribute_data_to_stat(win32traits, data) with lltype.scoped_alloc(win32traits.BY_HANDLE_FILE_INFORMATION, zero=True) as data: res = win32traits.GetFileInformationByHandle(hFile, data) errcode = rwin32.GetLastError_saved() rwin32.CloseHandle(hFile) if res == 0: raise WindowsError(errcode, "GetFileInformationByHandle failed") return win32_by_handle_info_to_stat(win32traits, data)
def CloseHandle(space, w_handle): handle = handle_w(space, w_handle) if not rwin32.CloseHandle(handle): raise wrap_windowserror(space, rwin32.lastSavedWindowsError())