* globals.cc (ro_u_volume): New R/O unicode string.

* path.cc (symlink_info::check_reparse_point): Fix check for volume
	mount points to work on Vista and later as well.
This commit is contained in:
Corinna Vinschen 2009-08-24 11:14:30 +00:00
parent 84acd4c989
commit 11788f8ce0
3 changed files with 16 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2009-08-24 Corinna Vinschen <corinna@vinschen.de>
* globals.cc (ro_u_volume): New R/O unicode string.
* path.cc (symlink_info::check_reparse_point): Fix check for volume
mount points to work on Vista and later as well.
2009-08-22 Corinna Vinschen <corinna@vinschen.de>
* strfuncs.cc (__set_charset_from_codepage): Add codepages 20866

View File

@ -100,6 +100,7 @@ UNICODE_STRING _RDATA ro_u_ntfs = _ROU (L"NTFS");
UNICODE_STRING _RDATA ro_u_sunwnfs = _ROU (L"SUNWNFS");
UNICODE_STRING _RDATA ro_u_udf = _ROU (L"UDF");
UNICODE_STRING _RDATA ro_u_unixfs = _ROU (L"UNIXFS");
UNICODE_STRING _RDATA ro_u_volume = _ROU (L"\\??\\Volume{");
#undef _RDATA
#undef _ROU

View File

@ -1865,9 +1865,16 @@ symlink_info::check_reparse_point (HANDLE h)
}
else if (rp->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT)
{
if (rp->SymbolicLinkReparseBuffer.PrintNameLength == 0)
UNICODE_STRING subst;
RtlInitCountedUnicodeString (&subst,
(WCHAR *)((char *)rp->MountPointReparseBuffer.PathBuffer
+ rp->MountPointReparseBuffer.SubstituteNameOffset),
rp->MountPointReparseBuffer.SubstituteNameLength);
if (rp->MountPointReparseBuffer.PrintNameLength == 0
|| RtlEqualUnicodePathPrefix (&subst, &ro_u_volume, TRUE))
{
/* Likely a volume mount point. Not treated as symlink. */
/* Volume mount point. Not treated as symlink. */
return 0;
}
sys_wcstombs (srcbuf, SYMLINK_MAX + 1,