Здравствуйте 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 почти не сталкивался.