Ejemplo n.º 1
0
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)
Ejemplo n.º 2
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')
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
def CloseHandle(space, w_handle):
    handle = handle_w(space, w_handle)
    if not rwin32.CloseHandle(handle):
        raise wrap_windowserror(space, rwin32.lastSavedWindowsError())