Я пишу поставщик учетных данных, который будет исправлять пароль пользователя, когда пользователь входит в учетную запись Windows и случайно вводит пароль, используя неправильные настройки языка клавиатуры (например, украинский, а не латинский). Те же клавиши, но разные буквы. Теперь мне нужен способ перехватить введенный пользователем пароль и, если он введен неправильно, исправить его. В качестве отправной точки я использую поставщика учетных данных из Windows SDK. Он отлично работает в стандартном режиме (как и CP по умолчанию). Но я не могу найти, где получить и исправить пароль, введенный пользователем. Я думал, что HRESULT CSampleCredential::GetStringValue( DWORD dwFieldID, PWSTR* ppwz)
метод является правильным местом для этого. Заменить
hr = SHStrDupW(_rgFieldStrings[dwFieldID], ppwz);
строка с
hr = SHStrDupW(ppwstrCorrected, ppwz);
Где ppwstrCorrected содержит либо исходный пароль, либо исправленный. Но это ничего не делает. Credentials Provider продолжает работать в прежнем режиме. Я даже пытался «сломать» своего провайдера, заставив GetStringValue возвращать какую-то тарабарщину каждый раз, когда он вызывается. Но образец провайдера по-прежнему работает как стандартный. И да, я пытался войти через образец провайдера, а не через стандартный, так как их легко отличить по растровым изображениям на их тайлах. Так где же перехватить введенный пароль, который заходит в винду для проверки?