Função WSASetServiceA (winsock2.h)
A função WSASetService registra ou remove do registro uma instância de serviço em um ou mais namespaces.
Sintaxe
INT WSAAPI WSASetServiceA(
[in] LPWSAQUERYSETA lpqsRegInfo,
[in] WSAESETSERVICEOP essoperation,
[in] DWORD dwControlFlags
);
Parâmetros
[in] lpqsRegInfo
Um ponteiro para as informações de serviço para registro ou cancelamento do registro.
[in] essoperation
Um valor que determina a operação solicitada. Esse parâmetro pode ser um dos valores do tipo de enumeração WSAESETSERVICEOP definido no arquivo de cabeçalho Winsock2.h .
Valor | Significado |
---|---|
|
Registre o serviço. Para o SAP, isso significa enviar uma transmissão periódica. Este é um NOP para o namespace DNS. Para armazenamentos de dados persistentes, isso significa atualizar as informações de endereço. |
|
Remova o serviço do registro. Para SAP, isso significa parar de enviar a difusão periódica. Este é um NOP para o namespace DNS. Para armazenamentos de dados persistentes, isso significa excluir informações de endereço. |
|
Exclua o serviço do nome dinâmico e dos espaços persistentes. Para serviços representados por várias estruturas de CSADDR_INFO (usando o sinalizador SERVICE_MULTIPLE), somente o endereço especificado será excluído e isso deve corresponder exatamente à estrutura de CSADDR_INFO correspondente especificada quando o serviço foi registrado. |
[in] dwControlFlags
O valor de sinalizadores de instalação de serviço que controla ainda mais a operação executada da função WSASetService . Os valores possíveis para esse parâmetro são definidos no arquivo de cabeçalho Winsock2.h .
Retornar valor
O valor retornado para WSASetService será zero se a operação tiver sido bem-sucedida. Caso contrário, o valor SOCKET_ERROR será retornado e um número de erro específico poderá ser recuperado chamando WSAGetLastError.
Código do erro | Significado |
---|---|
A rotina de chamada não tem privilégios suficientes para instalar o Serviço. | |
Um ou mais parâmetros necessários eram inválidos ou ausentes. | |
O Ws2_32.dll não foi inicializado. O aplicativo deve primeiro chamar WSAStartup antes de chamar qualquer função do Windows Sockets. | |
Não havia memória suficiente para executar a operação. |
Comentários
A função WSASetService pode ser usada para afetar um provedor de namespace específico, todos os provedores associados a um namespace específico ou todos os provedores em todos os namespaces.
Os valores disponíveis para essOperation e dwControlFlags combinam para controlar a operação da função WSASetService , conforme mostrado na tabela a seguir.
Operação | Flags | O serviço já existe | O serviço não existe |
---|---|---|---|
RNRSERVICE_REGISTER | Nenhum | Substitui o objeto . Usa apenas endereços especificados. O objeto é REGISTERED. | Cria um novo objeto. Usa apenas endereços especificados. O objeto é REGISTERED. |
RNRSERVICE_REGISTER | SERVICE_MULTIPLE | Atualiza o objeto. Adiciona novos endereços ao conjunto existente. O objeto é REGISTERED. | Cria um novo objeto. Usa todos os endereços especificados. O objeto é REGISTERED. |
RNRSERVICE_DEREGISTER | Nenhum | Remove todos os endereços, mas não remove o objeto do namespace . O objeto é removido do registro. | WSASERVICE_NOT_FOUND |
RNRSERVICE_DEREGISTER | SERVICE_MULTIPLE | Atualiza o objeto. Remove somente os endereços especificados. Marca apenas o objeto como DEREGISTERED se nenhum endereço estiver presente. Não remove o objeto do namespace. | WSASERVICE_NOT_FOUND |
RNRSERVICE_DELETE | Nenhum | Remove o objeto do namespace . | WSASERVICE_NOT_FOUND |
RNRSERVICE_DELETE | SERVICE_MULTIPLE | Remove somente os endereços especificados. Só removerá o objeto do namespace se nenhum endereço permanecer. | WSASERVICE_NOT_FOUND |
A publicação de serviços em diretórios, como os Serviços do Active Directory, é restrita com base em ACLs (listas de controle de acesso). Para obter mais informações, consulte Problemas de segurança para publicação de serviço.
Quando o parâmetro dwControlFlags é definido como SERVICE_MULTIPLE, um aplicativo pode gerenciar seus endereços de forma independente. Isso é útil quando o aplicativo deseja gerenciar seus protocolos individualmente ou quando o serviço reside em mais de um computador. Por exemplo, quando um serviço usa mais de um protocolo, ele pode descobrir que um soquete de escuta anula, mas os outros soquetes permanecem operacionais. Nesse caso, o serviço pode remover o endereço anulado do registro sem afetar os outros endereços.
Quando o parâmetro dwControlFlags é definido como SERVICE_MULTIPLE, um aplicativo não deve permitir que endereços obsoletos permaneçam no objeto . Isso pode acontecer se o aplicativo for anulado sem emitir uma solicitação DEREGISTER. Quando um serviço se registra, ele deve armazenar seus endereços. Em sua próxima invocação, o serviço deve remover explicitamente esses endereços obsoletos antigos do registro antes de registrar novos endereços.
Propriedades do Serviço
A tabela a seguir descreve como os dados da propriedade de serviço são representados em uma estrutura WSAQUERYSET . Campos rotulados como (Opcional) podem conter um ponteiro nulo.Membro WSAQUERYSET | Descrição da propriedade de serviço |
---|---|
dwSize | Deve ser definido como sizeof (WSAQUERYSET). Esse é um mecanismo de controle de versão. |
dwOutputFlags | Não aplicável e ignorado. |
Lpszserviceinstancename | A cadeia de caracteres referenciada contém o nome da instância de serviço. |
lpServiceClassId | O GUID correspondente a essa classe de serviço. |
lpVersion | (Opcional) Fornece o número de versão da instância de serviço. |
lpszComment | (Opcional) Uma cadeia de caracteres de comentário opcional. |
Dwnamespace | Confira a tabela a seguir. |
lpNSProviderId | Confira a tabela a seguir. |
lpszContext | (Opcional) Especifica o ponto de partida da consulta em um namespace hierárquico. |
dwNumberOfProtocols | Ignorado. |
lpafpProtocols | Ignorado. |
lpszQueryString | Ignorado. |
dwNumberOfCsAddrs | O número de elementos na matriz de CSADDR_INFO estruturas referenciadas por lpcsaBuffer. |
Lpcsabuffer | Um ponteiro para uma matriz de estruturas de CSADDR_INFO que contêm os endereços em que o serviço está escutando. |
Lpblob | (Opcional) Esse é um ponteiro para uma entidade específica do provedor. |
Conforme ilustrado a seguir, a combinação dos membros dwNameSpace e lpNSProviderId determina que os provedores de namespace são afetados por essa função.
Dwnamespace | lpNSProviderId | Escopo do impacto |
---|---|---|
Ignored | Não nulo | O provedor de espaço de nome especificado. |
Um identificador de espaço de nome válido | Null | Todos os provedores de name-space que dão suporte ao namespace indicado. |
NS_ALL | Null | Todos os provedores de espaço de nome. |
Windows Phone 8: a função WSASetServiceW tem suporte para aplicativos da Windows Phone Store no Windows Phone 8 e posterior.
Windows 8.1 e Windows Server 2012 R2: a função WSASetServiceW tem suporte para aplicativos da Windows Store em Windows 8.1, Windows Server 2012 R2 e posteriores.
Observação
O cabeçalho winsock2.h define WSASetService como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8.1, Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | winsock2.h |
Biblioteca | Ws2_32.lib |
DLL | Ws2_32.dll |