PortCls 프라이빗 PEP 컨텍스트 공유
Windows 8 미니포트 드라이버는 WINDOWS PEP(전원 엔진 플러그 인)와 프라이빗 컨텍스트 공유를 위해 새 인터페이스인 IPortClsRuntimePower를 사용할 수 있습니다.
오디오 포트 클래스 드라이버(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를 처리하는 동안 콜백 등록을 수행해야 합니다.
콜백에 제공되는 컨텍스트 포인터 외에도 다른 매개 변수는 런타임 전원 프레임워크의 PowerControlCallback에 대한 정의와 동일하게 정의됩니다. 또한 미니포트의 콜백은 Portcls.h 헤더 파일의 다음 코드 조각에 정의된 대로 PCPFNRUNTIME_POWER_CONTROL_CALLBACK 형식이어야 합니다.
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 매개 변수를 제외하고 다른 모든 매개 변수는 런타임 전원 프레임워크의 PoFxPowerControl 메서드에 대한 매개 변수와 동일하게 정의됩니다.