Einzelnen Beitrag anzeigen

Olli
(Gast)

n/a Beiträge
 
#25

Re: Prozesse oder Anwendungen ermitteln, die eine Datei benu

  Alt 21. Mai 2007, 10:37
Einige Anmerkungen.
  • NO_ERROR ist kein geeigneter Vergleichswert. Benutze die Funktion (in C ein Makro) NT_SUCCESS() aus JwaWinType!
  • Vergleiche mit dem Wert den du finden willst (IMO ist das STATUS_BUFFER_TOO_SMALL aus JwaNtStatus) und andernfalls NT_SUCCESS() - bei dir mußt du das der Reihe nach machen. Also wenn STATUS_BUFFER_TOO_SMALL dann Puffer freigeben und mit neuer Größe allozieren - sonst, wenn NT_SUCCESS nicht True zurückgibt, Fehler ausgeben und raus aus der Routine.
  • SYSTEM_HANDLE_INFORMATION hat eine feste Größe, daher benutzt du hier einfach nur sizeof() um die Größe des Typs zum aktuellen Pointerwert zu addieren und so den Pointer zum nächsten Record zu bekommen (Stichwort: Pointerarithmetik!).
  • Am Ende wirst du irgendwo bei SYSTEM_OBJECT_INFORMATION landen. Dort benutzt du statt sizeof() den Wert von NextEntryOffset aus dem aktuellen Record und addierst ihn zum Offset des aktuellen Records um das Offset zum nächsten Record zu bekommen. Das Prinzip ist also gleich. Das kommt daher, daß SYSTEM_OBJECT_INFORMATION eine variable Länge hat (hier ein String).

Beachte auch, daß die Abfrage der Informationen eines Handles (und ultimativ des entsprechenden Objektes) bei Pipes und Mailslots blockieren kann. Nico kann dir ein Lied davon singen.
  Mit Zitat antworten Zitat