C++ builder 通过WMI查询网卡对应的序号
来源:互联网 发布:excel2007数据分析 编辑:程序博客网 时间:2024/06/13 11:45
#pragma hdrstop
#include <wbemcli.h>
#include <comdef.h>
#include <vcl.h>
using namespace std;
#pragma argsused
int getAdapterIndex(String adapterName) {
int adapterIndex = -1;
BSTR resPath = L"root\\cimv2";
// Initialize COM
HRESULT hres;
// hres = CoInitializeEx(0, COINIT_MULTITHREADED);
// if (FAILED(hres)) {
// return 1;
// }
// Set general COM security levels
hres = CoInitializeSecurity(NULL, -1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
if (FAILED(hres)) {
CoUninitialize();
return 1; // Program has failed.
}
// Obtain the initial locator to WMI
IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &pLoc);
if (FAILED(hres)) {
CoUninitialize();
return 1;
}
// Connect to WMI through the IWbemLocator::ConnectServer method
IWbemServices *pSvc = NULL;
hres = pLoc->ConnectServer(resPath, // Object path of WMI namespace
NULL, // User name. NULL = current user
NULL, // User password. NULL = current
0, // Locale. NULL indicates current
NULL, // Security flags.
0, // Authority (e.g. Kerberos)
0, // Context object
&pSvc // pointer to IWbemServices proxy
);
if (FAILED(hres)) {
pLoc->Release();
CoUninitialize();
return 1;
}
// Set security levels on the proxy -------------------------
hres = CoSetProxyBlanket(pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres)) {
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
// Use the IWbemServices pointer to make requests of WMI
IEnumWbemClassObject* pEnumerator = NULL;
String queryStr = L"Select * from Win32_NetworkAdapterConfiguration where settingid='"+adapterName+"'";
hres =
pSvc->ExecQuery(
L"WQL",
queryStr.w_str(),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL,
&pEnumerator);
if (FAILED(hres)) {
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
// Get the data from the WQL sentence
IWbemClassObject *pclsObj = NULL;
ULONG uReturn = 0;
while (pEnumerator) {
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (0 == uReturn || FAILED(hr))
break;
VARIANT vtProp;
hr = pclsObj->Get(L"Index", 0, &vtProp, 0, 0);
if (!FAILED(hr)) {
adapterIndex = vtProp.iVal; //Get Adapter Index
}
VariantClear(&vtProp);
pclsObj->Release();
pclsObj = NULL;
}
// Cleanup
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
if (pclsObj != NULL)
pclsObj->Release();
CoUninitialize();
return adapterIndex;
}
int main(int argc, char* argv[]) {
int adapterIndex = getAdapterIndex("{4341FA83-5918-46D8-BF43-6C96A0954D3E}");
}
#include <wbemcli.h>
#include <comdef.h>
#include <vcl.h>
using namespace std;
#pragma argsused
int getAdapterIndex(String adapterName) {
int adapterIndex = -1;
BSTR resPath = L"root\\cimv2";
// Initialize COM
HRESULT hres;
// hres = CoInitializeEx(0, COINIT_MULTITHREADED);
// if (FAILED(hres)) {
// return 1;
// }
// Set general COM security levels
hres = CoInitializeSecurity(NULL, -1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
if (FAILED(hres)) {
CoUninitialize();
return 1; // Program has failed.
}
// Obtain the initial locator to WMI
IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &pLoc);
if (FAILED(hres)) {
CoUninitialize();
return 1;
}
// Connect to WMI through the IWbemLocator::ConnectServer method
IWbemServices *pSvc = NULL;
hres = pLoc->ConnectServer(resPath, // Object path of WMI namespace
NULL, // User name. NULL = current user
NULL, // User password. NULL = current
0, // Locale. NULL indicates current
NULL, // Security flags.
0, // Authority (e.g. Kerberos)
0, // Context object
&pSvc // pointer to IWbemServices proxy
);
if (FAILED(hres)) {
pLoc->Release();
CoUninitialize();
return 1;
}
// Set security levels on the proxy -------------------------
hres = CoSetProxyBlanket(pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres)) {
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
// Use the IWbemServices pointer to make requests of WMI
IEnumWbemClassObject* pEnumerator = NULL;
String queryStr = L"Select * from Win32_NetworkAdapterConfiguration where settingid='"+adapterName+"'";
hres =
pSvc->ExecQuery(
L"WQL",
queryStr.w_str(),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL,
&pEnumerator);
if (FAILED(hres)) {
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;
}
// Get the data from the WQL sentence
IWbemClassObject *pclsObj = NULL;
ULONG uReturn = 0;
while (pEnumerator) {
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (0 == uReturn || FAILED(hr))
break;
VARIANT vtProp;
hr = pclsObj->Get(L"Index", 0, &vtProp, 0, 0);
if (!FAILED(hr)) {
adapterIndex = vtProp.iVal; //Get Adapter Index
}
VariantClear(&vtProp);
pclsObj->Release();
pclsObj = NULL;
}
// Cleanup
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
if (pclsObj != NULL)
pclsObj->Release();
CoUninitialize();
return adapterIndex;
}
int main(int argc, char* argv[]) {
int adapterIndex = getAdapterIndex("{4341FA83-5918-46D8-BF43-6C96A0954D3E}");
}
- C++ builder 通过WMI查询网卡对应的序号
- window下c语言通过WMI获得网卡MAC地址,硬盘序号,主板序号等硬件信息
- 通过WMI获得网卡MAC地址,硬盘序号,主板序号等硬件信息
- 通过 WMI 改变网卡的IP地址 ChangeIP.vbs
- C++ Builder 通过 WMI 获取系统信息
- C++ builder 通过WMI方式修改DNS
- 【WMI】WMI For C++/COM 查询信息
- 通过WMI获得硬盘Id和CPU的物理序列号网卡的Mac地址
- MASM32编程通过WMI获取BIOS、主板、硬盘、CPU、网卡的信息
- 汇编语言通过WMI获取BIOS、主板、硬盘、CPU、网卡的信息
- C/C++通过WMI和系统API函数获取获取系统硬件(cpu,内存,显卡,网卡)配置信息
- C/C++通过WMI和系统API函数获取获取系统硬件(cpu,内存,显卡,网卡)配置信息
- C/C++通过WMI和系统API函数获取获取系统硬件(cpu,内存,显卡,网卡)配置信息
- 通过WMI本地和远程监视网卡流量
- 【WMI-3】WMI For C++/COM 查询信息
- 找出给定字符串对应的序号...
- mysql报错序号对应的错误
- C# Tips: 通过WMI查询当前操作系统是64位的还是32位的
- c/c++解析lua配置文件
- C++ 中我们通过定义类来定义自己的数据结构
- POJ1306:Combinations
- uboot烧写到nor flash 上--实验
- Android TabHost用法详解
- C++ builder 通过WMI查询网卡对应的序号
- 【转】非常道-中小软件公司项目管理
- 关于error LNK2019
- C# Sharp FFmpeg
- 赢在数据(R+Hadoop)群电子刊物《数据赢家》第三期出炉
- Hibernate.cfg.xml配置Hibernate连接数据库和对应的数据表
- 浏览器是怎样工作的:渲染引擎,HTML解析
- syslog
- JAVA 基本数据类型对象包装类新特性