您的位置:首页 > 其它

如何获得当前线程的用户名和此用户的SID

2008-06-17 15:29 267 查看
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;
 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: