UFX_PROPRIETARY_CHARGER_DETECT回呼函式 (ufxproprietarycharger.h)
篩選驅動程序的實作,可偵測是否附加了充電站,並取得有關電池的詳細數據。
語法
UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;
NTSTATUS UfxProprietaryChargerDetect(
[in] PVOID Context,
[out] PUFX_PROPRIETARY_CHARGER DetectedCharger
)
{...}
參數
[in] Context
驅動程式定義內容的指標。
[out] DetectedCharger
驅動程式填滿UFX_PROPRIETARY_CHARGER資訊的 UFX_PROPRIETARY_CHARGER 結構的指標。
傳回值
如果作業成功,回呼函式必須傳回STATUS_SUCCESS,或NT_SUCCESS (状态) 等於 TRUE 的另一個狀態值。 否則,它必須傳回狀態值,NT_SUCCESS (状态) 等於 FALSE。
備註
若要支援處理專屬的電源,USB 較低篩選器驅動程式必須發佈支援。 在發佈程式期間,驅動程式也會註冊此回呼函式的實作。 如需詳細資訊,請參閱 USB篩選驅動程式以支援專屬的電池。
在此回呼函式中,驅動程式會指派 GUID,並在裝置連線以進行充電時,設定所需的最小 Dx 狀態。
範例
NTSTATUS
UsbLowerFilter_ProprietaryChargerDetect(
__in PVOID Context,
__out PUFX_PROPRIETARY_CHARGER DetectedCharger
)
{
NTSTATUS Status = STATUS_SUCCESS;
PPDCP_CONTEXT PdcpContext = NULL;
PAGED_CODE();
PdcpContext = DeviceGetUsbLowerFilterContext((WDFDEVICE)Context);
// Clear our event
KeClearEvent(&PdcpContext>AbortOperation);
// Wait for a while
Timeout.QuadPart = WDF_REL_TIMEOUT_IN_MS(PdcpContext>DetectionDelayInms);
Status = KeWaitForSingleObject(
&PdcpContext>AbortOperation,
Executive,
KernelMode,
FALSE,
&Timeout);
switch (Status)
{
case STATUS_SUCCESS:
// The abort event was set. Abort.
Status = STATUS_REQUEST_ABORTED;
break;
case STATUS_TIMEOUT:
// Timed out, detection has completed successfully.
// Check if we want to fail this.
if (PdcpContext>RejectNextRequest)
{
PdcpContext->RejectNextRequest = FALSE;
Status = STATUS_UNSUCCESSFUL;
}
else if (!PdcpContext->PdcpChargerAttached)
{
Status = STATUS_NOT_FOUND;
}
else
{
Status = STATUS_SUCCESS;
}
break;
default:
break;
}
if (NT_SUCCESS(Status))
{
PdcpContext->PdcpChargerDetected = TRUE;
DetectedCharger->ChargerId = GUID_USBFN_PROPRIETARY_CHARGER;
DetectedCharger->DxState = PowerDeviceD2;
}
return Status;
}
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
最小 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | ufxproprietarycharger.h |
IRQL | PASSIVE_LEVEL |