Función SetServiceObjectSecurity (winsvc.h)

[SetServiceObjectSecurity está disponible para su uso en los sistemas operativos especificados en la sección Requisitos. En versiones posteriores podría modificarse o no estar disponible. En su lugar, use la función SetNamedSecurityInfo .]

La función SetServiceObjectSecurity establece el descriptor de seguridad de un objeto de servicio.

Sintaxis

BOOL SetServiceObjectSecurity(
  [in] SC_HANDLE            hService,
  [in] SECURITY_INFORMATION dwSecurityInformation,
  [in] PSECURITY_DESCRIPTOR lpSecurityDescriptor
);

Parámetros

[in] hService

Identificador del servicio. La función OpenService o CreateService devuelve este identificador. El acceso necesario para este identificador depende de la información de seguridad especificada en el parámetro dwSecurityInformation .

[in] dwSecurityInformation

Especifica los componentes del descriptor de seguridad que se va a establecer. Este parámetro puede ser una combinación de los valores siguientes. Tenga en cuenta que las marcas no administradas por SetServiceObjectSecurity se omitirán silenciosamente.

Valor Significado
DACL_SECURITY_INFORMATION
Establece la lista de control de acceso discrecional (DACL) del objeto . El identificador especificado por hService debe tener acceso WRITE_DAC o el proceso de llamada debe ser el propietario del objeto.
GROUP_SECURITY_INFORMATION
Establece el identificador de seguridad del grupo principal (SID) del objeto. El identificador especificado por hService debe tener WRITE_OWNER acceso o el proceso de llamada debe ser el propietario del objeto.
OWNER_SECURITY_INFORMATION
Establece el SID del propietario del objeto. El identificador especificado por hService debe tener WRITE_OWNER acceso, o el proceso de llamada debe ser el propietario del objeto o tener habilitado el privilegio SE_TAKE_OWNERSHIP_NAME.
SACL_SECURITY_INFORMATION
Establece la lista de control de acceso del sistema (SACL) del objeto . El identificador especificado por hService debe tener acceso ACCESS_SYSTEM_SECURITY.

Para obtener acceso ACCESS_SYSTEM_SECURITY

  1. Habilite el privilegio SE_SECURITY_NAME en el token de acceso actual del autor de la llamada.
  2. Abra el identificador para ACCESS_SYSTEM_SECURITY acceso.
  3. Deshabilite el privilegio.

[in] lpSecurityDescriptor

Puntero a una estructura SECURITY_DESCRIPTOR que contiene la nueva información de seguridad.

Valor devuelto

Si la función se ejecuta correctamente, la función devuelve un valor distinto de cero.

Si se produce un error en la función, devuelve cero. Para obtener información de error extendida, llame a GetLastError.

El administrador de control de servicios puede establecer los siguientes códigos de error. Otros códigos de error se pueden establecer mediante las funciones del Registro a las que llama el administrador de control de servicio.

Código devuelto Descripción
ERROR_ACCESS_DENIED
El identificador especificado no se abrió con el acceso necesario o el proceso de llamada no es el propietario del objeto.
ERROR_INVALID_HANDLE
El identificador especificado no es válido.
ERROR_INVALID_PARAMETER
La información de seguridad especificada o el descriptor de seguridad no son válidos.
ERROR_SERVICE_MARKED_FOR_DELETE
El servicio especificado se ha marcado para su eliminación.

Comentarios

La función SetServiceObjectSecurity establece las partes especificadas del descriptor de seguridad del objeto de servicio en función de la información especificada en el búfer lpSecurityDescriptor . Esta función reemplaza cualquier o toda la información de seguridad asociada al objeto de servicio, según las marcas establecidas en el parámetro dwSecurityInformation y sujeto a los derechos de acceso del proceso de llamada.

Cuando se crea un servicio, el administrador de controles de servicio asigna un descriptor de seguridad predeterminado al objeto de servicio. Para recuperar una copia del descriptor de seguridad de un objeto de servicio, llame a la función QueryServiceObjectSecurity . Para obtener una descripción del descriptor de seguridad predeterminado para un objeto de servicio, consulte Derechos de acceso y seguridad del servicio.

Tenga en cuenta que conceder cierto acceso a usuarios que no son de confianza (como SERVICE_CHANGE_CONFIG o SERVICE_STOP) puede permitirles interferir con la ejecución del servicio y, posiblemente, permitirles ejecutar aplicaciones en la cuenta localSystem.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winsvc.h (incluye Windows.h)
Library Advapi32.lib
Archivo DLL Advapi32.dll

Consulte también

CreateService

Access Control de bajo nivel

Funciones de Access Control de bajo nivel

OpenService

QueryServiceObjectSecurity

SECURITY_DESCRIPTOR