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


Функция RpcNsBindingExportA (rpcnsi.h)

Функция RpcNsBindingExport устанавливает запись службы имен— базы данных с несколькими дескрипторами привязки и несколькими объектами для сервера.

Примечание Эта функция не поддерживается в windows Vista и более поздних операционных системах.
 

Синтаксис

RPC_STATUS RpcNsBindingExportA(
  unsigned long      EntryNameSyntax,
  RPC_CSTR           EntryName,
  RPC_IF_HANDLE      IfSpec,
  RPC_BINDING_VECTOR *BindingVec,
  UUID_VECTOR        *ObjectUuidVec
);

Параметры

EntryNameSyntax

Синтаксис EntryName.

Чтобы использовать синтаксис, указанный в записи значения реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc\NameService\DefaultSyntax, укажите значение RPC_C_NS_SYNTAX_DEFAULT.

EntryName

Указатель на имя записи, в которую экспортируются дескрипторы привязки и идентификаторы UUID объектов. Нельзя указать пустую или пустую строку. Клиент и сервер должны использовать одно и то же имя записи.

IfSpec

Структура данных, созданная заглушками, указывающая интерфейс для экспорта. Значение NULL указывает, что нет дескрипторов привязки для экспорта (экспортируются только идентификаторы UUID объектов) и BindingVec игнорируется.

BindingVec

Указатель на привязки сервера для экспорта. Значение NULL указывает на отсутствие дескрипторов привязки для экспорта (экспортируются только идентификаторы UUID объектов).

ObjectUuidVec

Указатель на вектор UUID объектов, предлагаемых сервером. Серверное приложение создает этот вектор. Значение NULL указывает, что для экспорта объектов нет идентификаторов UUID объекта (экспортируются только дескрипторы привязки).

Возвращаемое значение

Ценность Значение
RPC_S_OK
Вызов выполнен успешно.
RPC_S_NOTHING_TO_EXPORT
Не было ничего, чтобы экспортировать.
RPC_S_INVALID_BINDING
Дескриптор привязки недопустим.
RPC_S_WRONG_KIND_OF_BINDING
Это был неправильный вид привязки для операции.
RPC_S_INVALID_NAME_SYNTAX
Недопустимый синтаксис имени.
RPC_S_UNSUPPORTED_NAME_SYNTAX
Синтаксис имени не поддерживается.
RPC_S_INCOMPLETE_NAME
Имя является неполным.
RPC_S_NO_NS_PRIVILEGE
Нет привилегий для операции name-service.
RPC_S_NAME_SERVICE_UNAVAILABLE
Служба имен недоступна.
 
Примечание Список допустимых кодов ошибок см. в разделе возвращаемых значений RPC.
 

Замечания

Функция RpcNsBindingExport позволяет серверу приложению публично предлагать интерфейс в базе данных службы имен для использования любым клиентским приложением.

В действии с Windows 2000 среда выполнения RPC использует Active Directory в качестве базы данных службы имен. Это означает, что авторизованные экспортированные записи сохраняются в службе имен и видны даже после перезагрузки. Несанкционированные экспорты не сохраняются. Дополнительные сведения об авторизации и списках управления доступом см. в разделе " Безопасность" пакета SDK для платформы.

Чтобы экспортировать интерфейс, серверное приложение вызывает подпрограмму RpcNsBindingExport RpcNsBindingExport с интерфейсом, а привязка сервера обрабатывает клиент, который может использовать для доступа к серверу. Серверное приложение также вызывает функцию RpcNsBindingExport для публичного предложения объектов UUID ресурсов, которые он предлагает, если таковые имеются, в базе данных службы имен.

Сервер может экспортировать интерфейсы и объекты в одном вызове RpcNsBindingExportили экспортировать их отдельно. Если запись базы данных службы имен, указанная EntryName, не существует, RpcNsBindingExport пытается создать ее. В этом случае серверное приложение должно иметь права на создание записи. Помимо вызова RpcNsBindingExport, сервер, вызывающий RpcServerUseAllProtseqs или функцию RpcServerUseProtseq, также необходимо зарегистрировать в локальной базе данных карты конечных точек путем вызова RpcEpRegister или RpcEpRegisterNoReplace.

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

Перед вызовом RpcNsBindingExportсервер должен выполнить следующие действия:

Вектор, возвращаемый из функции RpcServerInqBindings , становится параметром привязки для RpcNsBindingExport. Чтобы предотвратить экспорт привязки, задайте для выбранного элемента вектора значение NULL.

Если сервер экспортируется в одну и ту же запись базы данных службы имен несколько раз, второй и последующий вызовы RpcNsBindingExport добавить сведения о привязке и идентификаторы объектов, если эти данные отличаются от данных привязки, уже в записи сервера. Существующие данные не удаляются из записи.

Чтобы удалить дескриптора привязки и UUID объектов из базы данных службы имен, серверное приложение вызывает функцию RpcNsBindingUnexport.

Запись сервера должна иметь по крайней мере один дескриптор привязки. В результате экспорт только идентификаторов UUID в не имеющуюся запись не действует, и отмена экспорта всех дескрипторов привязки удаляет запись.

Заметка

Заголовок rpcnsi.h определяет RpcNsBindingExport как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка rpcnsi.h (include Rpc.h)
библиотеки Rpcns4.lib
DLL Rpcns4.dll

См. также

RpcBindingFromStringBinding

RpcEpRegister

RpcEpRegisterNoReplace

RpcNsBindingUnexport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf