CServiceModule::Run

Dopo essere stato chiamato, eseguire prima memorizza filo ID. del servizio Il servizio utilizzerà questo ID per sé chiudere inviando un messaggio WM_QUIT mediante la funzione API Win32, PostThreadMessage.

Eseguire quindi chiama la funzione API Win32, CoInitializeEx. Per impostazione predefinita, eseguire passa il flag COINIT_MULTITHREADED alla funzione. Questo flag indica che il programma è di essere un server a thread libero.

Ora è possibile specificare la protezione utilizzando CSecurityDescriptor. Questa classe semplifica notevolmente il compito di predisporre e di apportare modifiche all'elenco di controllo di accesso discrezionale (DACL) — un elenco di voci di controllo di accesso (ACE), dove ogni ACE definisce l'accesso a un oggetto Win32.

Per impostazione predefinita, la creazione guidata applicazione COM ATL genera una chiamata alla funzione membro InitializeFromThreadToken di CSecurityDescriptor. Questo Inizializza un DACL null, il che significa che ogni utente ha accesso all'oggetto descrittore di sicurezza dell'oggetto.

Il modo più semplice per cambiare l'accesso degli utenti è con Deny e Consenti funzioni membro di CSecurityDescriptor. Queste funzioni aggiungere un asso del DACL esistente. Tuttavia, Deny ha sempre priorità poiché nega aggiunge l'asso all'inizio del DACL, mentre Consenti si aggiunge alla fine. Sia Deny e Consenti passare il nome utente come primo parametro e i diritti di accesso (in genere COM_RIGHTS_EXECUTE) come secondo.

Ricordiamo che l'elenco DACL null creato da InitializeFromThreadToken garantisce a tutti gli utenti di accesso all'oggetto COM. Tuttavia, non appena si chiamano Consenti per aggiungere un asso, solo quello specificato utente avrà accesso. Il codice seguente mostra una chiamata su Consenti:

CSecurityDescriptor sd;
SD.InitializeFromThreadToken ();

Se (bAllowOneUser)
{
 nbsp; SD.Consentire ("MYDOMAI&N\\myuser", COM_RIGHTS_EXECUTE);
}
CoInitializeSecurity (sd, -1, NULL, NULL,
                     RPC_C_AUTHN_LEVEL_PKT,
                     RPC_C_IMP_LEVEL_IMPERSONATE,
                     VALORI NULL, EOAC_NONE)

Se la variabile, bAllowOneUser , è vero, allora solo quella specificata utente ha accesso, perché solo di tale utente ACE è in DACL. Se bAllowOneUser è falso, allora tutti gli utenti hanno accesso perché l'elenco DACL è null.

Se non volete al servizio di specificare la propria sicurezza, rimuovere la chiamata alla funzione API Win32, CoInitializeSecuritye COM sarà quindi determinare le impostazioni di protezione dal Registro di sistema. Un modo conveniente per configurare le impostazioni del Registro di sistema è con l'utilità DCOMCNFG descritto più avanti in questo articolo.

Una volta che la sicurezza viene specificato, l'oggetto viene registrato con COM, affinché i nuovi clienti possono connettersi al programma. Infine, il programma racconta SCM che è in esecuzione e il programma entra in un ciclo di messaggi. Il programma rimane in esecuzione fino a quando essa posti un messaggio di uscita all'arresto del servizio.

Per ulteriori informazioni sulla protezione di Windows NT, vedere l'articolo di MSDN "Sicurezza Windows NT in teoria e pratica".

Index