Compartilhar via


PNRP e WSASetService

O PNRP usa a função WSASetService para registrar ou remover nomes de pares.

Registrando um nome

O registro inclui um nome de par e um conjunto de pontos de extremidade em que um serviço pode ser contatado. Um registro é específico para uma nuvem PNRP. Depois que um par é registrado, há um atraso entre o registro e a propagação das informações de registro para outros nós. Durante esse tempo, outros nós podem não ser capazes de resolve um par recém-registrado.

O registro de serviço não é persistente.

  • Se um processo de cliente que registra um nome de par sair ou chamar WSACleanup, o nome do par não será registrado.
  • Se um nome de par especificado já estiver registrado na mesma nuvem pelo processo atual, ele será substituído por novos valores de registro.

Ao registrar um nome de par, os seguintes valores de parâmetro devem ser indicados:

  • O parâmetro essOperation deve ter um valor de RNRSERVICE_REGISTER.
  • O parâmetro dwControlFlags deve ser zero (0).

Ao registrar um nome de par, a estrutura LPWSAQUERYSET referenciada pelo parâmetro lpqsRegInfo deve conter os seguintes valores:

Dwsize

Especifica o tamanho dessa estrutura.

Lpszserviceinstancename

Especifica um nome de par a ser registrado. Se o nome do par não estiver seguro, a identidade será opcional. Se a identidade for especificada como NULL, o PNRP usará a identidade local do computador por padrão.

lpServiceClassID

Deve ser SVCID_PNRPNAME.

lpVersion

Ignorado. Defina como NULL.

lpszComment

Ignorado. No entanto, a cadeia de caracteres ainda precisa ter menos de 40 caracteres, incluindo o terminador NULL .

Dwnamespace

Deve ser NS_PNRPNAME ou NS_ALL.

lpNSProviderID

Deve ser NS_PROVIDER_PNRPNAME ou NULL.

lpszContext

Deve ser um nome de nuvem, uma cadeia de caracteres vazia ou NULL. Se esse valor for NULL ou uma cadeia de caracteres vazia, a nuvem padrão, "Global", será usada. Caso contrário, ele deverá apontar para um nome de nuvem válido.

dwNumberOfProtocols

Ignorado. Defina como zero (0).

lpszQueryString

Ignorado. Defina como NULL.

dwNumberOfCsAddrs

Especifica o número de endereços registrados por um serviço. O número máximo de endereços que podem ser registrados para um único nome é 10.

Lpcsabuffer

Ponteiro para uma lista de endereços a serem registrados.

dwOutputFlags

Ignorado. Defina como zero (0).

Lpblob

Ponteiro para uma estrutura BLOB que aponta para uma estrutura PNRPINFO . Parâmetros específicos na estrutura PNRPINFO devem ser definidos. Para obter mais informações, consulte a seção estrutura PNRPINFO a seguir.

Estrutura PNRPINFO

Se o membro lpBlob da estrutura LPWSAQUERYSET estiver definido, os seguintes membros da estrutura PNRPINFO deverão ser definidos:

Dwsize

Especifica o tamanho dessa estrutura.

lpwszIdentity

Especifica a identidade do nome do par que é criado usando PeerIdentityCreate. Se um nome de par não estiver seguro, a identidade será opcional. Se a identidade for especificada como NULL, o PNRP usará a identidade local do computador por padrão.

nMaxResolve

Ignorado. Defina como zero (0).

Dwtimeout

Ignorado. Defina como zero (0).

dwLifetime

Especifica o número de segundos entre as operações de atualização.

enResolveCriteria

Ignorado. Defina como zero (0).

dwFlags

Deve ser zero (0) ou PNRPINFO_HINT. O padrão é zero (0). Isso significa que a parte do local do serviço da ID PNRP é criada usando o endereço IP em saHint. Caso contrário, o local do serviço será criado usando o primeiro endereço IP na primeira entrada IPv6 do membro lpcsaBuffer .

saHint

Especifica o endereço IPv6 para a dica.

enNameState

Ignorado. Defina como zero (0).

Cancelar o registro de um nome de par

A lista a seguir identifica as informações importantes sobre o cancelamento do registro de um nome de par.

  • Somente um aplicativo que registra um nome de par pode cancelá-lo.
  • Um nome de par será cancelado automaticamente se WSACleanup for chamado.
  • O PNRP sempre remove todo o registro de nome de serviço. Ele não permite a remoção de endereços individuais.
  • Ao cancelar o registro de um nome, o parâmetro essOperation deve ter um valor de RNRSERVICE_DELETE.
  • O PNRP não dá suporte ao valor RNRSERVICE_DEREGISTER.
  • O parâmetro dwControlFlags deve ser zero (0).

Ao cancelar o registro de um nome, a estrutura LPWSAQUERYSET que o parâmetro lpqsRegInfo referencia deve conter os seguintes valores:

Dwsize

Especifica o tamanho dessa estrutura.

Lpszserviceinstancename

Especifica um nome de par para cancelar o registro.

lpServiceClassID

Deve ser SVCID_PNRPNAME.

lpVersion

Ignorado. Defina como NULL.

lpszComment

Ignorado. Defina como NULL.

Dwnamespace

Deve ser NS_PNRPNAME ou NS_ALL.

lpNSProviderID

Deve ser NS_PROVIDER_PNRPNAME ou NULL.

lpszContext

Deve ser um nome de nuvem, uma cadeia de caracteres vazia ou NULL. Se esse valor for NULL ou uma cadeia de caracteres vazia, a nuvem padrão , "Global" será usada. Caso contrário, ele deve apontar para um nome de nuvem válido.

dwNumberOfProtocols

Ignorado. Defina como zero (0).

lpszQueryString

Ignorado. Defina como NULL.

dwNumberOfCsAddrs

Ignorado. Defina como NULL.

Lpcsabuffer

Ignorado. Defina como NULL.

dwOutputFlags

Ignorado. Defina como zero (0).

Lpblob

Ponteiro para uma estrutura BLOB que aponta para uma estrutura PNRPINFO . O membro lpszIdentity da estrutura lpBlob identifica o nome da identidade usada para registrar um nome de par. Os membros restantes devem ser definidos com os mesmos valores usados ao registrar um nome.

PNRP e BLOB

PNRP e WSAQUERYSET

PNRPINFO

Códigos de erro NSP PNRP

Wsacleanup

Wsasetservice