通过提供凭证进行程序化登录

Joh*_*hny 4 delphi delphi-2010 delphi-6

考虑Windows用户A(具有管理权限)和B(受限访问权限).也是位于服务器上的数据文件夹,只有用户A才能访问该数据文件夹.

我面临的挑战是通过用户B登录窗口,并通过我的Delphi应用程序尝试以编程方式提供用户A的凭据来访问数据文件夹.

是否有API功能可以实现这一目标?

RRU*_*RUZ 6

你也可以模拟登录的用户访问数据的文件夹,使用LogonUser,ImpersonateLoggedOnUserRevertToSelf功能.

试试这个样本

{$APPTYPE CONSOLE}

uses
  Windows,
  SysUtils;

function ConnectAs(const lpszUsername, lpszPassword: string): Boolean;
var
  hToken       : THandle;
begin
  Result := LogonUser(PChar(lpszUsername), nil, PChar(lpszPassword), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken);
  if Result then
    Result := ImpersonateLoggedOnUser(hToken)
  else
  RaiseLastOSError;
end;

begin
  try
   ConnectAs('Admin','Password');
   //do something here


   //terminates the impersonation
   RevertToSelf;

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  readln;
end.
Run Code Online (Sandbox Code Playgroud)

  • 这些功能是在XP中引入的. (2认同)