Files

157 lines
4.2 KiB
Go

// +build windows
package clr
import (
"syscall"
"unsafe"
"golang.org/x/sys/windows"
)
type AppDomain struct {
vtbl *AppDomainVtbl
}
type AppDomainVtbl struct {
QueryInterface uintptr
AddRef uintptr
Release uintptr
GetTypeInfoCount uintptr
GetTypeInfo uintptr
GetIDsOfNames uintptr
Invoke uintptr
get_ToString uintptr
Equals uintptr
GetHashCode uintptr
GetType uintptr
InitializeLifetimeService uintptr
GetLifetimeService uintptr
get_Evidence uintptr
add_DomainUnload uintptr
remove_DomainUnload uintptr
add_AssemblyLoad uintptr
remove_AssemblyLoad uintptr
add_ProcessExit uintptr
remove_ProcessExit uintptr
add_TypeResolve uintptr
remove_TypeResolve uintptr
add_ResourceResolve uintptr
remove_ResourceResolve uintptr
add_AssemblyResolve uintptr
remove_AssemblyResolve uintptr
add_UnhandledException uintptr
remove_UnhandledException uintptr
DefineDynamicAssembly uintptr
DefineDynamicAssembly_2 uintptr
DefineDynamicAssembly_3 uintptr
DefineDynamicAssembly_4 uintptr
DefineDynamicAssembly_5 uintptr
DefineDynamicAssembly_6 uintptr
DefineDynamicAssembly_7 uintptr
DefineDynamicAssembly_8 uintptr
DefineDynamicAssembly_9 uintptr
CreateInstance uintptr
CreateInstanceFrom uintptr
CreateInstance_2 uintptr
CreateInstanceFrom_2 uintptr
CreateInstance_3 uintptr
CreateInstanceFrom_3 uintptr
Load uintptr
Load_2 uintptr
Load_3 uintptr
Load_4 uintptr
Load_5 uintptr
Load_6 uintptr
Load_7 uintptr
ExecuteAssembly uintptr
ExecuteAssembly_2 uintptr
ExecuteAssembly_3 uintptr
get_FriendlyName uintptr
get_BaseDirectory uintptr
get_RelativeSearchPath uintptr
get_ShadowCopyFiles uintptr
GetAssemblies uintptr
AppendPrivatePath uintptr
ClearPrivatePath uintptr
SetShadowCopyPath uintptr
ClearShadowCopyPath uintptr
SetCachePath uintptr
SetData uintptr
GetData uintptr
SetAppDomainPolicy uintptr
SetThreadPrincipal uintptr
SetPrincipalPolicy uintptr
DoCallBack uintptr
get_DynamicDirectory uintptr
}
// GetAppDomain is a wrapper function that returns an appDomain from an existing ICORRuntimeHost object
func GetAppDomain(runtimeHost *ICORRuntimeHost) (appDomain *AppDomain, err error) {
var pAppDomain uintptr
var pIUnknown uintptr
hr := runtimeHost.GetDefaultDomain(&pIUnknown)
err = checkOK(hr, "runtimeHost.GetDefaultDomain")
if err != nil {
return
}
iu := NewIUnknownFromPtr(pIUnknown)
hr = iu.QueryInterface(&IID_AppDomain, &pAppDomain)
err = checkOK(hr, "IUnknown.QueryInterface")
return NewAppDomainFromPtr(pAppDomain), err
}
func NewAppDomainFromPtr(ppv uintptr) *AppDomain {
return (*AppDomain)(unsafe.Pointer(ppv))
}
func (obj *AppDomain) QueryInterface(riid *windows.GUID, ppvObject *uintptr) uintptr {
ret, _, _ := syscall.Syscall(
obj.vtbl.QueryInterface,
3,
uintptr(unsafe.Pointer(obj)),
uintptr(unsafe.Pointer(riid)),
uintptr(unsafe.Pointer(ppvObject)))
return ret
}
func (obj *AppDomain) AddRef() uintptr {
ret, _, _ := syscall.Syscall(
obj.vtbl.AddRef,
1,
uintptr(unsafe.Pointer(obj)),
0,
0)
return ret
}
func (obj *AppDomain) Release() uintptr {
ret, _, _ := syscall.Syscall(
obj.vtbl.Release,
1,
uintptr(unsafe.Pointer(obj)),
0,
0)
return ret
}
func (obj *AppDomain) GetHashCode() uintptr {
ret, _, _ := syscall.Syscall(
obj.vtbl.GetHashCode,
2,
uintptr(unsafe.Pointer(obj)),
0,
0)
return ret
}
func (obj *AppDomain) Load_3(pRawAssembly uintptr, asmbly *uintptr) uintptr {
ret, _, _ := syscall.Syscall(
obj.vtbl.Load_3,
3,
uintptr(unsafe.Pointer(obj)),
uintptr(unsafe.Pointer(pRawAssembly)),
uintptr(unsafe.Pointer(asmbly)))
return ret
}