Beginning to generate ctypes for COM interfaces

This commit is contained in:
Clement Rouault
2016-03-23 22:11:35 +01:00
parent 34ae5084cd
commit 1b33bbb025
4 changed files with 218 additions and 8 deletions
+4 -2
View File
@@ -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:
+29 -3
View File
@@ -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 <Vtbl> 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 <void>".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:
+1 -1
View File
@@ -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,
+184 -2
View File
@@ -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):