⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 使用wmi查看网卡属性.txt

📁 通过WMI方式查看网卡属性 运用VC++就能实现对网卡的自动识别和描述及其他属性
💻 TXT
字号:
#define _WIN32_DCOM
#include <Wbemidl.h>
#pragma comment(lib,"Wbemuuid.lib")
#include <atlbase.h>
#include "objbase.h"
#include <windows.h>
#include <comutil.h>
#pragma comment(lib, "comsupp.lib")
#include <iostream>

void print_property(CComBSTR bstrPropName, _variant_t& varProperty)
{
	std::cout<<"  "<<(LPCTSTR)_bstr_t(bstrPropName);
	std::cout<<" = ";
	
	if(varProperty.vt !=VT_EMPTY && VT_NULL != varProperty.vt)
	{
		_variant_t vDest;
		HRESULT hr = VariantChangeType(&vDest, &varProperty,0,VT_BSTR);
		if(SUCCEEDED(hr))
			std::cout<< (LPCTSTR)_bstr_t(varProperty);
		else
		{
			if(varProperty.vt == (VT_ARRAY | VT_I4) )
			{
				SAFEARRAY* psa = varProperty.parray;
				int *pIntArray = NULL;
				SafeArrayAccessData(psa,(VOID**)&pIntArray);
				UINT uDim = SafeArrayGetDim(psa);
				if(1==uDim)
				{
					long lLbound,lRbound;
					SafeArrayGetLBound(psa,1,&lLbound);
					SafeArrayGetUBound(psa,1,&lRbound);
					for(long i=lLbound;i<=lRbound;i++)
					{
						std::cout<< pIntArray[i]<<" ";
					}
				}
				SafeArrayUnaccessData(psa);
			}
			else
			{
				std::cout<< varProperty.vt << " type ";
			}
		}
	}
	else
	{
		if(varProperty.vt == VT_EMPTY)
			std::cout<< "VT_EMPTY ";
		else
			std::cout<< "VT_NULL";
	}
	std::cout<<std::endl;
}

HRESULT PrintObject(IWbemClassObject* spInstance)
{
	LPSAFEARRAY psa = NULL;
	HRESULT hres;
	hres = spInstance->GetNames(   NULL,
		WBEM_FLAG_ALWAYS | WBEM_FLAG_NONSYSTEM_ONLY,
		NULL,
		&psa);
	long   lLower, lUpper;
	SafeArrayGetLBound(psa , 1, &lLower);
	SafeArrayGetUBound(psa , 1, &lUpper);
	for (long i = lLower; i <= lUpper; ++i)
	{
		CComBSTR   bstrPropName;
		if (S_OK !=  (hres = SafeArrayGetElement(psa, &i, &bstrPropName)) )
		{
			if (NULL != psa)
				SafeArrayDestroy(psa);
			return hres;
		}
		_variant_t varProperty;
		HRESULT hr = spInstance->Get(bstrPropName,0,&varProperty,NULL,0);
		print_property(bstrPropName,varProperty);
	}
	if (NULL != psa)
		SafeArrayDestroy(psa);
	return S_OK;
}
main()
{
	CoInitialize(NULL);
	{
		HRESULT hr = S_OK;
		CComPtr<IWbemLocator> spLoc;
		hr = spLoc.CoCreateInstance(CLSID_WbemLocator);
		CComBSTR bstrNamespace("\\\\.\\root\\CIMV2");
		CComPtr<IWbemServices> spServices;
		hr = spLoc->ConnectServer(bstrNamespace, NULL, NULL, 0,
			NULL, 0, 0, &spServices);
		hr = CoSetProxyBlanket(spServices, RPC_C_AUTHN_DEFAULT,
			RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL,
			RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
		{
			CComPtr<IEnumWbemClassObject> spEnumInst;
			hr = spServices->CreateInstanceEnum(CComBSTR("Win32_NetworkAdapterConfiguration"),
				WBEM_FLAG_SHALLOW, NULL, &spEnumInst);
			bool bFinished = false;
			while (!bFinished)
			{
				ULONG uNumOfInstances = 0;
				CComPtr<IWbemClassObject> spInstance;
				HRESULT hrNext = spEnumInst->Next(10000, 1, &spInstance,
					&uNumOfInstances);
				if (hrNext == WBEM_S_FALSE)
					bFinished = true;
				else if (hrNext == WBEM_S_NO_ERROR)
				{
					PrintObject(spInstance);
				}
			}
		}
	}
	std::cout<< "finished "<<std::endl;
	CoUninitialize();
	   system("pause");
	   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -