首页 > 解决方案 > 使用提升的访问令牌运行时,对物理驱动器序列号的 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);

标签: tokenwmi

解决方案


推荐阅读