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


PNRP и WSALookupServiceBegin

PNRP использует функцию WSALookupServiceBegin для запуска процесса, который позволяет приложению выполнять следующие действия:

Клиенты, которые пытаются выполнить одну из функций, используют функции WSALookupServiceBegin, WSALookupServiceNext и WSALookupServiceEnd .

С помощью WSANSPIoctl службу подстановки можно использовать асинхронно. Сведения об асинхронном использовании функций службы подстановки см. в разделе PNRP и WSANSPIoctl.

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

Разрешение имени

Приложение использует WSALookupServiceBegin для получения IP-адреса, порта и протокола для одноранговой службы, зарегистрированной на другом компьютере. Функция WSALookupServiceBegin используется для запуска процесса разрешения имен и настройки параметров и ограничений. Возвращается дескриптор, который должен использоваться при вызове WSALookupServiceNext и WSANSPIoctl.

lpqsRestrictions

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

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

Зарезервировано, должно быть равно нулю (0).

lpcsaBuffer

Зарезервировано, должно иметь значение NULL.

dwOutputFlags

Зарезервировано, должно быть равно нулю (0).

lpBlob

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

Структура PNRPINFO

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

dwSize

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

lpwszIdentity

Зарезервировано, должно иметь значение NULL.

nMaxResolve

Указывает требуемое количество разрешений.

dwTimeout

Указывает запрошенный период ожидания для ожидания ответов. По умолчанию это 30 секунд. Максимальное значение — 600 секунд (10 минут).

dwLifetime

Зарезервировано, должно быть равно нулю (0).

enResolveCriteria

Должно быть одним из допустимых значений. Значение по умолчанию — PNRP_RESOLVE_CRITERIA_NON_CURRENT_PROCESS_PEER_NAME. Допустимые значения задаются PNRP_RESOLVE_CRITERIA.

Dwflags

Значение должно быть равно нулю (0) или PNRPINFO_HINT. Значение по умолчанию равно нулю (0).

saHint

Указывает IP-адрес для указания. Указание используется при попытке найти имя ближайшего однорангового узла. Формат указания — IPv6-адрес. Если saHint не указан при поиске имени ближайшего однорангового узла, вместо него используется IPv6-адрес локального компьютера. Этот элемент игнорируется, если dwFlags не задан.

enNameState

Зарезервировано, должно быть равно нулю (0).

dwControlFlags

Следующие флаги LUP_RETURN_* поддерживаются PNRP:

Значение Описание
LUP_RETURN_NAME Возвращает имя и контекст.
LUP_RETURN_COMMENT Возвращает комментарий, связанный с именем.
LUP_RETURN_ADDR Возвращает адрес, связанный с именем.

 

Перечисление сетевых облаков

lpqsRestrictions

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

dwSize

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

lpszServiceInstanceName

Должен иметь значение NULL.

lpServiceClassID

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

lpVersion

Зарезервировано, должно иметь значение NULL.

lpszComment

Зарезервировано, должно иметь значение NULL.

dwNameSpace

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

lpNSProviderID

Должен иметь значение NS_PROVIDER_PNRPCLOUD или NULL.

lpszContext

Зарезервировано, должно иметь значение NULL.

dwNumberOfProtocols

Зарезервировано, должно быть равно нулю (0).

lpszQueryString

Зарезервировано, должно иметь значение NULL.

dwNumberOfCsAddrs

Зарезервировано, должно быть равно нулю (0).

lpcsaBuffer

Зарезервировано, должно иметь значение NULL.

dwOutputFlags

Зарезервировано, должно быть равно нулю (0).

lpBlob

Указатель на структуру BLOB , которая указывает на структуру PNRPCLOUDINFO . Если lpBlob имеет значение NULL, перечисляются все облака.

Структура PNRPCLOUDINFO

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

dwSize

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

Облако

Указывает на структуру, указывающую критерии, которые можно использовать для фильтрации результатов поиска. Элемент Cloud.Scope может быть PNRP_SCOPE_ANY, PNRP_GLOBAL_SCOPE, PNRP_SITE_LOCAL_SCOPE или PNRP_LINK_LOCAL_SCOPE. Если указан PNRP_SCOPE_ANY , возвращаются все облака. В противном случае возвращаются только облака, соответствующие Cloud.Scope .

enCloudState

Зарезервировано, должно быть равно нулю (0).

dwControlFlags

Следующие флаги LUP_RETURN_* поддерживаются PNRP:

Значение Описание
LUP_RETURN_NAME Возвращает имя и контекст.
LUP_RETURN_BLOB Возвращает большой двоичный объект , связанный с этим облаком.

 

PNRP и BLOB

PNRP и WSALookupServiceEnd

PNRP и WSALookupServiceNext

PNRP и WSANSPIoctl

PNRP и WSAQUERYSET

PNRPCLOUDINFO

PNRPINFO

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