1 // Copyright © 2016-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 //! Base Component Object Model defintions.
8 use ctypes
::{c_int, c_void}
;
9 use shared
::basetsd
::{SIZE_T, UINT64, ULONG_PTR}
;
10 use shared
::guiddef
::{CLSID, GUID, LPCLSID, LPIID, REFCLSID, REFGUID, REFIID}
;
11 use shared
::minwindef
::{BOOL, DWORD, FILETIME, HGLOBAL, LPDWORD, LPHANDLE, LPVOID, ULONG}
;
12 use shared
::rpcdce
::{RPC_AUTHZ_HANDLE, RPC_AUTH_IDENTITY_HANDLE}
;
13 use shared
::wtypesbase
::{
14 CLSCTX
, CLSCTX_INPROC_HANDLER
, CLSCTX_INPROC_SERVER
, CLSCTX_LOCAL_SERVER
, CLSCTX_REMOTE_SERVER
,
15 LPCOLESTR
, LPOLESTR
, OLECHAR
,
17 use um
::objidl
::SOLE_AUTHENTICATION_SERVICE
;
19 APTTYPE
, APTTYPEQUALIFIER
, COSERVERINFO
, IActivationFilter
, IAgileReference
, LPMALLOC
,
20 LPMARSHAL
, LPSTREAM
, LPSURROGATE
, MULTI_QI
,
22 use um
::propidl
::PROPVARIANT
;
23 use um
::unknwnbase
::{IUnknown, LPUNKNOWN}
;
24 use um
::winnt
::{HANDLE, HRESULT, LARGE_INTEGER, LONG, PSECURITY_DESCRIPTOR, PVOID, ULARGE_INTEGER}
;
26 pub fn LISet32(li
: &mut LARGE_INTEGER
, v
: DWORD
) {
28 li
.u_mut().HighPart
= if (v
as LONG
) < 0 {
33 li
.u_mut().LowPart
= v
;
37 pub fn ULISet32(li
: &mut ULARGE_INTEGER
, v
: DWORD
) {
39 li
.u_mut().HighPart
= 0;
40 li
.u_mut().LowPart
= v
;
43 pub const CLSCTX_INPROC
: CLSCTX
= CLSCTX_INPROC_SERVER
| CLSCTX_INPROC_HANDLER
;
44 pub const CLSCTX_ALL
: CLSCTX
= CLSCTX_INPROC_SERVER
| CLSCTX_INPROC_HANDLER
| CLSCTX_LOCAL_SERVER
45 | CLSCTX_REMOTE_SERVER
;
46 pub const CLSCTX_SERVER
: CLSCTX
= CLSCTX_INPROC_SERVER
| CLSCTX_LOCAL_SERVER
47 | CLSCTX_REMOTE_SERVER
;
50 REGCLS_MULTIPLEUSE
= 1,
51 REGCLS_MULTI_SEPARATE
= 2,
56 ENUM
!{enum COINITBASE
{
57 COINITBASE_MULTITHREADED
= 0x0,
62 ppMalloc
: *mut LPMALLOC
,
64 pub fn CreateStreamOnHGlobal(
66 fDeleteOnRelease
: BOOL
,
69 pub fn GetHGlobalFromStream(
71 phglobal
: *mut HGLOBAL
,
73 pub fn CoUninitialize() -> ();
74 pub fn CoGetCurrentProcess() -> DWORD
;
75 pub fn CoInitializeEx(
79 pub fn CoGetCallerTID(
82 pub fn CoGetCurrentLogicalThreadId(
85 pub fn CoGetContextToken(
86 pToken
: *mut ULONG_PTR
,
88 pub fn CoGetDefaultContext(
91 ppv
: *mut *mut c_void
,
93 pub fn CoGetApartmentType(
94 pAptType
: *mut APTTYPE
,
95 pAptQualifier
: *mut APTTYPEQUALIFIER
,
98 STRUCT
!{struct ServerInformation
{
101 ui64ServerAddress
: UINT64
,
103 pub type PServerInformation
= *mut ServerInformation
;
105 pub fn CoDecodeProxy(
107 ui64ProxyAddress
: UINT64
,
108 pServerInformation
: PServerInformation
,
111 DECLARE_HANDLE
!(CO_MTA_USAGE_COOKIE
, CO_MTA_USAGE_COOKIE__
);
113 pub fn CoIncrementMTAUsage(
114 pCookie
: *mut CO_MTA_USAGE_COOKIE
,
116 pub fn CoDecrementMTAUsage(
117 Cookie
: CO_MTA_USAGE_COOKIE
,
119 pub fn CoAllowUnmarshalerCLSID(
122 pub fn CoGetObjectContext(
126 pub fn CoGetClassObject(
133 pub fn CoRegisterClassObject(
138 lpdwRegister
: LPDWORD
,
140 pub fn CoRevokeClassObject(
143 pub fn CoResumeClassObjects() -> HRESULT
;
144 pub fn CoSuspendClassObjects() -> HRESULT
;
145 pub fn CoAddRefServerProcess() -> ULONG
;
146 pub fn CoReleaseServerProcess() -> ULONG
;
151 pub fn CoRegisterPSClsid(
155 pub fn CoRegisterSurrogate(
156 pSurrogate
: LPSURROGATE
,
158 pub fn CoGetMarshalSizeMax(
162 dwDestContext
: DWORD
,
163 pvDestContext
: LPVOID
,
166 pub fn CoMarshalInterface(
170 dwDestContext
: DWORD
,
171 pvDestContext
: LPVOID
,
174 pub fn CoUnmarshalInterface(
179 pub fn CoMarshalHresult(
183 pub fn CoUnmarshalHresult(
185 phresult
: *mut HRESULT
,
187 pub fn CoReleaseMarshalData(
190 pub fn CoDisconnectObject(
194 pub fn CoLockObjectExternal(
197 fLastUnlockReleases
: BOOL
,
199 pub fn CoGetStandardMarshal(
202 dwDestContext
: DWORD
,
203 pvDestContext
: LPVOID
,
205 ppMarshal
: *mut LPMARSHAL
,
207 pub fn CoGetStdMarshalEx(
208 pUnkOuter
: LPUNKNOWN
,
210 ppUnkInner
: *mut LPUNKNOWN
,
213 ENUM
!{enum STDMSHLFLAGS
{
215 SMEXF_HANDLER
= 0x02,
218 pub fn CoIsHandlerConnected(
221 pub fn CoMarshalInterThreadInterfaceInStream(
224 ppStm
: *mut LPSTREAM
,
226 pub fn CoGetInterfaceAndReleaseStream(
231 pub fn CoCreateFreeThreadedMarshaler(
232 punkOuter
: LPUNKNOWN
,
233 ppunkMarshal
: *mut LPUNKNOWN
,
235 pub fn CoFreeUnusedLibraries();
236 pub fn CoFreeUnusedLibrariesEx(
237 dwUnloadDelay
: DWORD
,
240 pub fn CoDisconnectContext(
243 pub fn CoInitializeSecurity(
244 pSecDesc
: PSECURITY_DESCRIPTOR
,
246 asAuthSvc
: *mut SOLE_AUTHENTICATION_SERVICE
,
247 pReserved1
: *mut c_void
,
250 pAuthList
: *mut c_void
,
251 dwCapabilities
: DWORD
,
252 pReserved3
: *mut c_void
,
254 pub fn CoGetCallContext(
256 ppInterface
: *mut *mut c_void
,
258 pub fn CoQueryProxyBlanket(
259 pProxy
: *mut IUnknown
,
260 pwAuthnSvc
: *mut DWORD
,
261 pAuthzSvc
: *mut DWORD
,
262 pServerPrincName
: *mut LPOLESTR
,
263 pAuthnLevel
: *mut DWORD
,
264 pImpLevel
: *mut DWORD
,
265 pAuthInfo
: *mut RPC_AUTH_IDENTITY_HANDLE
,
266 pCapabilites
: *mut DWORD
,
268 pub fn CoSetProxyBlanket(
269 pProxy
: *mut IUnknown
,
272 pServerPrincName
: *mut OLECHAR
,
275 pAuthInfo
: RPC_AUTH_IDENTITY_HANDLE
,
276 dwCapabilities
: DWORD
,
279 pProxy
: *mut IUnknown
,
280 ppCopy
: *mut *mut IUnknown
,
282 pub fn CoQueryClientBlanket(
283 pAuthnSvc
: *mut DWORD
,
284 pAuthzSvc
: *mut DWORD
,
285 pServerPrincName
: *mut LPOLESTR
,
286 pAuthnLevel
: *mut DWORD
,
287 pImpLevel
: *mut DWORD
,
288 pPrivs
: *mut RPC_AUTHZ_HANDLE
,
289 pCapabilities
: *mut DWORD
,
291 pub fn CoImpersonateClient() -> HRESULT
;
292 pub fn CoRevertToSelf() -> HRESULT
;
293 pub fn CoQueryAuthenticationServices(
294 pcAuthSvc
: *mut DWORD
,
295 asAuthSvc
: *mut *mut SOLE_AUTHENTICATION_SERVICE
,
297 pub fn CoSwitchCallContext(
298 pNewObject
: *mut IUnknown
,
299 ppOldObject
: *mut *mut IUnknown
,
302 pub const COM_RIGHTS_EXECUTE
: DWORD
= 1;
303 pub const COM_RIGHTS_EXECUTE_LOCAL
: DWORD
= 2;
304 pub const COM_RIGHTS_EXECUTE_REMOTE
: DWORD
= 4;
305 pub const COM_RIGHTS_ACTIVATE_LOCAL
: DWORD
= 8;
306 pub const COM_RIGHTS_ACTIVATE_REMOTE
: DWORD
= 16;
308 pub fn CoCreateInstance(
310 pUnkOuter
: LPUNKNOWN
,
315 pub fn CoCreateInstanceEx(
317 punkOuter
: *mut IUnknown
,
319 pServerInfo
: *mut COSERVERINFO
,
321 pResults
: *mut MULTI_QI
,
323 pub fn CoRegisterActivationFilter(
324 pActivationFilter
: *mut IActivationFilter
,
326 pub fn CoCreateInstanceFromApp(
328 punkOuter
: *mut IUnknown
,
332 pResults
: *mut MULTI_QI
,
334 pub fn CoGetCancelObject(
337 ppUnk
: *mut *mut c_void
,
339 pub fn CoSetCancelObject(
340 pUnk
: *mut *mut IUnknown
,
346 pub fn CoTestCancel() -> HRESULT
;
347 pub fn CoEnableCallCancellation(
350 pub fn CoDisableCallCancellation(
353 pub fn StringFromCLSID(
355 lplpsz
: *mut LPOLESTR
,
357 pub fn CLSIDFromString(
361 pub fn StringFromIID(
363 lplpsz
: *mut LPOLESTR
,
365 pub fn IIDFromString(
369 pub fn ProgIDFromCLSID(
371 lplpszProgID
: *mut LPOLESTR
,
373 pub fn CLSIDFromProgID(
374 lpszProgID
: LPCOLESTR
,
377 pub fn StringFromGUID2(
385 pub fn PropVariantCopy(
386 pvarDest
: *mut PROPVARIANT
,
387 pvarSrc
: *const PROPVARIANT
,
389 pub fn PropVariantClear(
390 pvar
: *mut PROPVARIANT
,
392 pub fn FreePropVariantArray(
394 rgvars
: *mut PROPVARIANT
,
396 pub fn CoWaitForMultipleHandles(
404 ENUM
!{enum COWAIT_FLAGS
{
407 COWAIT_ALERTABLE
= 2,
408 COWAIT_INPUTAVAILABLE
= 4,
409 COWAIT_DISPATCH_CALLS
= 8,
410 COWAIT_DISPATCH_WINDOW_MESSAGES
= 0x10,
412 ENUM
!{enum CWMO_FLAGS
{
414 CWMO_DISPATCH_CALLS
= 1,
415 CWMO_DISPATCH_WINDOW_MESSAGES
= 2,
418 pub fn CoWaitForMultipleObjects(
422 pHandles
: *const HANDLE
,
426 pub const CWMO_MAX_HANDLES
: ULONG
= 56;
428 pub fn CoGetTreatAsClass(
432 pub fn CoInvalidateRemoteMachineBindings(
433 pszMachineName
: LPOLESTR
,
436 ENUM
!{enum AgileReferenceOptions
{
437 AGILEREFERENCE_DEFAULT
= 0,
438 AGILEREFERENCE_DELAYEDMARSHAL
= 1,
441 pub fn RoGetAgileReference(
442 options
: AgileReferenceOptions
,
445 ppAgileReference
: *mut *mut IAgileReference
,
448 FN
!{stdcall
LPFNGETCLASSOBJECT(
453 FN
!{stdcall LPFNCANUNLOADNOW() -> HRESULT}
455 pub fn DllGetClassObject(
460 pub fn DllCanUnloadNow() -> HRESULT
;
461 pub fn CoTaskMemAlloc(
464 pub fn CoTaskMemRealloc(
468 pub fn CoTaskMemFree(
471 pub fn CoFileTimeNow(
472 lpFileTime
: *mut FILETIME
,
474 pub fn CLSIDFromProgIDEx(
475 lpszProgID
: LPCOLESTR
,