Версия IE и список процессов
От: SaimonW  
Дата: 27.07.07 14:10
Оценка:
Доброе время суток.

Подкскажите, как получить список запущенных процессов и версию Intenet Explorer'a не имея прав администратора?

Для получения версии Internet Explorer'a использую ключ реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer, параметр Version. Но вот беда в том, что если нет прав админа, то доступа сюда нет, т.е. мне возвращается пустая строка.
function GetIEVersion: string;
var 
  Reg: TRegistry; 
begin 
   Reg:= TRegistry.Create;
   try
      Reg.RootKey:= HKEY_LOCAL_MACHINE;
        Reg.OpenKey('Software\Microsoft\Internet Explorer', false);
      try
         Result:= Reg.ReadString('Version');
      except
         Result:= '';
      end;
      Reg.CloseKey;
   finally
      Reg.Free;
   end;
end;



Для получения списка запущенных процессов использую след. код:
procedure GetProcessList(var sl: TStrings);
var
  pe: TProcessEntry32;
  ph, snap: THandle; //дескрипторы процесса и снимка
  mh: hmodule; //дескриптор модуля
  procs: array[0..$FFF] of dword; //массив для хранения дескрипторов процессов
  count, cm: cardinal; //количество процессов
  i: integer;
  ModName: array[0..max_path] of char; //имя модуля
begin
  sl.Clear;
  if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
  begin //если это Win9x
    snap := CreateToolhelp32Snapshot(th32cs_snapprocess, 0);
    if integer(snap) = -1 then
    begin
      exit;
    end
    else
    begin
      pe.dwSize := sizeof(pe);
      if Process32First(snap, pe) then
        repeat
          sl.Add(string(pe.szExeFile));
        until not Process32Next(snap, pe);
    end;
  end
  else
  begin //Если WinNT/2000/XP
    if not EnumProcesses(@procs, sizeof(procs), count) then
    begin
      exit;
    end;
    for i := 0 to count div 4 - 1 do
    begin
      ph := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        false, procs[i]);
      if ph > 0 then
      begin
        EnumProcessModules(ph, @mh, 4, cm);
        GetModuleFileNameEx(ph, mh, ModName, sizeof(ModName));
        sl.Add(string(ModName));
        CloseHandle(ph);
      end;
    end;
  end;
end;

Но опять же, если нет прав админа, то я не могу получить список всех процессов (получаю только процессы запущенные от имени текущего пользователя). Список процессов нужен с полными путями к файлам и всех пользователей, включая сервисные (сервисы).


Помогите решить проблемы, плиз.
Заранее благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.