//================================================================= // // WmiApi.cpp // // Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved // //================================================================= #include "precomp.h" #include #include #include "WmiApi.h" #include "DllWrapperCreatorReg.h" // {DD3B4892-CD0F-11d2-911E-0060081A46FD} static const GUID g_guidWmiApi = {0xdd3b4892, 0xcd0f, 0x11d2, {0x91, 0x1e, 0x0, 0x60, 0x8, 0x1a, 0x46, 0xfd}}; static const TCHAR g_tstrWmi[] = _T("WMI.DLL"); /****************************************************************************** * Register this class with the CResourceManager. *****************************************************************************/ CDllApiWraprCreatrReg MyRegisteredWmiWrapper; /****************************************************************************** * Constructor ******************************************************************************/ CWmiApi::CWmiApi(LPCTSTR a_tstrWrappedDllName) : CDllWrapperBase(a_tstrWrappedDllName), m_pfnWmiQueryAllData(NULL), m_pfnWmiOpenBlock(NULL), m_pfnWmiCloseBlock(NULL), m_pfnWmiQuerySingleInstance(NULL), m_pfnWmiSetSingleItem(NULL), m_pfnWmiSetSingleInstance(NULL), m_pfnWmiExecuteMethod(NULL), m_pfnWmiNotificationRegistraton(NULL), m_pfnWmiFreeBuffer(NULL), m_pfnWmiEnumerateGuids(NULL), m_pfnWmiMofEnumerateResources(NULL), m_pfnWmiFileHandleToInstanceName(NULL), m_pfnWmiDevInstToInstanceName(NULL), m_pfnWmiQueryGuidInformation(NULL) { } /****************************************************************************** * Destructor ******************************************************************************/ CWmiApi::~CWmiApi() { } /****************************************************************************** * Initialization function to check that we obtained function addresses. ******************************************************************************/ bool CWmiApi::Init() { bool fRet = LoadLibrary(); if(fRet) { #ifdef NTONLY m_pfnWmiQueryAllData = (PFN_WMI_QUERY_ALL_DATA) GetProcAddress("WmiQueryAllDataW"); m_pfnWmiQuerySingleInstance = (PFN_WMI_QUERY_SINGLE_INSTANCE) GetProcAddress("WmiQuerySingleInstanceW"); m_pfnWmiSetSingleItem = (PFN_WMI_SET_SINGLE_ITEM) GetProcAddress("WmiSetSingleItemW"); m_pfnWmiSetSingleInstance = (PFN_WMI_SET_SINGLE_INSTANCE) GetProcAddress("WmiSetSingleInstanceW"); m_pfnWmiExecuteMethod = (PFN_WMI_EXECUTE_METHOD) GetProcAddress("WmiExecuteMethodW"); m_pfnWmiNotificationRegistraton = (PFN_WMI_NOTIFICATION_REGRISTRATION) GetProcAddress("WmiNotificationRegistrationW"); m_pfnWmiMofEnumerateResources = (PFN_WMI_MOF_ENUMERATE_RESOURCES) GetProcAddress("WmiMofEnumerateResourcesW"); m_pfnWmiFileHandleToInstanceName = (PFN_WMI_FILE_HANDLE_TO_INSTANCE_NAME) GetProcAddress("WmiFileHandleToInstanceNameW"); m_pfnWmiDevInstToInstanceName = (PFN_WMI_DEV_INST_TO_INSTANCE_NAME) GetProcAddress("WmiDevInstToInstanceNameW"); m_pfnWmiQueryGuidInformation = (PFN_WMI_QUERY_GUID_INFORMATION) GetProcAddress("WmiQueryGuidInformation"); fRet = (m_pfnWmiQueryAllData != NULL) && (m_pfnWmiQuerySingleInstance != NULL) && (m_pfnWmiSetSingleItem != NULL) && (m_pfnWmiSetSingleInstance != NULL) && (m_pfnWmiExecuteMethod != NULL) && (m_pfnWmiNotificationRegistraton != NULL) && (m_pfnWmiMofEnumerateResources != NULL) && (m_pfnWmiFileHandleToInstanceName != NULL) && (m_pfnWmiDevInstToInstanceName != NULL) && (m_pfnWmiQueryGuidInformation != NULL); #endif #ifdef WIN9XONLY m_pfnWmiQueryAllData = (PFN_WMI_QUERY_ALL_DATA) GetProcAddress("WmiQueryAllDataA"); m_pfnWmiQuerySingleInstance = (PFN_WMI_QUERY_SINGLE_INSTANCE) GetProcAddress("WmiQuerySingleInstanceA"); m_pfnWmiSetSingleItem = (PFN_WMI_SET_SINGLE_ITEM) GetProcAddress("WmiSetSingleItemA"); m_pfnWmiSetSingleInstance = (PFN_WMI_SET_SINGLE_INSTANCE) GetProcAddress("WmiSetSingleInstanceA"); m_pfnWmiExecuteMethod = (PFN_WMI_EXECUTE_METHOD) GetProcAddress("WmiExecuteMethodA"); m_pfnWmiNotificationRegistraton = (PFN_WMI_NOTIFICATION_REGRISTRATION) GetProcAddress("WmiNotificationRegistrationA"); m_pfnWmiMofEnumerateResources = (PFN_WMI_MOF_ENUMERATE_RESOURCES) GetProcAddress("WmiMofEnumerateResourcesA"); m_pfnWmiFileHandleToInstanceName = (PFN_WMI_FILE_HANDLE_TO_INSTANCE_NAME) GetProcAddress("WmiFileHandleToInstanceNameA"); fRet = (m_pfnWmiQueryAllData != NULL) && (m_pfnWmiQuerySingleInstance != NULL) && (m_pfnWmiSetSingleItem != NULL) && (m_pfnWmiSetSingleInstance != NULL) && (m_pfnWmiExecuteMethod != NULL) && (m_pfnWmiNotificationRegistraton != NULL) && (m_pfnWmiMofEnumerateResources != NULL) && (m_pfnWmiFileHandleToInstanceName != NULL); #endif m_pfnWmiOpenBlock = (PFN_WMI_OPEN_BLOCK) GetProcAddress("WmiOpenBlock"); m_pfnWmiCloseBlock = (PFN_WMI_CLOSE_BLOCK) GetProcAddress("WmiCloseBlock"); m_pfnWmiFreeBuffer = (PNF_WMI_FREE_BUFFER) GetProcAddress("WmiFreeBuffer"); m_pfnWmiEnumerateGuids = (PFN_WMI_ENUMERATE_GUIDS) GetProcAddress("WmiEnumerateGuids"); fRet = fRet && (m_pfnWmiOpenBlock != NULL) && (m_pfnWmiCloseBlock != NULL) && (m_pfnWmiFreeBuffer != NULL) && (m_pfnWmiEnumerateGuids != NULL); if (!fRet) { LogErrorMessage(L"Failed find entrypoint in wmiapi"); } } return fRet; } /****************************************************************************** * Member functions wrapping Wmi api functions. Add new functions here * as required. ******************************************************************************/ ULONG CWmiApi::WmiQueryAllData ( IN WMIHANDLE a_h, IN OUT ULONG* a_ul, OUT PVOID a_pv ) { return m_pfnWmiQueryAllData(a_h, a_ul, a_pv); } ULONG CWmiApi::WmiOpenBlock ( IN GUID* a_pguid, IN ULONG a_ul, OUT WMIHANDLE a_wmih ) { return m_pfnWmiOpenBlock(a_pguid, a_ul, a_wmih); } ULONG CWmiApi::WmiCloseBlock ( IN WMIHANDLE a_wmih ) { return m_pfnWmiCloseBlock(a_wmih); } ULONG CWmiApi::WmiQuerySingleInstance ( IN WMIHANDLE a_wmihDataBlockHandle, IN LPCTSTR a_tstrInstanceName, IN OUT ULONG* a_ulBufferSize, OUT PVOID a_pvBuffer ) { return m_pfnWmiQuerySingleInstance(a_wmihDataBlockHandle, a_tstrInstanceName, a_ulBufferSize, a_pvBuffer); } ULONG CWmiApi::WmiSetSingleItem ( IN WMIHANDLE a_wmihDataBlockHandle, IN LPCTSTR a_tstrInstanceName, IN ULONG a_ulDataItemId, IN ULONG a_ulReserved, IN ULONG a_ulValueBufferSize, IN PVOID a_pvValueBuffer ) { return m_pfnWmiSetSingleItem(a_wmihDataBlockHandle, a_tstrInstanceName, a_ulDataItemId, a_ulReserved, a_ulValueBufferSize, a_pvValueBuffer); } ULONG CWmiApi::WmiSetSingleInstance ( IN WMIHANDLE a_wmihDataBlockHandle, IN LPCTSTR a_tstrInstanceName, IN ULONG a_ulReserved, IN ULONG a_ulValueBufferSize, IN PVOID a_pvValueBuffer ) { return m_pfnWmiSetSingleInstance(a_wmihDataBlockHandle, a_tstrInstanceName, a_ulReserved, a_ulValueBufferSize, a_pvValueBuffer); } ULONG CWmiApi::WmiExecuteMethod ( IN WMIHANDLE a_wmihMethodDataBlockHandle, IN LPCTSTR a_tstrMethodInstanceName, IN ULONG a_ulMethodId, IN ULONG a_ulInputValueBufferSize, IN PVOID a_pvInputValueBuffer, IN OUT ULONG* a_ulOutputBufferSize, OUT PVOID a_pvOutputBuffer ) { return m_pfnWmiExecuteMethod(a_wmihMethodDataBlockHandle, a_tstrMethodInstanceName, a_ulMethodId, a_ulInputValueBufferSize, a_pvInputValueBuffer, a_ulOutputBufferSize, a_pvOutputBuffer); } ULONG CWmiApi::WmiNotificationRegistration ( IN LPGUID a_pguidGuid, IN BOOLEAN a_blnEnable, IN PVOID a_pvDeliveryInfo, IN ULONG_PTR a_pulDeliveryContext, IN ULONG a_ulFlags ) { return m_pfnWmiNotificationRegistraton(a_pguidGuid, a_blnEnable, a_pvDeliveryInfo, a_pulDeliveryContext, a_ulFlags); } ULONG CWmiApi::WmiMofEnumerateResources ( IN MOFHANDLE a_MofResourceHandle, OUT ULONG* a_pulMofResourceCount, OUT PMOFRESOURCEINFO* a_MofResourceInfo ) { return m_pfnWmiMofEnumerateResources(a_MofResourceHandle, a_pulMofResourceCount, a_MofResourceInfo); } ULONG CWmiApi::WmiFileHandleToInstanceName ( IN WMIHANDLE a_wmihDataBlockHandle, IN HANDLE a_hFileHandle, IN OUT ULONG* a_pulNumberCharacters, OUT TCHAR* a_tcInstanceNames ) { return m_pfnWmiFileHandleToInstanceName(a_wmihDataBlockHandle, a_hFileHandle, a_pulNumberCharacters, a_tcInstanceNames); } ULONG CWmiApi::WmiDevInstToInstanceName ( OUT TCHAR* a_ptcInstanceName, IN ULONG a_ulInstanceNameLength, IN TCHAR* a_tcDevInst, IN ULONG a_ulInstanceIndex ) { ASSERT_BREAK(m_pfnWmiDevInstToInstanceName); if (m_pfnWmiDevInstToInstanceName) return m_pfnWmiDevInstToInstanceName(a_ptcInstanceName, a_ulInstanceNameLength, a_tcDevInst, a_ulInstanceIndex); return 0xffffffff; } void CWmiApi::WmiFreeBuffer ( IN PVOID a_pvBuffer ) { m_pfnWmiFreeBuffer(a_pvBuffer); } ULONG CWmiApi::WmiEnumerateGuids ( OUT LPGUID a_lpguidGuidList, IN OUT ULONG* a_pulGuidCount ) { return m_pfnWmiEnumerateGuids(a_lpguidGuidList, a_pulGuidCount); } ULONG CWmiApi::WmiQueryGuidInformation ( IN WMIHANDLE a_wmihGuidHandle, OUT PWMIGUIDINFORMATION a_GuidInfo ) { ASSERT_BREAK(m_pfnWmiQueryGuidInformation); if (m_pfnWmiQueryGuidInformation) return m_pfnWmiQueryGuidInformation(a_wmihGuidHandle, a_GuidInfo); return 0xffffffff; }