UFX_PROPRIETARY_CHARGER_DETECT função de retorno de chamada (ufxproprietarycharger.h)
A implementação do driver de filtro para detectar se um carregador está anexado e obter detalhes sobre o carregador.
Sintaxe
UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;
NTSTATUS UfxProprietaryChargerDetect(
[in] PVOID Context,
[out] PUFX_PROPRIETARY_CHARGER DetectedCharger
)
{...}
Parâmetros
[in] Context
Um ponteiro para um contexto definido pelo driver.
[out] DetectedCharger
Um ponteiro para uma estrutura UFX_PROPRIETARY_CHARGER que o driver preenche com informações do carregador.
Retornar valor
Se a operação for bem-sucedida, a função de retorno de chamada deverá retornar STATUS_SUCCESS ou outro valor status para o qual NT_SUCCESS(status) é igual a TRUE. Caso contrário, ele deverá retornar um valor status para o qual NT_SUCCESS(status) é igual a FALSE.
Comentários
Para dar suporte à manipulação de carregadores proprietários, o driver de filtro inferior USB deve publicar o suporte. Durante o processo de publicação, o driver também registra sua implementação dessa função de retorno de chamada. Para obter mais informações, consulte Driver de filtro USB para dar suporte a carregadores proprietários.
Nessa função de retorno de chamada, o driver atribui ao carregador um GUID e define o estado mínimo de Dx necessário quando o dispositivo está conectado para carregamento.
Exemplos
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;
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Versão mínima do KMDF | 1.0 |
Versão mínima do UMDF | 2,0 |
Cabeçalho | ufxproprietarycharger.h |
IRQL | PASSIVE_LEVEL |
Confira também
Driver de filtro USB para dar suporte a carregadores proprietários