2016-05-25 50 views
9

sto "revisione" del codice che è stato scritto ben prima di me e sto notando un modello che ho qualche dubbio su:Va bene confrontare i valori di PEPROCESS?

Il risultato della funzione PsGetCurrentProcess() viene memorizzato e quindi i confronti sono realizzati con tale puntatore (che è un puntatore a una struttura EPROCESS). Tuttavia, non sto trovando nulla nella documentazione, il che suggerisce che questa funzione è garantita per restituire lo stesso puntatore ogni volta. Ciò che è molto più sorprendente per me è che questo codice è stato apparentemente funzionante da molto tempo.

Si tratta di un errore e si consiglia di modificare tale logica per es. confrontare gli ID di processo (utilizzando PsGetProcessId)?

+0

Sto ricevendo un downvote senza un commento. Trovo abbastanza inquietante - se qualcuno vorrebbe commentare perché questa non è una buona domanda o fornire critiche, per favore fallo, è fortemente incoraggiata dalle regole del sito. –

+3

Potrebbe essere un bug. Penso anche che la tua domanda vada bene. È uno dei migliori che ho visto quindi anch'io non capisco il downvote. –

+0

"* i confronti sono fatti con questo risultato *" sul puntatore ** valore ** restituito? – alk

risposta

4

Sì, questo è praticamente corretto. La documentazione di EPROCESS chiarisce che esiste un oggetto di questo tipo per processo e qualsiasi punto PEPROCESS punta a questo. Ciò significa che PsGetCurrentProcess() non restituisce un puntatore a unEPROCESS ma a ilEPROCESS. E due indicatori si equivalgono se puntano allo stesso oggetto.

+0

Grazie per la risposta. Puoi fornire una fonte definitiva per questo? Mentre la documentazione lo suggerisce un po '(usando ** il ** invece di ** a **), non riesco a trovare nient'altro su questo argomento. –

+0

Di per sé evidente, quindi improbabile da essere esplicitamente documentato. –

+1

(Per chiarire questo: questo è il genere di cose che secondo la mia esperienza Microsoft considera auto-evidenti e difficilmente documentano esplicitamente. Non intendevo implicare che * non dovrebbe * essere stato documentato o che era un domanda stupida.) –