どのように私は、.NETシッククライアントアプリで、Windowsの共有へのアクセスを要求することができますか?
-
06-09-2019 - |
質問
私たちは、クライアントがログオンできない場合があり、共有上のリソースにアクセスする必要があるシッククライアントを持っています。クライアントは、Windowsドメインにあるかもしれないか、ユーザーがローカルサーバーにログオンする必要がありますので、それは、ドメインなしで混在環境である可能性があります。過去には、1つの作業は、周りの付与や共有へのアクセスを拒否し、パスワード・プロンプトを開き、Windowsエクスプローラを開き、共有にユーザーのデスクトップ、上のショートカットを作成することでした。どのように私は、Windowsエクスプローラに頼ることなく、ユーザーが共有にサインオンするために得ることができますか? Windowsエクスプローラは、私は私のアプリは、共有へのアクセスを要求するために行うことができますことを何をしますか?
私はC#のウェブでネットワーク共有から Accessファイルを読みましたアプリのが、私はWinFormsのアプリケーションでこれをやって、それがインタラクティブになりたいのです。また、私は読んだことがあるパスワードのプロンプトを表示する方法しかし、そのコードは単なるユーザーではなく、要求し、助成金が共有にアクセスUIを呼び出すから文字列を要求します。私はむしろ私のアプリは、ネットワークリソースへのアクセスを要求するトリガーと同じくらいのOSをユーザーのパスワードを知っていません。
解決
あなたは(あなたがVistaの/ Win2k8上で実行している場合、あなたが作るために呼び出すかを決定するためにWINVERをチェックする必要がありますかCredUIPromptForWindowsCredential)のWin32 API CredUIPromptForCredentialsを見てみることができます。
この方法は実際には、プロンプト定期的な資格情報を呼び出しますが、あなたは(私が知っている、ひどい)資格証明書を取得します。
PInvoke.Netはこれを呼び出す方法を示すのサンプルコードを持っていますC#(のPInvokeサンプルにあなたが保存で偽指定した場合にはフラグをCREDUI_FLAGS.DO_NOT_PERSISTを渡す必要があります。奇妙な、私は知っている)。
からの機能偉大キース・ブラウンは、セキュリティ上のwikibook
あなたが(セキュリティで保護された文字列で)資格証明書を取得したら、あなたは(のLogonUserを使用して)リソースを取得するユーザーを偽装することができます。
そして、それは醜いです。私は、Windowsが標準プロンプトダイアログを表示したい理解し、あなたが資格情報を知りたくありません。
リモートUNCに隠されたexplorer.exeのを起動するSystem.Diagnostics.Processを使用してのような醜いハックトリックをしないならば、私は思ったんだけど。あなたは、ユーザーが認証情報を入力した後、生成されたエクスプローラのプロセスを強制終了しているのを待つための方法を見つける必要があるだろう。