aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan McNulty <bryanmcnulty@protonmail.com>2025-04-26 09:45:20 -0500
committerBryan McNulty <bryanmcnulty@protonmail.com>2025-04-26 09:45:20 -0500
commit904096e29c66f052e97fd96af00bed4d929fdad2 (patch)
treeb85b1bb6b44f94c7f79178a2a712ef4fa41cbb6b
parentb2f118985aab63d2e574967549d3238844bbaae9 (diff)
downloadgoexec-904096e29c66f052e97fd96af00bed4d929fdad2.tar.gz
goexec-904096e29c66f052e97fd96af00bed4d929fdad2.zip
Add go-msrpc error references to all modules #2
-rw-r--r--pkg/goexec/dcom/util.go125
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,
+ },
+ },
+ },
+ }
}