CServiceModule::Run

Po wywołaniu, najpierw Uruchom przechowuje identyfikatora usługi wątku. Usługa wykorzysta ten identyfikator zamknąć sam wysyłając wiadomość WM_QUIT przy użyciu funkcji Win32 API PostThreadMessage.

Następnie Uruchom wywołuje funkcję interfejsu Win32 API, funkcja CoInitializeEx. Domyślnie uruchamiane przekazuje Flaga COINIT_MULTITHREADED funkcji. Ta flaga wskazuje, że program ma być serwerem bezwątkowe.

Teraz można określić zabezpieczeń przy użyciu CSecurityDescriptor. Ta klasa znacznie upraszcza zadania konfigurowania i wprowadzanie zmian do listy arbitralnej kontroli dostępu (DACL) — lista wpisów kontroli dostępu (ACE), gdzie każdy ACE określa dostęp do obiektu Win32.

Domyślnie ATL COM AppWizard generuje wywołanie funkcji członek InitializeFromThreadToken CSecurityDescriptor. Inicjuje deskryptora zabezpieczeń obiektu do wartości null DACL, co oznacza, że każdy użytkownik ma dostęp do obiektu.

Najłatwiejszym sposobem zmiany dostęp użytkownika jest Odmów i Zezwalaj Członkowskie funkcji CSecurityDescriptor. Te funkcje dodać wpis ACE do istniejącej listy DACL. Jednakże Odmów zawsze mają pierwszeństwo ponieważ Odmów dodaje asa na początek listy DACL, natomiast Zezwalaj dodaje ją do końca. Odmów i Zezwalaj przekazać nazwę użytkownika jako pierwszy parametr oraz prawa dostępu (zazwyczaj COM_RIGHTS_EXECUTE) jako drugi.

Przypominają, zerowy DACL, stworzony przez InitializeFromThreadToken udziela wszystkim użytkownikom dostęp do obiektu COM. Jednak tak szybko, jak tylko zostanie wywołana Zezwalaj , aby dodać wpis ACE, tylko że określony użytkownik będzie miał dostęp. Poniższy kod ilustruje wywołanie Zezwalaj:

CSecurityDescriptor sd;
SD.InitializeFromThreadToken ();

Jeżeli (bAllowOneUser)
{
 nbsp; SD.Zezwalaj ("MYDOMAI&N\\myuser", COM_RIGHTS_EXECUTE);
}
Metodę CoInitializeSecurity (sd, -1, wartości NULL, wartość NULL,
                     RPC_C_AUTHN_LEVEL_PKT,
                     RPC_C_IMP_LEVEL_IMPERSONATE,
                     WARTOŚĆ NULL, EOAC_NONE, NULL)

Jeśli zmienna, bAllowOneUser , jest TRUE, a następnie tylko jeden określony użytkownik ma dostęp, ponieważ tylko ten użytkownik ACE listy DACL. Jeśli bAllowOneUser jest Fałsz, a następnie wszyscy użytkownicy mają dostęp, ponieważ lista DACL jest zerowy.

Jeśli nie chcesz, aby usługa do określenia własnego bezpieczeństwa, usunąć wywołanie funkcji Win32 API, metodę CoInitializeSecurityi COM będzie następnie określają ustawień zabezpieczeń z rejestru. Jest to wygodny sposób skonfigurować ustawienia rejestru z programu narzędziowego DCOMCNFG omówiono w dalszej części tego artykułu.

Po zabezpieczeń jest określony, obiekt jest zarejestrowany z COM, tak, że nowi klienci mogą połączyć się z programu. Wreszcie program informuje SCM, czy jest uruchomiony i program wprowadzi Pętla wiadomości. Program pozostaje bieżących, dopóki nie księguje Zakończ komunikat na zamknięcie usługi.

Aby uzyskać więcej informacji o zabezpieczeniach systemu Windows NT zobacz artykuł MSDN, "Zabezpieczenia systemu Windows NT w teorii i praktyce."

Index