3

現在のセッションでマップされたドライブから 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 パスがマッピングされるかどうか、および関連付けられているドライブ文字が示されていません。

助けてください。

4

1 に答える 1

0

正しく思い出せば、これらのドライブマッピングはログオンセッションに保存されていると思います。LogonUser()は新しいログオンセッションを作成するため、ドライブマッピングはありません。既存のトークンでImpersonateLoggedOnUser()を使用する必要があります。

于 2011-04-27T14:28:08.160 に答える