2013-10-11 28 views
0

當我嘗試使用下面的代碼來獲取用戶名,我已經成功地獲取用戶名:從C++中的SID獲取用戶名失敗?

hres = pSvc->GetObject(L"Win32_SID.SID='S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334'", 0, NULL, &pclsObj, NULL); 

但分配SID爲變量時,按如下

std::string SID = "S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334"; 

hres = pSvc->GetObject(L"Win32_SID.SID=SID", 0, NULL, &pclsObj, NULL); 

然後我得到了以下錯誤:

Connected to root\CIMV2 WMI namespace 
GetObject failed Error code = 0x8004103a 
IDispatch error #3642 

你能否建議我在GetObject方法中正確的輸入。

回答

0

我相信你正在尋找這樣的:

std::wstring SID = L"S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334"; 

hres = pSvc->GetObject((L"Win32_SID.SID='" + SID + L"'").c_str(), 0, NULL, &pclsObj, NULL); 

如果上面的代碼(注意我加了一個被遺忘的呼叫c_str())不適合你,你可以改爲試試這個:

#include <sstream> 

std::wstring SID = L"S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334"; 

std::wostringstream s; 
s << L"Win32_SID.SID='" << SID << L"'"; 

hres = pSvc->GetObject(s.str().c_str(), 0, NULL, &pclsObj, NULL); 

如果仍然不能正常工作,我開始懷疑與編譯器有問題。


你在評論中提到你正在使用的古VC++ 6.0,所以我會嘗試很基本的東西(我假設你的目標是有SID是一個變量):

#include <cwchar> 

std::wstring SID = L"S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334"; 

const wchar_t *prefix = L"Win32_SID.SID='"; 
wchar_t *arg = new wchar_t[wcslen(prefix) + SID.size() + 2]; //2 = terminating ' and NUL 
wcscpy(arg, prefix); 
wcscat(arg, SDI.c_str()); 
wcscat(arg, L"'"); 

hres = pSvc->GetObject(arg, 0, NULL, &pclsObj, NULL); 

delete[] arg; 

請注意,它沒有測試它 - 我無法訪問VC++ 6.0。

+0

當初始化性病的SID :: wstring的,我得到了錯誤錯誤C2440:初始化:不能從轉換「的char [47]」到「類std :: basic_string ,class std :: allocator >' 沒有構造函數可以採用源類型,或構造函數重載解析模糊不清 – user2499879

+0

@ user2499879對不起,我錯過了字符串文字上的'L'前綴。固定。 – Angew

+0

現在我得到了另一個錯誤:錯誤C2679:二進制'+':沒有操作符定義,它需要一個類型的右手操作數'class std :: basic_string ,class std :: allocator >'(或者沒有可接受的轉換) – user2499879

0

在你問屬於字符串「SID」的用戶名行
hres = pSvc->GetObject(L"Win32_SID.SID=SID", 0, NULL, &pclsObj, NULL);
。這是行不通的。 您需要連接「Win32_DID.SID =」和您的SID字符串。另外,你需要給它一個WSTRING:
std::wstring SID = L"S-1-5-82-1036420768-1044797643-1061213386-2937092688-4282445334"; std::wstring query = "Win32_DID.SID='" + SID + "'"; hres = pSvc->GetObject(query, 0, NULL, &pclsObj, NULL);

+0

當我嘗試你的代碼時,我得到了以下錯誤行std :: wstring query =「Win32_DID.SID ='」+ SID +「'」;錯誤C2679:二進制'+':沒有操作符定義,它需要類型'class std :: basic_string ,std :: allocator 類型的右手操作數dl short >'(或者沒有可接受的轉換) – user2499879

+0

像以前一樣 - wstring常量必須以L:'std :: wstring query = L爲前綴「Win32_DID.SID ='」+ SID + L「'」; – Henno

+0

獲取相同的錯誤。 – user2499879

相關問題