我正在编写一个凭据提供程序,当用户登录 Windows 帐户并使用错误的键盘语言设置(例如乌克兰语而不是拉丁语)意外输入密码时,它会更正用户的密码。相同的键,但不同的字母。现在我需要一种方法来拦截用户输入的密码,并在输入错误的情况下进行更正。作为起点,我使用的是 Windows SDK 中的凭据提供程序。它在标准模式下工作正常(如默认 CP)。但是我找不到在哪里获取和更正用户输入的密码。我以为 HRESULTCSampleCredential::GetStringValue( DWORD dwFieldID, PWSTR* ppwz)
方法是正确的地方。取代
hr = SHStrDupW(_rgFieldStrings[dwFieldID], ppwz);
字符串与
hr = SHStrDupW(ppwstrCorrected, ppwz);
其中 ppwstrCorrected 包含原始密码或更正后的密码。但这无济于事。凭据提供程序继续照常工作。我什至试图通过让 GetStringValue 在任何时候返回一些乱码来“破坏”我的提供程序。但是示例提供程序仍然可以作为标准提供程序。是的,我尝试通过示例提供程序而不是标准登录,因为它们很容易通过瓷砖上的位图进行区分。那么我在哪里可以截获进入 Windows 进行检查的输入密码呢?