IWDFDevice::CreateRequest メソッド (wudfddi.h)

[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、新しいバージョンのWindows 10では UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。 詳細については、「UMDF を使用したはじめに」を参照してください。

CreateRequest メソッドは、書式設定されていない要求オブジェクトを作成します。

構文

HRESULT CreateRequest(
  [in, optional] IUnknown      *pCallbackInterface,
  [in, optional] IWDFObject    *pParentObject,
  [out]          IWDFIoRequest **ppRequest
);

パラメーター

[in, optional] pCallbackInterface

フレームワークが、新しく作成された要求オブジェクトでドライバーがサブスクライブするオブジェクト関連のイベント コールバック関数を決定するために使用する IUnknown インターフェイスへのポインター。 このパラメーターは省略可能です。 ドライバーが通知を必要としない場合、ドライバーは NULL を 渡すことができます。 ドライバーが有効なポインターを渡した場合、フレームワークは IObjectCleanup インターフェイスの IUnknown インターフェイスで QueryInterface を呼び出します。 フレームワークがドライバーの IObjectCleanup インターフェイスを取得した場合、フレームワークはその後、ドライバーの IObjectCleanup::OnCleanup メソッドを呼び出して、要求オブジェクトがクリーンアップされたことをドライバーに通知できます。

[in, optional] pParentObject

作成された I/O 要求オブジェクトの親オブジェクトの IWDFObject インターフェイスへのポインター。 NULL の場合、デバイス オブジェクトは既定の親になります。

[out] ppRequest

新しい要求オブジェクトの IWDFIoRequest インターフェイスへのポインターを受け取る変数へのポインター。

戻り値

操作が成功した場合、CreateRequest はS_OKを返します。 それ以外の場合、このメソッドは Winerror.h で定義されているエラー コードのいずれかを返します。

注釈

UMDF ドライバーが CreateRequest によって作成される要求オブジェクトを使用する前に、ドライバーは要求オブジェクトの書式を設定する必要があります。 I/O 要求オブジェクトを書式設定するために、ドライバーは次のいずれかのメソッドを呼び出します。

ドライバーが CreateRequest を 呼び出して要求オブジェクトを作成する場合、要求オブジェクトに対して IWDFIoRequest::Complete を呼び出してはなりません。 代わりに、ドライバーは要求オブジェクトの使用が完了したときに IWDFObject::D eleteWdfObject を呼び出す必要があります。 詳細については、「 I/O 要求の完了」を参照してください。

pParentObject パラメーターに NULL が指定されている場合、デバイス オブジェクトは、新しく作成された I/O 要求オブジェクトの既定の親オブジェクトになります。 UMDF ドライバーが特定の I/O キュー オブジェクトまたは別の I/O 要求オブジェクトでドライバーが使用する I/O 要求オブジェクトを作成する場合、ドライバーはそのキューまたは要求オブジェクトを作成された要求オブジェクトの親オブジェクトとして設定する必要があります。 親オブジェクトが削除されると、作成された要求オブジェクトが削除されます。

次のコード例は、要求を作成し、読み取り用の要求を書式設定し、要求を送信する方法を示しています。

HRESULT
CUmdfHidDevice::SendInterruptPipeRead(
    VOID
    )
{
    CComPtr<IWDFDevice> wdfDevice;

    HRESULT hr;

    IWDFFile *pTargetFile = NULL;

    // Allocate a new WDF request to send on the interrupt pipe.
    GetWdfDevice(&wdfDevice);
    hr = wdfDevice->CreateRequest(
                                  static_cast<IObjectCleanup*>(this), 
                                  wdfDevice, 
                                  &m_InterruptReadRequest
                                  );

    if (SUCCEEDED(hr))
    {
        m_InterruptPipe->GetTargetFile(&pTargetFile);
        hr = m_InterruptPipe->FormatRequestForRead(
                                                   m_InterruptReadRequest,
                                                   pTargetFile,
                                                   m_ReadMemory,
                                                   NULL,
                                                   NULL
                                                   );
    }

    // Issue the read to the pipe.
    if (SUCCEEDED(hr))
    {
        hr = m_InterruptReadRequest->Send(m_InterruptPipe, 0, 0);
    }

    return hr;
}

要件

要件
サポート終了 UMDF 2.0 以降では使用できません。
対象プラットフォーム デスクトップ
最小 UMDF バージョン 1.5
Header wudfddi.h (Wudfddi.h を含む)
[DLL] WUDFx.dll

こちらもご覧ください

IWDFDevice

IWDFIoRequest

IWDFIoTarget::FormatRequestForIoctl

IWDFIoTarget::FormatRequestForRead

IWDFIoTarget::FormatRequestForWrite

IWDFObject