IPinCount::P inCount 方法 (portcls.h)

方法 PinCount 查询微型端口驱动程序的引脚计数。

语法

void PinCount(
  [in]      ULONG  PinId,
  [in, out] PULONG FilterNecessary,
  [in, out] PULONG FilterCurrent,
  [in, out] PULONG FilterPossible,
  [in, out] PULONG GlobalCurrent,
  [in, out] PULONG GlobalPossible
);

参数

[in] PinId

指定引脚 ID。 如果筛选器包含 n 个引脚工厂,则有效的引脚 ID 范围为 0 到 n-1

[in, out] FilterNecessary

指定引脚工厂在筛选器可以执行 I/O 操作之前应实例化的最小引脚数。

[in, out] FilterCurrent

指定当前引脚实例数。 此数字计算引脚工厂已在筛选器上实例化的引脚数。

[in, out] FilterPossible

指定引脚工厂可以在筛选器上实例化的最大引脚数。 如果没有最大值,则设置为 KSINSTANCE_INDETERMINATE。

[in, out] GlobalCurrent

指定引脚工厂在驱动程序上实例化的当前引脚数。

[in, out] GlobalPossible

指定引脚工厂可以在驱动程序上实例化的最大引脚数。 如果没有最大值,则设置为 KSINSTANCE_INDETERMINATE。

返回值

备注

调用 PinCount 有两个用途:

  • 让微型端口驱动程序知道当前引脚计数。
  • 为微型端口驱动程序提供更改当前引脚计数的机会。
FilterNecessaryFilterCurrentFilterPossibleGlobalCurrentGlobalPossible 都是指向微型端口驱动程序筛选器说明中的值的 IN+OUT 参数。 在 PinCount 调用期间,微型端口驱动程序可以检查这些值,并可以选择编辑值,以便更准确地指示可以从剩余资源创建多少个其他引脚。

FilterCurrentFilterPossiblePinId 指定的引脚工厂指定每个筛选器的值。

GlobalCurrentGlobalPossible 指定筛选器的所有实例上的引脚工厂的总值。

微型端口驱动程序通常不需要更改 FilterNecessary 参数,但为了完整起见,将其包含在内。

IPort::Init 调用期间,端口驱动程序调用微型端口驱动程序的 IMiniport::GetDescription 方法以获取指向筛选器描述符的指针,其中包括微型端口驱动程序的 pin 描述符数组 (请参阅 PCPIN_DESCRIPTOR) 。 此后,端口驱动程序访问引脚描述符以响应对引脚属性的查询。

如果微型端口驱动程序支持 IPinCount 接口,则端口驱动程序会调用 PinCount ,让微型端口驱动程序有机会在回复引脚属性请求之前更新引脚计数。 如果微型端口驱动程序不支持 IPinCount,则端口驱动程序仅使用引脚描述符数组中的静态引脚计数限制。

端口驱动程序在收到以下 KS 属性请求之一时调用 PinCount 方法:

KSPROPERTY_PIN_CINSTANCES

KSPROPERTY_PIN_GLOBALCINSTANCES

KSPROPERTY_PIN_NECESSARYINSTANCES

每次创建新流时, PinCount PortCls 也会调用 方法。

微型端口驱动程序不得显式导致从 方法内 PinCount 创建或销毁流。 微型端口驱动程序在此调用期间不会限制其可执行的操作。

PinCount IRQL PASSIVE_LEVEL调用 方法。 此方法的代码必须驻留在分页内存中。

要求

要求
目标平台 通用
标头 portcls.h (包括 Portcls.h)
IRQL PASSIVE_LEVEL

另请参阅

IMiniport::GetDescription

IPinCount

IPort::Init

KSPROPERTY_PIN_CINSTANCES

KSPROPERTY_PIN_GLOBALCINSTANCES

KSPROPERTY_PIN_NECESSARYINSTANCES

PCPIN_DESCRIPTOR