fs: add correct vss support to fixpath

Paths that only contain the volume shadow copy snapshot name require
special treatment. These paths must end with a slash for regular file
operations to work.
This commit is contained in:
Michael Eischer 2024-10-31 21:53:08 +01:00
parent 7eec85b4eb
commit f77e67086c

View file

@ -20,6 +20,15 @@ func fixpath(name string) string {
if strings.HasPrefix(abspath, `\\?\UNC\`) {
return abspath
}
// Check if \\?\GLOBALROOT exists which marks volume shadow copy snapshots
if strings.HasPrefix(abspath, `\\?\GLOBALROOT\`) {
if strings.Count(abspath, `\`) == 5 {
// Append slash if this just a volume name, e.g. `\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyXX`
// Without the trailing slash any access to the volume itself will fail.
return abspath + string(filepath.Separator)
}
return abspath
}
// Check if \\?\ already exist
if strings.HasPrefix(abspath, `\\?\`) {
return abspath