Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ZwQueryObject отображает не все, местами молчит 
:(
    Опции темы
Delvish
Дата 23.11.2012, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 2
Всего: 4



всем доброго дня!

Delphi 7, Windows 7 x64. через ZwQueryObject, DuplicateHandle и ZwQuerySystemInformation получаю информацию о каждом процессе - какой у него хендл к какому объекту. да только вот не про все файлы мне инфа выдается - получаю PID, получаю хендл, а имя файла отчего то не получаю.
заметил, к примеру, что тот же пресловутый куст реестра - будь то SAM, SOFTWARE, SYSTEM - не важно, я могу в эксплорере открыть свойства и глянуть на размер файла и прочую ерунду, а вот через свою программу я не вижу чтобы система имела хендл этих файлов. вероятно, среди тех строк, где кроме PID и Handle нет имени, они и присутствуют, но до конца не уверен.

в конечном итоге мне необходимо будет просто по хендлу открывать файлы и обсчитывать их котрольную сумму - с этим проблем нет, под WinXP получается чуток проще узнать хендл  и открыть файл, а вот под семеркой - ну никак.

подскажите, плиз, как же заполучить хендлы не только этих файлов, но и вообще - отчего я не вижу полной картины.

кусочек из лога:
Код

PID  Handle   Path
3396 2684 \Device\HarddiskVolume3\Windows\System32\ru-RU\msctfui.dll.mui
3396 2728 
3396 2736 \Device\HarddiskVolume3\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static\CLI.Caste.HydraVision.Dashboard.dll
3396 2744 
3396 2756 \Device\HarddiskVolume3\Windows\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll
3396 2860 
3396 2952 
3396 2960 


код перечисления хендлов, PIDов и линков:
Код

function GetInfoTable(ATableType: dword): Pointer;
var
  mSize: dword;
  mPtr: pointer;
  St: cardinal;
begin
  Result := nil;
  mSize := $4000;
  repeat
    mPtr := VirtualAlloc(nil, mSize, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
    if mPtr = nil then
      Exit;
    St := ZwQuerySystemInformation(ATableType, mPtr, mSize, nil);
    if St = cardinal($C0000004) then
    begin
      VirtualFree(mPtr, 0, MEM_RELEASE);
      mSize := mSize * 2;
    end;
  until St <> cardinal($C0000004);
  if St = 0 then
    Result := mPtr
  else
    VirtualFree(mPtr, 0, MEM_RELEASE);
end;

procedure GetHandles;
var
  inf: PSYSTEM_HANDLE_INFORMATION_EX;
  i: integer;
  process, h: cardinal;
  p: pointer;
  buf: array[0..max_path] of char;
  s, tm: string;
  _out : TStringList;
begin
  _out := TStringList.Create;
  p := GetMemory(max_path);
  ZeroMemory(p, max_path);
  inf := GetInfoTable(SystemHandleInformation);
  for i := 0 to inf.NumberOfHandles - 1 do
  begin
    if inf.Information[i].ObjectTypeNumber = OB_TYPE_FILE then
    begin
      process := OpenProcess(PROCESS_DUP_HANDLE, false,
        inf.Information[i].ProcessId);
        tm := '';
        tm := IntToStr(inf.Information[i].ProcessId) + ' ';
      DuplicateHandle(process, inf.Information[i].Handle, GetCurrentProcess,
        @h, 0, false, DUPLICATE_SAME_ACCESS);
        tm := tm + IntToStr(inf.Information[i].Handle) + ' ';
      ZwQueryObject(h, 1, p, max_path, nil);
        tm := tm + WideCharToString(TUnicodeString(p^).Buffer);
        _out.Add(tm);
        _out.SaveToFile('C:\2.txt');
      ZeroMemory(p, max_path);
      CloseHandle(h);
      CloseHandle(process);
    end; 
  end;
_out.Free;
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.