私は(現在ログインしているユーザーの)アンロックシナリオでのみ動作するWindows 10資格プロバイダを開発しています。前述のように、Windows 10からCPUS_LOGONとCPUS_UNLOCK_WORKSTATIONのユーザーシナリオが組み合わされています。hereに記載されています。システムにログインしている現在のユーザーを列挙する必要がある資格情報プロバイダーは、現在のユーザーを追跡したり、WTSQuerySessionInformationなどのAPIを利用してその情報を取得できます。Windows 10の資格情報プロバイダで現在ロックされているセッション(Microsoftアカウントとローカル)のユーザー名を取得する問題
WTSQuerySessionInformationを使用すると、現在ログインしているユーザー(WTSUserName)のユーザー名を取得できます。ログイン時に、システムはログインUIの初期化中にICredentialProviderSetUserArray::SetUserArrayを呼び出して、UIに表示する一連のユーザーを取得します。資格プロバイダのユーザ(ICredentialProviderUser)はICredentialProviderUserArrayインターフェイスから取得でき、ユーザごとに(文字列値PKEY_Identity_UserNameを照会することによって)ユーザ名を問い合せることができます。 WTSQuerySessionInformationのユーザー名とPKEY_Identity_UserNameが返したユーザー名を比較すると、現在ロックされているユーザーのうち最後のユーザーを知ることができます。 (PKEY_Identity_LogonStatusStringが「ロック」に設定されている複数のアカウントが存在する可能性があります)。
これは、Microsoftアカウントでサインインしていないローカルアカウントでうまく機能します。 Microsoftアカウントとしてサインインされたユーザーの場合、WTSQuerySessionInformationによって返されたユーザー名は、PKEY_Identity_UserNameで指定されたユーザー名とは異なります。
ユーザーが「[email protected]」とサインインした場合、次の不一致が発生します。 WTSQuerySessionInformationを使用して
、私は現在ロックされたユーザのユーザ名として取得:
ユーザー名:my_us
そしてPKEY_Identity_UserNameによって返さ1は十分にある。
ユーザー名:my_user_microsoftする@ myemail。 com
修飾されたユーザー名:MicrosoftAccount \ [email protected]
WTSQuerySessionInformationから返されたユーザー名は切り捨てられ、完全な電子メールアドレスは報告されないため、ユーザーを列挙しながら他のユーザー名と比較することはできません。
ユーザー名がこのように切り取られる理由は何ですか? WTSQuerySessionInformationを使用して完全なユーザー名を取得する方法はありますか? この動作は、新しく作成したMicrosoftアカウントでテストされています。
ユーザー名の取得方法は?この問題は、状況やその機能の使い方に問題がある可能性があります。 WTS_CURRENT_SESSIONが矛盾する可能性があります。なぜSIDを使って比較しないのですか? – Swift
@スワイプ:SIDを比較することができました。ありがとう!!ロックされたユーザーのSIDをユーザー名とドメインから取得する方法を回答しました。 – skuallpa