From 73288ad18a2692b1510f8ed564daad8d1cbd7e59 Mon Sep 17 00:00:00 2001 From: Yaroslav Vorobiov Date: Mon, 18 May 2020 15:49:41 +0300 Subject: [PATCH] windows: refactor (*SD).copySelfRelativeSecurityDescriptor and (*SD).String --- windows/security_windows.go | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/windows/security_windows.go b/windows/security_windows.go index 38abde3c..9e3c44a8 100644 --- a/windows/security_windows.go +++ b/windows/security_windows.go @@ -1226,19 +1226,12 @@ func (sd *SECURITY_DESCRIPTOR) IsValid() bool { // used with %v formatting directives. func (sd *SECURITY_DESCRIPTOR) String() string { var sddl *uint16 - var strLen uint32 - err := convertSecurityDescriptorToStringSecurityDescriptor(sd, 1, 0xff, &sddl, &strLen) + err := convertSecurityDescriptorToStringSecurityDescriptor(sd, 1, 0xff, &sddl, nil) if err != nil { return "" } defer LocalFree(Handle(unsafe.Pointer(sddl))) - - var utf16s []uint16 - h := (*unsafeheader.Slice)(unsafe.Pointer(&utf16s)) - h.Data = unsafe.Pointer(sddl) - h.Len = int(strLen) - h.Cap = int(strLen) - return UTF16ToString(utf16s) + return UTF16PtrToString(sddl) } // ToAbsolute converts a self-relative security descriptor into an absolute one. @@ -1316,12 +1309,15 @@ func (absoluteSD *SECURITY_DESCRIPTOR) ToSelfRelative() (selfRelativeSD *SECURIT } func (selfRelativeSD *SECURITY_DESCRIPTOR) copySelfRelativeSecurityDescriptor() *SECURITY_DESCRIPTOR { - var dst, src []byte - dst = make([]byte, selfRelativeSD.Length()) + sdLen := (int)(selfRelativeSD.Length()) + + var src []byte h := (*unsafeheader.Slice)(unsafe.Pointer(&src)) h.Data = unsafe.Pointer(selfRelativeSD) - h.Len = len(dst) - h.Cap = len(dst) + h.Len = sdLen + h.Cap = sdLen + + dst := make([]byte, sdLen) copy(dst, src) return (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&dst[0])) }