win32 - 使用LookupAccountName查找SID


可以使用LookupAccountNameA獲取sid。

LookupAccountName函數接受系統名稱和帳戶作為輸入。它檢索該帳戶的安全標識符(SID)以及在其上找到該帳戶的域的名稱。

使用此api無需在LocalSystem帳戶的上下文中運行

代碼示例:(C ++)

#include <Windows.h>
#include <Sddl.h>

#include <stdio.h>

int main(int argc, char** argv)
{
    LPCTSTR wszAccName = TEXT("domainname\\username");
    LPTSTR wszDomainName = (LPTSTR)GlobalAlloc(GPTR, sizeof(TCHAR) * 1024);
    DWORD cchDomainName = 1024;
    SID_NAME_USE eSidType;
    LPTSTR sidstring;
    char sid_buffer[1024];
    DWORD cbSid = 1024;
    SID* sid = (SID*)sid_buffer;

    if (!LookupAccountName(NULL, wszAccName, sid_buffer, &cbSid, wszDomainName, &cchDomainName, &eSidType)) {
        return GetLastError();
    }

    if (!ConvertSidToStringSid(sid, &sidstring)) {
        return GetLastError();
    }

    printf("%ws\n", sidstring);
    return 0;

}

另一種方法,使用WTSQueryUserToken ...

獲取會話ID指定的登錄用戶的主要訪問令牌。要成功調用此函數,調用應用程序必須在LocalSystem帳戶的上下文中運行並且具有SE_TCB_NAME特權。

首先使用WTSenumerateSessions進行枚舉,然后比較用戶名並獲取相應的SessionId,然后調用WTSQueryUserToken以獲取令牌,然后使用GetTokenInformation來獲取sid。

相關:如何在C ++中利用我的服務獲取用戶的SID和用戶名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM