Gewusst wie: Erstellen einer teilweise vertrauenswürdigen Anwendung durch Entfernen der Abhängigkeit der CRT-Bibliotheks-DLL

In diesem Thema wird erläutert, wie eine teilweise vertrauenswürdige Common Language Runtime-Anwendung mit Visual C++ erstellt wird, indem die Abhängigkeit von msvcm90.dll aufgehoben wird.

Eine mit /clr erstellte Visual C++-Anwendung ist von msvcm90.dll abhängig, die Teil der C-Laufzeitbibliothek ist. Wenn die Anwendung in einer teilweise vertrauenswürdigen Umgebung verwendet werden soll, erzwingt die CLR bestimmte Regeln für die Codezugriffssicherheit bezüglich der DLL. Deshalb muss diese Abhängigkeit entfernt werden, da msvcm90.dll systemeigenen Code enthält und die Sicherheitsrichtlinien für den Codezugriff nicht entsprechend erzwungen werden können.

Wenn Ihre Anwendung keine Funktionen der C-Laufzeitbibliothek verwendet und Sie die Abhängigkeit von dieser Bibliothek aus dem Code entfernen möchten, müssen Sie die Linkeroption /NODEFAULTLIB:msvcmrt.lib verwenden und eine Verknüpfung mit ptrustm.lib oder ptrustmd.lib herstellen. Diese Bibliotheken enthalten Objektdateien zur Initialisierung einer Anwendung sowie zur Aufhebung der Initialisierung, vom Initialisierungscode verwendete Ausnahmeklassen sowie Code zur verwalteten Ausnahmebehandlung. Durch das Verknüpfen mit einer dieser Bibliotheken wird jede Abhängigkeit von msvcm90.dll. aufgehoben.

Tipp

Die Reihenfolge der Aufhebung der Initialisierung der Assemblys unterscheidet sich möglicherweise bei Anwendungen, die die ptrust-Bibliotheken verwenden. Bei normalen Anwendungen werden die Assemblys i. d R., jedoch nicht garantiert, in der umgekehrten Reihenfolge entladen, in der sie geladen wurden. Bei teilweise vertrauenswürdigen Anwendungen werden Assemblys in derselben Reihenfolge entladen, in der sie geladen werden. Auch dies ist jedoch nicht garantiert der Fall.

So erstellen Sie eine teilweise vertrauenswürdige gemischte (/clr) Anwendung

  1. Um die Abhängigkeit von msvcm90.dll aufzuheben, müssen Sie für den Linker angeben, dass diese Bibliothek nicht einbezogen werden soll. Verwenden Sie dazu die Linkeroption /NODEFAULTLIB:msvcmrt.lib. Informationen dazu, wie dies mit der Visual Studio-Entwicklungsumgebung oder programmgesteuert durchgeführt wird, finden Sie unter /NODEFAULTLIB (Bibliotheken ignorieren).

  2. Fügen Sie den Linkereingabeabhängigkeiten eine der ptrustm-Bibliotheken hinzu. Verwenden Sie ptrustm.lib, wenn Sie die Anwendung im Releasemodus erstellen. Im Debugmodus verwenden Sie ptrustmd.lib. Informationen dazu, wie dies mit der Visual Studio-Entwicklungsumgebung oder programmgesteuert durchgeführt wird, finden Sie unter .LIB-Dateien als Linkereingabe.

Siehe auch

Referenz

/link (Optionen an Linker übergeben)

Konzepte

Gemischte (systemeigene und verwaltete) Assemblys

Initialisierung gemischter Assemblys

Bibliotheksunterstützung für verschiedene Assemblys

Weitere Ressourcen

Sicherheit in systemeigenem Code und .NET Framework-Code