mirror of
https://github.com/restic/restic.git
synced 2026-02-03 12:29:37 -05:00
32 lines
1.1 KiB
Go
32 lines
1.1 KiB
Go
//go:build windows
|
|
|
|
package fs
|
|
|
|
import (
|
|
"github.com/Microsoft/go-winio"
|
|
"github.com/restic/restic/internal/errors"
|
|
)
|
|
|
|
var processPrivileges = []string{
|
|
// seBackupPrivilege allows the application to bypass file and directory ACLs to back up files and directories.
|
|
"SeBackupPrivilege",
|
|
// seRestorePrivilege allows the application to bypass file and directory ACLs to restore files and directories.
|
|
"SeRestorePrivilege",
|
|
// seSecurityPrivilege allows read and write access to all SACLs.
|
|
"SeSecurityPrivilege",
|
|
// seTakeOwnershipPrivilege allows the application to take ownership of files and directories, regardless of the permissions set on them.
|
|
"SeTakeOwnershipPrivilege",
|
|
}
|
|
|
|
// enableProcessPrivileges enables additional file system privileges for the current process.
|
|
func enableProcessPrivileges() error {
|
|
var errs []error
|
|
|
|
// EnableProcessPrivileges may enable some but not all requested privileges, yet its error lists all requested.
|
|
// Request one at a time to return what actually fails.
|
|
for _, p := range processPrivileges {
|
|
errs = append(errs, winio.EnableProcessPrivileges([]string{p}))
|
|
}
|
|
|
|
return errors.Join(errs...)
|
|
}
|