Advertisement
noisyboy25

Untitled

Jul 4th, 2022
1,181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.99 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. func main() {
  13.     i, err := DirSid(".")
  14.     if err != nil {
  15.         panic(err)
  16.     }
  17.     fmt.Println(i)
  18. }
  19.  
  20. func DirSid(path string) (string, error) {
  21.     info := ""
  22.  
  23.     fileInfo, err := os.Stat(path)
  24.     if err != nil {
  25.         return "", err
  26.     }
  27.  
  28.     if fileInfo.IsDir() {
  29.         files, err := ioutil.ReadDir(path)
  30.         if err != nil {
  31.             return "", err
  32.         }
  33.         for _, f := range files {
  34.             i, err := DirSid(path + "\\" + f.Name())
  35.             if err != nil {
  36.                 return "", err
  37.             }
  38.             info += i
  39.         }
  40.     } else {
  41.         info += fmt.Sprintf("%s\t%d bytes\t%s\n", path, fileInfo.Size(), GetFileSid(path))
  42.     }
  43.     return info, nil
  44. }
  45.  
  46. func GetFileSid(path string) string {
  47.  
  48.     var owner *windows.SID
  49.  
  50.     err := api.GetNamedSecurityInfo(
  51.         path,
  52.         api.SE_FILE_OBJECT,
  53.         api.OWNER_SECURITY_INFORMATION,
  54.         &owner,
  55.         nil,
  56.         nil,
  57.         nil,
  58.         nil,
  59.     )
  60.     if err != nil {
  61.         fmt.Println(err)
  62.     }
  63.  
  64.     return owner.String()
  65. }
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement