Función QueryServiceObjectSecurity (winsvc.h)
La función QueryServiceObjectSecurity recupera una copia del descriptor de seguridad asociado a un objeto de servicio. También puede usar la función GetNamedSecurityInfo para recuperar un descriptor de seguridad.
Sintaxis
BOOL QueryServiceObjectSecurity(
[in] SC_HANDLE hService,
[in] SECURITY_INFORMATION dwSecurityInformation,
[out, optional] PSECURITY_DESCRIPTOR lpSecurityDescriptor,
[in] DWORD cbBufSize,
[out] LPDWORD pcbBytesNeeded
);
Parámetros
[in] hService
Identificador del administrador de control de servicio o del servicio. La función OpenSCManager devuelve los identificadores para el administrador de controles de servicio y la función OpenSCManager devuelve los identificadores de un servicio mediante la función OpenService o CreateService . El identificador debe tener el derecho de acceso READ_CONTROL.
[in] dwSecurityInformation
Conjunto de marcas de bits que indican el tipo de información de seguridad que se va a recuperar. Este parámetro puede ser una combinación de las marcas de bits de SECURITY_INFORMATION , con la excepción de que esta función no admite el valor de LABEL_SECURITY_INFORMATION .
[out, optional] lpSecurityDescriptor
Puntero a un búfer que recibe una copia del descriptor de seguridad del objeto de servicio especificado. El proceso de llamada debe tener el acceso adecuado para ver los aspectos especificados del descriptor de seguridad del objeto. La estructura SECURITY_DESCRIPTOR se devuelve en formato relativo propio .
[in] cbBufSize
Tamaño del búfer al que apunta el parámetro lpSecurityDescriptor , en bytes. El tamaño más grande permitido es de 8 kilobytes.
[out] pcbBytesNeeded
Puntero a una variable que recibe el número de bytes necesarios para devolver la información del descriptor de seguridad solicitada, si se produce un error en la función.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es 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 pueden establecerse mediante las funciones del Registro a las que llama el administrador de control de servicio.
Código devuelto | Descripción |
---|---|
|
El identificador especificado no se abrió con READ_CONTROL acceso o el proceso de llamada no es el propietario del objeto. |
|
El identificador especificado no es válido. |
|
La información del descriptor de seguridad es demasiado grande para el búfer lpSecurityDescriptor . El número de bytes necesarios para obtener toda la información se devuelve en el parámetro pcbBytesNeeded . No se escribe nada en el búfer lpSecurityDescriptor . |
|
La información de seguridad especificada no es válida. |
Comentarios
Cuando se crea un servicio, el administrador de control de servicios 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 cambiar el descriptor de seguridad, llame a la función SetServiceObjectSecurity . Para obtener una descripción del descriptor de seguridad predeterminado para un objeto de servicio, consulte Derechos de acceso y seguridad de servicio.
Para leer el propietario, el grupo o la DACL desde el descriptor de seguridad del objeto de servicio, se debe haber concedido al proceso de llamada READ_CONTROL acceso cuando se abrió el identificador. Para obtener READ_CONTROL acceso, el autor de la llamada debe ser el propietario del objeto o la DACL del objeto debe conceder el acceso.
Para leer el SACL desde el descriptor de seguridad, se debe haber concedido al proceso de llamada ACCESS_SYSTEM_SECURITY acceso cuando se abrió el identificador. La manera correcta de obtener este acceso es habilitar el privilegio SE_SECURITY_NAME en el token actual del autor de la llamada, abrir el identificador para ACCESS_SYSTEM_SECURITY acceso y, a continuación, deshabilitar el privilegio.
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 |