Nach aufgerufen wird, speichert führen Sie zuerst den Dienst Thread-ID. Der Dienst wird diese ID verwenden, um selbst schließen, indem Sie eine WM_QUIT Nachricht mithilfe der Win32-API-Funktion, PostThreadMessage.
Laufen dann ruft die Win32-API-Funktion, CoInitializeEx. Standardmäßig übergeben führen das COINIT_MULTITHREADED -Flag an die Funktion. Dieses Flag gibt an, dass das Programm ist als Freethread-Server.
Jetzt können Sie die Sicherheit mithilfe von CSecurityDescriptorangeben. Diese Klasse vereinfacht die Aufgabe der Einrichtung und vornehmen von Änderungen an die discretionary Access Control List (DACL) — eine Liste der Access-Zugriffssteuerungseinträge (ACEs), wo jeder ACE definiert den Zugriff auf ein Win32-Objekt.
Standardmäßig generiert der ATL COM AppWizard einen Aufruf an die InitializeFromThreadToken -Memberfunktion der CSecurityDescriptor. Initialisiert das Objekt Sicherheitsbeschreibung um eine null-DACL, was bedeutet, dass jeder Benutzer Zugriff auf das Objekt hat.
Der einfachste Weg um Benutzerzugriff zu ändern ist mit dem verweigern und zulassen Memberfunktionen von CSecurityDescriptor. Diese Funktionen hinzufügen eines ACE zum vorhandenen DACL. Jedoch hat verweigern immer Vorrang, da verweigern den ACE an den Anfang der DACL, fügt während zulassen es bis zum Ende fügt. Verweigern und zulassen übergeben den Benutzernamen als ersten Parameter und deren Zugriffsrechte (in der Regel COM_RIGHTS_EXECUTE) als die zweite.
Daran erinnern Sie, dass die null-DACL erstellt von InitializeFromThreadToken alle Benutzer Zugriff auf das COM-Objekt gewährt. Jedoch sobald Sie zulassen , einen Zugriffssteuerungseintrag hinzuzufügen aufrufen, nur das angegeben, dass Benutzer Zugriff haben werden. Das folgende Codebeispiel zeigt einen Aufruf auf zulassen:
CSecurityDescriptor sd;
SD.InitializeFromThreadToken ();
Wenn (bAllowOneUser)
{
&Nbsp; SD.("MYDOMAIN\\myuser", COM_RIGHTS_EXECUTE) ermöglichen;
}
CoInitializeSecurity (sd, 1, NULL, NULL,
RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL, EOAC_NONE, NULL)
Wenn die Variable, bAllowOneUser , wahrist, dann nur die angegebenen Benutzer hat Zugriff, da nur dieses Benutzers ACE in der DACL ist. Wenn bAllowOneUser ist falsch, dann alle Benutzer Zugriff haben, da die DACL null ist.
Wenn Sie nicht den Dienst, um seine eigene Sicherheit angeben möchten, entfernen Sie den Aufruf der Win32-API-Funktion CoInitializeSecurityund COM wird dann die Sicherheitseinstellungen in der Registrierung zu ermitteln. Eine bequeme Möglichkeit zum Konfigurieren von Einstellungen in der Registrierung ist mit dem später in diesem Artikel beschriebenen DCOMCNFG -Dienstprogramm.
Sobald Sicherheit angegeben ist, wird das Objekt mit COM registriert, so dass neue Clients, um das Programm verbinden können. Schließlich das Programm erzählt der Dienststeuerungs-Manager, auf dem es ausgeführt wird und das Programm gibt eine Meldungsschleife. Das Programm bleibt laufen, bis es eine beenden-Meldung beim Herunterfahren Beiträge.
Weitere Informationen über Windows NT-Sicherheit finden Sie im MSDN-Artikel "Windows NT-Sicherheit in Theorie und Praxis".