Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2010, 11:10   #1
m.a.x.i.m
Пользователь
 
Регистрация: 29.03.2008
Сообщений: 32
По умолчанию запустить программу от пользователя SYSTEM

вот нашел готовый пример:

Код:
function GetOSVersion: Cardinal;
var
  OSVersionInfo: TOSVersionInfo;
begin
  Result:= 0;
  FillChar(OSVersionInfo, Sizeof(OSVersionInfo), 0);
  OSVersionInfo.dwOSVersionInfoSize:= SizeOf(OSVersionInfo);
  if GetVersionEx(OSVersionInfo) then
  begin
    if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
      if OSVersionInfo.dwMajorVersion = 5 then
      begin
        if OSVersionInfo.dwMinorVersion = 0 then
          Result:= 50
        else if OSVersionInfo.dwMinorVersion = 2 then
          Result:= 52
        else if OSVersionInfo.dwMinorVersion = 1 then
          Result:= 51
      end;
      if OSVersionInfo.dwMajorVersion = 6 then
      begin
        if OSVersionInfo.dwMinorVersion = 0 then
          Result:= 60
        else if OSVersionInfo.dwMinorVersion = 1 then
          Result:= 61;
      end;
    end;
  end;
end;

function RunAsSystem(ApplicationName: String): Boolean;
var
  lpStartupInfo: TStartupInfo;
  lpProcessInformation: TProcessInformation;
  ppSecurityDescriptor: PPSecurity_Descriptor;
  ppDacl: PACL;
  hProcess, hToken: Cardinal;
begin
  Result:= False;
  if (GetOSVersion > 50) and (GetOSVersion < 60) then
    hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION, False, 4)
  else
    hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION, False, 8);
  if hProcess <> 0 then
  begin
    try
      OpenProcessToken(hProcess, MAXIMUM_ALLOWED, hToken);
      if hToken <> 0 then
      begin
        if GetSecurityInfo(hToken, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @ppDacl, nil, ppSecurityDescriptor) = ERROR_SUCCESS then
        begin
          if SetSecurityInfo(hToken, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, nil, nil) = ERROR_SUCCESS then
          begin
            CloseHandle(hToken);
            OpenProcessToken(hProcess, MAXIMUM_ALLOWED, hToken);
            if hToken <> 0 then
            begin
              try
                if ImpersonateLoggedOnUser(hToken) then
                begin
                  ZeroMemory(@lpStartupInfo, SizeOf(lpStartupInfo));
                  lpStartupInfo.cb:= SizeOf(lpStartupInfo);
                  if CreateProcessAsUser(hToken, PChar(ApplicationName), '', 
                                                 nil, nil, False, CREATE_DEFAULT_ERROR_MODE, 
                                                 nil, nil, lpStartupInfo, lpProcessInformation) then
                    Result:= True;
                  RevertToSelf;
                end;
                SetSecurityInfo(hToken, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, ppDacl, nil);
              finally
                CloseHandle(hToken);
              end;
            end;
          end;
        end;
      end;
    finally
      CloseHandle(hProcess);
    end;
  end;
end;
во вложении полный исходник, все компилится, но при запуске не находит ACLAPI.dll. Поиск ничего не дал, может у кого она имется, проверял на 2 машинах, на обоих не пашет. Может кто еще какой способ запуска программы от SYSTEM знает?
Вложения
Тип файла: zip run-as-system.zip (3.3 Кб, 98 просмотров)

Последний раз редактировалось rpy3uH; 10.10.2010 в 18:09.
m.a.x.i.m вне форума Ответить с цитированием
Старый 08.10.2010, 11:44   #2
m.a.x.i.m
Пользователь
 
Регистрация: 29.03.2008
Сообщений: 32
По умолчанию

нашел причину, все из-за моей 5 делфи, вот решение
m.a.x.i.m вне форума Ответить с цитированием
Старый 18.10.2010, 15:05   #3
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

а мне кажется кто то на етом форуме утверждал что запустить программу от пользователя SYSTEM нереально
legendary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите запустить программу Ellita Помощь студентам 14 21.12.2009 08:05
Запустить прогу пользователем SYSTEM EPaul Общие вопросы Delphi 0 30.09.2009 19:13
Запустить приложение на экране выбора пользователя Alex Cones Операционные системы общие вопросы 3 27.08.2009 10:15
Запустить программу от имени... dr.Chas Win Api 3 21.08.2009 20:20
как запустить программу? GothicMet Помощь студентам 3 04.10.2008 18:07