首页  编辑  

列出系统里面有哪些驱动程序加载

Tags: /超级猛料/Core.驱动,VxD,服务/   Date Created:

obtain a list of loaded drivers under Windows NT?

{

 This code takes advantage of the undocumented NtQuerySystemInformation

 API to obtain a list of loaded drivers under Windows NT.

}

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 + # $D # $A + 'Address: $' + IntToHex ( DWORD ( driverInfo ^. Address ), 8 ) +

      'Name: "' + ( driverInfo ^. Name ) + '"' ;

   Inc ( driverInfo );

  end ;

 Delete ( Result , 1 , 2 );

 FreeMem ( buf );

end ;