diff options
author | Bryan McNulty <bryanmcnulty@protonmail.com> | 2025-04-26 09:45:20 -0500 |
---|---|---|
committer | Bryan McNulty <bryanmcnulty@protonmail.com> | 2025-04-26 09:45:20 -0500 |
commit | 904096e29c66f052e97fd96af00bed4d929fdad2 (patch) | |
tree | b85b1bb6b44f94c7f79178a2a712ef4fa41cbb6b /pkg | |
parent | b2f118985aab63d2e574967549d3238844bbaae9 (diff) | |
download | goexec-904096e29c66f052e97fd96af00bed4d929fdad2.tar.gz goexec-904096e29c66f052e97fd96af00bed4d929fdad2.zip |
Add go-msrpc error references to all modules #2
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/goexec/dcom/util.go | 125 |
1 files changed, 64 insertions, 61 deletions
diff --git a/pkg/goexec/dcom/util.go b/pkg/goexec/dcom/util.go index 5ed8a60..9d7850d 100644 --- a/pkg/goexec/dcom/util.go +++ b/pkg/goexec/dcom/util.go @@ -1,85 +1,88 @@ package dcomexec import ( - "context" - "fmt" - "github.com/oiweiwei/go-msrpc/dcerpc" - "github.com/oiweiwei/go-msrpc/msrpc/dcom" - "github.com/oiweiwei/go-msrpc/msrpc/dcom/oaut" - "github.com/oiweiwei/go-msrpc/msrpc/dcom/oaut/idispatch/v0" - "strings" + "context" + "fmt" + "github.com/oiweiwei/go-msrpc/dcerpc" + "github.com/oiweiwei/go-msrpc/msrpc/dcom" + "github.com/oiweiwei/go-msrpc/msrpc/dcom/oaut" + "github.com/oiweiwei/go-msrpc/msrpc/dcom/oaut/idispatch/v0" + "strings" + + _ "github.com/oiweiwei/go-msrpc/msrpc/erref/ntstatus" + _ "github.com/oiweiwei/go-msrpc/msrpc/erref/win32" ) func callComMethod(ctx context.Context, dc idispatch.DispatchClient, method string, args ...*oaut.Variant) (ir *idispatch.InvokeResponse, err error) { - parts := strings.Split(method, ".") + parts := strings.Split(method, ".") - var id *dcom.IPID - var gr *idispatch.GetIDsOfNamesResponse + var id *dcom.IPID + var gr *idispatch.GetIDsOfNamesResponse - for i, obj := range parts { + for i, obj := range parts { - var opts []dcerpc.CallOption + var opts []dcerpc.CallOption - if id != nil { - opts = append(opts, dcom.WithIPID(id)) - } + if id != nil { + opts = append(opts, dcom.WithIPID(id)) + } - gr, err = dc.GetIDsOfNames(ctx, &idispatch.GetIDsOfNamesRequest{ - This: ORPCThis, - IID: &dcom.IID{}, - LocaleID: LcEnglishUs, + gr, err = dc.GetIDsOfNames(ctx, &idispatch.GetIDsOfNamesRequest{ + This: ORPCThis, + IID: &dcom.IID{}, + LocaleID: LcEnglishUs, - Names: []string{obj + "\x00"}, - }, opts...) + Names: []string{obj + "\x00"}, + }, opts...) - if err != nil { - return nil, fmt.Errorf("get dispatch ID of name %q: %w", obj, err) - } + if err != nil { + return nil, fmt.Errorf("get dispatch ID of name %q: %w", obj, err) + } - if len(gr.DispatchID) < 1 { - return nil, fmt.Errorf("dispatch ID of name %q not found", obj) - } + if len(gr.DispatchID) < 1 { + return nil, fmt.Errorf("dispatch ID of name %q not found", obj) + } - irq := &idispatch.InvokeRequest{ - This: ORPCThis, - IID: &dcom.IID{}, - LocaleID: LcEnglishUs, + irq := &idispatch.InvokeRequest{ + This: ORPCThis, + IID: &dcom.IID{}, + LocaleID: LcEnglishUs, - DispatchIDMember: gr.DispatchID[0], - } + DispatchIDMember: gr.DispatchID[0], + } - if i >= len(parts)-1 { - irq.Flags = 1 - irq.DispatchParams = &oaut.DispatchParams{ArgsCount: uint32(len(args)), Args: args} - return dc.Invoke(ctx, irq, opts...) - } - irq.Flags = 2 + if i >= len(parts)-1 { + irq.Flags = 1 + irq.DispatchParams = &oaut.DispatchParams{ArgsCount: uint32(len(args)), Args: args} + return dc.Invoke(ctx, irq, opts...) + } + irq.Flags = 2 - ir, err = dc.Invoke(ctx, irq, opts...) - if err != nil { - return nil, fmt.Errorf("get properties of object %q: %w", obj, err) - } + ir, err = dc.Invoke(ctx, irq, opts...) + if err != nil { + return nil, fmt.Errorf("get properties of object %q: %w", obj, err) + } - di, ok := ir.VarResult.VarUnion.GetValue().(*oaut.Dispatch) - if !ok { - return nil, fmt.Errorf("invalid dispatch object for %q", obj) - } - id = di.InterfacePointer().GetStandardObjectReference().Std.IPID - } - return + di, ok := ir.VarResult.VarUnion.GetValue().(*oaut.Dispatch) + if !ok { + return nil, fmt.Errorf("invalid dispatch object for %q", obj) + } + id = di.InterfacePointer().GetStandardObjectReference().Std.IPID + } + return } func stringToVariant(s string) *oaut.Variant { - return &oaut.Variant{ - Size: 5, - VT: 8, - VarUnion: &oaut.Variant_VarUnion{ - Value: &oaut.Variant_VarUnion_BSTR{ - BSTR: &oaut.String{ - Data: s, - }, - }, - }, - } + return &oaut.Variant{ + Size: 5, + VT: 8, + VarUnion: &oaut.Variant_VarUnion{ + Value: &oaut.Variant_VarUnion_BSTR{ + BSTR: &oaut.String{ + Data: s, + }, + }, + }, + } } |