2010-06-02 43 views
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; 
} 

回答

0

這裏是一個euristic列表我大量的試驗和錯誤後得到:

寫,如:

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 
+0

我還沒有s在下來驗證這一點,但我會認爲IRP_MJ_CREATE是「寫入」,根據標誌。沒有批評,只是一個問題。 – Jan 2010-09-21 17:55:24

+0

感謝您的反饋,我會多挖一些,我相信你是對的。 – clyfe 2010-09-22 10:01:01