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)