Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Windows 8, минипорт-драйвер может использовать новый интерфейс IPortClsRuntimePower для обмена частным контекстом с модулем Windows Power Engine Plug-in (PEP).
Драйвер класса аудиопорта (PortCls) был обновлен, чтобы предоставить новый интерфейс IPortClsRuntimePower на порту WaveRT. Для того чтобы минипорт-драйвер мог отправлять приватные команды управления питанием в PEP операционной системы, он сначала должен получить доступ к интерфейсу IPortClsRuntimePower своего связанного порта. Затем драйвер минипорта регистрирует обратный вызов, который вызывается в соответствующее время, позволяя драйверу минипорта отправлять собственные элементы управления питанием.
Доступ к IPortClsRuntimePower
Драйвер минипорта получает доступ к портовому IPortClsRuntimePower через следующую последовательность событий:
Драйвер минипорта вызывает PcNewPort и предоставляет IID_IPortWaveRT в качестве REFID.
PcNewPort создает интерфейс порта (Pport) типа IPortWaveRT.
Затем драйвер минипорта вызывает QueryInterface в только что созданном интерфейсе порта IPortWaveRT и указывает IID_IPortClsRuntimePower в качестве GUID интерфейса.
Интерфейс порта IPortWaveRT предоставляет минипорт-драйверу указатель на его интерфейс IPortClsRuntimePower.
Файл заголовка Portcls.h определяет GUID для IPortClsRuntimePower следующим образом:
// {E057C351-0430-4DBC-B172-C711D40A2373}
DEFINE_GUID(IID_IPortClsRuntimePower,
0xe057c351, 0x430, 0x4dbc, 0xb1, 0x72, 0xc7, 0x11, 0xd4, 0xa, 0x23, 0x73);
Регистрация обратного вызова
Минипорт-драйвер использует метод IPortClsRuntimePower::RegisterPowerControlCallback для регистрации обратного вызова. Этот метод вызывается либо при запуске частного запроса PEP, либо в ответ на частный запрос, инициированный самим драйвером минипорта. Регистрация обратного вызова обычно должна выполняться, пока драйвер обрабатывает IRP_MN_START_DEVICE Irp PNP.
Помимо указателя контекста, предоставленного в обратном вызове, другие параметры определяются идентично определениям для PowerControlCallback в рамках среды управления питанием времени выполнения. Кроме того, обратный вызов мини-порта должен иметь тип PCPFNRUNTIME_POWER_CONTROL_CALLBACK, как определено в следующем фрагменте из файла заголовка Portcls.h .
typedef
NTSTATUS
_IRQL_requires_max_(DISPATCH_LEVEL)
(*PCPFNRUNTIME_POWER_CONTROL_CALLBACK)
(
_In_ LPCGUID PowerControlCode,
_In_opt_ PVOID InBuffer,
_In_ SIZE_T InBufferSize,
_Out_opt_ PVOID OutBuffer,
_In_ SIZE_T OutBufferSize,
_Out_opt_ PSIZE_T BytesReturned,
_In_opt_ PVOID Context
);
При остановке или удалении драйвера необходимо использовать метод IPortClsRuntimePower::UnregisterPowerControlCallback для отмены регистрации всех зарегистрированных обратных вызовов.
Отправка частных элементов управления питанием
После того как минипорт устанавливает доступ к интерфейсу IPortClsRuntimePower и использует метод RegisterPowerControlCallback интерфейса для регистрации обратного вызова, теперь он готов отправлять частные элементы управления питанием. При вызове метода обратного вызова драйвер минипорта использует метод IPortClsRuntimePower::SendPowerControl для отправки частных элементов управления питанием в PEP Windows.
За исключением параметра DeviceObject , все остальные параметры определяются одинаково для метода PoFxPowerControl платформы среды выполнения.