Méthode IWDFUsbTargetDevice ::FormatRequestForControlTransfer (wudfusb.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 FormatRequestForControlTransfer met en forme un objet de requête d’E/S pour un transfert de contrôle USB.
Syntaxe
HRESULT FormatRequestForControlTransfer(
[in] IWDFIoRequest *pRequest,
[in] PWINUSB_SETUP_PACKET SetupPacket,
[in, optional] IWDFMemory *pMemory,
[in, optional] PWDFMEMORY_OFFSET TransferOffset
);
Paramètres
[in] pRequest
Pointeur vers l’interface IWDFIoRequest pour l’objet de requête à mettre en forme.
[in] SetupPacket
Pointeur vers un WINUSB_SETUP_PACKET pour le transfert de contrôle.
[in, optional] pMemory
Pointeur vers l’interface IWDFMemory utilisée pour accéder à la mémoire tampon utilisée pour le transfert de contrôle. Ce paramètre est facultatif.
[in, optional] TransferOffset
Pointeur vers une structure WDFMEMORY_OFFSET qui décrit le décalage de mémoire utilisé pour le transfert de contrôle. Ce paramètre est facultatif.
Valeur renvoyée
FormatRequestForControlTransfer retourne l’une des valeurs suivantes :
Code de retour | Description |
---|---|
|
FormatRequestForControlTransfer a correctement mis en forme un objet de requête d’E/S. |
|
FormatRequestForControlTransfer a rencontré un échec d’allocation. |
|
Décalage de mémoire spécifié par le paramètre TransferOffset n’est pas valide. |
Remarques
Après qu’un pilote UMDF a appelé FormatRequestForControlTransfer pour mettre en forme une demande d’E/S pour une opération de transfert de contrôle, l’infrastructure peut ensuite envoyer la demande à la cible d’E/S.
Exemples
L’exemple de code suivant est tiré de l’exemple de wdf_osrfx2_lab dans le WDK.
WINUSB_CONTROL_SETUP_PACKET setupPacket;
ULONG bytesTransferred;
HRESULT hr = S_OK;
//
// Setup the control packet.
//
WINUSB_CONTROL_SETUP_PACKET_INIT( &setupPacket,
BmRequestHostToDevice,
BmRequestToDevice,
USBFX2LK_SET_BARGRAPH_DISPLAY,
0,
0 );
//
// Issue the request to WinUsb.
//
hr = SendControlTransferSynchronously(
&(setupPacket.WinUsb),
(PUCHAR) BarGraphState,
sizeof(BAR_GRAPH_STATE),
&bytesTransferred
);
...
HRESULT
CMyDevice::SendControlTransferSynchronously(
_In_ PWINUSB_SETUP_PACKET SetupPacket,
_Inout_updates_(BufferLength) PBYTE Buffer,
_In_ ULONG BufferLength,
_Out_ PULONG LengthTransferred
)
{
HRESULT hr = S_OK;
IWDFIoRequest *pWdfRequest = NULL;
IWDFDriver * FxDriver = NULL;
IWDFMemory * FxMemory = NULL;
IWDFRequestCompletionParams * FxComplParams = NULL;
IWDFUsbRequestCompletionParams * FxUsbComplParams = NULL;
*LengthTransferred = 0;
hr = m_FxDevice->CreateRequest( NULL, //pCallbackInterface
NULL, //pParentObject
&pWdfRequest);
if (SUCCEEDED(hr))
{
m_FxDevice->GetDriver(&FxDriver);
hr = FxDriver->CreatePreallocatedWdfMemory( Buffer,
BufferLength,
NULL, //pCallbackInterface
pWdfRequest, //pParetObject
&FxMemory );
}
if (SUCCEEDED(hr))
{
hr = m_pIUsbTargetDevice->FormatRequestForControlTransfer( pWdfRequest,
SetupPacket,
FxMemory,
NULL); //TransferOffset
}
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 | wudfusb.h (inclure Wudfusb.h) |
DLL | WUDFx.dll |