現在のセッションでマップされたドライブから UNC パスを取得する関数を呼び出すとWNetGetUniversalName()
、関数は成功します。
しかし...
- 呼び出して新しいログオン セッションを作成した場合
LogonUser()
(ログオン ユーザーはプロセス作成者と同じです) ImpersonateLoggedOnUser()
関数を呼び出して、ログオンしているユーザーになりすます- をもう一度呼び出す
WNetGetUniversalName()
と、関数はエラー 2250 (ERROR_NOT_CONNECTED
)を返します。
問題は、このプロセスをサービスとして (SYSTEM アカウントで) 実行する必要があるため、そのユーザーのマップされたドライブと関連するネットワーク パスを取得するために、ユーザーを偽装する必要がある場合があることです。確認したところ、ユーザー セッション間で情報にアクセスすることはできません。
ユーザーが再度ログインしたときにドライブを再マップできるように、Windows はこの情報をどこに保存しますか? マッピングされたネットワーク パスの履歴がレジストリの key: の下に保持されていることがわかりましたがHKEY_USERS\<User SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\Map Network Drive MRU
、ユーザーが再度ログインしたときに UNC パスがマッピングされるかどうか、および関連付けられているドライブ文字が示されていません。
助けてください。