Partager via


Méthode IWDFDevice ::CreateRequest (wudfddi.h)

[Avertissement : UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Prise en main avec UMDF.]

La méthode CreateRequest crée un objet de requête non mis en forme.

Syntaxe

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

Paramètres

[in, optional] pCallbackInterface

Pointeur vers l’interface IUnknown que le framework utilise pour déterminer les fonctions de rappel d’événement liées à l’objet auxquelles le pilote s’abonne sur l’objet de requête nouvellement créé. Ce paramètre est facultatif. Le pilote peut passer la valeur NULL si le pilote ne nécessite pas de notification. Si le pilote réussit un pointeur valide, l’infrastructure appelle QueryInterface sur l’interface IUnknown pour l’interface IObjectCleanup . Si l’infrastructure obtient l’interface IObjectCleanup du pilote, l’infrastructure peut ensuite appeler la méthode IObjectCleanup ::OnCleanup du pilote pour informer le pilote que l’objet de demande est nettoyé.

[in, optional] pParentObject

Pointeur vers l’interface IWDFObject pour l’objet parent de l’objet de demande d’E/S créé. Si la valeur est NULL, l’objet d’appareil devient le parent par défaut.

[out] ppRequest

Pointeur vers une variable qui reçoit un pointeur vers l’interface IWDFIoRequest pour le nouvel objet de requête.

Valeur retournée

CreateRequest retourne S_OK si l’opération réussit. Sinon, cette méthode retourne l’un des codes d’erreur définis dans Winerror.h.

Remarques

Avant qu’un pilote UMDF utilise l’objet de requête créé par CreateRequest , le pilote doit mettre en forme l’objet de requête. Pour mettre en forme un objet de demande d’E/S, le pilote appelle l’une des méthodes suivantes :

Si un pilote appelle CreateRequest pour créer un objet de requête, il ne doit pas appeler IWDFIoRequest ::Complete pour l’objet de requête. Au lieu de cela, le pilote doit appeler IWDFObject ::D eleteWdfObject lorsqu’il a terminé d’utiliser l’objet de requête. Pour plus d’informations, consultez Terminer les demandes d’E/S.

Si NULL est spécifié dans le paramètre pParentObject , l’objet d’appareil devient l’objet parent par défaut pour l’objet de demande d’E/S nouvellement créé. Si un pilote UMDF crée un objet de requête d’E/S que le pilote utilise avec un objet de file d’attente d’E/S spécifique ou un autre objet de requête d’E/S, le pilote doit définir cet objet de file d’attente ou de requête comme objet parent de l’objet de demande créé. Lorsque l’objet parent est supprimé, l’objet de demande créé est supprimé.

Exemples

L’exemple de code suivant montre comment créer une demande, mettre en forme la demande pour la lecture et envoyer la demande.

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

Configuration requise

Condition requise Valeur
Fin de la prise en charge Non disponible dans UMDF 2.0 et versions ultérieures.
Plateforme cible Desktop (Expérience utilisateur)
Version UMDF minimale 1.5
En-tête wudfddi.h (inclure Wudfddi.h)
DLL WUDFx.dll

Voir aussi

IWDFDevice

IWDFIoRequest

IWDFIoTarget ::FormatRequestForIoctl

IWDFIoTarget ::FormatRequestForRead

IWDFIoTarget ::FormatRequestForWrite

IWDFObject