IWDFIoTargetStateManagement::Start 方法 (wudfddi.h)

[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,且較新版本的 #DD7B26CA89A47489D8994F7C469FA79C4 上不支援 UMDF 1。 通用 Windows 驅動程式必須使用 UMDF 2。 如需詳細資訊,請參閱使用 UMDF 使用者入門。]

Start 方法會開始將佇列要求傳送至本機 I/O 目標

Syntax

HRESULT Start();

傳回值

如果 作業成功,Start 會傳回S_OK。 否則,此方法可能會傳回其中一個錯誤碼:

傳回碼 Description
HRESULT_FROM_NT (STATUS_INVALID_DEVICE_STATE)
裝置已移除。
 

這個方法可能會傳回 Winerror.h 定義的其中一個其他錯誤碼。

備註

如果您的驅動程式可以偵測可復原的裝置錯誤,您可能希望驅動程式呼叫 IWDFIoTargetStateManagement::Stop 暫時停止將要求傳送至本機 I/O 目標,然後稍後呼叫 Start 繼續傳送要求。

此外,如果驅動程式呼叫 IWDFUsbTargetPipe2::ConfigureContinuousReader 來設定 USB 管道的連續讀取器,驅動程式的 IPnpCallback::OnD0Entry 回呼函式必須呼叫 Start 以啟動讀取器。

您的驅動程序必須以同步方式呼叫 StartIWDFIoTargetStateManagement::Stop 。 在驅動程式呼叫其中一個函式之後,它不得在第一個函式傳回之前呼叫另一個函式。

如需 Start 的詳細資訊,請參閱 控制 UMDF 中的一般 I/O 目標狀態

如需 I/O 目標的詳細資訊,請參閱 在 UMDF 中使用 I/O 目標

範例

下列程式代碼範例會先示範驅動程式如何取得 USB 管道物件的 IWDFIoTargetStateManagement 介面。 然後,程式代碼範例會示範如果驅動程式針對USB管道使用連續讀取器, IPnpCallback::OnD0Entry 回呼函式如何呼叫 Start


    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;
}

規格需求

需求
終止支援 UMDF 2.0 和更新版本中無法使用。
目標平台 桌面
最低UMDF版本 1.5
標頭 wudfddi.h (包括 Wudfddi.h)
Dll WUDFx.dll

另請參閱

IWDFIoTargetStateManagement

IWDFRemoteTarget::Stop