Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки bObjectType в Windows 10 версии 1607 при получении списка файлов процесса

Delphi , Синтаксис , Справочник по API-функциям

В последнем обновлении Windows 10, известном как "Anniversary Update" (версия 1607), была изменена константа bObjectType, используемая для идентификации объектов файлов в системной информации. В предыдущих версиях Windows значение этой константы для объектов типа "file" было в диапазоне от 25 до 31. Однако в версии 1607 Build 14393.105 это значение изменилось на 34. В Creators Update (версия 1703) значение увеличилось до 35.

Это изменение привело к тому, что ранее рабочий код, используемый для получения списка файлов, открытых процессом, перестал функционировать. Ниже представлен пример кода на Object Pascal (Delphi), который исправляет эту ошибку.

function GetHandlesByProcessID(const ProcessID: Integer; Results: TStringList; TranslatePaths: Boolean): Boolean;
var
  hProcess: THandle;
  hFile: THandle;
  ReturnLength: DWORD;
  SystemInformationLength: DWORD;
  Index: Integer;
  pHandleInfo: PSYSTEM_HANDLE_INFORMATION;
  hQuery: NTSTATUS;
  FileName: string;
begin
  // Инициализация и получение списка дескрипторов
  // ...

  // Исправленная часть кода для фильтрации объектов файлов
  if (pHandleInfo^.Handles[Index].ObjectType < 34) or
    (pHandleInfo^.Handles[Index].ObjectType > 35) then
  Continue;

  // Остальная часть кода для получения и обработки файлов
  // ...
end;

В данном коде необходимо изменить условие фильтрации объектов файлов, чтобы оно соответствовало новым значениям bObjectType. Теперь условие проверяет, что ObjectType находится в диапазоне от 34 до 35 для Windows 10 версии 1607, и от 35 до 36 для Creators Update.

Также стоит отметить, что вместо использования жестко заданных значений, лучше получить информацию о типах объектов из самой системы. Это можно сделать, вызвав функцию ZwQueryObject с параметром ObjectTypesInformation, чтобы получить массив структур OBJECT_TYPE_INFORMATION, содержащих информацию о типах объектов, включая TypeIndex, который соответствует ObjectTypeIndex из SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX.

Используя этот подход, код будет работать корректно на всех версиях Windows, начиная с Windows 8.1, и не потребует ручного обновления значений констант при изменении версий операционной системы.

Создано по материалам из источника по ссылке.

Исправление ошибки `bObjectType` в Windows 10 версии 1607 при получении списка файлов процесса, связанная с изменением значения константы, используемой для идентификации файлов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-09 11:09:54/0.0062150955200195/0