Festlegen Process-Wide Sicherheit über die Registrierung

Wenn Sie die Sicherheit für einen gesamten Prozess festlegen möchten, besteht eine Lösung darin, die Gewünschten Sicherheitsebenen in der Registrierung festzulegen. Wenn Ihre Anwendung CoInitializeSecurity nicht aufrufen kann oder Wenn Sie keine programmgesteuerte Sicherheit verwenden möchten, ist dies möglicherweise eine gute Option. Wenn Sie die prozessweite Sicherheit mithilfe der Registrierung festlegen möchten, sollten Sie beachten, dass COM beim Aufrufen von CoInitializeSecurity in Ihrem Programm die Werte in CoInitializeSecurity verwendet und die Registrierungswerte ignoriert.

Es gibt zwei Möglichkeiten, die Sicherheit in der Registrierung für Ihre Anwendung festzulegen:

  • Sie können Dcomcnfg.exe verwenden, der eine einfache Benutzeroberfläche zum Ändern von Sicherheitswerten bereitstellt. Alle COM-Server können mit Dcomcnfg.exe konfiguriert werden. Weitere Informationen finden Sie unter Setting Process-Wide Security Using DCOMCNFG. Clientanwendungen werden jedoch normalerweise nicht in Dcomcnfg.exe angezeigt, es sei denn, der Client erstellt eine GUID und gibt sie in die Registrierung ein.
  • Sie können Sicherheitswerte unter dem AppID-Schlüssel für die Anwendung festlegen. Im weiteren Verlauf dieses Themas wird erläutert, wie Sie die Sicherheit in der Registrierung mithilfe des AppID-Schlüssels festlegen.

Eine AppID ist eine GUID, die einen Serverprozess für eine oder mehrere Klassen darstellt. Jede Klasse ist genau einer AppID zugeordnet, und AppIDs können nur EXEs zugewiesen werden. DLLs erhalten appIDs nur dann, wenn sie in einem Ersatzzeichen ausgeführt werden, und dann ist es der Ersatzprozess, der über die AppID verfügt. Wenn mehrere DLLs in ein Ersatzzeichen geladen werden, verfügt jedes Ersatzzeichen nur über eine AppID.

Bei einigen COM-Servern generiert der Registrierungscode eine AppID und platziert Einträge in der Registrierung, die die AppID dem Namen der ausführbaren Datei zuordnen. Einige COM-Server bieten diese Funktionalität jedoch nicht. Wenn der Registrierungscode des Servers jedoch einen Eintrag für HKCR \ CLSID{ServerCLSID} \ LocalServer32 hinzufügt, wenn dcomcnfg.exe ausgeführt wird, wird automatisch eine AppID für die CLSID hinzugefügt.

Für einen COM-Client, der kein Server ist, wird diese Zuordnung nicht erstellt, da der Client nie registriert ist. Daher muss der Client die erforderlichen Registrierungseinträge entweder programmgesteuert mithilfe der Registrierungsfunktionen oder mit regedit erstellen, um die Sicherheit mithilfe des AppID-Schlüssels festzulegen.

Wenn Sie die prozessweite Sicherheit in der Registrierung unter dem AppID-Schlüssel festlegen möchten, beachten Sie, dass unter dem AppID-Schlüssel zwei benannte Werte vorhanden sind, die Sie ohne Administratorberechtigungen festlegen können:

Die Werte AuthenticationLevel und AccessPermission werden unabhängig voneinander festgelegt und weisen separate Standardwerte auf. Wenn der AuthenticationLevel-Wert nicht vorhanden ist, wird der LegacyAuthenticationLevel-Wert als Standardwert verwendet. Wenn der AccessPermission-Wert nicht vorhanden ist, wird der DefaultAccessPermission-Wert als Standardwert verwendet. Die Werte AuthenticationLevel und AccessPermission sind jedoch wie folgt miteinander verknüpft:

  • Wenn AuthenticationLevel kein Wert ist, werden die Werte AccessPermission und DefaultAccessPermission für diese Anwendung ignoriert.
  • Wenn AuthenticationLevel nicht vorhanden ist und LegacyAuthenticationLevel keine ist, werden die Werte AccessPermission und DefaultAccessPermission für diese Anwendung ignoriert.

Festlegen von Process-Wide Security