Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Prüfen ob Treiber geladen wurde (https://www.delphipraxis.net/148692-pruefen-ob-treiber-geladen-wurde.html)

Codewalker 6. Mär 2010 13:13


Prüfen ob Treiber geladen wurde
 
Hallo zusammen.

Ich würde gerne wissen, ob eine bestimmte Treiberdatei (C:\Windows\System32\bla.sys) geladen wurde, d.h. der Treiber aktiv ist und nicht nur die Datei auf der Festplatte liegt. Habt ihr eine Idee, wie man das anstellen könnte?

Grüße

himitsu 6. Mär 2010 15:30

Re: Prüfen ob Treiber geladen wurde
 
Das Einfachste ist, den Treiber anzusprechen, wenn er antwortet, dann ist er geladen.

Codewalker 6. Mär 2010 16:44

Re: Prüfen ob Treiber geladen wurde
 
Zitat:

Zitat von himitsu
Das Einfachste ist, den Treiber anzusprechen, wenn er antwortet, dann ist er geladen.

Wie soll ich das anstellen? Der Treiber ist nicht von mir, sondern Teil einer Software - geht das dann auch?

Astat 7. Mär 2010 00:29

Re: Prüfen ob Treiber geladen wurde
 
Hallo Codewalker, anbei Sample.

Delphi-Quellcode:

uses
  windows,
  SysUtils;

function EnumDeviceDrivers(lpImageBase: PPointer; cb: DWORD;
  var lpcbNeeded: DWORD): BOOL; stdcall; external 'psapi.dll'
    name 'EnumDeviceDrivers';

function GetDeviceDriverBaseName(ImageBase: Pointer; lpBaseName: PChar;
  nSize: DWORD): DWORD; stdcall; external 'psapi.dll'
    name 'GetDeviceDriverBaseNameA';

var
  lpcbNeeded: DWORD;
  ppArray: PPointerArray;
  szDriver: PChar;
  i: integer;
  count: integer;
begin
  if not EnumDevicedrivers(nil, 0, lpcbNeeded) then
    RaiseLastWin32Error;

  GetMem(ppArray, lpcbNeeded);
  try
    if EnumDevicedrivers(@ppArray[0], lpcbNeeded, lpcbNeeded) then begin
      count := lpcbNeeded div 4;
      GetMem(szDriver, MAX_PATH);
      try
        for i := 0 to count -1 do begin
          if GetDevicedriverBaseName(ppArray[i], szDriver, MAX_PATH) = 0 then
            RaiseLastWin32Error;
          writeln(inttohex(dword(ppArray[i]), 8) + ' - ' + szDriver);
        end;
      finally
        freemem(szDriver);
      end;
    end;
  finally
    freemem(ppArray);
  end;
  readln;
end.
lg. Astat

Codewalker 7. Mär 2010 08:51

Re: Prüfen ob Treiber geladen wurde
 
Hallo Astat.
Danke, dein Sample klappt einwandfrei :thumb: . Ich habs gestern noch mit WMI versucht, aber darüber kommt man nicht an die nötigen Infos (zumindest will WMI sie mir nicht sagen :mrgreen: ).


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz