FILTER_DIRECT_OID_REQUEST回调函数 (ndis.h)

NDIS 调用筛选器驱动程序的 FilterDirectOidRequest 函数来处理与指定筛选器模块关联的直接 OID 请求。

注意 必须使用 FILTER_DIRECT_OID_REQUEST 类型声明函数。 有关详细信息,请参阅以下示例部分。
 

语法

FILTER_DIRECT_OID_REQUEST FilterDirectOidRequest;

NDIS_STATUS FilterDirectOidRequest(
  [in] NDIS_HANDLE FilterModuleContext,
  [in] PNDIS_OID_REQUEST OidRequest
)
{...}

参数

[in] FilterModuleContext

此请求的目标筛选器模块的上下文区域的句柄。 筛选器驱动程序在 FilterAttach 函数中创建并初始化了此上下文区域。

[in] OidRequest

指向 NDIS_OID_REQUEST 结构的指针,该结构指定请求的操作,包括 OID_ Xx 代码。 结构可以指定查询请求或设置请求

返回值

FilterDirectOidRequest 返回以下状态值之一:

返回代码 说明
NDIS_STATUS_SUCCESS
FilterDirectOidRequest 已成功完成此筛选器模块的筛选器驱动程序的查询或设置操作。
NDIS_STATUS_PENDING
筛选器驱动程序将以异步方式完成请求。 驱动程序完成请求后,必须调用 NdisFDirectOidRequestComplete 函数,用于通知 NDIS 请求已完成。
NDIS_STATUS_INVALID_OID
OidRequest 指定的请求无效或无法识别。
NDIS_STATUS_NOT_SUPPORTED
FilterDirectOidRequest 不支持 OID;OID 是可选的。
NDIS_STATUS_BUFFER_TOO_SHORT
OidRequest 提供的缓冲区太小,无法容纳请求的数据。
NDIS_STATUS_INVALID_LENGTH
对于查询操作,NDIS_OID_REQUEST 结构的 InformationBufferLength 成员与给定 OID 所需的长度不匹配。 FilterDirectOidRequest 在 NDIS_OID_REQUEST 结构的 BytesNeeded 成员中返回所需的缓冲区大小(以字节为单位)。
NDIS_STATUS_INVALID_DATA
对于设置操作,在 NDIS_OID_REQUEST 结构的 InformationBuffer 成员中提供的数据对于给定的 OID 无效。
NDIS_STATUS_NOT_ACCEPTED
FilterDirectOidRequest 尝试收集请求的信息,但未成功。
NDIS_STATUS_RESOURCES
FilterDirectOidRequest 由于资源不足而失败。
NDIS_STATUS_FAILURE
应用 N 个上述返回值之一。 筛选器驱动程序应使用指定失败原因的参数调用 NdisWriteErrorLogEntry 函数。

注解

FilterDirectOidRequest 是一个可选函数。 如果筛选器驱动程序不使用直接 OID 请求,则可以在调用 NdisFRegisterFilterDriver 函数时将此函数的入口点设置为 NULL。 如果筛选器驱动程序定义了 FilterDirectOidRequestComplete 函数,它必须提供 FilterDirectOidRequest 函数。

NDIS 调用筛选器驱动程序的 FilterDirectOidRequest 函数来处理由过分驱动程序发起的直接 OID 请求。 筛选器驱动程序可以通过调用 NdisFDirectOidRequest 函数将此类请求转发到基础驱动程序。 作为一个选项,筛选器驱动程序还可以立即完成请求,而无需转发请求。

在驱动程序调用 NdisFDirectOidRequest 之前,驱动程序必须分配 NDIS_OID_REQUEST 结构,并通过调用 将请求信息传输到新结构 NdisAllocateCloneOidRequest 函数。

若要同步完成请求,筛选器驱动程序将返回NDIS_STATUS_SUCCESS或失败状态。 如果驱动程序返回NDIS_STATUS_PENDING,则必须调用 NdisFDirectOidRequestComplete 函数,用于通知 NDIS 请求已完成。

对于查询操作, FilterDirectOidRequest 返回 InformationBuffer 成员中请求的信息,并将 NDIS_OID_REQUEST 结构的 BytesWritten 成员中的 变量设置为它返回的信息量。 如果筛选器驱动程序使用 NdisFDirectOidRequest 在 上传递请求,则基础驱动程序会执行此操作。

对于设置操作 ,FilterDirectOidRequest 可以使用 NDIS_OID_REQUEST 结构的 InformationBuffer 成员中的数据来设置给定 OID 所需的信息。 在这种情况下, FilterDirectOidRequestBytesRead 处的变量设置为它使用的数据量。 如果筛选器驱动程序使用 NdisFDirectOidRequest 传递请求,则基础驱动程序以这种方式设置 BytesRead

NDIS 不会将发送到 FilterDirectOidRequest 的请求与其他 OID 请求一起序列化。 当发送到 FilterOidRequest 或 FilterDirectOidRequest 的其他请求未完成时,筛选器驱动程序必须能够处理对 FilterDirectOidRequest 的多个调用。

NDIS 在 IRQL <= DISPATCH_LEVEL 调用 FilterDirectOidRequest

示例

若要定义 FilterDirectOidRequest 函数,必须首先提供一个函数声明,用于标识要定义的函数类型。 Windows 为驱动程序提供一组函数类型。 使用函数类型声明函数可帮助 驱动程序的代码分析静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,并且这是编写 Windows 操作系统驱动程序的要求。

例如,若要定义名为“ MyDirectOidRequest”的 FilterDirectOidRequest 函数,请使用 FILTER_DIRECT_OID_REQUEST 类型,如以下代码示例所示:

FILTER_DIRECT_OID_REQUEST MyDirectOidRequest;

然后,按如下所示实现函数:

_Use_decl_annotations_
NDIS_STATUS
 MyDirectOidRequest(
    NDIS_HANDLE  FilterModuleContext,
    PNDIS_OID_REQUEST  OidRequest
    )
  {...}

FILTER_DIRECT_OID_REQUEST函数类型在 Ndis.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations批注可确保使用应用于头文件中FILTER_DIRECT_OID_REQUEST函数类型的注释。 有关函数声明要求的详细信息,请参阅 使用 NDIS 驱动程序的函数角色类型声明函数

有关 Use_decl_annotations的信息,请参阅 批注函数行为

要求

要求
最低受支持的客户端 在 NDIS 6.1 及更高版本中受支持。
目标平台 Windows
标头 ndis.h (包括 Ndis.h)
IRQL <= DISPATCH_LEVEL

另请参阅

FilterAttach

FilterDirectOidRequestComplete

FilterOidRequest

NDIS_OID_REQUEST

NdisAllocateCloneOidRequest

NdisFDirectOidRequest

NdisFDirectOidRequestComplete

NdisWriteErrorLogEntry