ISSONotification.InitializeAdapter 方法

初始化与 ENTSSO 系统通信的密码同步适配器。

语法

  
HRESULT InitializeAdapter(  
BSTR strAdapterName,  
ULONG lFlags,  
ULONGLONG* hNotifyEvent,  
GUID* guidTrackingId);  

参数

bstrAdapterName
[in] 唯一的适配器名称。

ulFlags
[in] SSO_NOTIFICATION_FLAG 值的按位组合。

phNotifyEvent
[out] 此方法返回时,包含 PS 助手创建的一个事件句柄。 您应该在返回时将此返回值转换为 HANDLE,因为 MIDL 不支持 HANDLE 数据类型。 如果适配器不要求事件处理,则此参数可为 NULL。

pguidTrackingId
[out] 此方法返回时,包含 ENTSSO 生成的跟踪 ID。 该跟踪 ID 用于审核目的。 如果适配器不要求该跟踪 ID,则此参数可为 NULL。

返回值

此方法返回一个 HRESULT,指示它是否正确完成。 有关详细信息,请参阅“错误值”部分。

错误值

此方法返回一个 HRESULT,它包含下表中的值之一。

说明
S_OK 初始化成功。
S_FALSE 初始化成功,但它是一个重新连接。 有关详细信息,请参见“备注”部分。
E_ACCESSDENIED 访问被拒绝。
ENTSSO_E_NO_SERVER 无法联系 ENTSSO 服务器。 检查 ENTSSO 服务是否正在运行。

注解

在调用 InitializeAdapter 之前,必须在 ENTSSO 中输入相关的适配器名称。

InitializeAdapter 应该是适配器调用的第一个方法,因为在调用 InitializeAdapter 之前不能调用任何其他 ISSONotification 方法。 在调用 ShutdownAdapter 之前,不应再次调用 InitializeAdapter。 但是,关闭适配器后,可以随时调用 InitializeAdapter 重新连接。

InitializeAdapter 启动 PS 帮助程序与适配器之间的通信。 当适配器调用 InitializeAdapter 时,PS 帮助程序通过加密的 LRPC 调用企业单 Sign-On (ENTSSO) 服务。 通过使用适配器名称,ENTSSO 服务基于为当前适配器定义的访问帐户授予或拒绝访问权限。

在调用 InitializeAdapter 之前,必须已启动 ENTSSO 服务。 PS 助手不能自动启动 ENTSSO,这是因为所运行的适配器进程不具有启动服务所需的足够权限。 因此,适配器必须启动适配器和 ENTSSO 之间所有的通信。

PS 助手首先建立与 ENTSSO 服务之间的连接,然后创建一个命名事件。 接着 PS 助手将命名事件传递给 ENTSSO 服务。 当适配器的通知到达时,ENTSSO 使用该事件作为信号来通知 PS 助手。 ENTSSO 将事件返回到适配器,以便适配器可等待该事件,或者忽略该事件并改为允许 PS 助手等待。 这在适配器线程模型方面为适配器提供了更大的灵活性。 事件对适配器有效,直到 ENTSSO 完成通过调用 ShutdownAdapter 启动的处理。

如果 ENTSSO 服务正在运行,则会接受来自 PS 助手的初始远程过程调用 (RPC)。 然后 ENTSSO 执行访问检查。 如果 ENTSSO 无法访问数据库来获取适配器配置信息,则 ENTSSO 将返回 E_ACCESSDENIED 事件。 如果 ENTSSO 具有适配器配置信息,但当前不能联系到数据库,则 ENTSSO 将会继续接受密码更改通知,将通知保存到本地缓冲区并在本地临时文件中对通知进行加密。

如果删除或禁用适配器,InitializeAdapter 还会返回E_ACCESSDENIED。

对于所有错误,Windows 事件日志中都提供了更详细的信息。

假定适配器知道与 ENTSSO 通信时要使用的相应名称。

InitializeAdapter 是单线程的。 在 InitializeAdapter 完成之前,将阻止所有其他调用 InitializeAdapter 的 线程。 它还与 ShutdownAdapter 方法同步。

适配器进程可能在发出 ShutdownAdapter 之前终止。 在这种情况下,如果 ENTSSO 在 ENTSSO 收到相应的 ShutdownAdapter 之前收到另一个 InitializeAdapter,则 ENTSSO 会将第二次 ShutdownAdapter 调用视为重新连接。 在这种情况下,ENTSSO 将清除现有的事件并使之无效,然后创建新句柄。 ENTSSO 还会通过关闭通知完成旧事件句柄的任何挂起 的 ReceiveNotification

在重新连接的情况下,将从 InitializeAdapter 返回新的跟踪 ID。 ENTSSO 返回新的跟踪 ID,因为从 InitializeAdapter 返回的跟踪 ID 可被视为会话 ID。 此外,ENTSSO 会向适配器重新发出任何挂起 (但未确认) 通知。

要求

平台:Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows 11 和 Windows 10

另请参阅

ISSONotification 接口 (COM)
ISSONotification 成员
使用企业单一登录编程