Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запуск от имени другого пользователя

54K
23 ноября 2009 года
ober
1 / / 23.11.2009
Доброго времени суток.
Возникла такая проблема. Есть сеть, в которой N-ое количество пользователей. Есть группы к которым эти пользователи принадлежат. Например группа пользователей интернета, общей папки, программы, етц. Программы от имени другого пользователя запускаються нормально, но не все, в чем трабл подскажите. Ниже привожу код.
Код:
function CreateProcessWithLogonW(User: PWideChar;
                                 Domain:PWideChar;
                                 Passw:PWideChar;
                                 Flags: DWORD;
                                 lpApplicationName: PWideChar;
                                 lpCommandLine: PWideChar;
                                 dwCreationFlags: DWORD;
                                 lpEnvironment: Pointer;
                                 lpCurrentDirectory: PWideChar;
                                 const lpStartupInfo: TStartupInfo;
                                 var lpProcessInformation: TProcessInformation): BOOL; stdcall; external 'advapi32.dll' name 'CreateProcessWithLogonW';

function CreateProcessAsLogon(User, Password, Domain, Prog: WideString): Cardinal;
var
  lpStartupInfo: TSTARTUPINFO;
  lpProcessInfo: TPROCESSINFORMATION;
begin
  ZeroMemory(@lpStartupInfo, SizeOf(lpStartupInfo));
  lpStartupInfo.cb := SizeOf(lpStartupInfo);
  lpStartupInfo.lpDesktop := nil;
  CreateProcessWithLogonW(PWideChar(User), PWideChar(Domain), PWideChar(Password), 0, nil, PWideChar(Prog), CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE, nil, nil, lpStartupInfo, lpProcessInfo);
  Result := lpProcessInfo.dwProcessId;
  CloseHandle(lpProcessInfo.hProcess);
end;

procedure Execute;
begin
  if GetSelectedItem <> -1 then
      CreateProcessAsLogon(Account, Password, Domain, StringToWideString(GetText(GetSelectedItem), 0));
end;


Account, Password, Domain имеют тип WideString.

Так вот например, фар, интернет експлорер, кип запускаються нормально, никаких проблем. А вот опера и фаерфокс не стартуют.
Примечательно, что если оперу запустить от имени другого пользователя средствами виндовс, и потом попробовать запустить тем кодом, что я выше написал, то в опере создастся новая вкладка.
В общем направте на путь истинный.

upd:
Сейчас проверил, уже работает %) Но в чем же косяк может быть, почему до этого не запускалось?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог