Festlegen Process-Wide Sicherheit mit CoInitializeSecurity

Mit der CoInitializeSecurity-Funktion können Sie komplexe Sicherheitsszenarien steuern, indem Sie die Sicherheit für eine Anwendung programmgesteuert festlegen. In diesem Thema werden Szenarien beschrieben, in denen Sie CoInitializeSecurity verwenden können, und enthält einige Details zur Verwendung.

Es gibt mehrere Gründe, warum Sie CoInitializeSecurity verwenden sollten, um die prozessweite Sicherheit in Ihrem Programm festzulegen. Obwohl Sie beispielsweise die Authentifizierungsebene und die Zugriffsberechtigungen für die Anwendung mithilfe von dcomcnfg.exe festlegen können, ist die Standardidentitätswechselebene für den Computer möglicherweise nicht die, die Sie für Ihren Prozess benötigen. Die einzige Möglichkeit, diese Einstellung für Ihren Prozess zu ändern, besteht darin , CoInitializeSecurity aufzurufen.

Wenn Sie den Schannel-Sicherheitsanbieter verwenden möchten, müssen Sie ihn in einem Aufruf von CoInitializeSecurity als Authentifizierungsdienst angeben.

Ein weiteres häufiges Szenario, in dem Sie prozessweite Sicherheit programmgesteuert festlegen können, ist, wenn Sie die Standardsicherheit für den gesamten Prozess festlegen möchten, aber mindestens ein Objekt in diesem Prozess vorhanden ist, die Schnittstellen mit besonderen Sicherheitsanforderungen verfügbar machen. In diesem Fall können Sie CoInitializeSecurity aufrufen, um die Sicherheit für den Prozess festzulegen, sodass COM die meisten Sicherheitsprüfungen verarbeiten kann, und Sie können andere Methoden aufrufen, um die Sicherheit für die Objekte mit besonderen Sicherheitsanforderungen festzulegen. Das Aufrufen dieser Methoden und Funktionen wird unter Festlegen der Sicherheit auf der Schnittstellenproxyebene beschrieben.

Wenn Ihre Anwendung über sehr spezielle Sicherheitsanforderungen verfügt, z. B. bestimmte Gruppen je nach Tageszeit Zugriff auf verschiedene Objekte zulassen, sollten Sie ihre gesamte Sicherheit programmgesteuert verarbeiten und sicherstellen, dass COM überhaupt keine automatische Überprüfung für Sie durchführt. Dazu müssen Sie CoInitializeSecurity aufrufen und dabei den dwAuthnLevel-Parameter auf none und den pVoid-Parameter auf NULL festlegen. Wenn Sie über ein eigenes Sicherheitspaket verfügen, müssen Sie es auch im Parameter pAuthnSvc registrieren. Anschließend können Sie Ihre gesamte Sicherheit programmgesteuert durch Aufrufe der Schnittstelle auf Proxyebene und funktionen verarbeiten, die unter Festlegen der Sicherheit auf der Schnittstellenproxyebene beschrieben sind.

CoInitializeSecurity bietet eine Vielzahl von Funktionen. Wenn Sie CoInitializeSecurity aufrufen, werden die Registrierungswerte ignoriert, und stattdessen werden die Sicherheitsinitialisierungswerte verwendet, die Sie an den Aufruf übergeben. Je nach gewünschtem Ergebnis kann der erste Parameter pVoid auf drei verschiedene Typen von Werten verweisen: ein SECURITY_DESCRIPTOR , ein IAccessControl-Objekt oder ein Zeiger auf eine AppID. In den meisten Fällen verwenden Sie Windows-Funktionen, um eine SECURITY_DESCRIPTOR zu erstellen, auf die pVoid zeigt.

pVoid kann jedoch auch auf ein IAccessControl-Objekt verweisen.

Um coInitializeSecurity anzugeben, dass Sie ein IAccessControl-Objekt an pVoid übergeben, müssen Sie den EOAC_ACCESS_CONTROL-Wert an den dwCapabilities-Parameter übergeben. Da CoInitializeSecurity die Ergebnisse von Zugriffsprüfungen zwischenspeichert, darf die Zugriffssteuerungsliste nach dem Aufruf von CoInitializeSecurity nicht geändert werden.

Ein weiterer Werttyp, den Sie an den pVoid-Parameter übergeben können, ist ein Zeiger auf eine GUID, bei der es sich um die AppID Ihrer Anwendung handelt. Wenn pVoid ein Zeiger auf eine AppID ist, müssen Sie EOAC_APPID im pCapabilities-Parameter angeben, damit die Funktion weiß, welcher Wert in pVoid zu erwarten ist. Wenn pVoid auf eine AppID zeigt, verwendet CoInitializeSecurity nur die Registrierung für Authentifizierungswerte und ignoriert alle anderen Parameter für CoInitializeSecurity.

Festlegen Process-Wide Sicherheit