Win32_NetworkAdapterConfigurationの内容を表示します。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> #include <rpc.h> #include <comutil.h> #include <atlbase.h> #include <Wbemcli.h> #include <wbemidl.h> #pragma comment(lib,"comsuppw.lib") #pragma comment(lib, "wbemuuid.lib") /* valiant値の取得 */ std::wstring GetValiantValue ( VARIANT& var ) { HRESULT hResult; TCHAR waBuf[ 1024 ]; switch( var.vt ) { case VT_NULL: { ::_swprintf_p( waBuf, _countof( waBuf ), L"(VT_NULL)" ); } break; case VT_I2: { ::_swprintf_p( waBuf, _countof( waBuf ), L"%d", var.lVal ); } break; case VT_I4: { ::_swprintf_p( waBuf, _countof( waBuf ), L"%d", var.lVal ); } break; case VT_BSTR: { ::_swprintf_p( waBuf, _countof( waBuf ), L"%s", var.bstrVal ); } break; case VT_BOOL: { ::_swprintf_p( waBuf, _countof( waBuf ), L"%s", ( FALSE == var.boolVal )? L"false" : L"true" ); } break; case VT_UI1: { ::_swprintf_p( waBuf, _countof( waBuf ), L"%d", var.uiVal ); } break; case VT_BSTR | VT_ARRAY: { SAFEARRAY* pNames = var.parray; LPWSTR* p; LONG lIndexMin; LONG lIndexMax; hResult = SafeArrayGetLBound( pNames, 1, &lIndexMin ); if ( hResult != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } hResult = SafeArrayGetUBound( pNames, 1, &lIndexMax ); if ( hResult != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } hResult = SafeArrayAccessData( pNames, (void **)&p ); if ( hResult != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } std::wstring strRet; if ( lIndexMin <= lIndexMax ) { strRet = L"[ "; for ( int nI = lIndexMin; nI <= lIndexMax; nI++ ) { std::wcout << L"ARRAY(VT_BSTR)[" << nI << "]"<< p[ nI ] << std::endl; strRet += p[ nI ]; if ( nI > lIndexMax ) { strRet += L", "; } } strRet += L" ]"; } SafeArrayUnaccessData( pNames ); waBuf[0]=L'¥0'; return( strRet ); } break; case VT_I4 | VT_ARRAY: { SAFEARRAY* pNames = var.parray; int* p; LONG lIndexMin; LONG lIndexMax; hResult = SafeArrayGetLBound( pNames, 1, &lIndexMin ); if ( hResult != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } hResult = SafeArrayGetUBound( pNames, 1, &lIndexMax ); if ( hResult != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } hResult = SafeArrayAccessData( pNames, (void **)&p ); if ( hResult != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } std::wstring strRet; if ( lIndexMin <= lIndexMax ) { strRet = L"[ "; for ( int nI = lIndexMin; nI <= lIndexMax; nI++ ) { std::wcout << L"ARRAY(VT_BSTR)[" << nI << "]"<< p[ nI ] << std::endl; ::_swprintf_p( waBuf, _countof( waBuf ), L"%d", p[ nI ] ); strRet += waBuf; if ( nI > lIndexMax ) { strRet += L", "; } } strRet += L" ]"; } SafeArrayUnaccessData( pNames ); waBuf[0]=L'¥0'; return( strRet ); } break; default: { ::_swprintf_p( waBuf, _countof( waBuf ), L"<はてな?>0x%08x", var.vt ); } break; } return( waBuf ); } /* Win32_NetworkAdapterConfigurationの表示 */ int _tmain ( int argc , _TCHAR* argv[] ) { /* std::wcoutのロケールを設定 これを設定するだけで、std::wcoutで日本語が表示される ようになります。 */ std::wcout.imbue( std::locale( "", std::locale::ctype ) ); // COM初期化 CoInitializeEx( NULL, COINIT_MULTITHREADED ); { HRESULT hResult; // COM-Security初期化 hResult = CoInitializeSecurity( NULL , -1 , NULL , NULL , RPC_C_AUTHN_LEVEL_PKT , RPC_C_IMP_LEVEL_IMPERSONATE , NULL , EOAC_NONE , 0 ); CComPtr<IWbemLocator> pIWbemLocator; CComPtr<IWbemServices> pIWbemServices; CComPtr<IEnumWbemClassObject> pIEnumObject; // CLSID_WbemAdministrativeLocator hResult = pIWbemLocator.CoCreateInstance( CLSID_WbemAdministrativeLocator , NULL , CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER ); if ( S_OK == hResult ) { CComBSTR bstrNamespace( _T("root¥¥cimv2") ); // ConnectServer hResult = pIWbemLocator->ConnectServer( bstrNamespace , NULL , NULL , NULL , 0 , NULL , NULL , &pIWbemServices ); if ( S_OK == hResult ) { CComBSTR bstrQuery(_T("Select * from Win32_NetworkAdapterConfiguration")); CComBSTR bstrQL(_T("WQL")); // ExecQuery hResult = pIWbemServices->ExecQuery( bstrQL , bstrQuery , WBEM_FLAG_RETURN_IMMEDIATELY , NULL , &pIEnumObject ); if ( S_OK == hResult ) { ULONG uCount = 1; ULONG uReturned; hResult = pIEnumObject->Reset(); do { CComPtr<IWbemClassObject> pClassObject = NULL; hResult = pIEnumObject->Next( WBEM_INFINITE, uCount, &pClassObject, &uReturned ); if ( S_OK != hResult ) { break; } SAFEARRAY* pNames; LPWSTR* p; LONG lIndexMin; LONG lIndexMax; hResult = pClassObject->GetNames( NULL, WBEM_FLAG_ALWAYS, NULL, &pNames ); if ( S_OK != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } hResult = SafeArrayGetLBound( pNames, 1, &lIndexMin ); if ( S_OK != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } hResult = SafeArrayGetUBound( pNames, 1, &lIndexMax ); if ( S_OK != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } hResult = SafeArrayAccessData( pNames, (void **)&p ); if ( S_OK != hResult ) { std::wcout << L"hResult = " << std::hex << hResult << std::dec << std::endl; } for ( int nI = lIndexMin; nI <= lIndexMax; nI++ ) { CComVariant var; pClassObject->Get( p[ nI ], 0, &var, NULL, NULL ); std::wstring str = GetValiantValue( var ); std::wcout << L"[" << nI << "]"<< p[ nI ] << L" = " << str.c_str() << std::endl; } SafeArrayUnaccessData( pNames ); SafeArrayDestroy( pNames ); } while( S_OK == hResult ); } } } } // COM終了処理 ::CoUninitialize(); // 正常終了 return( 0 ); }
[0]__GENUS = 2 [1]__CLASS = Win32_NetworkAdapterConfiguration [2]__SUPERCLASS = CIM_Setting [3]__DYNASTY = CIM_Setting [4]__RELPATH = Win32_NetworkAdapterConfiguration.Index=0 [5]__PROPERTY_COUNT = 61 ARRAY(VT_BSTR)[0]CIM_Setting [6]__DERIVATION = [ CIM_Setting ] [7]__SERVER = DESKTOP-QD55N38 [8]__NAMESPACE = root\cimv2 [9]__PATH = \\DESKTOP-666677\root\cimv2:Win32_NetworkAdapterConfiguration.Index=0 [10]ArpAlwaysSourceRoute = (VT_NULL) [11]ArpUseEtherSNAP = (VT_NULL) [12]Caption = [00000000] Intel(R) Ethernet Connection (2) I219-V [13]DatabasePath = (VT_NULL) [14]DeadGWDetectEnabled = (VT_NULL) [15]DefaultIPGateway = (VT_NULL) [16]DefaultTOS = (VT_NULL) [17]DefaultTTL = (VT_NULL) [18]Description = Intel(R) Ethernet Connection (2) I219-V [19]DHCPEnabled = true [20]DHCPLeaseExpires = (VT_NULL) [21]DHCPLeaseObtained = (VT_NULL) [22]DHCPServer = (VT_NULL) [23]DNSDomain = (VT_NULL) [24]DNSDomainSuffixSearchOrder = (VT_NULL) [25]DNSEnabledForWINSResolution = (VT_NULL) [26]DNSHostName = (VT_NULL) [27]DNSServerSearchOrder = (VT_NULL) [28]DomainDNSRegistrationEnabled = (VT_NULL) [29]ForwardBufferMemory = (VT_NULL) [30]FullDNSRegistrationEnabled = (VT_NULL) [31]GatewayCostMetric = (VT_NULL) [32]IGMPLevel = (VT_NULL) [33]Index = 0 [34]InterfaceIndex = 8 [35]IPAddress = (VT_NULL) [36]IPConnectionMetric = (VT_NULL) [37]IPEnabled = false [38]IPFilterSecurityEnabled = (VT_NULL) [39]IPPortSecurityEnabled = (VT_NULL) [40]IPSecPermitIPProtocols = (VT_NULL) [41]IPSecPermitTCPPorts = (VT_NULL) [42]IPSecPermitUDPPorts = (VT_NULL) [43]IPSubnet = (VT_NULL) [44]IPUseZeroBroadcast = (VT_NULL) [45]IPXAddress = (VT_NULL) [46]IPXEnabled = (VT_NULL) [47]IPXFrameType = (VT_NULL) [48]IPXMediaType = (VT_NULL) [49]IPXNetworkNumber = (VT_NULL) [50]IPXVirtualNetNumber = (VT_NULL) [51]KeepAliveInterval = (VT_NULL) [52]KeepAliveTime = (VT_NULL) [53]MACAddress = 30:55:33:77:51:90 [54]MTU = (VT_NULL) [55]NumForwardPackets = (VT_NULL) [56]PMTUBHDetectEnabled = (VT_NULL) [57]PMTUDiscoveryEnabled = (VT_NULL) [58]ServiceName = e1dexpress [59]SettingID = {E9DBD811-5555-4049-8DE3-384101021F3C} [60]TcpipNetbiosOptions = (VT_NULL) [61]TcpMaxConnectRetransmissions = (VT_NULL) [62]TcpMaxDataRetransmissions = (VT_NULL) [63]TcpNumConnections = (VT_NULL) [64]TcpUseRFC1122UrgentPointer = (VT_NULL) [65]TcpWindowSize = (VT_NULL) [66]WINSEnableLMHostsLookup = (VT_NULL) [67]WINSHostLookupFile = (VT_NULL) [68]WINSPrimaryServer = (VT_NULL) [69]WINSScopeID = (VT_NULL) [70]WINSSecondaryServer = (VT_NULL)