FltSetInstanceContext 函数 (fltkernel.h)

FltSetInstanceContext 为微筛选器驱动程序实例设置上下文。

语法

NTSTATUS FLTAPI FltSetInstanceContext(
  [in]  PFLT_INSTANCE             Instance,
  [in]  FLT_SET_CONTEXT_OPERATION Operation,
  [in]  PFLT_CONTEXT              NewContext,
  [out] PFLT_CONTEXT              *OldContext
);

参数

[in] Instance

实例的不透明实例指针。

[in] Operation

指定要执行的操作的详细信息的标志。 此参数必须是下列参数之一:

标志 含义
FLT_SET_CONTEXT_REPLACE_IF_EXISTS 如果已为 Instance 参数指向的实例设置了上下文, 则 FltSetInstanceContext 会将该上下文替换为 NewContext 中指定的上下文。 否则,它将将 NewContext 设置为 Instance 的上下文。
FLT_SET_CONTEXT_KEEP_IF_EXISTS 如果已为此 实例设置了上下文, 则 FltSetInstanceContext 将返回STATUS_FLT_CONTEXT_ALREADY_DEFINED,并且不会替换现有上下文或递增引用计数。 如果尚未设置上下文,则例程会将 NewContext 设置为 Instance 的上下文,并递增引用计数。

[in] NewContext

指向要为实例设置的新上下文的指针。 此参数是必需的,不能为 NULL

[out] OldContext

指向调用方分配的变量的指针,该变量接收现有实例上下文的地址(如果已设置)。 此参数是可选的,可以为 NULL。 有关此参数的详细信息,请参阅以下“备注”部分。

返回值

FltSetInstanceContext 返回STATUS_SUCCESS或适当的 NTSTATUS 值,例如以下值之一:

返回代码 说明
STATUS_FLT_CONTEXT_ALREADY_DEFINED 如果为 Operation 参数指定了FLT_SET_CONTEXT_KEEP_IF_EXISTS,则此错误代码指示上下文已附加到实例。 只能将一个上下文附加到实例。
STATUS_FLT_CONTEXT_ALREADY_LINKED NewContext 参数指向的上下文已链接到 对象。 换句话说,此错误代码指示由于之前成功调用 FltSetXxxContext 例程,NewContext 已在使用中。
STATUS_FLT_DELETING_OBJECT Instance 参数中指定的 实例 正在被拆毁。 这是错误代码。
STATUS_INVALID_PARAMETER 传递的参数无效。 例如, NewContext 参数不指向有效的文件上下文,或者为 Operation 参数指定了无效值。 这是错误代码。

注解

有关上下文的详细信息,请参阅 关于微筛选器上下文

微筛选器驱动程序调用 FltSetInstanceContext ,以将实例上下文附加到调用方拥有的微筛选器驱动程序实例,或者删除或替换现有的实例上下文。 微筛选器驱动程序只能将一个上下文附加到实例。

引用计数

如果 FltSetInstanceContext 成功:

  • NewContext 上的引用计数递增。 不再需要 NewContext 指向的上下文时,微筛选器必须调用 FltReleaseContext 来递减其引用计数。

否则 ,如果 FltSetInstanceContext 失败:

  • NewContext 上的引用计数保持不变。
  • 如果 OldContext 不是 NULL 且不指向 NULL_CONTEXT则 OldContext 是指向当前与实例关联的上下文的引用指针。 当不再需要上下文指针时,调用 FltSetInstanceContext 的筛选器最终也必须为 OldContext 调用 FltReleaseContext

无论成功与否:

有关详细信息,请参阅 引用上下文

其他上下文操作

有关详细信息,请参阅 设置上下文发布上下文

要求

要求
最低受支持的客户端 适用于 SP4、Windows XP SP2、Windows Server 2003 SP1 和更高版本的操作系统的 Microsoft Windows 2000 更新汇总 1 中可用和支持。
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

另请参阅

FltAllocateContext

FltDeleteContext

FltDeleteInstanceContext

FltGetInstanceContext

FltReleaseContext