共用方式為


FltAllocateContext 函式 (fltkernel.h)

FltAllocateContext 例程會為指定的內容類型配置內容結構。

語法

NTSTATUS FLTAPI FltAllocateContext(
  [in]  PFLT_FILTER      Filter,
  [in]  FLT_CONTEXT_TYPE ContextType,
  [in]  SIZE_T           ContextSize,
  [in]  POOL_TYPE        PoolType,
  [out] PFLT_CONTEXT     *ReturnedContext
);

參數

[in] Filter

呼叫端的不透明篩選指標。 這是必要參數,而且無法 NULL

[in] ContextType

FLT_CONTEXT_TYPE 值,表示要配置的內容類型。 ContextType 可以是下列其中一項:

價值 意義
FLT_VOLUME_CONTEXT(0x0001) 配置磁碟區內容。
FLT_INSTANCE_CONTEXT (0x0002) 配置實例內容。
FLT_FILE_CONTEXT(0x0004) 配置檔案內容。
FLT_STREAM_CONTEXT (0x0008) 配置數據流內容。
FLT_STREAMHANDLE_CONTEXT (0x0010) 配置數據流句柄內容。
FLT_TRANSACTION_CONTEXT(0x0020) 配置交易內容。
FLT_SECTION_CONTEXT (0x0040) 配置區段內容。 從 Windows 8 開始提供。

[in] ContextSize

迷你篩選驅動程式所定義之內容部分的大小,以位元組為單位。 必須大於零,且小於或等於 MAXUSHORT;對於固定大小的內容,必須小於或等於 FLT_CONTEXT_REGISTRATION 結構中指定的 Size。 小型篩選會使用內容中的這個部分來維護本身特有的內容資訊。 FltMgr 會將此部分的內容結構視為不透明。 這是必要參數,不能為零。

[in] PoolType

要配置的集區類型。 這是必要參數,而且必須是下列其中一項。 如需每種類型的詳細描述,請參閱 POOL_TYPE。 如需詳細資訊,請參閱。

價值 意義
NonPagedPool 不可分頁的系統記憶體。 如果 ContextType 為FLT_VOLUME_CONTEXT,則 PoolType 必須 NonPagedPool
PagedPool 可分頁的系統記憶體。
NonPagedPoolNx 無執行 (NX) 非分頁集區。

[out] ReturnedContext

接收新配置內容位址的呼叫端配置變數指標。 呼叫者負責呼叫 FltReleaseContext,以在不再需要內容時釋放此內容。

傳回值

FltAllocateContext 會傳回 STATUS_SUCCESS 或適當的 NTSTATUS 值,例如下列其中一項:

傳回碼 描述
STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND 篩選註冊時未提供指定型別內容的配置資訊。 或者,針對固定大小的內容,所要求 ContextSize 大於 指定之 contextTypeFLT_CONTEXT_REGISTRATION 結構中指定的 Size
STATUS_FLT_DELETING_OBJECT Filter 參數中指定的迷你篩選驅動程式正在關閉。 這是錯誤碼。
STATUS_INSUFFICIENT_RESOURCES FltAllocateContext 發生集區配置失敗。 這是錯誤碼。
STATUS_INVALID_BUFFER_SIZE ContextSize 不能大於 MAXUSHORT 。 這是錯誤碼。
STATUS_INVALID_PARAMETER ContextTypeContextSize 參數指定了無效的值。 這是錯誤碼。
STATUS_NOT_SUPPORTED 檔案系統不支援每個數據流內容。 這是錯誤碼。

言論

如需內容的詳細資訊,請參閱 關於小型篩選內容

FltAllocateContext 從指定的集區配置指定型別的內容。 從 Windows 11 開始,ReturnedContext 指向的記憶體是否相依如下:

  • 對於可變大小的內容,記憶體保證為零。
  • 記憶體內容是針對呼叫端提供的回呼函式所配置的固定大小內容所定義的實作。
  • 否則,由於外觀清單行為,無法假設固定大小內容的記憶體為零。 也就是說,如果從 lookaside 清單傳回的專案是先前釋放至 lookaside 清單的記憶體,而不是新的配置,則可能不會將它歸零。

在 Windows 11 之前,傳回內容的內容不會為零。

