token - 使用提升的访问令牌运行时,对物理驱动器序列号的 WMI 查询返回不同的结果
问题描述
以下代码(VS 2019、x86、winsdk 10.0、工具集 v142)在我的本地机器上返回不同序列号的物理驱动器,有和没有提升的访问令牌。在其他经过测试的机器上不是 100% 的问题。(请忽略不检查 hr)
到目前为止,我已经尝试将提升的 AdjustTokenPrivaleges() 调整为非提升,但这可能是提升本身的问题。
知道如何获得相同的结果吗?
IWbemLocator* pLoc;
IWbemServices* pSvc;
IEnumWbemClassObject* pEnumerator;
IWbemClassObject* pclsObj;
HRESULT hr;
ULONG uReturn;
VARIANT vtProp;
CoInitialize(NULL);
CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc);
pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), // 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 (for example, Kerberos)
0, // Context object
&pSvc); // pointer to IWbemServices proxy
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
const char* query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='\\\\.\\PHYSICALDRIVE0'} WHERE ResultClass=Win32_PhysicalMedia";
pSvc->ExecQuery(bstr_t("WQL"),
bstr_t(query),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
// This differs
char* serial_number = _com_util::ConvertBSTRToString(vtProp.bstrVal);
解决方案
推荐阅读
- python - 为什么我从上一个问题中提取的代码多处理池映射挂起?
- reactjs - 如何将坐标数组传递给 react-map-gl 热图图层?
- javascript - Razor 页面中的最佳实践:使用 AJAX 或处理程序进行发布/获取请求
- python - 如何从列表中删除项目并将其分配给变量?
- ios - 从 Firebase 获取数据的更快方法?
- node.js - graphql-modules 不调用 __resolveType
- java - 二叉树中通用节点的Java数组,无法创建零节点
- oracle - 如果我们在 oracle 中创建表或索引时不添加表空间子句,是否会产生重大影响?
- java - 以可执行的方式为类静态提供元数据
- javascript - 使用正则表达式替换 innerHTML 文本时的性能问题