2
我正在編寫一個windows filesystem minifilter driver,根據它們的類型(讀/寫),它必須在preoperation callback中失敗I/O Request Packets (IRP's)。
如果操作是看似(只讀取數據)或它的寫入(修改磁盤上的數據 - 寫入,刪除,格式等),我怎麼能從回調參數(或其他地方? )?窗口I/O管理器 - IRP的類似於讀寫的分類
Here是主要的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;
}
我還沒有s在下來驗證這一點,但我會認爲IRP_MJ_CREATE是「寫入」,根據標誌。沒有批評,只是一個問題。 – Jan 2010-09-21 17:55:24
感謝您的反饋,我會多挖一些,我相信你是對的。 – clyfe 2010-09-22 10:01:01