質問者
ファイルシステムミニフィルタードライバーにおける「\;RdpDr;:192.168.X.X」のパス名について

質問
-
お世話になります。
ファイルシステムミニフィルタードライバーを使用して、共有ファイルサーバへのアクセスを遮断したり、制御を行いたいと思っています。
MJ_CREATEの操作前コールバック関数を使用して、ファイルオブジェクトパス名を取得して作成していますが、
取得したパス名に「\;RdpDr;:1\192.168.X.X」のようなパス名の場合、このアクセスを遮断することができず困っています。
アクセスの遮断は取得したパス名を確認し、IPアドレスが含まれている場合は、以下のように操作前コールバック関数から抜けるようにしてブロックしています。
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
return FLT_PREOPE_COMPLETE;「\;RdpDr;:1」が含まれていない「\192.168.X.X\text.txt」のパス名の場合は、上記のコードで問題なくアクセスを遮断できています。
「\;RdpDr;:1」が含まれている場合、どのようにすればブロックすればよろしいのでしょうか。MJ_CREATEだけでは、ブロックすることはできないのでしょうか。
以上、ご教示をお願いいたします。
すべての返信
-
> コールスタックですが、
> 使用している操作前コールバックルーチンのコードで、
> よろしいでしょうか?
違います、コール スタックです。
Pre-Create ルーチンが呼び出された直後の、コール スタックを確認したいのです。
この問題を解決するためには、それぞれのコールがどのようなシーケンスでどのように呼び出されているのかを、きちんと把握する必要があります。
そのためには、コールスタックの状態等を、きちんと確認することが重要です。
例えば FileInfo フィルタ ドライバを例にすると。。。。
FileInfo.sys の Pre-Create コールバックルーチンは fileinfo!FIPreCreateCallback になりますので、デバッガ上からここにブレークポイントをセットしておきます。
fileinfo!FIPreCreateCallback ルーチンが呼び出されると、下記のようなコールスタックを確認することができます。
1: kd> !thread THREAD ffff9a0dc6ebd0c0 Cid 085c.1f68 Teb: 0000008ef2f81000 Win32Thread: 0000000000000000 RUNNING on processor 1 IRP List: ffff9a0dc6b419b0: (0006,0478) Flags: 00000884 Mdl: 00000000 Not impersonating DeviceMap ffffcf0b36891aa0 Owning Process ffff9a0dc6dce0c0 Image: msedge.exe Attached Process N/A Image: N/A Wait Start TickCount 13372 Ticks: 0 Context Switch Count 19 IdealProcessor: 1 UserTime 00:00:00.000 KernelTime 00:00:00.000 Win32 Start Address 0x00007ffe90b7c000 Stack Init ffff808cea806c90 Current ffff808cea805c60 Base ffff808cea807000 Limit ffff808cea801000 Call 0000000000000000 Priority 5 BasePriority 4 PriorityDecrement 0 IoPriority 0 PagePriority 1 Child-SP RetAddr : Args to Child : Call Site ffff808c`ea806238 fffff801`71f3666c : 00000000`00000000 ffff9a0d`00000000 ffff9a0d`00000000 ffff9a0d`bfbb2240 : fileinfo!FIPreCreateCallback ffff808c`ea806240 fffff801`71f3611a : ffff808c`ea806300 fffff801`71f37e00 00000000`00000000 fffff801`00000000 : FLTMGR!FltpPerformPreCallbacksWorker+0x36c ffff808c`ea806360 fffff801`71f6c0c0 : ffff808c`ea807000 ffff808c`ea801000 ffff9a0d`bfa9f670 00000000`00000000 : FLTMGR!FltpPassThroughInternal+0xca ffff808c`ea8063b0 fffff801`75e4e565 : 00000000`00000000 ffff9a0d`bfa95670 00000000`00000000 00000000`00000000 : FLTMGR!FltpCreate+0x310 ffff808c`ea806460 fffff801`75e9c224 : 00000000`00000003 ffff9a0d`c6b419b0 ffff9a0d`6d4e6f49 fffff801`75e9be53 : nt!IofCallDriver+0x55 ffff808c`ea8064a0 fffff801`762255bd : ffff808c`ea806760 ffff9a0d`bfa95670 ffff9a0d`c74028b8 00000000`00000000 : nt!IoCallDriverWithTracing+0x34 ffff808c`ea8064f0 fffff801`7621319e : ffff9a0d`bfa95670 00000000`00000056 ffff9a0d`c5ce8aa0 ffff9a0d`c5ce8a01 : nt!IopParseDevice+0x117d ffff808c`ea806660 fffff801`762354ea : ffff9a0d`c5ce8a00 ffff808c`ea8068c8 00007ffe`00000040 ffff9a0d`bf0fabc0 : nt!ObpLookupObjectName+0x3fe ffff808c`ea806830 fffff801`7630043f : 00000000`00000000 0000008e`f6ffea78 00000000`00000000 00000000`00000001 : nt!ObOpenObjectByNameEx+0x1fa ffff808c`ea806960 fffff801`76300019 : 0000008e`f6ffea38 00000000`00000001 0000008e`f6ffea78 0000008e`f6ffea40 : nt!IopCreateFile+0x40f ffff808c`ea806a00 fffff801`760096b5 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!NtCreateFile+0x79 ffff808c`ea806a90 00007ffe`c992d7e4 : 00007ffe`c763a070 00000000`00000000 00000000`00000001 000019d0`002f98a8 : nt!KiSystemServiceCopyEnd+0x25 (TrapFrame @ ffff808c`ea806b00) 0000008e`f6ffe9b8 00007ffe`c763a070 : 00000000`00000000 00000000`00000001 000019d0`002f98a8 00000000`00000000 : ntdll!NtCreateFile+0x14 0000008e`f6ffe9c0 00000000`00000000 : 00000000`00000001 000019d0`002f98a8 00000000`00000000 00000000`00000000 : 0x00007ffe`c763a070
上記コール スタックからこの Create Request は、Fast I/O 経由ではなく、通常の Create IRP 経由で fileinfo!FIPreCreateCallback が呼び出されたことが分かります。
さらに上記タイミングでデバッガにブレークインさせた場合、fileinfo!FIPreCreateCallback ルーチンの各パラメータは、rcx, rdx, r8 レジスタに格納されているので、それを確認すればどのように呼び出されたのかも確認することができます。
1: kd> dt fltmgr!_FLT_CALLBACK_DATA @rcx +0x000 Flags : 9 +0x008 Thread : 0xffff9a0d`c6ebd0c0 _KTHREAD +0x010 Iopb : 0xffff9a0d`c6b0f960 _FLT_IO_PARAMETER_BLOCK +0x018 IoStatus : _IO_STATUS_BLOCK +0x028 TagData : (null) +0x030 QueueLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ] +0x040 QueueContext : [2] (null) +0x030 FilterContext : [4] (null) +0x050 RequestorMode : 1 '' 1: kd> dt fltmgr!_FLT_IO_PARAMETER_BLOCK 0xffff9a0d`c6b0f960 +0x000 IrpFlags : 0x884 +0x004 MajorFunction : 0 '' +0x005 MinorFunction : 0 '' +0x006 OperationFlags : 0 '' +0x007 Reserved : 0 '' +0x008 TargetFileObject : 0xffff9a0d`c7402820 _FILE_OBJECT +0x010 TargetInstance : 0xffff9a0d`bfbb2010 _FLT_INSTANCE +0x018 Parameters : _FLT_PARAMETERS 1: kd> dt fltmgr!_FILE_OBJECT 0xffff9a0d`c7402820 +0x000 Type : 0n5 +0x002 Size : 0n216 +0x008 DeviceObject : 0xffff9a0d`bfa95670 _DEVICE_OBJECT +0x010 Vpb : (null) +0x018 FsContext : (null) +0x020 FsContext2 : (null) +0x028 SectionObjectPointer : (null) +0x030 PrivateCacheMap : (null) +0x038 FinalStatus : 0n0 +0x040 RelatedFileObject : (null) +0x048 LockOperation : 0 '' +0x049 DeletePending : 0 '' +0x04a ReadAccess : 0 '' +0x04b WriteAccess : 0 '' +0x04c DeleteAccess : 0 '' +0x04d SharedRead : 0 '' +0x04e SharedWrite : 0 '' +0x04f SharedDelete : 0 '' +0x050 Flags : 2 +0x058 FileName : _UNICODE_STRING "\Users\お馬鹿\AppData\Local\Microsoft\Edge\User Data\Default\Network\f695a92a-5973-4cce-b223-f4c573175f5e.tmp" +0x068 CurrentByteOffset : _LARGE_INTEGER 0x0 +0x070 Waiters : 0 +0x074 Busy : 0 +0x078 LastLock : (null) +0x080 Lock : _KEVENT +0x098 Event : _KEVENT +0x0b0 CompletionContext : (null) +0x0b8 IrpListLock : 0 +0x0c0 IrpList : _LIST_ENTRY [ 0xffff9a0d`c74028e0 - 0xffff9a0d`c74028e0 ] +0x0d0 FileObjectExtension : (null) 1: kd> !devstack 0xffff9a0dbfa95670 !DevObj !DrvObj !DevExt ObjectName ffff9a0dbfa9b040 \Driver\volsnap ffff9a0dbfa9b190 ffff9a0dbfa10be0 \Driver\volume ffff9a0dbfa10d30 ffff9a0dbfa9a870 \Driver\rdyboost ffff9a0dbfa9a9c0 ffff9a0dbfa9a4e0 \Driver\iorate ffff9a0dbfa9a630 ffff9a0dbfa99030 \Driver\fvevol ffff9a0dbfa99180 > ffff9a0dbfa95670 \Driver\volmgr ffff9a0dbfa957c0 HarddiskVolume2 !DevNode ffff9a0dbfbb6670 : DeviceInst is "STORAGE\Volume\{4c17a2d6-57f6-11e8-bc16-806e6f6e6963}#0000000022600000" ServiceName is "volume" 1: kd> dt fltmgr!_FLT_RELATED_OBJECTS @rdx +0x000 Size : 0x30 +0x002 TransactionContext : 0 +0x008 Filter : 0xffff9a0d`bfbcc9c0 _FLT_FILTER +0x010 Volume : 0xffff9a0d`bfbe3010 _FLT_VOLUME +0x018 Instance : 0xffff9a0d`bfbb2010 _FLT_INSTANCE +0x020 FileObject : 0xffff9a0d`c7402820 _FILE_OBJECT +0x028 Transaction : (null)
上記はあくまでも一例ですが、最低限このように2つのファイル パスでのコール状態を精査し、その違いを把握しない限りは、この問題は解決できないと思います。
(それを調べるだけの「根性」が無いのであれば、MS の有償サポートの利用をお勧めします。) -
色々とご教示いただき、あいがとうございます。
「¥;RdpDr;:1¥192.168.X.X」のパスは、コマンドプロンプトから「net use ¥¥192.168.X.X」を実行した場合に発生します。
net useコマンドを実行したときのコールスタック等の情報を以下に記載いたします。うまくコードが投稿できなったため、全角に変換して記載します。
■1回目のブレーク
kd> !thread
callSite
passTrough!PtTestCallbackData
passTrough!PtPreOperationNetworkQueryOpen
FLTMGR!FltpPerformPreCallbacksWorker
FLTMGR!PassThroughFastIo
FLTMGR!FastIoQuerryOpen
nt!IopQuerryInformation
nt!IopParseDevice
nt!ObpLookupObjectName
nt!ObOpenObjectByName
nt!NtQueryAttributesFile
nt!KiSystemServiceCopyEnd
kd> dt fltmgr!_FLT_CALLBACK_DATA @rcx
Flags: 2
Thread: _KTHREAD
Iopb: _FLT_IO_PARAMETER_BLOCK
IoStatus: _IO_STATUS_BLOCK
TagData: (null)
QueueLinks: _LIST_ENTRY
QueueContext: [2] (null)
FilterContext: [4] (null)
RequestorMode: 1
kd> dt Iopbの内容
IrpFlags: 0x0
MajorFunction: 0xf2
MinorFunction: 0x0
OperationFlags: 0x0
Reserved: 0x0
TargetFileObject: 0xffff838ac7b0f8f0
TargetInstance: 0xffffe182f0497660
Parameters: [ Type: _FLT_PARAMETERS]
kd> dt TargetFileObjectの内容
Type: 5
Size: 216
DeviceObject: 0xffffe182e62c9af0 : Device for ”¥FileSystem¥Mup” [Type: _FILE_OBJECT *]
Vpb: 0x0
FsContext: 0x0
FsContext2: 0x0
SectionObjectPointer: 0x0
PrivateCacheMap: 0x0
FinalStatus: 0
~(略)~
FileName: ”¥;RdpDr¥;:1¥192.168.5.10” [Type: _UNICODE_STRING]
~(略)~
FileObjectExtension: 0x0
■2回目のブレーク
kd> !thread
callSite
passTrough!PtTestCallbackData
passTrough!PtPreOperationCreate
FLTMGR!FltpPerformPreCallbacksWorker
FLTMGR!PassThroughInternal
FLTMGR!FltpCreate
nt!IofCallDriver
nt!IopCallDriverWithTracing
nt!IopParseDevice
nt!ObpLookupObjectName
nt!ObOpenObjectByNameEx
nt!NtQueryAttributesFile
nt!KiSystemServiceCopyEnd
kd> dt fltmgr!_FLT_CALLBACK_DATA @rcx
Flags: 9
Thread: _KTHREAD
Iopb: _FLT_IO_PARAMETER_BLOCK
IoStatus: _IO_STATUS_BLOCK
TagData: (null)
QueueLinks: _LIST_ENTRY
QueueContext: [2] (null)
FilterContext: [4] (null)
RequestorMode: 1 ’’
kd> dt Iopbの内容
IrpFlags: 0x884
MajorFunction: 0x0
MinorFunction: 0x0
OperationFlags: 0x0
Reserved: 0x0
TargetFileObject: 0xffffe182f168b810
TargetInstance: 0xffffe182f0497660
Parameters: [ Type: _FLT_PARAMETERS]
kd> dt TargetFileObjectの内容
Type: 5
Size: 216
DeviceObject: 0xffffe182e62c9af0 : Device for ”¥FileSystem¥Mup” [Type: _FILE_OBJECT *]
Vpb: 0x0
FsContext: 0x0
FsContext2: 0x0
SectionObjectPointer: 0x0
PrivateCacheMap: 0x0
FinalStatus: 0
~(略)~
FileName: ”¥;RdpDr¥;:1¥192.168.5.10” [Type: _UNICODE_STRING]
~(略)~
FileObjectExtension: 0x0
■3回目のブレーク
kd> !thread
callSite
passTrough!PtTestCallbackData
passTrough!PtPreOperationPassThrough
FLTMGR!FltpPerformPreCallbacksWorker
FLTMGR!PassThroughInternal
FLTMGR!FltpPassThrough
FLTMGR!FltpFltpDispatch
nt!IofCallDriver
nt!IopSynchronuosServiceTail
nt!NtQueryVolumeInformaionFile
nt!KiSystemServiceCopyEnd
kd> dt fltmgr!_FLT_CALLBACK_DATA @rcx
Flags: 9
Thread: _KTHREAD
Iopb: _FLT_IO_PARAMETER_BLOCK
IoStatus: _IO_STATUS_BLOCK
TagData: (null)
QueueLinks: _LIST_ENTRY
QueueContext: [2] (null)
FilterContext: [4] (null)
RequestorMode: 1 ’’
kd> dt Iopbの内容
IrpFlags: 0x60870
MajorFunction: 0xa
MinorFunction: 0x0
OperationFlags: 0x0
Reserved: 0x0
TargetFileObject: 0xffffe182eb3d69d0
TargetInstance: 0xffffe182f0497660
Parameters: [ Type: _FLT_PARAMETERS]
kd> dt TargetFileObjectの内容
Type: 5
Size: 216
DeviceObject: 0xffffe182e62c9af0 : Device for ”¥FileSystem¥Mup” [Type: _FILE_OBJECT *]
Vpb: 0x0
FsContext: 0x0
FsContext2: 0x0
SectionObjectPointer: 0x0
PrivateCacheMap: 0x0
FinalStatus: 0
~(略)~
Flags: 0x40002
FileName: ”¥;:00000000000960e4¥192.168.5.10¥IPC$” [Type: _UNICODE_STRING]
~(略)~
FileObjectExtension: 0xffffe182eee55e60
■4回目のブレーク
kd> !thread
callSite
passTrough!PtTestCallbackData
passTrough!PtPreOperationPassThrough
FLTMGR!FltpPerformPreCallbacksWorker
FLTMGR!PassThroughInternal
FLTMGR!FltpPassThrough
FLTMGR!FltpFsControl
nt!IofCallDriver
nt!IopSynchronuosServiceTail
nt!IopXxxControlFile
nt!NtFsControlFile
nt!KiSystemServiceCopyEnd
kd> dt fltmgr!_FLT_CALLBACK_DATA @rcx
Flags: 9
Thread: _KTHREAD
Iopb: _FLT_IO_PARAMETER_BLOCK
IoStatus: _IO_STATUS_BLOCK
TagData: (null)
QueueLinks: _LIST_ENTRY
QueueContext: [2] (null)
FilterContext: [4] (null)
RequestorMode: 1 ’’
kd> dt Iopbの内容
IrpFlags: 0x60870
MajorFunction: 0xd
MinorFunction: 0x0
OperationFlags: 0x0
Reserved: 0x0
TargetFileObject: 0xffffe182eb3d69d0
TargetInstance: 0xffffe182f0497660
Parameters: [ Type: _FLT_PARAMETERS]
kd> dt TargetFileObjectの内容
Type: 5
Size: 216
DeviceObject: 0xffffe182e62c9af0 : Device for ”¥FileSystem¥Mup” [Type: _FILE_OBJECT *]
Vpb: 0x0
FsContext: 0x0
FsContext2: 0x0
SectionObjectPointer: 0x0
PrivateCacheMap: 0x0
FinalStatus: 0
~(略)~
Flags: 0x40002
FileName: ”¥;:00000000000960e4¥192.168.5.10¥IPC$” [Type: _UNICODE_STRING]
~(略)~
FileObjectExtension: 0xffffe182eee55e60
■5回目のブレーク
kd> !thread
callSite
passTrough!PtTestCallbackData
passTrough!PtPreOperationPassThrough
FLTMGR!FltpPerformPreCallbacksWorker
FLTMGR!PassThroughInternal
FLTMGR!FltpPassThrough
FLTMGR!FltpDispatch
nt!IofCallDriver
nt!IopCloseFile
nt!obCloseHandleTableEntry
nt!NtClose
nt!KiSystemServiceCopyEnd
kd> dt fltmgr!_FLT_CALLBACK_DATA @rcx
Flags: 1
Thread: _KTHREAD
Iopb: _FLT_IO_PARAMETER_BLOCK
IoStatus: _IO_STATUS_BLOCK
TagData: (null)
QueueLinks: _LIST_ENTRY
QueueContext: [2] (null)
FilterContext: [4] (null)
RequestorMode: 1 ’’
kd> dt Iopbの内容
IrpFlags: 0x404
MajorFunction: 0x12
MinorFunction: 0x0
OperationFlags: 0x0
Reserved: 0x0
TargetFileObject: 0xffffe182eb3d69d0
TargetInstance: 0xffffe182f0497660
Parameters: [ Type: _FLT_PARAMETERS]
kd> dt TargetFileObjectの内容
Type: 5
Size: 216
DeviceObject: 0xffffe182e62c9af0 : Device for ”¥FileSystem¥Mup” [Type: _FILE_OBJECT *]
Vpb: 0x0
FsContext: 0x0
FsContext2: 0x0
SectionObjectPointer: 0x0
PrivateCacheMap: 0x0
FinalStatus: 0
~(略)~
Flags: 0x40002
FileName: ”¥;:00000000000960e4¥192.168.5.10¥IPC$” [Type: _UNICODE_STRING]
~(略)~
FileObjectExtension: 0xffffe182eee55e60
■6回目のブレーク
kd> !thread
callSite
passTrough!PtTestCallbackData
passTrough!PtPreOperationPassThrough
FLTMGR!FltpPerformPreCallbacksWorker
FLTMGR!PassThroughInternal
FLTMGR!FltpPassThrough
FLTMGR!FltpFsControl
FLTMGR!FltpDispatch
nt!IofCallDriver
nt!IopDeleteFile
nt!ObpRemoveObject
nt!ObfDeNtFsControlFilereferenceObjectWithTag
nt!ObCloseHandleTableEntry
nt!NtClose
nt!KiSystemServiceCopyEnd
kd> dt fltmgr!_FLT_CALLBACK_DATA @rcx
Flags: 1
Thread: _KTHREAD
Iopb: _FLT_IO_PARAMETER_BLOCK
IoStatus: _IO_STATUS_BLOCK
TagData: (null)
QueueLinks: _LIST_ENTRY
QueueContext: [2] (null)
FilterContext: [4] (null)
RequestorMode: 1 ’’
kd> dt Iopbの内容
IrpFlags: 0x404
MajorFunction: 0x2
MinorFunction: 0x0
OperationFlags: 0x0
Reserved: 0x0
TargetFileObject: 0xffffe182eb3d69d0
TargetInstance: 0xffffe182f0497660
Parameters: [ Type: _FLT_PARAMETERS]
kd> dt TargetFileObjectの内容
Type: 5
Size: 216
DeviceObject: 0xffffe182e62c9af0 : Device for ”¥FileSystem¥Mup” [Type: _FILE_OBJECT *]
Vpb: 0x0
FsContext: 0x0
FsContext2: 0x0
SectionObjectPointer: 0x0
PrivateCacheMap: 0x0
FinalStatus: 0
~(略)~
Flags: 0x40002
FileName: ”¥;:00000000000960e4¥192.168.5.10¥IPC$” [Type: _UNICODE_STRING]
~(略)~
FileObjectExtension: 0xffffe182e62c9af0
Fast I/Oのコールバック関数(IRP_MJ_NETWORK_QUERY_OPEN)では、「FLT_PREOP_DISALLOW_FASTIO」を返しています。
その他のコールバック関数では、以下のコードを実行し、関数を抜けています。
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
return FLT_PREOPE_COMPLETE;
しかし、共有フォルダへのアクセスをブロックできていません。
ブロックするためには、どうすればよろしいでしょうか。
アドバイスをいただければ幸いです。
以上、よろしくお願いいたします。
-
ご返信いただき、ありがとうございます。アップロードいただきました内容を拝見いたしました。
ご質問がございます。
私の理解では、ネットワークリダイレクターでは、Lanman Workstationなど、どこに振り分けるのかという判断を行っていますが、「\;RdpDr;」のようなプレフィックスが付与されることはないと理解しています。この理解は、間違っているのでしょうか。
以下のマイクロソフト社のドキュメント等も確認しています。
「UNC 名前付けと MUP のサポート」などの文章
https://docs.microsoft.com/ja-jp/windows-hardware/drivers/ifs/support-for-unc-naming-and-mup
> アップロードした返信ファイルにも書きましたが、"\;Csc\.\.\192.168.X.X" パス名でのオープン要求は、ブロックしてるんですか?
「192.168.X.X」が含まれているパス名は、すべてブロックしています。
動作検証を実施しているWindows10環境では、コマンドプロンプトから「net use \\192.168.X.X\share」コマンドを実行すると、パス名に「\;RdpDr;:1\192.168.X.X」のように「\;RdpDr;」が含まれます。
皆様のWindows10環境では、このようにパス名に、「\;RdpDr;」が含まれていますでしょうか。
お手数をお掛けいたしますが、ご確認いただき、結果について、ご教示いただければ幸いです。
-
ご返信いただき、ありがとうございます。
ご教示いただきました以下のブレークポイントを設定し、デバックを行いましたところ
MUPおよびRDPDRに届いていました。
・bp mup!MupCreate
・bp rdpdr!DrPeekDispatch
・bp csc!CscFsdDispatch
フォーラムの不具合で、デバックログを投稿できませんでしたので、取り急ぎ、ご返信いたします。
お気づきの点など、ございましたら、ご教示いただけましたら幸いです。
以上、よろしくお願いいたします。一部では、ありますが、デバックログを記載いたします。
----- MupCreate ----- # Child-SP RetAddr Call Site 00 ffff8c88`a015f0e8 fffff806`44e4e565 mup!MupCreate 01 ffff8c88`a015f0f0 fffff806`46f472af nt!IofCallDriver+0x55 02 ffff8c88`a015f130 fffff806`46f7c0d4 FLTMGR!FltpLegacyProcessingAfterPreCallbacksCompleted+0x28f 03 ffff8c88`a015f1a0 fffff806`44e4e565 FLTMGR!FltpCreate+0x324 04 ffff8c88`a015f250 fffff806`44e9c224 nt!IofCallDriver+0x55 05 ffff8c88`a015f290 fffff806`452255bd nt!IoCallDriverWithTracing+0x34 06 ffff8c88`a015f2e0 fffff806`4521319e nt!IopParseDevice+0x117d 07 ffff8c88`a015f450 fffff806`452354ea nt!ObpLookupObjectName+0x3fe 08 ffff8c88`a015f620 fffff806`45300f85 nt!ObOpenObjectByNameEx+0x1fa 09 ffff8c88`a015f750 fffff806`450096b5 nt!NtQueryAttributesFile+0x1c5 0a ffff8c88`a015fa00 00007ffd`2ae0d4e4 nt!KiSystemServiceCopyEnd+0x25 0b 00000011`f253e438 00007ffd`246813b6 0x00007ffd`2ae0d4e4 0c 00000011`f253e440 00000011`f253f600 0x00007ffd`246813b6 0d 00000011`f253e448 00000011`f253e540 0x00000011`f253f600 0e 00000011`f253e450 00000152`f8e86d58 0x00000011`f253e540 0f 00000011`f253e458 00000152`f8e86d58 0x00000152`f8e86d58 10 00000011`f253e460 00000152`f9050000 0x00000152`f8e86d58 11 00000011`f253e468 00000000`00000000 0x00000152`f9050000 rax=fffff806496ae7e0 rbx=ffffe70e63749010 rcx=ffffe70e5d7f8cf0 rdx=ffffe70e69f6b9f0 rsi=ffffe70e69f6b9f0 rdi=ffffe70e5da92b80 rip=fffff806496ae7e0 rsp=ffff8c88a015f0e8 rbp=0000000000000008 r8=0000000000000000 r9=ffffe70e5d7f8cf0 r10=fffff806496ae7e0 r11=0000000000000000 r12=0000000000000000 r13=ffffe70e6cd8a900 r14=ffffe70e69f6bb98 r15=0000000000000000 iopl=0 nv up ei pl zr na po nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00040246 mup!MupCreate: fffff806`496ae7e0 488bc4 mov rax,rsp Device object (ffffe70e5d7f8cf0) is for: Mup \FileSystem\Mup DriverObject ffffe70e5d7bfd20 Current Irp 00000000 RefCount 12 Type 00000014 Flags 00040040 SecurityDescriptor ffffa902502033a0 DevExt 00000000 DevObjExt ffffe70e5d7f8e40 ExtensionFlags (0x00000800) DOE_DEFAULT_SD_PRESENT Characteristics (0x00020010) FILE_REMOTE_DEVICE, FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL AttachedDevice (Upper) ffffe70e5da92b80 \FileSystem\FltMgr Device queue is not busy. Irp is active with 4 stacks 3 is current (= 0xffffe70e69f6bb50) No Mdl: No System Buffer: Thread ffffe70e6a8b1080: Irp stack trace. cmd flg cl Device File Completion-Context [N/A(0), N/A(0)] 0 0 00000000 00000000 00000000-00000000 Args: 00000000 00000000 00000000 00000000 [N/A(0), N/A(0)] 0 0 00000000 00000000 00000000-00000000 Args: 00000000 00000000 00000000 00000000 >[IRP_MJ_CREATE(0), N/A(0)] 0 e0 ffffe70e5d7f8cf0 ffffe70e6cd8a8e0 fffff80646f4c1e0-ffffe70e63749010 Success Error Cancel \FileSystem\Mup FLTMGR!FltpSynchronizedOperationCompletion Args: ffff8c88a015f3e8 01200000 00070000 00000000 [IRP_MJ_CREATE(0), N/A(0)] 0 0 ffffe70e5da92b80 ffffe70e6cd8a8e0 00000000-00000000 \FileSystem\FltMgr Args: ffff8c88a015f3e8 01200000 00070000 00000000 +0x000 MajorFunction : 0 ’’ +0x001 MinorFunction : 0 ’’ +0x002 Flags : 0 ’’ +0x003 Control : 0xe0 ’’ +0x008 Parameters : <anonymous-tag> +0x028 DeviceObject : 0xffffe70e`5d7f8cf0 _DEVICE_OBJECT +0x030 FileObject : 0xffffe70e`6cd8a8e0 _FILE_OBJECT +0x038 CompletionRoutine : 0xfffff806`46f4c1e0 long FLTMGR!FltpSynchronizedOperationCompletion+0 +0x040 Context : 0xffffe70e`63749010 Void !DevObj !DrvObj !DevExt ObjectName ffffe70e5da92b80 \FileSystem\FltMgr ffffe70e5da92cd0 > ffffe70e5d7f8cf0 \FileSystem\Mup 00000000 Mup \;RdpDr\;:1\192.168.0.5\share Device Object: 0xffffe70e5d7f8cf0 \FileSystem\Mup Vpb is NULL Flags: 0x0 CurrentByteOffset: 0 ----- DrPeekDispacth ----- # Child-SP RetAddr Call Site 00 ffff8c88`a015ef98 fffff806`44e4e565 rdpdr!DrPeekDispatch 01 ffff8c88`a015efa0 fffff806`496af188 nt!IofCallDriver+0x55 02 ffff8c88`a015efe0 fffff806`496aecd9 mup!MupiCallUncProvider+0xb8 03 ffff8c88`a015f050 fffff806`496ae9af mup!MupStateMachine+0x59 04 ffff8c88`a015f080 fffff806`44e4e565 mup!MupCreate+0x1cf 05 ffff8c88`a015f0f0 fffff806`46f472af nt!IofCallDriver+0x55 06 ffff8c88`a015f130 fffff806`46f7c0d4 FLTMGR!FltpLegacyProcessingAfterPreCallbacksCompleted+0x28f 07 ffff8c88`a015f1a0 fffff806`44e4e565 FLTMGR!FltpCreate+0x324 08 ffff8c88`a015f250 fffff806`44e9c224 nt!IofCallDriver+0x55 09 ffff8c88`a015f290 fffff806`452255bd nt!IoCallDriverWithTracing+0x34 0a ffff8c88`a015f2e0 fffff806`4521319e nt!IopParseDevice+0x117d 0b ffff8c88`a015f450 fffff806`452354ea nt!ObpLookupObjectName+0x3fe 0c ffff8c88`a015f620 fffff806`45300f85 nt!ObOpenObjectByNameEx+0x1fa 0d ffff8c88`a015f750 fffff806`450096b5 nt!NtQueryAttributesFile+0x1c5 0e ffff8c88`a015fa00 00007ffd`2ae0d4e4 nt!KiSystemServiceCopyEnd+0x25 0f 00000011`f253e438 00007ffd`246813b6 0x00007ffd`2ae0d4e4 10 00000011`f253e440 00000011`f253f600 0x00007ffd`246813b6 11 00000011`f253e448 00000011`f253e540 0x00000011`f253f600 12 00000011`f253e450 00000152`f8e86d58 0x00000011`f253e540 13 00000011`f253e458 00000152`f8e86d58 0x00000152`f8e86d58 14 00000011`f253e460 00000152`f9050000 0x00000152`f8e86d58 15 00000011`f253e468 00000000`00000000 0x00000152`f9050000 rax=fffff8065d3e0380 rbx=ffffe70e67c2c2b0 rcx=ffffe70e6680f670 rdx=ffffe70e69f6b9f0 rsi=ffffa902502c4b80 rdi=0000000000000000 rip=fffff8065d3e0380 rsp=ffff8c88a015ef98 rbp=ffffe70e69f6b9f0 r8=0000000000000000 r9=ffffe70e6680f670 r10=fffff8065d3e0380 r11=0000000000000000 r12=fffff806496a8000 r13=ffffe70e6cd8a900 r14=ffffe70e64670500 r15=ffffe70e69f6bb50 iopl=0 nv up ei pl zr na po nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00040246 rdpdr!DrPeekDispatch: fffff806`5d3e0380 48895c2420 mov qword ptr [rsp+20h],rbx ss:0018:ffff8c88`a015efb8=fffff806455b2094 Device object (ffffe70e6680f670) is for: \Driver\RDPDR DriverObject ffffe70e63e88d20 Current Irp 00000000 RefCount 0 Type 00000014 Flags 00000000 SecurityDescriptor ffffa90253305ee0 DevExt ffffe70e6680f7c0 DevObjExt ffffe70e6680fec0 ExtensionFlags (0000000000) Characteristics (0x00000010) FILE_REMOTE_DEVICE Device queue is not busy. Irp is active with 4 stacks 2 is current (= 0xffffe70e69f6bb08) No Mdl: No System Buffer: Thread ffffe70e6a8b1080: Irp stack trace. cmd flg cl Device File Completion-Context [N/A(0), N/A(0)] 0 0 00000000 00000000 00000000-00000000 Args: 00000000 00000000 00000000 00000000 >[IRP_MJ_CREATE(0), N/A(0)] 0 e0 ffffe70e6680f670 ffffe70e6cd8a8e0 fffff806496a1090-ffffe70e67c2c2b0 Success Error Cancel \Driver\RDPDR mup!MupiUncProviderCompletion Args: ffff8c88a015f3e8 01200000 00070000 00000000 [IRP_MJ_CREATE(0), N/A(0)] 0 e0 ffffe70e5d7f8cf0 ffffe70e6cd8a8e0 fffff80646f4c1e0-ffffe70e63749010 Success Error Cancel \FileSystem\Mup FLTMGR!FltpSynchronizedOperationCompletion Args: ffff8c88a015f3e8 01200000 00070000 00000000 [IRP_MJ_CREATE(0), N/A(0)] 0 0 ffffe70e5da92b80 ffffe70e6cd8a8e0 00000000-00000000 \FileSystem\FltMgr Args: ffff8c88a015f3e8 01200000 00070000 00000000 +0x000 MajorFunction : 0 ’’ +0x001 MinorFunction : 0 ’’ +0x002 Flags : 0 ’’ +0x003 Control : 0xe0 ’’ +0x008 Parameters : <anonymous-tag> +0x028 DeviceObject : 0xffffe70e`6680f670 _DEVICE_OBJECT +0x030 FileObject : 0xffffe70e`6cd8a8e0 _FILE_OBJECT +0x038 CompletionRoutine : 0xfffff806`496a1090 long mup!MupiUncProviderCompletion+0 +0x040 Context : 0xffffe70e`67c2c2b0 Void !DevObj !DrvObj !DevExt ObjectName > ffffe70e6680f670 \Driver\RDPDR ffffe70e6680f7c0 \;:1\192.168.0.5\share Device Object: 0xffffe70e5d7f8cf0 \FileSystem\Mup Vpb is NULL Flags: 0x0 CurrentByteOffset: 0 File object extension is at ffffe70e6361d260:
-
『「192.168.X.X」が含まれているパス名は、すべてブロックしています。』とのことですが、提示されたコールスタックの状態を確認する限り、Mini-Filter 側で "\;RdpDr\;:1\192.168.0.5\share" のパスに対するブロックができていません。
デバッガ上でトレースするか、あるいはデバッガ上にログを吐かせ、該当パス名に対するブロックが確実に行われているか、確認されることをお勧めします。
P.S.
先の返信で添付されたトレース ログは、Visual Studio で採取ししたものでしょうか?
(Visual Studio でデバッグしたことないので、WinDbg と同じコマンドでトレース ログをうまく採取出来たのか知りたいです。)
それにしても「見ずらいログ!」と思ったら、私のコマンド サンプルがいけなかったんですね。。。。
下記のように ".echo" コマンドで注釈を入れると、少しは見やすくなります。
(個人的には「ひらがな」を使うと、より見やすくなるような気がしてます。)
bp mup!MupCreate ".echo -----------------------; .echo [こーるすたっく]; k; .echo [れじすた]; r; .echo [でぶァイス おぶじぇくと]; !devobj @rcx; .echo [IRP]; !irp @rdx; r @$t1=poi(@rdx+0x078+0x040); .echo [IO_STACK_LOCATION]; dt nt!_IO_STACK_LOCATION @$t1; r @$t2=poi(@$t1+0x28); r @$t3=poi(@$t1+0x30); .echo [でぶァイス すたっく]; !devstack @$t2; .echo [ふぁいる おぶじぇくと]; !fileobj @$t3; g"
- 編集済み お馬鹿 2022年5月30日 23:18
-
ご返信いただき、ありがとうございます。
> 先の返信で添付されたトレース ログは、Visual Studio で採取ししたものでしょうか?
WinDbgを使用しています。少し見やすくなるようにしてみました。
> デバッガ上でトレースするか、あるいはデバッガ上にログを吐かせ、該当パス名に対するブロックが確実に行われているか、確認されることをお勧めします。
コードを修正し、すべての操作前コールバック関数(PtPreOperationBlock)において、
パス名に「192.168.0.5」が含まれる場合は、以下のように設定しブロックするようにしました。
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
return FLT_PREOP_COMPLETE;
また、「IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE」及び「IRP_MJ_NETWORK_QUERY_OPEN」に対する
Fast I/Oのコールバック関数(PassThrough!PtPreOperationFast)では、
IoStatusは変更せず、FLT_PREOP_DISALLOW_FASTIOで関数を抜けています。
return FLT_PREOP_DISALLOW_FASTIO;
PtSetIoStatusAccessDeny関数は、ブレークポイントを設定するための関数で
処理は行っていません。
操作前コールバック関数で、アクセス拒否を設定し、FLT_PREOP_COMPLETEで戻っていますが
その後、MUPへIRP要求が飛んでいるようです。
ブロックするには、他の処理が必要になるのでしょうか。
以上、よろしくお願いいたします。
以下にログを記載します。0: kd> g ********** PtIoStatusAccessDeny ********** ---------- [レジストリ] ------ # Child-SP RetAddr Call Site 00 fffffe09`11266fd8 fffff800`3a0c1472 PassThrough!PtSetIoStatusAccessDeny [C:\Users\user01\source\repos\passThrough\passThrough\passThrough.c @ 661] 01 fffffe09`11266fe0 fffff800`3f54666c PassThrough!PtPreOperationFastIO+0x162 [C:\Users\user01\source\repos\passThrough\passThrough\passThrough.c @ 789] 02 fffffe09`11267040 fffff800`3f5446f3 FLTMGR!FltpPerformPreCallbacksWorker+0x36c 03 fffffe09`11267160 fffff800`3f57bac1 FLTMGR!FltpPassThroughFastIo+0xc3 04 fffffe09`112671e0 fffff800`3ca26d94 FLTMGR!FltpFastIoQueryOpen+0x131 05 fffffe09`11267280 fffff800`3ca253b0 nt!IopQueryInformation+0x94 06 fffffe09`112672e0 fffff800`3ca1319e nt!IopParseDevice+0xf70 07 fffffe09`11267450 fffff800`3ca354ea nt!ObpLookupObjectName+0x3fe 08 fffffe09`11267620 fffff800`3cb00f85 nt!ObOpenObjectByNameEx+0x1fa 09 fffffe09`11267750 fffff800`3c8096b5 nt!NtQueryAttributesFile+0x1c5 0a fffffe09`11267a00 00007ff9`abecd4e4 nt!KiSystemServiceCopyEnd+0x25 0b 000000d1`5ce7e238 00007ff9`932413b6 ntdll!NtQueryAttributesFile+0x14 0c 000000d1`5ce7e240 000000d1`5ce7f400 0x00007ff9`932413b6 0d 000000d1`5ce7e248 000000d1`5ce7e340 0x000000d1`5ce7f400 0e 000000d1`5ce7e250 00000241`184a7538 0x000000d1`5ce7e340 0f 000000d1`5ce7e258 00000241`184a7538 0x00000241`184a7538 10 000000d1`5ce7e260 00000000`00000011 0x00000241`184a7538 11 000000d1`5ce7e268 00007ff9`abe5b3c7 0x11 12 000000d1`5ce7e270 00007ff9`abe4c3c8 ntdll!RtlpAllocateHeapInternal+0x9a7 13 000000d1`5ce7e380 00007ff9`abe4aced ntdll!sxsisol_SearchActCtxForDllName+0x114 14 000000d1`5ce7e4f0 00007ff9`abe4a613 ntdll!RtlDosApplyFileIsolationRedirection_Ustr+0x30d 15 000000d1`5ce7e770 00007ff9`abe4a407 ntdll!LdrpApplyFileNameRedirection+0xff 16 000000d1`5ce7e810 00007ff9`abe4dbcd ntdll!LdrpPreprocessDllName+0xa7 17 000000d1`5ce7e880 00007ff9`abe60571 ntdll!LdrpFindLoadedDll+0xad 18 000000d1`5ce7ea10 00000000`000000b4 ntdll!LdrpResolveProcedureAddress+0x17d 19 000000d1`5ce7eb60 00000241`1849ac30 0xb4 1a 000000d1`5ce7eb68 000000d1`5ce7ec60 0x00000241`1849ac30 1b 000000d1`5ce7eb70 00000241`184ae680 0x000000d1`5ce7ec60 1c 000000d1`5ce7eb78 00000000`00000000 0x00000241`184ae680 ---------- [レジストリ] ------rax=0000000000000000 rbx=ffff9a83b0fe7050 rcx=ffff9a83b0fe7138 rdx=fffffe09112670d8 rsi=ffffae8097678888 rdi=ffff9a83a2f52708 rip=fffff8003a0c15f0 rsp=fffffe0911266fd8 rbp=fffffe09112670f9 r8=0000000000000008 r9=000000000000004d r10=0000000073414e42 r11=fffffe0911266fd8 r12=ffff9a83b0fe70d0 r13=fffffe0911267210 r14=ffff9a83b3702880 r15=0000000010000004 iopl=0 nv up ei ng nz na po nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00040286 PassThrough!PtSetIoStatusAccessDeny: fffff800`3a0c15f0 4889542410 mov qword ptr [rsp+10h],rdx ss:0018:fffffe09`11266fe8=fffffe09112670f9 ----- [FLT_CALLBACK_DATA] ------ +0x000 Flags : 2 +0x008 Thread : 0xffff9a83`b3bb9080 _KTHREAD +0x010 Iopb : 0xffff9a83`b0fe7190 _FLT_IO_PARAMETER_BLOCK +0x018 IoStatus : _IO_STATUS_BLOCK +0x028 TagData : (null) +0x030 QueueLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ] +0x040 QueueContext : [2] (null) +0x030 FilterContext : [4] (null) +0x050 RequestorMode : 1 '' ----- [FLT_IO_PARAMETER_BLOCK] ----- +0x000 IrpFlags : 0 +0x004 MajorFunction : 0xf2 '' +0x005 MinorFunction : 0 '' +0x006 OperationFlags : 0 '' +0x007 Reserved : 0 '' +0x008 TargetFileObject : 0xfffffe09`112678f0 _FILE_OBJECT +0x010 TargetInstance : 0xffff9a83`b3702050 _FLT_INSTANCE +0x018 Parameters : _FLT_PARAMETERS ----- [FILE_OBJECT] ----- +0x000 Type : 0n5 +0x002 Size : 0n216 +0x008 DeviceObject : 0xffff9a83`a3ee60d0 _DEVICE_OBJECT +0x010 Vpb : (null) +0x018 FsContext : (null) +0x020 FsContext2 : (null) +0x028 SectionObjectPointer : (null) +0x030 PrivateCacheMap : (null) +0x038 FinalStatus : 0n0 +0x040 RelatedFileObject : (null) +0x048 LockOperation : 0 '' +0x049 DeletePending : 0 '' +0x04a ReadAccess : 0 '' +0x04b WriteAccess : 0 '' +0x04c DeleteAccess : 0 '' +0x04d SharedRead : 0 '' +0x04e SharedWrite : 0 '' +0x04f SharedDelete : 0 '' +0x050 Flags : 0 +0x058 FileName : _UNICODE_STRING "\;RdpDr\;:1\192.168.0.5\share" +0x068 CurrentByteOffset : _LARGE_INTEGER 0x0 +0x070 Waiters : 0 +0x074 Busy : 0 +0x078 LastLock : (null) +0x080 Lock : _KEVENT +0x098 Event : _KEVENT +0x0b0 CompletionContext : (null) +0x0b8 IrpListLock : 0 +0x0c0 IrpList : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ] +0x0d0 FileObjectExtension : (null) ********** PtIoStatusAccessDeny ********** ---------- [レジストリ] ------ # Child-SP RetAddr Call Site 00 fffffe09`11266fc8 fffff800`3a0c12c2 PassThrough!PtSetIoStatusAccessDeny [C:\Users\user01\source\repos\passThrough\passThrough\passThrough.c @ 661] 01 fffffe09`11266fd0 fffff800`3f54666c PassThrough!PtPreOperationBlock+0x162 [C:\Users\user01\source\repos\passThrough\passThrough\passThrough.c @ 727] 02 fffffe09`11267030 fffff800`3f54611a FLTMGR!FltpPerformPreCallbacksWorker+0x36c 03 fffffe09`11267150 fffff800`3f57c0c0 FLTMGR!FltpPassThroughInternal+0xca 04 fffffe09`112671a0 fffff800`3c64e565 FLTMGR!FltpCreate+0x310 05 fffffe09`11267250 fffff800`3c69c224 nt!IofCallDriver+0x55 06 fffffe09`11267290 fffff800`3ca255bd nt!IoCallDriverWithTracing+0x34 07 fffffe09`112672e0 fffff800`3ca1319e nt!IopParseDevice+0x117d 08 fffffe09`11267450 fffff800`3ca354ea nt!ObpLookupObjectName+0x3fe 09 fffffe09`11267620 fffff800`3cb00f85 nt!ObOpenObjectByNameEx+0x1fa 0a fffffe09`11267750 fffff800`3c8096b5 nt!NtQueryAttributesFile+0x1c5 0b fffffe09`11267a00 00007ff9`abecd4e4 nt!KiSystemServiceCopyEnd+0x25 0c 000000d1`5ce7e238 00007ff9`932413b6 ntdll!NtQueryAttributesFile+0x14 0d 000000d1`5ce7e240 000000d1`5ce7f400 0x00007ff9`932413b6 0e 000000d1`5ce7e248 000000d1`5ce7e340 0x000000d1`5ce7f400 0f 000000d1`5ce7e250 00000241`184a7538 0x000000d1`5ce7e340 10 000000d1`5ce7e258 00000241`184a7538 0x00000241`184a7538 11 000000d1`5ce7e260 00000000`00000011 0x00000241`184a7538 12 000000d1`5ce7e268 00007ff9`abe5b3c7 0x11 13 000000d1`5ce7e270 00007ff9`abe4c3c8 ntdll!RtlpAllocateHeapInternal+0x9a7 14 000000d1`5ce7e380 00007ff9`abe4aced ntdll!sxsisol_SearchActCtxForDllName+0x114 15 000000d1`5ce7e4f0 00007ff9`abe4a613 ntdll!RtlDosApplyFileIsolationRedirection_Ustr+0x30d 16 000000d1`5ce7e770 00007ff9`abe4a407 ntdll!LdrpApplyFileNameRedirection+0xff 17 000000d1`5ce7e810 00007ff9`abe4dbcd ntdll!LdrpPreprocessDllName+0xa7 18 000000d1`5ce7e880 00007ff9`abe60571 ntdll!LdrpFindLoadedDll+0xad 19 000000d1`5ce7ea10 00000000`000000b4 ntdll!LdrpResolveProcedureAddress+0x17d 1a 000000d1`5ce7eb60 00000241`1849ac30 0xb4 1b 000000d1`5ce7eb68 000000d1`5ce7ec60 0x00000241`1849ac30 1c 000000d1`5ce7eb70 00000241`184ae680 0x000000d1`5ce7ec60 1d 000000d1`5ce7eb78 00000000`00000000 0x00000241`184ae680 ---------- [レジストリ] ------rax=0000000000000000 rbx=ffff9a83b0fe7050 rcx=ffff9a83b0fe7138 rdx=fffffe09112670c8 rsi=ffffae8097678888 rdi=ffff9a83a2f522e8 rip=fffff8003a0c15f0 rsp=fffffe0911266fc8 rbp=fffffe09112670e9 r8=0000000000000008 r9=000000000000004d r10=0000000073414e42 r11=fffffe0911266fc8 r12=ffff9a83b0fe70d0 r13=fffffe09112671e0 r14=ffff9a83b3702280 r15=000000001000000c iopl=0 nv up ei ng nz na pe nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00040282 PassThrough!PtSetIoStatusAccessDeny: fffff800`3a0c15f0 4889542410 mov qword ptr [rsp+10h],rdx ss:0018:fffffe09`11266fd8=fffffe09112670e9 ----- [FLT_CALLBACK_DATA] ------ +0x000 Flags : 9 +0x008 Thread : 0xffff9a83`b3bb9080 _KTHREAD +0x010 Iopb : 0xffff9a83`b0fe7190 _FLT_IO_PARAMETER_BLOCK +0x018 IoStatus : _IO_STATUS_BLOCK +0x028 TagData : (null) +0x030 QueueLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ] +0x040 QueueContext : [2] (null) +0x030 FilterContext : [4] (null) +0x050 RequestorMode : 1 '' ----- [FLT_IO_PARAMETER_BLOCK] ----- +0x000 IrpFlags : 0x884 +0x004 MajorFunction : 0 '' +0x005 MinorFunction : 0 '' +0x006 OperationFlags : 0 '' +0x007 Reserved : 0 '' +0x008 TargetFileObject : 0xffff9a83`b1c90400 _FILE_OBJECT +0x010 TargetInstance : 0xffff9a83`b3702050 _FLT_INSTANCE +0x018 Parameters : _FLT_PARAMETERS ----- [FILE_OBJECT] ----- +0x000 Type : 0n5 +0x002 Size : 0n216 +0x008 DeviceObject : 0xffff9a83`a3ee60d0 _DEVICE_OBJECT +0x010 Vpb : (null) +0x018 FsContext : (null) +0x020 FsContext2 : (null) +0x028 SectionObjectPointer : (null) +0x030 PrivateCacheMap : (null) +0x038 FinalStatus : 0n0 +0x040 RelatedFileObject : (null) +0x048 LockOperation : 0 '' +0x049 DeletePending : 0 '' +0x04a ReadAccess : 0 '' +0x04b WriteAccess : 0 '' +0x04c DeleteAccess : 0 '' +0x04d SharedRead : 0 '' +0x04e SharedWrite : 0 '' +0x04f SharedDelete : 0 '' +0x050 Flags : 0 +0x058 FileName : _UNICODE_STRING "\;RdpDr\;:1\192.168.0.5\share" +0x068 CurrentByteOffset : _LARGE_INTEGER 0x0 +0x070 Waiters : 0 +0x074 Busy : 0 +0x078 LastLock : (null) +0x080 Lock : _KEVENT +0x098 Event : _KEVENT +0x0b0 CompletionContext : (null) +0x0b8 IrpListLock : 0 +0x0c0 IrpList : _LIST_ENTRY [ 0xffff9a83`b1c904c0 - 0xffff9a83`b1c904c0 ] +0x0d0 FileObjectExtension : (null) ********** MupCreate ********** ---------- [コールスタック] ---- # Child-SP RetAddr Call Site 00 fffffe09`116376b8 fffff800`3c64e565 mup!MupCreate 01 fffffe09`116376c0 fffff800`3f57c2db nt!IofCallDriver+0x55 02 fffffe09`11637700 fffff800`3c64e565 FLTMGR!FltpCreate+0x52b 03 fffffe09`116377b0 fffff800`3c69c224 nt!IofCallDriver+0x55 04 fffffe09`116377f0 fffff800`3ca255bd nt!IoCallDriverWithTracing+0x34 05 fffffe09`11637840 fffff800`3ca1319e nt!IopParseDevice+0x117d 06 fffffe09`116379b0 fffff800`3ca354ea nt!ObpLookupObjectName+0x3fe 07 fffffe09`11637b80 fffff800`3cb0043f nt!ObOpenObjectByNameEx+0x1fa 08 fffffe09`11637cb0 fffff800`3caffefd nt!IopCreateFile+0x40f 09 fffffe09`11637d50 fffff800`54562074 nt!IoCreateFileEx+0x11d 0a fffffe09`11637df0 fffff800`54561f17 dfsc!DfscConnOpenIpcConnectionCallin+0x144 0b fffffe09`11637f30 fffff800`3c7fb63e dfsc!DfscConnOpenIpcConnectionCallout+0x37 0c fffffe09`11637f80 fffff800`3c7fb5fc nt!KxSwitchKernelStackCallout+0x2e 0d fffffe09`11267090 fffff800`3c62768d nt!KiSwitchKernelStackContinue 0e fffffe09`112670b0 fffff800`3c627482 nt!KiExpandKernelStackAndCalloutOnStackSegment+0x19d 0f fffffe09`11267150 fffff800`3c6272e3 nt!KiExpandKernelStackAndCalloutSwitchStack+0xf2 10 fffffe09`112671c0 fffff800`3c62729d nt!KeExpandKernelStackAndCalloutInternal+0x33 11 fffffe09`11267230 fffff800`54561c7b nt!KeExpandKernelStackAndCalloutEx+0x1d 12 fffffe09`11267270 fffff800`545618e6 dfsc!DfscRmGetReferral+0x27b 13 fffffe09`11267360 fffff800`545533af dfsc!DfscCmGetRootReferralState+0x76 14 fffffe09`112673f0 fffff800`54568e0e dfsc!DfscGetReferralFromPath+0x7b 15 fffffe09`11267460 fffff800`5456d001 dfsc!DfscCredVerify+0x8e 16 fffffe09`11267500 fffff800`54564ee0 dfsc!DfscFsctrlCreateDriveLetter+0x4ad 17 fffffe09`11267680 fffff800`3c64e565 dfsc!DfscFileSystemControl+0x2dd0 18 fffffe09`11267700 fffff800`3ca0da18 nt!IofCallDriver+0x55 19 fffffe09`11267740 fffff800`3ca0e9f7 nt!IopSynchronousServiceTail+0x1a8 1a fffffe09`112677e0 fffff800`3cac9d96 nt!IopXxxControlFile+0xc67 1b fffffe09`11267920 fffff800`3c8096b5 nt!NtFsControlFile+0x56 1c fffffe09`11267990 00007ff9`abecd464 nt!KiSystemServiceCopyEnd+0x25 1d 000000d1`5ce7dca8 00007ff9`8210faa3 ntdll!NtFsControlFile+0x14 1e 000000d1`5ce7dcb0 00000000`00000168 0x00007ff9`8210faa3 1f 000000d1`5ce7dcb8 00000241`184b1270 0x168 20 000000d1`5ce7dcc0 00000241`183a0fc0 0x00000241`184b1270 21 000000d1`5ce7dcc8 00000241`184b0000 0x00000241`183a0fc0 22 000000d1`5ce7dcd0 000000d1`5ce7dd28 0x00000241`184b0000 23 000000d1`5ce7dcd8 00007ff9`000601e0 0x000000d1`5ce7dd28 24 000000d1`5ce7dce0 00000241`184b1270 0x00007ff9`000601e0 25 000000d1`5ce7dce8 00000000`0000004a 0x00000241`184b1270 26 000000d1`5ce7dcf0 00000000`00000000 0x4a ---------- [レジストリ] ------rax=fffff80041cae7e0 rbx=0000000000000000 rcx=ffff9a83a3ee60d0 rdx=ffff9a83b441e010 rsi=ffff9a83b084f600 rdi=ffff9a83a90f7a70 rip=fffff80041cae7e0 rsp=fffffe09116376b8 rbp=fffffe0911637749 r8=0000000000000000 r9=ffff9a83a3ee60d0 r10=fffff80041cae7e0 r11=0000000000000000 r12=ffff9a83b441e1b8 r13=ffff9a83b084f608 r14=ffff9a83b441e010 r15=ffff9a83b084f5b0 iopl=0 nv up ei pl zr na po nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00040246 mup!MupCreate: fffff800`41cae7e0 488bc4 mov rax,rsp ---------- [デバイスオブジェクト] -Device object (ffff9a83a3ee60d0) is for: Mup \FileSystem\Mup DriverObject ffff9a83a90d8de0 Current Irp 00000000 RefCount 12 Type 00000014 Flags 00040040 SecurityDescriptor ffffae807d602c20 DevExt 00000000 DevObjExt ffff9a83a3ee6220 ExtensionFlags (0x00000800) DOE_DEFAULT_SD_PRESENT Characteristics (0x00020010) FILE_REMOTE_DEVICE, FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL AttachedDevice (Upper) ffff9a83a90f7a70 \FileSystem\FltMgr Device queue is not busy. ---------- [IRP] ---------- Irp is active with 4 stacks 4 is current (= 0xffff9a83b441e1b8) No Mdl: System buffer=ffff9a83b4f70530: Thread ffff9a83b3bb9080: Irp stack trace. cmd flg cl Device File Completion-Context [N/A(0), N/A(0)] 0 0 00000000 00000000 00000000-00000000 Args: 00000000 00000000 00000000 00000000 [N/A(0), N/A(0)] 0 0 00000000 00000000 00000000-00000000 Args: 00000000 00000000 00000000 00000000 [N/A(0), N/A(0)] 0 0 00000000 00000000 00000000-00000000 Args: 00000000 00000000 00000000 00000000 >[IRP_MJ_CREATE(0), N/A(0)] 0 0 ffff9a83a3ee60d0 ffff9a83b084f5b0 00000000-00000000 \FileSystem\Mup Args: fffffe0911637948 030000a0 00070080 00000034 ---------- [IO_STACK_LOCATION] ---------- +0x000 MajorFunction : 0 '' +0x001 MinorFunction : 0 '' +0x002 Flags : 0 '' +0x003 Control : 0 '' +0x008 Parameters : <anonymous-tag> +0x028 DeviceObject : 0xffff9a83`a3ee60d0 _DEVICE_OBJECT +0x030 FileObject : 0xffff9a83`b084f5b0 _FILE_OBJECT +0x038 CompletionRoutine : (null) +0x040 Context : (null) ---------- [デバイススタック] --- !DevObj !DrvObj !DevExt ObjectName ffff9a83a90f7a70 \FileSystem\FltMgr ffff9a83a90f7bc0 > ffff9a83a3ee60d0 \FileSystem\Mup 00000000 Mup ---------- [ファイルオブジェクト] - \192.168.0.5\IPC$ Device Object: 0xffff9a83a3ee60d0 \FileSystem\Mup Vpb is NULL Flags: 0x2 Synchronous IO CurrentByteOffset: 0 ********** RDPDR!DrPeekDispacth ********** ---------- [コールスタック] ---- # Child-SP RetAddr Call Site 00 fffffe09`116373a8 fffff800`3c64e565 rdpdr!DrPeekDispatch 01 fffffe09`116373b0 fffff800`41cb0bcd nt!IofCallDriver+0x55 02 fffffe09`116373f0 fffff800`41cb07aa mup!MupiIssueQueryRequest+0x2d 03 fffffe09`11637430 fffff800`41caf225 mup!MupLocateUncProviderForPath+0x29a 04 fffffe09`116375b0 fffff800`41caecd9 mup!MupiCallUncProvider+0x155 05 fffffe09`11637620 fffff800`41cae9af mup!MupStateMachine+0x59 06 fffffe09`11637650 fffff800`3c64e565 mup!MupCreate+0x1cf 07 fffffe09`116376c0 fffff800`3f57c2db nt!IofCallDriver+0x55 08 fffffe09`11637700 fffff800`3c64e565 FLTMGR!FltpCreate+0x52b 09 fffffe09`116377b0 fffff800`3c69c224 nt!IofCallDriver+0x55 0a fffffe09`116377f0 fffff800`3ca255bd nt!IoCallDriverWithTracing+0x34 0b fffffe09`11637840 fffff800`3ca1319e nt!IopParseDevice+0x117d 0c fffffe09`116379b0 fffff800`3ca354ea nt!ObpLookupObjectName+0x3fe 0d fffffe09`11637b80 fffff800`3cb0043f nt!ObOpenObjectByNameEx+0x1fa 0e fffffe09`11637cb0 fffff800`3caffefd nt!IopCreateFile+0x40f 0f fffffe09`11637d50 fffff800`54562074 nt!IoCreateFileEx+0x11d 10 fffffe09`11637df0 fffff800`54561f17 dfsc!DfscConnOpenIpcConnectionCallin+0x144 11 fffffe09`11637f30 fffff800`3c7fb63e dfsc!DfscConnOpenIpcConnectionCallout+0x37 12 fffffe09`11637f80 fffff800`3c7fb5fc nt!KxSwitchKernelStackCallout+0x2e 13 fffffe09`11267090 fffff800`3c62768d nt!KiSwitchKernelStackContinue 14 fffffe09`112670b0 fffff800`3c627482 nt!KiExpandKernelStackAndCalloutOnStackSegment+0x19d 15 fffffe09`11267150 fffff800`3c6272e3 nt!KiExpandKernelStackAndCalloutSwitchStack+0xf2 16 fffffe09`112671c0 fffff800`3c62729d nt!KeExpandKernelStackAndCalloutInternal+0x33 17 fffffe09`11267230 fffff800`54561c7b nt!KeExpandKernelStackAndCalloutEx+0x1d 18 fffffe09`11267270 fffff800`545618e6 dfsc!DfscRmGetReferral+0x27b 19 fffffe09`11267360 fffff800`545533af dfsc!DfscCmGetRootReferralState+0x76 1a fffffe09`112673f0 fffff800`54568e0e dfsc!DfscGetReferralFromPath+0x7b 1b fffffe09`11267460 fffff800`5456d001 dfsc!DfscCredVerify+0x8e 1c fffffe09`11267500 fffff800`54564ee0 dfsc!DfscFsctrlCreateDriveLetter+0x4ad 1d fffffe09`11267680 fffff800`3c64e565 dfsc!DfscFileSystemControl+0x2dd0 1e fffffe09`11267700 fffff800`3ca0da18 nt!IofCallDriver+0x55 1f fffffe09`11267740 fffff800`3ca0e9f7 nt!IopSynchronousServiceTail+0x1a8 20 fffffe09`112677e0 fffff800`3cac9d96 nt!IopXxxControlFile+0xc67 21 fffffe09`11267920 fffff800`3c8096b5 nt!NtFsControlFile+0x56 22 fffffe09`11267990 00007ff9`abecd464 nt!KiSystemServiceCopyEnd+0x25 23 000000d1`5ce7dca8 00007ff9`8210faa3 ntdll!NtFsControlFile+0x14 24 000000d1`5ce7dcb0 00000000`00000168 0x00007ff9`8210faa3 25 000000d1`5ce7dcb8 00000241`184b1270 0x168 26 000000d1`5ce7dcc0 00000241`183a0fc0 0x00000241`184b1270 27 000000d1`5ce7dcc8 00000241`184b0000 0x00000241`183a0fc0 28 000000d1`5ce7dcd0 000000d1`5ce7dd28 0x00000241`184b0000 29 000000d1`5ce7dcd8 00007ff9`000601e0 0x000000d1`5ce7dd28 2a 000000d1`5ce7dce0 00000241`184b1270 0x00007ff9`000601e0 2b 000000d1`5ce7dce8 00000000`0000004a 0x00000241`184b1270 2c 000000d1`5ce7dcf0 00000000`00000000 0x4a ---------- [レジストリ] ------rax=fffff80056b50380 rbx=ffffae807d6c3a00 rcx=ffff9a83ad5ce060 rdx=ffff9a83b2e12050 rsi=0000000000000001 rdi=fffffe09116374b0 rip=fffff80056b50380 rsp=fffffe09116373a8 rbp=fffffe0911637530 r8=000000000000000e r9=ffff9a83ad5ce060 r10=fffff80056b50380 r11=0000000000000000 r12=0000000000000000 r13=00000000c0000201 r14=0000000000000000 r15=ffff9a83b084f5b0 iopl=0 nv up ei pl zr na po nc cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00040246 rdpdr!DrPeekDispatch: fffff800`56b50380 48895c2420 mov qword ptr [rsp+20h],rbx ss:0018:fffffe09`116373c8=fffff8003c702e93 ---------- [デバイスオブジェクト] -Device object (ffff9a83ad5ce060) is for: \Driver\RDPDR DriverObject ffff9a83ad123d40 Current Irp 00000000 RefCount 0 Type 00000014 Flags 00000000 SecurityDescriptor ffffae808150f1e0 DevExt ffff9a83ad5ce1b0 DevObjExt ffff9a83ad5ce8b0 ExtensionFlags (0000000000) Characteristics (0x00000010) FILE_REMOTE_DEVICE Device queue is not busy. ---------- [IRP] ---------- Irp is active with 2 stacks 1 is current (= 0xffff9a83b2e12120) No Mdl: No System Buffer: Thread ffff9a83b3bb9080: Irp stack trace. cmd flg cl Device File Completion-Context >[IRP_MJ_DEVICE_CONTROL(e), N/A(0)] 0 e0 ffff9a83ad5ce060 ffff9a83ab255c50 fffff80041ca1110-fffffe09116374b0 Success Error Cancel \Driver\RDPDR mup!MupiQueryPathCompletionRoutine Args: 00000004 00000050 0x140193 fffffe0911637508 [N/A(0), N/A(0)] 0 0 00000000 00000000 00000000-00000000 Args: 00000000 00000000 00000000 00000000 ---------- [IO_STACK_LOCATION] ---------- +0x000 MajorFunction : 0xe '' +0x001 MinorFunction : 0 '' +0x002 Flags : 0 '' +0x003 Control : 0xe0 '' +0x008 Parameters : <anonymous-tag> +0x028 DeviceObject : 0xffff9a83`ad5ce060 _DEVICE_OBJECT +0x030 FileObject : 0xffff9a83`ab255c50 _FILE_OBJECT +0x038 CompletionRoutine : 0xfffff800`41ca1110 long mup!MupiQueryPathCompletionRoutine+0 +0x040 Context : 0xfffffe09`116374b0 Void ---------- [デバイススタック] --- !DevObj !DrvObj !DevExt ObjectName > ffff9a83ad5ce060 \Driver\RDPDR ffff9a83ad5ce1b0 ---------- [ファイルオブジェクト] - Device Object: 0xffff9a83a3ee60d0 \FileSystem\Mup Vpb is NULL Flags: 0x40000 Handle Created FsContext: 0xfffff8005446c3c0 FsContext2: 0x00000000 CurrentByteOffset: 0 File object extension is at ffff9a83ad3c03e0: 0: kd>
-
デバッグ ログから解析する場合、断片的な一部分のみを抜粋しても意味がありません。
(全体的な流れをチェックしないと、的確な判断ができない。)
しかも提示されているログは、PassThrough ドライバから mup ドライバへの時系列的に連続したログではなく、あなたの「主観」により適宜抜粋された断片的なログなので、これではまともな解析は出来ません。
先の返信でも記しましたが、この問題を解決するためには手間を惜しまず、自身のミニフィルタおよび mup 等関連するドライバにどのようなリクエストが渡されているのか、丹念に確認する必要があります。
トレース ログから状態を確認したいのであれば、最低限下記手順でログ ファイルを採取する必要があると思います。
-------------------------
<ログの採取手順>
[前提条件]
☆ ミニフィルタ ドライバからのログ出力
ミニフィルタ ドライバからのログ出力は、ブレークポイント設定ではなく、ドライバ内部から DbgPrint() でログを吐かせるようにしてください。
(その方が、はるかに実行速度が速くなる。)
それと、デバッガ上で mup ドライバ等へのブレークポイント設定を行うタイミングを確保するため、DriverEntry ルーチン内に DbgBreakPoint() コールを追加し、ミニフィルタがロードされた直後からログを採取出来るようにしてください。
あと、ミニフィルタ ドライバの全ての IRP の PreOperation ルーチンで、FileObject が渡されて来ているかをチェックし、FileObject が NULL ではなく、かつ FileName メンバにパス名が渡されてきている場合は、DbgPrint() でパス名を出力させてください。
(該当パス名に対するブロックの有無、IRP の MajorFunction, MinorFunction、FileObject の FsContext, FsContext2 の値も一緒に出力させておく。)
[採取手順]
1. ログ ファイルのオープン
ターゲット PC の電源投入後、ミニフィルタ ドライバの DriverEntry ルーチンに仕掛けた DbgBreakPoint() で WinDbg にブレークインしたら、下記コマンドでログ ファイルをオープンしてください。
.logopen "C:\Users\<Logon Account Name>\PassThrough_00.log"
2. 関連ドライバへのブレークポイント設定
mup 等関連ドライバへのブレークポイントを設定してください。
(mup!MupCreate 等のリターン値を確認したいので、このまま変更せずに、WinDbg へそのままコピペしてください。)
bu mup!MupCreate "r @$t19=@rcx; r @$t18=@rdx; bp @$ra \"bc 5 6 7; .echo -----------------------; .echo [!!!!! mup!MupCreate Result !!!!!]; !thread; .echo [DeviceStack]; !devstack @$t19; .echo [IRP]; r @$t18; .echo [Result]; r @rax; dt nt!_IRP @$t18 IoStatus.; g\"; .echo -----------------------; !thread; .echo [Registers]; r; .echo [DeviceObject]; !devobj @rcx; .echo [IRP]; !irp @rdx; r @$t0=poi(@rdx+0x078+0x040); .echo [IO_STACK_LOCATION]; dt nt!_IO_STACK_LOCATION @$t0; r @$t1=poi(@$t0+0x28); r @$t2=poi(@$t0+0x30); .echo [DeviceStack]; !devstack @$t1; .echo [FileObject]; !fileobj @$t2; g" bu mup!MupFastIoQueryOpen "r @$t19=@rcx; r @$t18=@rdx; r @$t17=@r8; r @$t16=poi(@$t19+0x078+0x040); r @$t15=poi(@$t16+0x30); bp @$ra \"bc 5 6 7; .echo -----------------------; .echo [!!!!! mup!MupFastIoQueryOpen Result !!!!!]; !thread; .echo [IRP]; r @$t19; .echo [FileObject]; !fileobj @$t15; .echo [FILE_NETWORK_OPEN_INFORMATION]; dt nt!_FILE_NETWORK_OPEN_INFORMATION @$t18; .echo [DeviceStack]; !devstack @$t17; .echo [Result]; r @al; dt nt!_IRP @$t19 IoStatus.; g\"; .echo -----------------------; !thread; .echo [Registers]; r; .echo [IRP]; !irp @rcx; r @$t0=poi(@rcx+0x078+0x040); .echo [IO_STACK_LOCATION]; dt nt!_IO_STACK_LOCATION @$t0; r @$t1=poi(@$t0+0x28); r @$t2=poi(@$t0+0x30); .echo [DeviceStack]; !devstack @$t1; .echo [FileObject]; !fileobj @$t2; .echo [FILE_NETWORK_OPEN_INFORMATION]; dt nt!_FILE_NETWORK_OPEN_INFORMATION @rdx; .echo [DeviceObject]; !devobj @r8; g" bu mup!MupFastIoQueryNetworkOpenInfo "r @$t19=@rcx; r @$t18=@r8; r @$t17=@r9; r @$t16=poi(@rsp+0x28); bp @$ra \"bc 5 6 7; .echo -----------------------; .echo [!!!!! mup!MupFastIoQueryNetworkOpenInfo Result !!!!!]; !thread; .echo [FileObject]; !fileobj @$t19; .echo [FILE_NETWORK_OPEN_INFORMATION]; dt nt!_FILE_NETWORK_OPEN_INFORMATION @$t18; .echo [DeviceStack]; !devstack @$t16; .echo [Result]; r @al; dt nt!_IO_STATUS_BLOCK @$t17; g\"; .echo -----------------------; !thread; .echo [Registers]; r; .echo [FileObject]; !fileobj @rcx; .echo [Wait]; r @rdx; .echo [FILE_NETWORK_OPEN_INFORMATION]; dt nt!_FILE_NETWORK_OPEN_INFORMATION @r8; .echo [IO_STATUS_BLOCK]; r @r9; dt nt!_IO_STATUS_BLOCK @r9; .echo [DeviceObject]; r @$t0=poi(@rsp+0x28); !devobj @$t0; !devstack @$t0; g" bu rdpdr!DrPeekDispatch ".echo -----------------------; !thread; .echo [Registers]; r; .echo [DeviceObject]; !devobj @rcx; .echo [IRP]; !irp @rdx; r @$t1=poi(@rdx+0x078+0x040); .echo [IO_STACK_LOCATION]; dt nt!_IO_STACK_LOCATION @$t1; r @$t2=poi(@$t1+0x28); r @$t3=poi(@$t1+0x30); .echo [DeviceStack]; !devstack @$t2; .echo [FileObject]; !fileobj @$t3; g" bu csc!CscFsdDispatch ".echo -----------------------; !thread; .echo [Registers]; r; .echo [DeviceObject]; !devobj @rcx; .echo [IRP]; !irp @rdx; r @$t1=poi(@rdx+0x078+0x040); .echo [IO_STACK_LOCATION]; dt nt!_IO_STACK_LOCATION @$t1; r @$t2=poi(@$t1+0x28); r @$t3=poi(@$t1+0x30); .echo [DeviceStack]; !devstack @$t2; .echo [FileObject]; !fileobj @$t3; g"
3. 問題現象の再現
問題現象を再現させ、必要なログ情報をデバッガに吐かせてください。
4. ログ ファイルのクローズ
問題現象の再現を確認し、必要なログ情報を採取したら、下記コマンドでログ ファイルをクローズしてください。
.logclose
-------------------------
追記
上記手順にログ ファイルを採取したら生成したログ ファイルを、先に私が利用した「ギガファイル便」等のどこかのオンラインストレージ上にアップロードしてもらえれば、私の方でも確認します。
最初に示したブレークポイント設定のコマンドはあんまりよくなかったので、修正しました。
- 編集済み お馬鹿 2022年6月1日 1:16
-
お世話になります。
ご教示いただきましたブレークポイント等を設定し、取得したログを以下にアップロードしました。
https://xgf.nu/5x0B
「net use \\192.168.1.10\share」コマンドを実行すると、ユーザーアカウント情報の入力プロンプトが表示され、ユーザー情報を入力すると、「アクセス拒否が拒否されました」と表示されます。
しかし、ファイルサーバには、SMB2プロトコルのパケットの送受信が行われています。(パケットキャプチャをして確認)
どのようにすれば、通信を止めることがきるか、アドバイスを頂けましたら幸いです。
以上、よろしくお願いいたします。
-
ちゃんと状況を説明してもらわないと、返信のしよがありません。
(きちんと自身の状況説明することは、最低限のマナーでは?)
Explorer 等からの "\\192.168.1.10\share" フォルダ/ファイル アクセスは、すべてブロックは出来るようになったのですか?
その上で。。。。
現在あなたがやろうとしていることは、ファイル システム レベルでのアクセス制御です。
そしてあなたがパケットキャプチャで確認したのは、ネットワーク プロトコル レベルでのアクセスです。
やっていることと確認している部分のレイヤーが、全くかみ合っていません。
パケット レベルでの制御をしたいのであれば、NDIS 等のネットワーク プロトコル レベルのフィルタ ドライバを開発するべきです。
--------------------
Network Driver Design Guide
https://docs.microsoft.com/en-us/windows-hardware/drivers/network/
-------------------- -
ご返信いただき、ありがとうございます。
> ちゃんと状況を説明してもらわないと、返信のしよがありません。
> (きちんと自身の状況説明することは、最低限のマナーでは?)僭越ではございますが、これまでの投稿させていただいてます経緯から
ご理解いただけるものと思っていました。これまで、ご返信いただいていますが、上記のような質問者を罵倒するような文言が
多々ございますが、このような表現はいかがなものでしょうか。他の皆様も、分からず困っているためフォーラムで質問をしていると思います。
確かに中には、何もご自身で調べることなく、質問される方もいらっしゃことは事実ですが。。。改めまして、今回ログを取得した方法について、ご説明させていただきます。
ご教示いただきましたとおり、ブレークポイントを設定した後、
コマンドプロンプトから「net use \\192.168.1.10\share」を実行して、取得したログになります。IRP_MJ_CREATE、IRP_MJ_CREATE_NAMED_PIPE、IRP_MJ_QUERY_VOLUME_INFORMATION、
IRP_MJ_FILE_SYSTEM_CONTROL、IRP_MJ_CREATE_MAILSLOTの操作前コールバックでは、
パス名に「192.168.1.10」が含まれている場合
以下のコードを実行し、コールバック関数から抜けています。Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
return FLT_PREOPE_COMPLETE;また、IRP_MJ_NETWORK_QUERY_OPEN(FAST I/O)では、パス名に「192.168.1.10」が含まれている場合
以下のコードを実行し、コールバック関数から抜けています。
return FLT_PREOP_DISALLOW_FASTIO;
以上が説明となります。その他、過不足がございましたら、ご連絡いただければ幸いです。
> 現在あなたがやろうとしていることは、ファイル システム レベルでのアクセス制御です。
> そしてあなたがパケットキャプチャで確認したのは、ネットワーク プロトコル レベルでのアクセスです。
> やっていることと確認している部分のレイヤーが、全くかみ合っていません。
> パケット レベルでの制御をしたいのであれば、NDIS 等のネットワーク プロトコル レベルのフィルタ ドライバを開発するべきです。パケットキャプチャは、実際にミニフィルターでファイルサーバへのアクセスがブロックされているかを確認することを目的に
実施しています。
過去にMSDNフォーラムにて、ミニフィルターを使用して、ファイルサーバ(リモートファイル)へのアクセスについても
ブロックできるかどうかについて、ごご質問をしたところ、
Windowsでは、リモートファイルへのアクセスを含む、すべてのファイルへのアクセスは、I/Oマネージャーを通して、フィルターマネジャー ⇒ ファイルシステムドライバーへとアクセス要求が行われるため、制御可能とご教示いただいております。
このため、ファイルシステム・ミニフィルタードライバーで、どのようにすれば、ブロックできるかについて
ご質問させていただいた次第です。ネットワークリダイレクタードライバーがどのように関係しているかについては、よく理解できておらず、苦慮している点です。
ネットワークリダイレクターにて、初めに該当するドライバー等にリダイレクトされ、フィルターマネージャーを通らないのであれば、ミニフィルターでは、コントロールできませんので。また、あるIPアドレス宛てのパケットをブロックするのであれば、NDIS等のネットワーク プロトコル レベルの
フィルタドライバを使用してできることは概ね把握しています。実現したいことですが、「特定のプロセス」が「特定のアカウント権限」で、特定のファイルサーバ上に存在する
この目的と実現するにあたり、ネットワークプロトコルレベルのフィルタドライバーを使用しなければできない場合は、
ファイル(リモートファイル)へのアクセスをブロックしたいと考えています。
その旨、ご教示いただけましたら幸いです。
以上、よろしくお願いいたします
-
> 僭越ではございますが、
> これまでの投稿させていただいてます経緯から
> ご理解いただけるものと思っていました。
> これまで、ご返信いただいていますが、
> 上記のような質問者を罵倒するような文言が
> 多々ございますが、このような表現はいかがなものでしょうか。
名前の通り頭が悪いので、あなたの考えていることが私には理解できませんでした。
私の理解では、すべてのネットワーク I/O がファイル システムを基点として発生する訳ではないので、ネットワーク モニタ上で SMB パケットが出現しても、別段不思議ではないという理解です。
なので、ファイル システム フィルタ ドライバの開発で、なぜネットワーク モニタでのキャプチャ ログの話が出て来たのか理解できなかったので、説明を求めたまでです。
例えばネットワーク モニタ上で SMB パケットが検出されたのであれば、そのパケットの送受信を行っているのは何のプロセスで、そのパケット処理を行っているスレッドでどのようなコール スタックが観察されたのか等、詳細情報が分からなければ、その SMB パケットがユーザーからのファイル アクセスに基づいたリクエストなのか判断できないと、私は考えています。
それを確認するための返信が「罵倒するような文言」というのであれば、私としてはこれ以上返信することはありません。 -
ご返信いただき、ありがとうございます。
> 私の理解では、すべてのネットワーク I/O がファイル システムを基点として発生する訳ではないので、
> ネットワーク モニタ上で SMB パケットが出現しても、別段不思議ではないという理解です。マイクロソフト社によるドキュメントでは、リモートファイルへのアクセスについても、ローカルファイルへのアクセスと同様に透過的に実現する旨の記載があります。また、ネットワークリダイレクタードライバは、ファイルシステムドライバーに分類されると読み取れる記載もあります。
このため、I/Oマネージャを経由して、ファイルシステムに至るのであれば、
この間にあるフィルターマネージャー(ミニフィルタードライバー)で制御できるのではと考え
思考作業を実施していました。> SMB パケットがユーザーからのファイル アクセスに基づいたリクエストなのか判断できないと、私は考えています。
パケットキャプチャログのSMB2プロトコルシーケンスを確認すると、「net use \\192.168.1.10\share」コマンドを実行した際に入力したユーザー情報で認証が行われていることが確認することができますので、間違いなくnet useコマンドの実行に発生しています。
また、取得したパケットは、コマンドを実行した時点で取得されたものです。(パケットキャプチャソフトのフィルタ機能を使用)
従いまして、パケットを生成しているプロセスは、間違いなくnet useコマンドということは分かっています。
お送りしましたWinDbgログは、参照いただいてますでしょうか。
マイクロソフト社様より提供されているPassThroughサンプルコードをベースに、IRPを確認しましたが、passthroughミニフィルターの前に、MUP!Createによるブレークが発生していますので、ミニフィルタードライバーでは制御できないかもしれません。
これまで、どうもありがとうございました。
ご教示いただきました内容を手掛かりに、どのようにすれば良いか調べたいと思います。