2014-07-24 144 views
1

我需要檢查提供的用戶名是VC++中的本地用戶還是域用戶。我認爲LookupAccountName因爲最後一次爭吵會給我所需要的東西。我用它從帳戶名稱中獲取SID,它工作得很好,並給了我正確的SID,但是他不正確SID_NAME_USE。該網站上說:LookupAccountName獲取用戶帳戶類型VC++

peUse [out]:指向SID_NAME_USE枚舉類型的指針,指示函數返回時帳戶的類型。

但是無論我提供什麼類型的用戶(本地用戶或域用戶),peUse總是SidTypeUser。我也嘗試與LookupAccountSid和我得到同樣的事情。以下是我的問題:

  1. 我可以使用LookUpAccountName或LookupAccountSid來獲取正確的帳戶類型嗎?
  2. 爲什麼函數總是返回SidTypeUser作爲用戶類型?
  3. 是否有任何其他方法來檢查用戶是SID或用戶名的域或本地用戶?

請別人幫我,我已經堅持了一會兒。

謝謝!

+0

http://msdn.microsoft.com/en-us/library/aa394061(v=vs.85).aspx有一個LocalAccount屬性 –

+0

「爲什麼函數總是返回SidTypeUser作爲用戶類型?」 - 爲什麼不?如果這是用戶帳戶返回SidTypeUser。嘗試傳遞計算機SID以查看結果。 – user2120666

回答

2

使用LsaQueryInformationPolicyPolicyDnsDomainInformation檢索計算機主域的SID。 (如果Sid成員是NULL,計算機未加入到域。)

否則,使用LookupAccountName檢索SID你有興趣,然後用GetWindowsAccountDomainSid提取用戶的SID的域部分。

使用EqualSid將主域的SID與用戶的域SID進行比較。如果SID相同,則用戶登錄到域帳戶;否則,用戶將登錄到本地帳戶。

+0

謝謝哈利,那就是我需要的。我與你的第二個建議去了,它完美的作品! :) – IHSMQ

+0

很高興知道 - 儘管你對我的第一個建議是什麼感到困惑,但我感到困惑。據我所知,我只給了一個答案。 :-) –

+0

我只是說你的第一部分回答關於LsaQueryInformationPolicy是我以前沒有嘗試的唯一的東西。我不知道爲什麼我這樣說或者爲什麼我說第二(我很興奮......) – IHSMQ