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

"Получение файлов драйверов для конкретного устройства: альтернатива Диспетчеру устройств"

Delphi , ОС и Железо , Драйвера

В статье рассматривается проблема получения файлов драйверов для конкретного устройства, аналогично тому, как это делает Диспетчер устройств. Описывается код на Object Pascal (Delphi), который не дает желаемого результата, и альтернативный ответ, который предлагает решение путем парсинга файлов INF.

Подтвержденный ответ: нет API для получения файлов драйверов, поэтому нужно парсить файлы INF. Приводится быстрый и грязный вариант решения для тех, кто заинтересован.

В статье также приводятся примеры кода на Object Pascal (Delphi) для чтения файлов INF, поиска секций и значений в них, а также для чтения файлов из списка путей. Пример кода для чтения файлов INF и поиска секций и значений в них:

procedure TForm1.ReadSectionNoKeys(const AFile, ASection: String; const SL: TStringList);
var
  TheFile: TStringList;
  Line: String;
  TrimEnd: Boolean;
  Idx, Tmp: Integer;
begin
  TrimEnd := False;

  TheFile := TStringList.Create();
  try
    TheFile.LoadFromFile(AFile);
    Idx := TheFile.IndexOf('[' + ASection + ']');
    if (Idx <> -1) then
    begin
      Idx := Idx + 1;
      while True do
      begin
        Line := Trim(TheFile[Idx]);
        Inc(Idx);
        if (Pos(';', Line) = 1) then
          continue;

        if (Pos('[', Line) > 0) then
          Break;

        Tmp := Pos(',', Line);
        if (Tmp > 0) then
          TrimEnd := True
        else
        begin
          Tmp := PosEx(';', Line, 3);
          if (Tmp > 0) then
            TrimEnd := True;
        end;

        if (Line <> '') then
        begin
          if (TrimEnd) then
          begin
            Line := Trim(Copy(Line, 1, Tmp - 1));
            TrimEnd := False;
          end;

          SL.Add(Line);
        end;

        if (Idx = (TheFile.Count - 1)) then
          Break;
      end;
    end;
  finally
    TheFile.Free();
  end;
end;

Пример кода для чтения файлов из списка путей:

```pascal procedure TForm1.ParseInfFile(const InfFile, SectionName: String); var I: TIniFile; SL, FilesList: TStringList; X, Y, Tmp: Integer; Pth, S, S1: String; begin I := TIniFile.Create(InfFile); try if (SectionName <> '') and (I.SectionExists(SectionName)) then begin // Check if the section has a value called "CopyFiles". if (I.ValueExists(SectionName, 'CopyFiles')) then begin // It has. Read it to a string and separate by commas. SL := TStringList.Create(); try SL.CommaText := IniReadStr(I, SectionName, 'CopyFiles', '');

      // Now, every line of the string list is a section name. Check
      // the destination directory of each.
      if (I.SectionExists('DestinationDirs')) then
        for X := 0 to SL.Count - 1 do
        begin
          S := IniReadStr(I, 'DestinationDirs', SL[X], '');
          if (S = '') then
            S := IniReadStr(I, 'DestinationDirs', 'DefaultDestDir', '');

          if (S <> '') then
          begin
            // Split the path by comma, if any.
            Tmp := Pos(',', S);
            S1 := '';
            if (Tmp > 0) then
            begin
              S1 := Trim(Copy(S, Tmp + 1, Length(S)));
              S := Trim(Copy(S, 1, Tmp - 1));
            end;

            // Convert the numeric value of S to a proper directory.
            Pth := '';
            if (S = '10') then
              Pth := GetWinDir();
            if (S = '11') then
              Pth := GetWinDir() + 'system32\'

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

В статье описывается проблема получения файлов драйверов для конкретного устройства и предлагается решение путем парсинга файлов INF.


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

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




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


:: Главная :: Драйвера ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:47:43/0.013932943344116/1