kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

LogonUser/LogonUserEx/LogonUserExExW

LogonUser function (Windows)
LogonUserEx function (Windows)
LogonUserExExW function (Windows)
ユーザー名とパスワードを指定してアクセストークンを取得するLogonUser。これが発展して、ログオンプロパイダ(NTLMとnegotiate)を選択して、ユーザープロファイルやSIDも取得できるようになったのがLogonUserEx。Vista以降ではさらにトークングループが取得できるようになったLogonUserExExW…〜Ex2ってAPIはたまに見かけたけど、こんなパターンは初めてかな?
このグループトークンはImpersonateLoggedOnUserに渡せるのですか…なるほど。
とはいえ、多くの場面で使うのはLogonUserだけで用が足りるでしょう。.NET Framework 3.5SP1ではなぜかこのLogonUserに相当するメソッドがないようで、統合認証でログオンしている「以外の」ユーザー権限で偽装したければ、P/InvokeでこれからWindowsIdentifyクラスに渡すためのトークンを生成する必要があります。
典型的な例としては、現在ログオンしているユーザーとは別ユーザーのパスワードを変えるときとかですかね。