Arbeitsspeicherschutz
Arbeitsspeicher, der zu einem Prozess gehört, wird implizit durch seinen privaten virtuellen Adressraum geschützt. Darüber hinaus bietet Windows Speicherschutz mithilfe der virtuellen Arbeitsspeicherhardware. Die Implementierung dieses Schutzes variiert je nach Prozessor. Beispielsweise können Codepages im Adressraum eines Prozesses als schreibgeschützt markiert und vor Änderungen durch Benutzermodusthreads geschützt werden.
Die vollständige Liste der Attribute finden Sie unter Memory Protection-Konstanten.
Kopierschutz bei Schreibzugriff
Der Kopierschutz beim Schreiben ist eine Optimierung, mit der mehrere Prozesse ihre virtuellen Adressräume so zuordnen können, dass sie eine physische Seite gemeinsam nutzen, bis einer der Prozesse die Seite ändert. Dies ist Teil einer Technik, die als verzögerte Auswertung bezeichnet wird und es dem System ermöglicht, physischen Arbeitsspeicher und Zeit zu sparen, indem erst dann ein Vorgang durchgeführt wird, wenn dies unbedingt erforderlich ist.
Angenommen, zwei Prozesse laden Seiten aus derselben DLL in ihre virtuellen Speicherplätze. Diese virtuellen Speicherseiten werden für beide Prozesse denselben physischen Speicherseiten zugeordnet. Solange keiner der Prozesse auf diese Seiten schreibt, können sie den gleichen physischen Seiten zuordnen und freigeben, wie im folgenden Diagramm dargestellt.

Wenn Prozess 1 auf eine dieser Seiten schreibt, wird der Inhalt der physischen Seite auf eine andere physische Seite kopiert, und die virtuelle Speicherzuordnung wird für Prozess 1 aktualisiert. Beide Prozesse verfügen nun über eine eigene Instanz der Seite im physischen Speicher. Daher ist es nicht möglich, dass ein Prozess auf eine freigegebene physische Seite schreibt und der andere Prozess die Änderungen sieht.

Laden von Anwendungen und DLLs
Wenn mehrere Instanzen derselben Windows Anwendung geladen werden, wird jede Instanz in einem eigenen geschützten virtuellen Adressraum ausgeführt. Ihre Instanzhandles (hInstance) haben jedoch in der Regel den gleichen Wert. Dieser Wert stellt die Basisadresse der Anwendung im virtuellen Adressraum dar. Wenn jede Instanz in ihre Standardbasisadresse geladen werden kann, kann sie denselben physischen Seiten mithilfe des Kopier-bei-Schreib-Schutzes zuordnen und diese für die anderen Instanzen freigeben. Das System ermöglicht es diesen Instanzen, die gleichen physischen Seiten gemeinsam zu verwenden, bis eine von ihnen eine Seite ändert. Wenn eine dieser Instanzen aus irgendeinem Grund nicht in die gewünschte Basisadresse geladen werden kann, erhält sie ihre eigenen physischen Seiten.
DLLs werden mit einer Standardbasisadresse erstellt. Jeder Prozess, der eine DLL verwendet, versucht, die DLL in ihren eigenen Adressraum unter der virtuellen Standardadresse für die DLL zu laden. Wenn mehrere Anwendungen eine DLL an ihrer virtuellen Standardadresse laden können, können sie die gleichen physischen Seiten für die DLL verwenden. Wenn ein Prozess die DLL aus irgendeinem Grund nicht unter der Standardadresse laden kann, lädt er die DLL an anderer Stelle. Der Kopierschutz beim Schreiben erzwingt, dass einige seiten der DLL für diesen Prozess auf verschiedene physische Seiten kopiert werden, da die Korrekturen für Sprunganweisungen auf den Seiten der DLL geschrieben werden und sich für diesen Prozess unterscheiden. Wenn der Codeabschnitt viele Verweise auf den Datenabschnitt enthält, kann dies dazu führen, dass der gesamte Codeabschnitt auf neue physische Seiten kopiert wird.