Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1260600
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-04-08 09:22:44



有什么方法可以获得所有windows用户的SID

访问注册表  
 

最好是指针形式的sid

{$EXTERNALSYM   ConvertSidToStringSid}  
  function   ConvertSidToStringSid(Sid:   PSID;   StringSid:   LPTSTR):   BOOL;   stdcall;  
  {$EXTERNALSYM   ConvertSidToStringSidA}  
  function   ConvertSidToStringSidA(Sid:   PSID;   StringSid:   LPTSTR):   BOOL;   stdcall;  
  {$EXTERNALSYM   ConvertSidToStringSidW}  
  function   ConvertSidToStringSidW(Sid:   PSID;   StringSid:   LPTSTR):   BOOL;   stdcall;  
   
  function   ConvertSidToStringSid;   external   advapi32   name   'ConvertSidToStringSidA';  
  function   ConvertSidToStringSidA;   external   advapi32   name   'ConvertSidToStringSidA';  
  function   ConvertSidToStringSidW;   external   advapi32   name   'ConvertSidToStringSidW';  
   
  procedure   TForm1.Button3Click(Sender:   TObject);  
  var  
      cbSid:   DWORD;  
      Sid:   PSID;  
      peUse:   SID_NAME_USE;  
      cbReferencedDomainName:   DWORD;  
      ReferencedDomainName:   PChar;  
      SidStr:   PChar;  
  begin  
      cbSid:=0;  
      cbReferencedDomainName:=0;  
      Sid:=nil;   ReferencedDomainName:=nil;  
      //首次调用取得Size  
      LookupAccountName(nil,   nil,   Sid,   cbSid,   ReferencedDomainName,   cbReferencedDomainName,   peUse);  
   
      if   (cbSid   =   0)   or   (cbReferencedDomainName   =   0)   then  
          Exit;//无效的用户名  
   
      GetMem(Sid,   cbSid);  
      GetMem(ReferencedDomainName,   cbReferencedDomainName);  
      try  
          LookupAccountName(nil,   nil,   Sid,   cbSid,   ReferencedDomainName,   cbReferencedDomainName,   peUse);  
           
          if   ConvertSidToStringSid(Sid,   @SidStr)   then  
              Self.Caption:=ReferencedDomainName   +   '\'   +   SidStr;  
      finally  
          FreeMemory(Sid);  
          FreeMemory(ReferencedDomainName);  
      end;  
  end;  
 

用WMI啊!!想要什么就有什么,从软的到硬的。

获取系统用户SID  
  Select   Name,   SID   From   Win32_SystemAccount  
   
  获取自定义用户SID  
  Select   Name,   SID   From   Win32_UserAccount  
 

或者  
  Select   *   From   Win32_AccountSID

当然是API最好的  
  WMI是简单,但是服务停了就不好用了~  
   
  另外注册表的HKEY_USERS下面就有的

各位兄弟先绕我两天,等我全都试完了再结帖



--------------------------
新闻:FriendFeed 正在踏进 twitter 的领域
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(1454) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~