Compartilhar via


Função de retorno de chamada LPNSPSETSERVICE (ws2spi.h)

A função NSPSetService registra ou desregistra uma instância de serviço em um namespace.

Sintaxe

LPNSPSETSERVICE Lpnspsetservice;

INT Lpnspsetservice(
  [in] LPGUID lpProviderId,
  [in] LPWSASERVICECLASSINFOW lpServiceClassInfo,
  [in] LPWSAQUERYSETW lpqsRegInfo,
  [in] WSAESETSERVICEOP essOperation,
  [in] DWORD dwControlFlags
)
{...}

Parâmetros

[in] lpProviderId

Um ponteiro para o GUID do provedor de namespace específico no qual o serviço está registrado.

[in] lpServiceClassInfo

As informações de esquema da classe de serviço.

[in] lpqsRegInfo

As informações de propriedade a serem atualizadas após o registro.

[in] essOperation

O tipo de 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
RNRSERVICE_REGISTER
0
Registre o serviço. Para o namespace sap (Service Advertising Protocol) usado em um ambiente NetWare, isso significa enviar uma difusão periódica. Este é um NOP para o namespace DNS (Sistema de Nomes de Domínio). Para armazenamentos de dados persistentes, isso significa atualizar as informações de endereço.
RNRSERVICE_DEREGISTER
1
Desregistrar o serviço. Para o namespace 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.
RNRSERVICE_DELETE
2
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 fornecido será excluído e isso deve corresponder exatamente à estrutura **CSADDR_INFO** correspondente fornecida quando o serviço foi registrado.

[in] dwControlFlags

Um conjunto de sinalizadores que controla a operação de serviço solicitada.

Os valores possíveis para esse parâmetro são definidos no arquivo de cabeçalho Winsock2.h .

Valor Significado
SERVICE_MULTIPLE
0x00000001
Controlar o escopo da operação.

Quando esse valor é definido, a ação só é executada no conjunto de endereços fornecido. Uma operação de registro não invalida endereços existentes e uma operação de cancelamento de registro invalida apenas o conjunto de endereços especificado.

Quando esse valor está ausente, os endereços de serviço são gerenciados como um grupo. Um registro ou cancelamento de registro invalida todos os endereços existentes antes de adicionar o conjunto de endereços especificado.

Retornar valor

A função deverá retornar NO_ERROR (zero) se a rotina for bem-sucedida. Ele deverá retornar SOCKET_ERROR (–1) se a rotina falhar e precisar definir o código de erro apropriado usando WSASetLastError.

Código do erro Significado
WSAEACCES
A rotina de chamada não tem privilégios suficientes para instalar o serviço.
WSA_NOT_ENOUGH_MEMORY
Não há memória suficiente disponível para executar essa operação.
WSAEINVAL
Um ou mais parâmetros eram inválidos ou ausentes para esse provedor.
WSAEOPNOTSUPP
A operação não tem suporte. Esse erro será retornado se o provedor de namespace não implementar essa função.
WSASERVICE_NOT_FOUND
O serviço é desconhecido. O serviço não pode ser encontrado no namespace especificado.

Comentários

A tabela a seguir lista os valores disponíveis para essOperation e dwControlFlags.

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ções 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 é DEREGISTERED. WSASERVICE_NOT_FOUND
**RNRSERVICE_DEREGISTER** **SERVICE_MULTIPLE** Atualizações objeto . Remove somente os endereços especificados. Marque apenas o objeto como DEREGISTERED se nenhum endereço estiver presente. Não remove 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
 

Quando o parâmetro dwControlFlags é definido como SERVICE_MULTIPLE, isso permite que um aplicativo gerencie seus endereços de forma independente. Isso é útil quando o aplicativo deve 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, um soquete de escuta pode ser anulado, mas os outros soquetes permanecem operacionais. Neste exemplo, o serviço pode cancelar o registro do endereço anulado sem afetar os outros endereços.

Ao usar SERVICE_MULTIPLE, um aplicativo não deve permitir que endereços antigos permaneçam no objeto . Isso pode acontecer se o aplicativo for anulado sem emitir uma solicitação de RNRSERVICE_DEREGISTER . Quando um serviço é registrado, ele deve armazenar seus endereços. Em sua próxima chamada, o serviço deve cancelar explicitamente esses endereços antigos antes de registrar novos endereços.

Propriedades do Serviço

A tabela a seguir lista os nomes de membro WSAQUERYSET e descreve como os dados de propriedade de serviço são representados. Os membros rotulados como (Opcional) podem ser fornecidos com um ponteiro nulo.
Nome do membro WSAQUERYSET Descrição da propriedade de serviço
**Dwsize** Defina como o sizeof(WSAQUERYSET). Esse é um mecanismo de controle de versão.
**Lpszserviceinstancename** A cadeia de caracteres referenciada contém o nome da instância de serviço.
**lpServiceClassId** O GUID que corresponde 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** Ignorado para esta operação.
**lpNSProviderId** Ignorado para esta operação. O identificador do provedor está contido no parâmetro lpProviderId .
**lpszContext** Opcional. O ponto de partida da consulta em um namespace hierárquico.
**dwNumberOfProtocols** Ignorado para esta operação.
**lpafpProtocols** Ignorado para esta operação.
**pszQueryString** Ignorado para esta operação.
**dwNumberOfCsAddrs** O número de elementos na matriz de CSADDR_INFO estruturas referenciadas por lpcsaBuffer.
**Lpcsabuffer** Um ponteiro para uma matriz de estruturas CSADDR_INFO que contêm o endereço ou endereços em que o serviço está escutando.
**dwOutputFlags** Ignorado para esta operação.
**Lpblob** Opcional. Ponteiro para uma entidade específica do provedor.
 
**Observação** É aceitável que o membro **iProtocol** da estrutura CSADDR_INFO contenha a constante de manifesto **IPROTOCOL_ANY**, indicando um valor curinga. O provedor de namespace deve substituir um valor aceitável para a família de endereços e o tipo de soquete fornecidos.
 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho ws2spi.h

Confira também

CSADDR_INFO

WSAQUERYSET

WSASetLastError