SID, security ID / 安全 ID
标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。Windows 2000 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名。如果创建帐户,再删除帐户,然后使用相同的用户名创建另一个帐户,则新帐户将不具有授权给前一个帐户的权力或权限,原因是该帐户具有不同的 SID 号。安全标识符也被称为安全 ID 或 SID。
保存以下文件为whoami.c,编译看看。:)
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//Use function ConvertSidToStringSid Need to define version 5 for Windows 2000
#define _WIN32_WINNT 0x0500
#include <sddl.h>
int main(int argc,char **argv)
{
TCHAR szUserName[256];
DWORD dwSize2=256,cbSID = 1024,cchDomainName = 80;
int ret;
PSID pSID;
LPSTR lpszDomain,StringSid;
PSID_NAME_USE psnuType;
if(argc!=1)
{
printf("/nPower by eyas<eyas@patching.net>"
"/n2001.2.23/n");
}
ret=GetUserName(szUserName,&dwSize2);
if(ret==0)
{
printf("/nGetUserName failed.ErrorCode:%d.",GetLastError());
}
pSID = (PSID) LocalAlloc(LPTR, cbSID);
lpszDomain = (LPSTR) LocalAlloc(LPTR, cchDomainName);
psnuType = (PSID_NAME_USE) LocalAlloc(LPTR, 1024);
ret=LookupAccountName((LPSTR)NULL,szUserName,pSID,&cbSID,lpszDomain,&cchDomainName,psnuType);
if(ret!=0)
{
StringSid=(LPSTR) LocalAlloc(LPTR, 1024);
ret=ConvertSidToStringSid(pSID,&StringSid);
printf("/n%s//%s",lpszDomain,szUserName);
printf("/nSID:%s/n",StringSid);
LocalFree((HLOCAL)StringSid);
}
else
{
printf("/nLookupAccountName failed.ErrorCode:%d.",GetLastError());
}
FreeSid(pSID);
if(psnuType != NULL)
LocalFree((HLOCAL) psnuType);
if(lpszDomain != NULL)
LocalFree((HLOCAL) lpszDomain);
return 0;
}
如何获得当前线程的用户名和此用户的SID
最新推荐文章于 2023-10-30 22:51:06 发布
本文介绍了一个简单的C程序,用于获取当前用户的SID(安全标识符)及其对应的用户名和域名。程序利用了Windows API函数,如GetUserName、LookupAccountName及ConvertSidToStringSid等,展示了如何在Windows环境下获取这些信息。
3673

被折叠的 条评论
为什么被折叠?



