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


Внедрение сетевого провайдера

Поставщик сети — это библиотека DLL, которая позволяет операционной системе Windows поддерживать определенный сетевой протокол. Это делается путем реализации API поставщика сети. Этот API представляет собой набор функций, которые вызовы нескольких маршрутизаторов поставщика (MPR) для взаимодействия с сетью. Затем поставщик сети преобразует эти вызовы в вызовы API для конкретной сети для выполнения действия, указанного MPR. Таким образом операционная система Windows может взаимодействовать с новыми сетевыми протоколами, не имея необходимости понимать их API для конкретной сети.

Чтобы создать поставщика сети, напишите DLL, которая экспортирует функцию NPGetCaps.

Поддержка других функций в API поставщика сети является необязательной. Если сетевой поставщик не требует функции, библиотеке DLL не нужно реализовать ее или предоставить реализацию заглушки. Дополнительные сведения см. в разделах функций поставщика сети в тематике отдельных функций.

Исключением является то, что при поддержке одной из следующих функций перечисления необходимо также поддерживать две другие функции: NPOpenEnum, NPEnumResourceи NPCloseEnum.

В следующих рекомендациях описано, как создать сетевой поставщик, который хорошо взаимодействует с MPR и операционной системой Windows. По возможности поставщик должен придерживаться следующих рекомендаций по скорости, проверке и маршрутизации.

Скорость

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

Если поставщик сети не владеет ресурсом, он должен немедленно вернуть код состояния WN_BAD_NETNAME.

Кроме того, важно, чтобы поставщики, поддерживающие NPGetDirectoryType, быстро возвращали результаты этой функции, так как она выполняется, пока WinFile отображает дерево каталогов.

Ратификация

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

Маршрутизация

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

Он, однако, отмечает первую значительную ошибку, сообщаемую поставщиком. Такие ошибки, как ERROR_BAD_NETPATH, ERROR_BAD_NET_NAME, ERROR_INVALID_PARAMETER, ERROR_INVALID_LEVEL считаются незначительными, так как они просто означают, что поставщик не управляет ресурсом. Однако, если поставщик завершает работу с ошибкой ERROR_INVALID_PASSWORD или другой значительной ошибкой, MPR записывает эту ошибку и продолжает перебирать сетевых поставщиков. Как правило, при маршрутизации, если ни один поставщик не принимает вызов, MPR сообщает о первой значительной ошибке, с которой он сталкивается, проходя через сетевых операторов.

Сетевой поставщик должен учитывать это поведение MPR при выборе возвращаемого сообщения об ошибке.

Примечание о реализации

При реализации библиотеки DLL поставщика сети поставщик не должен вызывать другие функции сети Windows, api оболочки оболочкиили другие запросы на основе пути UNC, которые могут привести к повторному входу в подсистему MPR. Если делать такие вызовы из DLL-поставщика сети, приложения или другие компоненты операционной системы могут столкнуться с конкуренцией, низкой производительностью или взаимоблокировками внутри подсистемы MPR.