Files
Local-Cursor/internal/securefile/file_windows.go

35 lines
948 B
Go
Raw Normal View History

//go:build windows
package securefile
import (
"golang.org/x/sys/windows"
"os"
)
func protect(path string, directory bool) error {
user, err := windows.GetCurrentProcessToken().GetTokenUser()
if err != nil {
return err
}
inherit := ""
if directory {
inherit = "OICI"
}
sd, err := windows.SecurityDescriptorFromString("D:P(A;" + inherit + ";FA;;;SY)(A;" + inherit + ";FA;;;" + user.User.Sid.String() + ")")
if err != nil {
return err
}
acl, _, err := sd.DACL()
if err != nil {
return err
}
return windows.SetNamedSecurityInfo(path, windows.SE_FILE_OBJECT, windows.DACL_SECURITY_INFORMATION|windows.PROTECTED_DACL_SECURITY_INFORMATION, nil, nil, acl, nil)
}
func lockFile(f *os.File) error {
return windows.LockFileEx(windows.Handle(f.Fd()), windows.LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &windows.Overlapped{})
}
func unlockFile(f *os.File) {
_ = windows.UnlockFileEx(windows.Handle(f.Fd()), 0, 1, 0, &windows.Overlapped{})
}