共用方式為


PortCls 私人 PEP 內容共用

從 Windows 8 開始,迷你埠驅動程式可以使用 IPortClsRuntimePower,這是新的介面,可與 Windows Power Engine 外掛程式共用的私人內容 (PEP) 。

(PortCls) 的音訊埠類別驅動程式已更新,以在 WaveRT 埠上公開新的介面 IPortClsRuntimePower。 為了讓迷你埠驅動程式將私人電源控制項傳送至作業系統的 PEP,迷你埠驅動程式必須先存取其相關聯埠的 IPortClsRuntimePower 介面。 迷你埠驅動程式接著會註冊適當時間叫用的回呼,讓迷你埠驅動程式能夠傳送私人電源控制項。

存取 IPortClsRuntimePower

迷你埠驅動程式可透過下列事件序列存取其埠的 IPortClsRuntimePower:

  1. 迷你埠驅動程式會呼叫 PcNewPort ,並提供IID_IPortWaveRT作為 REFID。

  2. PcNewPort 會建立埠介面, (IPortWaveRT類型的 Pport) 。

  3. 迷你埠驅動程式接著會在新建立的 IPortWaveRT 埠介面中呼叫 QueryInterface,並將IID_IPortClsRuntimePower指定為介面 GUID。

  4. 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 方法相同。