//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{}) }