Big ctypes_generation update + add lot of structures/interfaces

This commit is contained in:
hakril
2024-10-23 09:53:59 +02:00
parent 13d0b6b3b7
commit 0cd51a088e
58 changed files with 5368 additions and 115 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ class WinComParser(Parser):
PARAM_INFO = ["__RPC__deref_out", "__RPC__in", "__RPC__deref_out_opt", "__RPC__out", "__RPC__in_opt",
"__RPC__deref_opt_inout_opt", "__in", "__out", "__out_opt", "__in_opt", "__inout",
"__reserved", "__RPC__in_opt_string", "__RPC__inout_opt", "__RPC__in_string", "__deref_out_opt", "__RPC__inout",
"__RPC__deref_out_opt_string", "_COM_Outptr_", "_In_", "_In_opt_", "_Out_"]
"__RPC__deref_out_opt_string", "_COM_Outptr_", "_In_", "_In_opt_", "_Out_", "__deref_out"]
PARAM_INFO_WITH_VALUE = ["__RPC__in_ecount", "__RPC__out_ecount_part", "__RPC__in_ecount_full",
"__RPC__in_range", "__RPC__out_ecount_full", "__out_ecount_opt", "__out_ecount", "__in_ecount_opt",
"__in_ecount", "__out_bcount_opt", "__out_bcount", "__in_bcount", "__in_bcount_opt", "__RPC__out_ecount_full_string",
@@ -0,0 +1,30 @@
typedef struct IActivationStageInfoVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IActivationStageInfo * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IActivationStageInfo * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IActivationStageInfo * This);
HRESULT ( STDMETHODCALLTYPE *SetStageAndIndex )(
IActivationStageInfo * This,
/* [in] */ ACTIVATION_STAGE stage,
/* [in] */ int index);
HRESULT ( STDMETHODCALLTYPE *GetStage )(
IActivationStageInfo * This,
/* [out] */ ACTIVATION_STAGE *pstage);
HRESULT ( STDMETHODCALLTYPE *GetIndex )(
IActivationStageInfo * This,
/* [out] */ int *pindex);
END_INTERFACE
} IActivationStageInfoVtbl;
@@ -0,0 +1,29 @@
typedef struct ICallFactoryVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ICallFactory * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ICallFactory * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ICallFactory * This);
HRESULT ( STDMETHODCALLTYPE *CreateCall )(
ICallFactory * This,
/* [annotation][in] */
__in REFIID riid,
/* [annotation][in] */
__in_opt IUnknown *pCtrlUnk,
/* [annotation][in] */
__in REFIID riid2,
/* [annotation][iid_is][out] */
__deref_out IUnknown **ppv);
END_INTERFACE
} ICallFactoryVtbl;
@@ -0,0 +1,27 @@
typedef struct IClassFactoryVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IClassFactory * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IClassFactory * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IClassFactory * This);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *CreateInstance )(
IClassFactory * This,
/* [unique][in] */ IUnknown *pUnkOuter,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *LockServer )(
IClassFactory * This,
/* [in] */ BOOL fLock);
END_INTERFACE
} IClassFactoryVtbl;
@@ -0,0 +1,63 @@
typedef struct IClientSecurityVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IClientSecurity * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IClientSecurity * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IClientSecurity * This);
HRESULT ( STDMETHODCALLTYPE *QueryBlanket )(
IClientSecurity * This,
/* [annotation][in] */
__in IUnknown *pProxy,
/* [annotation][out] */
__out DWORD *pAuthnSvc,
/* [annotation][out] */
__out_opt DWORD *pAuthzSvc,
/* [annotation][out] */
__RPC__deref_out_opt OLECHAR **pServerPrincName,
/* [annotation][out] */
__out_opt DWORD *pAuthnLevel,
/* [annotation][out] */
__out_opt DWORD *pImpLevel,
/* [annotation][out] */
__deref_out_opt void **pAuthInfo,
/* [annotation][out] */
__out_opt DWORD *pCapabilites);
HRESULT ( STDMETHODCALLTYPE *SetBlanket )(
IClientSecurity * This,
/* [annotation][in] */
__in IUnknown *pProxy,
/* [annotation][in] */
__in DWORD dwAuthnSvc,
/* [annotation][in] */
__in DWORD dwAuthzSvc,
/* [annotation][in] */
__RPC__in_opt OLECHAR *pServerPrincName,
/* [annotation][in] */
__in DWORD dwAuthnLevel,
/* [annotation][in] */
__in DWORD dwImpLevel,
/* [annotation][in] */
__in_opt void *pAuthInfo,
/* [annotation][in] */
__in DWORD dwCapabilities);
HRESULT ( STDMETHODCALLTYPE *CopyProxy )(
IClientSecurity * This,
/* [annotation][in] */
__in IUnknown *pProxy,
/* [annotation][out] */
__deref_out IUnknown **ppCopy);
END_INTERFACE
} IClientSecurityVtbl;
@@ -0,0 +1,74 @@
typedef struct IComCatalogVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IComCatalog * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IComCatalog * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IComCatalog * This);
HRESULT ( STDMETHODCALLTYPE *GetClassInfo )(
IComCatalog * This,
/* [in] */ REFGUID guidConfiguredClsid,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetApplicationInfo )(
IComCatalog * This,
/* [in] */ REFGUID guidApplId,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetProcessInfo )(
IComCatalog * This,
/* [in] */ REFGUID guidProcess,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetServerGroupInfo )(
IComCatalog * This,
/* [in] */ REFGUID guidServerGroup,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetRetQueueInfo )(
IComCatalog * This,
/* [string][in] */ WCHAR *wszFormatName,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetApplicationInfoForExe )(
IComCatalog * This,
/* [string][in] */ WCHAR *pwszExeName,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetTypeLibrary )(
IComCatalog * This,
/* [in] */ REFGUID guidTypeLib,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetInterfaceInfo )(
IComCatalog * This,
/* [in] */ REFIID iidInterface,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *FlushCache )(
IComCatalog * This);
HRESULT ( STDMETHODCALLTYPE *GetClassInfoFromProgId )(
IComCatalog * This,
/* [in] */ WCHAR *pwszProgID,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
END_INTERFACE
} IComCatalogVtbl;
@@ -0,0 +1,22 @@
typedef struct IInternalUnknownVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IInternalUnknown * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IInternalUnknown * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IInternalUnknown * This);
HRESULT ( STDMETHODCALLTYPE *QueryInternalInterface )(
IInternalUnknown * This,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
END_INTERFACE
} IInternalUnknownVtbl;
@@ -0,0 +1,58 @@
typedef struct IMarshalVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IMarshal * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IMarshal * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IMarshal * This);
HRESULT ( STDMETHODCALLTYPE *GetUnmarshalClass )(
IMarshal * This,
/* [in] */ REFIID riid,
/* [unique][in] */ void *pv,
/* [in] */ DWORD dwDestContext,
/* [unique][in] */ void *pvDestContext,
/* [in] */ DWORD mshlflags,
/* [out] */ CLSID *pCid);
HRESULT ( STDMETHODCALLTYPE *GetMarshalSizeMax )(
IMarshal * This,
/* [in] */ REFIID riid,
/* [unique][in] */ void *pv,
/* [in] */ DWORD dwDestContext,
/* [unique][in] */ void *pvDestContext,
/* [in] */ DWORD mshlflags,
/* [out] */ DWORD *pSize);
HRESULT ( STDMETHODCALLTYPE *MarshalInterface )(
IMarshal * This,
/* [unique][in] */ IStream *pStm,
/* [in] */ REFIID riid,
/* [unique][in] */ void *pv,
/* [in] */ DWORD dwDestContext,
/* [unique][in] */ void *pvDestContext,
/* [in] */ DWORD mshlflags);
HRESULT ( STDMETHODCALLTYPE *UnmarshalInterface )(
IMarshal * This,
/* [unique][in] */ IStream *pStm,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *ReleaseMarshalData )(
IMarshal * This,
/* [unique][in] */ IStream *pStm);
HRESULT ( STDMETHODCALLTYPE *DisconnectObject )(
IMarshal * This,
/* [in] */ DWORD dwReserved);
END_INTERFACE
} IMarshalVtbl;
@@ -0,0 +1,67 @@
typedef struct IObjContextVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IObjContext * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IObjContext * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IObjContext * This);
HRESULT ( STDMETHODCALLTYPE *SetProperty )(
IObjContext * This,
/* [annotation][in] */
__in REFGUID rpolicyId,
/* [annotation][in] */
__in CPFLAGS flags,
/* [annotation][in] */
__in IUnknown *pUnk);
HRESULT ( STDMETHODCALLTYPE *RemoveProperty )(
IObjContext * This,
/* [annotation][in] */
__in REFGUID rPolicyId);
HRESULT ( STDMETHODCALLTYPE *GetProperty )(
IObjContext * This,
/* [annotation][in] */
__in REFGUID rGuid,
/* [annotation][out] */
__out CPFLAGS *pFlags,
/* [annotation][out] */
__deref_out IUnknown **ppUnk);
HRESULT ( STDMETHODCALLTYPE *EnumContextProps )(
IObjContext * This,
/* [annotation][out] */
__deref_out IEnumContextProps **ppEnumContextProps);
PVOID ( STDMETHODCALLTYPE *Reserved1 )(
IObjContext * This);
PVOID ( STDMETHODCALLTYPE *Reserved2 )(
IObjContext * This);
PVOID ( STDMETHODCALLTYPE *Reserved3 )(
IObjContext * This);
PVOID ( STDMETHODCALLTYPE *Reserved4 )(
IObjContext * This);
PVOID ( STDMETHODCALLTYPE *Reserved5 )(
IObjContext * This);
PVOID ( STDMETHODCALLTYPE *Reserved6 )(
IObjContext * This);
PVOID ( STDMETHODCALLTYPE *Reserved7 )(
IObjContext * This);
END_INTERFACE
} IObjContextVtbl;
@@ -0,0 +1,36 @@
typedef struct IRemUnknownVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IRemUnknown * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IRemUnknown * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IRemUnknown * This);
HRESULT ( STDMETHODCALLTYPE *RemQueryInterface )(
IRemUnknown * This,
/* [in] */ REFIPID ripid,
/* [in] */ ULONG cRefs,
/* [in] */ USHORT cIids,
/* [size_is][in] */ IID *iids,
/* [size_is][size_is][out] */ REMQIRESULT **ppQIResults);
HRESULT ( STDMETHODCALLTYPE *RemAddRef )(
IRemUnknown * This,
/* [in] */ USHORT cInterfaceRefs,
/* [size_is][in] */ REMINTERFACEREF *InterfaceRefs,
/* [size_is][out] */ HRESULT *pResults);
HRESULT ( STDMETHODCALLTYPE *RemRelease )(
IRemUnknown * This,
/* [in] */ USHORT cInterfaceRefs,
/* [size_is][in] */ REMINTERFACEREF *InterfaceRefs);
END_INTERFACE
} IRemUnknownVtbl;
@@ -0,0 +1,20 @@
// IStdIdentity is an empty interface to check that an object is the IStdIdentity
// and thus query other interface
typedef struct IStdIdentityVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IUnknown * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IUnknown * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IUnknown * This);
END_INTERFACE
} IStdIdentityVtbl;
@@ -0,0 +1,108 @@
typedef struct IStorageVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IStorage * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IStorage * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IStorage * This);
HRESULT ( STDMETHODCALLTYPE *CreateStream )(
IStorage * This,
/* [string][in] */ const OLECHAR *pwcsName,
/* [in] */ DWORD grfMode,
/* [in] */ DWORD reserved1,
/* [in] */ DWORD reserved2,
/* [out] */ IStream **ppstm);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *OpenStream )(
IStorage * This,
/* [string][in] */ const OLECHAR *pwcsName,
/* [unique][in] */ void *reserved1,
/* [in] */ DWORD grfMode,
/* [in] */ DWORD reserved2,
/* [out] */ IStream **ppstm);
HRESULT ( STDMETHODCALLTYPE *CreateStorage )(
IStorage * This,
/* [string][in] */ const OLECHAR *pwcsName,
/* [in] */ DWORD grfMode,
/* [in] */ DWORD reserved1,
/* [in] */ DWORD reserved2,
/* [out] */ IStorage **ppstg);
HRESULT ( STDMETHODCALLTYPE *OpenStorage )(
IStorage * This,
/* [string][unique][in] */ const OLECHAR *pwcsName,
/* [unique][in] */ IStorage *pstgPriority,
/* [in] */ DWORD grfMode,
/* [unique][in] */ SNB snbExclude,
/* [in] */ DWORD reserved,
/* [out] */ IStorage **ppstg);
HRESULT ( STDMETHODCALLTYPE *CopyTo )(
IStorage * This,
/* [in] */ DWORD ciidExclude,
/* [size_is][unique][in] */ const IID *rgiidExclude,
/* [unique][in] */ SNB snbExclude,
/* [unique][in] */ IStorage *pstgDest);
HRESULT ( STDMETHODCALLTYPE *MoveElementTo )(
IStorage * This,
/* [string][in] */ const OLECHAR *pwcsName,
/* [unique][in] */ IStorage *pstgDest,
/* [string][in] */ const OLECHAR *pwcsNewName,
/* [in] */ DWORD grfFlags);
HRESULT ( STDMETHODCALLTYPE *Commit )(
IStorage * This,
/* [in] */ DWORD grfCommitFlags);
HRESULT ( STDMETHODCALLTYPE *Revert )(
IStorage * This);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *EnumElements )(
IStorage * This,
/* [in] */ DWORD reserved1,
/* [size_is][unique][in] */ void *reserved2,
/* [in] */ DWORD reserved3,
/* [out] */ IEnumSTATSTG **ppenum);
HRESULT ( STDMETHODCALLTYPE *DestroyElement )(
IStorage * This,
/* [string][in] */ const OLECHAR *pwcsName);
HRESULT ( STDMETHODCALLTYPE *RenameElement )(
IStorage * This,
/* [string][in] */ const OLECHAR *pwcsOldName,
/* [string][in] */ const OLECHAR *pwcsNewName);
HRESULT ( STDMETHODCALLTYPE *SetElementTimes )(
IStorage * This,
/* [string][unique][in] */ const OLECHAR *pwcsName,
/* [unique][in] */ const FILETIME *pctime,
/* [unique][in] */ const FILETIME *patime,
/* [unique][in] */ const FILETIME *pmtime);
HRESULT ( STDMETHODCALLTYPE *SetClass )(
IStorage * This,
/* [in] */ REFCLSID clsid);
HRESULT ( STDMETHODCALLTYPE *SetStateBits )(
IStorage * This,
/* [in] */ DWORD grfStateBits,
/* [in] */ DWORD grfMask);
HRESULT ( STDMETHODCALLTYPE *Stat )(
IStorage * This,
/* [out] */ STATSTG *pstatstg,
/* [in] */ DWORD grfStatFlag);
END_INTERFACE
} IStorageVtbl;
@@ -1,28 +0,0 @@
typedef struct MyClsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
MyCls * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
MyCls * This);
ULONG ( STDMETHODCALLTYPE *Release )(
MyCls * This);
HRESULT ( STDMETHODCALLTYPE *add )(
MyCls * This,
/* [in] */ UINT x,
/* [in] */ UINT y,
/* [out] */ UINT *res);
HRESULT ( STDMETHODCALLTYPE *print_state )(
MyCls * This);
END_INTERFACE
} MyClsVtbl;
@@ -0,0 +1,74 @@
typedef struct IActivationPropertiesVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IActivationProperties * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IActivationProperties * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IActivationProperties * This);
HRESULT ( STDMETHODCALLTYPE *GetUnmarshalClass )(
IActivationProperties * This,
/* [in] */ REFIID riid,
/* [unique][in] */ void *pv,
/* [in] */ DWORD dwDestContext,
/* [unique][in] */ void *pvDestContext,
/* [in] */ DWORD mshlflags,
/* [out] */ CLSID *pCid);
HRESULT ( STDMETHODCALLTYPE *GetMarshalSizeMax )(
IActivationProperties * This,
/* [in] */ REFIID riid,
/* [unique][in] */ void *pv,
/* [in] */ DWORD dwDestContext,
/* [unique][in] */ void *pvDestContext,
/* [in] */ DWORD mshlflags,
/* [out] */ DWORD *pSize);
HRESULT ( STDMETHODCALLTYPE *MarshalInterface )(
IActivationProperties * This,
/* [unique][in] */ IStream *pStm,
/* [in] */ REFIID riid,
/* [unique][in] */ void *pv,
/* [in] */ DWORD dwDestContext,
/* [unique][in] */ void *pvDestContext,
/* [in] */ DWORD mshlflags);
HRESULT ( STDMETHODCALLTYPE *UnmarshalInterface )(
IActivationProperties * This,
/* [unique][in] */ IStream *pStm,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *ReleaseMarshalData )(
IActivationProperties * This,
/* [unique][in] */ IStream *pStm);
HRESULT ( STDMETHODCALLTYPE *DisconnectObject )(
IActivationProperties * This,
/* [in] */ DWORD dwReserved);
HRESULT ( STDMETHODCALLTYPE *SetDestCtx )(
IActivationProperties * This,
/* [in] */ DWORD dwDestCtx);
HRESULT ( STDMETHODCALLTYPE *SetMarshalFlags )(
IActivationProperties * This,
/* [in] */ DWORD dwMarshalFlags);
HRESULT ( STDMETHODCALLTYPE *SetLocalBlob )(
IActivationProperties * This,
/* [in] */ void *blob);
HRESULT ( STDMETHODCALLTYPE *GetLocalBlob )(
IActivationProperties * This,
/* [out] */ void **blob);
END_INTERFACE
} IActivationPropertiesVtbl;
@@ -0,0 +1,38 @@
typedef struct IActivationPropertiesOutVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IActivationPropertiesOut * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IActivationPropertiesOut * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IActivationPropertiesOut * This);
HRESULT ( STDMETHODCALLTYPE *GetActivationID )(
IActivationPropertiesOut * This,
/* [out] */ GUID *pActivationID);
HRESULT ( STDMETHODCALLTYPE *GetObjectInterface )(
IActivationPropertiesOut * This,
/* [in] */ REFIID riid,
/* [in] */ DWORD actvflags,
/* [iid_is][out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetObjectInterfaces )(
IActivationPropertiesOut * This,
/* [in] */ DWORD cIfs,
/* [in] */ DWORD actvflags,
/* [size_is][in] */ MULTI_QI *multiQi);
HRESULT ( STDMETHODCALLTYPE *RemoveRequestedIIDs )(
IActivationPropertiesOut * This,
/* [in] */ DWORD cIfs,
/* [size_is][in] */ IID *rgIID);
END_INTERFACE
} IActivationPropertiesOutVtbl;
@@ -0,0 +1,64 @@
typedef struct IActivationPropertiesInVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IActivationPropertiesIn * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IActivationPropertiesIn * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IActivationPropertiesIn * This);
HRESULT ( STDMETHODCALLTYPE *GetActivationID )(
IActivationPropertiesIn * This,
/* [out] */ GUID *pActivationID);
HRESULT ( STDMETHODCALLTYPE *GetClassInfo )(
IActivationPropertiesIn * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetClsctx )(
IActivationPropertiesIn * This,
/* [out] */ DWORD *pclsctx);
HRESULT ( STDMETHODCALLTYPE *GetActivationFlags )(
IActivationPropertiesIn * This,
/* [out] */ DWORD *pactvflags);
HRESULT ( STDMETHODCALLTYPE *AddRequestedIIDs )(
IActivationPropertiesIn * This,
/* [in] */ DWORD cIfs,
/* [size_is][in] */ IID *rgIID);
HRESULT ( STDMETHODCALLTYPE *GetRequestedIIDs )(
IActivationPropertiesIn * This,
/* [out] */ ULONG *pulCount,
/* [out] */ IID **prgIID);
HRESULT ( STDMETHODCALLTYPE *DelegateGetClassObject )(
IActivationPropertiesIn * This,
/* [out] */ IActivationPropertiesOut **pActPropsOut);
HRESULT ( STDMETHODCALLTYPE *DelegateCreateInstance )(
IActivationPropertiesIn * This,
/* [in] */ IUnknown *pUnkOuter,
/* [out] */ IActivationPropertiesOut **pActPropsOut);
HRESULT ( STDMETHODCALLTYPE *DelegateCIAndGetCF )(
IActivationPropertiesIn * This,
/* [in] */ IUnknown *pUnkOuter,
/* [out] */ IActivationPropertiesOut **pActPropsOut,
/* [out] */ IClassFactory **ppCf);
HRESULT ( STDMETHODCALLTYPE *GetReturnActivationProperties )(
IActivationPropertiesIn * This,
/* [in] */ IUnknown *pUnk,
/* [out] */ IActivationPropertiesOut **ppActOut);
END_INTERFACE
} IActivationPropertiesInVtbl;
@@ -0,0 +1,47 @@
typedef struct IClassClassicInfoVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IClassClassicInfo * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IClassClassicInfo * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IClassClassicInfo * This);
HRESULT ( STDMETHODCALLTYPE *GetThreadingModel )(
IClassClassicInfo * This,
/* [out] */ ThreadingModel *pthreadmodel);
HRESULT ( STDMETHODCALLTYPE *GetModulePath )(
IClassClassicInfo * This,
/* [in] */ CLSCTX clsctx,
/* [string][out] */ WCHAR **pwszDllName);
HRESULT ( STDMETHODCALLTYPE *GetImplementedClsid )(
IClassClassicInfo * This,
/* [out] */ GUID **ppguidClsid);
HRESULT ( STDMETHODCALLTYPE *GetProcess )(
IClassClassicInfo * This,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetRemoteServerName )(
IClassClassicInfo * This,
/* [out] */ WCHAR **pwszServerName);
HRESULT ( STDMETHODCALLTYPE *GetLocalServerType )(
IClassClassicInfo * This,
/* [out] */ LocalServerType *pType);
HRESULT ( STDMETHODCALLTYPE *GetSurrogateCommandLine )(
IClassClassicInfo * This,
/* [out] */ WCHAR **pwszSurrogateCommandLine);
END_INTERFACE
} IClassClassicInfoVtbl;
@@ -0,0 +1,78 @@
typedef struct IComClassInfoVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IComClassInfo * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IComClassInfo * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IComClassInfo * This);
HRESULT ( STDMETHODCALLTYPE *GetConfiguredClsid )(
IComClassInfo * This,
/* [out] */ GUID **ppguidClsid);
HRESULT ( STDMETHODCALLTYPE *GetProgId )(
IComClassInfo * This,
/* [out] */ WCHAR **pwszProgid);
HRESULT ( STDMETHODCALLTYPE *GetClassName )(
IComClassInfo * This,
/* [out] */ WCHAR **pwszClassName);
HRESULT ( STDMETHODCALLTYPE *GetApplication )(
IComClassInfo * This,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetClassContext )(
IComClassInfo * This,
/* [in] */ CLSCTX clsctxFilter,
/* [out] */ CLSCTX *pclsctx);
HRESULT ( STDMETHODCALLTYPE *GetCustomActivatorCount )(
IComClassInfo * This,
/* [in] */ ACTIVATION_STAGE activationStage,
/* [out] */ ULONG *pulCount);
HRESULT ( STDMETHODCALLTYPE *GetCustomActivatorClsids )(
IComClassInfo * This,
/* [in] */ ACTIVATION_STAGE activationStage,
/* [out] */ GUID **prgguidClsid);
HRESULT ( STDMETHODCALLTYPE *GetCustomActivators )(
IComClassInfo * This,
/* [in] */ ACTIVATION_STAGE activationStage,
/* [out] */ ISystemActivator ***prgpActivator);
HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
IComClassInfo * This,
/* [in] */ REFIID riid,
/* [out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *IsComPlusConfiguredClass )(
IComClassInfo * This,
/* [out] */ BOOL *pfComPlusConfiguredClass);
HRESULT ( STDMETHODCALLTYPE *MustRunInClientContext )(
IComClassInfo * This,
/* [out] */ BOOL *pbMustRunInClientContext);
HRESULT ( STDMETHODCALLTYPE *GetVersionNumber )(
IComClassInfo * This,
/* [out] */ DWORD *pdwVersionMS,
/* [out] */ DWORD *pdwVersionLS);
HRESULT ( STDMETHODCALLTYPE *Lock )(
IComClassInfo * This);
HRESULT ( STDMETHODCALLTYPE *Unlock )(
IComClassInfo * This);
END_INTERFACE
} IComClassInfoVtbl;
@@ -0,0 +1,37 @@
typedef struct IContextVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IContext * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IContext * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IContext * This);
HRESULT ( STDMETHODCALLTYPE *SetProperty )(
IContext * This,
/* [in] */ REFGUID rpolicyId,
/* [in] */ CPFLAGS flags,
/* [in] */ IUnknown *pUnk);
HRESULT ( STDMETHODCALLTYPE *RemoveProperty )(
IContext * This,
/* [in] */ REFGUID rPolicyId);
HRESULT ( STDMETHODCALLTYPE *GetProperty )(
IContext * This,
/* [in] */ REFGUID rGuid,
/* [out] */ CPFLAGS *pFlags,
/* [out] */ IUnknown **ppUnk);
HRESULT ( STDMETHODCALLTYPE *EnumContextProps )(
IContext * This,
/* [out] */ IEnumContextProps **ppEnumContextProps);
END_INTERFACE
} IContextVtbl;
@@ -0,0 +1,38 @@
typedef struct IEnumContextPropsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IEnumContextProps * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IEnumContextProps * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IEnumContextProps * This);
HRESULT ( STDMETHODCALLTYPE *Next )(
IEnumContextProps * This,
/* [in] */ ULONG celt,
/* [length_is][size_is][out] */ ContextProperty *pContextProperties,
/* [out] */ ULONG *pceltFetched);
HRESULT ( STDMETHODCALLTYPE *Skip )(
IEnumContextProps * This,
/* [in] */ ULONG celt);
HRESULT ( STDMETHODCALLTYPE *Reset )(
IEnumContextProps * This);
HRESULT ( STDMETHODCALLTYPE *Clone )(
IEnumContextProps * This,
/* [out] */ IEnumContextProps **ppEnumContextProps);
HRESULT ( STDMETHODCALLTYPE *Count )(
IEnumContextProps * This,
/* [out] */ ULONG *pcelt);
END_INTERFACE
} IEnumContextPropsVtbl;
@@ -0,0 +1,34 @@
typedef struct IEnumSTATSTGVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IEnumSTATSTG * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IEnumSTATSTG * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IEnumSTATSTG * This);
/* [local] */ HRESULT ( STDMETHODCALLTYPE *Next )(
IEnumSTATSTG * This,
/* [in] */ ULONG celt,
/* [length_is][size_is][out] */ STATSTG *rgelt,
/* [out] */ ULONG *pceltFetched);
HRESULT ( STDMETHODCALLTYPE *Skip )(
IEnumSTATSTG * This,
/* [in] */ ULONG celt);
HRESULT ( STDMETHODCALLTYPE *Reset )(
IEnumSTATSTG * This);
HRESULT ( STDMETHODCALLTYPE *Clone )(
IEnumSTATSTG * This,
/* [out] */ IEnumSTATSTG **ppenum);
END_INTERFACE
} IEnumSTATSTGVtbl;
@@ -0,0 +1,43 @@
typedef struct IInitActivationPropertiesInVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IInitActivationPropertiesIn * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IInitActivationPropertiesIn * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IInitActivationPropertiesIn * This);
HRESULT ( STDMETHODCALLTYPE *SetClsctx )(
IInitActivationPropertiesIn * This,
/* [in] */ DWORD clsctx);
HRESULT ( STDMETHODCALLTYPE *SetActivationFlags )(
IInitActivationPropertiesIn * This,
/* [in] */ DWORD actvflags);
HRESULT ( STDMETHODCALLTYPE *SetClassInfo )(
IInitActivationPropertiesIn * This,
/* [unique][in] */ IUnknown *pUnkClassInfo);
HRESULT ( STDMETHODCALLTYPE *SetContextInfo )(
IInitActivationPropertiesIn * This,
/* [unique][in] */ IContext *pClientContext,
/* [in] */ IContext *pPrototypeContext);
HRESULT ( STDMETHODCALLTYPE *SetConstructFromStorage )(
IInitActivationPropertiesIn * This,
/* [unique][in] */ IStorage *pStorage);
HRESULT ( STDMETHODCALLTYPE *SetConstructFromFile )(
IInitActivationPropertiesIn * This,
/* [in] */ WCHAR *wszFileName,
/* [in] */ DWORD dwMode);
END_INTERFACE
} IInitActivationPropertiesInVtbl;
@@ -0,0 +1,38 @@
typedef struct IOpaqueDataInfoVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IOpaqueDataInfo * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IOpaqueDataInfo * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IOpaqueDataInfo * This);
HRESULT ( STDMETHODCALLTYPE *AddOpaqueData )(
IOpaqueDataInfo * This,
/* [in] */ OpaqueData *pData);
HRESULT ( STDMETHODCALLTYPE *GetOpaqueData )(
IOpaqueDataInfo * This,
/* [in] */ REFGUID guid,
/* [out] */ OpaqueData **pData);
HRESULT ( STDMETHODCALLTYPE *DeleteOpaqueData )(
IOpaqueDataInfo * This,
/* [in] */ REFGUID guid);
HRESULT ( STDMETHODCALLTYPE *GetOpaqueDataCount )(
IOpaqueDataInfo * This,
/* [out] */ ULONG *pulCount);
HRESULT ( STDMETHODCALLTYPE *GetAllOpaqueData )(
IOpaqueDataInfo * This,
/* [out] */ OpaqueData **prgData);
END_INTERFACE
} IOpaqueDataInfoVtbl;
@@ -0,0 +1,84 @@
typedef struct IPrivActivationPropertiesInVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IPrivActivationPropertiesIn * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IPrivActivationPropertiesIn * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IPrivActivationPropertiesIn * This);
HRESULT ( STDMETHODCALLTYPE *GetActivationID )(
IPrivActivationPropertiesIn * This,
/* [out] */ GUID *pActivationID);
HRESULT ( STDMETHODCALLTYPE *GetClassInfo )(
IPrivActivationPropertiesIn * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetClsctx )(
IPrivActivationPropertiesIn * This,
/* [out] */ DWORD *pclsctx);
HRESULT ( STDMETHODCALLTYPE *GetActivationFlags )(
IPrivActivationPropertiesIn * This,
/* [out] */ DWORD *pactvflags);
HRESULT ( STDMETHODCALLTYPE *AddRequestedIIDs )(
IPrivActivationPropertiesIn * This,
/* [in] */ DWORD cIfs,
/* [size_is][in] */ IID *rgIID);
HRESULT ( STDMETHODCALLTYPE *GetRequestedIIDs )(
IPrivActivationPropertiesIn * This,
/* [out] */ ULONG *pulCount,
/* [out] */ IID **prgIID);
HRESULT ( STDMETHODCALLTYPE *DelegateGetClassObject )(
IPrivActivationPropertiesIn * This,
/* [out] */ IActivationPropertiesOut **pActPropsOut);
HRESULT ( STDMETHODCALLTYPE *DelegateCreateInstance )(
IPrivActivationPropertiesIn * This,
/* [in] */ IUnknown *pUnkOuter,
/* [out] */ IActivationPropertiesOut **pActPropsOut);
HRESULT ( STDMETHODCALLTYPE *DelegateCIAndGetCF )(
IPrivActivationPropertiesIn * This,
/* [in] */ IUnknown *pUnkOuter,
/* [out] */ IActivationPropertiesOut **pActPropsOut,
/* [out] */ IClassFactory **ppCf);
HRESULT ( STDMETHODCALLTYPE *GetReturnActivationProperties )(
IPrivActivationPropertiesIn * This,
/* [in] */ IUnknown *pUnk,
/* [out] */ IActivationPropertiesOut **ppActOut);
HRESULT ( STDMETHODCALLTYPE *PrivGetReturnActivationProperties )(
IPrivActivationPropertiesIn * This,
/* [out] */ IPrivActivationPropertiesOut **ppActOut);
HRESULT ( STDMETHODCALLTYPE *GetCOMVersion )(
IPrivActivationPropertiesIn * This,
/* [out] */ COMVERSION *pVersion);
HRESULT ( STDMETHODCALLTYPE *GetClsid )(
IPrivActivationPropertiesIn * This,
/* [out] */ CLSID *pClsid);
HRESULT ( STDMETHODCALLTYPE *GetClientToken )(
IPrivActivationPropertiesIn * This,
/* [out] */ HANDLE *pHandle);
HRESULT ( STDMETHODCALLTYPE *GetDestCtx )(
IPrivActivationPropertiesIn * This,
/* [out] */ DWORD *pdwDestCtx);
END_INTERFACE
} IPrivActivationPropertiesInVtbl;
@@ -0,0 +1,58 @@
typedef struct IPrivActivationPropertiesOutVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IPrivActivationPropertiesOut * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IPrivActivationPropertiesOut * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IPrivActivationPropertiesOut * This);
HRESULT ( STDMETHODCALLTYPE *GetActivationID )(
IPrivActivationPropertiesOut * This,
/* [out] */ GUID *pActivationID);
HRESULT ( STDMETHODCALLTYPE *GetObjectInterface )(
IPrivActivationPropertiesOut * This,
/* [in] */ REFIID riid,
/* [in] */ DWORD actvflags,
/* [iid_is][out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *GetObjectInterfaces )(
IPrivActivationPropertiesOut * This,
/* [in] */ DWORD cIfs,
/* [in] */ DWORD actvflags,
/* [size_is][in] */ MULTI_QI *multiQi);
HRESULT ( STDMETHODCALLTYPE *RemoveRequestedIIDs )(
IPrivActivationPropertiesOut * This,
/* [in] */ DWORD cIfs,
/* [size_is][in] */ IID *rgIID);
HRESULT ( STDMETHODCALLTYPE *SetObjectInterfaces )(
IPrivActivationPropertiesOut * This,
/* [in] */ DWORD cIfs,
/* [in] */ IID *pIID,
/* [in] */ IUnknown *pUnk);
HRESULT ( STDMETHODCALLTYPE *SetMarshalledResults )(
IPrivActivationPropertiesOut * This,
/* [in] */ DWORD cIfs,
/* [in] */ IID *pIID,
/* [in] */ HRESULT *pHr,
/* [in] */ MInterfacePointer **pIntfData);
HRESULT ( STDMETHODCALLTYPE *GetMarshalledResults )(
IPrivActivationPropertiesOut * This,
/* [out] */ DWORD *pcIfs,
/* [out] */ IID **pIID,
/* [out] */ HRESULT **pHr,
/* [out] */ MInterfacePointer ***pIntfData);
END_INTERFACE
} IPrivActivationPropertiesOutVtbl;
@@ -0,0 +1,33 @@
typedef struct IScmReplyInfoVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IScmReplyInfo * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IScmReplyInfo * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IScmReplyInfo * This);
HRESULT ( STDMETHODCALLTYPE *SetResolverInfo )(
IScmReplyInfo * This,
/* [in] */ PRIV_RESOLVER_INFO *pResolverInfo); /* Need to be cast to PRIV_RESOLVER_INFO_LEGACY on old windows */
HRESULT ( STDMETHODCALLTYPE *GetResolverInfo )(
IScmReplyInfo * This,
/* [out] */ PRIV_RESOLVER_INFO **ppResolverInfo); /* Need to be cast to PRIV_RESOLVER_INFO_LEGACY on old windows */
HRESULT ( STDMETHODCALLTYPE *SetRemoteReplyInfo )(
IScmReplyInfo * This,
/* [in] */ REMOTE_REPLY_SCM_INFO *pRemoteReply);
HRESULT ( STDMETHODCALLTYPE *GetRemoteReplyInfo )(
IScmReplyInfo * This,
/* [out] */ REMOTE_REPLY_SCM_INFO **ppRemoteReply);
END_INTERFACE
} IScmReplyInfoVtbl;
@@ -0,0 +1,33 @@
typedef struct IScmRequestInfoVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IScmRequestInfo * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IScmRequestInfo * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IScmRequestInfo * This);
HRESULT ( STDMETHODCALLTYPE *SetScmInfo )(
IScmRequestInfo * This,
/* [in] */ PRIV_SCM_INFO *pScmInfo);
HRESULT ( STDMETHODCALLTYPE *GetScmInfo )(
IScmRequestInfo * This,
/* [out] */ PRIV_SCM_INFO **ppScmInfo);
HRESULT ( STDMETHODCALLTYPE *SetRemoteRequestInfo )(
IScmRequestInfo * This,
/* [in] */ REMOTE_REQUEST_SCM_INFO *pRemoteReq);
HRESULT ( STDMETHODCALLTYPE *GetRemoteRequestInfo )(
IScmRequestInfo * This,
/* [out] */ REMOTE_REQUEST_SCM_INFO **ppRemoteReq);
END_INTERFACE
} IScmRequestInfoVtbl;
@@ -0,0 +1,58 @@
typedef struct IStandardActivatorVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IStandardActivator * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IStandardActivator * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IStandardActivator * This);
HRESULT ( STDMETHODCALLTYPE *StandardGetClassObject )(
IStandardActivator * This,
/* [in] */ REFCLSID rclsid,
/* [in] */ DWORD dwClsCtx,
/* [in] */ COSERVERINFO *pServerInfo,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppv);
HRESULT ( STDMETHODCALLTYPE *StandardCreateInstance )(
IStandardActivator * This,
/* [in] */ REFCLSID Clsid,
/* [in] */ IUnknown *punkOuter,
/* [in] */ DWORD dwClsCtx,
/* [in] */ COSERVERINFO *pServerInfo,
/* [in] */ DWORD dwCount,
/* [size_is][in] */ MULTI_QI *pResults);
HRESULT ( STDMETHODCALLTYPE *StandardGetInstanceFromFile )(
IStandardActivator * This,
/* [in] */ COSERVERINFO *pServerInfo,
/* [in] */ CLSID *pclsidOverride,
/* [in] */ IUnknown *punkOuter,
/* [in] */ DWORD dwClsCtx,
/* [in] */ DWORD grfMode,
/* [in] */ OLECHAR *pwszName,
/* [in] */ DWORD dwCount,
/* [size_is][in] */ MULTI_QI *pResults);
HRESULT ( STDMETHODCALLTYPE *StandardGetInstanceFromIStorage )(
IStandardActivator * This,
/* [in] */ COSERVERINFO *pServerInfo,
/* [in] */ CLSID *pclsidOverride,
/* [in] */ IUnknown *punkOuter,
/* [in] */ DWORD dwClsCtx,
/* [in] */ IStorage *pstg,
/* [in] */ DWORD dwCount,
/* [size_is][in] */ MULTI_QI *pResults);
HRESULT ( STDMETHODCALLTYPE *Reset )(
IStandardActivator * This);
END_INTERFACE
} IStandardActivatorVtbl;
@@ -0,0 +1,28 @@
typedef struct ISystemActivatorVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
ISystemActivator * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
ISystemActivator * This);
ULONG ( STDMETHODCALLTYPE *Release )(
ISystemActivator * This);
HRESULT ( STDMETHODCALLTYPE *GetClassObject )(
ISystemActivator * This,
/* [unique][in] */ IActivationPropertiesIn *pActProperties,
/* [out] */ IActivationPropertiesOut **ppActProperties);
HRESULT ( STDMETHODCALLTYPE *CreateInstance )(
ISystemActivator * This,
/* [unique][in] */ IUnknown *pUnkOuter,
/* [unique][in] */ IActivationPropertiesIn *pActProperties,
/* [out] */ IActivationPropertiesOut **ppActProperties);
END_INTERFACE
} ISystemActivatorVtbl;
@@ -0,0 +1,57 @@
// Manually crafted from windows 10
typedef struct IProxyManagerVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
__RPC__in IProxyManager * This,
/* [in] */ __RPC__in REFIID riid,
/* [annotation][iid_is][out] */
_COM_Outptr_ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
__RPC__in IProxyManager * This);
ULONG ( STDMETHODCALLTYPE *Release )(
__RPC__in IProxyManager * This);
HRESULT ( STDMETHODCALLTYPE *CreateServer )(
IProxyManager * This,
REFCLSID * rclsid,
DWORD * clsctx,
PVOID *pv);
BOOL ( STDMETHODCALLTYPE *IsConnected )(
IProxyManager * This);
HRESULT ( STDMETHODCALLTYPE *LockConnection )(
IProxyManager * This,
BOOL fLock,
BOOL fLastUnlockReleases);
HRESULT ( STDMETHODCALLTYPE *Disconnect )(
IProxyManager * This);
HRESULT ( STDMETHODCALLTYPE *GetConnectionStatus )(
IProxyManager * This);
HRESULT ( STDMETHODCALLTYPE *ScalarDeletingDestructor )( // CPP code ? is this the real end of the Interface ?
IProxyManager * This);
HRESULT ( STDMETHODCALLTYPE *SetMapping )(
IProxyManager * This);
HRESULT ( STDMETHODCALLTYPE *GetMapping )(
IProxyManager * This);
IObjContext ( STDMETHODCALLTYPE *GetServerObjectContext )(
IProxyManager * This);
HRESULT ( STDMETHODCALLTYPE *GetWrapperForContex )(
IProxyManager * This,
IObjContext *pCtx,
IID *riid,
void **ppv);
END_INTERFACE
} IProxyManagerVtbl;
@@ -0,0 +1,28 @@
typedef struct IProxyServerIdentityVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IProxyServerIdentity * This,
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IProxyServerIdentity * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IProxyServerIdentity * This);
HRESULT ( STDMETHODCALLTYPE *GetServerProcessId )(
IProxyServerIdentity * This,
UINT *processId);
HRESULT ( STDMETHODCALLTYPE *GetServerProcessHandle )(
IProxyServerIdentity * This,
DWORD dwDesiredAccess,
INT bInheritHandle,
PVOID *phProcess) ;
END_INTERFACE
} IProxyServerIdentityVtbl;
@@ -0,0 +1,62 @@
typedef struct IChannelHookVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IChannelHook * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IChannelHook * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IChannelHook * This);
PVOID ( STDMETHODCALLTYPE *ClientGetSize )(
IChannelHook * This,
/* [in] */ REFGUID uExtent,
/* [in] */ REFIID riid,
/* [out] */ ULONG *pDataSize);
PVOID ( STDMETHODCALLTYPE *ClientFillBuffer )(
IChannelHook * This,
/* [in] */ REFGUID uExtent,
/* [in] */ REFIID riid,
/* [out][in] */ ULONG *pDataSize,
/* [in] */ void *pDataBuffer);
PVOID ( STDMETHODCALLTYPE *ClientNotify )(
IChannelHook * This,
/* [in] */ REFGUID uExtent,
/* [in] */ REFIID riid,
/* [in] */ ULONG cbDataSize,
/* [in] */ void *pDataBuffer,
/* [in] */ DWORD lDataRep,
/* [in] */ HRESULT hrFault);
PVOID ( STDMETHODCALLTYPE *ServerNotify )(
IChannelHook * This,
/* [in] */ REFGUID uExtent,
/* [in] */ REFIID riid,
/* [in] */ ULONG cbDataSize,
/* [in] */ void *pDataBuffer,
/* [in] */ DWORD lDataRep);
PVOID ( STDMETHODCALLTYPE *ServerGetSize )(
IChannelHook * This,
/* [in] */ REFGUID uExtent,
/* [in] */ REFIID riid,
/* [in] */ HRESULT hrFault,
/* [out] */ ULONG *pDataSize);
PVOID ( STDMETHODCALLTYPE *ServerFillBuffer )(
IChannelHook * This,
/* [in] */ REFGUID uExtent,
/* [in] */ REFIID riid,
/* [out][in] */ ULONG *pDataSize,
/* [in] */ void *pDataBuffer,
/* [in] */ HRESULT hrFault);
END_INTERFACE
} IChannelHookVtbl;
@@ -0,0 +1,39 @@
typedef struct IRpcChannelBufferVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IRpcChannelBuffer * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IRpcChannelBuffer * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IRpcChannelBuffer * This);
HRESULT ( STDMETHODCALLTYPE *GetBuffer )(
IRpcChannelBuffer * This,
/* [in] */ RPCOLEMESSAGE *pMessage,
/* [in] */ REFIID riid);
HRESULT ( STDMETHODCALLTYPE *SendReceive )(
IRpcChannelBuffer * This,
/* [out][in] */ RPCOLEMESSAGE *pMessage,
/* [out] */ ULONG *pStatus);
HRESULT ( STDMETHODCALLTYPE *FreeBuffer )(
IRpcChannelBuffer * This,
/* [in] */ RPCOLEMESSAGE *pMessage);
HRESULT ( STDMETHODCALLTYPE *GetDestCtx )(
IRpcChannelBuffer * This,
/* [out] */ DWORD *pdwDestContext,
/* [out] */ void **ppvDestContext);
HRESULT ( STDMETHODCALLTYPE *IsConnected )(
IRpcChannelBuffer * This);
END_INTERFACE
} IRpcChannelBufferVtbl;
@@ -0,0 +1,26 @@
typedef struct IRpcHelperVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IRpcHelper * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IRpcHelper * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IRpcHelper * This);
HRESULT ( STDMETHODCALLTYPE *GetDCOMProtocolVersion )(
IRpcHelper * This,
/* [out] */ DWORD *pComVersion);
HRESULT ( STDMETHODCALLTYPE *GetIIDFromOBJREF )(
IRpcHelper * This,
/* [in] */ void *pObjRef,
/* [out] */ IID **piid);
END_INTERFACE
} IRpcHelperVtbl;
@@ -0,0 +1,29 @@
typedef struct IRpcOptionsVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IRpcOptions * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void **ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IRpcOptions * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IRpcOptions * This);
HRESULT ( STDMETHODCALLTYPE *Set )(
IRpcOptions * This,
/* [in] */ IUnknown *pPrx,
/* [in] */ DWORD dwProperty,
/* [in] */ ULONG_PTR dwValue);
HRESULT ( STDMETHODCALLTYPE *Query )(
IRpcOptions * This,
/* [in] */ IUnknown *pPrx,
/* [in] */ DWORD dwProperty,
/* [out] */ ULONG_PTR *pdwValue);
END_INTERFACE
} IRpcOptionsVtbl;
@@ -0,0 +1,45 @@
typedef struct IRpcStubBufferVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
IRpcStubBuffer * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ PVOID *ppvObject);
ULONG ( STDMETHODCALLTYPE *AddRef )(
IRpcStubBuffer * This);
ULONG ( STDMETHODCALLTYPE *Release )(
IRpcStubBuffer * This);
HRESULT ( STDMETHODCALLTYPE *Connect )(
IRpcStubBuffer * This,
/* [in] */ IUnknown *pUnkServer);
PVOID ( STDMETHODCALLTYPE *Disconnect )(
IRpcStubBuffer * This);
HRESULT ( STDMETHODCALLTYPE *Invoke )(
IRpcStubBuffer * This,
/* [in] */ RPCOLEMESSAGE *_prpcmsg,
/* [in] */ IRpcChannelBuffer *_pRpcChannelBuffer);
// IRpcStubBuffer *
PVOID ( STDMETHODCALLTYPE *IsIIDSupported )(
IRpcStubBuffer * This,
/* [in] */ REFIID riid);
ULONG ( STDMETHODCALLTYPE *CountRefs )(
IRpcStubBuffer * This);
HRESULT ( STDMETHODCALLTYPE *DebugServerQueryInterface )(
IRpcStubBuffer * This,
PVOID *ppv);
PVOID ( STDMETHODCALLTYPE *DebugServerRelease )(
IRpcStubBuffer * This,
PVOID pv);
END_INTERFACE
} IRpcStubBufferVtbl;
+29 -8
View File
@@ -19,8 +19,8 @@ class COMInterface(ctypes.c_void_p):
# So COMInterface completely bypass the HRESULT
# return value check on restype by setting the restype to COMHRESULT
# But we add the 'errcheck' callbakc capacity for all COMInterface and subclasses
# So the default implem of the callbakc must have the same behavior as
# But we add the 'errcheck' callback capacity for all COMInterface and subclasses
# So the default implem of the callback must have the same behavior as
# standard HRESULT restype.
# This is why default errcheck callback call ctypes._check_HRESULT
def _default_errcheck(self, result, func, args):
@@ -42,12 +42,33 @@ class COMInterface(ctypes.c_void_p):
description = "<NULL>" if not self.value else ""
return "<{0}{1} at {2:#x}>".format(type(self).__name__, description, id(self))
# Simplified API for QueryInterface for interface embeding there IID
def query(self, interfacetype):
interface = interfacetype()
self.QueryInterface(interface.IID, interface)
return interface
# Simplified API for QueryInterface for interface embeding their IID
# Or for string/Obj
def query(self, interface, target=None):
if isinstance(interface, str): # We have a GUID
interface_iid = IID.from_string(interface)
if target is None:
target = IUnknown()
elif issubclass(interface, COMInterface): # We have a PFW COM interface
interface_iid = interface.IID
if target is None:
target = interface() # Use an instance of the ComInterface as target of the QueryInterface
else:
# We have something else (A gdef.GUID probably)
interface_iid = interface
if target is None:
target = IUnknown()
self.QueryInterface(interface_iid, target)
return target
def marshal(self, target_iid=None, destination=MSHCTX_NOSHAREDMEM, flags=MSHLFLAGS_NORMAL):
if target_iid is None:
target_iid = self.IID
mystream = windows.com.MemoryIStream.create()
windows.winproxy.CoMarshalInterface(mystream, target_iid, self, destination, 0, flags)
mystream.seek(0)
buffer = mystream.read(0xffffffff) # Todo: release stuff
return buffer
@@ -0,0 +1,29 @@
#define ORPCF_NULL ( 0 )
#define ORPCF_LOCAL ( 1 )
#define ORPCF_RESERVED1 ( 2 )
#define ORPCF_RESERVED2 ( 4 )
#define ORPCF_RESERVED3 ( 8 )
#define ORPCF_RESERVED4 ( 16 )
#define ORPCF_INPUT_SYNC ORPCF_RESERVED1
#define ORPCF_ASYNC ORPCF_RESERVED2
#define ORPCF_DYNAMIC_CLOAKING ORPCF_RESERVED3
#define ORPCF_REJECTED ORPCF_RESERVED1
#define ORPCF_RETRY_LATER ORPCF_RESERVED2
#define OBJREF_SIGNATURE ( 0x574f454d )
#define OBJREF_STANDARD ( 0x1 )
#define OBJREF_HANDLER ( 0x2 )
#define OBJREF_CUSTOM ( 0x4 )
#define OBJREF_EXTENDED ( 0x8 )
#define SORF_OXRES1 ( 0x1 )
#define SORF_OXRES2 ( 0x20 )
#define SORF_OXRES3 ( 0x40 )
#define SORF_OXRES4 ( 0x80 )
#define SORF_OXRES5 ( 0x100 )
#define SORF_OXRES6 ( 0x200 )
#define SORF_OXRES7 ( 0x400 )
#define SORF_OXRES8 ( 0x800 )
#define SORF_NULL ( 0 )
#define SORF_NOPING ( 0x1000 )
@@ -135,4 +135,31 @@ PVOID SysAllocString(
VOID SysFreeString(
[in, optional] BSTR bstrString
);
);
HRESULT CreateStreamOnHGlobal(
[in] HGLOBAL hGlobal,
[in] BOOL fDeleteOnRelease,
[out] LPSTREAM *ppstm
);
HRESULT GetHGlobalFromStream(
[in] LPUNKNOWN pstm,
[out] HGLOBAL *phglobal
);
HRESULT CoMarshalInterface(
[in] LPUNKNOWN pStm,
[in] REFIID riid,
[in] LPUNKNOWN pUnk,
[in] DWORD dwDestContext,
[in, optional] LPVOID pvDestContext,
[in] DWORD mshlflags
);
HRESULT CoUnmarshalInterface(
[in] PVOID pStm,
[in] REFIID riid,
[out] LPVOID *ppv
);
@@ -109,28 +109,6 @@ BOOL WINAPI SymEnumSymbolsEx(
_In_ DWORD Options
);
BOOL WINAPI SymEnumTypes(
_In_ HANDLE hProcess,
_In_ ULONG64 BaseOfDll,
_In_ PVOID EnumSymbolsCallback,
_In_ PVOID UserContext
);
BOOL WINAPI SymEnumTypesByName(
_In_ HANDLE hProcess,
_In_ ULONG64 BaseOfDll,
_In_ PCSTR mask,
_In_ PVOID EnumSymbolsCallback,
_In_ PVOID UserContext
);
BOOL WINAPI SymEnumTypesByNameW(
[in] HANDLE hProcess,
[in] ULONG64 BaseOfDll,
[in, optional] PCWSTR mask,
[in] PVOID EnumSymbolsCallback,
[in] PVOID UserContext
);
BOOL WINAPI SymEnumerateModules64(
_In_ HANDLE hProcess,
@@ -438,4 +416,35 @@ BOOL SymSetSearchPath(
BOOL SymSetSearchPathW(
HANDLE hProcess,
PCWSTR SearchPath
);
BOOL SymEnumTypes(
[in] HANDLE hProcess,
[in] ULONG64 BaseOfDll,
[in] PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
[in, optional] PVOID UserContext
);
BOOL SymEnumTypesW(
[in] HANDLE hProcess,
[in] ULONG64 BaseOfDll,
[in] PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
[in, optional] PVOID UserContext
);
BOOL SymEnumTypesByName(
[in] HANDLE hProcess,
[in] ULONG64 BaseOfDll,
[in, optional] PCSTR mask,
[in] PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
[in] PVOID UserContext
);
BOOL SymEnumTypesByNameW(
[in] HANDLE hProcess,
[in] ULONG64 BaseOfDll,
[in, optional] PCWSTR mask,
[in] PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
[in] PVOID UserContext
);
File diff suppressed because it is too large Load Diff
+18 -1
View File
@@ -22,6 +22,8 @@ KAFFINITY = ULONG_PTR
KPRIORITY = LONG
INTERNET_PORT = WORD
CHAR = c_char
PCHAR = POINTER(CHAR)
UCHAR = c_char
@@ -38,6 +40,7 @@ LPCH = c_char_p
LPWCH = c_wchar
BSTR = c_wchar_p
OLECHAR = c_wchar
SNB = POINTER(POINTER(OLECHAR))
POLECHAR = c_wchar_p
PZZWSTR = c_wchar_p
PUCHAR = POINTER(UCHAR)
@@ -74,7 +77,7 @@ ALG_ID = UINT
DISPID = LONG
MEMBERID = DISPID
LRESULT = LONG_PTR
LPUNKNOWN = POINTER(PVOID)
LPUNKNOWN = PVOID
LPPOINT = POINTER(POINT)
LPRECT = POINTER(RECT)
SPC_UUID = BYTE * 16
@@ -85,6 +88,10 @@ FILEOP_FLAGS = WORD
NET_API_STATUS = DWORD
// 2 custom PFW defintions for bitness-forces structures
PVOID32 = DWORD
PVOID64 = DWORD64
NCRYPT_HANDLE = ULONG_PTR
NCRYPT_PROV_HANDLE = ULONG_PTR
NCRYPT_KEY_HANDLE = ULONG_PTR
@@ -202,6 +209,16 @@ RPCOLEDATAREP = ULONG
HREFTYPE = DWORD
SFGAOF = ULONG
ID = ULONG64
MID = ID // Machine Identifier
OXID = ID // Object Exporter Identifier
OID = ID // Object Identifer
SETID = ID // Ping Set Identifier
// Interface pointer definition
LPSTREAM = PVOID # Istream*
/* SOCKET STUFF */
GROUP = UINT
@@ -291,38 +291,6 @@ typedef struct _REMOTE_PORT_VIEW {
PVOID ViewBase;
} REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
typedef struct tagCOMVERSION
{
USHORT MajorVersion;
USHORT MinorVersion;
} COMVERSION;
typedef struct tagORPCTHIS {
COMVERSION version;
ULONG flags;
ULONG reserved1;
GUID cid;
PVOID extensions; // [unique] ORPC_EXTENT_ARRAY *extensions;
} ORPCTHIS;
typedef struct __MIDL_XmitDefs_0001 {
GUID asyncOperationId;
ULONG64 oxidClientProcessNA;
GUID originalClientLogicalThreadId;
ULONG64 uClientCausalityTraceId;
} MIDL_XmitDefs_0001;
typedef struct _LOCALTHIS {
DWORD dwFlags;
DWORD dwClientThread;
GUID passthroughTraceActivity;
GUID callTraceActivity;
MIDL_XmitDefs_0001 asyncRequestBlock;
DWORD reserved;
PVOID pTouchedAstaArray; // Ptr32 __MIDL_XmitDefs_0002
} LOCALTHIS;
@@ -153,10 +153,3 @@ typedef struct __tagVARIANT {
_ANON_TMP_variant_sub_union _VARIANT_NAME_3;
} _tagVARIANT, VARIANT, VARIANTARG, *LPVARIANT, *LPVARIANTARG;
typedef enum tagCOMSD {
SD_LAUNCHPERMISSIONS = 0,
SD_ACCESSPERMISSIONS = 1,
SD_LAUNCHRESTRICTIONS = 2,
SD_ACCESSRESTRICTIONS = 3
} COMSD;
@@ -0,0 +1,427 @@
typedef enum tagCOMSD {
SD_LAUNCHPERMISSIONS = 0,
SD_ACCESSPERMISSIONS = 1,
SD_LAUNCHRESTRICTIONS = 2,
SD_ACCESSRESTRICTIONS = 3
} COMSD;
typedef struct tagOpaqueData
{
GUID guid;
ULONG dataLength;
ULONG reserved1;
ULONG reserved2;
/*[size_is((dataLength+7)&~7)]*/ BYTE *data;
} OpaqueData;
typedef struct tagSTDOBJREF
{
ULONG flags; // STDOBJREF flags (see above)
ULONG cPublicRefs; // count of references passed
OXID oxid; // oxid of server with this oid
OID oid; // oid of object with this ipid
IPID ipid; // ipid of Interface
} STDOBJREF;
typedef struct tagDATAELEMENT
{
GUID dataID;
ULONG cbSize;
ULONG cbRounded;
BYTE Data[ 1 ];
} DATAELEMENT, *PDATAELEMENT;
typedef struct tagOBJREFDATA
{
ULONG nElms;
PDATAELEMENT *ppElmArray;
} OBJREFDATA;
typedef struct tagDUALSTRINGARRAY
{
USHORT wNumEntries; // Number of entries in array.
USHORT wSecurityOffset; // Offset of security info.
// The array contains two parts, a set of STRINGBINDINGs
// and a set of SECURITYBINDINGs. Each set is terminated by an
// extra zero. The shortest array contains four zeros.
/*[size_is(wNumEntries)]*/ USHORT aStringArray[1];
} DUALSTRINGARRAY;
typedef struct tagOBJREF
{
ULONG signature;
ULONG flags;
GUID iid;
union
{
struct
{
STDOBJREF std;
DUALSTRINGARRAY saResAddr;
} u_standard;
struct
{
STDOBJREF std;
CLSID clsid;
DUALSTRINGARRAY saResAddr;
} u_handler;
struct
{
CLSID clsid;
ULONG cbExtension;
ULONG size;
BYTE *pData;
} u_custom;
struct
{
STDOBJREF std;
OBJREFDATA *pORData;
DUALSTRINGARRAY saResAddr;
} u_extended;
} u_objref;
} OBJREF;
typedef struct tagCOMVERSION
{
USHORT MajorVersion;
USHORT MinorVersion;
} COMVERSION;
typedef struct tagORPC_EXTENT {
_GUID id;
ULONG size;
BYTE data[1];
} ORPC_EXTENT, PORPC_EXTENT;
typedef struct tagORPC_EXTENT_ARRAY {
ULONG size;
ULONG reserved;
PORPC_EXTENT *extent;
} ORPC_EXTENT_ARRAY;
typedef struct tagORPCTHIS {
COMVERSION version;
ULONG flags;
ULONG reserved1;
GUID cid;
PVOID extensions; // [unique] ORPC_EXTENT_ARRAY *extensions;
} ORPCTHIS;
typedef struct tagORPCTHIS32 {
COMVERSION version;
ULONG flags;
ULONG reserved1;
GUID cid;
PVOID32 extensions; // [unique] ORPC_EXTENT_ARRAY *extensions;
} ORPCTHIS32;
typedef struct tagOXID_INFO
{
DWORD dwTid; // thread id of object exporter
DWORD dwPid; // process id of object exporter
DWORD dwAuthnHint; // authentication hint
COMVERSION version; // COM Version of server
IPID ipidRemUnknown; // IRemUnknown IPID for object exporter
DWORD dwFlags; // miscellaneous flags
/*[unique]*/ DUALSTRINGARRAY *psa; // protocol and security info
} OXID_INFO;
enum tagCPFLAGS
{
CPFLAG_NONE = 0,
CPFLAG_PROPAGATE = 0x1,
CPFLAG_EXPOSE = 0x2,
CPFLAG_ENVOY = 0x4,
CPFLAG_MONITORSTUB = 0x8,
CPFLAG_MONITORPROXY = 0x10,
CPFLAG_DONTCOMPARE = 0x20
} CPFLAGS;
typedef struct tagContextProperty
{
GUID policyId;
CPFLAGS flags;
PVOID pUnk; // IUnknown
} ContextProperty;
typedef struct _PRIV_SCM_INFO
{
LONG Apartment;
WCHAR *pwszWinstaDesktop;
ULONG64 ProcessSignature;
WCHAR *pEnvBlock;
DWORD EnvBlockLength;
} PRIV_SCM_INFO;
typedef struct _REMOTE_REQUEST_SCM_INFO
{
DWORD ClientImpLevel;
USHORT cRequestedProtseqs;
USHORT *pRequestedProtseqs;
} REMOTE_REQUEST_SCM_INFO;
// From: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/21781a97-cb45-4655-82b0-02c4a1584603
typedef struct tagMInterfacePointer {
ULONG ulCntData;
/*[size_is(ulCntData)]*/ BYTE abData[1];
} MInterfacePointer, *PMInterfacePointer;
typedef enum tagACTIVATION_STAGE
{
CLIENT_CONTEXT_STAGE = 1,
CLIENT_MACHINE_STAGE = 2,
SERVER_MACHINE_STAGE = 3,
SERVER_PROCESS_STAGE = 4,
SERVER_CONTEXT_STAGE = 5
} ACTIVATION_STAGE;
typedef enum tagThreadingModel
{
ApartmentThreaded = 0,
FreeThreaded = 1 ,
SingleThreaded = 2 ,
BothThreaded = 3 ,
NeutralThreaded = 4
} ThreadingModel;
typedef enum tagLocalServerType
{
LocalServerType16 = 0,
LocalServerType32 = 1
} LocalServerType;
typedef struct tagRPCOLEMESSAGE
{
PVOID reserved1;
RPCOLEDATAREP dataRepresentation;
PVOID Buffer;
ULONG cbBuffer;
ULONG iMethod;
PVOID reserved2[5];
ULONG rpcFlags;
} RPCOLEMESSAGE, *PRPCOLEMESSAGE;
// https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/1d6a8a54-b115-4148-815a-af0258931948
typedef struct tagREMQIRESULT
{
HRESULT hResult;
STDOBJREF std;
} REMQIRESULT, *PREMQIRESULT;
typedef struct tagREMINTERFACEREF
{
IPID ipid;
ULONG cPublicRefs;
ULONG cPrivateRefs;
} REMINTERFACEREF;
typedef enum tagSTREAM_SEEK {
STREAM_SEEK_SET = 0,
STREAM_SEEK_CUR = 1,
STREAM_SEEK_END = 2
} STREAM_SEEK;
typedef enum tagMSHCTX {
MSHCTX_LOCAL = 0,
MSHCTX_NOSHAREDMEM = 1,
MSHCTX_DIFFERENTMACHINE = 2,
MSHCTX_INPROC = 3,
MSHCTX_CROSSCTX = 4,
MSHCTX_CONTAINER
} MSHCTX;
typedef struct _PRIV_RESOLVER_INFO_LEGACY
{
OXID OxidServer;
DUALSTRINGARRAY *pServerORBindings;
OXID_INFO OxidInfo;
MID LocalMidOfRemote;
DWORD DllServerModel;
WCHAR *pwszDllServer;
BOOL FoundInROT;
} PRIV_RESOLVER_INFO_LEGACY, *PPRIV_RESOLVER_INFO_LEGACY;
typedef struct _REMOTE_REPLY_SCM_INFO
{
OXID Oxid;
DUALSTRINGARRAY *pdsaOxidBindings;
IPID ipidRemUnknown;
DWORD authnHint;
COMVERSION serverVersion;
} REMOTE_REPLY_SCM_INFO, *PREMOTE_REPLY_SCM_INFO;
typedef struct CONTAINER_EXTENT {
UINT id;
UINT version;
UINT size;
BYTE data[1];
};
typedef struct CONTAINER_EXTENT_ARRAY {
UINT size;
UINT reserved;
CONTAINER_EXTENT *extent;
};
typedef struct HSTRING__ {
INT unused;
};
typedef struct CONTAINERVERSION {
UINT version;
UINT64 capabilityFlags;
CONTAINER_EXTENT_ARRAY *extensions;
};
typedef struct _MIDL_ILocalObjectExporter_0007 {
ULONG dwTid;
ULONG dwPid;
ULONG dwAuthnHint;
tagCOMVERSION dcomVersion;
CONTAINERVERSION containerVersion;
_GUID ipidRemUnknown;
ULONG dwFlags;
tagDUALSTRINGARRAY *psa;
_GUID guidProcessIdentifier;
UINT64 processHostId;
INT clientDependencyBehavior;
HSTRING__ *packageFullName;
HSTRING__ *userSid;
HSTRING__ *appcontainerSid;
UINT64 primaryOxid;
_GUID primaryIpidRemUnknown;
} MIDL_ILocalObjectExporter_0007;
typedef struct _PRIV_RESOLVER_INFO {
UINT64 OxidServer;
tagDUALSTRINGARRAY *pServerORBindings;
MIDL_ILocalObjectExporter_0007 OxidInfo;
UINT64 LocalMidOfRemote;
INT FoundInROT;
} PRIV_RESOLVER_INFO, *PPRIV_RESOLVER_INFO;
typedef struct _MIDL_XmitDefs_0001 {
GUID asyncOperationId;
ULONG64 oxidClientProcessNA;
GUID originalClientLogicalThreadId;
ULONG64 uClientCausalityTraceId;
} MIDL_XmitDefs_0001;
typedef struct _LOCALTHIS {
DWORD dwFlags;
DWORD dwClientThread;
GUID passthroughTraceActivity;
GUID callTraceActivity;
MIDL_XmitDefs_0001 asyncRequestBlock;
DWORD reserved;
PVOID pTouchedAstaArray; // Ptr32 __MIDL_XmitDefs_0002
} LOCALTHIS;
typedef struct _LOCALTHIS32 {
DWORD dwFlags;
DWORD dwClientThread;
GUID passthroughTraceActivity;
GUID callTraceActivity;
MIDL_XmitDefs_0001 asyncRequestBlock;
DWORD reserved;
PVOID32 pTouchedAstaArray; // Ptr32 __MIDL_XmitDefs_0002
} LOCALTHIS32;
/* LOCALTHAT & sub structures */
typedef struct _MIDL_XmitDefs_0007 {
INT pointOfFailure;
HRESULT hrFailure;
ULONG sizeOfMarshaledErrorInfo;
ULONG reserved;
BYTE *pMarshaledErrorInfo;
};
typedef struct _MIDL_XmitDefs_0005 {
ULONG sizeOfMarshaledResults;
ULONG reserved;
BYTE *pMarshaledResults;
};
typedef struct _MIDL_XmitDefs_0008 {
INT outcome;
_MIDL_XmitDefs_0005 successDetails;
_MIDL_XmitDefs_0007 failureDetails;
};
typedef struct _MIDL_XmitDefs_0010 {
ULONG asyncStatus;
ULONG reserved1;
UINT64 uServerCausalityTraceId;
_GUID completionTraceActivity;
ULONG reserved2;
_MIDL_XmitDefs_0008 *pOutcomeDetails;
};
typedef struct CONTAINERTHAT {
UINT64 responseFlags;
_GUID unassignedPassthroughGuid_1;
_GUID unassignedPassthroughGuid_2;
_GUID unassignedPassthroughGuid_3;
_GUID unassignedPassthroughGuid_4;
_GUID reservedGuid_1;
_GUID reservedGuid_2;
_GUID reservedGuid_3;
_GUID reservedGuid_4;
UINT64 unassignedPassthroughUint64_1;
UINT64 unassignedPassthroughUint64_2;
UINT64 unassignedPassthroughUint64_3;
UINT64 unassignedPassthroughUint64_4;
UINT64 marshalingSetId;
UINT64 reservedUint64_2;
UINT64 reservedUint64_3;
UINT64 reservedUint64_4;
UINT reservedUint32;
CONTAINER_EXTENT_ARRAY *extensions;
};
typedef struct _LOCALTHAT {
UINT64 marshalingSetId;
ULONG reserved;
_MIDL_XmitDefs_0010 *pAsyncResponseBlock;
CONTAINER_EXTENT *containerErrorInformation;
CONTAINERTHAT *containerPassthroughData;
} LOCALTHAT;
typedef struct _LOCALTHAT32 {
UINT64 marshalingSetId;
ULONG reserved;
PVOID32 pAsyncResponseBlock;
PVOID32 containerErrorInformation;
PVOID32 containerPassthroughData;
} LOCALTHAT32;
typedef struct tagORPCTHAT {
ULONG flags;
tagORPC_EXTENT_ARRAY *extensions;
} ORPCTHAT;
typedef struct ORPCTHAT32 {
ULONG flags;
PVOID32 extensions; // tagORPC_EXTENT_ARRAY tagORPC_EXTENT_ARRAY
} ORPCTHAT32;
@@ -5,4 +5,4 @@ typedef struct _GUID {
USHORT Data2;
USHORT Data3;
BYTE Data4[ 8 ];
} GUID, IID, CLSID, *REFIID, *REFCLSID, *LPGUID, *REFGUID, *LPCLSID, *LPCGUID;
} GUID, IID, CLSID, *REFIID, *REFCLSID, *LPGUID, *REFGUID, *LPCLSID, *LPCGUID, IPID, CID, *REFIPID;
@@ -130,7 +130,7 @@ typedef struct _IMAGEHLP_MODULEW64 {
WCHAR LoadedImageName[256];
WCHAR LoadedPdbName[256];
DWORD CVSig;
WCHAR *CVData[MAX_PATH * 3];
WCHAR CVData[MAX_PATH * 3]; // Typo in the documentation which says WCHAR *CVData[MAX_PATH * 3];
DWORD PdbSig;
GUID PdbSig70;
DWORD PdbAge;
@@ -1730,15 +1730,12 @@ typedef struct _OBJECT_ATTRIBUTES {
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
typedef union _TMP_UNION_IO_STATUS_BLOCK
{
NTSTATUS Status;
PVOID Pointer;
}TMP_UNION_IO_STATUS_BLOCK;
typedef struct _IO_STATUS_BLOCK {
TMP_UNION_IO_STATUS_BLOCK DUMMYUNIONNAME;
ULONG_PTR Information;
union {
NTSTATUS Status;
PVOID Pointer;
};
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
@@ -0,0 +1,23 @@
OLD_IStream = IStream
class IStream(OLD_IStream):
def read(self, size):
buffer = (CHAR * size)()
size_read = ULONG()
self.Read(buffer, size, size_read)
return buffer[:size_read.value]
def write(self, data):
assert isinstance(data, bytes), "IStream.write() only accept bytes but {0} was passed".format(type(data))
written = ULONG()
self.Write(data, len(data), written)
return written.value
def seek(self, position, origin=STREAM_SEEK_SET):
newpos = ULARGE_INTEGER()
self.Seek(position, origin, newpos)
return newpos.value
+1 -1
View File
@@ -22,7 +22,7 @@ class _GUID(INITIAL_GUID):
self.name = None
if self.name is None:
return '<GUID "{0}">'.format(self.strid.upper())
return '<GUID "{0}({1})">'.format(self.strid.upper(), self.name)
return '<GUID "{0}" ({1})>'.format(self.strid.upper(), self.name)
__sprint__ = __repr__
@@ -0,0 +1,57 @@
INITIAL_tagDUALSTRINGARRAY = tagDUALSTRINGARRAY
class tagDUALSTRINGARRAY(INITIAL_tagDUALSTRINGARRAY):
@property
def rawbuffer(self):
array_size = self.wNumEntries
array_type = self.aStringArray._type_
new_buffer_type = (array_type * array_size)
buffer = new_buffer_type.from_address(ctypes.addressof(self.aStringArray))
return buffer
@property
def bidings(self):
rawbuffer = self.rawbuffer
rawarray = rawbuffer[:] # Allow to find 0 in USHORT without overlap
rawbytes = bytearray(rawbuffer) # Allow to access to bytes to utf-16-le decode
results = []
next_start = 0
# STRINGBINDING documentation says that it starts with a USHORT wTowerId
# But i don't see it in our response.. (local response ?)
# So ignore it for now
for i in range(100):
current_index = rawarray.index(0, next_start)
new_entry = rawbytes[next_start * 2: current_index * 2]
if not new_entry:
return results
results.append(new_entry.decode("utf-16-le")) # Does not handle full unicode I think but..
next_start = current_index + 1
# Should not happen
raise ValueError("Could not parse DUALSTRINGARRAY")
@property
def security_bidings(self):
rawbuffer = self.rawbuffer
rawarray = rawbuffer[self.wSecurityOffset:]
rawbytes = bytearray(rawbuffer)[self.wSecurityOffset * 2:]
results = []
next_start = 0
for i in range(100):
wAuthnSvc = rawarray[next_start]
if wAuthnSvc == 0:
return results
reserved = rawarray[next_start + 1]
current_index = rawarray.index(0, next_start + 2)
new_entry = rawbytes[(next_start + 2) * 2:current_index * 2]
results.append((wAuthnSvc, reserved, new_entry.decode("utf-16-le"))) # Does not handle full unicode I think but..
next_start = current_index + 1
# Should not happen
raise ValueError("Could not parse DUALSTRINGARRAY security bidings")
@@ -0,0 +1,6 @@
INITIAL_tagMInterfacePointer = tagMInterfacePointer
class tagMInterfacePointer(INITIAL_tagMInterfacePointer):
@property
def objref(self):
return OBJREF.from_address(ctypes.addressof(self.abData))
+25 -3
View File
@@ -399,6 +399,10 @@ class NtStatusDocGenerator(NoTemplatedGenerator):
for value, name, descr in file.data:
self.emitline(".. autodata:: {name}".format(name=name))
EXTENDED_INTERFACE_FILE = glob.glob(pjoin(SCRIPT_DIR, "extended_interfaces", "*.py"))
EXTENDED_INTERFACE = [os.path.basename(filename)[:-len(".py")] for filename in EXTENDED_INTERFACE_FILE]
class COMCtypesGenerator(CtypesGenerator):
IGNORED_INTERFACE = set(COMParsedFile.IGNORED_INTERFACE)
def __init__(self, *args, **kwargs):
@@ -412,12 +416,15 @@ class COMCtypesGenerator(CtypesGenerator):
def parse_iid_file(self, filename):
data = open(filename).read()
for line in data.split("\n"):
if line.strip().startswith("//"):
continue # Commentaires du pauvre
name, iid = line.split("|")
self.iids_def[name] = self.parse_iid(iid), iid
def generate_files(self, files):
self.generate_known_iid_list()
# We generate COM interface in 2 step
# 1) The Class intself with the IDD
# 1) The Class itself with the IDD
# 2) The function list after all class we generated
# - This allow COM function to refer the interface in their def :)
for file in files:
@@ -425,19 +432,34 @@ class COMCtypesGenerator(CtypesGenerator):
for file in files:
self.generate_com_interface_functions(file.data)
def generate_known_iid_list(self):
# Generate list of known IID at the start of the file
# This take quite some memory/time when starting PFW
# for interface_name, (iid_python, iid_str) in self.iids_def.items():
# cls_format_param = {"name": interface_name, "iid_python" : iid_python, "iid_str": iid_str}
# self.emitline('IID_{name} = generate_IID({iid_python}, name="{name}", strid="{iid_str}")'.format(**cls_format_param))
pass
def generate_com_interface_class_iid(self, cominterface):
name = cominterface.name
if cominterface.iid is not None:
iid_str = cominterface.iid
iid_python = self.parse_iid(iid_str)
else:
print("Lookup of IID for <{0}>".format(cominterface.name))
iid_python, iid_str = self.iids_def[cominterface.name]
cls_format_param = {"name": name, "iid_python" : iid_python, "iid_str": iid_str}
cls_format_param = {"name": cominterface.name, "iid_python" : iid_python, "iid_str": iid_str}
self.emitline("class {name}(COMInterface):".format(**cls_format_param))
self.emitline(' IID = generate_IID({iid_python}, name="{name}", strid="{iid_str}")'.format(**cls_format_param))
# self.emitline(' IID = IID_{name}'.format(name=cominterface.name)) # If we accept to have generate_known_iid_list()
self.emitline('')
# Emit the extended interface definition if existing
if cominterface.name in EXTENDED_INTERFACE:
extended_interface_filename = from_here(os.path.join("extended_interfaces", "{0}.py".format(cominterface.name)))
print("Including extended COM Interface definition for <{0}>".format(cominterface.name))
with open(extended_interface_filename) as f:
self.emitline(f.read())
def generate_com_interface_functions(self, cominterface):
name = cominterface.name