Функция UcmTcpciPortControllerAlert (ucmtcpciportcontroller.h)

Отправляет сведения об оповещениях оборудования, полученных на контроллере порта, в UcmTcpciCx.

Синтаксис

void UcmTcpciPortControllerAlert(
  [in] UCMTCPCIPORTCONTROLLER               PortControllerObject,
       PUCMTCPCI_PORT_CONTROLLER_ALERT_DATA AlertData,
       size_t                               NumberOfAlerts
);

Параметры

[in] PortControllerObject

Дескриптор объекта контроллера порта, который драйвер клиента получил в предыдущем вызове UcmTcpciPortControllerCreate.

AlertData

Указатель на массив UCMTCPCI_PORT_CONTROLLER_ALERT_DATA , содержащий все текущие оповещения, которые не были отправлены в UcmTcpciCx. Это значение не может иметь значение NULL.

NumberOfAlerts

Количество элементов в массиве, на который указывает AlertData. Это значение не может быть равно 0.

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

None

Remarks

UcmTcpciPortControllerAlert возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае эта встроенная функция может возвращать соответствующий код ошибки NTSTATUS .

Драйвер клиента должен вызвать UcmTcpciPortControllerAlert , запущенный ранее путем вызова UcmTcpciPortControllerStart.

При возникновении аппаратного оповещения драйвер клиента должен определить тип оповещений, получить все вспомогательные сведения, связанные с этим оповещением, например сообщение PD, заполнить массив, а затем вызвать UcmTcpciPortControllerAlert.

Драйвер клиента должен сообщать об оповещениях последовательно. Драйвер не должен вызывать этот метод в потоках, которые работают одновременно, так как это может привести к состоянию гонки. Несмотря на то, что расширение класса обеспечивает правильную защиту всех внутренних данных с помощью блокировки, если драйвер вызывает UcmTcpciPortControllerAlert из нескольких потоков одновременно без внешней синхронизации, набор полученных оповещений не гарантируется. Чтобы избежать этого сценария, драйвер должен вызвать этот метод в рамках подпрограммы службы прерываний (ISR) или объекта DPC , который поставлен в очередь для ISR. IsR должен быть правильно синхронизирован, чтобы в любой момент времени был запущен только один экземпляр.

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

При обработке оповещений UcmTcpciCx может отправлять аппаратные запросы драйверу клиента до возврата вызова UcmTcpciPortControllerAlert . Если драйвер удерживает блокировку при вызове UcmTcpciPortControllerAlert , а также пытается получить такую же блокировку при обработке запроса оборудования, может возникнуть взаимоблокировка.

Требования

Требование Значение
Минимальная версия клиента Windows 10
Минимальная версия сервера Windows Server 2016
Целевая платформа Windows
Header ucmtcpciportcontroller.h
IRQL <=DISPATCH_LEVEL

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