Windows ユーザー A (管理者権限を持つ) と B (制限されたアクセス権限を持つ) を考えてみましょう。また、ユーザー A のみがアクセスできるサーバー上のデータ フォルダー。
私が直面している課題は、ユーザー B を介して Windows にログインし、ユーザー A の資格情報をプログラムで提供してデータ フォルダーにアクセスしようとする Delphi アプリケーションを介してログインすることです。
この目的を達成できる API 関数はありますか?
Windows ユーザー A (管理者権限を持つ) と B (制限されたアクセス権限を持つ) を考えてみましょう。また、ユーザー A のみがアクセスできるサーバー上のデータ フォルダー。
私が直面している課題は、ユーザー B を介して Windows にログインし、ユーザー A の資格情報をプログラムで提供してデータ フォルダーにアクセスしようとする Delphi アプリケーションを介してログインすることです。
この目的を達成できる API 関数はありますか?
および関数を使用してLogonUser
、ログオンしているユーザーになりすましてデータ フォルダーにアクセスできます。ImpersonateLoggedOnUser
RevertToSelf
このサンプルを試す
{$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.