Kontexthandles "Strict" und "Typ strikt"
Verwenden Sie das Attribut strict_context_handle für alle Kontexthandles. Standardmäßig ist ein Kontexthandle keiner Schnittstelle zugeordnet. Das bedeutet, dass ein Kontexthandle auf einer Schnittstelle erstellt und dann an eine andere übergeben werden kann. Dies ist ein einfacher Angriff, und viele RPC-Server können ihn nicht verhindern.
Wenn zwei Schnittstellen im selben Prozess koexistieren, kann ein Angreifer ein Kontexthandle auf einer Schnittstelle öffnen und an eine andere übergeben, die möglicherweise die unerwarteten Daten übergibt. Viele Entwickler glauben, dass ihre Software die einzige Schnittstelle in einem Prozess ist, aber dies ist häufig nicht der Fall, da sowohl das System als auch viele Drittanbieterkomponenten RPC intern verwenden und diese Schnittstellen Kontexthandles erstellen können. Wenn das attribut strict_context_handle verwendet wird, stellt die RPC-Laufzeit sicher, dass ein auf einer Schnittstelle erstellter Kontext als Argument nur an Methoden dieser Schnittstelle übergeben werden kann.
In Situationen, in denen eine Anwendung für Windows Vista entwickelt wird, ist die Verwendung von type_strict_context_handle verfügbar und wird empfohlen. Kontexthandles sind einem bestimmten Typ standardmäßig nicht zugeordnet. Wenn mehrere Typen von Kontexthandles im selben Prozess verwendet werden, ist es für einen böswilligen Client möglich, ein Kontexthandle anstelle eines anderen zu übergeben, um unerwünschte Ergebnisse zu erzeugen. Die Verwendung von type_strict_context_handle ermöglicht es Anwendungen, die Konsistenz des Kontexthandletyps zu erzwingen und die Verwendung nicht übereinstimmender Kontexthandletypen zu verhindern.