[issue26658] test_os fails when run on Windows ramdisk

Eryk Sun report at bugs.python.org
Thu Feb 25 05:24:58 EST 2021


Eryk Sun <eryksun at gmail.com> added the comment:

os.stat() was redesigned in issue 37834, which entailed extensive updates across the standard library to improve support for Windows reparse points. As part of this,  Win32JunctionTests.tearDown() was changed to use a more reliable lexists() check, which resolves this issue.

FYI, the new implementation of os.stat() supports an ImDisk virtual disk (v2.0.9 from 2015-12). In the following example, "junctest" is a mountpoint (junction) in an NTFS filesystem. The filesystem is mounted on an ImDisk device, as seen its VOLUME_NAME_NT (2) path:

    >>> flags = win32file.FILE_FLAG_OPEN_REPARSE_POINT
    >>> flags |= win32file.FILE_FLAG_BACKUP_SEMANTICS
    >>> h = win32file.CreateFile('junctest', 0, 0, None, 3, flags, None)
    >>> win32file.GetFinalPathNameByHandle(h, 2)
    '\\Device\\ImDisk0\\junctest'

stat() traverses the mountpoint:

    >>> os.stat('junctest').st_reparse_tag == 0
    True

lstat() opens the mountpoint:

    >>> os.lstat('junctest').st_reparse_tag == stat.IO_REPARSE_TAG_MOUNT_POINT
    True

This version of Imdisk doesn't support the mountpoint manager, so trying to get the VOLUME_NAME_DOS (0) name of r"\Device\ImDisk0" (e.g. r"\\?\R:") still fails the same as before:

    >>> win32file.GetFinalPathNameByHandle(h, 0)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    pywintypes.error: (1, 'GetFinalPathNameByHandle', 'Incorrect function.')

But os.stat() no longer needs it.

----------
resolution:  -> fixed
stage:  -> resolved
status: open -> closed
superseder:  -> readlink on Windows cannot read app exec links

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue26658>
_______________________________________


More information about the Python-bugs-list mailing list