Méthode IWDFIoRequest2 ::RetrieveInputMemory (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 RetrieveInputMemory récupère l’interface IWDFMemory d’un objet de mémoire d’infrastructure 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 retournée
RetrieveInputMemory retourne S_OK si l’opération réussit. Sinon, cette méthode peut retourner la valeur suivante :
Code de retour | Description |
---|---|
|
La demande d’E/S n’a pas fourni de mémoire tampon de sortie. |
|
La mémoire disponible est insuffisante pour récupérer la mémoire tampon. Le pilote doit terminer la requête avec une erreur status valeur. |
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’initiateur de la requête a fournies. 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 demandes d’E/S qui utilisent la méthode d’E/S en mémoire tampon ou 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 de mémoire du framework récupéré jusqu’à ce qu’il termine la demande d’E/S. Avant que le pilote termine la demande d’E/S, il 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 demande d’E/S, consultez Accès aux mémoires tampons de données dans les pilotes UMDF-Based.
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;
}
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,9 |
En-tête | wudfddi.h (inclure Wudfddi.h) |
DLL | WUDFx.dll |
Voir aussi
IWDFIoRequest2 ::RetrieveInputBuffer
IWDFIoRequest2 ::RetrieveOutputBuffer
IWDFIoRequest2 ::RetrieveOutputMemory