IWDFIoTargetStateManagement::Start method
The Start method starts sending queued requests to a local I/O target.
Syntax
HRESULT Start();
Parameters
This method has no parameters.
Return value
Start returns S_OK if the operation succeeds. Otherwise, this method might return one of the error codes:
Return code | Description |
---|---|
|
The device has been removed. |
This method might return one of the other error codes that Winerror.h defines.
Remarks
If your driver can detect recoverable device errors, you might want your driver to call IWDFIoTargetStateManagement::Stop to temporarily stop sending requests to the local I/O target, then later call Start to resume sending requests.
Additionally, if a driver calls IWDFUsbTargetPipe2::ConfigureContinuousReader to configure a continuous reader for a USB pipe, the driver's IPnpCallback::OnD0Entry callback function must call Start to start the reader.
Your driver must call Start and IWDFIoTargetStateManagement::Stop synchronously. After the driver calls one of these functions, it must not call the other function before the first one returns.
For more information about Start, see Controlling a General I/O Target's State in UMDF.
For more information about I/O targets, see Using I/O Targets in UMDF.
Examples
The following code example first shows how a driver can obtain the IWDFIoTargetStateManagement interface for a USB pipe object. The code example then shows how an IPnpCallback::OnD0Entry callback function can call Start, if the driver uses a continuous reader for the USB pipe.
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; }
Requirements
End of support | Unavailable in UMDF 2.0 and later. |
---|---|
Minimum UMDF version | 1.5 |
Header |
|
DLL |
|
See also