delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
如何获得所有windows用户的SID Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061110113225259.html
有什么方法可以获得所有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下面就有的

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

posted on 2009-04-08 09:10 delphi2007 阅读(583) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。