Partager via


PROTOCOL_DIRECT_OID_REQUEST_COMPLETE fonction de rappel (ndis.h)

La fonction ProtocolDirectOidRequestComplete termine le traitement d’une requête OID directe initiée par le pilote de protocole pour laquelle la fonction NdisDirectOidRequest retournée NDIS_STATUS_PENDING.

Remarque Vous devez déclarer la fonction à l’aide du type PROTOCOL_DIRECT_OID_REQUEST_COMPLETE. Pour plus d’informations, consultez la section Exemples suivants.
 

Syntaxe

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE ProtocolDirectOidRequestComplete;

void ProtocolDirectOidRequestComplete(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNDIS_OID_REQUEST OidRequest,
  [in] NDIS_STATUS Status
)
{...}

Paramètres

[in] ProtocolBindingContext

Handle vers une zone de contexte allouée par le pilote de protocole dans laquelle le pilote de protocole gère l’état d’exécution par liaison. Le pilote a fourni ce handle lorsqu’il a appelé la fonction NdisOpenAdapterEx.

[in] OidRequest

Pointeur vers la structure NDIS_OID_REQUEST fournie par le pilote de protocole qui a été précédemment passée à la fonction NdisDirectOidRequest.

[in] Status

État final de la demande. Le pilote sous-jacent ou NDIS détermine cet état final. Ce paramètre détermine ce que ProtocolDirectOidRequestComplete effectue avec les informations à OidRequest .

Valeur de retour

Aucun

Remarques

ProtocolDirectOidRequestComplete est une fonction facultative. Si un pilote de protocole n’utilise pas de requêtes OID directes, il peut définir le point d’entrée de cette fonction sur NULL lorsqu’elle appelle le fonction NdisRegisterProtocolDriver.

ProtocolDirectOidRequestComplete utilise la valeur d’entrée du paramètre Status comme suit :

  • Si Status est NDIS_STATUS_SUCCESS, le BytesRead ou membre BytesWritten de la structure NDIS_OID_REQUEST a été défini par NDIS ou le pilote sous-jacent. Ces valeurs spécifient la quantité d’informations fournies par le pilote de protocole transférées de la mémoire tampon à InformationBuffer à la carte réseau dans une opération définie ou la quantité d’informations retournées à InformationBuffer en réponse à une opération de requête.

    Si le pilote de protocole a effectué une requête, ProtocolDirectOidRequestComplete peut utiliser les données retournées à InformationBuffer de toute façon que le pilote de protocole détermine, en fonction de la valeur du membre Oid.

    Par exemple, si le pilote de protocole a initialement lancé un OID_GEN_MAXIMUM_SEND_PACKETS requête, ProtocolDirectOidRequestComplete peut configurer des variables d’état dans la zone ProtocolBindingContext pour limiter le nombre d’envois en attente que le pilote configurera pour les appels suivants à la zone fonction NdisSendNetBufferLists.

  • Si 'état est NDIS_STATUS_INVALID_LENGTH ou NDIS_STATUS_BUFFER_TOO_SHORT, le membre Octetsneeded spécifie la valeur spécifique à l’OID du membre InformationBufferLength requis pour effectuer l’opération demandée.

    Dans ces circonstances, ProtocolDirectOidRequestComplete peut allouer suffisamment d’espace tampon pour la requête, configurer une autre structure NDIS_OID_REQUEST avec la valeur InformationBufferLeng th requise et la même valeur Oid, puis réessayer l’appel à la fonction NdisDirectOidRequest.

    ProtocolDirectOidRequestComplete peut réessayer les demandes pour certains autres arguments NDIS_STATUS_ Xxx, ainsi que décrit dans NdisDirectOidRequest.

  • Si Status est une valeur NDIS_STATUS_ Xxx qui est une erreur irrécupérable, ProtocolDirectOidRequestComplete doit libérer la mémoire allouée pour la structure NDIS_OID_REQUEST et déterminer si le pilote doit fermer la liaison ou ajuster ses informations d’état spécifiques à la liaison pour gérer les opérations d’E/S réseau continues sur la liaison.
ProtocolDirectOidRequestComplete peut être appelée avant que le pilote de protocole ait eu le temps d’inspecter le code d’état qui NdisDirectOidRequest retourne à Status.

NDIS appelle ProtocolDirectOidRequestComplete au <IRQL = DISPATCH_LEVEL.

exemples de

Pour définir une fonction ProtocolDirectOidRequestComplete, vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction que vous définissez. Windows fournit un ensemble de types de fonctions pour les pilotes. La déclaration d’une fonction à l’aide des types de fonctions permet d'Analyse du code pour les pilotes, de vérificateur de pilotes statiques (SDV) et d’autres outils de vérification recherchent des erreurs, et il est nécessaire d’écrire des pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction ProtocolDirectOidRequestComplete nommée « MyDirectOidRequestComplete », utilisez le type PROTOCOL_DIRECT_OID_REQUEST_COMPLETE comme indiqué dans cet exemple de code :

PROTOCOL_DIRECT_OID_REQUEST_COMPLETE MyDirectOidRequestComplete;

Ensuite, implémentez votre fonction comme suit :

_Use_decl_annotations_
VOID
 MyDirectOidRequestComplete(
    NDIS_HANDLE  ProtocolBindingContext,
    PNDIS_OID_REQUEST  OidRequest,
    NDIS_STATUS  Status
    )
  {...}

Le type de fonction PROTOCOL_DIRECT_OID_REQUEST_COMPLETE est défini dans le fichier d’en-tête Ndis.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction PROTOCOL_DIRECT_OID_REQUEST_COMPLETE dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes NDIS.

Pour plus d’informations sur Use_decl_annotations, consultez annoter le comportement de la fonction.

Exigences

Exigence Valeur
client minimum pris en charge Prise en charge dans NDIS 6.1 et versions ultérieures.
plateforme cible Windows
d’en-tête ndis.h (include Ndis.h)
IRQL <= DISPATCH_LEVEL

Voir aussi

NDIS_OID_REQUEST

NdisDirectOidRequest

NdisMDirectOidRequestComplete

NdisOpenAdapterEx

NdisRegisterProtocolDriver

OID_GEN_MAXIMUM_SEND_PACKETS