Partager via


IWDFIoRequest2 ::RetrieveInputMemory, méthode (wudfddi.h)

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

La méthode RetrieveInputMemory récupère l’interface IWDFMemory d’un objet mémoire de framework qui représente la mémoire tampon d’entrée d’une requête d’E/S.

Syntaxe

HRESULT RetrieveInputMemory(
  [out] IWDFMemory **Memory
);

Paramètres

[out] Memory

Adresse d’un emplacement qui reçoit un pointeur vers l’interface IWDFMemory d’un objet mémoire UMDF.

Valeur de retour

RetrieveInputMemory retourne S_OK si l’opération réussit. Sinon, cette méthode peut retourner la valeur suivante :

Retourner le code Description
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
La demande d’E/S n’a pas fourni de mémoire tampon de sortie.
E_OUTOFMEMORY
La mémoire insuffisante est disponible pour récupérer la mémoire tampon. Le pilote doit terminer la demande avec une valeur d’état d’erreur.
 

Cette méthode peut retourner l’une des autres valeurs que Winerror.h contient.

Remarques

La mémoire tampon d’entrée d’une requête contient des informations, telles que les données à écrire sur un disque, que l’originateur de la requête fournie. Votre pilote peut appeler RetrieveInputMemory pour obtenir la mémoire tampon d’entrée pour une demande d’écriture ou une demande de contrôle d’E/S d’appareil, mais pas pour une demande de lecture (car les demandes de lecture ne fournissent pas de données d’entrée).

La méthode RetrieveInputMemory récupère la mémoire tampon d’entrée pour les requêtes d’E/S qui utilisent les en mémoire tampon ou méthode d’E/S directes pour accéder aux mémoires tampons de données.

Si RetrieveInputMemory retourne S_OK, le pilote reçoit un pointeur vers l’interface IWDFMemory d’un objet mémoire UMDF qui représente la mémoire tampon d’entrée. Pour accéder à la mémoire tampon, le pilote doit appeler IWDFMemory ::GetDataBuffer.

Le pilote peut accéder à l’objet mémoire du framework récupéré jusqu’à ce qu’il termine la requête d’E/S. Avant la fin de la requête d’E/S, le pilote doit appeler IWDFMemory ::Release.

Au lieu d’appeler RetrieveInputMemory, le pilote peut appeler IWDFIoRequest2 ::RetrieveInputBuffer, qui récupère l’adresse et la longueur de la mémoire tampon.

Pour plus d’informations sur l’accès aux mémoires tampons de données d’une requête d’E/S, consultez Accès aux mémoires tampons de données dans UMDF-Based Pilotes.

Exemples

L’exemple de code suivant montre comment une fonction de rappel IQueueCallbackWrite ::OnWrite peut obtenir l’interface IWDFMemory de l’objet mémoire du framework qui représente la mémoire tampon d’entrée d’une demande d’écriture. L’exemple met ensuite en forme et envoie la demande d’écriture à une cible d’E/S USB.

VOID
STDMETHODCALLTYPE
  CMyQueue::OnWrite(
    __in IWDFIoQueue *pWdfQueue,
    __in IWDFIoRequest *pWdfRequest,
    __in SIZE_T BytesToWrite
    )
{
    HRESULT hr = S_OK;
    IWDFMemory * pInputMemory = NULL;
    IWDFUsbTargetPipe * pOutputPipe = m_Device->GetOutputPipe();
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    hr = r2->RetrieveInputMemory(&pInputMemory);
    if (FAILED(hr)) goto Exit;

    hr = pOutputPipe->FormatRequestForWrite(
                                           pWdfRequest,
                                           NULL, //pFile
                                           pInputMemory,
                                           NULL, //Memory offset
                                           NULL  //DeviceOffset
                                           );
Exit:
    if (FAILED(hr))
    {
        pWdfRequest->Complete(hr);
    }
    else
    {
        ForwardFormattedRequest(pWdfRequest, pOutputPipe);
    }
    SAFE_RELEASE(pInputMemory);
 return;
}

Exigences

Exigence Valeur
fin du support Indisponible dans UMDF 2.0 et versions ultérieures.
plateforme cible Bureau
version minimale de UMDF 1.9
d’en-tête wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Voir aussi

IWDFIoRequest2

IWDFIoRequest2 ::RetrieveInputBuffer

IWDFIoRequest2 ::RetrieveOutputBuffer

IWDFIoRequest2 ::RetrieveOutputMemory

IWDFIoRequest ::GetInputMemory

IWDFIoRequest ::GetOutputMemory