C++ 本机WMI提供程序中的UINT64不';t返回某些系统上的数据

C++ 本机WMI提供程序中的UINT64不';t返回某些系统上的数据,c++,com,wmi,C++,Com,Wmi,我已经创建了一个本机WMI提供程序。我的课程MOF与此类似: [dynamic, provider("CacheProvider")] class Cache { [key] String Path; uint32 Type; uint64 MaxSize; uint64 Size; boolean Enabled; }; 除uint64值外,所有数据均正确返回。我已经了解到,对于uint64值,您需要实际提供作为BSTR的数据。在我试用过的99

我已经创建了一个本机WMI提供程序。我的课程MOF与此类似:

[dynamic, provider("CacheProvider")]
class Cache
{
    [key]
    String Path;
    uint32 Type;
    uint64 MaxSize;
    uint64 Size;
    boolean Enabled;
};
除uint64值外,所有数据均正确返回。我已经了解到,对于uint64值,您需要实际提供作为BSTR的数据。在我试用过的99%的机器上都能用。我就是这样做到的

v.vt = VT_BSTR;
v.bstrVal = ToLongLongString(MaxSize);
sc = (*pNewInst)->Put(L"MaxSize", 0, &v, 0);
VariantClear(&v);
ToLongLongString
函数如下所示

bstr_t ToLongLongString(LONGLONG llValue)
{
    wchar_t szValue[21];
    SecureZeroMemory(szValue, sizeof(szValue));
    swprintf_s(szValue, L"%lld", llValue);
    bstr_t bstrFormat(szValue);
    return bstrFormat;
}
我已验证此函数返回的字符串格式是否正确。无论出于何种原因,它似乎没有通过WMI系统。我唯一看不到它工作的机器是2012 R2服务器

从这里开始:

注意:在脚本语言(如VBScript)中查询uint64或sint64数据类型的属性值时,WMI返回字符串值。比较这些值时可能会出现意外结果,因为比较字符串会返回与比较数字不同的结果。例如,比较字符串时,“1000000000”小于“9”,比较数字时,9小于1000000000。为避免混淆,从WMI检索uint64或sint64类型的属性时,应在VBScript中使用CDbl方法


您可以尝试使用CDBL吗?

问题是由于我如何分配BSTR造成的

由于ToLongLongString返回一个bstr\u t,因此它将bstr值传递给变量。因为我从未将BSTR与BSTR分离,所以一旦BSTR超出范围,就会释放BSTR


调用Detach修复了这个问题

我试过使用wbemtest和PowerShell。我没有运行任何VBScript。它根本不返回值。WBEM测试报告:\