PortCls 私人 PEP 內容共用
從 Windows 8 開始,迷你埠驅動程式可以使用 IPortClsRuntimePower,這是新的介面,可與 Windows Power Engine 外掛程式共用的私人內容 (PEP) 。
(PortCls) 的音訊埠類別驅動程式已更新,以在 WaveRT 埠上公開新的介面 IPortClsRuntimePower。 為了讓迷你埠驅動程式將私人電源控制項傳送至作業系統的 PEP,迷你埠驅動程式必須先存取其相關聯埠的 IPortClsRuntimePower 介面。 迷你埠驅動程式接著會註冊適當時間叫用的回呼,讓迷你埠驅動程式能夠傳送私人電源控制項。
存取 IPortClsRuntimePower
迷你埠驅動程式可透過下列事件序列存取其埠的 IPortClsRuntimePower:
迷你埠驅動程式會呼叫 PcNewPort ,並提供IID_IPortWaveRT作為 REFID。
PcNewPort 會建立埠介面, (IPortWaveRT類型的 Pport) 。
迷你埠驅動程式接著會在新建立的 IPortWaveRT 埠介面中呼叫 QueryInterface,並將IID_IPortClsRuntimePower指定為介面 GUID。
IPortWaveRT埠介面會提供迷你埠驅動程式及其IPortClsRuntimePower介面的指標。
Portcls.h標頭檔會定義 IPortClsRuntimePower 的 GUID,如下所示:
// {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 PNP Irp 時執行回呼註冊。
除了回呼中提供的 CoNtext 指標之外,其他參數會與執行時間 Power Framework 的 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 方法,將私人電源控制項傳送至 Windows PEP。
除了 DeviceObject 參數之外,所有其他參數都會與執行時間 Power Framework 的 PoFxPowerControl 方法相同。