1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
function CreateProcessWithLogonW(
lpUsername : PWideChar;
lpDomain : PWideChar;
lpPassword : PWideChar;
dwLogonFlags : DWORD;
lpApplicationName : PWideChar;
lpCommandLine : PWideChar;
dwCreationFlags : DWORD;
lpEnvironment : Pointer;
lpCurrentDirectory : PWideChar;
Const lpStartupInfo : TStartupInfo;
Var lpProcessInfo : TProcessInformation):Bool;stdcall;external 'advapi32.dll';
const
LOGON_WITH_PROFILE = 1;
LOGON_NETCREDENTIALS_ONLY = 2;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure runas(sUser, sDomain, sPassword, sExecutable : PWideChar);
var
wUsername, wDomain, wPassword, wApplicationName: PWideChar;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
wUsername := sUser ;
wDomain := sDomain;
wPassword := Spassword;
wApplicationName := PWideChar(sExecutable) ;
FillChar(StartupInfo, SizeOf(StartupInfo), 0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_SHOWNORMAL;
if not CreateProcessWithLogonW(wUsername,nil,wPassword,1,
wApplicationName,nil,CREATE_DEFAULT_ERROR_MODE,
nil,nil,StartupInfo,ProcessInfo) then
RaiseLastOSError; //En cas d'erreur, donne des détails sur l'erreur
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
runas('Administrateur','','1234','c:\windows\notepad.exe');
end; |
Partager