Показать сообщение отдельно

  #9  
Старый 12.11.2009, 16:19
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


По умолчанию

Щас преписал в более красивый вид..
Пашет тоже нормально.
Там вполне возможно он не мог найти адрес ntdll.dll из которой брал функцию NtQuerySystemInformation. Такое редко но может быть. Так что пусть попробует этот код. Если и он незаработает значит у него какаято защита установлена или вирь.

Код:
const
  DRIVER_INFORMATION = 11;

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

  TDriverQueryInfo = packed record
    Count : integer;
    Unknown1 : DWORD;
    Unknown2 : DWORD;
    Drv : array [0..0] of TDriverInfo;
   end;
  PDriverQueryInfo = ^TDriverQueryInfo;


function NtQuerySystemInformation (infoClass: DWORD;  buffer: Pointer;  bufSize: DWORD;  returnSize: PDword): DWORD; stdcall; external 'ntdll.dll';


procedure GetInstallDriver;
var
  NeedByte : dword;
  Info : PDriverQueryInfo;
  x : integer;
begin
  NtQuerySystemInformation(DRIVER_INFORMATION, nil, 0, @NeedByte);
  Info := AllocMem(NeedByte * 2);
  NtQuerySystemInformation(DRIVER_INFORMATION, Info, NeedByte * 2, @NeedByte);

  for x := 0 to Info^.Count-1 do
  begin
    Writeln(Format('| $%-5s | %-48s |', [IntToHex(Info^.Drv[x].Address, 8), Info^.Drv[x].Name]));
  end;

  FreeMem(Info);
end;

begin
  GetInstallDriver();
  readln;
end.

Последний раз редактировалось slesh; 12.11.2009 в 16:25..
 
Ответить с цитированием