Derechos de acceso y seguridad de subprocesos
Microsoft Windows permite controlar el acceso a los objetos de subproceso. Para obtener más información sobre la seguridad, vea Modelo de control de acceso.
Puede especificar un descriptor de seguridad para un subproceso al llamar a la función CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThread o CreateRemoteThread . Si especifica NULL, el subproceso obtiene un descriptor de seguridad predeterminado. Las ACL del descriptor de seguridad predeterminado de un subproceso proceden del token principal o de suplantación del creador.
Para recuperar el descriptor de seguridad de un subproceso, llame a la función GetSecurityInfo . Para cambiar el descriptor de seguridad de un subproceso, llame a la función SetSecurityInfo .
El identificador devuelto por la función CreateThread tiene THREAD_ALL_ACCESS acceso al objeto de subproceso. Cuando se llama a la función GetCurrentThread , el sistema devuelve un pseudohandle con el acceso máximo que el descriptor de seguridad del subproceso permite al autor de la llamada.
Los derechos de acceso válidos para los objetos de subproceso incluyen los derechos de acceso estándar y algunos derechos de acceso específicos del subproceso. En la tabla siguiente se enumeran los derechos de acceso estándar utilizados por todos los objetos.
Value | Significado |
---|---|
DELETE (0x00010000L) | Necesario para eliminar el objeto. |
READ_CONTROL (0x00020000L) | Se requiere para leer información en el descriptor de seguridad del objeto, sin incluir la información en sacl. Para leer o escribir la SACL, debe solicitar el derecho de acceso ACCESS_SYSTEM_SECURITY . Para obtener más información, consulte Derecho de acceso SACL. |
SYNCHRONIZE (0x00100000L) | Derecho a utilizar el objeto para la sincronización. Esto permite que un subproceso espere hasta que el objeto esté en estado señalado. |
WRITE_DAC (0x00040000L) | Necesario para modificar la DACL en el descriptor de seguridad del objeto . |
WRITE_OWNER (0x00080000L) | Necesario para cambiar el propietario en el descriptor de seguridad del objeto. |
En la tabla siguiente se enumeran los derechos de acceso específicos del subproceso.
Value | Significado |
---|---|
SYNCHRONIZE (0x00100000L) | Habilita el uso del identificador de subproceso en cualquiera de las funciones de espera. |
THREAD_ALL_ACCESS | Todos los derechos de acceso posibles para un objeto de subproceso. Windows Server 2003 y Windows XP: El valor de la marca THREAD_ALL_ACCESS aumentó en Windows Server 2008 y Windows Vista. Si una aplicación compilada para Windows Server 2008 y Windows Vista se ejecuta en Windows Server 2003 o Windows XP, la marca THREAD_ALL_ACCESS contiene bits de acceso que no se admiten y la función que especifica esta marca produce un error con ERROR_ACCESS_DENIED. Para evitar este problema, especifique el conjunto mínimo de derechos de acceso necesarios para la operación. Si se debe usar THREAD_ALL_ACCESS, establezca _WIN32_WINNT en el sistema operativo mínimo de destino de la aplicación (por ejemplo, #define _WIN32_WINNT _WIN32_WINNT_WINXP ). Para obtener más información, vea Usar los encabezados de Windows. |
THREAD_DIRECT_IMPERSONATION (0x0200) | Necesario para un subproceso de servidor que suplanta a un cliente. |
THREAD_GET_CONTEXT (0x0008) | Necesario para leer el contexto de un subproceso mediante GetThreadContext. |
THREAD_IMPERSONATE (0x0100) | Se requiere para usar la información de seguridad de un subproceso directamente sin llamarla mediante un mecanismo de comunicación que proporciona servicios de suplantación. |
THREAD_QUERY_INFORMATION (0x0040) | Necesario para leer cierta información del objeto de subproceso, como el código de salida (vea GetExitCodeThread). |
THREAD_QUERY_LIMITED_INFORMATION (0x0800) | Necesario para leer cierta información de los objetos de subproceso (vea GetProcessIdOfThread). A un identificador que tiene el derecho de acceso THREAD_QUERY_INFORMATION se le concede automáticamente THREAD_QUERY_LIMITED_INFORMATION. Windows Server 2003 y Windows XP: Este derecho de acceso no se admite. |
THREAD_SET_CONTEXT (0x0010) | Necesario para escribir el contexto de un subproceso mediante SetThreadContext. |
THREAD_SET_INFORMATION (0x0020) | Necesario para establecer cierta información en el objeto de subproceso. |
THREAD_SET_LIMITED_INFORMATION (0x0400) | Necesario para establecer cierta información en el objeto de subproceso. Se concede automáticamente THREAD_SET_LIMITED_INFORMATION un identificador que tenga el derecho de acceso THREAD_SET_INFORMATION. Windows Server 2003 y Windows XP: Este derecho de acceso no se admite. |
THREAD_SET_THREAD_TOKEN (0x0080) | Necesario para establecer el token de suplantación para un subproceso mediante SetThreadToken. |
THREAD_SUSPEND_RESUME (0x0002) | Necesario para suspender o reanudar un subproceso (consulte SuspendThread y ResumeThread). |
THREAD_TERMINATE (0x0001) | Necesario para finalizar un subproceso mediante TerminateThread. |
Puede solicitar el derecho de acceso ACCESS_SYSTEM_SECURITY a un objeto de subproceso si desea leer o escribir la SACL del objeto. Para obtener más información, consulte Listas de control de acceso (ACL) y Derecho de acceso SACL.
Procesos protegidos
Los procesos protegidos mejoran la compatibilidad con Digital Rights Management. El sistema restringe el acceso a los procesos protegidos y a los subprocesos de los procesos protegidos.
Windows Server 2003 y Windows XP: Los procesos protegidos se agregaron a partir de Windows Vista.
No se permiten los siguientes derechos de acceso específicos desde un proceso a los subprocesos de un proceso protegido:
THREAD_ALL_ACCESS
THREAD_DIRECT_IMPERSONATION
THREAD_GET_CONTEXT
THREAD_IMPERSONATE
THREAD_QUERY_INFORMATION
THREAD_SET_CONTEXT
THREAD_SET_INFORMATION
THREAD_SET_TOKEN
THREAD_TERMINATE
El THREAD_QUERY_LIMITED_INFORMATION derecho se introdujo para proporcionar acceso a un subconjunto de la información disponible a través de THREAD_QUERY_INFORMATION.