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


Метод 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, если нет максимального значения.

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

Никакой

Замечания

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

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

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

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

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

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

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

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

KSPROPERTY_PIN_CINSTANCES

KSPROPERTY_PIN_GLOBALCINSTANCES

KSPROPERTY_PIN_NECESSARYINSTANCES

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

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка portcls.h (include Portcls.h)
IRQL PASSIVE_LEVEL

См. также

IMiniport::GetDescription

IPinCount

IPort::Init

KSPROPERTY_PIN_CINSTANCES

KSPROPERTY_PIN_GLOBALCINSTANCES

KSPROPERTY_PIN_NECESSARYINSTANCES

PCPIN_DESCRIPTOR