ダウングレード OS 上のアクセス権のない共有フォルダをアクセスすると ERROR_ACCESS_DENIED 以外のエラーが返る

現象

ダウングレード OS 上のアクセス権のない共有フォルダに対して、ファイルやフォルダにアクセスする API を利用すると、アクセス拒否 (ERROR_ACCESS_DENIED) 以外のエラーで失敗することがあります。
また、この問題が発生する場合、以下の何れかのエラーコードが、API に通知されます。
・予期しないネットワークエラーが発生しました。(ERROR_UNEXP_NET_ERR)
・パラメータが間違っています。(ERROR_INVALID_PARAMETER)

アクセス権のチェックのために、ファイル I/O 系の関数のエラーコードに ERROR_ACCESS_DENIED が通知されることを想定した実装をしているアプリケーションでは、適切にアクセス権をチェックできないことがあり得ます。

原因

カーネル モードの SMB コンポーネントにおいて、STATUS_ERROR_ACCESS_DENIED となる I/O が発生した際に、STATUS_UNEXPECTED_NETWORK_ERROR を通知する場合があります。また、この通知を行う処理では、サブシーケンスの I/O も同時に行っており、このサブシーケンスで、STATUS_INVALID_PARAMETER を通知することがあります。

SMB コンポーネントが通知したステータスは、NT ステータスから Win32 エラーコードの変換に伴いユーザーモードのファイル I/O 系の関数 には、ERROR_UNEXP_NET_ERR もしくは ERROR_INVALID_PARAMETER として通知されます。

解決方法

アプリケーションの実装として、アクセス権のないファイルやフォルダにアクセスした結果、ERROR_UNEXP_NET_ERR もしくは ERROR_INVALID_PARAMETER が通知された場合、ERROR_ACCESS_DENIED に相当する処理を行うことで回避が可能です。

関連情報

- 参考資料
[INFO] NT エラー コードを Win32 エラー コードへマッピングする
http://support.microsoft.com/kb/113996/ja
プロパティ

文書番号:2954571 - 最終更新日: 2016/09/29 - リビジョン: 1

フィードバック