Partager via


IWDFIoTargetStateManagement ::Start, méthode (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 Start commence à envoyer des requêtes en file d’attente à une cible d’E/S locale.

Syntaxe

HRESULT Start();

Valeur de retour

Start retourne S_OK si l’opération réussit. Sinon, cette méthode peut retourner l’un des codes d’erreur :

Code de retour Description
HRESULT_FROM_NT (STATUS_INVALID_DEVICE_STATE)
Le périphérique a été déconnecté.
 

Cette méthode peut retourner l’un des autres codes d’erreur que Winerror.h définit.

Remarques

Si votre pilote peut détecter des erreurs d’appareil récupérables, vous voudrez peut-être que votre pilote appelle IWDFIoTargetStateManagement ::Stop pour arrêter temporairement l’envoi de requêtes à la cible d’E/S locale, puis appeler plus tard Start pour reprendre l’envoi des demandes.

En outre, si un pilote appelle IWDFUsbTargetPipe2 ::ConfigureContinuousReader pour configurer un lecteur continu pour un canal USB, la fonction de rappel IPnpCallback ::OnD0Entry du pilote doit appeler Start pour démarrer le lecteur.

Votre pilote doit appeler Start et IWDFIoTargetStateManagement ::Stop de manière synchrone. Une fois que le pilote a appelé l’une de ces fonctions, il ne doit pas appeler l’autre fonction avant que la première ne retourne.

Pour plus d’informations sur démarrer, consultez Contrôle de l’état d’une cible d’E/S générale dans UMDF.

Pour plus d’informations sur les cibles d’E/S, consultez Utilisation de cibles d’E/S dans UMDF.

Exemples

L’exemple de code suivant montre d’abord comment un pilote peut obtenir l’interface IWDFIoTargetStateManagement pour un objet de canal USB. L’exemple de code montre ensuite comment une fonction de rappel IPnpCallback ::OnD0Entry peut appeler Start si le pilote utilise un lecteur continu pour le canal USB.


    IWDFIoTargetStateManagement * m_pIoTargetInterruptPipeStateMgmt = NULL;

    IWDFUsbTargetFactory *  pIUsbTargetFactory = NULL;
    IWDFUsbTargetDevice *   pIUsbTargetDevice = NULL;
    IWDFUsbInterface *      pIUsbInterface = NULL;
    IWDFUsbTargetPipe *     pIUsbPipe = NULL;

    hr = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pIUsbTargetFactory));
    if (FAILED(hr))
    {...}
    hr = pIUsbTargetFactory->CreateUsbTargetDevice(&pIUsbTargetDevice);
    if (FAILED(hr))
    {...}
    hr = pIUsbTargetDevice->RetrieveUsbInterface(0, &pIUsbInterface);
    if (FAILED(hr))
    {...}
    NumEndPoints = pIUsbInterface->GetNumEndPoints();
    for (UCHAR PipeIndex = 0; PipeIndex < NumEndPoints; PipeIndex++)
    {
        hr = pIUsbInterface->RetrieveUsbPipeObject(PipeIndex, &pIUsbPipe);
        if (FAILED(hr))
        {...}
        else
        {
            if (pIUsbPipe->IsInEndPoint())
            {
                if (UsbdPipeTypeInterrupt == pIUsbPipe->GetType())
                {
                    m_pIUsbInterruptPipe = pIUsbPipe;
                    hr = m_pIUsbInterruptPipe->QueryInterface(IID_PPV_ARGS(&m_pIoTargetInterruptPipeStateMgmt));
                    if (FAILED(hr))
                    {...}
                }
            }
        }
    } 

HRESULT
CMyDevice::OnD0Entry(
    __in IWDFDevice*  pWdfDevice,
    __in WDF_POWER_DEVICE_STATE  previousState
    )
{
...
    m_pIoTargetInterruptPipeStateMgmt->Start();
...
    return S_OK;
}

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

IWDFIoTargetStateManagement

IWDFRemoteTarget ::Stop