Files
MeBox/internal/service/fileid_windows.go
T
2026-05-30 12:07:35 +08:00

40 lines
856 B
Go

//go:build windows
package service
import (
"fmt"
"golang.org/x/sys/windows"
)
func fileIdentity(path string) (string, bool) {
ptr, err := windows.UTF16PtrFromString(path)
if err != nil {
return "", false
}
handle, err := windows.CreateFile(
ptr,
windows.GENERIC_READ,
windows.FILE_SHARE_READ|windows.FILE_SHARE_WRITE|windows.FILE_SHARE_DELETE,
nil,
windows.OPEN_EXISTING,
windows.FILE_FLAG_BACKUP_SEMANTICS,
0,
)
if err != nil {
return "", false
}
defer windows.CloseHandle(handle)
var info windows.ByHandleFileInformation
if err := windows.GetFileInformationByHandle(handle, &info); err != nil {
return "", false
}
if info.NumberOfLinks < 2 {
return "", false
}
fileIndex := (uint64(info.FileIndexHigh) << 32) | uint64(info.FileIndexLow)
return fmt.Sprintf("%d:%d", info.VolumeSerialNumber, fileIndex), true
}