Поделиться через


PNRP и WSASetService

PNRP использует функциюWSASetServiceдля регистрации или удаления одноранговых имен.

Регистрация имени

Регистрация включает имя однорангового узла и набор конечных точек, в которых можно связаться со службой. Регистрация относится к облаку PNRP. После регистрации однорангового узла между регистрацией и распространением сведений о регистрации на другие узлы возникает задержка. В течение этого времени другие узлы могут не разрешать только что зарегистрированный одноранговый узел.

Регистрация службы не является постоянной.

  • Если клиентский процесс, регистрирующий одноранговое имя, завершает работу или вызывает WSACleanup, то имя однорангового узла отменяется.
  • Если указанное имя однорангового узла уже зарегистрировано в том же облаке текущим процессом, оно заменяется новыми значениями регистрации.

При регистрации имени однорангового узла необходимо указать следующие значения параметров:

  • параметр essOperation должен иметь значение RNRSERVICE_REGISTER.
  • dwControlFlags параметр должен быть нулевым (0).

При регистрации имени однорангового узла структура LPWSAQUERYSET, на которую ссылается параметр lpqsRegInfo, должен содержать следующие значения:

dwSize

Задает размер этой структуры.

lpszServiceInstanceName

Указывает имя однорангового узла для регистрации. Если имя однорангового узла незащищено, удостоверение является необязательным. Если удостоверение указано как NULL, PNRP использует локальное удостоверение компьютера по умолчанию.

lpServiceClassID

Должно быть SVCID_PNRPNAME.

lpVersion

Игнорировать. Установите значение NULL.

lpszComment

Игнорировать. Однако строка по-прежнему требуется меньше 40 символов, включая null конца.

dwNameSpace

Должен быть либо NS_PNRPNAME, либо NS_ALL.

lpNSProviderID

Должен быть NS_PROVIDER_PNRPNAME или NULL.

lpszContext

Должно быть облачное имя, пустая строка или NULL. Если это значение null или пустую строку, используется облако по умолчанию "Global". В противном случае оно должно указывать на допустимое имя облака.

dwNumberOfProtocols

Игнорировать. Установите значение нулю (0).

lpszQueryString

Игнорировать. Установите значение NULL.

dwNumberOfCsAddrs

Указывает количество адресов, зарегистрированных службой. Максимальное количество адресов, которые можно зарегистрировать для одного имени, равно 10.

lpcsaBuffer

Указатель на список адресов для регистрации.

dwOutputFlags

Игнорировать. Установите значение нулю (0).

lpBlob

Указатель на структуру BLOB, которая указывает на структуру PNRPINFO. Необходимо задать определенные параметры в структуре PNRPINFO. Дополнительные сведения см. в следующем разделе структуры PNRPINFO.

Структура PNRPINFO

Если задан элемент lpBlob структуры LPWSAQUERYSET, необходимо задать следующие элементы структуры PNRPINFO:

dwSize

Задает размер этой структуры.

lpwszIdentity

Указывает удостоверение имени однорангового узла, созданного с помощью PeerIdentityCreate. Если имя однорангового узла незащищено, удостоверение является необязательным. Если удостоверение указано как NULL, по умолчанию PNRP использует локальное удостоверение компьютера.

nMaxResolve

Игнорировать. Установите значение нулю (0).

dwTimeout

Игнорировать. Установите значение нулю (0).

dwLifetime

Указывает количество секунд между операциями обновления.

enResolveCriteria

Игнорировать. Установите значение нулю (0).

dwFlags

Должно быть равно нулю (0) или PNRPINFO_HINT. Значение по умолчанию равно нулю (0). Это означает, что часть расположения службы идентификатора PNRP создается с помощью IP-адреса в saHint. В противном случае расположение службы создается с помощью первого IP-адреса в первой записи IPv6 элемента lpcsaBuffer.

saHint

Указывает IPv6-адрес для указания.

enNameState

Игнорировать. Установите значение нулю (0).

Отмена регистрации имени однорангового узла

В следующем списке указаны важные сведения об отмене регистрации имени однорангового узла.

  • Только приложение, которое регистрирует одноранговое имя, может отменить регистрацию.
  • Имя однорангового узла отменяется автоматически, если вызывается WSACleanup.
  • PNRP всегда удаляет всю регистрацию имени службы. Он не разрешает удаление отдельных адресов.
  • При отмене регистрации имени параметр essOperation должен иметь значение RNRSERVICE_DELETE.
  • PNRP не поддерживает значение RNRSERVICE_DEREGISTER.
  • Параметр dwControlFlags должен быть нулевым (0).

При отмене регистрации имени структура LPWSAQUERYSET ссылки на параметры lpqsRegInfo должны содержать следующие значения:

dwSize

Задает размер этой структуры.

lpszServiceInstanceName

Указывает имя однорангового узла для отмены регистрации.

lpServiceClassID

Должен быть SVCID_PNRPNAME.

lpVersion

Игнорировать. Установите значение NULL.

lpszComment

Игнорировать. Установите значение NULL.

dwNameSpace

Должен быть либо NS_PNRPNAME, либо NS_ALL.

lpNSProviderID

Должен быть NS_PROVIDER_PNRPNAME или NULL.

lpszContext

Должно быть облачное имя, пустая строка или NULL. Если это значение null или пустую строку, используется облако по умолчанию Global. В противном случае оно должно указывать на допустимое имя облака.

dwNumberOfProtocols

Игнорировать. Установите значение нулю (0).

lpszQueryString

Игнорировать. Установите значение NULL.

dwNumberOfCsAddrs

Игнорировать. Установите значение NULL.

lpcsaBuffer

Игнорировать. Установите значение NULL.

dwOutputFlags

Игнорировать. Установите значение нулю (0).

lpBlob

Указатель на структуру BLOB, которая указывает на структуру PNRPINFO. Элемент lpszIdentity в структуре lpBlob определяет имя удостоверения, используемого для регистрации однорангового имени. Остальные элементы должны иметь те же значения, которые используются при регистрации имени.

PNRP и BLOB

PNRP и WSAQUERYSET

PNRPINFO

коды ошибок NSP PNRP

WSACleanup

WSASetService