安全运行程序(用其他帐户运行程序)

自动向系统添加123用户,密码123,属于users组,支持拖放可以从资源管理器拖放文件到文本框,也可以通过浏览按钮选择要运行的文件,单击"运行",在帐户123运行指定程序
作者JJony   E-Mail:jzj_jony@126.com


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,jwawintype,JwaWinBase, StdCtrls,ComCtrls,ShellAPI, cmpNetGroup,
  cmpNetUser;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    Label1: TLabel;
    Label2: TLabel;
    NetUser1: TNetUser;
    NetLocalGroup1: TNetLocalGroup;
    NetLocalGroup2: TNetLocalGroup;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure  WMDropFiles(var  Msg:  TWMDropFiles);  message  WM_DROPFILES; 
procedure  AppOnMessage(var  Msg:  TMsg;  var  Handled:  Boolean);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Function IsAdmin:boolean;//判断当前用户是否为administrators组用户
var
strl:tstringlist;
i:integer;
username:array[0..MAX_PATH] of char;
userl:cardinal;
begin
result:=false;
userl:=sizeof(username);
getusername(@username,userl);
strl:=tstringlist.Create;
try
 form1.NetLocalGroup2.GetMembers(strl);
 for i:=0 to strl.Count-1 do
  begin
  if lowercase(strl[i])=lowercase(strpas(username)) then
   begin
    result:=true;
    exit;
   end;
  end;
finally
strl.Free;
end;
end;

 

function CheckPlatformAdmin: boolean;//判断是否运行于WinNT以上系统的管理员级帐户下
begin
if (Win32Platform = VER_PLATFORM_WIN32_NT) and IsAdmin then
 result:=true
else
 result:=false;
end;
procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);//消息转换
var 
WMD:  TWMDropFiles; 
begin 
if  Msg.message  =  WM_DROPFILES  then 
begin 
// MessageBeep(0); 
WMD.Msg  :=  Msg.message; 
WMD.Drop  :=  Msg.wParam; 
WMD.Unused  :=  Msg.lParam; 
WMD.Result  :=  0; 
WMDropFiles(WMD); 
Handled  :=  TRUE; 
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  si: StartupInfoW;
  pif: PROCESS_INFORMATION;
  res: Bool;
  str:string;
  spath:array[0..MAX_PATH] of widechar;
begin
str:=edit1.Text;
if not fileexists(str) then exit;
stringtowidechar(str,@spath,sizeof(spath));
  si.cb := SizeOf(startupinfoW);                            //填充StartupInfoW结构
  si.dwFlags  := STARTF_USESHOWWINDOW;
  si.wShowWindow := SW_SHOWDEFAULT;
  si.lpReserved := nil;
  si.lpDesktop := nil;
  si.lpTitle := 'JJony';
  res := CreateProcessWithLogonW('123', 'JZJ', '123', LOGON_WITH_PROFILE,//以123帐户运行程序
    @spath, nil
    , CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif);
  if booltostr(res) = '0' then
  begin
    showmessage('运行出错,请与作者联系'+#13#10+'E-Mail:jzj_jony@126.com');//运行失败提示
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
 edit1.Text:=OpenDialog1.FileName;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
slist:tstringlist;
i:integer;
u123:boolean;
begin
if not CheckPlatformAdmin then
begin
 showmessage('对不起!本程序只能运行于WinNT以上系统的管理员级帐户下,点[确定]关闭程序');
 application.Terminate;
end;
u123:=false;
slist:=tstringlist.Create;
try
NetLocalGroup1.GetMembers(slist);//判断123帐户时候存在,不存在就添加
for i:=0 to slist.Count-1 do
  if slist[i]='123' then
   u123:=true;
if u123=false then
 begin
  NetUser1.CreateAccount('程序运行测试环境帐户','123');
  NetLocalGroup1.AddMember('123');
 end;
finally
slist.Clear;
slist.Free;
end;
DragAcceptFiles(edit1.Handle,True);//程序接受拖拽
Application.OnMessage  :=  AppOnMessage;
end;

procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);//处理拖拽消息
var
buffer:  array[0..MAX_PATH]  of  Char;
begin
with  Msg  do 
begin
DragQueryFile(Drop,0,  Buffer,  sizeof(buffer));//取得拖拽的第一个文件名
edit1.Text:=StrPas(Buffer);
DragFinish(Drop); 
end; 
 


end;

end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值