Hallo,
um die Situation zu klären: Ich verwende einen Treiber von Ivo Ivanov (CodeProject:
http://www.codeproject.com/threads/procmon.asp). Dieser sollte einem beim Erstellen und Beenden eines Prozesses über einen Event bescheid geben.
Ich möchte dann mittels
DeviceIoControl() und
GetOverlappedResult()
die von ihm definierte Datenstruktur
typedef struct _CallbackInfo
{
HANDLE hParentId;
HANDLE hProcessId;
BOOLEAN bCreate; // (*)
}CALLBACK_INFO, *PCALLBACK_INFO;
auslesen. Leider scheitert bei mir folgender Aufruf
DeviceIoControl(m_hDriver, IOCTL_PROCVIEW_GET_PROCINFO, nil, 0, @CallbackInfo^, SizeOf(TCallbackInfo), dwBytesReturned, @ov)
Ich denke, dass es vielleicht an meiner TCallbackInfo-Datenstruktur liegt:
Delphi-Quellcode:
TCallbackInfo = record
ParentId : THANDLE;
ProcessId: THANDLE;
bCreate : LongBool;
end;
PCallbackInfo = ^TCallbackInfo;
Nun wollte ich wissen, welches Delphi-Boolean nun dem BOOLEAN Typ aus C++ entspricht, siehe (*), denn THandle =
HANDLE => das kann demnach nicht falsch sein. Auch das Initialisieren des Treibers und Warten bis ein Event gefeuert wird funktioniert, nur der Aufruf mittels
DeviceIoControl scheitert.
Zitat:
Christian Seehase schrieb:
also ich erhalte da $0022E000 als Ergebnis.
...
Woher hast Du eigentlich IOCTL_PROCVIEW_GET_PROCINFO ?
Das kann ich auch im
DDK (Windows 2003) nicht entdecken.
Danke, auch ich erhalte $0022E000 als Ergebnis, daran kann es also nicht liegen, dass ich Probleme beim Lesen vom Treiber habe...
Was die CTL_CODE Funktion betrifft. Ivo hat mit
IOCTL_PROCVIEW_GET_PROCINFO wohl einen eigenen
IoControlCode eingeführt, keine Ahung wieso? Definiert hatte er ihn aber wie folgt:
#define FILE_DEVICE_UNKNOWN 0x00000022
#define IOCTL_UNKNOWN_BASE FILE_DEVICE_UNKNOWN
#define IOCTL_NTPROCDRV_GET_PROCINFO CTL_CODE(IOCTL_UNKNOWN_BASE, 0x0800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
somit müsste doch IOCTL_NTPROCDRV_GET_PROCINFO auch ein FILE_DEVICE_UNKNOWN sein oder???
Viele Grüße
peanut.