Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Win 7 и Native API (https://forum.antichat.xyz/showthread.php?t=155972)

transserg 12.11.2009 13:11

Win 7 и Native API
 
привет всем! хочу перейти на 7'ку точнее поюзать, но немного нет времени для эксперементов так как скоро сдача курсача... все ли NativAPI корректно работают на ней? вопрос возник потому что на 7ке спомощью NtQurySystemInformation неполучилось вывести список драйверов на хр все робит на ура

slesh 12.11.2009 13:18

Win7 в принципе ничем не отличается от WinXP считай таже система.
Писал дров который инжектил DLL из ядра в гуёвый процесс. Пахало и на win xp и на win 7 так что в принципе тоже самое.
Возможно теперь эта функция требует права админа. Ты проверь что она возвращается. Вернее какой код ошибки. И от него уже нужно шагать

transserg 12.11.2009 13:29

slesh программа зупущенна из под админа(а именно правой кнопкой на ехе запустит с правами администратора) эффект тот же =)

slesh 12.11.2009 14:09

Ну хоть какой код возвращается NtQuerySystemInformation?

slesh 12.11.2009 15:42

ТАкс. пришел домой. Проверил. Под w7 RC спокойно пашет код который пашет и в winxp
Даже не требуется прав админа.

Так что у тебя код гдето кривой. Код в студию. ))

лично я делал так:
NtQuerySystemInformation(DRIVER_INFORMATION, buf, 0, &NeedSize);
затем выделял память = NeedSize * 2
и делал NtQuerySystemInformation(DRIVER_INFORMATION, buf, NeedSize * 2, &NeedSize);

transserg 12.11.2009 15:55

Код:

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


procedure GetInstallDriver;
  var
    temp, Index, numBytes, numEntries: DWORD;
    buf: TPDword;
    driverInfo: ^TDriverInfo;
  begin
    if @NtQuerySystemInformation = nil then
      NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'),'NtQuerySystemInformation');
    NtQuerySystemInformation(DRIVER_INFORMATION, @temp, 0, @numBytes);   
    buf := AllocMem(numBytes * 2);
    NtQuerySystemInformation(DRIVER_INFORMATION, buf, numBytes * 2, @numBytes);
    numEntries := buf^;
      driverInfo := Pointer(DWORD(buf) + 12);
    for Index := 1 to numEntries do
      begin
      Writeln(Format('| $%-5s | %-48s |',[IntToHex(DWORD(driverInfo^.Address),8),driverInfo^.Name]));
      Inc(driverInfo);
    end;   
    FreeMem(buf);
  end;

вот этот код =)

slesh 12.11.2009 16:10

на w7 у меня отлично пашет.

transserg 12.11.2009 16:13

slesh тогда у одногруппника руки ниже талии растут раз у него этот код не работает =) тему можно закрыть

slesh 12.11.2009 16:19

Щас преписал в более красивый вид..
Пашет тоже нормально.
Там вполне возможно он не мог найти адрес 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.


transserg 12.11.2009 16:37

во ща выяснилось что семерка 64 битная! возмонжно в этом косяк или это не влияет?


Время: 11:05