Festlegen Process-Wide 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 es werden einige Details zur Verwendung erläutert.

Es gibt mehrere Gründe, warum Sie CoInitializeSecurity verwenden möchten, um prozessweite Sicherheit in Ihrem Programm zu gewährleisten. Obwohl Sie beispielsweise die Authentifizierungsebene und die Zugriffsberechtigungen für die Anwendung mithilfe von dcomcnfg.exe festlegen können, ist die Standardmäßige Identitätswechselebene für den Computer möglicherweise nicht die ebene, die Sie für Ihren Prozess wünschen. Die einzige Möglichkeit, diese Einstellung für Ihren Prozess zu ändern, besteht im Aufrufen von CoInitializeSecurity.

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 sie über ein oder mehrere Objekte in diesem Prozess verfügen, die Schnittstellen mit besonderen Sicherheitsanforderungen verfügbar machen. In diesem Fall können Sie CoInitializeSecurity aufrufen, um die Sicherheit für den Prozess zu erhöhen, sodass COM die meisten Sicherheitsüberprüfungen verarbeiten kann, und Sie können andere Methoden aufrufen, um die Sicherheit für die Objekte mit besonderen Sicherheitsanforderungen zu erhöhen. Das Aufrufen dieser Methoden und Funktionen wird unter Setting Security at the Interface Proxy Level (Festlegen der Sicherheit auf Schnittstellenproxyebene) beschrieben.

Wenn Ihre Anwendung sehr spezielle Sicherheitsanforderungen hat, z. B. bestimmten Gruppen den Zugriff auf unterschiedliche Objekte abhängig von der Tageszeit zu erlauben, sollten Sie ihre Sicherheit programmgesteuert behandeln und so sicherstellen, dass COM keine automatische Überprüfung für Sie vorn hat. Hierzu müssen Sie CoInitializeSecurityaufrufen, 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 pAuthnSvc-Parameter registrieren. Anschließend können Sie ihre eigene Sicherheit programmgesteuert über Aufrufe der Proxyebenenschnittstelle und der Funktionen behandeln, die unter Festlegen der Sicherheit auf Schnittstellenproxyebene beschrieben sind.

CoInitializeSecurity bietet eine reihe von Funktionen. Wenn Sie CoInitializeSecurity aufrufen, werden die Registrierungswerte ignoriert, und stattdessen werden die Sicherheitsin initialisierungswerte verwendet, die Sie an den Aufruf übergeben. Je nach ergebnisorientiertem 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 einen _ SECURITY-DESCRIPTOR zu erstellen, auf den pVoid zeigen wird.

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 Zugriffsüberprü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 verweist, verwendet CoInitializeSecurity nur die Registrierung für Authentifizierungswerte und ignoriert alle anderen Parameter für CoInitializeSecurity.

Festlegen Process-Wide Sicherheit