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

Получить список загруженных драйверов под NT

Delphi , ОС и Железо , Windows

Получить список загруженных драйверов под NT

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  This code takes advantage of the undocumented NtQuerySystemInformation 
  API to obtain a list of loaded drivers under Windows NT. 

  Dieser Code verwendet die undokumentiere NtQuerySystemInformation API Funktion 
  um eine Liste aller geladenen Treiber unter Windows NT zu ermitteln. 
}

 const
   DRIVER_INFORMATION = 11;

 type
   TPDWord = ^DWORD;

   TDriverInfo = packed record
     Address: Pointer;
     Unknown1: DWORD;
     Unknown2: DWORD;
     EntryIndex: DWORD;
     Unknown4: DWORD;
     Name: array [0..MAX_PATH + 3] of Char;
   end;

 var
   NtQuerySystemInformation: function (infoClass: DWORD;
   buffer: Pointer;
   bufSize: DWORD;
   returnSize: TPDword): DWORD; stdcall = nil;

   function GetDriverInfo: string;
   var
      temp, Index, numBytes, numEntries: DWORD;
     buf: TPDword;
     driverInfo: ^TDriverInfo;
   begin
     if @NtQuerySystemInformation = nil then
       NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'),
         'NtQuerySystemInformation');

     // Obtain required buffer size 
    NtQuerySystemInformation(DRIVER_INFORMATION, @temp, 0, @numBytes);
     // Allocate buffer 
    buf := AllocMem(numBytes * 2);

     NtQuerySystemInformation(DRIVER_INFORMATION, buf, numBytes * 2, @numBytes);
     numEntries := buf^;
     driverInfo := Pointer(DWORD(buf) + 12);
     Result     := '';
     for Index := 1 to numEntries do
      begin
       Result := Result + #0$D#0$A+'Address: $' + IntToHex(DWORD(driverInfo^.Address), 8) +
         'Name: "' + (driverInfo^.Name) + '"';
       Inc(driverInfo);
     end;
     Delete(Result, 1, 2);
     FreeMem(buf);
   end;

   procedure TForm1.Button1Click(Sender: TObject);
   begin
     ListBox1.Items.Add(GetDriverInfo)
   end;


   // Thanks to Madshi for helping me translate from C++ Code 
  // Original Code (C++) : 
  //                             NtDriverList v1.0 
  //                      Copyright 1998, 1999 Yariv Kaplan 
  //                             WWW.INTERNALS.COM 

Это интересный фрагмент кода!

Программа использует не документированный API-функцию NtQuerySystemInformation для получения списка загруженных драйверов на Windows NT. Код написан на Delphi и содержит GUI-компонент, конкретно кнопку, которая при нажатии добавляет список драйверов в список элементов.

Вот шаг за шагом, как работает код:

  1. Программа определяет несколько констант и типов:
    • DRIVER_INFORMATION (11): Класс информации для запроса системной информации о загруженных драйверах.
    • TPDWord: Тип указателя на 32-битное неотрицательное целое число (DWORD).
    • TDriverInfo: Тип записи, представляющий информацию о драйвере. Он содержит поля для адреса драйвера, неизвестных значений, индекса входа и имени (массив символов).
  2. Программа объявляет две переменные:
    • NtQuerySystemInformation: Указатель на функцию API-функции NtQuerySystemInformation.
    • GetDriverInfo: Функция, которая получает список загруженных драйверов.
  3. В функции GetDriverInfo код делает следующее:
    • Он проверяет, является ли указатель на функцию NtQuerySystemInformation валидным. Если нет, он загружает функцию из модуля ntdll.dll с помощью GetProcAddress.
    • Он вызывает NtQuerySystemInformation с классом информации DRIVER_INFORMATION, чтобы получить требуемый размер буфера.
    • Он выделяет буфер достаточного размера и вызывает NtQuerySystemInformation снова, чтобы заполнить буфер.
    • Он получает количество записей в буфере и рассчитывает адрес первой записи.
    • Он проходит по каждой записи, извлекая адрес драйвера и имя, и добавляет их к строковому результату.
    • Наконец, он освобождает выделенный буфер.
  4. В процедуре Button1Click код вызывает функцию GetDriverInfo и добавляет полученный список драйверов в список элементов (ListBox1).

Это интересный фрагмент кода, который предоставляет-insight в API-системной информации Windows NT. Однако, пожалуйста, учитывайте, что использование не документированных API-функций может быть рискованным, так как они могут не работать в будущих версиях Windows или иметь неожиданные последствия.

Если вы ищете альтернативные решения, есть другие способы получения списка загруженных драйверов на Windows, такие как:

  • Использование командной строки driverquery (часть Windows Driver Kit).
  • Использование API-функции EnumDevices (документирована в Windows SDK).
  • Использование третьих-сторонних библиотек или инструментов, которые предоставляют функциональность управления драйверами.

В статье описана программа на языке Delphi, которая использует не документированную функцию NtQuerySystemInformation для получения списка загруженных драйверов под операционной системой Windows NT.


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

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




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


:: Главная :: Windows ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:13:31/0.0034208297729492/0