Функция 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

Указатель на вектор пользовательских идентификаторов объектов, предлагаемых сервером. Серверное приложение создает этот вектор. Значение 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
Нет привилегий для операции службы имен.
RPC_S_NAME_SERVICE_UNAVAILABLE
Служба имен недоступна.
 
Примечание Список допустимых кодов ошибок см. в разделе Возвращаемые значения RPC.
 

Комментарии

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

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

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

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

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

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

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

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

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

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

Примечание

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

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header rpcnsi.h (включая Rpc.h)
Библиотека Rpcns4.lib
DLL Rpcns4.dll

См. также раздел

RpcBindingFromStringBinding

RpcEpRegister

RpcEpRegisterNoReplace

RpcNsBindingUnexport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf