C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトで、System.IO.Directory.GetDirectoriesの引数にUNCを利用した場合に例外[0x800704F8]”組織のセキュリティ ポリシーによって非認証のゲスト アクセスがブロックされているため、この共有フォルダーにアクセスできません。” が発生する場合の対処法です。
共有名などに間違いがない場合はポリシーで拒否
例えば、次のコードを実行した場合に事前に共有資源アクセスへのログオンを求める画面が表示されず例外が発生する場合があります。
string folder = "\\\\servername\\foldername";
Process.Start("explorer.exe", folder);
string[] folders = System.IO.Directory.GetDirectories(folder);
System.IO.IOException
HResult=0x800704F8
Message=組織のセキュリティ ポリシーによって非認証のゲスト アクセスがブロックされているため、この共有フォルダーにアクセスできません。これらのポリシーは、ネットワーク上の安全でないデバイスや悪意のあるデバイスから PC を保護するのに役立ちます。 : ‘\servername\foldername’
通常であれば、Windowsエクスプローラーが起動しネットワーク資源へのアクセスに関する画面(アカウントやパスワードを求める画面)が表示されますが表示されない場合があります。
その際、UNCに含まれたサーバー名や共有名などに間違いがない場合にはWindowsのグループポリシーで拒否されている場合があります。
例外が発生する場合の対処法
グループポリシーで拒否されているのでグループポリシーエディターなどで編集することで例外を回避することが可能です。
しかし、デメリットとしてゲストへのログインを有効にしてしまうのでWindowsのセキュリティーを下げてしまうことになります。
事前に共有フォルダーにアクセス
グループポリシーを変更せずに例外を回避する方法として事前に共有セッションを作成しておく方法があります。
例えば、Windowsエクスプローラーなどで共有フォルダーにアクセスします。
ユーザーIDやパスワードを求める画面が表示される場合にはセッションが作成されていないので、正しいアカウントやパスワードを入力します。
Windowsエクスプローラーで共有フォルダーが表示された後は[GetDirectories]メソッドを実行しても例外が発生されなくなります。
この方法で、一時的に回避ができます。共有セッションは有限なのでWindowsの再起動などのタイミングで削除されるので、同様の操作が必要になるのがデメリットです。
グループポリシーの編集
セキュリティーリスクを許容する場合には、グループポリシーエディターで[安全でないゲスト ログオンを有効にする]を有効にします。
具体的には次の手順で行います。
1. スタートメニューから[グループポリシーの編集]を検索して開きます。
2. 表示された[ローカル グループ ポリシー エディター]左側の[コンピューターの構成|管理用テンプレート|ネットワーク|Lanman ワークステーション]を開きます。
3. 右側に表示された一覧から[安全でないゲスト ログオンを有効にする]をダブルクリックします。
4. 表示された[安全でないゲスト ログオンを有効にする]画面で[有効]オプションを選択してします。
5.[OK]をクリックして画面を閉じます。
以上の操作でグループポリシーが更新されます。
まとめ
今回は、短い記事ですがWinUI3プロジェクトでSystem.IO.Directory.GetDirectoriesの引数にUNCを利用した場合に例外[0x800704F8]”組織のセキュリティ ポリシーによって非認証のゲスト アクセスがブロックされているため、この共有フォルダーにアクセスできません。” が発生する場合の対処法について紹介しました。
ネットワーク内の共有フォルダーに対して、GetDirectoriesを実行する場合には共有資源に対するアクセスが必要になります。
そのため事前に[Process]などでWindowsエクスプローラーを実行すると共有資源への画面を表示してくれるので楽にセッションが作成できますが、グループポリシーエディターなどの影響で、その後でも例外が発生する場合があります。
WinUI 3 アプリでネットワーク上のフォルダーに対してGetDirectories で例外が発生する人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。



