Guest User

Untitled

a guest
Feb 2nd, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. program RunButAs;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8. Windows,
  9. SysUtils;
  10.  
  11. var
  12. User, Password, Params : WideString;
  13. sUser, sPassword : string;
  14.  
  15. function CreateProcessWithLogonW(
  16. lpUsername : LPCWSTR;
  17. lpDomain : LPCWSTR;
  18. lpPassword : LPCWSTR;
  19. dwLogonFlags : DWORD;
  20. lpApplicationName : LPCWSTR;
  21. lpCommandLine : LPWSTR;
  22. dwCreationFlags : DWORD;
  23. lpEnvironment : pointer;
  24. lpCurrentDirectory : LPCWSTR;
  25. var lpStartupInfo : TStartupInfoW;
  26. var lpProcessInfo : TProcessInformation
  27. ) : boolean; stdcall; external 'Advapi32.dll';
  28.  
  29. procedure ShowHelp;
  30. begin
  31. writeln('Run an application under a specific user account');
  32. writeln('Copyright (c) 2009, Serhiy Perevoznyk');
  33. writeln;
  34. writeln('Usage : ' + ExtractFileName(ParamStr(0)) + ' <user name=""> [<password>] <command line="">');
  35. halt(1);
  36. end;
  37.  
  38. const LOGON_WITH_PROFILE = 1;
  39.  
  40. var
  41. si : TStartupInfoW;
  42. pi : TProcessInformation;
  43. hUserToken: THandle;
  44. begin
  45. try
  46. if ParamCount < 2 then
  47. ShowHelp;
  48.  
  49. if ParamCount = 2 then
  50. begin
  51. user := ParamStr(1);
  52. suser := ParamStr(1);
  53. Password := '';
  54. sPassword := '';
  55. Params := ParamStr(2);
  56. end
  57. else
  58. if ParamCount = 3 then
  59. begin
  60. user := ParamStr(1);
  61. Password := ParamStr(2);
  62. suser := ParamStr(1);
  63. sPassword := ParamStr(2);
  64. Params := ParamStr(3);
  65. end
  66. else
  67. ShowHelp;
  68.  
  69. FillChar(si, sizeof(si), 0);
  70. FillChar(pi, sizeof(pi), 0);
  71.  
  72. if not LogonUser(PChar(suser), nil, PChar(spassword),
  73. LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hUserToken) then
  74. begin
  75. writeln('Wrong user name or password');
  76. halt;
  77. end;
  78.  
  79. CreateProcessWithLogonW(PWideChar(user), nil, PWideChar(password), LOGON_WITH_PROFILE,
  80. nil, PWideChar(Params), CREATE_UNICODE_ENVIRONMENT, nil, nil, si, pi);
  81.  
  82. except
  83. on E:Exception do
  84. Writeln(E.Classname, ': ', E.Message);
  85. end;
  86. end.
Add Comment
Please, Sign In to add comment