Ist es möglich, die systemeigenen Kernel-APIs in einer Delphi-Anwendung aufzurufen? Wie nt
und zw
syscalls.Können wir Native Windows API von Delphi aufrufen?
Antwort
Sie können tatsächlich die native API von Delphi aufrufen.
Delphi wird nicht mit Header-Übersetzungen für die native API ausgeliefert. Sie müssen also Ihre eigenen angeben oder eine bereits vorhandene Übersetzung verwenden. Beispielsweise. die JEDI-Übersetzung der NT-API.
Genau, Sie brauchen JwaNative.pas aus dem Jedi Apilib (+1) – Remko
Wie David Heffernan sagt, ist es durchaus möglich, die native API von usermode und damit Delphi zu verwenden. Sie benötigen die JwaNative-Einheit von Jedi Apilib. Hier
ist kleines Beispiel aufzuzählen Prozesse Native API: (TProcessList ist ein Nachkomme von TObjectList aber der relevante Teil ist der Aufruf 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;
Sind Sie ein Autor von JwaNative? –
@DavidHeffernan: Ich bin einer der Admins des Jedi Apilib Projekts ... – Remko
Off-Topic: Ist es mir, oder ist es wirklich schwer, JEDI über Websearch zu finden? Wann immer ich es versuche, finde ich immer viele Links zu scheinbar vielen verschiedenen Seiten. Und gibt es viele verschiedene Projekte? Vielleicht verwirrt mich das. –
aber wir können nt nennen und zw syscalls in a usermode c/C++ Programm, sie sind nicht nur für Treiber – n1kita
Formal können Sie einen Treiber in Delphi wie in c/C++ schreiben, gibt es keine Spracheinschränkungen. Das einzige praktische Problem ist, dass Delphi-Treiber-Frameworks nicht existieren. – kludg
@Serg Ich bin mir nicht sicher, ob es in Delphi praktisch ist, einen Treiber zu schreiben. Wie verpacken Sie den Code? Treiber sind keine DLL- oder EXE-Dateien. –