Windows Confidential: Un viaggio tra i ricordi con EmulateHeap

Raymond Chen

Uno dei estremamente semplice, ovvero ancora completamente pazzesco, ovvero i comportamenti di compatibilità disponibili in Application Compatibility Toolkit è denominato EmulateHeap. 

Se si attiva questa correzione rapida per la compatibilità sul processo, quindi funzioni heap di livello del sistema operativo (da HeapCreate per LocalLock per GlobalReAlloc e ovunque tra) vengono reindirizzate alle funzioni di sostituzione che emulano l'heap di Windows 95 verso il basso per ultimo dettaglio.

Ad esempio, potrebbe essere un programma che consente di allocare due blocchi di memoria, libera entrambe, alloca un terzo blocco di memoria e si basa sul fatto che il puntatore restituito dall'allocazione terza è numericamente identico il puntatore restituito dalla prima allocazione perché questo è ciò che accade in Windows 95.

Potrebbe essere un programma che causa un overflow di un buffer di heap e non risente gravi conseguenze perché la memoria dopo il buffer di heap non è utilizzata per un valore o almeno ciò avviene in Windows 95.

Si potrebbe anche essere in esecuzione un programma che consente di liberare memoria, quindi si accede alla memoria liberata successivamente, aspetta che la memoria conterrà ancora i valori che aveva quando viene liberata e non è stato riutilizzato per alcuni altri allocazione di memoria o almeno non viene riutilizzato in Windows 95. (O persino scarier, che il programma si basa sul fatto che i valori vengono modificati dopo la memoria liberata in modo molto particolare!)

Vi sono un intero gruppo di piccoli po' strana dipendenze simile al seguente in applicazioni meno recenti. Queste applicazioni non sono state codificate in che modo intenzionalmente; questi problemi sono stati appena poco errori dispersi qua e là, errori di programmi gestiti ottenere lo stoccaggio con perché si è verificato non per causare problemi quando si esegue in combinazione con il gestore heap di Windows 95. E quindi quando questi programmi vengono eseguiti su qualsiasi altra versione di Windows, si sono blocchi perché le altre versioni di Windows hanno un diverso Manager di heap.

A questo punto, questo non rende il gestore di heap di Windows 95 “ migliori ” o “ più solida ” rispetto agli altri. È semplicemente differente. Esistono probabilmente solo come molti comportamenti che a sopravvivere senza arresto anomalo in Windows 7 dovrebbe avere arresto anomalo in Windows 95. L'effetto che desidera visualizzare è self-selection semplicemente: Se un programma è stato scritto nel 1995 aveva un bug che si sia verificato un arresto anomalo in Windows 95, si sarebbe necessario notare e risolvere il problema perché Windows 95 era la piattaforma di destinazione!

Quando è attivata la correzione rapida per la compatibilità EmulateHeap su un processo, il gestore di heap del comportamento verrà modificato in modo che consente di allineare tutte le stelle a esattamente le posizioni in che cui si trovavano nel 1995. Tutti coincidences si è verificato in Windows 95, ovvero quelle coincidences applicazioni sono stati involontariamente affidarsi, ancora una volta sono obbligati a verificarsi, in modo che le applicazioni contenenti questi tipi di errori dovrebbe continuare a eseguire in esattamente come quello precedente. Attenzione si forzare tutti coincidences alla riga di significa anche che le nuove funzionalità dell'heap, ad esempio la ridotta frammentazione deve essere disattivata, perché tali funzionalità sarebbero shift coincidences che sono stati affidarsi applicazioni.

Che spiega la parte semplice.

Il motivo per cui che questo è pazzesco: La modalità di compatibilità delle applicazioni utenti gestiti per emulare il gestore di heap di Windows 95 in modo perfettamente che ricorrevano semplicemente una copia del codice sorgente gestore heap di Windows 95 viene ricompilata e aggiunti all'infrastruttura di compatibilità. In altre parole, vi è una copia di un blocco significativo del kernel di Windows 95 all'interno il framework di compatibilità dell'applicazione Windows. Errata un'intera copia di Microsoft Bob, ma in questo caso, il frammento di codice lifted intatti da Windows 95 è maggiore di ballast; se è attivata la correzione rapida per la compatibilità EmulateHeap in un processo che codice antichi ottiene caricato dal disco rigido e inizia a svolgere il lavoro effettivo.

Windows 7 dispone di un nuovo sottosistema fault tolerant heap che tenta di rilevare numerose classi di errori di memoria heap semplice applicazione e applicare automaticamente rimedi. Ad esempio libera double fault tolerant heap rileva e corregge, i sovraccarichi del buffer di heap (sovraccarichi almeno piccoli) e l'utilizzo di memoria dopo aver liberato si (almeno se si utilizza solo un breve periodo di tempo dopo avere liberato). Questa soluzione più generica auspicabile, significa che la prossima versione di Windows non è necessario includere una copia del gestore di heap di Windows 7 all'interno dei file di compatibilità dell'infrastruttura.

Raymond Chen * Sito Web, the Old New Thing e libro (Addison-Wesley, 2007), in modo identico intitolato riguardano Windows cronologia, programmazione Win32 e distruzione accidentalmente il suo cuffie Zune.*

Contenuto correlato