Delphiアプリケーション内からカーネルネイティブAPIを呼び出すことは可能ですか?Likent
とzw
syscalls。
質問する
2521 次
2 に答える
14
実際、DelphiからネイティブAPIを呼び出すことができます。
Delphiには、ネイティブAPIのヘッダー変換は付属していません。したがって、独自の翻訳を提供するか、既存の翻訳を使用する必要があります。例えば。NTAPIのJEDI翻訳。
于 2013-02-17T12:59:14.327 に答える
11
David Heffernanが言うように、ユーザーモードからネイティブAPIを使用することは完全に可能であり、したがってDelphiを使用することは完全に可能です。JediApilibのJwaNativeユニットが必要になります。
ネイティブAPIを使用してプロセスを列挙する小さな例を次に示します(TProcessListはTObjectListの子孫ですが、関連する部分は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;
于 2013-02-17T14:08:35.357 に答える