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-06-15 18:17:31 发布