Merge pull request #70 from hakril/more_stubborn_tests

More stubborn tests & Implem
This commit is contained in:
hakril
2025-01-15 13:52:42 -08:00
committed by GitHub
7 changed files with 666 additions and 77 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ jobs:
tests:
# Not a real dependency : but starting tests when ctypes generation is broken is not useful
needs: generate_ctypes
runs-on: windows-latest
runs-on: windows-2019
timeout-minutes: 15
strategy:
fail-fast: false
@@ -253,6 +253,7 @@ typedef struct _PRIV_RESOLVER_INFO_LEGACY
BOOL FoundInROT;
} PRIV_RESOLVER_INFO_LEGACY, *PPRIV_RESOLVER_INFO_LEGACY;
typedef struct _REMOTE_REPLY_SCM_INFO
{
OXID Oxid;
@@ -287,6 +288,31 @@ typedef struct CONTAINERVERSION {
CONTAINER_EXTENT_ARRAY *extensions;
};
typedef struct __MIDL_ILocalObjectExporter_0006 {
ULONG dwTid;
ULONG dwPid;
ULONG dwAuthnHint;
tagCOMVERSION version;
_GUID ipidRemUnknown;
ULONG dwFlags;
tagDUALSTRINGARRAY *psa;
_GUID guidProcessIdentifier;
UINT64 processHostId;
INT clientDependencyBehavior;
HSTRING__ *packageFullName;
HSTRING__ *userSid;
HSTRING__ *appcontainerSid;
} MIDL_ILocalObjectExporter_0006;
typedef struct _PRIV_RESOLVER_INFO_17763 {
UINT64 OxidServer;
tagDUALSTRINGARRAY *pServerORBindings;
MIDL_ILocalObjectExporter_0006 OxidInfo;
UINT64 LocalMidOfRemote;
ULONG DllServerModel;
WCHAR *pwszDllServer;
INT FoundInROT;
} PRIV_RESOLVER_INFO_17763, *PPRIV_RESOLVER_INFO_17763;
typedef struct _MIDL_ILocalObjectExporter_0007 {
ULONG dwTid;
+12
View File
@@ -152,6 +152,9 @@ WinDef
.. autodata:: SORF_OXRES8
.. autodata:: SORF_NULL
.. autodata:: SORF_NOPING
.. autodata:: UNIQUE_FLAG_PADDING
.. autodata:: MAINHDRSIG
.. autodata:: ENTRYHDRSIG
.. autodata:: CWCSTORAGENAME
.. autodata:: STGM_DIRECT
.. autodata:: STGM_TRANSACTED
@@ -496,6 +499,15 @@ WinDef
.. autodata:: ERROR_SEVERITY_INFORMATIONAL
.. autodata:: ERROR_SEVERITY_WARNING
.. autodata:: ERROR_SEVERITY_ERROR
.. autodata:: FACILITY_WINDOWS
.. autodata:: FACILITY_WIN32
.. autodata:: FACILITY_STORAGE
.. autodata:: FACILITY_RPC
.. autodata:: FACILITY_NULL
.. autodata:: FACILITY_ITF
.. autodata:: FACILITY_DISPATCH
.. autodata:: STATUS_SEVERITY_SUCCESS
.. autodata:: STATUS_SEVERITY_COERROR
.. autodata:: EVENT_TRACE_FLAG_DISPATCHER
.. autodata:: EVENT_TRACE_FLAG_VIRTUAL_ALLOC
.. autodata:: EVENT_TRACE_FLAG_VAMAP
+580 -72
View File
@@ -2716,6 +2716,124 @@ CONTAINERVERSION
:class:`CONTAINER_EXTENT_ARRAY`
__MIDL_ILocalObjectExporter_0006
''''''''''''''''''''''''''''''''
.. class:: MIDL_ILocalObjectExporter_0006
Alias for :class:`__MIDL_ILocalObjectExporter_0006`
.. class:: __MIDL_ILocalObjectExporter_0006
.. attribute:: dwTid
:class:`ULONG`
.. attribute:: dwPid
:class:`ULONG`
.. attribute:: dwAuthnHint
:class:`ULONG`
.. attribute:: version
:class:`tagCOMVERSION`
.. attribute:: ipidRemUnknown
:class:`_GUID`
.. attribute:: dwFlags
:class:`ULONG`
.. attribute:: psa
:class:`tagDUALSTRINGARRAY`
.. attribute:: guidProcessIdentifier
:class:`_GUID`
.. attribute:: processHostId
:class:`UINT64`
.. attribute:: clientDependencyBehavior
:class:`INT`
.. attribute:: packageFullName
:class:`HSTRING__`
.. attribute:: userSid
:class:`HSTRING__`
.. attribute:: appcontainerSid
:class:`HSTRING__`
_PRIV_RESOLVER_INFO_17763
'''''''''''''''''''''''''
.. class:: PPRIV_RESOLVER_INFO_17763
Pointer to :class:`_PRIV_RESOLVER_INFO_17763`
.. class:: PRIV_RESOLVER_INFO_17763
Alias for :class:`_PRIV_RESOLVER_INFO_17763`
.. class:: _PRIV_RESOLVER_INFO_17763
.. attribute:: OxidServer
:class:`UINT64`
.. attribute:: pServerORBindings
:class:`tagDUALSTRINGARRAY`
.. attribute:: OxidInfo
:class:`MIDL_ILocalObjectExporter_0006`
.. attribute:: LocalMidOfRemote
:class:`UINT64`
.. attribute:: DllServerModel
:class:`ULONG`
.. attribute:: pwszDllServer
:class:`WCHAR`
.. attribute:: FoundInROT
:class:`INT`
_MIDL_ILocalObjectExporter_0007
'''''''''''''''''''''''''''''''
.. class:: MIDL_ILocalObjectExporter_0007
@@ -2908,48 +3026,6 @@ _LOCALTHIS
:class:`PVOID`
_LOCALTHIS32
''''''''''''
.. class:: LOCALTHIS32
Alias for :class:`_LOCALTHIS32`
.. class:: _LOCALTHIS32
.. attribute:: dwFlags
:class:`DWORD`
.. attribute:: dwClientThread
:class:`DWORD`
.. attribute:: passthroughTraceActivity
:class:`GUID`
.. attribute:: callTraceActivity
:class:`GUID`
.. attribute:: asyncRequestBlock
:class:`MIDL_XmitDefs_0001`
.. attribute:: reserved
:class:`DWORD`
.. attribute:: pTouchedAstaArray
:class:`PVOID32`
_MIDL_XmitDefs_0007
'''''''''''''''''''
.. class:: _MIDL_XmitDefs_0007
@@ -3177,6 +3253,468 @@ _LOCALTHAT
:class:`CONTAINERTHAT`
tagORPCTHAT
'''''''''''
.. class:: ORPCTHAT
Alias for :class:`tagORPCTHAT`
.. class:: tagORPCTHAT
.. attribute:: flags
:class:`ULONG`
.. attribute:: extensions
:class:`tagORPC_EXTENT_ARRAY`
ORPCTHAT32
''''''''''
.. class:: ORPCTHAT32
.. attribute:: flags
:class:`ULONG`
.. attribute:: extensions
:class:`PVOID32`
WireExtentArray
'''''''''''''''
.. class:: WireExtentArray
.. attribute:: size
:class:`ULONG`
.. attribute:: reserved
:class:`ULONG`
.. attribute:: unique
:class:`ULONG`
.. attribute:: rounded_size
:class:`ULONG`
.. attribute:: unique_flag
:class:`ULONG` ``[UNIQUE_FLAG_PADDING]``
WireExtent
''''''''''
.. class:: WireExtent
.. attribute:: rounded_size
:class:`ULONG`
.. attribute:: id
:class:`GUID`
.. attribute:: size
:class:`ULONG`
tagMainHeader
'''''''''''''
.. class:: MainHeader
Alias for :class:`tagMainHeader`
.. class:: tagMainHeader
.. attribute:: Signature
:class:`ULONG`
.. attribute:: Version
:class:`ULONG`
.. attribute:: cPolicies
:class:`ULONG`
.. attribute:: cbBuffer
:class:`ULONG`
.. attribute:: cbSize
:class:`ULONG`
.. attribute:: hr
:class:`LONG`
.. attribute:: hrServer
:class:`LONG`
.. attribute:: reserved
:class:`LONG`
LOCALTHIS32_NT_62
'''''''''''''''''
.. class:: LOCALTHIS32_NT_62
.. attribute:: dwFlags
:class:`ULONG`
.. attribute:: dwClientThread
:class:`ULONG`
__MIDL_XmitDefs_0001_NT_63
''''''''''''''''''''''''''
.. class:: __MIDL_XmitDefs_0001_NT_63
.. attribute:: size
:class:`ULONG`
.. attribute:: reserved
:class:`ULONG`
.. attribute:: pAstaOxids
:class:`UINT64`
LOCALTHIS32_NT_63
'''''''''''''''''
.. class:: LOCALTHIS32_NT_63
.. attribute:: dwFlags
:class:`ULONG`
.. attribute:: dwClientThread
:class:`ULONG`
.. attribute:: reserved
:class:`ULONG`
.. attribute:: pTouchedAstaArray
:class:`PVOID32`
LOCALTHAT32_NT_63
'''''''''''''''''
.. class:: LOCALTHAT32_NT_63
.. attribute:: marshalingSetAcknowledgmentOxid
:class:`UINT64`
.. attribute:: marshalingSetId
:class:`UINT64`
__MIDL_XmitDefs_0002_NT_1607
''''''''''''''''''''''''''''
.. class:: __MIDL_XmitDefs_0002_NT_1607
.. attribute:: size
:class:`ULONG`
.. attribute:: reserved
:class:`ULONG`
.. attribute:: pAstaOxids
:class:`PVOID32`
__MIDL_XmitDefs_0001_NT_1607
''''''''''''''''''''''''''''
.. class:: MIDL_XmitDefs_0001_NT_1607
Alias for :class:`__MIDL_XmitDefs_0001_NT_1607`
.. class:: __MIDL_XmitDefs_0001_NT_1607
.. attribute:: asyncOperationId
:class:`_GUID`
.. attribute:: oxidClientProcessNA
:class:`UINT64`
.. attribute:: originalClientLogicalThreadId
:class:`_GUID`
.. attribute:: uClientCausalityTraceId
:class:`UINT64`
_LOCALTHIS32_NT_1607
''''''''''''''''''''
.. class:: LOCALTHIS32_NT_1607
Alias for :class:`_LOCALTHIS32_NT_1607`
.. class:: _LOCALTHIS32_NT_1607
.. attribute:: dwFlags
:class:`ULONG`
.. attribute:: dwClientThread
:class:`ULONG`
.. attribute:: asyncRequestBlock
:class:`MIDL_XmitDefs_0001_NT_1607`
.. attribute:: reserved
:class:`ULONG`
.. attribute:: pTouchedAstaArray
:class:`PVOID32`
__MIDL_XmitDefs_0007
''''''''''''''''''''
.. class:: MIDL_XmitDefs_0007
Alias for :class:`__MIDL_XmitDefs_0007`
.. class:: __MIDL_XmitDefs_0007
.. attribute:: pointOfFailure
:class:`INT`
.. attribute:: hrFailure
:class:`HRESULT`
.. attribute:: sizeOfMarshaledErrorInfo
:class:`ULONG`
.. attribute:: reserved
:class:`ULONG`
.. attribute:: pMarshaledErrorInfo
:class:`BYTE`
__MIDL_XmitDefs_0005
''''''''''''''''''''
.. class:: MIDL_XmitDefs_0005
Alias for :class:`__MIDL_XmitDefs_0005`
.. class:: __MIDL_XmitDefs_0005
.. attribute:: sizeOfMarshaledResults
:class:`ULONG`
.. attribute:: reserved
:class:`ULONG`
.. attribute:: pMarshaledResults
:class:`BYTE`
__MIDL_XmitDefs_0008
''''''''''''''''''''
.. class:: MIDL_XmitDefs_0008
Alias for :class:`__MIDL_XmitDefs_0008`
.. class:: __MIDL_XmitDefs_0008
.. attribute:: outcome
:class:`INT`
.. attribute:: successDetails
:class:`MIDL_XmitDefs_0005`
.. attribute:: failureDetails
:class:`MIDL_XmitDefs_0007`
__MIDL_XmitDefs_0010
''''''''''''''''''''
.. class:: MIDL_XmitDefs_0010
Alias for :class:`__MIDL_XmitDefs_0010`
.. class:: __MIDL_XmitDefs_0010
.. attribute:: asyncStatus
:class:`ULONG`
.. attribute:: reserved1
:class:`ULONG`
.. attribute:: uServerCausalityTraceId
:class:`UINT64`
.. attribute:: reserved2
:class:`ULONG`
.. attribute:: pOutcomeDetails
:class:`PVOID32`
LOCALTHAT32_NT_1607
'''''''''''''''''''
.. class:: LOCALTHAT32_NT_1607
.. attribute:: marshalingSetAcknowledgmentOxid
:class:`UINT64`
.. attribute:: marshalingSetId
:class:`UINT64`
.. attribute:: reserved
:class:`ULONG`
.. attribute:: pAsyncResponseBlock
:class:`PVOID32`
_LOCALTHAT32_10_1903
''''''''''''''''''''
.. class:: LOCALTHAT32_10_1903
Alias for :class:`_LOCALTHAT32_10_1903`
.. class:: _LOCALTHAT32_10_1903
.. attribute:: marshalingSetId
:class:`UINT64`
.. attribute:: pAsyncResponseBlock
:class:`PVOID32`
.. attribute:: containerPassthroughData
:class:`PVOID32`
_LOCALTHIS32
''''''''''''
.. class:: LOCALTHIS32
Alias for :class:`_LOCALTHIS32`
.. class:: _LOCALTHIS32
.. attribute:: dwFlags
:class:`DWORD`
.. attribute:: dwClientThread
:class:`DWORD`
.. attribute:: passthroughTraceActivity
:class:`GUID`
.. attribute:: callTraceActivity
:class:`GUID`
.. attribute:: asyncRequestBlock
:class:`MIDL_XmitDefs_0001`
.. attribute:: reserved
:class:`DWORD`
.. attribute:: pTouchedAstaArray
:class:`PVOID32`
_LOCALTHAT32
''''''''''''
.. class:: LOCALTHAT32
@@ -3209,36 +3747,6 @@ _LOCALTHAT32
:class:`PVOID32`
tagORPCTHAT
'''''''''''
.. class:: ORPCTHAT
Alias for :class:`tagORPCTHAT`
.. class:: tagORPCTHAT
.. attribute:: flags
:class:`ULONG`
.. attribute:: extensions
:class:`tagORPC_EXTENT_ARRAY`
ORPCTHAT32
''''''''''
.. class:: ORPCTHAT32
.. attribute:: flags
:class:`ULONG`
.. attribute:: extensions
:class:`PVOID32`
_VIRTUAL_STORAGE_TYPE
'''''''''''''''''''''
.. class:: PVIRTUAL_STORAGE_TYPE
+5
View File
@@ -12705,6 +12705,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'MIB_UDP6TABLE_OWNER_PID',
'MIB_UDPROW_OWNER_PID',
'MIB_UDPTABLE_OWNER_PID',
'MIDL_ILocalObjectExporter_0006',
'MIDL_ILocalObjectExporter_0007',
'MIDL_XmitDefs_0001',
'MIDL_XmitDefs_0001_NT_1607',
@@ -13189,6 +13190,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'PPORT_VIEW',
'PPRIVILEGE_SET',
'PPRIV_RESOLVER_INFO',
'PPRIV_RESOLVER_INFO_17763',
'PPRIV_RESOLVER_INFO_LEGACY',
'PPROCESSENTRY32',
'PPROCESSENTRY32W',
@@ -13226,6 +13228,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'PRGBTRIPLE',
'PRIVILEGE_SET',
'PRIV_RESOLVER_INFO',
'PRIV_RESOLVER_INFO_17763',
'PRIV_RESOLVER_INFO_LEGACY',
'PRIV_SCM_INFO',
'PRLIST_ENTRY',
@@ -13945,6 +13948,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'_PORT_VIEW',
'_PRIVILEGE_SET',
'_PRIV_RESOLVER_INFO',
'_PRIV_RESOLVER_INFO_17763',
'_PRIV_RESOLVER_INFO_LEGACY',
'_PRIV_SCM_INFO',
'_PROCESS_BASIC_INFORMATION',
@@ -14114,6 +14118,7 @@ structs = {'ACCESS_ALLOWED_ACE',
'_XSTATE_FEATURE',
'__MIDL_IBackgroundCopyJob2_0003',
'__MIDL_IBackgroundCopyJob2_0004',
'__MIDL_ILocalObjectExporter_0006',
'__MIDL_XmitDefs_0001_NT_1607',
'__MIDL_XmitDefs_0001_NT_63',
'__MIDL_XmitDefs_0002_NT_1607',
+31
View File
@@ -1425,6 +1425,37 @@ class CONTAINERVERSION(Structure):
]
class __MIDL_ILocalObjectExporter_0006(Structure):
_fields_ = [
("dwTid", ULONG),
("dwPid", ULONG),
("dwAuthnHint", ULONG),
("version", tagCOMVERSION),
("ipidRemUnknown", _GUID),
("dwFlags", ULONG),
("psa", POINTER(tagDUALSTRINGARRAY)),
("guidProcessIdentifier", _GUID),
("processHostId", UINT64),
("clientDependencyBehavior", INT),
("packageFullName", POINTER(HSTRING__)),
("userSid", POINTER(HSTRING__)),
("appcontainerSid", POINTER(HSTRING__)),
]
MIDL_ILocalObjectExporter_0006 = __MIDL_ILocalObjectExporter_0006
class _PRIV_RESOLVER_INFO_17763(Structure):
_fields_ = [
("OxidServer", UINT64),
("pServerORBindings", POINTER(tagDUALSTRINGARRAY)),
("OxidInfo", MIDL_ILocalObjectExporter_0006),
("LocalMidOfRemote", UINT64),
("DllServerModel", ULONG),
("pwszDllServer", POINTER(WCHAR)),
("FoundInROT", INT),
]
PPRIV_RESOLVER_INFO_17763 = POINTER(_PRIV_RESOLVER_INFO_17763)
PRIV_RESOLVER_INFO_17763 = _PRIV_RESOLVER_INFO_17763
class _MIDL_ILocalObjectExporter_0007(Structure):
_fields_ = [
("dwTid", ULONG),
+11 -4
View File
@@ -62,12 +62,17 @@ def stubborn_create_instance(clsid, iid):
# resolver_info.OxidInfo.containerVersion.version is part of OxidInfo.ipidRemUnknown on PPRIV_RESOLVER_INFO_LEGACY
# And this part of ipidRemUnknown is a PID
# So a good value to check for > 3 :)
# Bad alignemetn of containerVersion -> its an older version
if resolver_info.OxidInfo.containerVersion.version > 3:
# print("resolver_info.OxidInfo.containerVersion.version == {0}".format(resolver_info.OxidInfo.containerVersion.version))
# print("Probable bad structure ! -> cast to legacy !")
resolver_info = ctypes.cast(rpiv_infoptr, gdef.PPRIV_RESOLVER_INFO_LEGACY)[0]
dcomversionstruct = resolver_info.OxidInfo.dcomVersion
# If 5,7 -> good alignement of dcomversion so we know its PRIV_RESOLVER_INFO_17763
dcomversion = (dcomversionstruct.MajorVersion, dcomversionstruct.MinorVersion)
if dcomversion == (5, 7):
resolver_info = ctypes.cast(rpiv_infoptr, gdef.PPRIV_RESOLVER_INFO_17763)[0]
else:
# Bad alignement for everythin -> Legacy
resolver_info = ctypes.cast(rpiv_infoptr, gdef.PPRIV_RESOLVER_INFO_LEGACY)[0]
# print("")
psa = resolver_info.OxidInfo.psa[0] # Retrieve the bidings to our COM server
# print("psa.bidings: {0}".format(psa.bidings))
# ipidRemUnknown = resolver_info.OxidInfo.ipidRemUnknown # Useful for IRemQueryInterface
@@ -85,6 +90,8 @@ def stubborn_create_instance(clsid, iid):
target_alpc_endpoint = psa.bidings[0]
assert target_alpc_endpoint.startswith("ncalrpc:[")
target_alpc_server = "\\RPC Control\\" + target_alpc_endpoint[len("ncalrpc:["):-1]
# Does not works on Windows XP at this point -> ALPC did not exists back then
# I won't implement a LRPC Client :')
client = windows.rpc.RPCClient(target_alpc_server)
# RPC: Bind to the IID on ou server