將 PoolType 設定為無效值可能會導致非預期的行為,例如造成略過 lookaside 列表,因而遺失 lookaside 列表的效能優點。 對於具有 ContextAllocateCallback 回呼函式的內容,由於 poolType 無效 而造成行為與實作相依。

配置內容之後,即可在對象上設定它,方法是從下表將 returnedContext 指標 傳遞給適當的 set-context 例程。

內容類型 Set-Context 例程
FLT_FILE_CONTEXT FltSetFileContext (從 Windows Vista 開始)
FLT_INSTANCE_CONTEXT FltSetInstanceContext
FLT_SECTION_CONTEXT FltCreateSectionForDataScan (從 Windows 8 開始)
FLT_STREAM_CONTEXT FltSetStreamContext
FLT_STREAMHANDLE_CONTEXT FltSetStreamHandleContext
FLT_TRANSACTION_CONTEXT FltSetTransactionContext (從 Windows Vista 開始)
FLT_VOLUME_CONTEXT FltSetVolumeContext

當小型篩選驅動程式從其 DriverEntry 例程呼叫 FltRegisterFilter 時,它必須註冊它所使用的每個內容類型。 如需詳細資訊,請參閱 FLT_CONTEXT_REGISTRATION 結構的參考專案,以及 註冊內容類型。

FltAllocateContext 不會初始化小型篩選驅動程式特定內容結構部分的內容內容。

若要取得對象的內容,請從下表呼叫 FltGetContexts 或適當的 get-context 例程。

內容類型 Get-Context 例程
FLT_FILE_CONTEXT FltGetFileContext (從 Windows Vista 開始)
FLT_INSTANCE_CONTEXT FltGetInstanceContext
FLT_SECTION_CONTEXT FltGetSectionContext (從 Windows 8 開始)
FLT_STREAM_CONTEXT FltGetStreamContext
FLT_STREAMHANDLE_CONTEXT FltGetStreamHandleContext
FLT_TRANSACTION_CONTEXT FltGetTransactionContext (從 Windows Vista 開始)
FLT_VOLUME_CONTEXT FltGetVolumeContext

內容會進行參考計數,而且在 FltAllocateContext成功傳回時,ReturnedCon text 所指向的內容已初始化為具有 1 的參考計數。 當內容的參考計數達到零時,會自動釋放內容。 若要在內容上遞增參考計數,請呼叫 FltReferenceContext

若要遞減內容上的參考計數,請呼叫 FltReleaseContext

因為內容是參考計數,所以通常不需要刪除它們。 若要明確刪除內容,請從下表呼叫 FltDeleteContext 或適當的 delete-context 例程。

內容類型 Delete-Context 例程
FLT_FILE_CONTEXT FltDeleteFileContext (從 Windows Vista 開始)
FLT_INSTANCE_CONTEXT FltDeleteInstanceContext
FLT_SECTION_CONTEXT FltCloseSectionForDataScan (從 Windows 8 開始)
FLT_STREAM_CONTEXT FltDeleteStreamContext
FLT_STREAMHANDLE_CONTEXT FltDeleteStreamHandleContext
FLT_TRANSACTION_CONTEXT FltDeleteTransactionContext (從 Windows Vista 開始)
FLT_VOLUME_CONTEXT FltDeleteVolumeContext

要求

要求 價值
目標平臺 普遍
標頭 fltkernel.h (包括 Fltkernel.h)
連結庫 FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

另請參閱

FLT_CONTEXT_REGISTRATION

FltCloseSectionForDataScan

FltCreateSectionForDataScan

FltDeleteContext

FltDeleteFileContext

FltDeleteInstanceContext

FltDeleteStreamContext

FltDeleteStreamHandleContext

FltDeleteTransactionContext

FltDeleteVolumeContext

FltGetContexts

FltGetFileContext

FltGetInstanceContext

FltGetSectionContext

FltGetStreamContext

FltGetStreamHandleContext

FltGetTransactionContext

FltGetVolumeContext

FltReferenceContext

FltRegisterFilter

FltReleaseContext

FltSetFileContext

FltSetInstanceContext

FltSetStreamContext

FltSetStreamHandleContext

FltSetTransactionContext

FltSetVolumeContext