打算自己开发的系统可以直接利用windows的域用户来登录。原来打算把域用户的帐号和密码直接写入自己的数据库表,但估计这样不行,所以想请教大侠有没有其他的方式。或者是有没有函数可以告诉我们当前的登录用户是否是windows的域用户?
同时可以获取域中的用户列表。
我们通过判断当前的登录用户是否是域用户来验证用户是否有权限来登录我们自己的系统,多谢!

解决方案 »

  1.   

    BOOL LogonUser(    LPTSTR lpszUsername, // string that specifies the user name
        LPTSTR lpszDomain, // string that specifies the domain or server
        LPTSTR lpszPassword, // string that specifies the password
        DWORD dwLogonType, // specifies the type of logon operation
        DWORD dwLogonProvider, // specifies the logon provider
        PHANDLE phToken // pointer to variable to receive token handle
       );
      

  2.   

    应该有相应的API,一时想不起来
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;
    type
      USER_INFO_1 = record
        usri1_name: LPWSTR;
        usri1_password: LPWSTR;
        usri1_password_age: DWORD;
        usri1_priv: DWORD;
        usri1_home_dir: LPWSTR;
        usri1_comment: LPWSTR;
        usri1_flags: DWORD;
        usri1_script_path: LPWSTR;
      end;
      lpUSER_INFO_1 = ^USER_INFO_1;  function NetUserEnum(ServerName: PWideChar;Level,Filter: DWord;
                           var Buffer: Pointer; PrefMaxLen: DWord;
                           var EntriesRead,TotalEntries,
                           ResumeHandle:DWord):LongWord;
                           stdcall; external 'netapi32.dll';  function NetApiBufferFree(pBuffer: PByte):LongInt;
                                                stdcall; external 'netapi32.dll';type
      TForm1 = class(TForm)
        btnRefresh: TButton;
        ListView1: TListView;
        procedure btnRefreshClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnRefreshClick(Sender: TObject);
    var
      EntiesRead: DWORD;
      TotalEntries: DWORD;
      UserInfo: lpUSER_INFO_1;
      lpBuffer: Pointer;
      ResumeHandle: DWord;
      Counter: Integer;
      NetApiStatus: LongWord;
      TempListItem:TListItem;
    begin
      self.ListView1.Items.Clear;
      ResumeHandle := 0;
      repeat
        NetApiStatus:=NetUserEnum(nil,1,0,lpBuffer,0,EntiesRead,
                                  TotalEntries,ResumeHandle);
        UserInfo := lpBuffer;
        for Counter := 0 to EntiesRead - 1 do
        begin
          TempListItem:=self.ListView1.Items.Add;
          TempListItem.Caption:=WideCharToString(UserInfo^.usri1_name);
          TempListItem.SubItems.Add(WideCharToString(UserInfo^.usri1_comment));
          Inc(UserInfo);
        end;    NetApiBufferFree(lpBuffer);
      until (NetApiStatus<>ERROR_MORE_DATA);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
        TempListColumn:TListColumn;
    begin
        self.ListView1.ViewStyle:=vsReport;
        self.ListView1.GridLines:=true;
        TempListColumn:=self.ListView1.Columns.Add;
        TempListColumn.Caption:='名称';
        TempListColumn:=self.ListView1.Columns.Add;
        TempListColumn.Caption:='描述';
    end;end.
      

  4.   

    先谢谢大家,我试试先!^_^bow!!!!来完了也不要紧的呵呵