net use を使って passthrough を実行する
前の記事 では Visual Studio のデバッガから passthrough.exe を起動してマウントを行っていたが、WinFsp の管理するレジストリに exe を登録することで、net use コマンドによりマウントできるようになる。
このレジストリ・キーは 32bit 版の以下となる。
HKLM\Software\WinFsp\Services
レジストリ・エディタで確認する場合のは下のキーになる。
HKLM\Software\WOW6432Node\WinFsp\Services
WinFsp をインストールした時点では memfs32, memfs64, memfs-a64, memfs-dotnet が登録されている。
ここに passthrough を登録できると net use によるマウントができる。
レジストリの登録
レジストリに exe を登録するためには WinFsp により提供される fsreg.bat を利用する。
passthrough を登録するためには Windows Terminal を管理者権限で開き、次のコマンドを実行する。
"%ProgramFiles(x86)%"\WinFsp\bin\fsreg.bat passthrough "C:\cxx\project\03-winfsp-passthrough\x64\Debug\03-winfsp-passthrough.exe" "-u %1 -m %2 -d -1 -D C:\cxx\project\03-winfsp-passthrough\log.txt" "D:P(A;;RPWPLC;;;WD)"
長いので分解してみると以下のようになる。
- "%ProgramFiles(x86)%"\WinFsp\bin\fsreg.bat
fsreg.bat のフルパス - passthrough
レジストリの登録キー名 - "C:\cxx\project\03-winfsp-passthrough\x64\Debug\03-winfsp-passthrough.exe"
exe のフルパス - "-u %1 -m %2 -d -1 -D C:\cxx\project\03-winfsp-passthrough\log.txt"
exe 実行時の引数 - "D:P(A;;RPWPLC;;;WD)"
NTFS の ACL
ACL については memfs と同じ値を採用している。
Copilot によると、Everyone フルアクセスらしい。
コマンドを実行するとレジストリ・エディタで確認できる。
コマンドで確認すると以下のように表示される。
C:\cxx\project\03-winfsp-passthrough>reg query HKLM\Software\WinFsp\Services\passthrough /s /reg:32
HKEY_LOCAL_MACHINE\Software\WinFsp\Services\passthrough
Executable REG_SZ C:\cxx\project\03-winfsp-passthrough\x64\Debug\03-winfsp-passthrough.exe
CommandLine REG_SZ -u %1 -m %2 -d -1 -D C:\cxx\project\03-winfsp-passthrough\log.txt
JobControl REG_DWORD 0x1
Security REG_SZ D:P(A;;RPWPLC;;;WD)
ディレクトリのマウント
レジストリへの登録が正常に行われると net use コマンドでディレクトリがネットワーク・ドライブとしてマウントできる。
C:\cxx\project\03-winfsp-passthrough>net use Y: "\\passthrough\C$\cxx\project\03-winfsp-passthrough" /PERSISTENT:NO
コマンドは正常に終了しました。
正常にマウントできると、デバッガで行っていたように Y: として参照できるようになる。
C:\cxx\project\03-winfsp-passthrough>dir y:
ドライブ Y のボリューム ラベルがありません。
ボリューム シリアル番号は 0000-0000 です
Y:\ のディレクトリ
2025/10/29 11:51 <DIR> .
2025/10/29 11:51 <DIR> ..
2025/10/28 14:48 <DIR> 03-winfs.59ee3fec
2025/10/28 14:45 41 03-winfsp-passthrough.cpp
2025/10/28 14:43 1,468 03-winfsp-passthrough.sln
2025/10/28 14:48 7,134 03-winfsp-passthrough.vcxproj
2025/10/28 14:48 1,144 03-winfsp-passthrough.vcxproj.filters
2025/10/28 15:19 771 03-winfsp-passthrough.vcxproj.user
2025/10/29 11:50 10,196 log.txt
2023/02/07 21:16 30,128 passthrough.c
2025/10/28 14:48 <DIR> x64
7 個のファイル 50,882 バイト
4 個のディレクトリ 610,836,840,448 バイトの空き領域
後片付け
上記でマウントした Y: のアンマウントとレジストリの登録は、以下のように解除および削除する。
アンマウント
C:\cxx\project\03-winfsp-passthrough>net use Y: /DELETE
Y: が削除されました。
レジストリ・キーの削除 (管理者権限で実行)
C:\cxx\project\03-winfsp-passthrough>"%ProgramFiles(x86)%"\WinFsp\bin\fsreg.bat -u passthrough
この操作を正しく終了しました。
確認
C:\cxx\project\03-winfsp-passthrough>y:
指定されたドライブが見つかりません。
C:\cxx\project\03-winfsp-passthrough>reg query HKLM\Software\WinFsp\Services\passthrough /s /reg:32
エラー: 指定されたレジストリ キーまたは値が見つかりませんでした

