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

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;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值