Condividi tramite


Windows Confidential Chiusura forzata di handle

Raymond Chen

Sono sempre voler eliminare un file ma Impossibile in quanto alcune programma aveva il file aperto? La cosa corretta da in questo caso sarebbe convincere il programma che il file è aprire per chiuderla, è possibile, ad esempio, chiedere all'utente modifica il documento chiuso. Ma a volte di ottenere impatient e di utilizzare alcune utilità che è possibile forzare la chiusura handle di file. E quindi si è sono trattati rilievo temporaneo di danneggiamento dei dati a lungo termine.

Forzare un handle chiuso è equivalente a raggiungere in un programma e liberare memoria. Il programma considera il punto di manipolazione di (o memoria) è ancora valido e continuerà a utilizzarlo. Ma poiché l'handle è realmente disponibile, verrà riutilizzata per un'caratteristica.

Si supponga in scuola elevata e vedere di un manuale nel Raccoglitore numero 305 che si desidera. È possibile forzare il Raccoglitore aperto e richiedere il libro. Ora il Raccoglitore è aperto e altro qualcuno proviene da e inserisce proprio contenitore Rubrica in esso. Nel frattempo, il proprietario originale di Raccoglitore 305 restituisce da pranzo, acquisisce il contenitore Rubrica e consente classe.

Ora di due problemi: l'utente originale di Raccoglitore 305 ha il contenitore contabile errato ed è il pericolo di prendere appunti in qualcuno di un altro blocco appunti. La persona secondo nel frattempo, solo era suo contenitore Rubrica furto.

Se si è molto fortunato, la cosa di successiva che il programma non è la chiusura dell'handle che è terminata precedente. Il programma ottiene un errore di handle non valido, ma poiché non vi è nulla che è possibile eseguire, il programma procede solo come se l'handle chiuso correttamente. Ma è raramente la distinzione tra maiuscole e minuscole.

Più probabile, il verrà infine tornare all'handle e provare a utilizzare, durante il recupero degli errori di handle non valido. Anche più probabile è che l'handle è forzato chiuso verrà da utilizzato per un'caratteristica. E quando operazioni inizia a passare berserk completamente. Si supponga che l'handle sono stati riutilizzato come un altro file. A questo punto il programma considera di lettura e scrittura dal primo file, ma in realtà è operativo nel secondo file. Il risultato è un danneggiamento dei dati nel primo file (non i dati sono stati scritti devono) e nel file secondo (dati previsto per il primo file è stata scritta nel file secondo).

Quando il programma chiude il primo file, chiude inoltre l'handle riciclato. Hai creato un errore di correlazione a catena: È imposto il primo file chiuso e il risultato è che alcuni secondo handle è stata terminata chiuso.

Il danneggiamento dei dati può continuare all'infinito, come ogni componente che richiede che un handle ha tale handle inavvertitamente danneggiato dal componente precedente. Quando il componente precedente chiude infine ciò che considera è un handle valido, chiude effettivamente l'handle utilizzato dal componente corrente, ora procede a danneggiato il componente successivo che richiede un handle.

Si supponga che un servizio indice di ricerca è un file aperto per l'indicizzazione, ma è utilizzato temporaneamente bloccato e si desidera eliminare il file, pertanto è (unwisely forzare l'handle chiuso. Il servizio dell'indice ricerca apre il file di registro per registrare alcune informazioni e l'handle per il file eliminato è riciclato come handle per il file di registro. L'operazione bloccata è infine completata e il servizio dell'indice ricerca infine Ottiene intorno a chiusura tale handle è stato venga aperto, ma termina le unwittingly chiudere l'handle di file registro.

Il servizio dell'indice ricerca apre un altro file, ad esempio un file di configurazione per la scrittura in modo è possibile aggiornare uno stato persistente. L'handle per il file di registro Ottiene riciclato come handle per il file di configurazione. Il servizio indice di ricerca si decide di registrare alcune informazioni, in modo che scrive il file di log. Sfortunatamente, l'handle di file di registro è stato chiuso e l'handle riutilizzato per il file di configurazione. Le informazioni registrate passa nel file di configurazione quando.

Nel frattempo, handle un'altra è forzato chiuso è stato riutilizzato come un handle di mutex, viene utilizzato per impedire che i dati da danneggiato. Quando viene chiuso l'handle di file originale, l'handle di mutex viene chiuso e protezioni contro il danneggiamento dei dati verranno perse. Il più l'esecuzione del servizio, più danneggiati diventano relativi indici. Infine, qualcuno rileva che l'indice ha restituito risultati non corretti. E non quando si tenta di riavviare il servizio, riesce perché i file di configurazione danneggiati.

Si segnalare il problema alla società che rende il servizio indice di ricerca e determinare l'indice è danneggiato, il file di registro interrotto mysteriously registrazione e il file di configurazione è stato sovrascritto con garbage. Alcuni tecnico scarso viene assegnato all'attività hopeless di scoprire perché il servizio corrupts relativi indici e la file di configurazione, che l'origine del danneggiamento sia che imposto un handle chiuso.

Raymond Chen Sito Web" La precedente operazione di nuova" e gestire le libro identico intitolato (Addison-Wesley, 2007) di Windows della cronologia, programmazione di Win32 e misreading titoli di giornale.