NdisRequest 函数 (ndis.h)

注意 NDIS 5。 x 已弃用,由 NDIS 6 取代。 x。 有关新的 NDIS 驱动程序开发,请参阅 从 Windows Vista 开始的网络驱动程序。 有关移植 NDIS 5 的信息。 NDIS 6 的 x 驱动程序。 x,请参阅 将 NDIS 5.x 驱动程序移植到 NDIS 6.0

NdisRequest 将请求转发给基础驱动程序,请求该驱动程序查询其 NIC 的功能或状态,或者它设置其 NIC 的状态。

语法

void NdisRequest(
  [out] PNDIS_STATUS  Status,
  [in]  NDIS_HANDLE   NdisBindingHandle,
  [in]  PNDIS_REQUEST NdisRequest
);

参数

[out] Status

指向调用方提供的变量的指针,该变量在从此函数返回时设置。 基础驱动程序确定返回哪个NDIS_STATUS_XXX ,但它通常是以下值之一:

  • NDIS_STATUS_SUCCESS
    请求的操作已成功完成。

  • NDIS_STATUS_PENDING
    请求正在异步处理,调用方的 ProtocolRequestComplete 函数将在完成时调用。

  • NDIS_STATUS_INVALID_OID
    NdisRequest NDIS_REQUEST 结构化缓冲区的 Oid 成员中指定的 OID_XXX 代码无效或不受基础驱动程序支持。

  • NDIS_STATUS_INVALID_LENGTH或NDIS_STATUS_BUFFER_TOO_SHORT
    在 NdisRequest NDIS_REQUEST 结构化缓冲区的 InformationBufferLength 成员中指定的值与给定OID_XXX 代码的要求不匹配。 如果信息缓冲区太小,则 BytesNeeded 成员在从 NdisRequest 返回时包含 InformationBufferLength 的正确值。

  • NDIS_STATUS_INVALID_DATA
    在给定NDIS_REQUEST结构中的 InformationBuffer 中提供的数据对于给定的 OID_XXX 代码无效。

  • NDIS_STATUS_NOT_SUPPORTED或NDIS_STATUS_NOT_RECOGNIZED
    基础驱动程序不支持请求的操作。

  • NDIS_STATUS_RESOURCES
    由于资源短缺,请求无法满足。 通常,此返回表示分配内存的尝试失败,但不一定指示以后提交的同一请求会因相同原因而失败。

  • NDIS_STATUS_NOT_ACCEPTED
    基础驱动程序在其 NIC 上尝试了请求的操作(通常是集),但网卡失败。 例如,尝试设置过多的多播地址可能会导致返回此值。

  • NDIS_STATUS_CLOSING或NDIS_STATUS_CLOSING_INDICATING
    基础驱动程序失败了请求的操作,因为正在关闭。

  • NDIS_STATUS_RESET_IN_PROGRESS
    基础 NIC 驱动程序目前无法满足请求,因为它当前正在重置网卡。 调用方的 ProtocolStatus 函数已或将NDIS_STATUS_RESET_START调用,以指示正在重置。 此返回值不一定指示稍后提交的同一请求将因相同原因而失败。

  • NDIS_STATUS_FAILURE
    此值通常是非特定默认值,当没有更具体的NDIS_STATUS_XXX 导致基础驱动程序请求失败时返回此值。

[in] NdisBindingHandle

指定 NdisOpenAdapter 返回的句柄,该句柄标识目标 NIC 或调用方绑定到的下一低级驱动程序的虚拟适配器。

[in] NdisRequest

指向缓冲结构的指针,该结构指定使用给定OID_ XXX 代码为查询或集请求的操作。

返回值

备注

协议驱动程序必须为与它将请求的操作的 OID_XXX 关联的信息缓冲区分配足够的内存。 驱动程序还必须在 NdisRequest 中分配和设置缓冲区,然后才能调用 NdisRequest。 这两个缓冲区都必须从非分页池中分配,因为基础驱动程序在处理请求时以引发的 IRQL 运行。

对于在中间 NDIS 驱动程序上分层的调用方, NdisRequest 会将请求转发给下一个较低级别的驱动程序,该请求将返回有关其自身功能的信息,或指示该驱动程序以调用方确定的方式处理特定功能。 如果下一个较低的驱动程序是 NDIS 中间驱动程序,则它可以在完成最初由更高级别协议提交的请求之前,使用自己的 OID 特定请求调用 NdisRequest

状态处返回的某些错误是可恢复的,其中包括:

NDIS_STATUS_INVALID_OID

NDIS_STATUS_INVALID_LENGTH

NDIS_STATUS_BUFFER_TOO_SHORT

NDIS_STATUS_INVALID_DATA

NDIS_STATUS_RESOURCES

NDIS_STATUS_RESET_IN_PROGRESS

也就是说,驱动程序可以适当地修改 NdisRequest 中的数据包,以更正 InformationBuffer OID_XXX 代码和/或缓冲区的大小或内容,并将请求数据包重新提交到 NdisRequest。 如果原始调用指示正在进行重置,或者资源短缺(可能是暂时性的)阻止执行请求,则重新提交到 NdisRequest 时,可能会满足相同的数据包。

NDIS 库维护基础微型端口驱动程序的绑定。 如果给定的 OID 与系统为其提供筛选器库的系统定义的媒体类型相关联,则 NDIS 可以返回特定于绑定的查询的信息。

有关常规和特定于媒体的 OID 及其各自的相关信息缓冲区的详细信息,请参阅 NDIS 对象标识符

  • 目标平台: 通用
  • 版本:Windows Vista 中的 NDIS 6.0 驱动程序不支持。 请改用 NdisOidRequest。 支持 Windows Vista 和 Windows XP 中的 NDIS 5.1 驱动程序。

要求

要求
Header ndis.h (包括 Ndis.h)
Library Ndis.lib
IRQL IRQL <= DISPATCH_LEVEL

另请参阅