Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Реализация драйвера фильтра, чтобы определить, подключено ли зарядное устройство и получить сведения о зарядном устройстве.
Синтаксис
UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;
NTSTATUS UfxProprietaryChargerDetect(
[in] PVOID Context,
[out] PUFX_PROPRIETARY_CHARGER DetectedCharger
)
{...}
Параметры
[in] Context
Указатель на определяемый драйвером контекст.
[out] DetectedCharger
Указатель на структуру UFX_PROPRIETARY_CHARGER, которую водитель заполняет сведениями о зарядных устройствах.
Возвращаемое значение
Если операция выполнена успешно, функция обратного вызова должна возвращать STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(состояние) равно TRUE. В противном случае он должен вернуть значение состояния, для которого значение NT_SUCCESS(status) равно 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;
}
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | Виндоус |
| минимальная версия KMDF | 1.0 |
| минимальная версия UMDF | 2.0 |
| заголовка | ufxproprietarycharger.h |
| IRQL | PASSIVE_LEVEL |
См. также
драйвер USB-фильтра для поддержки собственных зарядных устройств