Commit b657c6e8 authored by captainwong's avatar captainwong

update device unique identifire

parent bef40403
...@@ -29,8 +29,6 @@ typedef std::function<void(const std::wstring&, const std::wstring&)> OutputFunc ...@@ -29,8 +29,6 @@ typedef std::function<void(const std::wstring&, const std::wstring&)> OutputFunc
class WmiBase class WmiBase
{ {
public: public:
WmiBase(const std::wstring& _namespace, OutputFunc outputFunc, ErrorFunc errorFunc = nullptr) WmiBase(const std::wstring& _namespace, OutputFunc outputFunc, ErrorFunc errorFunc = nullptr)
: namespace_(_namespace) : namespace_(_namespace)
, outputFunc_(outputFunc) , outputFunc_(outputFunc)
...@@ -100,7 +98,65 @@ public: ...@@ -100,7 +98,65 @@ public:
} while (0); } while (0);
return hr; return !FAILED(hr);
}
protected:
bool initCom(HRESULT& hr) {
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (FAILED(hr)) {
if (hr == 0x80010106) {
// already initilized, pass
} else {
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (FAILED(hr)) {
return false;
}
}
}
return true;
}
HRESULT setComSecurityLevel() {
return CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL
);
}
HRESULT obtainWbemLocator(CComPtr<IWbemLocator>& locator) {
return CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID*)& locator
);
}
HRESULT connect(CComPtr<IWbemLocator> locator, CComPtr<IWbemServices>& services) {
return locator->ConnectServer(CComBSTR(namespace_.data()),
NULL, NULL, NULL, 0, NULL, NULL, &services);
}
HRESULT setProxySecurityLevel(CComPtr<IWbemServices> services) {
return CoSetProxyBlanket(
services, // 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
);
} }
HRESULT parseIWbemClassObject(CComPtr<IWbemClassObject> object) { HRESULT parseIWbemClassObject(CComPtr<IWbemClassObject> object) {
...@@ -145,7 +201,7 @@ public: ...@@ -145,7 +201,7 @@ public:
switch (value.vt) { switch (value.vt) {
case VT_BSTR: case VT_BSTR:
Value = value.bstrVal; Value = value.bstrVal;
break; break;
case VT_I1: case VT_I1:
...@@ -201,65 +257,6 @@ public: ...@@ -201,65 +257,6 @@ public:
return WBEM_S_NO_ERROR; return WBEM_S_NO_ERROR;
} }
protected:
bool initCom(HRESULT& hr) {
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (FAILED(hr)) {
if (hr == 0x80010106) {
// already initilized, pass
} else {
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (FAILED(hr)) {
return false;
}
}
}
return true;
}
HRESULT setComSecurityLevel() {
return CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL
);
}
HRESULT obtainWbemLocator(CComPtr<IWbemLocator>& locator) {
return CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID*)& locator
);
}
HRESULT connect(CComPtr<IWbemLocator> locator, CComPtr<IWbemServices>& services) {
return locator->ConnectServer(CComBSTR(namespace_.data()),
NULL, NULL, NULL, 0, NULL, NULL, &services);
}
HRESULT setProxySecurityLevel(CComPtr<IWbemServices> services) {
return CoSetProxyBlanket(
services, // 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
);
}
protected: protected:
std::wstring namespace_ = {}; std::wstring namespace_ = {};
CComPtr<IWbemServices> services_ = {}; CComPtr<IWbemServices> services_ = {};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment