在系统内以其它用户权限执行程序

本文介绍如何使用Delphi的CreateProcessWithLogon函数,以特定用户身份启动应用程序,展示了从设置用户名、密码到调用API的具体步骤,适用于需要在不同用户权限下运行程序的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1unit main;
 2
 3interface
 4
 5uses
 6  Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
 7  Dialogs,StdCtrls;
 8const   
 9  LOGON_WITH_PROFILE   =   1;
10  LOGON_NETCREDENTIALS_ONLY   =   2;   
11  function   CreateProcessWithLogon(lpUsername:   PWChar;lpDomain:   PWChar;lpPassword:   PWChar;dwLogonFlags:   DWORD;lpApplicationName:   PWChar;lpCommandLine:   PWChar;dwCreationFlags:   DWORD;lpEnvironment:   Pointer;lpCurrentDirectory:   PWChar;const   lpStartupInfo:   TStartupInfo;var   lpProcessInfo:   TProcessInformation):BOOL;stdcall;
12
13type
14  TForm1 = class(TForm)
15    Button1: TButton;
16    procedure Button1Click(Sender: TObject);
17  private
18    { Private declarations }
19  public
20    { Public declarations }
21  end;
22
23var
24  Form1: TForm1;
25
26implementation
27
28{$R *.dfm}
29function   CreateProcessWithLogon;external advapi32 name 'CreateProcessWithLogonW';
30procedure   TForm1.Button1Click(Sender:   TObject);
31var
32  wUsername,wDomain,wPassword,wApplicationName:WideString;
33  pwUsername,pwDomain,pwPassword,pwApplicationName:PWideChar;
34  StartupInfo:TStartupInfo;
35  ProcessInfo:TProcessInformation;
36begin
37  wUsername:='administrtor  ';
38  wDomain:='';
39  wPassword:='wskitxgurhkpgf';
40  wApplicationName:='cmd.exe';
41  pwUsername:=Addr(wUsername[1]);
42  pwDomain:=Addr(wDomain[1]);
43  pwPassword:=Addr(wPassword[1]);
44  pwApplicationName:=Addr(wApplicationName[1]);
45      
46  FillChar(StartupInfo,   SizeOf(TStartupInfo),   0);
47  StartupInfo.cb   :=   SizeOf(TStartupInfo);
48  if not CreateProcessWithLogon(pwUsername,pwDomain,pwPassword,LOGON_WITH_PROFILE,pwApplicationName,nil,CREATE_DEFAULT_ERROR_MODE,nil,nil,StartupInfo,ProcessInfo) then
49    RaiseLastOSError;
50end;
51
52end.
53

转载于:https://www.cnblogs.com/zhaoyong/archive/2009/07/03/1516003.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值