二行だけ返ってくる
cmd
C:\>net use Z: http://dav.example.com/
システム エラー 67 が発生しました。
ネットワーク名が見つかりません。エラー 67 はマイクロソフトの Win32 エラー一覧の ERROR_BAD_NET_NAME で、説明は「The network name cannot be found.」です。エクスプローラーは同じ失敗を 16 進数で、エラー 0x80070043 として表示します。10 進の 67 は 0x43、0x8007 は Win32 エラーを HRESULT に包むときの接頭辞です。失敗は一つ、表記が二つあるだけです。
切り分けはコマンドラインの方が楽です。変数を一つずつ変えて、結果をその場で読めます。
マイクロソフトが挙げている原因
WebDAV リダイレクターのドキュメントは、ドライブ割り当てでシステム エラー 67 が出る条件を六つ挙げています。IIS 以外のサーバーでは、最初の三つでほぼ説明がつきます。
| 文書化されている原因 | 実際にやること |
|---|---|
| サーバーで IIS が入っていない、動いていない | IIS 以外なら該当しない。まず素の GET が返るか確認する |
| クライアントに WebDAV リダイレクターが入っていない | Windows Server では「デスクトップ エクスペリエンス」を追加。デスクトップ版には同梱 |
| クライアントの WebClient サービスが動いていない | 起動し、スタートアップを自動にする |
| Web サイトで WebDAV が有効になっていない | 応答に DAV: ヘッダーがあるか確認する |
| HTTPS ではなく HTTP 上で Basic 認証を使っている | BasicAuthLevel を上げる、またはエンドポイントを HTTPS にする |
| Windows 認証の FQDN サイトでプロキシのバイパス設定がない | クライアント側のバイパス一覧にサイトを追加する |
手順 1:リダイレクターが生きているか
割り当てた WebDAV ドライブは WebClient サービスが処理します。マイクロソフトは 2023 年 11 月にこれを非推奨とし、同じお知らせで「Webclient サービスは Windows で既定では開始されない」と書いています。新しい環境ではこれが答えであることが一番多いです。
powershell
Get-Service WebClient | Format-List Name, Status, StartType
Set-Service -Name WebClient -StartupType Automatic
Start-Service -Name WebClientコマンドプロンプト版は = のうしろに空白が必要です。マイクロソフトの sc.exe config のリファレンスは、オプションと値の間に空白が必要で、省くと失敗すると書いています。よく出回る start=auto はその省いた形です。
cmd
sc.exe config WebClient start= auto
sc.exe start WebClientサービスが動いてから割り当てをやり直します。すでに一度失敗しているなら一分待ってください。ServerNotFoundCacheLifeTimeInSec の既定値は 60 秒で、その間 WebClient はサーバーに接続せずキャッシュされた失敗を返します。
手順 2:コマンドの書式を正す
net use は WebDAV に対して二つの書式を受け付けます。素の URL 形式はマイクロソフトの解説に NET USE * http://www.example.com として載っていて、* は空いている次のドライブ文字を使います。UNC 形式は DavGetHTTPFromUNCPath 関数のリファレンスに \\server[@SSL][@port][\path] と定義され、@SSL が HTTPS、@port は 80 と 443 以外で必須です。DavWWWRoot は WebDAV サーバーのルートを指します。
cmd
rem 既定ポートの HTTPS
net use Z: \\dav.example.com@SSL\DavWWWRoot\files /user:alice *
rem ポートを明示した HTTPS
net use Z: \\dav.example.com@SSL@443\DavWWWRoot\files /user:alice *
rem 独自ポートの平文 HTTP
net use Y: http://dav.example.com:8080/remote.php/dav/files/alice /user:alice *末尾の * は飾りではありません。文書化されている net use の構文はパスワードか * を取り、* にすると Windows が入力を求めるので、履歴にパスワードが残りません。再起動後も残したい場合は /persistent:yes を付けます。
書式のミスだけでエラー 67 になるのは三つ。スキームを省く(SMB として扱われる)、既定以外のポートを省く、そしてサーバーが /dav や /remote.php/dav/files/alice のようなサブパスで公開しているのにサイトのルートを割り当てる、です。
手順 3:HTTP 上の Basic 認証を許可する
エンドポイントが http:// で Basic 認証なら、Windows はパスワードを聞く前に拒否します。切り替えるのは WebClient の Parameters キーにある BasicAuthLevel という DWORD で、文書化されている値は三つです。0 は Basic 認証を無効、1 は SSL サイトのみ、2 は SSL と非 SSL の両方。既定値は 1 です。
cmd
reg query "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v BasicAuthLevel
reg add "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v BasicAuthLevel /t REG_DWORD /d 2 /f
net stop WebClient
net start WebClient再起動は必須です。マイクロソフトのドキュメントは、このキーのすべての値についてそう明記しています。そして代償を理解してください。レベル 2 は資格情報を平文で送ります。127.0.0.1 なら妥当、自分の LAN なら許容範囲、インターネット越しには不適切です。
エラー番号が 67 でないとき
同じドキュメントには、WebDAV に対して net use が返す他の番号も載っています。こちらは 67 よりずっと情報量があります。見分けがつけば、権限の問題に WebClient の対処を当ててしまう無駄が避けられます。
| エラー | Windows が表示する文言 | 実際の意味 |
|---|---|---|
| 5 | Access is denied | アカウントかパスワードが違う、または権限がない |
| 58 | The specified server cannot perform the requested operation | サーバー側のホスト名バインディングの不一致 |
| 59 | An unexpected network error occurred | サイトかアプリケーション プールが停止している |
| 224 | Access Denied. Before opening files in this location, you must first add the web site to your trusted sites list | URL のゾーンがリダイレクターに信頼されていない |
| 1244 | The operation being request was not performed because the user has not been authenticated | 認証方式が有効でない、またはログオンの種類の不一致 |
| 1920 | The file cannot be accessed by the system | そのアカウント用の作成ルールがない |
1244 の文言は誤字も含めてマイクロソフトのものです。
再起動すると消えてしまう割り当て
割り当ては成功するのにサインアウト後に消える場合、それは仕様です。マイクロソフトは Windows 7 以降、Basic 認証の資格情報は資格情報マネージャーに保持できないと明記しており、同社のトラブルシューティング記事はログオン スクリプトで net use をやり直すことを推奨しています。ローカルのサーバーを含め、Basic 認証の WebDAV では実務的にこれが答えです。
powershell
if (-not (Test-Path Y:)) {
net use Y: http://127.0.0.1:3211/ /user:anystorage
}ローカルの WebDAV サーバー(AnyStorage)を割り当てる
AnyStorage は目の前の PC の中で WebDAV サーバーを動かします。サイドバーの Services、WebDAV タブ、Start、エンドポイントは http://127.0.0.1:3211 です。アプリで開いている接続はすべてルート直下のフォルダーとして見えるので、ドライブ文字一つで S3 バケット、Cloudflare R2、Backblaze B2、MinIO、Google ドライブ、OneDrive、Dropbox、SFTP ホストに届きます。ファイルシステムドライバーは入れないので、WinFsp の話は出てきません。
サーバーがローカルでも Windows の扱いは変わらないので、上のルールはそのまま当てはまります。HTTP のエンドポイントには BasicAuthLevel の 2 が必要です。ユーザー名の既定は anystorage、パスワードは初回に生成される 24 文字で、どちらも WebDAV タブにコピーボタン付きで表示されます。無料版ではマウントは読み取り専用、読み書きは Pro の機能です。また接続は遅延して行われるため、起動後にアプリ内で開いた接続だけがルートに現れます。
エラー 67 は 0x80070043 と同じですか。
同じです。67 は Win32 の ERROR_BAD_NET_NAME で、0x80070043 はシェルが表示するために HRESULT に包んだ同じ値です。
net use は成功するのにエクスプローラーにドライブが出ません。
実行しているセキュリティ コンテキストが違います。管理者権限のプロンプトで作った割り当ては、管理者でないエクスプローラーからは見えません。エクスプローラーで見たいなら通常のプロンプトから実行してください。
URL の末尾にスラッシュは必要ですか。
付けて損はありません。リダイレクターは最初に指定したパスへ OPTIONS を投げるので、サーバーによっては挙動が変わります。スラッシュなしで失敗したら、資格情報を疑う前に付けて試してください。
ここまでの手順を省略できますか。
閲覧用途ならドライブ文字は素直に便利です。大量転送なら、ストレージ API と直接やり取りするクライアントの中で動かすのが速いです。サービスもレジストリ値も 4GB の上限も関係なくなります。
次に読む
- エクスプローラー側の表示: WebDAV エラー 0x80070043
- Windows の WebDAV 割り当てが壊れる他の要因: Windows で WebDAV に接続できないとき
- 50MB でコピーが止まる: Windows の WebDAV 50MB 制限