Advertisement
noisyboy25

Untitled

Jul 5th, 2022
1,472
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.12 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "io/ioutil"
  6.     "os"
  7.  
  8.     "github.com/hectane/go-acl/api"
  9.     "golang.org/x/sys/windows"
  10. )
  11.  
  12. type FileInfo struct {
  13.     path     string
  14.     ownerSid string
  15.     size     int64
  16. }
  17.  
  18. func main() {
  19.     i, err := DirSid(".")
  20.     if err != nil {
  21.         panic(err)
  22.     }
  23.     fmt.Printf("%#v", i)
  24. }
  25.  
  26. func DirSid(path string) ([]FileInfo, error) {
  27.     var fileInfo []FileInfo
  28.  
  29.     fileStat, err := os.Stat(path)
  30.     if err != nil {
  31.         return nil, err
  32.     }
  33.  
  34.     if fileStat.IsDir() {
  35.         files, err := ioutil.ReadDir(path)
  36.         if err != nil {
  37.             return nil, err
  38.         }
  39.         for _, f := range files {
  40.             i, err := DirSid(path + "\\" + f.Name())
  41.             if err != nil {
  42.                 return nil, err
  43.             }
  44.             fileInfo = append(fileInfo, i...)
  45.         }
  46.     } else {
  47.         fileInfo = append(fileInfo, FileInfo{path, GetFileSid(path), fileStat.Size()})
  48.     }
  49.     return fileInfo, nil
  50. }
  51.  
  52. func GetFileSid(path string) string {
  53.     var owner *windows.SID
  54.  
  55.     err := api.GetNamedSecurityInfo(
  56.         path,
  57.         api.SE_FILE_OBJECT,
  58.         api.OWNER_SECURITY_INFORMATION,
  59.         &owner,
  60.         nil,
  61.         nil,
  62.         nil,
  63.         nil,
  64.     )
  65.     if err != nil {
  66.         fmt.Println(err)
  67.     }
  68.  
  69.     return owner.String()
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement