Compartilhar via


Função QueryServiceObjectSecurity (winsvc.h)

A função QueryServiceObjectSecurity recupera uma cópia do descritor de segurança associado a um objeto de serviço. Você também pode usar a função GetNamedSecurityInfo para recuperar um descritor de segurança.

Sintaxe

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

Um identificador para o gerenciador de controle de serviço ou o serviço. Os identificadores para o gerenciador de controle de serviço são retornados pela função OpenSCManager e os identificadores para um serviço são retornados pela função OpenService ou CreateService . O identificador deve ter o acesso de READ_CONTROL correto.

[in] dwSecurityInformation

Um conjunto de sinalizadores de bits que indicam o tipo de informações de segurança a serem recuperadas. Esse parâmetro pode ser uma combinação dos sinalizadores de bits SECURITY_INFORMATION , com exceção de que essa função não dá suporte ao valor LABEL_SECURITY_INFORMATION .

[out, optional] lpSecurityDescriptor

Um ponteiro para um buffer que recebe uma cópia do descritor de segurança do objeto de serviço especificado. O processo de chamada deve ter o acesso apropriado para exibir os aspectos especificados do descritor de segurança do objeto. A estrutura SECURITY_DESCRIPTOR é retornada no formato auto-relativo .

[in] cbBufSize

O tamanho do buffer apontado pelo parâmetro lpSecurityDescriptor , em bytes. O maior tamanho permitido é de 8 quilobytes.

[out] pcbBytesNeeded

Um ponteiro para uma variável que recebe o número de bytes necessários para retornar as informações solicitadas do descritor de segurança, se a função falhar.

Valor retornado

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

Se a função falhar, o valor retornado será 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 acesso READ_CONTROL ou o processo de chamada não é o proprietário do objeto.
ERROR_INVALID_HANDLE
O identificador especificado não é válido.
ERROR_INSUFFICIENT_BUFFER
As informações do descritor de segurança são muito grandes para o buffer lpSecurityDescriptor . O número de bytes necessários para obter todas as informações é retornado no parâmetro pcbBytesNeeded . Nada é gravado no buffer lpSecurityDescriptor .
ERROR_INVALID_PARAMETER
As informações de segurança especificadas não são válidas.

Comentários

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 alterar o descritor de segurança, chame a função SetServiceObjectSecurity . 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.

Para ler o proprietário, o grupo ou a DACL do descritor de segurança do objeto de serviço, o processo de chamada deve ter sido concedido READ_CONTROL acesso quando o identificador foi aberto. Para obter READ_CONTROL acesso, o chamador deve ser o proprietário do objeto ou a DACL do objeto deve conceder o acesso.

Para ler o SACL do descritor de segurança, o processo de chamada deve ter sido concedido ACCESS_SYSTEM_SECURITY acesso quando o identificador foi aberto. A maneira correta de obter esse acesso é habilitar o privilégio SE_SECURITY_NAME no token atual do chamador, abrir o identificador para acesso ACCESS_SYSTEM_SECURITY e desabilitar o privilégio.

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

GetNamedSecurityInfo

Controle de Acesso de baixo nível

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

Openservice

SECURITY_DESCRIPTOR

SetServiceObjectSecurity