Compartilhar via


Função SetServiceObjectSecurity (winsvc.h)

[SetServiceObjectSecurity está disponível para uso nos sistemas operacionais especificados na seção Requisitos. Ele poderá ser alterado ou ficar indisponível em versões subsequentes. Em vez disso, use a função SetNamedSecurityInfo .]

A função SetServiceObjectSecurity define o descritor de segurança de um objeto de serviço.

Sintaxe

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

Parâmetros

[in] hService

Um identificador para o serviço. Esse identificador é retornado pela função OpenService ou CreateService . O acesso necessário para esse identificador depende das informações de segurança especificadas no parâmetro dwSecurityInformation .

[in] dwSecurityInformation

Especifica os componentes do descritor de segurança a ser definido. Esse parâmetro pode ser uma combinação dos seguintes valores. Observe que os sinalizadores não manipulados por SetServiceObjectSecurity serão silenciosamente ignorados.

Valor Significado
DACL_SECURITY_INFORMATION
Define a DACL ( lista de controle de acesso discricionário ) do objeto. O identificador especificado por hService deve ter acesso WRITE_DAC ou o processo de chamada deve ser o proprietário do objeto.
GROUP_SECURITY_INFORMATION
Define o SID ( identificador de segurança do grupo primário) do objeto. O identificador especificado por hService deve ter acesso WRITE_OWNER ou o processo de chamada deve ser o proprietário do objeto.
OWNER_SECURITY_INFORMATION
Define o SID do proprietário do objeto . O identificador especificado por hService deve ter acesso WRITE_OWNER ou o processo de chamada deve ser o proprietário do objeto ou ter o privilégio de SE_TAKE_OWNERSHIP_NAME habilitado.
SACL_SECURITY_INFORMATION
Define a SACL ( lista de controle de acesso do sistema ) do objeto. O identificador especificado por hService deve ter ACCESS_SYSTEM_SECURITY acesso.

Para obter acesso ACCESS_SYSTEM_SECURITY

  1. Habilite o privilégio SE_SECURITY_NAME no token de acesso atual do chamador.
  2. Abra o identificador para acesso ACCESS_SYSTEM_SECURITY.
  3. Desabilite o privilégio.

[in] lpSecurityDescriptor

Um ponteiro para uma estrutura SECURITY_DESCRIPTOR que contém as novas informações de segurança.

Retornar valor

Se a função for bem-sucedida, a função retornará diferente de zero.

Se a função falhar, ela retornará zero. Para obter informações de erro estendidas, chame GetLastError.

Os códigos de erro a seguir podem ser definidos pelo gerenciador de controle de serviço. Outros códigos de erro podem ser definidos pelas funções do Registro que são chamadas pelo gerenciador de controle de serviço.

Código de retorno Descrição
ERROR_ACCESS_DENIED
O identificador especificado não foi aberto com o acesso necessário ou o processo de chamada não é o proprietário do objeto.
ERROR_INVALID_HANDLE
O identificador especificado não é válido.
ERROR_INVALID_PARAMETER
As informações de segurança especificadas ou o descritor de segurança não são válidos.
ERROR_SERVICE_MARKED_FOR_DELETE
O serviço especificado foi marcado para exclusão.

Comentários

A função SetServiceObjectSecurity define as partes especificadas do descritor de segurança do objeto de serviço com base nas informações especificadas no buffer lpSecurityDescriptor . Essa função substitui qualquer ou todas as informações de segurança associadas ao objeto de serviço, de acordo com os sinalizadores definidos no parâmetro dwSecurityInformation e sujeitos aos direitos de acesso do processo de chamada.

Quando um serviço é criado, o gerenciador de controle de serviço atribui um descritor de segurança padrão ao objeto de serviço. Para recuperar uma cópia do descritor de segurança de um objeto de serviço, chame a função QueryServiceObjectSecurity . Para obter uma descrição do descritor de segurança padrão para um objeto de serviço, consulte Segurança do Serviço e Direitos de Acesso.

Observe que conceder determinado acesso a usuários não confiáveis (como SERVICE_CHANGE_CONFIG ou SERVICE_STOP) pode permitir que eles interfiram na execução do serviço e, possivelmente, permitir que eles executem aplicativos na conta localSystem.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winsvc.h (inclua Windows.h)
Biblioteca Advapi32.lib
DLL Advapi32.dll

Confira também

CreateService

Controle de Acesso de baixo nível

Funções de Controle de Acesso de baixo nível

Openservice

QueryServiceObjectSecurity

SECURITY_DESCRIPTOR