Windows I/O Manager-IRPの読み物のような書き込みのような分類
-
23-10-2019 - |
質問
私は書いています Windows Files -Systemミニフィルタードライバー それは失敗しなければなりません I/O要求パケット(IRP) で 事前操作コールバック タイプに基づいています(読み取り/書き込み)。
操作があるかどうか(または他の場所)からコールバックパラメーター(または他の場所)から確認できますか 読み取りのようです (データのみを読み取ります)またはそれです 書き込み様 (ディスクのデータを変更 - 書き込み、削除、形式など)?
ここ 主要なIRPコードのリストです。
私は次のようなことを考えています:
Data->Iopb->TargetFileObject->ReadAccess
Data->Iopb->TargetFileObject->WriteAccess
しかし、私は確信が持てません、私はこれらが術後のコールバックでのみ利用可能であると思います。ドキュメントは本当に面倒です。
さらに説明するためのコードサンプル:
FLT_PREOP_CALLBACK_STATUS
Fail (
__inout PFLT_CALLBACK_DATA Data,
__in PCFLT_RELATED_OBJECTS FltObjects,
__deref_out_opt PVOID *CompletionContext
)
{
FLT_PREOP_CALLBACK_STATUS status = FLT_PREOP_SUCCESS_NO_CALLBACK;
//********************************************************************
if ( IS_WRITE_LIKE(Data, FltObjects) ) { // ??? HOW DO I FIND OUT ???
//********************************************************************
if( FLT_IS_FASTIO_OPERATION(Data) ){
status = FLT_PREOP_DISALLOW_FASTIO;
} else {
status = FLT_PREOP_COMPLETE;
}
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
return status;
}
return status;
}
解決
これが私が多くの試行錯誤の後に得たユーリスティックリストです:
書き込み様:
IRP_MJ_SET_EA
IRP_MJ_SET_INFORMATION
IRP_MJ_SET_QUOTA
IRP_MJ_SET_SECURITY
IRP_MJ_SET_VOLUME_INFORMATION
IRP_MJ_WRITE
読み物のように:
IRP_MJ_CREATE
IRP_MJ_DEVICE_CONTROL
IRP_MJ_FILE_SYSTEM_CONTROL
IRP_MJ_FLUSH_BUFFERS
IRP_MJ_INTERNAL_DEVICE_CONTROL
IRP_MJ_QUERY_EA
IRP_MJ_QUERY_INFORMATION
IRP_MJ_QUERY_QUOTA
IRP_MJ_QUERY_SECURITY
IRP_MJ_QUERY_VOLUME_INFORMATION
IRP_MJ_READ
IRP_MJ_OPERATION_END
所属していません StackOverflow