Méthode IWDFIoRequest2 ::RetrieveInputBuffer (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 RequestRetrieveInputBuffer récupère la mémoire tampon d’entrée d’une requête d’E/S.
Syntaxe
HRESULT RetrieveInputBuffer(
[in] SIZE_T MinimumRequiredCb,
[out] PVOID *Buffer,
[out, optional] SIZE_T *BufferCb
);
Paramètres
[in] MinimumRequiredCb
Taille de mémoire tampon minimale, en octets, dont le pilote a besoin pour traiter la demande d’E/S. Cette valeur peut être égale à zéro s’il n’y a pas de taille de mémoire tampon minimale.
[out] Buffer
Pointeur vers un emplacement qui reçoit l’adresse de la mémoire tampon.
[out, optional] BufferCb
Pointeur vers un emplacement qui reçoit la taille de la mémoire tampon, en octets. Ce paramètre est facultatif et peut être NULL.
Valeur retournée
RequestRetrieveInputBuffer 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 d’entrée, ou la taille de la mémoire tampon d’entrée est inférieure à la taille minimale spécifiée par MinimumRequiredCb . |
|
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 RequestRetrieveInputBuffer pour obtenir la mémoire tampon d’entrée pour une demande d’écriture ou une demande de contrôle d’E/S de périphérique, mais pas pour une demande de lecture (car les demandes de lecture ne fournissent pas de données d’entrée).
La méthode RequestRetrieveInputBuffer 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 RequestRetrieveInputBuffer retourne S_OK, le pilote reçoit l’adresse et, éventuellement, la taille de la mémoire tampon d’entrée.
Le pilote peut accéder à la mémoire tampon récupérée jusqu’à ce qu’il termine la demande d’E/S.
Au lieu d’appeler RequestRetrieveInputBuffer, le pilote peut appeler IWDFIoRequest2 ::RetrieveInputMemory, ce qui crée un objet de mémoire framework qui représente 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 un segment de la fonction de rappel IQueueCallbackDeviceIoControl ::OnDeviceIoControl d’un pilote de port série. À partir de la mémoire tampon d’entrée d’une demande d’E/S, le segment de code obtient la vitesse de bauds qui doit être définie pour l’appareil.
VOID
STDMETHODCALLTYPE
CMyQueue::OnDeviceIoControl(
__in IWDFIoQueue* FxQueue,
__in IWDFIoRequest* FxRequest,
__in ULONG ControlCode,
__in SIZE_T InputBufferCb,
__in SIZE_T OutputBufferCb
)
{
PBYTE buffer;
SIZE_T bufferSize;
HRESULT hr;
//
// Declare an IWDFIoRequest2 interface pointer and obtain the
// IWDFIoRequest2 interface from the IWDFIoRequest interface.
//
CComQIPtr<IWDFIoRequest2> r2 = FxRequest;
switch (ControlCode)
{
case IOCTL_SERIAL_SET_BAUD_RATE:
{
//
// Obtain the baud rate from the write request's input buffer.
//
hr = r2->RetrieveInputBuffer(sizeof(SERIAL_BAUD_RATE),
(PVOID*) &buffer,
&bufferSize);
...
}
}
}
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 ::RetrieveInputMemory
IWDFIoRequest2 ::RetrieveOutputBuffer
IWDFIoRequest2 ::RetrieveOutputMemory