Использование вспомогательного API для клиентов (connect.h)
API определен в заголовочном файле sysroot-*-kos/include/coresrv/dcm/helpers/connect.h из состава KasperskyOS SDK.
API позволяет клиентам выполнять запросы на создание IPC-каналов с серверами для использования служб с заданными интерфейсами. Для выполнения запроса достаточно вызвать функции DcmConnectAny() или DcmConnectAnyEx(), в то время как при использовании базового API dcm_api.h для этого требуется выполнить последовательность вызовов: DcmSubscribeToEndpoints(), DcmReadPubQueue(), DcmCreateConnection(), DcmConnectToEndpoint().
Перед вызовом функции DcmConnectAny() или DcmConnectAnyEx() нужно создать подключение к DCM вызовом функции DcmInit() из базового API dcm_api.h.
В результате вызова функции DcmConnectAny() или DcmConnectAnyEx() клиент получает через параметр outSessionHandlecallable-дескриптор для использования службы.
Вызов функции DcmConnectAny() соответствует вызову функции DcmConnectAnyEx(), при котором параметры endpointName и serverName имеют значение RTL_NULL, параметры serverHandle и clientHandle имеют значение INVALID_HANDLE, параметры findTimeout и connectTimeout имеют значение INFINITE_TIMEOUT.
Сведения о функциях API приведены в таблице ниже.
Функции connect.h
Функция
Сведения о функции
DcmConnectAny()
Назначение
Выполняет запрос на создание IPC-канала с сервером для использования службы с заданным интерфейсом.
Параметры
[in] endpointType – указатель на имя интерфейса службы. Максимальный размер имени (в байтах) с учетом терминирующего нуля соответствует значению константы UCoreStringSize, определенной в файле sysroot-*-kos/include/kl/core/Types.idl из состава KasperskyOS SDK.
[out] outSessionHandle – указатель на callable-дескриптор для использования службы.
Возвращаемые значения
В случае успеха возвращает rcOk, иначе возвращает код ошибки.
DcmConnectAnyEx()
Назначение
Выполняет запрос на создание IPC-канала с сервером для использования службы с заданным интерфейсом.
Параметры
[in] endpointType – указатель на имя интерфейса службы. Максимальный размер имени (в байтах) с учетом терминирующего нуля соответствует значению константы UCoreStringSize, определенной в файле sysroot-*-kos/include/kl/core/Types.idl из состава KasperskyOS SDK.
[in,optional] endpointName – указатель на квалифицированное имя службы или RTL_NULL, если для использования подходит любая служба с заданным интерфейсом. Максимальный размер имени (в байтах) с учетом терминирующего нуля соответствует значению константы UCoreStringSize, определенной в файле sysroot-*-kos/include/kl/core/Types.idl из состава KasperskyOS SDK.
[in,optional] serverName – указатель на имя сервера или RTL_NULL, если не имеет значения, какой именно сервер предоставляет службу. Максимальный размер имени (в байтах) с учетом терминирующего нуля соответствует значению константы UCoreStringSize, определенной в файле sysroot-*-kos/include/kl/core/Types.idl из состава KasperskyOS SDK.
[in,optional] serverHandle – дескриптор, идентифицирующий сервер, или INVALID_HANDLE, если не имеет значения, какой именно сервер предоставляет службу.
[in,optional] clientHandle – дескриптор, идентифицирующий клиента, или INVALID_HANDLE, чтобы для идентификации клиента использовался дескриптор вызывающего процесса.
[in] findTimeout – время ожидания публикации службы (в миллисекундах) или INFINITE_TIMEOUT, чтобы задать неограниченное время ожидания. Константа INFINITE_TIMEOUT определена в заголовочном файле sysroot-*-kos/include/rtl/rtc.h из состава KasperskyOS SDK.
[in] connectTimeout – время ожидания выполнения запроса на создание IPC-канала с сервером (в миллисекундах) или INFINITE_TIMEOUT, чтобы задать неограниченное время ожидания. Константа INFINITE_TIMEOUT определена в заголовочном файле sysroot-*-kos/include/rtl/rtc.h из состава KasperskyOS SDK.
[out] outSessionHandle – указатель на callable-дескриптор для использования службы.
Возвращаемые значения
В случае успеха возвращает rcOk, иначе возвращает код ошибки.
Если в параметре connectTimeout указан 0, и сервер не обработал запрос на создание IPC-канала, возвращает rcNotReady.
Если сервер отклонил запрос вызовом функции DcmCloseHandle() из базового API dcm_api.h возвращает rcNotConnected.
Дополнительные сведения
Неблокирующий вызов, если в параметрах findTimeout и connectTimeout указан 0.