Поделиться через


Метод 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

Указывает идентификатор пин-кода. Если фильтр содержит n фабрик контактов, допустимые идентификаторы контактов варьируются от 0 до n-1.

[in, out] FilterNecessary

Указывает минимальное количество контактов, экземпляр которых фабрика контактов должна создать, прежде чем фильтр сможет выполнять операции ввода-вывода.

[in, out] FilterCurrent

Указывает текущее количество экземпляров контактов. Это число подсчитывает контакты, экземпляры которых фабрика контактов уже создала в фильтре.

[in, out] FilterPossible

Указывает максимальное количество контактов, которые фабрика контактов может создать в фильтре. Установите значение KSINSTANCE_INDETERMINATE, если нет максимального значения.

[in, out] GlobalCurrent

Указывает текущее количество контактов, экземпляр которых фабрика контактов установила в драйвере.

[in, out] GlobalPossible

Указывает максимальное количество контактов, экземпляр которых фабрика контактов может создать в драйвере. Установите значение KSINSTANCE_INDETERMINATE, если нет максимального значения.

Возвращаемое значение

None

Remarks

Вызов PinCount имеет две цели:

  • Чтобы сообщить драйверу мини-порта о текущем количестве контактов.
  • Чтобы предоставить драйверу минипорта возможность изменить текущий счетчик контактов.
FilterNecessary, FilterCurrent, FilterPossible, GlobalCurrent и GlobalPossible — это параметры IN+OUT, указывающие на значения в описании фильтра драйвера минипорта. Во время вызова PinCount драйвер мини-порта может проверить эти значения и может изменить значения, чтобы точнее указать, сколько дополнительных контактов можно создать из оставшихся ресурсов.

FilterCurrent и FilterPossible указывают значения для каждого фильтра для фабрики контактов, указанной PinId.

GlobalCurrent и GlobalPossible указывают общие значения для фабрики контактов для всех экземпляров фильтра.

Драйверам miniport обычно не требуется изменять параметр FilterNecessary , но он включается для полноты.

Во время вызова IPort::Init драйвер порта вызывает метод IMiniport::GetDescription драйвера miniport, чтобы получить указатель на дескриптор фильтра, который включает массив пин-дескрипторов драйвера miniport (см . PCPIN_DESCRIPTOR). После этого драйвер порта обращается к дескрипторам пин-кода для ответа на запросы свойств закрепления.

Если драйвер мини-порта поддерживает интерфейс IPinCount , драйвер порта вызывает , PinCount чтобы предоставить драйверу минипорта возможность обновить счетчики контактов перед ответом на запрос свойства пин-кода. Если драйвер мини-порта не поддерживает IPinCount, драйвер портов просто использует статические ограничения числа контактов в массиве пин-дескрипторов.

Драйвер порта вызывает метод при PinCount получении одного из следующих запросов свойства KS:

KSPROPERTY_PIN_CINSTANCES

KSPROPERTY_PIN_GLOBALCINSTANCES

KSPROPERTY_PIN_NECESSARYINSTANCES

PortCls также вызывает PinCount метод при каждом создании нового потока.

Драйверы мини-порта не должны явно вызывать создание или уничтожение потоков в методе PinCount . В противном случае водители минипорта не ограничены в том, что они могут делать во время этого вызова.

Метод PinCount вызывается на PASSIVE_LEVEL IRQL. Код для этого метода должен находиться в постраничной памяти.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть portcls.h (включая Portcls.h)
IRQL PASSIVE_LEVEL

См. также раздел

IMiniport::GetDescription

IPinCount

IPort::Init

KSPROPERTY_PIN_CINSTANCES

KSPROPERTY_PIN_GLOBALCINSTANCES

KSPROPERTY_PIN_NECESSARYINSTANCES

PCPIN_DESCRIPTOR