Después de ser llamado, primero ejecute almacena identificador de subproceso. del servicio El servicio utilizará este ID para cerrar a sí mismo enviando un mensaje WM_QUIT utilizando la función API de Win32 PostThreadMessage.
Ejecutar , a continuación, llama a la función de API de Win32, CoInitializeEx. De forma predeterminada, ejecutar pasa la bandera COINIT_MULTITHREADED a la función. Este indicador indica que el programa va a ser un servidor de subprocesamiento libre.
Ahora puede especificar seguridad mediante CSecurityDescriptor. Esta clase simplifica enormemente la tarea de establecer y hacer cambios a la lista de control de acceso discrecional (DACL) — una lista de entradas de control de acceso (ACE), donde cada ACE define el acceso a un objeto de Win32.
De forma predeterminada, el Asistente para aplicaciones de ATL COM genera una llamada a la función de miembro de InitializeFromThreadToken de CSecurityDescriptor. Esto inicializa el descriptor de seguridad del objeto a una DACL null, lo que significa que cualquier usuario tiene acceso al objeto.
La forma más sencilla de cambiar el usuario acceso es Denegar y Permitir las funciones miembro de CSecurityDescriptor. Estas funciones añadir un as a la DACL existente. Sin embargo, Denegar siempre tiene prioridad desde Denegar agrega ACE al principio de la DACL, mientras que Permitir la añade al final. Denegar y Permitir pasan el nombre de usuario como primer parámetro y los derechos de acceso (normalmente, COM_RIGHTS_EXECUTE) como el segundo.
Recordar que la DACL null creada por InitializeFromThreadToken concede a todos los usuarios acceso al objeto COM. Sin embargo, tan pronto como llamar a Permitir agregar una ACE, sólo que especifica usuario tendrá acceso. El código siguiente muestra una llamada a Permitir:
CSecurityDescriptor sd;
SD.(De InitializeFromThreadToken);
Si (bAllowOneUser)
{
nbsp; SD.Permitir ("MYDOMAI&N\\myuser", COM_RIGHTS_EXECUTE);
}
A CoInitializeSecurity (sd, -1, NULL, NULL,
RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL, EOAC_NONE, NULL)
Si la variable bAllowOneUser , es cierto, entonces sólo se indica el usuario tiene acceso porque sólo ese usuario ACE en la DACL. Si bAllowOneUser es FALSE, entonces todos los usuarios tienen acceso porque la DACL es null.
Si no desea que el servicio para especificar su propia seguridad, elimine la llamada a la función API de Win32 a CoInitializeSecurityy voluntad de COM entonces determinar la configuración de seguridad del registro. Es una forma cómoda de configurar las opciones de registro con la utilidad DCOMCNFG discutida más adelante en este artículo.
Una vez que se especifica la seguridad, el objeto está registrado con COM para que nuevos clientes puedan conectarse al programa. Por último, el programa indica el SCM que se está ejecutando y el programa entra en un bucle de mensajes. El programa sigue funcionando hasta que envía un mensaje salga al cierre de servicio.
Para obtener más información acerca de la seguridad de Windows NT, consulte el artículo de MSDN, "Seguridad de Windows NT en teoría y práctica".