windows.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:pygcam 作者: JGCRI 项目源码 文件源码
def readlinkWindows(path):
        reparse_point_handle = CreateFileW(path,
                                           0,
                                           0,
                                           None,
                                           OPEN_EXISTING,
                                           FILE_FLAG_OPEN_REPARSE_POINT |
                                           FILE_FLAG_BACKUP_SEMANTICS,
                                           None)
        if reparse_point_handle == INVALID_HANDLE_VALUE:
            from pygcam.log import getLogger
            _logger = getLogger(__name__)
            _logger.info("Can't readlink: %s", path)
            raise ctypes.WinError()

        target_buffer = ctypes.c_buffer(MAXIMUM_REPARSE_DATA_BUFFER_SIZE)
        n_bytes_returned = DWORD()
        io_result = DeviceIoControl(reparse_point_handle,
                                    FSCTL_GET_REPARSE_POINT,
                                    None, 0,
                                    target_buffer, len(target_buffer),
                                    ctypes.byref(n_bytes_returned),
                                    None)
        CloseHandle(reparse_point_handle)
        if not io_result:
            raise ctypes.WinError()

        rdb = REPARSE_DATA_BUFFER.from_buffer(target_buffer)
        if rdb.ReparseTag == IO_REPARSE_TAG_SYMLINK:
            return rdb.SymbolicLinkReparseBuffer.PrintName
        elif rdb.ReparseTag == IO_REPARSE_TAG_MOUNT_POINT:
            return rdb.MountPointReparseBuffer.PrintName

        raise ValueError("not a link")

    # Replace broken functions with those defined above.
    # (In python 2.7.11 os.path.islink() indeed failed to detect link made with mklink)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号