2016-05-25 10 views
9

Ich „Überprüfung“ einige Code, der vor mir gut geschrieben wurde und ich bemerkte ein Muster, das ich habe einige Zweifel über:Ist es in Ordnung, PEPROCESS-Werte zu vergleichen?

Das Ergebnis der PsGetCurrentProcess() Funktion gespeichert und dann werden Vergleiche mit diesem Zeiger gemacht (was ist ein Zeiger auf eine EPROCESS Struktur). Ich finde jedoch nichts in der Dokumentation, was darauf hindeutet, dass diese Funktion garantiert den gleichen Zeiger jedes Mal zurückgibt. Was für mich viel überraschender ist, ist, dass dieser Code anscheinend lange Zeit funktioniert hat.

Ist dies ein Fehler, und würden Sie empfehlen, diese Logik z. Vergleichen von Prozess-IDs (mithilfe von PsGetProcessId)?

+0

Ich erhalte einen Kommentar ohne Kommentar. Ich finde das ziemlich verstörend - wenn jemand sich dazu äußern möchte, warum das keine gute Frage ist oder Kritik vorbringt, bitte tun Sie dies, es wird von den Seitenregeln recht stark angeregt. –

+3

Es könnte sehr gut ein Fehler sein. Ich denke auch, dass deine Frage in Ordnung ist. Es ist eines der besten, die ich je gesehen habe, deshalb verstehe ich auch den Downvote nicht. –

+0

"* Vergleiche werden mit diesem Ergebnis gemacht *" auf dem Zeiger ** Wert ** zurückgegeben? – alk

Antwort

4

Ja, das ist ziemlich richtig. Die Dokumentation von EPROCESS macht deutlich, dass pro Prozess ein solches Objekt vorhanden ist, und jede PEPROCESS weist darauf hin. Dies bedeutet, dass PsGetCurrentProcess() keinen Zeiger auf undEPROCESS zurückgibt, sondern auf dieEPROCESS. Und zwei Zeiger gleichen sich, wenn sie auf dasselbe Objekt zeigen.

+0

Danke für die Antwort. Kannst du eine definitive Quelle dafür liefern? Während die Dokumentation es etwas vorschlägt (indem ** ** statt ** a ** verwendet wird), kann ich nichts anderes zu diesem Thema finden. –

+0

Selbstverständlichkeit, so unwahrscheinlich, explizit dokumentiert zu werden. –

+1

(Um das klarzustellen: Dies ist eine Sache, die Microsoft nach meiner Erfahrung für selbstverständlich hält und die ich wahrscheinlich nicht explizit dokumentiere. Ich wollte damit nicht implizieren, dass * es * nicht dokumentiert wurde oder dass es ein dumme Frage.) –