windows.com with a cleaner interface + use in wmi.pu

This commit is contained in:
Clement Rouault
2016-03-24 16:03:13 +01:00
parent d794ac8ceb
commit 1a85d99b0e
12 changed files with 823 additions and 279 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ class WinFunc(object):
return self.generate_comment_ctypes() + "\n" + self.generate_prototype_ctypes() + "\n" + self.generate_paramflags_ctypes() + "\n"
def generate_comment_ctypes(self):
model = "# {0}({1}):"
model = "#def {0}({1}):\n# return {0}.ctypes_function({1})"
ctypes_param = [name for type, name in self.params]
ctypes_param_str = ", ".join(ctypes_param)
return model.format(self.name, ctypes_param_str)
+4
View File
@@ -33,6 +33,8 @@ TYPE_EQUIVALENCE = [
('CSHORT', 'c_short'),
('VARTYPE', 'c_ushort'),
('BSTR', 'c_wchar_p'),
('OLECHAR', 'c_wchar'),
('POLECHAR', 'c_wchar_p'),
('PUCHAR', 'POINTER(UCHAR)'),
('double', 'c_double'),
('FARPROC', 'PVOID'),
@@ -62,6 +64,8 @@ TYPE_EQUIVALENCE = [
('SECURITY_CONTEXT_TRACKING_MODE', 'BOOLEAN'),
("DISPID", "LONG"),
("MEMBERID", "DISPID"),
('PSECURITY_DESCRIPTOR', 'PVOID'),
('LPUNKNOWN', 'POINTER(PVOID)'),
# Will be changed at import time
('LPCONTEXT', 'PVOID'),
('HCERTSTORE', 'PVOID'),
+24 -1
View File
@@ -867,4 +867,27 @@
#define SM_REMOTESESSION 0x1000
#define SM_SHUTTINGDOWN 0x2000
#define SM_REMOTECONTROL 0x2001
#define SM_CARETBLINKINGENABLED 0x2002
#define SM_CARETBLINKINGENABLED 0x2002
#define RPC_C_AUTHN_LEVEL_DEFAULT 0
#define RPC_C_AUTHN_LEVEL_NONE 1
#define RPC_C_AUTHN_LEVEL_CONNECT 2
#define RPC_C_AUTHN_LEVEL_CALL 3
#define RPC_C_AUTHN_LEVEL_PKT 4
#define RPC_C_AUTHN_LEVEL_PKT_INTEGRITY 5
#define RPC_C_AUTHN_LEVEL_PKT_PRIVACY 6
#define RPC_C_IMP_LEVEL_DEFAULT 0
#define RPC_C_IMP_LEVEL_ANONYMOUS 1
#define RPC_C_IMP_LEVEL_IDENTIFY 2
#define RPC_C_IMP_LEVEL_IMPERSONATE 3
#define RPC_C_IMP_LEVEL_DELEGATE 4
#define RPC_C_QOS_IDENTITY_STATIC 0
#define RPC_C_QOS_IDENTITY_DYNAMIC 1
#define RPC_C_QOS_CAPABILITIES_DEFAULT 0x0
#define RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH 0x1
#define RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC 0x2
#define RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY 0x4
+25
View File
@@ -1155,4 +1155,29 @@ BOOL WINAPI LookupAccountSidW(
_Out_opt_ LPWSTR lpReferencedDomainName,
_Inout_ LPDWORD cchReferencedDomainName,
_Out_ PSID_NAME_USE peUse
);
HRESULT WINAPI CoInitializeEx(
_In_opt_ LPVOID pvReserved,
_In_ DWORD dwCoInit
);
HRESULT WINAPI CoInitializeSecurity(
_In_opt_ PSECURITY_DESCRIPTOR pSecDesc,
_In_ LONG cAuthSvc,
_In_opt_ SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
_In_opt_ PVOID pReserved1,
_In_ DWORD dwAuthnLevel,
_In_ DWORD dwImpLevel,
_In_opt_ PVOID pAuthList,
_In_ DWORD dwCapabilities,
_In_opt_ PVOID pReserved3
);
HRESULT WINAPI CoCreateInstance(
_In_ REFCLSID rclsid,
_In_ LPUNKNOWN pUnkOuter,
_In_ DWORD dwClsContext,
_In_ REFIID riid,
_Out_ LPVOID *ppv
);
+41 -1
View File
@@ -585,6 +585,33 @@ typedef enum tag_WBEMSTATUS {
WBEMMOF_E_INVALID_DELETECLASS_SYNTAX = 0x80044031
} WBEMSTATUS;
typedef enum tagCLSCTX {
CLSCTX_INPROC_SERVER = 0x1,
CLSCTX_INPROC_HANDLER = 0x2,
CLSCTX_LOCAL_SERVER = 0x4,
CLSCTX_INPROC_SERVER16 = 0x8,
CLSCTX_REMOTE_SERVER = 0x10,
CLSCTX_INPROC_HANDLER16 = 0x20,
CLSCTX_RESERVED1 = 0x40,
CLSCTX_RESERVED2 = 0x80,
CLSCTX_RESERVED3 = 0x100,
CLSCTX_RESERVED4 = 0x200,
CLSCTX_NO_CODE_DOWNLOAD = 0x400,
CLSCTX_RESERVED5 = 0x800,
CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
CLSCTX_NO_FAILURE_LOG = 0x4000,
CLSCTX_DISABLE_AAA = 0x8000,
CLSCTX_ENABLE_AAA = 0x10000,
CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,
CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000,
CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000,
CLSCTX_ENABLE_CLOAKING = 0x100000,
CLSCTX_APPCONTAINER = 0x400000,
CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000,
CLSCTX_PS_DLL = 0x80000000
} CLSCTX;
typedef struct _LDR_DATA_TABLE_ENTRY {
PVOID Reserved1[2];
LIST_ENTRY InMemoryOrderLinks;
@@ -1495,12 +1522,19 @@ typedef enum _PROCESSINFOCLASS {
ProcessWow64Information = 26
} PROCESSINFOCLASS;
typedef enum tagCOINIT {
COINIT_APARTMENTTHREADED = 0x2,
COINIT_MULTITHREADED = 0x0,
COINIT_DISABLE_OLE1DDE = 0x4,
COINIT_SPEED_OVER_MEMORY = 0x8
} COINIT;
typedef struct _GUID {
ULONG Data1;
USHORT Data2;
USHORT Data3;
BYTE Data4[ 8 ];
} GUID, IID, *REFIID;
} GUID, IID, *REFIID, *REFCLSID;
@@ -2140,3 +2174,9 @@ typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
DWORD DataOffset;
} EVENTLOGRECORD, *PEVENTLOGRECORD;
typedef struct tagSOLE_AUTHENTICATION_SERVICE {
DWORD dwAuthnSvc;
DWORD dwAuthzSvc;
OLECHAR *pPrincipalName;
HRESULT hr;
} SOLE_AUTHENTICATION_SERVICE, *PSOLE_AUTHENTICATION_SERVICE;
+17 -1
View File
@@ -1,8 +1,10 @@
import struct
import ctypes
import functools
from ctypes.wintypes import HRESULT
from ctypes.wintypes import HRESULT, byref, pointer
from windows import winproxy
from windows.generated_def import RPC_C_IMP_LEVEL_IMPERSONATE, CLSCTX_INPROC_SERVER
from windows.generated_def import interfaces
from windows.generated_def.interfaces import generate_IID, IID
@@ -15,6 +17,20 @@ def create_c_callable(func, types, keepalive=[]):
keepalive.append(c_callable)
return c_callback_addr
def init():
t = winproxy.CoInitializeEx()
if t:
return t
return winproxy.CoInitializeSecurity(0, -1, None, 0, 0, RPC_C_IMP_LEVEL_IMPERSONATE, 0,0,0)
def create_instance(clsiid, targetinterface, custom_iid=None):
if custom_iid is None:
custom_iid = targetinterface.IID
return winproxy.CoCreateInstance(byref(clsiid), None, CLSCTX_INPROC_SERVER, byref(custom_iid), byref(targetinterface))
class ComVtable(object):
# Name, types
+2
View File
@@ -36,11 +36,13 @@ else:
from . import winfuncs
from . import windef
from . import interfaces
# Fuck it
from winstructs import *
from winfuncs import *
from windef import *
from interfaces import *
+19 -1
View File
@@ -2576,4 +2576,22 @@ SM_MAXIMUMTOUCHES = Flag("SM_MAXIMUMTOUCHES", 95)
SM_REMOTESESSION = Flag("SM_REMOTESESSION", 0x1000)
SM_SHUTTINGDOWN = Flag("SM_SHUTTINGDOWN", 0x2000)
SM_REMOTECONTROL = Flag("SM_REMOTECONTROL", 0x2001)
SM_CARETBLINKINGENABLED = Flag("SM_CARETBLINKINGENABLED", 0x2002)
SM_CARETBLINKINGENABLED = Flag("SM_CARETBLINKINGENABLED", 0x2002)
RPC_C_AUTHN_LEVEL_DEFAULT = Flag("RPC_C_AUTHN_LEVEL_DEFAULT", 0)
RPC_C_AUTHN_LEVEL_NONE = Flag("RPC_C_AUTHN_LEVEL_NONE", 1)
RPC_C_AUTHN_LEVEL_CONNECT = Flag("RPC_C_AUTHN_LEVEL_CONNECT", 2)
RPC_C_AUTHN_LEVEL_CALL = Flag("RPC_C_AUTHN_LEVEL_CALL", 3)
RPC_C_AUTHN_LEVEL_PKT = Flag("RPC_C_AUTHN_LEVEL_PKT", 4)
RPC_C_AUTHN_LEVEL_PKT_INTEGRITY = Flag("RPC_C_AUTHN_LEVEL_PKT_INTEGRITY", 5)
RPC_C_AUTHN_LEVEL_PKT_PRIVACY = Flag("RPC_C_AUTHN_LEVEL_PKT_PRIVACY", 6)
RPC_C_IMP_LEVEL_DEFAULT = Flag("RPC_C_IMP_LEVEL_DEFAULT", 0)
RPC_C_IMP_LEVEL_ANONYMOUS = Flag("RPC_C_IMP_LEVEL_ANONYMOUS", 1)
RPC_C_IMP_LEVEL_IDENTIFY = Flag("RPC_C_IMP_LEVEL_IDENTIFY", 2)
RPC_C_IMP_LEVEL_IMPERSONATE = Flag("RPC_C_IMP_LEVEL_IMPERSONATE", 3)
RPC_C_IMP_LEVEL_DELEGATE = Flag("RPC_C_IMP_LEVEL_DELEGATE", 4)
RPC_C_QOS_IDENTITY_STATIC = Flag("RPC_C_QOS_IDENTITY_STATIC", 0)
RPC_C_QOS_IDENTITY_DYNAMIC = Flag("RPC_C_QOS_IDENTITY_DYNAMIC", 1)
RPC_C_QOS_CAPABILITIES_DEFAULT = Flag("RPC_C_QOS_CAPABILITIES_DEFAULT", 0x0)
RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH = Flag("RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH", 0x1)
RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC = Flag("RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC", 0x2)
RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY = Flag("RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY", 0x4)
File diff suppressed because it is too large Load Diff
+257 -5
View File
@@ -23,6 +23,8 @@ UCHAR = c_char
CSHORT = c_short
VARTYPE = c_ushort
BSTR = c_wchar_p
OLECHAR = c_wchar
POLECHAR = c_wchar_p
PUCHAR = POINTER(UCHAR)
double = c_double
FARPROC = PVOID
@@ -51,6 +53,8 @@ REGSAM = ACCESS_MASK
SECURITY_CONTEXT_TRACKING_MODE = BOOLEAN
DISPID = LONG
MEMBERID = DISPID
PSECURITY_DESCRIPTOR = PVOID
LPUNKNOWN = POINTER(PVOID)
LPCONTEXT = PVOID
HCERTSTORE = PVOID
HCRYPTMSG = PVOID
@@ -58,9 +62,9 @@ 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', '_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']
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', 'tagSOLE_AUTHENTICATION_SERVICE']
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']
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_', 'tag_WBEMSTATUS', 'tagCLSCTX', '_IMAGEHLP_SYMBOL_TYPE_INFO', '_PROCESSINFOCLASS', 'tagCOINIT', 'tagTYPEKIND']
# Enum _SYSTEM_INFORMATION_CLASS definitions
_SYSTEM_INFORMATION_CLASS = DWORD
@@ -403,6 +407,233 @@ NET_FW_RULE_DIR_IN = 0x1
NET_FW_RULE_DIR_OUT = 0x2
NET_FW_RULE_DIR_MAX = 0x3
# Enum tag_WBEMSTATUS definitions
tag_WBEMSTATUS = DWORD
WBEMSTATUS = tag_WBEMSTATUS
WBEM_NO_ERROR = 0x0
WBEM_S_NO_ERROR = 0x0
WBEM_S_SAME = 0x0
WBEM_S_FALSE = 0x1
WBEM_S_ALREADY_EXISTS = 0x40001
WBEM_S_RESET_TO_DEFAULT = 0x40002
WBEM_S_DIFFERENT = 0x40003
WBEM_S_TIMEDOUT = 0x40004
WBEM_S_NO_MORE_DATA = 0x40005
WBEM_S_OPERATION_CANCELLED = 0x40006
WBEM_S_PENDING = 0x40007
WBEM_S_DUPLICATE_OBJECTS = 0x40008
WBEM_S_ACCESS_DENIED = 0x40009
WBEM_S_PARTIAL_RESULTS = 0x40010
WBEM_S_SOURCE_NOT_AVAILABLE = 0x40017
WBEM_E_FAILED = 0x80041001L
WBEM_E_NOT_FOUND = 0x80041002L
WBEM_E_ACCESS_DENIED = 0x80041003L
WBEM_E_PROVIDER_FAILURE = 0x80041004L
WBEM_E_TYPE_MISMATCH = 0x80041005L
WBEM_E_OUT_OF_MEMORY = 0x80041006L
WBEM_E_INVALID_CONTEXT = 0x80041007L
WBEM_E_INVALID_PARAMETER = 0x80041008L
WBEM_E_NOT_AVAILABLE = 0x80041009L
WBEM_E_CRITICAL_ERROR = 0x8004100aL
WBEM_E_INVALID_STREAM = 0x8004100bL
WBEM_E_NOT_SUPPORTED = 0x8004100cL
WBEM_E_INVALID_SUPERCLASS = 0x8004100dL
WBEM_E_INVALID_NAMESPACE = 0x8004100eL
WBEM_E_INVALID_OBJECT = 0x8004100fL
WBEM_E_INVALID_CLASS = 0x80041010L
WBEM_E_PROVIDER_NOT_FOUND = 0x80041011L
WBEM_E_INVALID_PROVIDER_REGISTRATION = 0x80041012L
WBEM_E_PROVIDER_LOAD_FAILURE = 0x80041013L
WBEM_E_INITIALIZATION_FAILURE = 0x80041014L
WBEM_E_TRANSPORT_FAILURE = 0x80041015L
WBEM_E_INVALID_OPERATION = 0x80041016L
WBEM_E_INVALID_QUERY = 0x80041017L
WBEM_E_INVALID_QUERY_TYPE = 0x80041018L
WBEM_E_ALREADY_EXISTS = 0x80041019L
WBEM_E_OVERRIDE_NOT_ALLOWED = 0x8004101aL
WBEM_E_PROPAGATED_QUALIFIER = 0x8004101bL
WBEM_E_PROPAGATED_PROPERTY = 0x8004101cL
WBEM_E_UNEXPECTED = 0x8004101dL
WBEM_E_ILLEGAL_OPERATION = 0x8004101eL
WBEM_E_CANNOT_BE_KEY = 0x8004101fL
WBEM_E_INCOMPLETE_CLASS = 0x80041020L
WBEM_E_INVALID_SYNTAX = 0x80041021L
WBEM_E_NONDECORATED_OBJECT = 0x80041022L
WBEM_E_READ_ONLY = 0x80041023L
WBEM_E_PROVIDER_NOT_CAPABLE = 0x80041024L
WBEM_E_CLASS_HAS_CHILDREN = 0x80041025L
WBEM_E_CLASS_HAS_INSTANCES = 0x80041026L
WBEM_E_QUERY_NOT_IMPLEMENTED = 0x80041027L
WBEM_E_ILLEGAL_NULL = 0x80041028L
WBEM_E_INVALID_QUALIFIER_TYPE = 0x80041029L
WBEM_E_INVALID_PROPERTY_TYPE = 0x8004102aL
WBEM_E_VALUE_OUT_OF_RANGE = 0x8004102bL
WBEM_E_CANNOT_BE_SINGLETON = 0x8004102cL
WBEM_E_INVALID_CIM_TYPE = 0x8004102dL
WBEM_E_INVALID_METHOD = 0x8004102eL
WBEM_E_INVALID_METHOD_PARAMETERS = 0x8004102fL
WBEM_E_SYSTEM_PROPERTY = 0x80041030L
WBEM_E_INVALID_PROPERTY = 0x80041031L
WBEM_E_CALL_CANCELLED = 0x80041032L
WBEM_E_SHUTTING_DOWN = 0x80041033L
WBEM_E_PROPAGATED_METHOD = 0x80041034L
WBEM_E_UNSUPPORTED_PARAMETER = 0x80041035L
WBEM_E_MISSING_PARAMETER_ID = 0x80041036L
WBEM_E_INVALID_PARAMETER_ID = 0x80041037L
WBEM_E_NONCONSECUTIVE_PARAMETER_IDS = 0x80041038L
WBEM_E_PARAMETER_ID_ON_RETVAL = 0x80041039L
WBEM_E_INVALID_OBJECT_PATH = 0x8004103aL
WBEM_E_OUT_OF_DISK_SPACE = 0x8004103bL
WBEM_E_BUFFER_TOO_SMALL = 0x8004103cL
WBEM_E_UNSUPPORTED_PUT_EXTENSION = 0x8004103dL
WBEM_E_UNKNOWN_OBJECT_TYPE = 0x8004103eL
WBEM_E_UNKNOWN_PACKET_TYPE = 0x8004103fL
WBEM_E_MARSHAL_VERSION_MISMATCH = 0x80041040L
WBEM_E_MARSHAL_INVALID_SIGNATURE = 0x80041041L
WBEM_E_INVALID_QUALIFIER = 0x80041042L
WBEM_E_INVALID_DUPLICATE_PARAMETER = 0x80041043L
WBEM_E_TOO_MUCH_DATA = 0x80041044L
WBEM_E_SERVER_TOO_BUSY = 0x80041045L
WBEM_E_INVALID_FLAVOR = 0x80041046L
WBEM_E_CIRCULAR_REFERENCE = 0x80041047L
WBEM_E_UNSUPPORTED_CLASS_UPDATE = 0x80041048L
WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE = 0x80041049L
WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE = 0x80041050L
WBEM_E_TOO_MANY_PROPERTIES = 0x80041051L
WBEM_E_UPDATE_TYPE_MISMATCH = 0x80041052L
WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED = 0x80041053L
WBEM_E_UPDATE_PROPAGATED_METHOD = 0x80041054L
WBEM_E_METHOD_NOT_IMPLEMENTED = 0x80041055L
WBEM_E_METHOD_DISABLED = 0x80041056L
WBEM_E_REFRESHER_BUSY = 0x80041057L
WBEM_E_UNPARSABLE_QUERY = 0x80041058L
WBEM_E_NOT_EVENT_CLASS = 0x80041059L
WBEM_E_MISSING_GROUP_WITHIN = 0x8004105aL
WBEM_E_MISSING_AGGREGATION_LIST = 0x8004105bL
WBEM_E_PROPERTY_NOT_AN_OBJECT = 0x8004105cL
WBEM_E_AGGREGATING_BY_OBJECT = 0x8004105dL
WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY = 0x8004105fL
WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING = 0x80041060L
WBEM_E_QUEUE_OVERFLOW = 0x80041061L
WBEM_E_PRIVILEGE_NOT_HELD = 0x80041062L
WBEM_E_INVALID_OPERATOR = 0x80041063L
WBEM_E_LOCAL_CREDENTIALS = 0x80041064L
WBEM_E_CANNOT_BE_ABSTRACT = 0x80041065L
WBEM_E_AMENDED_OBJECT = 0x80041066L
WBEM_E_CLIENT_TOO_SLOW = 0x80041067L
WBEM_E_NULL_SECURITY_DESCRIPTOR = 0x80041068L
WBEM_E_TIMED_OUT = 0x80041069L
WBEM_E_INVALID_ASSOCIATION = 0x8004106aL
WBEM_E_AMBIGUOUS_OPERATION = 0x8004106bL
WBEM_E_QUOTA_VIOLATION = 0x8004106cL
WBEM_E_RESERVED_001 = 0x8004106dL
WBEM_E_RESERVED_002 = 0x8004106eL
WBEM_E_UNSUPPORTED_LOCALE = 0x8004106fL
WBEM_E_HANDLE_OUT_OF_DATE = 0x80041070L
WBEM_E_CONNECTION_FAILED = 0x80041071L
WBEM_E_INVALID_HANDLE_REQUEST = 0x80041072L
WBEM_E_PROPERTY_NAME_TOO_WIDE = 0x80041073L
WBEM_E_CLASS_NAME_TOO_WIDE = 0x80041074L
WBEM_E_METHOD_NAME_TOO_WIDE = 0x80041075L
WBEM_E_QUALIFIER_NAME_TOO_WIDE = 0x80041076L
WBEM_E_RERUN_COMMAND = 0x80041077L
WBEM_E_DATABASE_VER_MISMATCH = 0x80041078L
WBEM_E_VETO_DELETE = 0x80041079L
WBEM_E_VETO_PUT = 0x8004107aL
WBEM_E_INVALID_LOCALE = 0x80041080L
WBEM_E_PROVIDER_SUSPENDED = 0x80041081L
WBEM_E_SYNCHRONIZATION_REQUIRED = 0x80041082L
WBEM_E_NO_SCHEMA = 0x80041083L
WBEM_E_PROVIDER_ALREADY_REGISTERED = 0x80041084L
WBEM_E_PROVIDER_NOT_REGISTERED = 0x80041085L
WBEM_E_FATAL_TRANSPORT_ERROR = 0x80041086L
WBEM_E_ENCRYPTED_CONNECTION_REQUIRED = 0x80041087L
WBEM_E_PROVIDER_TIMED_OUT = 0x80041088L
WBEM_E_NO_KEY = 0x80041089L
WBEM_E_PROVIDER_DISABLED = 0x8004108aL
WBEMESS_E_REGISTRATION_TOO_BROAD = 0x80042001L
WBEMESS_E_REGISTRATION_TOO_PRECISE = 0x80042002L
WBEMESS_E_AUTHZ_NOT_PRIVILEGED = 0x80042003L
WBEMMOF_E_EXPECTED_QUALIFIER_NAME = 0x80044001L
WBEMMOF_E_EXPECTED_SEMI = 0x80044002L
WBEMMOF_E_EXPECTED_OPEN_BRACE = 0x80044003L
WBEMMOF_E_EXPECTED_CLOSE_BRACE = 0x80044004L
WBEMMOF_E_EXPECTED_CLOSE_BRACKET = 0x80044005L
WBEMMOF_E_EXPECTED_CLOSE_PAREN = 0x80044006L
WBEMMOF_E_ILLEGAL_CONSTANT_VALUE = 0x80044007L
WBEMMOF_E_EXPECTED_TYPE_IDENTIFIER = 0x80044008L
WBEMMOF_E_EXPECTED_OPEN_PAREN = 0x80044009L
WBEMMOF_E_UNRECOGNIZED_TOKEN = 0x8004400aL
WBEMMOF_E_UNRECOGNIZED_TYPE = 0x8004400bL
WBEMMOF_E_EXPECTED_PROPERTY_NAME = 0x8004400cL
WBEMMOF_E_TYPEDEF_NOT_SUPPORTED = 0x8004400dL
WBEMMOF_E_UNEXPECTED_ALIAS = 0x8004400eL
WBEMMOF_E_UNEXPECTED_ARRAY_INIT = 0x8004400fL
WBEMMOF_E_INVALID_AMENDMENT_SYNTAX = 0x80044010L
WBEMMOF_E_INVALID_DUPLICATE_AMENDMENT = 0x80044011L
WBEMMOF_E_INVALID_PRAGMA = 0x80044012L
WBEMMOF_E_INVALID_NAMESPACE_SYNTAX = 0x80044013L
WBEMMOF_E_EXPECTED_CLASS_NAME = 0x80044014L
WBEMMOF_E_TYPE_MISMATCH = 0x80044015L
WBEMMOF_E_EXPECTED_ALIAS_NAME = 0x80044016L
WBEMMOF_E_INVALID_CLASS_DECLARATION = 0x80044017L
WBEMMOF_E_INVALID_INSTANCE_DECLARATION = 0x80044018L
WBEMMOF_E_EXPECTED_DOLLAR = 0x80044019L
WBEMMOF_E_CIMTYPE_QUALIFIER = 0x8004401aL
WBEMMOF_E_DUPLICATE_PROPERTY = 0x8004401bL
WBEMMOF_E_INVALID_NAMESPACE_SPECIFICATION = 0x8004401cL
WBEMMOF_E_OUT_OF_RANGE = 0x8004401dL
WBEMMOF_E_INVALID_FILE = 0x8004401eL
WBEMMOF_E_ALIASES_IN_EMBEDDED = 0x8004401fL
WBEMMOF_E_NULL_ARRAY_ELEM = 0x80044020L
WBEMMOF_E_DUPLICATE_QUALIFIER = 0x80044021L
WBEMMOF_E_EXPECTED_FLAVOR_TYPE = 0x80044022L
WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES = 0x80044023L
WBEMMOF_E_MULTIPLE_ALIASES = 0x80044024L
WBEMMOF_E_INCOMPATIBLE_FLAVOR_TYPES2 = 0x80044025L
WBEMMOF_E_NO_ARRAYS_RETURNED = 0x80044026L
WBEMMOF_E_MUST_BE_IN_OR_OUT = 0x80044027L
WBEMMOF_E_INVALID_FLAGS_SYNTAX = 0x80044028L
WBEMMOF_E_EXPECTED_BRACE_OR_BAD_TYPE = 0x80044029L
WBEMMOF_E_UNSUPPORTED_CIMV22_QUAL_VALUE = 0x8004402aL
WBEMMOF_E_UNSUPPORTED_CIMV22_DATA_TYPE = 0x8004402bL
WBEMMOF_E_INVALID_DELETEINSTANCE_SYNTAX = 0x8004402cL
WBEMMOF_E_INVALID_QUALIFIER_SYNTAX = 0x8004402dL
WBEMMOF_E_QUALIFIER_USED_OUTSIDE_SCOPE = 0x8004402eL
WBEMMOF_E_ERROR_CREATING_TEMP_FILE = 0x8004402fL
WBEMMOF_E_ERROR_INVALID_INCLUDE_FILE = 0x80044030L
WBEMMOF_E_INVALID_DELETECLASS_SYNTAX = 0x80044031L
# Enum tagCLSCTX definitions
tagCLSCTX = DWORD
CLSCTX = tagCLSCTX
CLSCTX_INPROC_SERVER = 0x1
CLSCTX_INPROC_HANDLER = 0x2
CLSCTX_LOCAL_SERVER = 0x4
CLSCTX_INPROC_SERVER16 = 0x8
CLSCTX_REMOTE_SERVER = 0x10
CLSCTX_INPROC_HANDLER16 = 0x20
CLSCTX_RESERVED1 = 0x40
CLSCTX_RESERVED2 = 0x80
CLSCTX_RESERVED3 = 0x100
CLSCTX_RESERVED4 = 0x200
CLSCTX_NO_CODE_DOWNLOAD = 0x400
CLSCTX_RESERVED5 = 0x800
CLSCTX_NO_CUSTOM_MARSHAL = 0x1000
CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000
CLSCTX_NO_FAILURE_LOG = 0x4000
CLSCTX_DISABLE_AAA = 0x8000
CLSCTX_ENABLE_AAA = 0x10000
CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000
CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000
CLSCTX_ENABLE_CLOAKING = 0x100000
CLSCTX_APPCONTAINER = 0x400000
CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000
CLSCTX_PS_DLL = 0x80000000L
# Enum _IMAGEHLP_SYMBOL_TYPE_INFO definitions
_IMAGEHLP_SYMBOL_TYPE_INFO = DWORD
IMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO
@@ -449,6 +680,15 @@ PROCESSINFOCLASS = _PROCESSINFOCLASS
ProcessBasicInformation = 0x0
ProcessWow64Information = 0x1a
# Enum tagCOINIT definitions
tagCOINIT = DWORD
COINIT = tagCOINIT
COINIT_APARTMENTTHREADED = 0x2
COINIT_MULTITHREADED = 0x0
COINIT_DISABLE_OLE1DDE = 0x4
COINIT_SPEED_OVER_MEMORY = 0x8
# Enum tagTYPEKIND definitions
tagTYPEKIND = DWORD
TYPEKIND = tagTYPEKIND
@@ -1697,9 +1937,10 @@ class _GUID(Structure):
("Data1", ULONG),
("Data2", USHORT),
("Data3", USHORT),
("Data4", UCHAR * 8),
("Data4", BYTE * 8),
]
IID = _GUID
REFCLSID = POINTER(_GUID)
GUID = _GUID
REFIID = POINTER(_GUID)
@@ -1786,7 +2027,7 @@ class TMP_variant_sub_union(Union):
("pullVal", POINTER(ULONGLONG)),
("pintVal", POINTER(INT)),
("puintVal", POINTER(UINT)),
("__VARIANT_NAME_4", _tagBRECORD),
("_VARIANT_NAME_4", _tagBRECORD),
]
# Struct __tagVARIANT definitions
@@ -1796,7 +2037,7 @@ class __tagVARIANT(Structure):
("wReserved1", WORD),
("wReserved2", WORD),
("wReserved3", WORD),
("__VARIANT_NAME_3", TMP_variant_sub_union),
("_VARIANT_NAME_3", TMP_variant_sub_union),
]
LPVARIANTARG = POINTER(__tagVARIANT)
VARIANTARG = __tagVARIANT
@@ -2542,3 +2783,14 @@ class _EVENTLOGRECORD(Structure):
PEVENTLOGRECORD = POINTER(_EVENTLOGRECORD)
EVENTLOGRECORD = _EVENTLOGRECORD
# Struct tagSOLE_AUTHENTICATION_SERVICE definitions
class tagSOLE_AUTHENTICATION_SERVICE(Structure):
_fields_ = [
("dwAuthnSvc", DWORD),
("dwAuthzSvc", DWORD),
("pPrincipalName", POINTER(OLECHAR)),
("hr", HRESULT),
]
PSOLE_AUTHENTICATION_SERVICE = POINTER(tagSOLE_AUTHENTICATION_SERVICE)
SOLE_AUTHENTICATION_SERVICE = tagSOLE_AUTHENTICATION_SERVICE
+25 -80
View File
@@ -4,50 +4,15 @@ import struct
import functools
from ctypes.wintypes import *
import windows.com
from windows.generated_def.winstructs import *
from windows.simple_com import get_IID_from_raw, COMInterface
from windows.generated_def.interfaces import IWbemLocator, IWbemServices, IEnumWbemClassObject, IWbemClassObject
CLSID_WbemAdministrativeLocator_raw = 0xcb8555cc, 0x9128, 0x11d1, 0xad, 0x9b, 0x00, 0xc0, 0x4f, 0xd8, 0x0fd, 0xff
CLSID_WbemAdministrativeLocator_IID = get_IID_from_raw(CLSID_WbemAdministrativeLocator_raw)
IID_IWbemLocator_raw = 0x0DC12A687, 0x737F, 0x11CF, 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24
IID_IWbemLocator= get_IID_from_raw(IID_IWbemLocator_raw)
BSTR = ctypes.c_wchar_p
class IWbemLocator(COMInterface):
_functions_ = {
"ConnectServer": ctypes.WINFUNCTYPE(HRESULT, ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_wchar_p,
ctypes.c_long, ctypes.c_wchar_p, ctypes.c_void_p, POINTER(ctypes.c_void_p))(3, "ConnectServer")
}
class IWbemServices(COMInterface):
_functions_ = {
"ExecQuery": ctypes.WINFUNCTYPE(HRESULT, ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_long, ctypes.c_void_p, POINTER(ctypes.c_void_p))(20, "ExecQuery")
}
class IEnumWbemClassObject(COMInterface):
_functions_ = {
"Next": ctypes.WINFUNCTYPE(HRESULT, ctypes.c_long, ctypes.c_ulong, POINTER(ctypes.c_void_p), POINTER(ctypes.c_long))(4, "Next")
}
class IWbemClassObject(COMInterface):
_functions_ = {
"Get": ctypes.WINFUNCTYPE(HRESULT, ctypes.c_wchar_p, ctypes.c_long, ctypes.c_void_p, ctypes.c_void_p, POINTER(ctypes.c_long))(4, "Get"),
"GetNames": ctypes.WINFUNCTYPE(HRESULT, ctypes.c_wchar_p, ctypes.c_long, ctypes.c_void_p, POINTER(ctypes.c_void_p))(7, "GetNames")
}
class _tagBRECORD(ctypes.Structure):
_fields_ = [("pvRecord", PVOID), ("pRecInfo", PVOID)]
class SAFEARRAY(windows.generated_def.winstructs.SAFEARRAY):
CLSID_WbemAdministrativeLocator_IID = windows.com.IID.from_string('CB8555CC-9128-11D1-AD9B-00C04FD8FDFF')
class ImprovedSAFEARRAY(windows.generated_def.winstructs.SAFEARRAY):
@classmethod
def of_type(cls, addr, t):
self = cls.from_address(addr)
@@ -71,38 +36,19 @@ class SAFEARRAY(windows.generated_def.winstructs.SAFEARRAY):
return data
class SimpleVariantData(ctypes.Union):
_fields_ = [("llVal", LONGLONG),
("lVal", LONG),
("bVal", BYTE),
("iVal", SHORT),
("fltVal", FLOAT),
("dblVal", DOUBLE),
("bstrVal", BSTR),
("pbstrVal", POINTER(BSTR)),
("byref", PVOID),
("parray", POINTER(SAFEARRAY)),
("pbyref", PVOID),
("ullVal", ULONGLONG),
("llVal", LONGLONG),
("__VARIANT_NAME_4", _tagBRECORD)]
# TODO: put real struct in winstruct (need a real parser for generation)
class SimpleVariant(ctypes.Structure):
_fields_ = [("vt", WORD), ("wReserved1", WORD), ("wReserved2", WORD), ("wReserved3", WORD), ("_Data", SimpleVariantData)]
class ImprovedVariant(VARIANT):
@property
def asbstr(self):
if self.vt != VT_BSTR:
raise ValueError("asbstr on non-bstr variant")
return self._Data.bstrVal
#import pdb;pdb.set_trace()
return self._VARIANT_NAME_3.bstrVal
@property
def aslong(self):
if not self.vt in [VT_I4, VT_BOOL]:
raise ValueError("aslong on non-long variant")
return self._Data.lVal
return self._VARIANT_NAME_3.lVal
@property
def asbool(self):
@@ -120,21 +66,13 @@ class WmiRequester(object):
return cls.INSTANCE
def __init__(self):
if hasattr(self, "initializiated"):
return
locator = IWbemLocator()
service = IWbemServices()
# TODO: puts those in winproxy with a real error check and wrapper
assert ctypes.windll.ole32.CoInitializeEx(0, 0) == 0, "CoInitializeEx"
assert ctypes.windll.ole32.CoInitializeSecurity(0, -1, 0,0, 0, 3, 0,0,0) == 0, "CoInitializeSecurity"
assert ctypes.windll.ole32.CoCreateInstance(CLSID_WbemAdministrativeLocator_IID, 0, 1, IID_IWbemLocator, ctypes.byref(locator)) == 0, "CoCreateInstance"
windows.com.init()
windows.com.create_instance(CLSID_WbemAdministrativeLocator_IID, locator)
locator.ConnectServer("root\\cimv2", None, None , None, 0x80, None, None, ctypes.byref(service))
self.service = service
self.initializiated = True
def select(self, frm, attrs="*"):
"""Select `attrs` from ``frm``
@@ -142,19 +80,24 @@ class WmiRequester(object):
:rtype: list of dict
"""
enumerator = IEnumWbemClassObject()
self.service.ExecQuery("WQL", "select * from {0}".format(frm), 0x20, 0, ctypes.byref(enumerator))
try:
self.service.ExecQuery("WQL", "select * from {0}".format(frm), 0x20, 0, ctypes.byref(enumerator))
except WindowsError as e:
if (e.winerror & 0xffffffff) == WBEM_E_INVALID_CLASS:
raise WindowsError(e.winerror, 'WBEM_E_INVALID_CLASS <Invalid WMI class "{0}">'.format(frm))
raise
count = ctypes.c_long(0)
count = ctypes.c_ulong(0)
processor = IWbemClassObject()
res = []
enumerator.Next(0xffffffff, 1, ctypes.byref(processor), ctypes.byref(count))
while count.value:
current_res = {}
variant_res = SimpleVariant()
variant_res = ImprovedVariant()
if attrs == "*":
attrs = [x for x in self.get_names(processor) if not x.startswith("__")]
for name in attrs:
processor.Get(name, 0, ctypes.byref(variant_res), 0, None)
processor.Get(name, 0, ctypes.byref(variant_res), None, None)
# TODO: something clean and generic
if variant_res.vt & VT_ARRAY:
if variant_res.vt & VT_TYPEMASK == VT_BSTR:
@@ -176,6 +119,8 @@ class WmiRequester(object):
return res
def get_names(self, processor):
res = PVOID()
processor.GetNames(None, 0, None, res)
return SAFEARRAY.of_type(res.value, BSTR).to_list()
res = POINTER(SAFEARRAY)()
processor.GetNames(None, 0, None, byref(res))
safe_array = ctypes.cast(res, POINTER(ImprovedSAFEARRAY))[0]
safe_array.elt_type = BSTR
return safe_array.to_list()
+18 -1
View File
@@ -916,4 +916,21 @@ def VerQueryValueA(pBlock, lpSubBlock, lplpBuffer, puLen):
@VersionProxy("VerQueryValueW")
def VerQueryValueW(pBlock, lpSubBlock, lplpBuffer, puLen):
return VerQueryValueW.ctypes_function(pBlock, lpSubBlock, lplpBuffer, puLen)
return VerQueryValueW.ctypes_function(pBlock, lpSubBlock, lplpBuffer, puLen)
# ## Ole32Proxy (COM STUFF) ## #
@Ole32Proxy('CoInitializeEx', no_error_check)
def CoInitializeEx(pvReserved=None, dwCoInit=COINIT_MULTITHREADED):
return CoInitializeEx.ctypes_function(pvReserved, dwCoInit)
@Ole32Proxy('CoInitializeSecurity')
def CoInitializeSecurity(pSecDesc, cAuthSvc, asAuthSvc, pReserved1, dwAuthnLevel, dwImpLevel, pAuthList, dwCapabilities, pReserved3):
return CoInitializeSecurity.ctypes_function(pSecDesc, cAuthSvc, asAuthSvc, pReserved1, dwAuthnLevel, dwImpLevel, pAuthList, dwCapabilities, pReserved3)
@Ole32Proxy('CoCreateInstance')
def CoCreateInstance(rclsid, pUnkOuter=None, dwClsContext=CLSCTX_INPROC_SERVER, riid=NeededParameter, ppv=NeededParameter):
return CoCreateInstance.ctypes_function(rclsid, pUnkOuter, dwClsContext, riid, ppv)