Re[2]: Запуск Outlook Express из сервиса (Win2000).
От: Аноним  
Дата: 05.02.02 04:23
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Надо каким-то образом заполучить токен текущего пользователя. Это можно сделать:

AF>1) перечислив процессы и взяв токен, скажем, еxplorer.exe (более точно — процесса оболочки, зарегистрированного в системе), либо

Я решил попробовать первый способ так как кажется он проще (пробовал в Delphi):

procedure TForm1.Button1Click(Sender: TObject);
var
    ProcessId: Integer;
    hWindow, hProcess, TokenHandle: THandle;
    si: Tstartupinfo;
    p: Tprocessinformation;
begin
    hWindow := FindWindow('Progman', 'Program Manager');
    GetWindowThreadProcessID(hWindow, @ProcessID);
    hProcess := OpenProcess (PROCESS_ALL_ACCESS, FALSE, ProcessID);
    OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, TokenHandle) then begin

    FillChar(si,SizeOf(si),0);
    with Si do begin
        cb := SizeOf( Si);
        dwFlags := startf_UseShowWindow;
        wShowWindow := SW_NORMAL;
        lpDesktop := PChar ('winsta0\default');
    end;

    CreateProcessAsUser(TokenHandle, nil,
        'C:\Program Files\Outlook Express\msimn.exe',
        nil, nil, false, Create_default_error_mode, nil, nil, si, p);
end;


Вроде окно находит, дескриптор процесса получает, OpenProcessToken тоже без ошибок.
А при выполнении CreateProcessAsUser возникает ошибка 1314 (отказано в доступе ?).
Что я забыл сделать ?


P.S. :shuffle: Заранее изивиняюсь, если вопрос детский, я раньше с WinApi почти не сталкивался.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.