Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "io/ioutil"
- "os"
- "github.com/hectane/go-acl/api"
- "golang.org/x/sys/windows"
- )
- type FileInfo struct {
- path string
- ownerSid string
- size int64
- }
- func main() {
- i, err := DirSid(".")
- if err != nil {
- panic(err)
- }
- fmt.Printf("%#v", i)
- }
- func DirSid(path string) ([]FileInfo, error) {
- var fileInfo []FileInfo
- fileStat, err := os.Stat(path)
- if err != nil {
- return nil, err
- }
- if fileStat.IsDir() {
- files, err := ioutil.ReadDir(path)
- if err != nil {
- return nil, err
- }
- for _, f := range files {
- i, err := DirSid(path + "\\" + f.Name())
- if err != nil {
- return nil, err
- }
- fileInfo = append(fileInfo, i...)
- }
- } else {
- fileInfo = append(fileInfo, FileInfo{path, GetFileSid(path), fileStat.Size()})
- }
- return fileInfo, nil
- }
- func GetFileSid(path string) string {
- var owner *windows.SID
- err := api.GetNamedSecurityInfo(
- path,
- api.SE_FILE_OBJECT,
- api.OWNER_SECURITY_INFORMATION,
- &owner,
- nil,
- nil,
- nil,
- nil,
- )
- if err != nil {
- fmt.Println(err)
- }
- return owner.String()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement