Czy można wywołać jądro Native API z aplikacji Delphi? Podobnie jak w systemach baz danych nt
i zw
.Czy możemy wywołać Native Windows API z Delphi?
Odpowiedz
Można rzeczywiście zadzwonić do natywnego API z Delphi.
Delphi nie jest dostarczany z tłumaczeniem nagłówków dla natywnego interfejsu API. Musisz więc podać własne lub użyć wcześniejszego tłumaczenia. Na przykład. tłumaczenie JEDI interfejsu API NT.
Dokładnie, potrzebujesz JwaNative.pas od Jedi Apilib (+1) – Remko
Jak mówi David Heffernan, możliwe jest użycie Native API ze trybu użytkownika, a tym samym Delphi. Będziesz potrzebował jednostki JwaNative z Jedi Apilib.
Oto mały przykład wyliczyć procesów z wykorzystaniem Native API: (TProcessList jest potomkiem z TObjectList ale odpowiednia część jest wezwanie do NtQuerySystemInformation)
function EnumProcesses: TProcessList;
var
Current: PSystemProcesses;
SystemProcesses : PSystemProcesses;
dwSize: DWORD;
nts: NTSTATUS;
begin
Result := TProcessList.Create;
dwSize := 200000;
SystemProcesses := AllocMem(dwSize);
nts := NtQuerySystemInformation(SystemProcessesAndThreadsInformation,
SystemProcesses, dwSize, @dwSize);
while nts = STATUS_INFO_LENGTH_MISMATCH do
begin
ReAllocMem(SystemProcesses, dwSize);
nts := NtQuerySystemInformation(SystemProcessesAndThreadsInformation,
SystemProcesses, dwSize, @dwSize);
end;
if nts = STATUS_SUCCESS then
begin
Current := SystemProcesses;
while True do
begin
Result.Add(TProcess.Create(Current^));
if Current^.NextEntryDelta = 0 then
Break;
Current := PSYSTEM_PROCESSES(DWORD_PTR(Current) + Current^.NextEntryDelta);
end;
end;
FreeMem(SystemProcesses);
end;
Czy jesteś autorem JwaNative? –
@DavidHeffernan: Jestem jednym z administratorów projektu Jedi Apilib ... – Remko
Nie na temat: Czy to ja, czy też naprawdę trudno jest znaleźć JEDI za pomocą wyszukiwarki internetowej. Ilekroć próbuję, zawsze znajduję mnóstwo linków do pozornie wielu różnych stron. I czy istnieje wiele różnych projektów? Być może to mnie wprawia w zakłopotanie. –
ale możemy nazwać nt i ZW syscalls w sposób Program usermode c/C++, są one przeznaczone nie tylko dla kierowców. – n1kita
Formalnie możesz napisać sterownik w Delphi tak jak w c/C++, nie ma ograniczeń językowych. Jedyny praktyczny problem polega na tym, że frameworki sterowników delphi nie istnieją. – kludg
@Serg Nie jestem pewien, czy w Delphi jest praktyczne pisanie sterownika. Jak spakujesz kod? Sterowniki nie są plikami DLL ani EXE. –