Files
2025-09-26 16:08:45 -05:00

60 lines
1.8 KiB
Go

package dcomexec
import (
"context"
"github.com/oiweiwei/go-msrpc/msrpc/dcom"
)
type contextKey string
const (
// contextKeyComVersion (dcom.COMVersion) carries the effective COM version
contextKeyComVersion contextKey = "ComVersion"
contextDefaultComVersionMajor uint16 = 5
contextDefaultComVersionMinor uint16 = 7
// contextKeyGetComVersion (bool) determines whether to call getComVersion (ServerAlive2) to determine the COM version.
// If this is false, defaultComVersionMajor, contextDefaultComVersionMinor will be used.
contextKeyGetComVersion contextKey = "GetComVersion"
contextDefaultGetComVersion = true
contextKeyCreateInstanceMethod contextKey = "CreateInstanceMethod"
contextDefaultCreateInstanceMethod = OptRemoteCreateInstance
)
func contextGetComVersion(ctx context.Context) bool {
if v := ctx.Value(contextKeyGetComVersion); v != nil {
if g, ok := v.(bool); ok {
return g
}
}
return contextDefaultGetComVersion
}
// contextComVersion will return the effective COM version (*dcom.COMVersion) from a context.
// If no COM Version is set and GetComVersion is true, nil is returned
func contextComVersion(ctx context.Context) *dcom.COMVersion {
if v := ctx.Value(contextKeyComVersion); v != nil {
if g, ok := v.(dcom.COMVersion); ok {
return &g
}
}
if !contextGetComVersion(ctx) {
return &dcom.COMVersion{
MajorVersion: contextDefaultComVersionMajor,
MinorVersion: contextDefaultComVersionMinor,
}
}
return nil
}
func contextCreateInstanceMethod(ctx context.Context) string {
if v := ctx.Value(contextKeyCreateInstanceMethod); v != nil {
if g, ok := v.(string); ok {
return g
}
}
return contextDefaultCreateInstanceMethod
}