以一定权限运行程序

2008/8/23 来源:www.arpun.com 作者:小白

在操作系统中每个程序的运行都有自己的特定权限, 权限越大, 它能做的事就越多。

我们可以通过以下代码指定权限运行程序:

type 

  _STARTUPINFOW = record 

    cb: DWORD;

    lpReserved: LPWSTR;

    lpDesktop: LPWSTR;

    lpTitle: LPWSTR;

    dwX: DWORD;

    dwY: DWORD;

    dwXSize: DWORD;

    dwYSize: DWORD;

    dwXCountChars: DWORD;

    dwYCountChars: DWORD;

    dwFillAttribute: DWORD;

    dwFlags: DWORD;

    wShowWindow: Word;

    cbReserved2: Word;

    lpReserved2: PByte;

    hStdInput: THandle;

    hStdOutput: THandle;

    hStdError: THandle;

  end;

  STARTUPINFOW = _STARTUPINFOW;

function CreateProcessWithLogonW(lpUserName, lpDomain, lpPassword: LPCWSTR;

  dwLogonFlags: DWORD; lpApplicationName: LPCWSTR; lpCommandLine: LPWSTR;

  dwCreationFlags: DWORD; lpEnvironment: Pointer; lpCurrentDirectory: LPCWSTR;

  const lpStartupInf STARTUPINFOW; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;

  external advapi32 Name 'CreateProcessWithLogonW'

procedure TForm1.Button2Click(Sender: TObject);

var

  STARTUPINF StartupInfoW;

  ProcessInf TProcessInformation;

  AUser, ADomain, APass, AExe: WideString;

const

  LOGON_WITH_PROFILE = $00000001;

  LOGON_NETCREDENTIALS_ONLY = $00000002;

begin

  FillChar(STARTUPINFO, SizeOf(StartupInfoW), #0);

  STARTUPINFO.cb := SizeOf(StartupInfoW);

  STARTUPINFO.dwFlags := STARTF_USESHOWWINDOW;

  STARTUPINFO.wShowWindow := SW_SHOW;

  AUser := edtUser.Text;

  ADomain := edtDomain.Text;

  APass := edtPass.Text;

  AExe := edtExe.Text;

  if not CreateProcessWithLogonW(PWideChar(AUser), PWideChar(ADomain),

    PWideChar(APass),

    LOGON_WITH_PROFILE, nil, PWideChar(AExe),

    NORMAL_PRIORITY_CLASS, nil, nil, STARTUPINFO, ProcessInfo) then

    RaiseLastOSError;

end; 

 

联盟整理: https://www.arpun.com

网友评论
评论(...
全部评论