Merge pull request #61 from hakril/comupdate

Add multiple ctypes defintions
This commit is contained in:
hakril
2024-11-04 17:03:23 +01:00
committed by GitHub
80 changed files with 9203 additions and 564 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 )
@@ -258,15 +258,15 @@
#define FAX_JOB_MANAGE (0x0040)
// COM Specific Access Rights (Custom NAME)
// Based on internet search for "COM Access Mask"
// COM Specific Access Rights
// Based on https://learn.microsoft.com/en-us/windows/win32/com/access-control-lists-for-com
#define COM_EXECUTE (0x0001)
#define COM_EXECUTE_LOCAL (0x0002)
#define COM_EXECUTE_REMOTE (0x0004)
#define COM_ACTIVATE_LOCAL (0x0008)
#define COM_ACTIVATE_REMOTE (0x0010)
#define COM_RIGHTS_EXECUTE (0x0001)
#define COM_RIGHTS_EXECUTE_LOCAL (0x0002)
#define COM_RIGHTS_EXECUTE_REMOTE (0x0004)
#define COM_RIGHTS_ACTIVATE_LOCAL (0x0008)
#define COM_RIGHTS_ACTIVATE_REMOTE (0x0010)
//
// Section Access Rights.
@@ -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
+488 -55
View File
@@ -2,6 +2,24 @@
Interfaces
----------
.. class:: IActivationStageInfo
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: SetStageAndIndex
.. method:: GetStage
.. method:: GetIndex
.. class:: ICallFactory
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: CreateCall
.. class:: ICallFrame
.. method:: QueryInterface
@@ -57,6 +75,42 @@ Interfaces
.. method:: GetRegisteredSink
.. class:: IClassFactory
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: CreateInstance
.. method:: LockServer
.. class:: IClientSecurity
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: QueryBlanket
.. method:: SetBlanket
.. method:: CopyProxy
.. class:: IComCatalog
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetClassInfo
.. method:: GetApplicationInfo
.. method:: GetProcessInfo
.. method:: GetServerGroupInfo
.. method:: GetRetQueueInfo
.. method:: GetApplicationInfoForExe
.. method:: GetTypeLibrary
.. method:: GetInterfaceInfo
.. method:: FlushCache
.. method:: GetClassInfoFromProgId
.. class:: IDispatch
.. method:: QueryInterface
@@ -79,6 +133,54 @@ Interfaces
.. method:: Clone
.. class:: IInternalUnknown
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: QueryInternalInterface
.. class:: IMarshal
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetUnmarshalClass
.. method:: GetMarshalSizeMax
.. method:: MarshalInterface
.. method:: UnmarshalInterface
.. method:: ReleaseMarshalData
.. method:: DisconnectObject
.. class:: IMoniker
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetClassID
.. method:: IsDirty
.. method:: Load
.. method:: Save
.. method:: GetSizeMax
.. method:: BindToObject
.. method:: BindToStorage
.. method:: Reduce
.. method:: ComposeWith
.. method:: Enum
.. method:: IsEqual
.. method:: Hash
.. method:: IsRunning
.. method:: GetTimeOfLastChange
.. method:: Inverse
.. method:: CommonPrefixWith
.. method:: RelativePathTo
.. method:: GetDisplayName
.. method:: ParseDisplayName
.. method:: IsSystemMoniker
.. class:: INetFwPolicy2
.. method:: QueryInterface
@@ -112,22 +214,6 @@ Interfaces
.. method:: get_LocalPolicyModifyState
.. class:: INetFwRules
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetTypeInfoCount
.. method:: GetTypeInfo
.. method:: GetIDsOfNames
.. method:: Invoke
.. method:: get_Count
.. method:: Add
.. method:: Remove
.. method:: Item
.. method:: get__NewEnum
.. class:: INetFwRule
.. method:: QueryInterface
@@ -175,6 +261,22 @@ Interfaces
.. method:: put_Action
.. class:: INetFwRules
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetTypeInfoCount
.. method:: GetTypeInfo
.. method:: GetIDsOfNames
.. method:: Invoke
.. method:: get_Count
.. method:: Add
.. method:: Remove
.. method:: Item
.. method:: get__NewEnum
.. class:: INetFwServiceRestriction
.. method:: QueryInterface
@@ -189,6 +291,24 @@ Interfaces
.. method:: get_Rules
.. class:: IObjContext
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: SetProperty
.. method:: RemoveProperty
.. method:: GetProperty
.. method:: EnumContextProps
.. method:: Reserved1
.. method:: Reserved2
.. method:: Reserved3
.. method:: Reserved4
.. method:: Reserved5
.. method:: Reserved6
.. method:: Reserved7
.. class:: IPersist
.. method:: QueryInterface
@@ -210,6 +330,16 @@ Interfaces
.. method:: GetCurFile
.. class:: IRemUnknown
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: RemQueryInterface
.. method:: RemAddRef
.. method:: RemRelease
.. class:: IShellLinkA
.. method:: QueryInterface
@@ -260,6 +390,53 @@ Interfaces
.. method:: SetPath
.. class:: IStdIdentity
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. class:: IStorage
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: CreateStream
.. method:: OpenStream
.. method:: CreateStorage
.. method:: OpenStorage
.. method:: CopyTo
.. method:: MoveElementTo
.. method:: Commit
.. method:: Revert
.. method:: EnumElements
.. method:: DestroyElement
.. method:: RenameElement
.. method:: SetElementTimes
.. method:: SetClass
.. method:: SetStateBits
.. method:: Stat
.. class:: IStream
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: Read
.. method:: Write
.. method:: Seek
.. method:: SetSize
.. method:: CopyTo
.. method:: Commit
.. method:: Revert
.. method:: LockRegion
.. method:: UnlockRegion
.. method:: Stat
.. method:: Clone
.. class:: ITypeComp
.. method:: QueryInterface
@@ -500,6 +677,224 @@ Interfaces
.. method:: GetCount
.. class:: IActivationProperties
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetUnmarshalClass
.. method:: GetMarshalSizeMax
.. method:: MarshalInterface
.. method:: UnmarshalInterface
.. method:: ReleaseMarshalData
.. method:: DisconnectObject
.. method:: SetDestCtx
.. method:: SetMarshalFlags
.. method:: SetLocalBlob
.. method:: GetLocalBlob
.. class:: IActivationPropertiesOut
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetActivationID
.. method:: GetObjectInterface
.. method:: GetObjectInterfaces
.. method:: RemoveRequestedIIDs
.. class:: IActivationPropertiesIn
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetActivationID
.. method:: GetClassInfo
.. method:: GetClsctx
.. method:: GetActivationFlags
.. method:: AddRequestedIIDs
.. method:: GetRequestedIIDs
.. method:: DelegateGetClassObject
.. method:: DelegateCreateInstance
.. method:: DelegateCIAndGetCF
.. method:: GetReturnActivationProperties
.. class:: IClassClassicInfo
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetThreadingModel
.. method:: GetModulePath
.. method:: GetImplementedClsid
.. method:: GetProcess
.. method:: GetRemoteServerName
.. method:: GetLocalServerType
.. method:: GetSurrogateCommandLine
.. class:: IComClassInfo
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetConfiguredClsid
.. method:: GetProgId
.. method:: GetClassName
.. method:: GetApplication
.. method:: GetClassContext
.. method:: GetCustomActivatorCount
.. method:: GetCustomActivatorClsids
.. method:: GetCustomActivators
.. method:: GetTypeInfo
.. method:: IsComPlusConfiguredClass
.. method:: MustRunInClientContext
.. method:: GetVersionNumber
.. method:: Lock
.. method:: Unlock
.. class:: IContext
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: SetProperty
.. method:: RemoveProperty
.. method:: GetProperty
.. method:: EnumContextProps
.. class:: IEnumContextProps
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: Next
.. method:: Skip
.. method:: Reset
.. method:: Clone
.. method:: Count
.. class:: IEnumSTATSTG
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: Next
.. method:: Skip
.. method:: Reset
.. method:: Clone
.. class:: IInitActivationPropertiesIn
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: SetClsctx
.. method:: SetActivationFlags
.. method:: SetClassInfo
.. method:: SetContextInfo
.. method:: SetConstructFromStorage
.. method:: SetConstructFromFile
.. class:: IOpaqueDataInfo
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: AddOpaqueData
.. method:: GetOpaqueData
.. method:: DeleteOpaqueData
.. method:: GetOpaqueDataCount
.. method:: GetAllOpaqueData
.. class:: IPrivActivationPropertiesIn
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetActivationID
.. method:: GetClassInfo
.. method:: GetClsctx
.. method:: GetActivationFlags
.. method:: AddRequestedIIDs
.. method:: GetRequestedIIDs
.. method:: DelegateGetClassObject
.. method:: DelegateCreateInstance
.. method:: DelegateCIAndGetCF
.. method:: GetReturnActivationProperties
.. method:: PrivGetReturnActivationProperties
.. method:: GetCOMVersion
.. method:: GetClsid
.. method:: GetClientToken
.. method:: GetDestCtx
.. class:: IPrivActivationPropertiesOut
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetActivationID
.. method:: GetObjectInterface
.. method:: GetObjectInterfaces
.. method:: RemoveRequestedIIDs
.. method:: SetObjectInterfaces
.. method:: SetMarshalledResults
.. method:: GetMarshalledResults
.. class:: IScmReplyInfo
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: SetResolverInfo
.. method:: GetResolverInfo
.. method:: SetRemoteReplyInfo
.. method:: GetRemoteReplyInfo
.. class:: IScmRequestInfo
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: SetScmInfo
.. method:: GetScmInfo
.. method:: SetRemoteRequestInfo
.. method:: GetRemoteRequestInfo
.. class:: IStandardActivator
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: StandardGetClassObject
.. method:: StandardCreateInstance
.. method:: StandardGetInstanceFromFile
.. method:: StandardGetInstanceFromIStorage
.. method:: Reset
.. class:: ISystemActivator
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetClassObject
.. method:: CreateInstance
.. class:: IBindCtx
.. method:: QueryInterface
@@ -576,33 +971,6 @@ Interfaces
.. method:: EnumSubCommands
.. class:: IMoniker
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetClassID
.. method:: IsDirty
.. method:: Load
.. method:: Save
.. method:: GetSizeMax
.. method:: BindToObject
.. method:: BindToStorage
.. method:: Reduce
.. method:: ComposeWith
.. method:: Enum
.. method:: IsEqual
.. method:: Hash
.. method:: IsRunning
.. method:: GetTimeOfLastChange
.. method:: Inverse
.. method:: CommonPrefixWith
.. method:: RelativePathTo
.. method:: GetDisplayName
.. method:: ParseDisplayName
.. method:: IsSystemMoniker
.. class:: IRunningObjectTable
.. method:: QueryInterface
@@ -643,22 +1011,30 @@ Interfaces
.. method:: EnumItems
.. class:: IStream
.. class:: IProxyManager
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: Read
.. method:: Write
.. method:: Seek
.. method:: SetSize
.. method:: CopyTo
.. method:: Commit
.. method:: Revert
.. method:: LockRegion
.. method:: UnlockRegion
.. method:: Stat
.. method:: Clone
.. method:: CreateServer
.. method:: IsConnected
.. method:: LockConnection
.. method:: Disconnect
.. method:: GetConnectionStatus
.. method:: ScalarDeletingDestructor
.. method:: SetMapping
.. method:: GetMapping
.. method:: GetServerObjectContext
.. method:: GetWrapperForContex
.. class:: IProxyServerIdentity
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetServerProcessId
.. method:: GetServerProcessHandle
.. class:: IApplicationActivationManager
@@ -701,6 +1077,63 @@ Interfaces
.. method:: OnStateChanged
.. class:: IChannelHook
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: ClientGetSize
.. method:: ClientFillBuffer
.. method:: ClientNotify
.. method:: ServerNotify
.. method:: ServerGetSize
.. method:: ServerFillBuffer
.. class:: IRpcChannelBuffer
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetBuffer
.. method:: SendReceive
.. method:: FreeBuffer
.. method:: GetDestCtx
.. method:: IsConnected
.. class:: IRpcHelper
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: GetDCOMProtocolVersion
.. method:: GetIIDFromOBJREF
.. class:: IRpcOptions
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: Set
.. method:: Query
.. class:: IRpcStubBuffer
.. method:: QueryInterface
.. method:: AddRef
.. method:: Release
.. method:: Connect
.. method:: Disconnect
.. method:: Invoke
.. method:: IsIIDSupported
.. method:: CountRefs
.. method:: DebugServerQueryInterface
.. method:: DebugServerRelease
.. class:: IAction
.. method:: QueryInterface
+31 -5
View File
@@ -126,6 +126,32 @@ WinDef
.. autodata:: NUM_CR_RESULTS
.. autodata:: PCD_MAX_MEMORY
.. autodata:: PCD_MAX_IO
.. autodata:: ORPCF_NULL
.. autodata:: ORPCF_LOCAL
.. autodata:: ORPCF_RESERVED1
.. autodata:: ORPCF_RESERVED2
.. autodata:: ORPCF_RESERVED3
.. autodata:: ORPCF_RESERVED4
.. autodata:: ORPCF_INPUT_SYNC
.. autodata:: ORPCF_ASYNC
.. autodata:: ORPCF_DYNAMIC_CLOAKING
.. autodata:: ORPCF_REJECTED
.. autodata:: ORPCF_RETRY_LATER
.. autodata:: OBJREF_SIGNATURE
.. autodata:: OBJREF_STANDARD
.. autodata:: OBJREF_HANDLER
.. autodata:: OBJREF_CUSTOM
.. autodata:: OBJREF_EXTENDED
.. autodata:: SORF_OXRES1
.. autodata:: SORF_OXRES2
.. autodata:: SORF_OXRES3
.. autodata:: SORF_OXRES4
.. autodata:: SORF_OXRES5
.. autodata:: SORF_OXRES6
.. autodata:: SORF_OXRES7
.. autodata:: SORF_OXRES8
.. autodata:: SORF_NULL
.. autodata:: SORF_NOPING
.. autodata:: CWCSTORAGENAME
.. autodata:: STGM_DIRECT
.. autodata:: STGM_TRANSACTED
@@ -2393,11 +2419,11 @@ WinDef
.. autodata:: FAX_PORT_QUERY
.. autodata:: FAX_PORT_SET
.. autodata:: FAX_JOB_MANAGE
.. autodata:: COM_EXECUTE
.. autodata:: COM_EXECUTE_LOCAL
.. autodata:: COM_EXECUTE_REMOTE
.. autodata:: COM_ACTIVATE_LOCAL
.. autodata:: COM_ACTIVATE_REMOTE
.. autodata:: COM_RIGHTS_EXECUTE
.. autodata:: COM_RIGHTS_EXECUTE_LOCAL
.. autodata:: COM_RIGHTS_EXECUTE_REMOTE
.. autodata:: COM_RIGHTS_ACTIVATE_LOCAL
.. autodata:: COM_RIGHTS_ACTIVATE_REMOTE
.. autodata:: SECTION_QUERY
.. autodata:: SECTION_MAP_WRITE
.. autodata:: SECTION_MAP_READ
+16 -6
View File
@@ -164,6 +164,14 @@ Functions
.. function:: SysFreeString(bstrString)
.. function:: CreateStreamOnHGlobal(hGlobal, fDeleteOnRelease, ppstm)
.. function:: GetHGlobalFromStream(pstm, phglobal)
.. function:: CoMarshalInterface(pStm, riid, pUnk, dwDestContext, pvDestContext, mshlflags)
.. function:: CoUnmarshalInterface(pStm, riid, ppv)
.. function:: CryptCATAdminCalcHashFromFileHandle(hFile, pcbHash, pbHash, dwFlags)
.. function:: CryptCATAdminCalcHashFromFileHandle2(hCatAdmin, hFile, pcbHash, pbHash, dwFlags)
@@ -978,12 +986,6 @@ Functions
.. function:: SymEnumSymbolsEx(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext, Options)
.. function:: SymEnumTypes(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext)
.. function:: SymEnumTypesByName(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext)
.. function:: SymEnumTypesByNameW(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext)
.. function:: SymEnumerateModules64(hProcess, EnumModulesCallback, UserContext)
.. function:: SymEnumerateModulesW64(hProcess, EnumModulesCallback, UserContext)
@@ -1072,6 +1074,14 @@ Functions
.. function:: SymSetSearchPathW(hProcess, SearchPath)
.. function:: SymEnumTypes(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext)
.. function:: SymEnumTypesW(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext)
.. function:: SymEnumTypesByName(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext)
.. function:: SymEnumTypesByNameW(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext)
.. function:: CreateEventA(lpEventAttributes, bManualReset, bInitialState, lpName)
.. function:: CreateEventW(lpEventAttributes, bManualReset, bInitialState, lpName)
File diff suppressed because it is too large Load Diff
+63 -6
View File
@@ -20,6 +20,23 @@ def pe(request):
yield proc.peb.modules[2].pe
proc.exit(0)
PE_DOTNET32_DLL_NAME = "test_pe_dotnet32.dll"
@pytest.fixture(scope="session")
def pe_dotnet32(tmpdir_factory):
tmpdir = tmpdir_factory.mktemp("pe_dotnet32_test_dir")
pe_dotnet32_data = zlib.decompress(b64decode(PE_DOTNET32_DLL_BASE64))
fullpath = str(tmpdir.join(PE_DOTNET32_DLL_NAME))
with open(fullpath, "wb") as f:
f.write(pe_dotnet32_data)
try:
yield fullpath
finally:
try:
os.unlink(fullpath)
except WindowsError as e:
pass # Ignore delete fail, may happend if injected process is cleaned after the dll..
def test_pe_imports(pe):
imports = pe.imports
@@ -66,10 +83,13 @@ def test_pe_parsing_strange_optional_header_size(tmp_path, proc32):
# Also check that section retrieval works (as its position is based on OptionalHeader Size)
assert set(s.name for s in mod.pe.sections) == {".text", ".data", ".l1"}
# Make a test from current_process parsing ?
def test_pe_parsing_dotnet_32_process_64(proc64):
def test_pe_parsing_dotnet32_process_64(proc64, pe_dotnet32):
# .NET pe32 loadable in 64bit process -> rewrite of the OptionalHeader
mod = proc64.load_library(r"C:\Windows\System32\stordiag.exe")
mod = proc64.load_library(pe_dotnet32)
# It was a PE32
assert mod.pe.get_NT_HEADER().FileHeader.Machine == gdef.IMAGE_FILE_MACHINE_I386
# Now Optional Header should be 64b
@@ -83,17 +103,54 @@ def test_pe_parsing_dotnet_32_process_64(proc64):
assert mod.pe.sections
assert ".text" in set(s.name for s in mod.pe.sections)
def test_pe_parsing_dotnet_32_current_process_64(proc64):
def test_pe_parsing_dotnet32_current_process_64(proc64, pe_dotnet32):
# .NET pe32 loadable in 64bit process -> rewrite of the OptionalHeader
# So we injecte python code in a the remote proc64 to test the parsing from itself
PIPE_NAME = "PFW_TEST_Pipe"
mod = proc64.load_library(r"C:\Windows\System32\stordiag.exe")
assert proc64.peb.modules[-1].name == "stordiag.exe"
mod = proc64.load_library(pe_dotnet32)
assert proc64.peb.modules[-1].name == PE_DOTNET32_DLL_NAME
proc64.execute_python("import sys; import windows; import windows.pipe")
proc64.execute_python("""pemod = [x for x in windows.current_process.peb.modules if x.name == 'stordiag.exe'][0].pe""")
proc64.execute_python("""pemod = [x for x in windows.current_process.peb.modules if x.name == '{0}'][0].pe""".format(PE_DOTNET32_DLL_NAME))
with windows.pipe.create(PIPE_NAME) as np:
rcode = """windows.pipe.send_object("{pipe}", (list(pemod.imports), [sec.name for sec in pemod.sections]))"""
proc64.execute_python(rcode.format(pipe=PIPE_NAME))
imported_dlls, sections_names = np.recv()
assert imported_dlls == ['mscoree.dll']
assert ".text" in sections_names
# A "Portable Executable 32 .NET Assembly" DLL
# Result of compiling a simple hello-world
# Can be loaded into a 64b process to witness 32 -> 64b PE conversion at load time
PE_DOTNET32_DLL_BASE64 = b"""
eNrtV01wFEUUfpNsQhJMTAQsFMFhgxhQJpsEEGIC+dkQoglEdhMKSRXMznaWkflZp3tD1oNygaOF
FwotLL1YUuUBy0LKn7K8WCUeuMHNg1VeKD1QelBKLfHrntmfhODPxYPSm37d7/Xr19973fO6M/H8
Gaolohjq7dtEH1FYBuivy0nUlkc/aaFLjVfXf6SNX12fPmZzPR/4ucB0dcv0PF/oGaYHBU+3PT25
P6W7fpYZzc1NGyIbkyNE41otvdP91bclu99QnJZrCaIGCivK2Y0gegnYQNivCXETVVoFqibs1tLR
U0St6q/SlhtVkrC7PzLZUbeEk0eJ7kMjHiNK0z8oehm6Kg3g91bxhmDzAu35+sivhgruKhNHjYAH
FkXYpO9Sv2mhHsQDRsAc3wqxSszKVusdekOLYc5vDNu9akodZbFoK9bSSNV6+ofFCDAr3wEYTZvX
1XQ0y3Yo9cyQpiyG+Oa2GgmjJ9HTtVNK6sgBvYDh9peJVgJ3A2p7SgS2l+NS45FYGKL2qRT1xUK3
2kenxpJox8F/Ifkhx89EGDBdG11F1CiZX7QeejD0pyUKS03oGwEcLY/6YehPaSHKevqVrmj1NKFJ
OkUfavfTDRWOk3Qckq3am6Bfk6SvK3pZ0TVKbqt+r7Lwm3ZWa6KH6KwyrBBRGItWehXNNsVNSvfo
NfTaUWcUd3r1RcwPsf6sNdJFYGsjKXsItIk2gbZSl6I7FR1UdEzR5xQ9pKipZr1ICVoFbLJvwO9N
oCuoG3QNtA2s/DzoE3QGtIfeAH2a3gUdpkugzyp5CnSYDtPnFDtJ0Y6WSm3NwuPyMK2PYlkte6DU
7ZswbW/XBrR+tuCwXZQqcsFcY9j3uO+wEnug4AnbZXQwsAUbtz1Gw76btx0WjDKPBaZg2UGBo5Ip
CEZJlinkcmbGYRXZIOfMzTjFtC2qxWkzyDGxB3mKnfCD43fq78Ea0yzgtu/dOTjmzfqBawoMms5d
teDKrJ0rBEqvMhw6oIQHmGPOqx6/c/pkgMhYYim7bt70ipWBKEhKLuyM7diianRhJI0ILj4uEowL
I+s4NBmm7Ei1PIPNOsyS6MiwhB+U5EnbzHk+F7bFFxsvbU6KBXO2xXi0JVgM2wwWUee0P/MCzKrV
idbsJYYM4JBPT+IrP4g2AJeNTs8HF18a7T7y3sDHrRcOT7aPvU0xXdMaanXS6tBpa5NsS4xAGt7f
feSVtutNvXXg1rY0aFH+XSc/sHTNgwcDM7/P90bmLZaXPqWPBf4JrkEv/Pa3abTa2DeSHvYDNpjP
PxnFqX9uu5GAgZaV5cOStHneMYv7wFKjRrHQkfs0Wob9ZCZnIdOFLIcfMqBGdV1hN1b6Zt5a8d4t
0iYm5dpTqFdwv1xZVvlSpN4K1MdR1yJHr21YmGcXpXY6kEqmzl7fOXX7h52Dl2+ev3Eoaa6QNoZ7
Z6Y4PJk5mBwcnRLh0bAsH/s1I3HP+JkXZiLYMx4TcFbJjXw2Q6m9g93btlNkt+2nyC6wzz/b+NT3
P355LWd1DtU7Gys4Tpfu6SXK/MZq7ggCPTLPZBogl1uIOlNnUZbbj5E+QPfKv11q1LnC9p1cLd9m
4WuKqk+lPFM7lpCXnl5L6R+7i34HHp5nsM3nqt4952q2gk7jpjkCOkIH0BvDC20f+DHQPeFrjT6L
3fy9/Eqpsrm76j2oLUKTVLJp3IcB7NjIMgw2PZpFzpFlg5qVxqgJKce4SQJ6PriwvB+7pUkbKcgD
jHiUW8LSNaWTKP+2UgaUaDPeOhruT59cyqs1ivDIBMeUdYGWk1D9bqVbsp1UI5ZaM78AU/WcBDJe
Zc40aoCxim4XbvBEuco1GqEvcQul6wGLU4WoZNtANnYo/DI7cEY0GsdITmlLb/LwQyLLYadF9Pn3
Ktv7I7kd2S5h8/50jTBOk5jrQ1qA3+KucUrgfbFYd7HnXVU+71AxGsQoh5aLnXGAXv+TOdG8YaLv
qg7UzU8/79s97zr6XHRNxJHh4zrzLD+L264/PpXes2VHXOfC9LKm43usP15kPL57V3NTc1OfGV3l
Okx4vD9eCLxebh1jrsm3uLYV+NyfFVss3+01uWvMdcV11/TsWSTm6er1YEzXy8bGsgy3sCguwCR/
cd3DXdUfnyjiYnNsS704DDOfj3eGFkRQ4EI+av4mnu5wZczkzCrgaVaMeEgC9mIBOFl2MrDn8BbI
Mf43rfbEy1aq7eCSsAoS8TibY47uSNofN/mYN+cfZ0FcL9i40RjHArOmw1nklDLSuQSaEvTOBdj7
OstBAN/XWQrqrv94ytfD/8nObb93+/0fyx8qiKxw
"""
+1 -1
View File
@@ -29,7 +29,7 @@ def test_symbols_module_info(symctx):
def test_symbols_search(symctx):
mod = symctx.load_file(path=u"c:\\windows\\system32\\ntdll.dll", addr=0x42000)
res = symctx.search(u"ntdll!*CreateFile")
assert set(s.name for s in res) == {"NtCreateFile", "ZwCreateFile"}
assert set(s.name for s in res) >= {"NtCreateFile", "ZwCreateFile"} # May have other names
def test_symbols(symctx):
+1 -1
View File
@@ -36,7 +36,7 @@ def test_token_user(curtok):
user_sid = curtok.user
assert user_sid
computername, username = windows.utils.lookup_sid(user_sid)
assert computername == windows.system.computer_name
assert computername.upper() == windows.system.computer_name.upper()
assert username == os.environ["USERNAME"]
def test_token_id(curtok):
+1 -1
View File
@@ -75,7 +75,7 @@ def test_get_object(name, cls):
# Todo: test
# - put_instance
@pytest.mark.parametrize("cmdline", [r"c:\windows\notepad.exe trolol.exe"])
@pytest.mark.parametrize("cmdline", [r"winver.exe test_string_pfw"])
def test_exec_method_Win32_Process_create(cmdline):
namespace = windows.system.wmi["root\\cimv2"]
win32_process_cls = namespace.get_object("Win32_Process")
+10
View File
@@ -69,12 +69,22 @@ class TypeInfo(interfaces.ITypeInfo):
self.GetDocumentation(id, res, None, None, None)
return res
class MemoryIStream(gdef.IStream):
@classmethod
def create(cls):
self = cls()
windows.winproxy.CreateStreamOnHGlobal(ppstm=self)
return self
def create_instance(clsiid, targetinterface, custom_iid=None, context=CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER):
"""A simple wrapper around ``CoCreateInstance <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx>``"""
if custom_iid is None:
custom_iid = targetinterface.IID
if isinstance(clsiid, basestring):
clsiid = IID.from_string(clsiid)
if isinstance(custom_iid, basestring):
custom_iid = IID.from_string(custom_iid)
winproxy.CoCreateInstance(byref(clsiid), None, context, byref(custom_iid), byref(targetinterface))
return targetinterface
+3 -1
View File
@@ -238,6 +238,8 @@ class SymbolType(object):
@property
def children(self):
count = self.nb_children
if count is None:
return None
class res_struct(ctypes.Structure):
_fields_ = [("Count", gdef.ULONG), ("Start", gdef.ULONG), ("Types", (gdef.ULONG * count))]
x = res_struct()
@@ -520,7 +522,7 @@ class SymbolHandler(object):
else:
callback = ctypes.WINFUNCTYPE(gdef.BOOL, ctypes.POINTER(SymbolInfo), gdef.ULONG , ctypes.py_object)(callback)
addr = getattr(mod, "addr", mod) # Retrieve mod.addr, else us the value directly
addr = getattr(mod, "addr", mod) # Retrieve mod.addr, else use the value directly
windows.winproxy.SymSearchW(self.handle, gdef.DWORD64(addr), 0, tag, mask, 0, callback, res, options)
for sym in res:
sym.resolver = self
File diff suppressed because it is too large Load Diff
+154 -8
View File
@@ -651,11 +651,11 @@ windef = {'ABOVE_NORMAL_PRIORITY_CLASS',
'COMPRESSION_FORMAT_NONE',
'COMPRESSION_FORMAT_XPRESS',
'COMPRESSION_FORMAT_XPRESS_HUFF',
'COM_ACTIVATE_LOCAL',
'COM_ACTIVATE_REMOTE',
'COM_EXECUTE',
'COM_EXECUTE_LOCAL',
'COM_EXECUTE_REMOTE',
'COM_RIGHTS_ACTIVATE_LOCAL',
'COM_RIGHTS_ACTIVATE_REMOTE',
'COM_RIGHTS_EXECUTE',
'COM_RIGHTS_EXECUTE_LOCAL',
'COM_RIGHTS_EXECUTE_REMOTE',
'CONTAINER_INHERIT_ACE',
'CONTEXT_ALL',
'CONTEXT_AMD64',
@@ -2288,6 +2288,11 @@ windef = {'ABOVE_NORMAL_PRIORITY_CLASS',
'OBJECT_INHERIT_ACE',
'OBJECT_TYPE_ALL_ACCESS',
'OBJECT_TYPE_CREATE',
'OBJREF_CUSTOM',
'OBJREF_EXTENDED',
'OBJREF_HANDLER',
'OBJREF_SIGNATURE',
'OBJREF_STANDARD',
'OBJ_CASE_INSENSITIVE',
'OBJ_EXCLUSIVE',
'OBJ_FORCE_ACCESS_CHECK',
@@ -2299,6 +2304,17 @@ windef = {'ABOVE_NORMAL_PRIORITY_CLASS',
'OBJ_VALID_ATTRIBUTES',
'OPEN_ALWAYS',
'OPEN_EXISTING',
'ORPCF_ASYNC',
'ORPCF_DYNAMIC_CLOAKING',
'ORPCF_INPUT_SYNC',
'ORPCF_LOCAL',
'ORPCF_NULL',
'ORPCF_REJECTED',
'ORPCF_RESERVED1',
'ORPCF_RESERVED2',
'ORPCF_RESERVED3',
'ORPCF_RESERVED4',
'ORPCF_RETRY_LATER',
'OS_ADVSERVER',
'OS_ANYSERVER',
'OS_APPLIANCE',
@@ -2904,6 +2920,16 @@ windef = {'ABOVE_NORMAL_PRIORITY_CLASS',
'SOCK_RDM',
'SOCK_SEQPACKET',
'SOCK_STREAM',
'SORF_NOPING',
'SORF_NULL',
'SORF_OXRES1',
'SORF_OXRES2',
'SORF_OXRES3',
'SORF_OXRES4',
'SORF_OXRES5',
'SORF_OXRES6',
'SORF_OXRES7',
'SORF_OXRES8',
'SPC_CAB_DATA_OBJID',
'SPC_CERT_EXTENSIONS_OBJID',
'SPC_COMMERCIAL_SP_KEY_PURPOSE_OBJID',
@@ -12190,6 +12216,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'CERT_TRUST_LIST_INFO',
'CERT_TRUST_STATUS',
'CERT_USAGE_MATCH',
'CID',
'CLAIM_SECURITY_ATTRIBUTES_INFORMATION',
'CLAIM_SECURITY_ATTRIBUTES_INFORMATION_UNION',
'CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE',
@@ -12215,6 +12242,10 @@ structs = {'ACCESS_ALLOWED_ACE',
'COAUTHIDENTITY',
'COAUTHINFO',
'COMVERSION',
'CONTAINERTHAT',
'CONTAINERVERSION',
'CONTAINER_EXTENT',
'CONTAINER_EXTENT_ARRAY',
'CONTEXT32',
'CONTEXT64',
'COSERVERINFO',
@@ -12260,6 +12291,8 @@ structs = {'ACCESS_ALLOWED_ACE',
'CTL_INFO',
'CTL_USAGE',
'CURDIR',
'ContextProperty',
'DATAELEMENT',
'DATA_BLOB',
'DEBUG_BREAKPOINT_PARAMETERS',
'DEBUG_EVENT',
@@ -12352,6 +12385,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'DNS_WINSR_DATAW',
'DNS_WINS_DATA',
'DNS_WKS_DATA',
'DUALSTRINGARRAY',
'ELEMDESC',
'ENABLE_TRACE_PARAMETERS',
'ENUM_SERVICE_STATUSA',
@@ -12428,6 +12462,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'GROUP_USERS_INFO_0',
'GROUP_USERS_INFO_1',
'GUID',
'HSTRING__',
'IDLDESC',
'IID',
'IMAGEHLP_CBA_EVENT',
@@ -12469,6 +12504,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'IO_Resource_s',
'IO_STATUS_BLOCK',
'IP6_ADDRESS',
'IPID',
'IP_ADAPTER_INDEX_MAP',
'IP_ADAPTER_INFO',
'IP_ADDRESS_STRING',
@@ -12505,7 +12541,10 @@ structs = {'ACCESS_ALLOWED_ACE',
'LOCALGROUP_MEMBERS_INFO_1',
'LOCALGROUP_MEMBERS_INFO_2',
'LOCALGROUP_MEMBERS_INFO_3',
'LOCALTHAT',
'LOCALTHAT32',
'LOCALTHIS',
'LOCALTHIS32',
'LPADDRESS',
'LPADDRESS64',
'LPBINDPTR',
@@ -12646,7 +12685,9 @@ structs = {'ACCESS_ALLOWED_ACE',
'MIB_UDP6TABLE_OWNER_PID',
'MIB_UDPROW_OWNER_PID',
'MIB_UDPTABLE_OWNER_PID',
'MIDL_ILocalObjectExporter_0007',
'MIDL_XmitDefs_0001',
'MInterfacePointer',
'MODLOAD_DATA',
'MULTI_QI',
'Mem_Des_s',
@@ -12668,8 +12709,15 @@ structs = {'ACCESS_ALLOWED_ACE',
'OBJECT_ATTRIBUTES',
'OBJECT_DIRECTORY_INFORMATION',
'OBJECT_TYPES_INFORMATION',
'OBJREF',
'OBJREFDATA',
'OPEN_VIRTUAL_DISK_PARAMETERS',
'ORPCTHAT',
'ORPCTHAT32',
'ORPCTHIS',
'ORPCTHIS32',
'ORPC_EXTENT',
'ORPC_EXTENT_ARRAY',
'OSVERSIONINFOA',
'OSVERSIONINFOEXA',
'OSVERSIONINFOEXW',
@@ -12677,6 +12725,8 @@ structs = {'ACCESS_ALLOWED_ACE',
'OUTPUT_DEBUG_STRING_INFO',
'OVERLAPPED',
'OVERLAPPED_ENTRY',
'OXID_INFO',
'OpaqueData',
'PACCESS_ALLOWED_ACE',
'PACCESS_ALLOWED_CALLBACK_ACE',
'PACCESS_ALLOWED_CALLBACK_OBJECT_ACE',
@@ -12826,6 +12876,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'PCTL_INFO',
'PCTL_USAGE',
'PCURDIR',
'PDATAELEMENT',
'PDATA_BLOB',
'PDEBUG_BREAKPOINT_PARAMETERS',
'PDEBUG_EXCEPTION_FILTER_PARAMETERS',
@@ -13074,6 +13125,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'PMIB_UDP6TABLE_OWNER_PID',
'PMIB_UDPROW_OWNER_PID',
'PMIB_UDPTABLE_OWNER_PID',
'PMInterfacePointer',
'PMODLOAD_DATA',
'PNET_DISPLAY_GROUP',
'PNET_DISPLAY_MACHINE',
@@ -13088,6 +13140,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'POLICY_LSA_SERVER_ROLE_INFO',
'POLICY_PRIMARY_DOMAIN_INFO',
'POPEN_VIRTUAL_DISK_PARAMETERS',
'PORPC_EXTENT',
'PORT_MESSAGE32',
'PORT_MESSAGE32_TMP_UNION',
'PORT_MESSAGE64',
@@ -13108,6 +13161,8 @@ structs = {'ACCESS_ALLOWED_ACE',
'PPORT_MESSAGE64',
'PPORT_VIEW',
'PPRIVILEGE_SET',
'PPRIV_RESOLVER_INFO',
'PPRIV_RESOLVER_INFO_LEGACY',
'PPROCESSENTRY32',
'PPROCESSENTRY32W',
'PPROCESS_BASIC_INFORMATION',
@@ -13139,8 +13194,13 @@ structs = {'ACCESS_ALLOWED_ACE',
'PPUBLIC_OBJECT_BASIC_INFORMATION',
'PPUBLIC_OBJECT_TYPE_INFORMATION',
'PREMOTE_PORT_VIEW',
'PREMOTE_REPLY_SCM_INFO',
'PREMQIRESULT',
'PRGBTRIPLE',
'PRIVILEGE_SET',
'PRIV_RESOLVER_INFO',
'PRIV_RESOLVER_INFO_LEGACY',
'PRIV_SCM_INFO',
'PRLIST_ENTRY',
'PROCESSENTRY32',
'PROCESSENTRY32W',
@@ -13160,6 +13220,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY',
'PROPERTYKEY',
'PROVIDER_ENUMERATION_INFO',
'PRPCOLEMESSAGE',
'PRTLP_CURDIR_REF',
'PRTL_DRIVE_LETTER_CURDIR',
'PRTL_OSVERSIONINFOEXW',
@@ -13292,11 +13353,17 @@ structs = {'ACCESS_ALLOWED_ACE',
'REFCLSID',
'REFGUID',
'REFIID',
'REFIPID',
'REFPROPERTYKEY',
'REMINTERFACEREF',
'REMOTE_PORT_VIEW',
'REMOTE_REPLY_SCM_INFO',
'REMOTE_REQUEST_SCM_INFO',
'REMQIRESULT',
'RGBQUAD',
'RGBTRIPLE',
'RIP_INFO',
'RPCOLEMESSAGE',
'RPC_IF_ID',
'RTLP_CURDIR_REF',
'RTL_DRIVE_LETTER_CURDIR',
@@ -13340,6 +13407,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'STARTUPINFOEXW',
'STARTUPINFOW',
'STATSTG',
'STDOBJREF',
'STRING',
'STRUCT_PLAINTEXTKEYBLOB',
'SYMBOL_INFO',
@@ -13388,7 +13456,6 @@ structs = {'ACCESS_ALLOWED_ACE',
'TMP_SPC_LINK_UNION',
'TMP_TYPEDESC_UNION',
'TMP_UNION_DEBUG_INFO',
'TMP_UNION_IO_STATUS_BLOCK',
'TMP_VARDESC_UNION',
'TMP_WINTRUST_UNION_TYPE',
'TMP_lowmid_union',
@@ -13772,7 +13839,10 @@ structs = {'ACCESS_ALLOWED_ACE',
'_LOCALGROUP_MEMBERS_INFO_1',
'_LOCALGROUP_MEMBERS_INFO_2',
'_LOCALGROUP_MEMBERS_INFO_3',
'_LOCALTHAT',
'_LOCALTHAT32',
'_LOCALTHIS',
'_LOCALTHIS32',
'_LSA_OBJECT_ATTRIBUTES',
'_LSA_REFERENCED_DOMAIN_LIST',
'_LSA_TRANSLATED_NAME',
@@ -13802,6 +13872,12 @@ structs = {'ACCESS_ALLOWED_ACE',
'_MIB_UDP6TABLE_OWNER_PID',
'_MIB_UDPROW_OWNER_PID',
'_MIB_UDPTABLE_OWNER_PID',
'_MIDL_ILocalObjectExporter_0007',
'_MIDL_XmitDefs_0001',
'_MIDL_XmitDefs_0005',
'_MIDL_XmitDefs_0007',
'_MIDL_XmitDefs_0008',
'_MIDL_XmitDefs_0010',
'_MODLOAD_DATA',
'_NET_DISPLAY_GROUP',
'_NET_DISPLAY_MACHINE',
@@ -13836,6 +13912,9 @@ structs = {'ACCESS_ALLOWED_ACE',
'_PORT_MESSAGE_TMP_UNION_U2',
'_PORT_VIEW',
'_PRIVILEGE_SET',
'_PRIV_RESOLVER_INFO',
'_PRIV_RESOLVER_INFO_LEGACY',
'_PRIV_SCM_INFO',
'_PROCESS_BASIC_INFORMATION',
'_PROCESS_INFORMATION',
'_PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION',
@@ -13868,6 +13947,8 @@ structs = {'ACCESS_ALLOWED_ACE',
'_QUERY_SERVICE_CONFIGA',
'_QUERY_SERVICE_CONFIGW',
'_REMOTE_PORT_VIEW',
'_REMOTE_REPLY_SCM_INFO',
'_REMOTE_REQUEST_SCM_INFO',
'_RIP_INFO',
'_RPC_IF_ID',
'_RTLP_CURDIR_REF',
@@ -13942,7 +14023,6 @@ structs = {'ACCESS_ALLOWED_ACE',
'_TMP_SPC_LINK_UNION',
'_TMP_TYPEDESC_UNION',
'_TMP_UNION_DEBUG_INFO',
'_TMP_UNION_IO_STATUS_BLOCK',
'_TMP_VARDESC_UNION',
'_TMP_WINTRUST_UNION_TYPE',
'_TMP_lowmid',
@@ -14002,7 +14082,6 @@ structs = {'ACCESS_ALLOWED_ACE',
'_XSTATE_FEATURE',
'__MIDL_IBackgroundCopyJob2_0003',
'__MIDL_IBackgroundCopyJob2_0004',
'__MIDL_XmitDefs_0001',
'__PUBLIC_OBJECT_TYPE_INFORMATION',
'__tagBRECORD',
'__tagVARIANT',
@@ -14029,24 +14108,40 @@ structs = {'ACCESS_ALLOWED_ACE',
'tagBITMAPINFO',
'tagBITMAPINFOHEADER',
'tagCOMVERSION',
'tagContextProperty',
'tagDATAELEMENT',
'tagDEC',
'tagDISPPARAMS',
'tagDUALSTRINGARRAY',
'tagELEMDESC',
'tagEXCEPINFO',
'tagFUNCDESC',
'tagIDLDESC',
'tagMInterfacePointer',
'tagMULTI_QI',
'tagOBJREF',
'tagOBJREFDATA',
'tagORPCTHAT',
'tagORPCTHIS',
'tagORPCTHIS32',
'tagORPC_EXTENT',
'tagORPC_EXTENT_ARRAY',
'tagOXID_INFO',
'tagOpaqueData',
'tagPARAMDESC',
'tagPARAMDESCEX',
'tagPROCESSENTRY32',
'tagPROCESSENTRY32W',
'tagREMINTERFACEREF',
'tagREMQIRESULT',
'tagRGBQUAD',
'tagRGBTRIPLE',
'tagRPCOLEMESSAGE',
'tagSAFEARRAY',
'tagSAFEARRAYBOUND',
'tagSOLE_AUTHENTICATION_SERVICE',
'tagSTATSTG',
'tagSTDOBJREF',
'tagTHREADENTRY32',
'tagTLIBATTR',
'tagTYPEATTR',
@@ -14059,6 +14154,7 @@ structs = {'ACCESS_ALLOWED_ACE',
enums = {'ACCESS_MODE',
'ACL_INFORMATION_CLASS',
'ACTIVATEOPTIONS',
'ACTIVATION_STAGE',
'ADDRESS_MODE',
'ALPC_MESSAGE_INFORMATION_CLASS',
'ALPC_PORT_INFORMATION_CLASS',
@@ -14081,6 +14177,7 @@ enums = {'ACCESS_MODE',
'COINIT',
'COMPUTER_NAME_FORMAT',
'COMSD',
'CPFLAGS',
'DESCKIND',
'DNS_FREE_TYPE',
'DataKind',
@@ -14112,9 +14209,11 @@ enums = {'ACCESS_MODE',
'IO_PRIORITY_HINT',
'KEY_INFORMATION_CLASS',
'KEY_VALUE_INFORMATION_CLASS',
'LocalServerType',
'MEMORY_INFORMATION_CLASS',
'MEM_EXTENDED_PARAMETER_TYPE',
'MIB_TCP_STATE',
'MSHCTX',
'MSHLFLAGS',
'MULTIPLE_TRUSTEE_OPERATION',
'NDR_FORMAT_CHARACTER',
@@ -14162,6 +14261,7 @@ enums = {'ACCESS_MODE',
'SICHINTF',
'SID_NAME_USE',
'SIGDN',
'STREAM_SEEK',
'SYM_TYPE',
'SYSKIND',
'SYSTEM_INFORMATION_CLASS',
@@ -14186,6 +14286,7 @@ enums = {'ACCESS_MODE',
'TRUSTEE_FORM',
'TRUSTEE_TYPE',
'TYPEKIND',
'ThreadingModel',
'UDP_TABLE_CLASS',
'UdtKind',
'VARENUM',
@@ -14283,18 +14384,24 @@ enums = {'ACCESS_MODE',
'_WELL_KNOWN_SID_TYPE',
'__MIDL_IBackgroundCopyJob2_0001',
'__MIDL_IBackgroundCopyJob2_0002',
'tagACTIVATION_STAGE',
'tagCALLCONV',
'tagCALLFRAME_WALK',
'tagCLSCTX',
'tagCOINIT',
'tagCOMSD',
'tagCPFLAGS',
'tagDESCKIND',
'tagFUNCKIND',
'tagINVOKEKIND',
'tagLocalServerType',
'tagMSHCTX',
'tagMSHLFLAGS',
'tagSTREAM_SEEK',
'tagSYSKIND',
'tagTOKEN_TYPE',
'tagTYPEKIND',
'tagThreadingModel',
'tagVARKIND',
'tag_WBEMSTATUS',
'tag_WBEM_CHANGE_FLAG_TYPE',
@@ -14386,7 +14493,9 @@ functions = {'AccessCheck',
'CoGetInterceptor',
'CoInitializeEx',
'CoInitializeSecurity',
'CoMarshalInterface',
'CoTaskMemFree',
'CoUnmarshalInterface',
'CommitTransaction',
'ConnectNamedPipe',
'ContinueDebugEvent',
@@ -14425,6 +14534,7 @@ functions = {'AccessCheck',
'CreateRemoteThread',
'CreateServiceA',
'CreateServiceW',
'CreateStreamOnHGlobal',
'CreateThread',
'CreateToolhelp32Snapshot',
'CreateTransaction',
@@ -14616,6 +14726,7 @@ functions = {'AccessCheck',
'GetFirmwareEnvironmentVariableExW',
'GetFirmwareEnvironmentVariableW',
'GetForegroundWindow',
'GetHGlobalFromStream',
'GetIfTable',
'GetInterfaceInfo',
'GetIpAddrTable',
@@ -15031,6 +15142,7 @@ functions = {'AccessCheck',
'SymEnumTypes',
'SymEnumTypesByName',
'SymEnumTypesByNameW',
'SymEnumTypesW',
'SymEnumerateModules64',
'SymEnumerateModulesW64',
'SymFromAddr',
@@ -15144,6 +15256,10 @@ functions = {'AccessCheck',
interfaces = {'IAction',
'IActionCollection',
'IActivationProperties',
'IActivationPropertiesIn',
'IActivationPropertiesOut',
'IActivationStageInfo',
'IApplicationActivationManager',
'IBackgroundCopyCallback',
'IBackgroundCopyError',
@@ -15154,17 +15270,27 @@ interfaces = {'IAction',
'IBackgroundCopyJob2',
'IBackgroundCopyManager',
'IBindCtx',
'ICallFactory',
'ICallFrame',
'ICallFrameEvents',
'ICallFrameWalker',
'ICallInterceptor',
'IChannelHook',
'IClassClassicInfo',
'IClassFactory',
'IClientSecurity',
'IComCatalog',
'IComClassInfo',
'IComHandlerAction',
'IContext',
'IDispatch',
'IEmailAction',
'IEnumBackgroundCopyFiles',
'IEnumBackgroundCopyJobs',
'IEnumContextProps',
'IEnumExplorerCommand',
'IEnumMoniker',
'IEnumSTATSTG',
'IEnumShellItems',
'IEnumString',
'IEnumVARIANT',
@@ -15172,30 +15298,50 @@ interfaces = {'IAction',
'IExecAction',
'IExplorerCommand',
'IIdleSettings',
'IInitActivationPropertiesIn',
'IInternalUnknown',
'IMarshal',
'IMoniker',
'INetFwPolicy2',
'INetFwRule',
'INetFwRules',
'INetFwServiceRestriction',
'INetworkSettings',
'IObjContext',
'IOpaqueDataInfo',
'IPackageDebugSettings',
'IPackageExecutionStateChangeNotification',
'IPersist',
'IPersistFile',
'IPrincipal',
'IPrivActivationPropertiesIn',
'IPrivActivationPropertiesOut',
'IProxyManager',
'IProxyServerIdentity',
'IRegisteredTask',
'IRegisteredTaskCollection',
'IRegistrationInfo',
'IRemUnknown',
'IRepetitionPattern',
'IRpcChannelBuffer',
'IRpcHelper',
'IRpcOptions',
'IRpcStubBuffer',
'IRunningObjectTable',
'IRunningTask',
'IRunningTaskCollection',
'IScmReplyInfo',
'IScmRequestInfo',
'IShellItem',
'IShellItemArray',
'IShellLinkA',
'IShellLinkW',
'IShowMessageAction',
'IStandardActivator',
'IStdIdentity',
'IStorage',
'IStream',
'ISystemActivator',
'ITaskDefinition',
'ITaskFolder',
'ITaskFolderCollection',
+31 -5
View File
@@ -143,6 +143,32 @@ CR_INVALID_STRUCTURE_SIZE = make_flag("CR_INVALID_STRUCTURE_SIZE", ( 0x0000003B
NUM_CR_RESULTS = make_flag("NUM_CR_RESULTS", ( 0x0000003C ))
PCD_MAX_MEMORY = make_flag("PCD_MAX_MEMORY", 2)
PCD_MAX_IO = make_flag("PCD_MAX_IO", 2)
ORPCF_NULL = make_flag("ORPCF_NULL", ( 0 ))
ORPCF_LOCAL = make_flag("ORPCF_LOCAL", ( 1 ))
ORPCF_RESERVED1 = make_flag("ORPCF_RESERVED1", ( 2 ))
ORPCF_RESERVED2 = make_flag("ORPCF_RESERVED2", ( 4 ))
ORPCF_RESERVED3 = make_flag("ORPCF_RESERVED3", ( 8 ))
ORPCF_RESERVED4 = make_flag("ORPCF_RESERVED4", ( 16 ))
ORPCF_INPUT_SYNC = make_flag("ORPCF_INPUT_SYNC", ORPCF_RESERVED1)
ORPCF_ASYNC = make_flag("ORPCF_ASYNC", ORPCF_RESERVED2)
ORPCF_DYNAMIC_CLOAKING = make_flag("ORPCF_DYNAMIC_CLOAKING", ORPCF_RESERVED3)
ORPCF_REJECTED = make_flag("ORPCF_REJECTED", ORPCF_RESERVED1)
ORPCF_RETRY_LATER = make_flag("ORPCF_RETRY_LATER", ORPCF_RESERVED2)
OBJREF_SIGNATURE = make_flag("OBJREF_SIGNATURE", ( 0x574f454d ))
OBJREF_STANDARD = make_flag("OBJREF_STANDARD", ( 0x1 ))
OBJREF_HANDLER = make_flag("OBJREF_HANDLER", ( 0x2 ))
OBJREF_CUSTOM = make_flag("OBJREF_CUSTOM", ( 0x4 ))
OBJREF_EXTENDED = make_flag("OBJREF_EXTENDED", ( 0x8 ))
SORF_OXRES1 = make_flag("SORF_OXRES1", ( 0x1 ))
SORF_OXRES2 = make_flag("SORF_OXRES2", ( 0x20 ))
SORF_OXRES3 = make_flag("SORF_OXRES3", ( 0x40 ))
SORF_OXRES4 = make_flag("SORF_OXRES4", ( 0x80 ))
SORF_OXRES5 = make_flag("SORF_OXRES5", ( 0x100 ))
SORF_OXRES6 = make_flag("SORF_OXRES6", ( 0x200 ))
SORF_OXRES7 = make_flag("SORF_OXRES7", ( 0x400 ))
SORF_OXRES8 = make_flag("SORF_OXRES8", ( 0x800 ))
SORF_NULL = make_flag("SORF_NULL", ( 0 ))
SORF_NOPING = make_flag("SORF_NOPING", ( 0x1000 ))
CWCSTORAGENAME = make_flag("CWCSTORAGENAME", 32)
STGM_DIRECT = make_flag("STGM_DIRECT", 0x00000000)
STGM_TRANSACTED = make_flag("STGM_TRANSACTED", 0x00010000)
@@ -2410,11 +2436,11 @@ FAX_CONFIG_SET = make_flag("FAX_CONFIG_SET", ( 0x0008 ))
FAX_PORT_QUERY = make_flag("FAX_PORT_QUERY", ( 0x0010 ))
FAX_PORT_SET = make_flag("FAX_PORT_SET", ( 0x0020 ))
FAX_JOB_MANAGE = make_flag("FAX_JOB_MANAGE", ( 0x0040 ))
COM_EXECUTE = make_flag("COM_EXECUTE", ( 0x0001 ))
COM_EXECUTE_LOCAL = make_flag("COM_EXECUTE_LOCAL", ( 0x0002 ))
COM_EXECUTE_REMOTE = make_flag("COM_EXECUTE_REMOTE", ( 0x0004 ))
COM_ACTIVATE_LOCAL = make_flag("COM_ACTIVATE_LOCAL", ( 0x0008 ))
COM_ACTIVATE_REMOTE = make_flag("COM_ACTIVATE_REMOTE", ( 0x0010 ))
COM_RIGHTS_EXECUTE = make_flag("COM_RIGHTS_EXECUTE", ( 0x0001 ))
COM_RIGHTS_EXECUTE_LOCAL = make_flag("COM_RIGHTS_EXECUTE_LOCAL", ( 0x0002 ))
COM_RIGHTS_EXECUTE_REMOTE = make_flag("COM_RIGHTS_EXECUTE_REMOTE", ( 0x0004 ))
COM_RIGHTS_ACTIVATE_LOCAL = make_flag("COM_RIGHTS_ACTIVATE_LOCAL", ( 0x0008 ))
COM_RIGHTS_ACTIVATE_REMOTE = make_flag("COM_RIGHTS_ACTIVATE_REMOTE", ( 0x0010 ))
SECTION_QUERY = make_flag("SECTION_QUERY", 0x0001)
SECTION_MAP_WRITE = make_flag("SECTION_MAP_WRITE", 0x0002)
SECTION_MAP_READ = make_flag("SECTION_MAP_READ", 0x0004)
+40 -15
View File
@@ -405,6 +405,26 @@ SysAllocStringParams = ((1, 'psz'),)
SysFreeStringPrototype = WINFUNCTYPE(VOID, BSTR)
SysFreeStringParams = ((1, 'bstrString'),)
#def CreateStreamOnHGlobal(hGlobal, fDeleteOnRelease, ppstm):
# return CreateStreamOnHGlobal.ctypes_function(hGlobal, fDeleteOnRelease, ppstm)
CreateStreamOnHGlobalPrototype = WINFUNCTYPE(HRESULT, HGLOBAL, BOOL, POINTER(LPSTREAM))
CreateStreamOnHGlobalParams = ((1, 'hGlobal'), (1, 'fDeleteOnRelease'), (1, 'ppstm'))
#def GetHGlobalFromStream(pstm, phglobal):
# return GetHGlobalFromStream.ctypes_function(pstm, phglobal)
GetHGlobalFromStreamPrototype = WINFUNCTYPE(HRESULT, LPUNKNOWN, POINTER(HGLOBAL))
GetHGlobalFromStreamParams = ((1, 'pstm'), (1, 'phglobal'))
#def CoMarshalInterface(pStm, riid, pUnk, dwDestContext, pvDestContext, mshlflags):
# return CoMarshalInterface.ctypes_function(pStm, riid, pUnk, dwDestContext, pvDestContext, mshlflags)
CoMarshalInterfacePrototype = WINFUNCTYPE(HRESULT, LPUNKNOWN, REFIID, LPUNKNOWN, DWORD, LPVOID, DWORD)
CoMarshalInterfaceParams = ((1, 'pStm'), (1, 'riid'), (1, 'pUnk'), (1, 'dwDestContext'), (1, 'pvDestContext'), (1, 'mshlflags'))
#def CoUnmarshalInterface(pStm, riid, ppv):
# return CoUnmarshalInterface.ctypes_function(pStm, riid, ppv)
CoUnmarshalInterfacePrototype = WINFUNCTYPE(HRESULT, PVOID, REFIID, POINTER(LPVOID))
CoUnmarshalInterfaceParams = ((1, 'pStm'), (1, 'riid'), (1, 'ppv'))
#def CryptCATAdminCalcHashFromFileHandle(hFile, pcbHash, pbHash, dwFlags):
# return CryptCATAdminCalcHashFromFileHandle.ctypes_function(hFile, pcbHash, pbHash, dwFlags)
CryptCATAdminCalcHashFromFileHandlePrototype = WINFUNCTYPE(BOOL, HANDLE, POINTER(DWORD), POINTER(BYTE), DWORD)
@@ -2440,21 +2460,6 @@ SymEnumSymbolsParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'Mask'), (1, 'Enu
SymEnumSymbolsExPrototype = WINFUNCTYPE(BOOL, HANDLE, ULONG64, PCSTR, PVOID, PVOID, DWORD)
SymEnumSymbolsExParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'Mask'), (1, 'EnumSymbolsCallback'), (1, 'UserContext'), (1, 'Options'))
#def SymEnumTypes(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext):
# return SymEnumTypes.ctypes_function(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext)
SymEnumTypesPrototype = WINFUNCTYPE(BOOL, HANDLE, ULONG64, PVOID, PVOID)
SymEnumTypesParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'EnumSymbolsCallback'), (1, 'UserContext'))
#def SymEnumTypesByName(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext):
# return SymEnumTypesByName.ctypes_function(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext)
SymEnumTypesByNamePrototype = WINFUNCTYPE(BOOL, HANDLE, ULONG64, PCSTR, PVOID, PVOID)
SymEnumTypesByNameParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'mask'), (1, 'EnumSymbolsCallback'), (1, 'UserContext'))
#def SymEnumTypesByNameW(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext):
# return SymEnumTypesByNameW.ctypes_function(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext)
SymEnumTypesByNameWPrototype = WINFUNCTYPE(BOOL, HANDLE, ULONG64, PCWSTR, PVOID, PVOID)
SymEnumTypesByNameWParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'mask'), (1, 'EnumSymbolsCallback'), (1, 'UserContext'))
#def SymEnumerateModules64(hProcess, EnumModulesCallback, UserContext):
# return SymEnumerateModules64.ctypes_function(hProcess, EnumModulesCallback, UserContext)
SymEnumerateModules64Prototype = WINFUNCTYPE(BOOL, HANDLE, PVOID, PVOID)
@@ -2675,6 +2680,26 @@ SymSetSearchPathParams = ((1, 'hProcess'), (1, 'SearchPath'))
SymSetSearchPathWPrototype = WINFUNCTYPE(BOOL, HANDLE, PCWSTR)
SymSetSearchPathWParams = ((1, 'hProcess'), (1, 'SearchPath'))
#def SymEnumTypes(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext):
# return SymEnumTypes.ctypes_function(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext)
SymEnumTypesPrototype = WINFUNCTYPE(BOOL, HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID)
SymEnumTypesParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'EnumSymbolsCallback'), (1, 'UserContext'))
#def SymEnumTypesW(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext):
# return SymEnumTypesW.ctypes_function(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext)
SymEnumTypesWPrototype = WINFUNCTYPE(BOOL, HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID)
SymEnumTypesWParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'EnumSymbolsCallback'), (1, 'UserContext'))
#def SymEnumTypesByName(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext):
# return SymEnumTypesByName.ctypes_function(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext)
SymEnumTypesByNamePrototype = WINFUNCTYPE(BOOL, HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID)
SymEnumTypesByNameParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'mask'), (1, 'EnumSymbolsCallback'), (1, 'UserContext'))
#def SymEnumTypesByNameW(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext):
# return SymEnumTypesByNameW.ctypes_function(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext)
SymEnumTypesByNameWPrototype = WINFUNCTYPE(BOOL, HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID)
SymEnumTypesByNameWParams = ((1, 'hProcess'), (1, 'BaseOfDll'), (1, 'mask'), (1, 'EnumSymbolsCallback'), (1, 'UserContext'))
#def CreateEventA(lpEventAttributes, bManualReset, bInitialState, lpName):
# return CreateEventA.ctypes_function(lpEventAttributes, bManualReset, bInitialState, lpName)
CreateEventAPrototype = WINFUNCTYPE(HANDLE, LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCSTR)
+591 -54
View File
@@ -93,6 +93,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)
@@ -128,7 +129,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
@@ -137,6 +138,8 @@ PWINDBG_EXTENSION_APIS32 = PVOID
PWINDBG_EXTENSION_APIS64 = PVOID
FILEOP_FLAGS = WORD
NET_API_STATUS = DWORD
PVOID32 = DWORD
PVOID64 = DWORD64
NCRYPT_HANDLE = ULONG_PTR
NCRYPT_PROV_HANDLE = ULONG_PTR
NCRYPT_KEY_HANDLE = ULONG_PTR
@@ -253,6 +256,12 @@ DEVINSTID_W = LPWSTR
RPCOLEDATAREP = ULONG
HREFTYPE = DWORD
SFGAOF = ULONG
ID = ULONG64
MID = ID
OXID = ID
OID = ID
SETID = ID
LPSTREAM = PVOID#Istream*
GROUP = UINT
SOCKET = HANDLE
WNDPROC = PVOID
@@ -473,15 +482,18 @@ class _GUID(Structure):
("Data3", USHORT),
("Data4", BYTE * (8)),
]
CID = _GUID
CLSID = _GUID
GUID = _GUID
IID = _GUID
IPID = _GUID
LPCGUID = POINTER(_GUID)
LPCLSID = POINTER(_GUID)
LPGUID = POINTER(_GUID)
REFCLSID = POINTER(_GUID)
REFGUID = POINTER(_GUID)
REFIID = POINTER(_GUID)
REFIPID = POINTER(_GUID)
INITIAL_GUID = _GUID
class _GUID(INITIAL_GUID):
@@ -507,7 +519,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__
@@ -543,15 +555,18 @@ class _GUID(INITIAL_GUID):
return NotImplemented
return (self.Data1, self.Data2, self.Data3, self.Data4[:]) == (other.Data1, other.Data2, other.Data3, other.Data4[:])
CID = _GUID
CLSID = _GUID
GUID = _GUID
IID = _GUID
IPID = _GUID
LPCGUID = POINTER(_GUID)
LPCLSID = POINTER(_GUID)
LPGUID = POINTER(_GUID)
REFCLSID = POINTER(_GUID)
REFGUID = POINTER(_GUID)
REFIID = POINTER(_GUID)
REFIPID = POINTER(_GUID)
class IO_Des_s(Structure):
_fields_ = [
("IOD_Count", DWORD),
@@ -839,16 +854,6 @@ class tagCALLFRAME_WALK(EnumType):
CALLFRAME_WALK = tagCALLFRAME_WALK
SD_LAUNCHPERMISSIONS = EnumValue("tagCOMSD", "SD_LAUNCHPERMISSIONS", 0x0)
SD_ACCESSPERMISSIONS = EnumValue("tagCOMSD", "SD_ACCESSPERMISSIONS", 0x1)
SD_LAUNCHRESTRICTIONS = EnumValue("tagCOMSD", "SD_LAUNCHRESTRICTIONS", 0x2)
SD_ACCESSRESTRICTIONS = EnumValue("tagCOMSD", "SD_ACCESSRESTRICTIONS", 0x3)
class tagCOMSD(EnumType):
values = [SD_LAUNCHPERMISSIONS, SD_ACCESSPERMISSIONS, SD_LAUNCHRESTRICTIONS, SD_ACCESSRESTRICTIONS]
mapper = FlagMapper(*values)
COMSD = tagCOMSD
class tagMULTI_QI(Structure):
_fields_ = [
("pIID", POINTER(IID)),
@@ -1008,6 +1013,576 @@ VARIANT = __tagVARIANT
VARIANTARG = __tagVARIANT
_tagVARIANT = __tagVARIANT
SD_LAUNCHPERMISSIONS = EnumValue("tagCOMSD", "SD_LAUNCHPERMISSIONS", 0x0)
SD_ACCESSPERMISSIONS = EnumValue("tagCOMSD", "SD_ACCESSPERMISSIONS", 0x1)
SD_LAUNCHRESTRICTIONS = EnumValue("tagCOMSD", "SD_LAUNCHRESTRICTIONS", 0x2)
SD_ACCESSRESTRICTIONS = EnumValue("tagCOMSD", "SD_ACCESSRESTRICTIONS", 0x3)
class tagCOMSD(EnumType):
values = [SD_LAUNCHPERMISSIONS, SD_ACCESSPERMISSIONS, SD_LAUNCHRESTRICTIONS, SD_ACCESSRESTRICTIONS]
mapper = FlagMapper(*values)
COMSD = tagCOMSD
CPFLAG_NONE = EnumValue("tagCPFLAGS", "CPFLAG_NONE", 0x0)
CPFLAG_PROPAGATE = EnumValue("tagCPFLAGS", "CPFLAG_PROPAGATE", 0x1)
CPFLAG_EXPOSE = EnumValue("tagCPFLAGS", "CPFLAG_EXPOSE", 0x2)
CPFLAG_ENVOY = EnumValue("tagCPFLAGS", "CPFLAG_ENVOY", 0x4)
CPFLAG_MONITORSTUB = EnumValue("tagCPFLAGS", "CPFLAG_MONITORSTUB", 0x8)
CPFLAG_MONITORPROXY = EnumValue("tagCPFLAGS", "CPFLAG_MONITORPROXY", 0x10)
CPFLAG_DONTCOMPARE = EnumValue("tagCPFLAGS", "CPFLAG_DONTCOMPARE", 0x20)
class tagCPFLAGS(EnumType):
values = [CPFLAG_NONE, CPFLAG_PROPAGATE, CPFLAG_EXPOSE, CPFLAG_ENVOY, CPFLAG_MONITORSTUB, CPFLAG_MONITORPROXY, CPFLAG_DONTCOMPARE]
mapper = FlagMapper(*values)
CPFLAGS = tagCPFLAGS
CLIENT_CONTEXT_STAGE = EnumValue("tagACTIVATION_STAGE", "CLIENT_CONTEXT_STAGE", 0x1)
CLIENT_MACHINE_STAGE = EnumValue("tagACTIVATION_STAGE", "CLIENT_MACHINE_STAGE", 0x2)
SERVER_MACHINE_STAGE = EnumValue("tagACTIVATION_STAGE", "SERVER_MACHINE_STAGE", 0x3)
SERVER_PROCESS_STAGE = EnumValue("tagACTIVATION_STAGE", "SERVER_PROCESS_STAGE", 0x4)
SERVER_CONTEXT_STAGE = EnumValue("tagACTIVATION_STAGE", "SERVER_CONTEXT_STAGE", 0x5)
class tagACTIVATION_STAGE(EnumType):
values = [CLIENT_CONTEXT_STAGE, CLIENT_MACHINE_STAGE, SERVER_MACHINE_STAGE, SERVER_PROCESS_STAGE, SERVER_CONTEXT_STAGE]
mapper = FlagMapper(*values)
ACTIVATION_STAGE = tagACTIVATION_STAGE
ApartmentThreaded = EnumValue("tagThreadingModel", "ApartmentThreaded", 0x0)
FreeThreaded = EnumValue("tagThreadingModel", "FreeThreaded", 0x1)
SingleThreaded = EnumValue("tagThreadingModel", "SingleThreaded", 0x2)
BothThreaded = EnumValue("tagThreadingModel", "BothThreaded", 0x3)
NeutralThreaded = EnumValue("tagThreadingModel", "NeutralThreaded", 0x4)
class tagThreadingModel(EnumType):
values = [ApartmentThreaded, FreeThreaded, SingleThreaded, BothThreaded, NeutralThreaded]
mapper = FlagMapper(*values)
ThreadingModel = tagThreadingModel
LocalServerType16 = EnumValue("tagLocalServerType", "LocalServerType16", 0x0)
LocalServerType32 = EnumValue("tagLocalServerType", "LocalServerType32", 0x1)
class tagLocalServerType(EnumType):
values = [LocalServerType16, LocalServerType32]
mapper = FlagMapper(*values)
LocalServerType = tagLocalServerType
STREAM_SEEK_SET = EnumValue("tagSTREAM_SEEK", "STREAM_SEEK_SET", 0x0)
STREAM_SEEK_CUR = EnumValue("tagSTREAM_SEEK", "STREAM_SEEK_CUR", 0x1)
STREAM_SEEK_END = EnumValue("tagSTREAM_SEEK", "STREAM_SEEK_END", 0x2)
class tagSTREAM_SEEK(EnumType):
values = [STREAM_SEEK_SET, STREAM_SEEK_CUR, STREAM_SEEK_END]
mapper = FlagMapper(*values)
STREAM_SEEK = tagSTREAM_SEEK
MSHCTX_LOCAL = EnumValue("tagMSHCTX", "MSHCTX_LOCAL", 0x0)
MSHCTX_NOSHAREDMEM = EnumValue("tagMSHCTX", "MSHCTX_NOSHAREDMEM", 0x1)
MSHCTX_DIFFERENTMACHINE = EnumValue("tagMSHCTX", "MSHCTX_DIFFERENTMACHINE", 0x2)
MSHCTX_INPROC = EnumValue("tagMSHCTX", "MSHCTX_INPROC", 0x3)
MSHCTX_CROSSCTX = EnumValue("tagMSHCTX", "MSHCTX_CROSSCTX", 0x4)
MSHCTX_CONTAINER = EnumValue("tagMSHCTX", "MSHCTX_CONTAINER", 0x5)
class tagMSHCTX(EnumType):
values = [MSHCTX_LOCAL, MSHCTX_NOSHAREDMEM, MSHCTX_DIFFERENTMACHINE, MSHCTX_INPROC, MSHCTX_CROSSCTX, MSHCTX_CONTAINER]
mapper = FlagMapper(*values)
MSHCTX = tagMSHCTX
class tagOpaqueData(Structure):
_fields_ = [
("guid", GUID),
("dataLength", ULONG),
("reserved1", ULONG),
("reserved2", ULONG),
("data", POINTER(BYTE)),
]
OpaqueData = tagOpaqueData
class tagSTDOBJREF(Structure):
_fields_ = [
("flags", ULONG),
("cPublicRefs", ULONG),
("oxid", OXID),
("oid", OID),
("ipid", IPID),
]
STDOBJREF = tagSTDOBJREF
class tagDATAELEMENT(Structure):
_fields_ = [
("dataID", GUID),
("cbSize", ULONG),
("cbRounded", ULONG),
("Data", BYTE * (1)),
]
DATAELEMENT = tagDATAELEMENT
PDATAELEMENT = POINTER(tagDATAELEMENT)
class tagOBJREFDATA(Structure):
_fields_ = [
("nElms", ULONG),
("ppElmArray", POINTER(PDATAELEMENT)),
]
OBJREFDATA = tagOBJREFDATA
class tagDUALSTRINGARRAY(Structure):
_fields_ = [
("wNumEntries", USHORT),
("wSecurityOffset", USHORT),
("aStringArray", USHORT * (1)),
]
DUALSTRINGARRAY = tagDUALSTRINGARRAY
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")
DUALSTRINGARRAY = tagDUALSTRINGARRAY
class _ANON__ANON_TAGOBJREF_SUB_UNION_1_SUB_STRUCTURE_1(Structure):
_fields_ = [
("std", STDOBJREF),
("saResAddr", DUALSTRINGARRAY),
]
class _ANON__ANON_TAGOBJREF_SUB_UNION_1_SUB_STRUCTURE_2(Structure):
_fields_ = [
("std", STDOBJREF),
("clsid", CLSID),
("saResAddr", DUALSTRINGARRAY),
]
class _ANON__ANON_TAGOBJREF_SUB_UNION_1_SUB_STRUCTURE_3(Structure):
_fields_ = [
("clsid", CLSID),
("cbExtension", ULONG),
("size", ULONG),
("pData", POINTER(BYTE)),
]
class _ANON__ANON_TAGOBJREF_SUB_UNION_1_SUB_STRUCTURE_4(Structure):
_fields_ = [
("std", STDOBJREF),
("pORData", POINTER(OBJREFDATA)),
("saResAddr", DUALSTRINGARRAY),
]
class _ANON_TAGOBJREF_SUB_UNION_1(Union):
_anonymous_ = ("u_standard","u_handler","u_custom","u_extended")
_fields_ = [
("u_standard", _ANON__ANON_TAGOBJREF_SUB_UNION_1_SUB_STRUCTURE_1),
("u_handler", _ANON__ANON_TAGOBJREF_SUB_UNION_1_SUB_STRUCTURE_2),
("u_custom", _ANON__ANON_TAGOBJREF_SUB_UNION_1_SUB_STRUCTURE_3),
("u_extended", _ANON__ANON_TAGOBJREF_SUB_UNION_1_SUB_STRUCTURE_4),
]
class tagOBJREF(Structure):
_anonymous_ = ("u_objref",)
_fields_ = [
("signature", ULONG),
("flags", ULONG),
("iid", GUID),
("u_objref", _ANON_TAGOBJREF_SUB_UNION_1),
]
OBJREF = tagOBJREF
class tagCOMVERSION(Structure):
_fields_ = [
("MajorVersion", USHORT),
("MinorVersion", USHORT),
]
COMVERSION = tagCOMVERSION
class tagORPC_EXTENT(Structure):
_fields_ = [
("id", _GUID),
("size", ULONG),
("data", BYTE * (1)),
]
ORPC_EXTENT = tagORPC_EXTENT
PORPC_EXTENT = tagORPC_EXTENT
class tagORPC_EXTENT_ARRAY(Structure):
_fields_ = [
("size", ULONG),
("reserved", ULONG),
("extent", POINTER(PORPC_EXTENT)),
]
ORPC_EXTENT_ARRAY = tagORPC_EXTENT_ARRAY
class tagORPCTHIS(Structure):
_fields_ = [
("version", COMVERSION),
("flags", ULONG),
("reserved1", ULONG),
("cid", GUID),
("extensions", PVOID),
]
ORPCTHIS = tagORPCTHIS
class tagORPCTHIS32(Structure):
_fields_ = [
("version", COMVERSION),
("flags", ULONG),
("reserved1", ULONG),
("cid", GUID),
("extensions", PVOID32),
]
ORPCTHIS32 = tagORPCTHIS32
class tagOXID_INFO(Structure):
_fields_ = [
("dwTid", DWORD),
("dwPid", DWORD),
("dwAuthnHint", DWORD),
("version", COMVERSION),
("ipidRemUnknown", IPID),
("dwFlags", DWORD),
("psa", POINTER(DUALSTRINGARRAY)),
]
OXID_INFO = tagOXID_INFO
class tagContextProperty(Structure):
_fields_ = [
("policyId", GUID),
("flags", CPFLAGS),
("pUnk", PVOID),
]
ContextProperty = tagContextProperty
class _PRIV_SCM_INFO(Structure):
_fields_ = [
("Apartment", LONG),
("pwszWinstaDesktop", POINTER(WCHAR)),
("ProcessSignature", ULONG64),
("pEnvBlock", POINTER(WCHAR)),
("EnvBlockLength", DWORD),
]
PRIV_SCM_INFO = _PRIV_SCM_INFO
class _REMOTE_REQUEST_SCM_INFO(Structure):
_fields_ = [
("ClientImpLevel", DWORD),
("cRequestedProtseqs", USHORT),
("pRequestedProtseqs", POINTER(USHORT)),
]
REMOTE_REQUEST_SCM_INFO = _REMOTE_REQUEST_SCM_INFO
class tagMInterfacePointer(Structure):
_fields_ = [
("ulCntData", ULONG),
("abData", BYTE * (1)),
]
MInterfacePointer = tagMInterfacePointer
PMInterfacePointer = POINTER(tagMInterfacePointer)
INITIAL_tagMInterfacePointer = tagMInterfacePointer
class tagMInterfacePointer(INITIAL_tagMInterfacePointer):
@property
def objref(self):
return OBJREF.from_address(ctypes.addressof(self.abData))
MInterfacePointer = tagMInterfacePointer
PMInterfacePointer = POINTER(tagMInterfacePointer)
class tagRPCOLEMESSAGE(Structure):
_fields_ = [
("reserved1", PVOID),
("dataRepresentation", RPCOLEDATAREP),
("Buffer", PVOID),
("cbBuffer", ULONG),
("iMethod", ULONG),
("reserved2", PVOID * (5)),
("rpcFlags", ULONG),
]
PRPCOLEMESSAGE = POINTER(tagRPCOLEMESSAGE)
RPCOLEMESSAGE = tagRPCOLEMESSAGE
class tagREMQIRESULT(Structure):
_fields_ = [
("hResult", HRESULT),
("std", STDOBJREF),
]
PREMQIRESULT = POINTER(tagREMQIRESULT)
REMQIRESULT = tagREMQIRESULT
class tagREMINTERFACEREF(Structure):
_fields_ = [
("ipid", IPID),
("cPublicRefs", ULONG),
("cPrivateRefs", ULONG),
]
REMINTERFACEREF = tagREMINTERFACEREF
class _PRIV_RESOLVER_INFO_LEGACY(Structure):
_fields_ = [
("OxidServer", OXID),
("pServerORBindings", POINTER(DUALSTRINGARRAY)),
("OxidInfo", OXID_INFO),
("LocalMidOfRemote", MID),
("DllServerModel", DWORD),
("pwszDllServer", POINTER(WCHAR)),
("FoundInROT", BOOL),
]
PPRIV_RESOLVER_INFO_LEGACY = POINTER(_PRIV_RESOLVER_INFO_LEGACY)
PRIV_RESOLVER_INFO_LEGACY = _PRIV_RESOLVER_INFO_LEGACY
class _REMOTE_REPLY_SCM_INFO(Structure):
_fields_ = [
("Oxid", OXID),
("pdsaOxidBindings", POINTER(DUALSTRINGARRAY)),
("ipidRemUnknown", IPID),
("authnHint", DWORD),
("serverVersion", COMVERSION),
]
PREMOTE_REPLY_SCM_INFO = POINTER(_REMOTE_REPLY_SCM_INFO)
REMOTE_REPLY_SCM_INFO = _REMOTE_REPLY_SCM_INFO
class CONTAINER_EXTENT(Structure):
_fields_ = [
("id", UINT),
("version", UINT),
("size", UINT),
("data", BYTE * (1)),
]
class CONTAINER_EXTENT_ARRAY(Structure):
_fields_ = [
("size", UINT),
("reserved", UINT),
("extent", POINTER(CONTAINER_EXTENT)),
]
class HSTRING__(Structure):
_fields_ = [
("unused", INT),
]
class CONTAINERVERSION(Structure):
_fields_ = [
("version", UINT),
("capabilityFlags", UINT64),
("extensions", POINTER(CONTAINER_EXTENT_ARRAY)),
]
class _MIDL_ILocalObjectExporter_0007(Structure):
_fields_ = [
("dwTid", ULONG),
("dwPid", ULONG),
("dwAuthnHint", ULONG),
("dcomVersion", tagCOMVERSION),
("containerVersion", CONTAINERVERSION),
("ipidRemUnknown", _GUID),
("dwFlags", ULONG),
("psa", POINTER(tagDUALSTRINGARRAY)),
("guidProcessIdentifier", _GUID),
("processHostId", UINT64),
("clientDependencyBehavior", INT),
("packageFullName", POINTER(HSTRING__)),
("userSid", POINTER(HSTRING__)),
("appcontainerSid", POINTER(HSTRING__)),
("primaryOxid", UINT64),
("primaryIpidRemUnknown", _GUID),
]
MIDL_ILocalObjectExporter_0007 = _MIDL_ILocalObjectExporter_0007
class _PRIV_RESOLVER_INFO(Structure):
_fields_ = [
("OxidServer", UINT64),
("pServerORBindings", POINTER(tagDUALSTRINGARRAY)),
("OxidInfo", MIDL_ILocalObjectExporter_0007),
("LocalMidOfRemote", UINT64),
("FoundInROT", INT),
]
PPRIV_RESOLVER_INFO = POINTER(_PRIV_RESOLVER_INFO)
PRIV_RESOLVER_INFO = _PRIV_RESOLVER_INFO
class _MIDL_XmitDefs_0001(Structure):
_fields_ = [
("asyncOperationId", GUID),
("oxidClientProcessNA", ULONG64),
("originalClientLogicalThreadId", GUID),
("uClientCausalityTraceId", ULONG64),
]
MIDL_XmitDefs_0001 = _MIDL_XmitDefs_0001
class _LOCALTHIS(Structure):
_fields_ = [
("dwFlags", DWORD),
("dwClientThread", DWORD),
("passthroughTraceActivity", GUID),
("callTraceActivity", GUID),
("asyncRequestBlock", MIDL_XmitDefs_0001),
("reserved", DWORD),
("pTouchedAstaArray", PVOID),
]
LOCALTHIS = _LOCALTHIS
class _LOCALTHIS32(Structure):
_fields_ = [
("dwFlags", DWORD),
("dwClientThread", DWORD),
("passthroughTraceActivity", GUID),
("callTraceActivity", GUID),
("asyncRequestBlock", MIDL_XmitDefs_0001),
("reserved", DWORD),
("pTouchedAstaArray", PVOID32),
]
LOCALTHIS32 = _LOCALTHIS32
class _MIDL_XmitDefs_0007(Structure):
_fields_ = [
("pointOfFailure", INT),
("hrFailure", HRESULT),
("sizeOfMarshaledErrorInfo", ULONG),
("reserved", ULONG),
("pMarshaledErrorInfo", POINTER(BYTE)),
]
class _MIDL_XmitDefs_0005(Structure):
_fields_ = [
("sizeOfMarshaledResults", ULONG),
("reserved", ULONG),
("pMarshaledResults", POINTER(BYTE)),
]
class _MIDL_XmitDefs_0008(Structure):
_fields_ = [
("outcome", INT),
("successDetails", _MIDL_XmitDefs_0005),
("failureDetails", _MIDL_XmitDefs_0007),
]
class _MIDL_XmitDefs_0010(Structure):
_fields_ = [
("asyncStatus", ULONG),
("reserved1", ULONG),
("uServerCausalityTraceId", UINT64),
("completionTraceActivity", _GUID),
("reserved2", ULONG),
("pOutcomeDetails", POINTER(_MIDL_XmitDefs_0008)),
]
class CONTAINERTHAT(Structure):
_fields_ = [
("responseFlags", UINT64),
("unassignedPassthroughGuid_1", _GUID),
("unassignedPassthroughGuid_2", _GUID),
("unassignedPassthroughGuid_3", _GUID),
("unassignedPassthroughGuid_4", _GUID),
("reservedGuid_1", _GUID),
("reservedGuid_2", _GUID),
("reservedGuid_3", _GUID),
("reservedGuid_4", _GUID),
("unassignedPassthroughUint64_1", UINT64),
("unassignedPassthroughUint64_2", UINT64),
("unassignedPassthroughUint64_3", UINT64),
("unassignedPassthroughUint64_4", UINT64),
("marshalingSetId", UINT64),
("reservedUint64_2", UINT64),
("reservedUint64_3", UINT64),
("reservedUint64_4", UINT64),
("reservedUint32", UINT),
("extensions", POINTER(CONTAINER_EXTENT_ARRAY)),
]
class _LOCALTHAT(Structure):
_fields_ = [
("marshalingSetId", UINT64),
("reserved", ULONG),
("pAsyncResponseBlock", POINTER(_MIDL_XmitDefs_0010)),
("containerErrorInformation", POINTER(CONTAINER_EXTENT)),
("containerPassthroughData", POINTER(CONTAINERTHAT)),
]
LOCALTHAT = _LOCALTHAT
class _LOCALTHAT32(Structure):
_fields_ = [
("marshalingSetId", UINT64),
("reserved", ULONG),
("pAsyncResponseBlock", PVOID32),
("containerErrorInformation", PVOID32),
("containerPassthroughData", PVOID32),
]
LOCALTHAT32 = _LOCALTHAT32
class tagORPCTHAT(Structure):
_fields_ = [
("flags", ULONG),
("extensions", POINTER(tagORPC_EXTENT_ARRAY)),
]
ORPCTHAT = tagORPCTHAT
class ORPCTHAT32(Structure):
_fields_ = [
("flags", ULONG),
("extensions", PVOID32),
]
VIRTUAL_DISK_ACCESS_NONE = EnumValue("_VIRTUAL_DISK_ACCESS_MASK", "VIRTUAL_DISK_ACCESS_NONE", 0x0)
VIRTUAL_DISK_ACCESS_ATTACH_RO = EnumValue("_VIRTUAL_DISK_ACCESS_MASK", "VIRTUAL_DISK_ACCESS_ATTACH_RO", 0x1)
VIRTUAL_DISK_ACCESS_ATTACH_RW = EnumValue("_VIRTUAL_DISK_ACCESS_MASK", "VIRTUAL_DISK_ACCESS_ATTACH_RW", 0x2)
@@ -3336,7 +3911,7 @@ class _IMAGEHLP_MODULEW64(Structure):
("LoadedImageName", WCHAR * (256)),
("LoadedPdbName", WCHAR * (256)),
("CVSig", DWORD),
("CVData", POINTER(WCHAR) * (MAX_PATH * 3)),
("CVData", WCHAR * (MAX_PATH * 3)),
("PdbSig", DWORD),
("PdbSig70", GUID),
("PdbAge", DWORD),
@@ -6109,16 +6684,16 @@ class _OBJECT_ATTRIBUTES(_OBJECT_ATTRIBUTES):
return """<{0} ObjectName="{1}">""".format(type(self).__name__, self.ObjectName.contents.str)
OBJECT_ATTRIBUTES = _OBJECT_ATTRIBUTES
POBJECT_ATTRIBUTES = POINTER(_OBJECT_ATTRIBUTES)
class _TMP_UNION_IO_STATUS_BLOCK(Union):
class _ANON__IO_STATUS_BLOCK_SUB_UNION_1(Union):
_fields_ = [
("Status", NTSTATUS),
("Pointer", PVOID),
]
TMP_UNION_IO_STATUS_BLOCK = _TMP_UNION_IO_STATUS_BLOCK
class _IO_STATUS_BLOCK(Structure):
_anonymous_ = ("anon_01",)
_fields_ = [
("DUMMYUNIONNAME", TMP_UNION_IO_STATUS_BLOCK),
("anon_01", _ANON__IO_STATUS_BLOCK_SUB_UNION_1),
("Information", ULONG_PTR),
]
IO_STATUS_BLOCK = _IO_STATUS_BLOCK
@@ -6918,44 +7493,6 @@ class _REMOTE_PORT_VIEW(Structure):
PREMOTE_PORT_VIEW = POINTER(_REMOTE_PORT_VIEW)
REMOTE_PORT_VIEW = _REMOTE_PORT_VIEW
class tagCOMVERSION(Structure):
_fields_ = [
("MajorVersion", USHORT),
("MinorVersion", USHORT),
]
COMVERSION = tagCOMVERSION
class tagORPCTHIS(Structure):
_fields_ = [
("version", COMVERSION),
("flags", ULONG),
("reserved1", ULONG),
("cid", GUID),
("extensions", PVOID),
]
ORPCTHIS = tagORPCTHIS
class __MIDL_XmitDefs_0001(Structure):
_fields_ = [
("asyncOperationId", GUID),
("oxidClientProcessNA", ULONG64),
("originalClientLogicalThreadId", GUID),
("uClientCausalityTraceId", ULONG64),
]
MIDL_XmitDefs_0001 = __MIDL_XmitDefs_0001
class _LOCALTHIS(Structure):
_fields_ = [
("dwFlags", DWORD),
("dwClientThread", DWORD),
("passthroughTraceActivity", GUID),
("callTraceActivity", GUID),
("asyncRequestBlock", MIDL_XmitDefs_0001),
("reserved", DWORD),
("pTouchedAstaArray", PVOID),
]
LOCALTHIS = _LOCALTHIS
ECS_ENABLED = EnumValue("_EXPCMDSTATE", "ECS_ENABLED", 0x0)
ECS_DISABLED = EnumValue("_EXPCMDSTATE", "ECS_DISABLED", 0x1)
ECS_HIDDEN = EnumValue("_EXPCMDSTATE", "ECS_HIDDEN", 0x2)
+3
View File
@@ -892,16 +892,19 @@ class CmpsB(Instruction):
default_32_bits = True
encoding = [(RawBits.from_int(8, 0xa6),)]
cmpsw = CmpsB # Allow use in assemble (use Capitalize) : todo cleaner
class CmpsW(Instruction):
default_32_bits = True
encoding = [(RawBits.from_int(16, 0x66A7),)]
Cmpsw = CmpsW # Allow use in assemble (use Capitalize) : todo cleaner
class CmpsD(Instruction):
default_32_bits = True
encoding = [(RawBits.from_int(8, 0xa7),)]
Cmpsd = CmpsD # Allow use in assemble (use Capitalize) : todo cleaner
class Nop(Instruction):
encoding = [(RawBits.from_int(8, 0x90),)]
+45 -21
View File
@@ -14,6 +14,8 @@ KNOW_RESPONSE_TYPE = gdef.FlagMapper(gdef.RPC_RESPONSE_TYPE_FAIL, gdef.RPC_RESPO
KNOWN_RPC_ERROR_CODE = gdef.FlagMapper(
gdef.ERROR_INVALID_HANDLE,
gdef.RPC_X_BAD_STUB_DATA,
gdef.RPC_E_INVALID_HEADER,
gdef.RPC_E_DISCONNECTED,
gdef.RPC_S_UNKNOWN_IF,
gdef.RPC_S_PROTOCOL_ERROR,
gdef.RPC_S_UNSUPPORTED_TRANS_SYN,
@@ -57,34 +59,36 @@ class ALPC_RPC_CALL(ctypes.Structure):
("UNK5", gdef.DWORD),
("UNK6", gdef.DWORD),
("UNK7", gdef.DWORD),
("ORPC_IPID", gdef.GUID)
("orpc_ipid", gdef.GUID)
]
class RPCClient(object):
"""A client for RPC-over-ALPC able to bind to interface and perform calls using NDR32 marshalling"""
REQUEST_IDENTIFIER = 0x11223344
def __init__(self, port):
self.alpc_client = alpc.AlpcClient(port) #: The :class:`windows.alpc.AlpcClient` used to communicate with the server
self.number_of_bind_if = 0 # if -> interface
self.if_bind_number = {}
def bind(self, IID_str, version=(1,0)):
"""Bind to the ``IID_str`` with the given ``version``
def bind(self, iid, version=(1,0)):
"""Bind to the ``IID`` with the given ``version``
:returns: :class:`windows.generated_def.IID`
"""
IID = windows.com.IID.from_string(IID_str)
request = self._forge_bind_request(IID, version, self.number_of_bind_if)
if not isinstance(iid, gdef.GUID):
iid = windows.com.IID.from_string(iid)
request = self._forge_bind_request(iid, version, self.number_of_bind_if)
response = self._send_request(request)
# Parse reponse
request_type = self._get_request_type(response)
if request_type != gdef.RPC_RESPONSE_TYPE_BIND_OK:
raise ValueError("Unexpected reponse type. Expected RESPONSE_TYPE_BIND_OK got {0}".format(KNOW_RESPONSE_TYPE[request_type]))
iid_hash = hash(buffer(IID)[:]) # TODO: add __hash__ to IID
iid_hash = hash(buffer(iid)[:]) # TODO: add __hash__ to IID
self.if_bind_number[iid_hash] = self.number_of_bind_if
self.number_of_bind_if += 1
#TODO: attach version information to IID
return IID
return iid
def forge_alpc_request(self, IID, method_offset, params, ipid=None):
"""Craft an ALPC message containing an RPC request to call ``method_offset`` of interface ``IID`
@@ -113,18 +117,17 @@ class RPCClient(object):
request_type = self._get_request_type(response)
if request_type != gdef.RPC_RESPONSE_TYPE_SUCCESS:
raise ValueError("Unexpected reponse type. Expected RESPONSE_SUCCESS got {0}".format(KNOW_RESPONSE_TYPE[request_type]))
return self._get_response_effective_data(response)
# windows.utils.sprint(ALPC_RPC_CALL.from_buffer_copy(response + "\x00" * 12))
data = struct.unpack("<6I", response[:6 * 4])
assert data[3] == self.REQUEST_IDENTIFIER
return response[4 * 6:] # Should be the return value (not completly verified)
# data = struct.unpack("<6I", response[:6 * 4])
# assert data[3] == self.REQUEST_IDENTIFIER
# return response[4 * 6:] # Should be the return value (not completly verified)
def _send_request(self, request):
response = self.alpc_client.send_receive(request)
return response.data
return self.alpc_client.send_receive(request)
def _forge_call_request(self, interface_nb, method_offset, params, ipid=None):
# TODO: differents REQUEST_IDENTIFIER for each req ?
# TODO: differents REQUEST_IDENTIFIER for each req ? Use REQUEST_IDENTIFIER to identify ORPC calls ?
# TODO: what is this '0' ? (1 is also accepted) (flags ?)
# request = struct.pack("<16I", gdef.RPC_REQUEST_TYPE_CALL, NOT_USED, 1, self.REQUEST_IDENTIFIER, interface_nb, method_offset, *[NOT_USED] * 10)
req = ALPC_RPC_CALL()
@@ -134,16 +137,24 @@ class RPCClient(object):
req.if_nb = interface_nb
req.method_offset = method_offset
if ipid:
req.ORPC_IPID = ipid
this = gdef.ORPCTHIS()
req.flags = 1 # We have a IPID
req.orpc_ipid = ipid
this = gdef.ORPCTHIS32() # we use NDR32
this.version = (5,7)
this.flags = 1
lthis = gdef.LOCALTHIS()
this.flags = gdef.ORPCF_LOCAL
# Not mandatory
# this.cid = gdef.GUID.from_string("42424242-4242-4242-4242-424242424242")
lthis = gdef.LOCALTHIS32() # we use NDR32
# RPC_E_INVALID_HEADER is NULL
lthis.callTraceActivity = gdef.GUID.from_string("42424242-4242-4242-4242-424242424242")
lthis.dwClientThread = windows.current_thread.tid
return buffer(req)[:] + buffer(this)[:] + buffer(lthis)[:] + params
return buffer(req)[:] + params
def _forge_call_request_in_view(self, interface_nb, method_offset, params, ipid=None):
# Version crade qui clean rien pour POC. GROS DOUTES :D
if ipid:
raise NotImplementedError("RpcClient._forge_call_request_in_view() with ipid")
raw_request = self._forge_call_request(interface_nb, method_offset, b"")
p = windows.alpc.AlpcMessage(0x2000)
section = self.alpc_client.create_port_section(0x40000, 0, len(params))
@@ -171,9 +182,22 @@ class RPCClient(object):
return buffer(req)[:]
def _get_request_type(self, response):
"""Response is a `AlpcMessage`"""
"raise if request_type == RESPONSE_TYPE_FAIL"
request_type = struct.unpack("<I", response[:4])[0]
request_type = struct.unpack("<I", response.data[:4])[0]
if request_type == gdef.RPC_RESPONSE_TYPE_FAIL:
error_code = struct.unpack("<5I", response)[2]
error_code = struct.unpack("<5I", response.data)[2]
raise ValueError("RPC Response error {0} ({1})".format(error_code, KNOWN_RPC_ERROR_CODE.get(error_code, error_code)))
return request_type
return request_type
def _get_response_effective_data(self, response):
"""Response is a `AlpcMessage` needed to handle response in message vs response in view"""
if not response.view_is_valid:
# Reponse directly in PORT_MESSAGE
return response.data[0x18:] # 4 * 6
# Response in view M extract size from PORT_MESSAGE & read data from view
assert response.port_message.u1.s1.TotalLength >= 0x48 # At least 0x20 of data
rpcdatasize = struct.unpack("<I", response.data[0x18:0x1c])[0]
viewattr = response.view_attribute
assert viewattr.ViewSize >= rpcdatasize
return windows.current_process.read_memory(viewattr.ViewBase, rpcdatasize)
+1
View File
@@ -554,6 +554,7 @@ class NdrStream(object):
def __init__(self, data):
self.fulldata = data
self.data = data
# self.data = memoryview(data) # FAST but need some code rewrite at some places
def partial_unpack(self, format):
size = struct.calcsize(format)
+6 -6
View File
@@ -175,11 +175,11 @@ SECTION_ACCESS_RIGHT = gdef.FlagMapper(
)
COM_ACCESS_RIGHT = gdef.FlagMapper(
gdef.COM_EXECUTE,
gdef.COM_EXECUTE_LOCAL,
gdef.COM_EXECUTE_REMOTE,
gdef.COM_ACTIVATE_LOCAL,
gdef.COM_ACTIVATE_REMOTE,
gdef.COM_RIGHTS_EXECUTE,
gdef.COM_RIGHTS_EXECUTE_LOCAL,
gdef.COM_RIGHTS_EXECUTE_REMOTE,
gdef.COM_RIGHTS_ACTIVATE_LOCAL,
gdef.COM_RIGHTS_ACTIVATE_REMOTE,
)
SERVICE_ACCESS_RIGHT = gdef.FlagMapper(
@@ -206,7 +206,6 @@ ADS_ACCESS_RIGHT = gdef.FlagMapper(
gdef.ADS_RIGHT_DS_CONTROL_ACCESS,
)
SPECIFIC_ACCESS_RIGTH_BY_TYPE = {
None: gdef.FlagMapper(),
"file": FILE_ACCESS_RIGHT,
@@ -218,6 +217,7 @@ SPECIFIC_ACCESS_RIGTH_BY_TYPE = {
"callback": CALLBACK_ACCESS_RIGHT,
"mutant": MUTANT_ACCESS_RIGHT,
"event": EVENT_ACCESS_RIGHT,
"section": SECTION_ACCESS_RIGHT,
"semaphore": SEMAPHORE_ACCESS_RIGHT,
"io_completion": IO_COMPLETION_ACCESS_RIGHT,
"port": PORT_ACCESS_RIGHT,
+4
View File
@@ -133,6 +133,10 @@ def SymEnumTypes(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext=None):
UserContext = transform_pyobject_to_pvoid(UserContext)
return SymEnumTypes.ctypes_function(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext)
@DbgHelpProxy()
def SymEnumTypesW(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext=None):
return SymEnumTypesW.ctypes_function(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext)
@DbgHelpProxy()
def SymEnumTypesByName(hProcess, BaseOfDll, mask, EnumSymbolsCallback, UserContext=None):
UserContext = transform_pyobject_to_pvoid(UserContext)
+17 -1
View File
@@ -46,4 +46,20 @@ def CLSIDFromProgID(lpszProgID, lpclsid):
@Ole32Proxy()
def CoTaskMemFree(pv):
return CoTaskMemFree.ctypes_function(pv)
return CoTaskMemFree.ctypes_function(pv)
@Ole32Proxy()
def CreateStreamOnHGlobal(hGlobal=None, fDeleteOnRelease=True, ppstm=NeededParameter):
return CreateStreamOnHGlobal.ctypes_function(hGlobal, fDeleteOnRelease, ppstm)
@Ole32Proxy()
def GetHGlobalFromStream(pstm, phglobal):
return GetHGlobalFromStream.ctypes_function(pstm, phglobal)
@Ole32Proxy()
def CoMarshalInterface(pStm, riid, pUnk, dwDestContext, pvDestContext, mshlflags):
return CoMarshalInterface.ctypes_function(pStm, riid, pUnk, dwDestContext, pvDestContext, mshlflags)
@Ole32Proxy()
def CoUnmarshalInterface(pStm, riid, ppv):
return CoUnmarshalInterface.ctypes_function(pStm, riid, ppv)