Moin Mathias,
also zu a) habe ich eine Idee:
Erstmal dafür sorgen, dass der Buffer nicht reicht, damit die Funktion die erforderliche Grösse ermittelt, und dann den Buffer entsprechend setzten.
Dazu ein kurzer Ausschnitt aus einem Programm von mir, um's zu verdeutlichen:
Code:
cbBufSize := 0;
pStatus := nil;
lpResumeHandle := 0;
EnumServicesStatus(hSCDB,p_fType,SERVICE_STATE_ALL,pStatus,cbBufSize,@pcbBytesNeeded,@lpServicesReturned,@lpResumeHandle);
lpResumeHandle := 0;
pStatus := AllocMem(pcbBytesNeeded);
try
cbBufSize := pcbBytesNeeded;
EnumServicesStatus(hSCDB,p_fType,SERVICE_STATE_ALL,pStatus,cbBufSize,@pcbBytesNeeded,@lpServicesReturned,@lpResumeHandle);
Es gibt ja viele Funktionen, bei denen das klappt
Sollte sich der Aufruf von Enumservicesstatus von Deinem unterscheiden:
Ich hab' mir die Funktionen selber importiert.