mirror of
https://github.com/rwinkhart/sys.git
synced 2026-08-28 04:46:44 -04:00
windows: add ole32 instantiation functions
These are basic functions for getting function pointers to instantiated OLE objects. Change-Id: I5a3d179d6da2af006b6e11def18280959bb9bd98 Reviewed-on: https://go-review.googlesource.com/c/sys/+/298469 Trust: Jason A. Donenfeld <Jason@zx2c4.com> Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
@@ -381,6 +381,9 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
|||||||
//sys stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) = ole32.StringFromGUID2
|
//sys stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) = ole32.StringFromGUID2
|
||||||
//sys coCreateGuid(pguid *GUID) (ret error) = ole32.CoCreateGuid
|
//sys coCreateGuid(pguid *GUID) (ret error) = ole32.CoCreateGuid
|
||||||
//sys CoTaskMemFree(address unsafe.Pointer) = ole32.CoTaskMemFree
|
//sys CoTaskMemFree(address unsafe.Pointer) = ole32.CoTaskMemFree
|
||||||
|
//sys CoInitializeEx(reserved uintptr, coInit uint32) (ret error) = ole32.CoInitializeEx
|
||||||
|
//sys CoUninitialize() = ole32.CoUninitialize
|
||||||
|
//sys CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) = ole32.CoGetObject
|
||||||
//sys getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetProcessPreferredUILanguages
|
//sys getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetProcessPreferredUILanguages
|
||||||
//sys getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetThreadPreferredUILanguages
|
//sys getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetThreadPreferredUILanguages
|
||||||
//sys getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetUserPreferredUILanguages
|
//sys getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetUserPreferredUILanguages
|
||||||
|
|||||||
@@ -2642,3 +2642,74 @@ var (
|
|||||||
RT_HTML ResourceID = 23
|
RT_HTML ResourceID = 23
|
||||||
RT_MANIFEST ResourceID = 24
|
RT_MANIFEST ResourceID = 24
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type COAUTHIDENTITY struct {
|
||||||
|
User *uint16
|
||||||
|
UserLength uint32
|
||||||
|
Domain *uint16
|
||||||
|
DomainLength uint32
|
||||||
|
Password *uint16
|
||||||
|
PasswordLength uint32
|
||||||
|
Flags uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type COAUTHINFO struct {
|
||||||
|
AuthnSvc uint32
|
||||||
|
AuthzSvc uint32
|
||||||
|
ServerPrincName *uint16
|
||||||
|
AuthnLevel uint32
|
||||||
|
ImpersonationLevel uint32
|
||||||
|
AuthIdentityData *COAUTHIDENTITY
|
||||||
|
Capabilities uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type COSERVERINFO struct {
|
||||||
|
Reserved1 uint32
|
||||||
|
Aame *uint16
|
||||||
|
AuthInfo *COAUTHINFO
|
||||||
|
Reserved2 uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type BIND_OPTS3 struct {
|
||||||
|
CbStruct uint32
|
||||||
|
Flags uint32
|
||||||
|
Mode uint32
|
||||||
|
TickCountDeadline uint32
|
||||||
|
TrackFlags uint32
|
||||||
|
ClassContext uint32
|
||||||
|
Locale uint32
|
||||||
|
ServerInfo *COSERVERINFO
|
||||||
|
Hwnd HWND
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
CLSCTX_INPROC_SERVER = 0x1
|
||||||
|
CLSCTX_INPROC_HANDLER = 0x2
|
||||||
|
CLSCTX_LOCAL_SERVER = 0x4
|
||||||
|
CLSCTX_INPROC_SERVER16 = 0x8
|
||||||
|
CLSCTX_REMOTE_SERVER = 0x10
|
||||||
|
CLSCTX_INPROC_HANDLER16 = 0x20
|
||||||
|
CLSCTX_RESERVED1 = 0x40
|
||||||
|
CLSCTX_RESERVED2 = 0x80
|
||||||
|
CLSCTX_RESERVED3 = 0x100
|
||||||
|
CLSCTX_RESERVED4 = 0x200
|
||||||
|
CLSCTX_NO_CODE_DOWNLOAD = 0x400
|
||||||
|
CLSCTX_RESERVED5 = 0x800
|
||||||
|
CLSCTX_NO_CUSTOM_MARSHAL = 0x1000
|
||||||
|
CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000
|
||||||
|
CLSCTX_NO_FAILURE_LOG = 0x4000
|
||||||
|
CLSCTX_DISABLE_AAA = 0x8000
|
||||||
|
CLSCTX_ENABLE_AAA = 0x10000
|
||||||
|
CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
|
||||||
|
CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000
|
||||||
|
CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000
|
||||||
|
CLSCTX_ENABLE_CLOAKING = 0x100000
|
||||||
|
CLSCTX_APPCONTAINER = 0x400000
|
||||||
|
CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000
|
||||||
|
CLSCTX_PS_DLL = 0x80000000
|
||||||
|
|
||||||
|
COINIT_MULTITHREADED = 0x0
|
||||||
|
COINIT_APARTMENTTHREADED = 0x2
|
||||||
|
COINIT_DISABLE_OLE1DDE = 0x4
|
||||||
|
COINIT_SPEED_OVER_MEMORY = 0x8
|
||||||
|
)
|
||||||
|
|||||||
@@ -367,7 +367,10 @@ var (
|
|||||||
procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb")
|
procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb")
|
||||||
procCLSIDFromString = modole32.NewProc("CLSIDFromString")
|
procCLSIDFromString = modole32.NewProc("CLSIDFromString")
|
||||||
procCoCreateGuid = modole32.NewProc("CoCreateGuid")
|
procCoCreateGuid = modole32.NewProc("CoCreateGuid")
|
||||||
|
procCoGetObject = modole32.NewProc("CoGetObject")
|
||||||
|
procCoInitializeEx = modole32.NewProc("CoInitializeEx")
|
||||||
procCoTaskMemFree = modole32.NewProc("CoTaskMemFree")
|
procCoTaskMemFree = modole32.NewProc("CoTaskMemFree")
|
||||||
|
procCoUninitialize = modole32.NewProc("CoUninitialize")
|
||||||
procStringFromGUID2 = modole32.NewProc("StringFromGUID2")
|
procStringFromGUID2 = modole32.NewProc("StringFromGUID2")
|
||||||
procEnumProcesses = modpsapi.NewProc("EnumProcesses")
|
procEnumProcesses = modpsapi.NewProc("EnumProcesses")
|
||||||
procSubscribeServiceChangeNotifications = modsechost.NewProc("SubscribeServiceChangeNotifications")
|
procSubscribeServiceChangeNotifications = modsechost.NewProc("SubscribeServiceChangeNotifications")
|
||||||
@@ -3146,11 +3149,32 @@ func coCreateGuid(pguid *GUID) (ret error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) {
|
||||||
|
r0, _, _ := syscall.Syscall6(procCoGetObject.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable)), 0, 0)
|
||||||
|
if r0 != 0 {
|
||||||
|
ret = syscall.Errno(r0)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func CoInitializeEx(reserved uintptr, coInit uint32) (ret error) {
|
||||||
|
r0, _, _ := syscall.Syscall(procCoInitializeEx.Addr(), 2, uintptr(reserved), uintptr(coInit), 0)
|
||||||
|
if r0 != 0 {
|
||||||
|
ret = syscall.Errno(r0)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func CoTaskMemFree(address unsafe.Pointer) {
|
func CoTaskMemFree(address unsafe.Pointer) {
|
||||||
syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(address), 0, 0)
|
syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(address), 0, 0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CoUninitialize() {
|
||||||
|
syscall.Syscall(procCoUninitialize.Addr(), 0, 0, 0, 0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) {
|
func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) {
|
||||||
r0, _, _ := syscall.Syscall(procStringFromGUID2.Addr(), 3, uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax))
|
r0, _, _ := syscall.Syscall(procStringFromGUID2.Addr(), 3, uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax))
|
||||||
chars = int32(r0)
|
chars = int32(r0)
|
||||||
|
|||||||
Reference in New Issue
Block a user