From 1b33bbb0251c5e0a74124aae5a83290b635a6b32 Mon Sep 17 00:00:00 2001 From: Clement Rouault Date: Wed, 23 Mar 2016 22:11:35 +0100 Subject: [PATCH] Beginning to generate ctypes for COM interfaces --- ctypes_generation/com_parser.py | 6 +- ctypes_generation/generate.py | 32 ++++- ctypes_generation/simpleparser.py | 2 +- windows/generated_def/winstructs.py | 186 +++++++++++++++++++++++++++- 4 files changed, 218 insertions(+), 8 deletions(-) diff --git a/ctypes_generation/com_parser.py b/ctypes_generation/com_parser.py index 6a55f03..e89e6d1 100644 --- a/ctypes_generation/com_parser.py +++ b/ctypes_generation/com_parser.py @@ -56,8 +56,8 @@ def initial_processing( data): return outs.read() class WinComParser(Parser): - PARAM_INFO = ["__RPC__deref_out", "__RPC__in", "__RPC__deref_out_opt", "__RPC__out"] - PARAM_INFO_WITH_VALUE = ["__RPC__in_ecount"] + PARAM_INFO = ["__RPC__deref_out", "__RPC__in", "__RPC__deref_out_opt", "__RPC__out", "__RPC__in_opt", "__RPC__deref_opt_inout_opt"] + PARAM_INFO_WITH_VALUE = ["__RPC__in_ecount", "__RPC__out_ecount_part", "__RPC__in_ecount_full"] def __init__(self, data): data = initial_processing(data) @@ -82,6 +82,8 @@ class WinComParser(Parser): while type(self.peek()) != CloseParenthesisToken: self.next_token() self.next_token() + if self.peek() == KeywordToken("const"): + self.next_token() type_name = self.assert_token_type(NameToken) while type(self.peek()) == StarToken: diff --git a/ctypes_generation/generate.py b/ctypes_generation/generate.py index 9465c47..d1cd17e 100644 --- a/ctypes_generation/generate.py +++ b/ctypes_generation/generate.py @@ -47,6 +47,7 @@ TYPE_EQUIVALENCE = [ ('PLARGE_INTEGER', 'POINTER(LARGE_INTEGER)'), ('DWORD64', 'ULONG64'), ('SCODE', 'LONG'), + ('CIMTYPE', 'LONG'), ('PULONG64', 'POINTER(ULONG64)'), ('PUINT', 'POINTER(UINT)'), ('PHANDLE', 'POINTER(HANDLE)'), @@ -122,6 +123,8 @@ def verif_funcs_type(funcs, structs, enums): raise ValueError("UNKNOW PARAM TYPE {0}".format(param_type)) +yolo_struct = [x[:-4] for x in os.listdir(r"C:\Users\hakril\Documents\Work\COM\dump")] + def verif_com_interface_type(vtbls, struc, enum): all_struct_name = get_all_struct_name(structs, enums) all_interface_name = [] @@ -130,7 +133,7 @@ def verif_com_interface_type(vtbls, struc, enum): for vtbl in vtbls: if not vtbl.name.endswith("Vtbl"): raise ValueError("Com interface are expected to finish by got <{0}".format(vtbl.name)) - all_interface_name.append(vtbl.name.rstrip("Vtbl")) + all_interface_name.append(vtbl.name[:-len("Vtbl")]) for vtbl in vtbls: #print(vtbl) @@ -144,6 +147,11 @@ def verif_com_interface_type(vtbls, struc, enum): param_type = arg.type if param_type not in known_type and param_type not in all_struct_name + all_interface_name: #if param_type != "ITypeInfo": + if param_type in yolo_struct: + print("Ned to extract <{0}> from dump".format(param_type)) + import shutil + #shutil.copy(r"C:\Users\hakril\Documents\Work\COM\dump\{0}.txt".format(param_type), "com") + continue raise ValueError("UNKNOW PARAM TYPE {0}".format(param_type)) @@ -252,20 +260,38 @@ class {0}(COMInterface): }} """ +com_interface_comment_template = """ #{0} -> {1}""" com_interface_method_template = """ "{0}": ctypes.WINFUNCTYPE({1}),""" def generate_com_interface_ctype(vtbls): print(vtbls) define = [] + all_name = [vtbl.name.strip("Vtbl") for vtbl in vtbls] for vtbl in vtbls: methods_string = [] for method in vtbl.methods: args_to_define = method.args[1:] #ctypes doesnt not need the This #import pdb;pdb.set_trace() - methods_string.append(com_interface_method_template.format(method.name, ", ".join([method.ret_type] + [arg.type for arg in args_to_define]))) + str_args = [] + methods_string.append(com_interface_comment_template.format(method.name, ", ".join([("*"* arg.byreflevel) + arg.name +":"+arg.type for arg in args_to_define]))) + for arg in args_to_define: + type = arg.type + byreflevel = arg.byreflevel + if type in all_name: + type = "PVOID" + byreflevel -= 1 + if type == "void": + type = "PVOID" + if byreflevel == 0: + raise ValueError("{0}.{1} take a parameter ".format(vtbl.name, method.name)) + byreflevel -= 1 + for i in range(byreflevel): + type = "POINTER({0})".format(type) + str_args.append(type) + methods_string.append(com_interface_method_template.format(method.name, ", ".join([method.ret_type] + str_args))) #import pdb;pdb.set_trace() define.append((com_interface_template.format(vtbl.name, "\n".join(methods_string)))) - return "\n".join(define) + return com_interface_header + "\n".join(define) def write_to_out_file(name, data): for out_dir in OUT_DIRS: diff --git a/ctypes_generation/simpleparser.py b/ctypes_generation/simpleparser.py index 733e461..276fb94 100644 --- a/ctypes_generation/simpleparser.py +++ b/ctypes_generation/simpleparser.py @@ -67,7 +67,7 @@ class EqualToken(NoValueToken): pass class Lexer(object): - keywords = ["typedef", "struct", "enum", "union"] + keywords = ["typedef", "struct", "enum", "union", "const"] token_chr = {"*" : StarToken, "[" : OpenSquareBracketToken, "]" : CloseSquareBracketToken, "{" : OpenBracketToken, "}" : CloseBracketToken, ";" : ColonToken, diff --git a/windows/generated_def/winstructs.py b/windows/generated_def/winstructs.py index f6a63b4..7cf9f16 100644 --- a/windows/generated_def/winstructs.py +++ b/windows/generated_def/winstructs.py @@ -21,6 +21,8 @@ CHAR = c_char INT = c_int UCHAR = c_char CSHORT = c_short +VARTYPE = c_ushort +BSTR = c_wchar_p PUCHAR = POINTER(UCHAR) double = c_double FARPROC = PVOID @@ -33,6 +35,8 @@ ULONG64 = c_ulonglong LARGE_INTEGER = LONGLONG PLARGE_INTEGER = POINTER(LARGE_INTEGER) DWORD64 = ULONG64 +SCODE = LONG +CIMTYPE = LONG PULONG64 = POINTER(ULONG64) PUINT = POINTER(UINT) PHANDLE = POINTER(HANDLE) @@ -45,15 +49,18 @@ PHKEY = POINTER(HKEY) ACCESS_MASK = DWORD REGSAM = ACCESS_MASK SECURITY_CONTEXT_TRACKING_MODE = BOOLEAN +DISPID = LONG +MEMBERID = DISPID LPCONTEXT = PVOID HCERTSTORE = PVOID HCRYPTMSG = PVOID PALPC_PORT_ATTRIBUTES = PVOID VOID = DWORD +ITypeInfo = PVOID -structs = ['_LIST_ENTRY', '_PEB_LDR_DATA', '_LSA_UNICODE_STRING', '_RTL_USER_PROCESS_PARAMETERS', '_PEB', '_SECURITY_ATTRIBUTES', '_SYSTEM_VERIFIER_INFORMATION', '_LDR_DATA_TABLE_ENTRY', '_IMAGE_FILE_HEADER', '_IMAGE_DATA_DIRECTORY', '_IMAGE_SECTION_HEADER', '_IMAGE_OPTIONAL_HEADER64', '_IMAGE_OPTIONAL_HEADER', '_IMAGE_NT_HEADERS64', '_IMAGE_NT_HEADERS', '_IMAGE_IMPORT_DESCRIPTOR', '_IMAGE_IMPORT_BY_NAME', '_IMAGE_EXPORT_DIRECTORY', '_MEMORY_BASIC_INFORMATION', '_MEMORY_BASIC_INFORMATION32', '_MEMORY_BASIC_INFORMATION64', '_STARTUPINFOA', '_STARTUPINFOW', '_PROCESS_INFORMATION', '_FLOATING_SAVE_AREA', '_CONTEXT32', '_WOW64_FLOATING_SAVE_AREA', '_WOW64_CONTEXT', '_M128A', '_CONTEXT64', 'tagPROCESSENTRY32W', 'tagPROCESSENTRY32', 'tagTHREADENTRY32', '_LUID', '_LUID_AND_ATTRIBUTES', '_TOKEN_PRIVILEGES', '_TOKEN_ELEVATION', '_SID_AND_ATTRIBUTES', '_TOKEN_MANDATORY_LABEL', '_TOKEN_USER', '_OSVERSIONINFOA', '_OSVERSIONINFOW', '_OSVERSIONINFOEXA', '_OSVERSIONINFOEXW', '_OVERLAPPED', '_MIB_TCPROW_OWNER_PID', '_MIB_TCPTABLE_OWNER_PID', '_MIB_UDPROW_OWNER_PID', '_MIB_UDPTABLE_OWNER_PID', '_MIB_UDP6ROW_OWNER_PID', '_MIB_UDP6TABLE_OWNER_PID', '_MIB_TCP6ROW_OWNER_PID', '_MIB_TCP6TABLE_OWNER_PID', '_MIB_TCPROW', '_EXCEPTION_RECORD', '_EXCEPTION_RECORD32', '_EXCEPTION_RECORD64', '_EXCEPTION_POINTERS64', '_EXCEPTION_POINTERS32', '_DEBUG_PROCESSOR_IDENTIFICATION_ALPHA', '_DEBUG_PROCESSOR_IDENTIFICATION_AMD64', '_DEBUG_PROCESSOR_IDENTIFICATION_IA64', '_DEBUG_PROCESSOR_IDENTIFICATION_X86', '_DEBUG_PROCESSOR_IDENTIFICATION_ARM', '_DEBUG_PROCESSOR_IDENTIFICATION_ALL', '_SYMBOL_INFO', '_MODLOAD_DATA', '_SYSTEM_MODULE32', '_SYSTEM_MODULE64', '_SYSTEM_MODULE_INFORMATION32', '_SYSTEM_MODULE_INFORMATION64', 'tagSAFEARRAYBOUND', 'tagSAFEARRAY', '_DEBUG_BREAKPOINT_PARAMETERS', '_DEBUG_REGISTER_DESCRIPTION', '_DEBUG_STACK_FRAME', '_DEBUG_LAST_EVENT_INFO_BREAKPOINT', '_DEBUG_LAST_EVENT_INFO_EXCEPTION', '_DEBUG_LAST_EVENT_INFO_EXIT_THREAD', '_DEBUG_LAST_EVENT_INFO_EXIT_PROCESS', '_DEBUG_LAST_EVENT_INFO_LOAD_MODULE', '_DEBUG_LAST_EVENT_INFO_UNLOAD_MODULE', '_DEBUG_LAST_EVENT_INFO_SYSTEM_ERROR', '_DEBUG_SPECIFIC_FILTER_PARAMETERS', '_DEBUG_EXCEPTION_FILTER_PARAMETERS', '_GUID', '_CRYPTOAPI_BLOB', 'WINTRUST_FILE_INFO_', '_CRYPT_ATTRIBUTE', '_CTL_ENTRY', '_CRYPT_ATTRIBUTE', '_CRYPT_ATTRIBUTES', '_CRYPT_ALGORITHM_IDENTIFIER', '_CMSG_SIGNER_INFO', '_CERT_EXTENSION', '_CTL_USAGE', '_CTL_INFO', '_CTL_CONTEXT', 'WINTRUST_CATALOG_INFO_', 'WINTRUST_BLOB_INFO_', '_CRYPT_BIT_BLOB', '_CERT_PUBLIC_KEY_INFO', '_CERT_INFO', '_CERT_CONTEXT', 'WINTRUST_SGNR_INFO_', '_FILETIME', 'WINTRUST_CERT_INFO_', '_TMP_WINTRUST_UNION_TYPE', '_WINTRUST_DATA', '_PROCESS_BASIC_INFORMATION', '_JIT_DEBUG_INFO', '_SID_IDENTIFIER_AUTHORITY', '_EXCEPTION_DEBUG_INFO', '_CREATE_THREAD_DEBUG_INFO', '_CREATE_PROCESS_DEBUG_INFO', '_EXIT_THREAD_DEBUG_INFO', '_EXIT_PROCESS_DEBUG_INFO', '_LOAD_DLL_DEBUG_INFO', '_UNLOAD_DLL_DEBUG_INFO', '_OUTPUT_DEBUG_STRING_INFO', '_RIP_INFO', '_TMP_UNION_DEBUG_INFO', '_DEBUG_EVENT', '_STRING', '_OBJECT_ATTRIBUTES', '_SECURITY_QUALITY_OF_SERVICE', '_ALPC_PORT_ATTRIBUTES32', '_ALPC_PORT_ATTRIBUTES64', '_ALPC_MESSAGE_ATTRIBUTES', '_PORT_MESSAGE_TMP_UNION', '_PORT_MESSAGE_TMP_SUBSTRUCT_S1', '_PORT_MESSAGE_TMP_UNION_U1', '_PORT_MESSAGE_TMP_SUBSTRUCT_S2', '_PORT_MESSAGE_TMP_UNION_U2', '_PORT_MESSAGE', '_SERVICE_STATUS', '_SERVICE_STATUS_PROCESS', '_ENUM_SERVICE_STATUS_PROCESSA', '_ENUM_SERVICE_STATUS_PROCESSW', 'CATALOG_INFO_', '_SYSTEM_HANDLE', '_SYSTEM_HANDLE_INFORMATION', '__PUBLIC_OBJECT_TYPE_INFORMATION', '_PUBLIC_OBJECT_BASIC_INFORMATION', '_EVENTLOGRECORD'] +structs = ['_LIST_ENTRY', '_PEB_LDR_DATA', '_LSA_UNICODE_STRING', '_RTL_USER_PROCESS_PARAMETERS', '_PEB', '_SECURITY_ATTRIBUTES', '_SYSTEM_VERIFIER_INFORMATION', '_LDR_DATA_TABLE_ENTRY', '_IMAGE_FILE_HEADER', '_IMAGE_DATA_DIRECTORY', '_IMAGE_SECTION_HEADER', '_IMAGE_OPTIONAL_HEADER64', '_IMAGE_OPTIONAL_HEADER', '_IMAGE_NT_HEADERS64', '_IMAGE_NT_HEADERS', '_IMAGE_IMPORT_DESCRIPTOR', '_IMAGE_IMPORT_BY_NAME', '_IMAGE_EXPORT_DIRECTORY', '_MEMORY_BASIC_INFORMATION', '_MEMORY_BASIC_INFORMATION32', '_MEMORY_BASIC_INFORMATION64', '_STARTUPINFOA', '_STARTUPINFOW', '_PROCESS_INFORMATION', '_FLOATING_SAVE_AREA', '_CONTEXT32', '_WOW64_FLOATING_SAVE_AREA', '_WOW64_CONTEXT', '_M128A', '_CONTEXT64', 'tagPROCESSENTRY32W', 'tagPROCESSENTRY32', 'tagTHREADENTRY32', '_LUID', '_LUID_AND_ATTRIBUTES', '_TOKEN_PRIVILEGES', '_TOKEN_ELEVATION', '_SID_AND_ATTRIBUTES', '_TOKEN_MANDATORY_LABEL', '_TOKEN_USER', '_OSVERSIONINFOA', '_OSVERSIONINFOW', '_OSVERSIONINFOEXA', '_OSVERSIONINFOEXW', '_OVERLAPPED', '_MIB_TCPROW_OWNER_PID', '_MIB_TCPTABLE_OWNER_PID', '_MIB_UDPROW_OWNER_PID', '_MIB_UDPTABLE_OWNER_PID', '_MIB_UDP6ROW_OWNER_PID', '_MIB_UDP6TABLE_OWNER_PID', '_MIB_TCP6ROW_OWNER_PID', '_MIB_TCP6TABLE_OWNER_PID', '_MIB_TCPROW', '_EXCEPTION_RECORD', '_EXCEPTION_RECORD32', '_EXCEPTION_RECORD64', '_EXCEPTION_POINTERS64', '_EXCEPTION_POINTERS32', '_DEBUG_PROCESSOR_IDENTIFICATION_ALPHA', '_DEBUG_PROCESSOR_IDENTIFICATION_AMD64', '_DEBUG_PROCESSOR_IDENTIFICATION_IA64', '_DEBUG_PROCESSOR_IDENTIFICATION_X86', '_DEBUG_PROCESSOR_IDENTIFICATION_ARM', '_DEBUG_PROCESSOR_IDENTIFICATION_ALL', '_SYMBOL_INFO', '_MODLOAD_DATA', '_SYSTEM_MODULE32', '_SYSTEM_MODULE64', '_SYSTEM_MODULE_INFORMATION32', '_SYSTEM_MODULE_INFORMATION64', 'tagSAFEARRAYBOUND', 'tagSAFEARRAY', '_DEBUG_BREAKPOINT_PARAMETERS', '_DEBUG_REGISTER_DESCRIPTION', '_DEBUG_STACK_FRAME', '_DEBUG_LAST_EVENT_INFO_BREAKPOINT', '_DEBUG_LAST_EVENT_INFO_EXCEPTION', '_DEBUG_LAST_EVENT_INFO_EXIT_THREAD', '_DEBUG_LAST_EVENT_INFO_EXIT_PROCESS', '_DEBUG_LAST_EVENT_INFO_LOAD_MODULE', '_DEBUG_LAST_EVENT_INFO_UNLOAD_MODULE', '_DEBUG_LAST_EVENT_INFO_SYSTEM_ERROR', '_DEBUG_SPECIFIC_FILTER_PARAMETERS', '_DEBUG_EXCEPTION_FILTER_PARAMETERS', '_GUID', '_TMP_signscale', '_TMP_lowmid', 'TMP_signscale_union', 'TMP_lowmid_union', 'tagDEC', '__tagBRECORD', 'TMP_variant_sub_union', '__tagVARIANT', 'tagDISPPARAMS', 'tagEXCEPINFO', '_CRYPTOAPI_BLOB', 'WINTRUST_FILE_INFO_', '_CRYPT_ATTRIBUTE', '_CTL_ENTRY', '_CRYPT_ATTRIBUTE', '_CRYPT_ATTRIBUTES', '_CRYPT_ALGORITHM_IDENTIFIER', '_CMSG_SIGNER_INFO', '_CERT_EXTENSION', '_CTL_USAGE', '_CTL_INFO', '_CTL_CONTEXT', 'WINTRUST_CATALOG_INFO_', 'WINTRUST_BLOB_INFO_', '_CRYPT_BIT_BLOB', '_CERT_PUBLIC_KEY_INFO', '_CERT_INFO', '_CERT_CONTEXT', 'WINTRUST_SGNR_INFO_', '_FILETIME', 'WINTRUST_CERT_INFO_', '_TMP_WINTRUST_UNION_TYPE', '_WINTRUST_DATA', '_PROCESS_BASIC_INFORMATION', '_JIT_DEBUG_INFO', '_SID_IDENTIFIER_AUTHORITY', '_EXCEPTION_DEBUG_INFO', '_CREATE_THREAD_DEBUG_INFO', '_CREATE_PROCESS_DEBUG_INFO', '_EXIT_THREAD_DEBUG_INFO', '_EXIT_PROCESS_DEBUG_INFO', '_LOAD_DLL_DEBUG_INFO', '_UNLOAD_DLL_DEBUG_INFO', '_OUTPUT_DEBUG_STRING_INFO', '_RIP_INFO', '_TMP_UNION_DEBUG_INFO', '_DEBUG_EVENT', '_STRING', '_OBJECT_ATTRIBUTES', '_SECURITY_QUALITY_OF_SERVICE', '_ALPC_PORT_ATTRIBUTES32', '_ALPC_PORT_ATTRIBUTES64', '_ALPC_MESSAGE_ATTRIBUTES', '_PORT_MESSAGE_TMP_UNION', '_PORT_MESSAGE_TMP_SUBSTRUCT_S1', '_PORT_MESSAGE_TMP_UNION_U1', '_PORT_MESSAGE_TMP_SUBSTRUCT_S2', '_PORT_MESSAGE_TMP_UNION_U2', '_PORT_MESSAGE', '_SERVICE_STATUS', '_SERVICE_STATUS_PROCESS', '_ENUM_SERVICE_STATUS_PROCESSA', '_ENUM_SERVICE_STATUS_PROCESSW', 'CATALOG_INFO_', '_SYSTEM_HANDLE', '_SYSTEM_HANDLE_INFORMATION', '__PUBLIC_OBJECT_TYPE_INFORMATION', '_PUBLIC_OBJECT_BASIC_INFORMATION', '_EVENTLOGRECORD'] -enums = ['_SYSTEM_INFORMATION_CLASS', '_MEMORY_INFORMATION_CLASS', '_THREAD_INFORMATION_CLASS', '_TCP_TABLE_CLASS', '_VARENUM', '_UDP_TABLE_CLASS', '_MIB_TCP_STATE', '_TOKEN_INFORMATION_CLASS', '_SECURITY_IMPERSONATION_LEVEL', '_SC_ENUM_TYPE', '_SC_STATUS_TYPE', '_OBJECT_INFORMATION_CLASS', '_SID_NAME_USE', '_IMAGEHLP_SYMBOL_TYPE_INFO', '_PROCESSINFOCLASS'] +enums = ['_SYSTEM_INFORMATION_CLASS', '_MEMORY_INFORMATION_CLASS', '_THREAD_INFORMATION_CLASS', '_TCP_TABLE_CLASS', '_VARENUM', '_UDP_TABLE_CLASS', '_MIB_TCP_STATE', '_TOKEN_INFORMATION_CLASS', '_SECURITY_IMPERSONATION_LEVEL', '_SC_ENUM_TYPE', '_SC_STATUS_TYPE', '_OBJECT_INFORMATION_CLASS', '_SID_NAME_USE', 'NET_FW_PROFILE_TYPE2_', 'NET_FW_ACTION_', 'NET_FW_MODIFY_STATE_', 'NET_FW_RULE_DIRECTION_', '_IMAGEHLP_SYMBOL_TYPE_INFO', '_PROCESSINFOCLASS', 'tagTYPEKIND'] # Enum _SYSTEM_INFORMATION_CLASS definitions _SYSTEM_INFORMATION_CLASS = DWORD @@ -363,6 +370,39 @@ SidTypeUnknown = 0x8 SidTypeComputer = 0x9 SidTypeLabel = 0xa +# Enum NET_FW_PROFILE_TYPE2_ definitions +NET_FW_PROFILE_TYPE2_ = DWORD +NET_FW_PROFILE_TYPE2 = NET_FW_PROFILE_TYPE2_ + +NET_FW_PROFILE2_DOMAIN = 0x1 +NET_FW_PROFILE2_PRIVATE = 0x2 +NET_FW_PROFILE2_PUBLIC = 0x4 +NET_FW_PROFILE2_ALL = 0x7fffffff + +# Enum NET_FW_ACTION_ definitions +NET_FW_ACTION_ = DWORD +NET_FW_ACTION = NET_FW_ACTION_ + +NET_FW_ACTION_BLOCK = 0x0 +NET_FW_ACTION_ALLOW = 0x1 +NET_FW_ACTION_MAX = 0x2 + +# Enum NET_FW_MODIFY_STATE_ definitions +NET_FW_MODIFY_STATE_ = DWORD +NET_FW_MODIFY_STATE = NET_FW_MODIFY_STATE_ + +NET_FW_MODIFY_STATE_OK = 0x0 +NET_FW_MODIFY_STATE_GP_OVERRIDE = 0x1 +NET_FW_MODIFY_STATE_INBOUND_BLOCKED = 0x2 + +# Enum NET_FW_RULE_DIRECTION_ definitions +NET_FW_RULE_DIRECTION_ = DWORD +NET_FW_RULE_DIRECTION = NET_FW_RULE_DIRECTION_ + +NET_FW_RULE_DIR_IN = 0x1 +NET_FW_RULE_DIR_OUT = 0x2 +NET_FW_RULE_DIR_MAX = 0x3 + # Enum _IMAGEHLP_SYMBOL_TYPE_INFO definitions _IMAGEHLP_SYMBOL_TYPE_INFO = DWORD IMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO @@ -409,6 +449,20 @@ PROCESSINFOCLASS = _PROCESSINFOCLASS ProcessBasicInformation = 0x0 ProcessWow64Information = 0x1a +# Enum tagTYPEKIND definitions +tagTYPEKIND = DWORD +TYPEKIND = tagTYPEKIND + +TKIND_ENUM = 0x0 +TKIND_RECORD = 0x1 +TKIND_MODULE = 0x2 +TKIND_INTERFACE = 0x3 +TKIND_DISPATCH = 0x4 +TKIND_COCLASS = 0x5 +TKIND_ALIAS = 0x6 +TKIND_UNION = 0x7 +TKIND_MAX = 0x8 + # Struct _LIST_ENTRY definitions # Self referencing struct tricks class _LIST_ENTRY(Structure): pass @@ -1645,7 +1699,135 @@ class _GUID(Structure): ("Data3", USHORT), ("Data4", UCHAR * 8), ] +IID = _GUID GUID = _GUID +REFIID = POINTER(_GUID) + +# Struct _TMP_signscale definitions +class _TMP_signscale(Structure): + _fields_ = [ + ("scale", BYTE), + ("sign", BYTE), + ] + +# Struct _TMP_lowmid definitions +class _TMP_lowmid(Structure): + _fields_ = [ + ("Lo32", ULONG), + ("Mid32", ULONG), + ] + +# Struct TMP_signscale_union definitions +class TMP_signscale_union(Union): + _fields_ = [ + ("s", _TMP_signscale), + ("signscale", USHORT), + ] + +# Struct TMP_lowmid_union definitions +class TMP_lowmid_union(Union): + _fields_ = [ + ("s", _TMP_lowmid), + ("Lo64", ULONGLONG), + ] + +# Struct tagDEC definitions +class tagDEC(Structure): + _fields_ = [ + ("wReserved", USHORT), + ("u1", TMP_signscale_union), + ("Hi32", ULONG), + ("u2", TMP_signscale_union), + ] +DECIMAL = tagDEC + +# Struct __tagBRECORD definitions +class __tagBRECORD(Structure): + _fields_ = [ + ("pvRecord", PVOID), + ("pRecInfo", PVOID), + ] +_tagBRECORD = __tagBRECORD + +# Struct TMP_variant_sub_union definitions +class TMP_variant_sub_union(Union): + _fields_ = [ + ("llVal", LONGLONG), + ("lVal", LONG), + ("bVal", BYTE), + ("iVal", SHORT), + ("fltVal", FLOAT), + ("dblVal", DOUBLE), + ("boolVal", VARIANT_BOOL), + ("scode", SCODE), + ("bstrVal", BSTR), + ("punkVal", PVOID), + ("pdispVal", PVOID), + ("parray", POINTER(SAFEARRAY)), + ("pbVal", POINTER(BYTE)), + ("piVal", POINTER(SHORT)), + ("plVal", POINTER(LONG)), + ("pllVal", POINTER(LONGLONG)), + ("pfltVal", POINTER(FLOAT)), + ("pdblVal", POINTER(DOUBLE)), + ("pboolVal", POINTER(VARIANT_BOOL)), + ("pscode", POINTER(SCODE)), + ("pbstrVal", POINTER(BSTR)), + ("byref", PVOID), + ("cVal", CHAR), + ("uiVal", USHORT), + ("ulVal", ULONG), + ("ullVal", ULONGLONG), + ("intVal", INT), + ("uintVal", UINT), + ("pcVal", POINTER(CHAR)), + ("puiVal", POINTER(USHORT)), + ("pulVal", POINTER(ULONG)), + ("pullVal", POINTER(ULONGLONG)), + ("pintVal", POINTER(INT)), + ("puintVal", POINTER(UINT)), + ("__VARIANT_NAME_4", _tagBRECORD), + ] + +# Struct __tagVARIANT definitions +class __tagVARIANT(Structure): + _fields_ = [ + ("vt", VARTYPE), + ("wReserved1", WORD), + ("wReserved2", WORD), + ("wReserved3", WORD), + ("__VARIANT_NAME_3", TMP_variant_sub_union), + ] +LPVARIANTARG = POINTER(__tagVARIANT) +VARIANTARG = __tagVARIANT +VARIANT = __tagVARIANT +LPVARIANT = POINTER(__tagVARIANT) +_tagVARIANT = __tagVARIANT + +# Struct tagDISPPARAMS definitions +class tagDISPPARAMS(Structure): + _fields_ = [ + ("rgvarg", POINTER(VARIANTARG)), + ("rgdispidNamedArgs", POINTER(DISPID)), + ("cArgs", UINT), + ("cNamedArgs", UINT), + ] +DISPPARAMS = tagDISPPARAMS + +# Struct tagEXCEPINFO definitions +class tagEXCEPINFO(Structure): + _fields_ = [ + ("wCode", WORD), + ("wReserved", WORD), + ("bstrSource", BSTR), + ("bstrDescription", BSTR), + ("bstrHelpFile", BSTR), + ("dwHelpContext", DWORD), + ("pvReserved", ULONG_PTR), + ("pfnDeferredFillIn", ULONG_PTR), + ("scode", SCODE), + ] +EXCEPINFO = tagEXCEPINFO # Struct _CRYPTOAPI_BLOB definitions class _CRYPTOAPI_BLOB(Structure):