понедельник, 27 сентября 2010 г.

CreateProcessWithLogon

http://msdn.microsoft.com/en-us/library/aa379608%28v=VS.85%29.aspx

BOOL WINAPI CreateProcessWithLogonW(
__in LPCWSTR lpUsername,
__in_opt LPCWSTR lpDomain,
__in LPCWSTR lpPassword,
__in DWORD dwLogonFlags,
__in_opt LPCWSTR lpApplicationName,
__inout_opt LPWSTR lpCommandLine,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCWSTR lpCurrentDirectory,
__in LPSTARTUPINFOW lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInfo
);

try this

do

{

WCHAR _domain [MAX_COMPUTERNAME_LENGTH + 1];

DWORD l = sizeof _domain;

if (!(_Result = GetComputerNameW (_domain, &l))) break;



LPWSTR

_login = argv[1],

_password = argv[2],

_cmdline = argv[3],

_path = argc > 4 ? argv[4] : NULL;



PROCESS_INFORMATION pi;

_STARTUPINFOW si = { sizeof (_STARTUPINFOW) };



_Result = CreateProcessWithLogonW (_login, _domain, _password,

LOGON_WITH_PROFILE, NULL, _cmdline, NULL, NULL, _path, &si, π);



if (!_Result) break;



CloseHandle (pi.hProcess);

CloseHandle (pi.hThread);

}

while (false);


    procedure TForm1.Button1Click(Sender: TObject);
    var
    hUserToken: THandle;
    UserName, UserDomain, Password:WideString;
    dwLogonType:DWORD;
    begin
    Memo1.Clear;
    UserName:=Edit1.Text;
    UserDomain:=Edit2.Text;
    Password:=Edit3.Text;
    dwLogonType:=LOGON32_LOGON_INTERACTIVE;
    if ComboBox1.Text='LOGON32_LOGON_INTERACTIVE'
    then dwLogonType:=LOGON32_LOGON_INTERACTIVE;
    if ComboBox1.Text='LOGON32_LOGON_NETWORK'
    then dwLogonType:=LOGON32_LOGON_NETWORK;
    if ComboBox1.Text='LOGON32_LOGON_BATCH'
    then dwLogonType:=LOGON32_LOGON_BATCH;
    if ComboBox1.Text='LOGON32_LOGON_SERVICE'
    then dwLogonType:=LOGON32_LOGON_SERVICE;
    if not LogonUserW(PWChar(UserName), PWChar(UserDomain), PWChar(Password),
    dwLogonType, LOGON32_PROVIDER_DEFAULT, hUserToken) then
    begin
    Memo1.Lines.Add(SysErrorMessage(GetLastError));
    end else
    Memo1.Lines.Add(SysErrorMessage(GetLastError));
    CloseHandle(hUserToken);
    end;