Método IWDFIoTargetStateManagement::Start (wudfddi.h)
[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Drivers universais do Windows devem usar UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]
O método Start começa a enviar solicitações enfileiradas para um destino de E/S local.
Sintaxe
HRESULT Start();
Retornar valor
Start retornará S_OK se a operação for bem-sucedida. Caso contrário, esse método pode retornar um dos códigos de erro:
Código de retorno | Descrição |
---|---|
|
O dispositivo foi removido. |
Esse método pode retornar um dos outros códigos de erro definidos por Winerror.h.
Comentários
Se o driver puder detectar erros de dispositivo recuperáveis, talvez você queira que o driver chame IWDFIoTargetStateManagement::Stop para interromper temporariamente o envio de solicitações para o destino de E/S local e, em seguida, chame Iniciar para retomar o envio de solicitações.
Além disso, se um driver chamar IWDFUsbTargetPipe2::ConfigureContinuousReader para configurar um leitor contínuo para um pipe USB, a função de retorno de chamada IPnpCallback::OnD0Entry do driver deverá chamar Iniciar para iniciar o leitor.
Seu driver deve chamar Start e IWDFIoTargetStateManagement::Stop de forma síncrona. Depois que o driver chama uma dessas funções, ele não deve chamar a outra função antes que a primeira retorne.
Para obter mais informações sobre Iniciar, consulte Controlando o estado de um destino de E/S geral no UMDF.
Para obter mais informações sobre destinos de E/S, consulte Usando destinos de E/S no UMDF.
Exemplos
O exemplo de código a seguir mostra primeiro como um driver pode obter a interface IWDFIoTargetStateManagement para um objeto de pipe USB. Em seguida, o exemplo de código mostra como uma função de retorno de chamada IPnpCallback::OnD0Entry pode chamar Start, se o driver usar um leitor contínuo para o pipe USB.
IWDFIoTargetStateManagement * m_pIoTargetInterruptPipeStateMgmt = NULL;
IWDFUsbTargetFactory * pIUsbTargetFactory = NULL;
IWDFUsbTargetDevice * pIUsbTargetDevice = NULL;
IWDFUsbInterface * pIUsbInterface = NULL;
IWDFUsbTargetPipe * pIUsbPipe = NULL;
hr = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pIUsbTargetFactory));
if (FAILED(hr))
{...}
hr = pIUsbTargetFactory->CreateUsbTargetDevice(&pIUsbTargetDevice);
if (FAILED(hr))
{...}
hr = pIUsbTargetDevice->RetrieveUsbInterface(0, &pIUsbInterface);
if (FAILED(hr))
{...}
NumEndPoints = pIUsbInterface->GetNumEndPoints();
for (UCHAR PipeIndex = 0; PipeIndex < NumEndPoints; PipeIndex++)
{
hr = pIUsbInterface->RetrieveUsbPipeObject(PipeIndex, &pIUsbPipe);
if (FAILED(hr))
{...}
else
{
if (pIUsbPipe->IsInEndPoint())
{
if (UsbdPipeTypeInterrupt == pIUsbPipe->GetType())
{
m_pIUsbInterruptPipe = pIUsbPipe;
hr = m_pIUsbInterruptPipe->QueryInterface(IID_PPV_ARGS(&m_pIoTargetInterruptPipeStateMgmt));
if (FAILED(hr))
{...}
}
}
}
}
HRESULT
CMyDevice::OnD0Entry(
__in IWDFDevice* pWdfDevice,
__in WDF_POWER_DEVICE_STATE previousState
)
{
...
m_pIoTargetInterruptPipeStateMgmt->Start();
...
return S_OK;
}
Requisitos
Requisito | Valor |
---|---|
Fim do suporte | Indisponível no UMDF 2.0 e posterior. |
Plataforma de Destino | Área de Trabalho |
Versão mínima do UMDF | 1.5 |
Cabeçalho | wudfddi.h (include Wudfddi.h) |
DLL | WUDFx.dll |