使用 ECP 來處理檔系統篩選驅動程式中的IRP_MJ_CREATE作業
您可以在檔案系統篩選驅動程式中使用額外的建立參數 (ECP)來處理 IRP_MJ_CREATE 作業。 您的文件系統篩選驅動程式可以呼叫下列各節中的例程,以擷取、設定(新增)、認可和移除IRP_MJ_CREATE作業的 ECP。 您也可以判斷 ECP 的來源作業系統空間。
擷取ECP
若要擷取IRP_MJ_CREATE作業的 ECP:
呼叫 FltGetEcpListFromCallbackData (或 FsRtlGetEcpListFromIrp) 以擷取與建立作業相關聯的ECP_LIST指標。
執行下列其中一項作業:
- 呼叫 FltGetNextExtraCreateParameter (或 FsRtlGetNextExtraCreateParameter) 以擷取 ECP 清單中下一個 (或第一個) ECP 內容結構的指標。
- 呼叫 FltFindExtraCreateParameter (或 FsRtlFindExtraCreateParameter) 來搜尋 ECP 清單,以尋找指定類型的 ECP 內容結構。 如果找到結構,任一例程就會傳回ECP內容結構的指標。
設定 ECP
若要設定IRP_MJ_CREATE作業的 ECP,您的檔案系統篩選驅動程式會:
在現有的 ECP_LIST中設定ECP。
在新建立 的 ECP_LIST中設定ECP。
在現有ECP_LIST中設定ECP
若要在與建立作業相關聯的現有ECP_LIST中設定 ECP:
呼叫 FltGetEcpListFromCallbackData (或 FsRtlGetEcpListFromIrp) 以擷取與建立作業相關聯的ECP_LIST指標。
呼叫 FltAllocateExtraCreateParameter (或 FsRtlAllocateExtraCreateParameter)為 ECP 內容結構配置分頁記憶體集區,併產生該結構的指標。
呼叫 FltInsertExtraCreateParameter (或 FsRtlInsertExtraCreateParameter)將 ECP 內容結構 插入ECP_LIST 結構中。
在新建立ECP_LIST中設定ECP
如果ECP_LIST目前未與建立作業相關聯,您必須建立一個,然後在其中設定 ECP:
呼叫 FltAllocateExtraCreateParameterList (或 FsRtlAllocateExtraCreateParameterList) 來配置ECP_LIST結構的記憶體。
呼叫 FltAllocateExtraCreateParameter (或 FsRtlAllocateExtraCreateParameter)為 ECP 內容結構配置分頁記憶體集區,併產生該結構的指標。
呼叫 FltInsertExtraCreateParameter (或 FsRtlInsertExtraCreateParameter) 將 ECP 內容結構插入ECP_LIST。
呼叫 FltSetEcpListIntoCallbackData (或 FsRtlSetEcpListIntoIrp)將 ECP 清單附加至建立作業。
拿掉 ECP
若要移除IRP_MJ_CREATE作業的 ECP:
呼叫 FltRemoveExtraCreateParameter (或 FsRtlRemoveExtraCreateParameter) 來搜尋 ECP 內容結構的清單。 如果找到 ECP 內容結構,例程會將 ECP 內容結構與 ECP 清單中斷連結。
若要釋放卸離 ECP 內容結構的記憶體,請呼叫 FltFreeExtraCreateParameter (或 FsRtlFreeExtraCreateParameter)。 如果您以下欄其中一種方式設定記憶體,您可以呼叫這些例程來釋放 ECP 內容結構的記憶體:
- 您呼叫 FltAllocateExtraCreateParameter (或 FsRtlAllocateExtraCreateParameter) 來配置分頁記憶體集區
- 您呼叫 FltAllocateExtraCreateParameterFromLookasideList (或 FsRtlAllocateExtraCreateParameterFromLookasideList) 以從 lookaside 列表配置記憶體集區
將 ECP 標示為已認可,或判斷認可狀態
呼叫下列例程,將 ECP 標示為已認可,或判斷 ECP 是否標示為已認可:
呼叫 FltAcknowledgeEcp (或 FsRtlAcknowledgeEcp),將 ECP 內容結構標示為已認可。 ECP 可以標示為查看、已使用、處理或 ECP 的任何其他條件。
呼叫 FltIsEcpAcknowledged (或 FsRtlIsEcpAcknowledged),以判斷 ECP 內容結構是否標示為已認可。
判斷原點模式
呼叫 FltIsEcpFromUserMode (或 FsRtlIsEcpFromUserMode),以判斷 ECP 內容結構是否源自使用者模式。 檔系統篩選驅動程式可以拒絕接受源自使用者模式的 ECP 內容結構。
使用外觀清單來配置 ECP
呼叫下列例程,從 lookaside 列表 配置 ECP,以及管理 lookaside 列表和 ECP:
呼叫 FltInitExtraCreateParameterLookasideList (或 FsRtlInitExtraCreateParameterLookasideList) 初始化分頁或非分頁集區 lookaside 列表,用於配置一或多個固定大小的 ECP 內容結構。
呼叫 FltDeleteExtraCreateParameterLookasideList (或 FsRtlDeleteExtraCreateParameterLookasideList)以釋放 lookaside 列表。
呼叫 FltAllocateExtraCreateParameterFromLookasideList (或 FsRtlAllocateExtraCreateParameterFromLookasideList),從 ECP 內容結構的 lookaside 列表中配置記憶體集區,併產生該結構的指標。
呼叫 FltFreeExtraCreateParameter (或 FsRtlFreeExtraCreateParameter)以釋放 ECP 內容結構的記憶體。