自定义 Winlogon

通过实现凭据提供程序自定义 Winlogon 行为。 有关凭据提供程序的信息,请参阅 ICredentialProvider 接口

Windows Server 2003 和 Windows XP: 不支持凭据提供程序。

以下部分介绍在 Windows Vista 之前的 Windows 版本中自定义 Winlogon 的方法。

注意

Windows Vista 中忽略 GINA DLL 和 Winlogon 通知包。

 

Winlogon 通知包

Winlogon 通知包是一个 DLL,用于导出处理 Winlogon 事件的函数。 例如,当用户登录到系统时,Winlogon 会调用每个通知包来提供有关事件的信息。 有关详细信息,请参阅 Winlogon 通知包

GINA 存根

GINA 存根是自定义 GINA DLL,它使用以前安装的 GINA DLL 的导出函数实现, (通常MsGina.dll) 。 GINA 存根获取指向以前安装的 GINA DLL 导出的每个函数的指针。 然后,每个 GINA 存根函数使用相应的函数指针调用以前安装的 GINA DLL 中的相应函数。

重要

每个 GINA 存根函数都必须调用以前安装的 GINA 中的相应函数。

 

GINA 存根函数可以在其一个或多个导出函数中实现其他功能。 例如,在调用MsGina.dll的 WlxLoggedOutSAS 函数之前,GINA 存根的 WlxLoggedOutSAS 函数可能会检查当前时间。 如果当前时间在特定范围内,则存根函数可能会显示一条消息,指示在该时间段内不允许登录,并将 WLX_SAS_ACTION_NONE 返回到 Winlogon。 然后,仅在允许的时间段内调用MsGina.dll的 WlxLoggedOutSAS 函数。

GINA 存根应用程序通过 WlxInitialize 函数的 pWinlogonFunctions 参数获取 Winlogon 支持函数的调度表。 GINA 存根应用程序可以使用此调度表来调用 Winlogon 支持函数。 例如,在将智能卡插入读取器时,GINA 存根应用程序可以调用 WlxSasNotify 函数, (SAS) 事件引起安全关注序列

有关创建 GINA 存根的详细信息,请参阅平台软件开发工具包的 \Samples\Security\Gina\GinaStub 目录中的 Gina 存根示例 (SDK) 安装。

注意

GINA 和 Winlogon 之间的所有调用都必须在单个线程内。

 

GINA 挂钩

GINA 挂钩是一个 GINA 存根,在 WlxInitialize 函数的实现中,将调度表中 指向 WlxDialogBoxParam 支持函数的指针替换为指向其自己的 WlxDialogBoxParam 函数实现的指针。 因此,每次以前安装的 GINA (通常MsGina.dll) 调用 WlxDialogBoxParam 函数时,都会调用由 GINA 挂钩实现的函数。

GINA 挂钩实现的 WlxDialogBoxParam 函数可以替换响应特定对话框事件的 DialogProc 回调过程。

这使 GINA 挂钩可以完全控制MsGina.dll创建的所有对话框的外观和行为。

有关创建 GINA 挂钩的详细信息,请参阅平台 SDK 安装的 \Samples\Security\Gina\GinaHook 目录中的 Gina Hooks 示例。

注意

GINA 和 Winlogon 之间的所有调用都必须在单个线程内。