PROTOCOL_OID_REQUEST_COMPLETE fonction de rappel (ndis.h)
La fonction ProtocolOidRequestComplete termine le traitement d’une requête OID initiée par le pilote de protocole pour laquelle la fonction NdisOidRequest retournée NDIS_STATUS_PENDING.
Syntaxe
PROTOCOL_OID_REQUEST_COMPLETE ProtocolOidRequestComplete;
void ProtocolOidRequestComplete(
[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 NdisOidRequest.
[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 ProtocolOidRequestComplete effectue avec les informations à OidRequest .
Valeur de retour
Aucun
Remarques
ProtocolOidRequestComplete utilise la valeur d’entrée de Status comme suit :
-
Si d’état est NDIS_STATUS_SUCCESS, l'BytesRead ou membre octets de la structure NDIS_OID_REQUEST a été défini par NDIS ou le pilote sous-jacent pour spécifier la quantité d’informations fournies par le pilote de protocole transférées à partir 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, ProtocolOidRequestComplete pouvez utiliser les données retournées à InformationBuffer d’une manière déterminée par le pilote de protocole, 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, ProtocolOidRequestComplete peut configurer des variables d’état dans la zone ProtocolBindingContext pour limiter le nombre d’envois en attente que le pilote configure pour les appels suivants aux NdisSendNetBufferLIsts.
-
Si d’é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 InformationBufferLeng th requis pour effectuer l’opération demandée.
Dans ces circonstances, ProtocolOidRequestComplete peut allouer suffisamment d’espace tampon pour la requête, configurer une autre structure NDIS_OID_REQUEST avec la InformationBufferLength requise et le même Oid, puis réessayer l’appel à la fonction NdisOidRequest.
ProtocolOidRequestComplete pouvez réessayer les demandes de certains autres arguments NDIS_STATUS_ XXX, ainsi que décrit dans la référence de la fonction NdisOidRequest.
- Si Status est une valeur NDIS_STATUS_ XXX qui est une erreur irrécupérable, ProtocolOidRequestComplete doit libérer la mémoire allouée pour la structure de 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.
Pour les requêtes spécifiques à la liaison, NDIS appelle la fonction ProtocolOidRequestComplete elle-même. Étant donné que la bibliothèque NDIS gère les liaisons pour tous les pilotes miniports, NDIS peut retourner des informations spécifiques à la liaison uniquement sur les pilotes sous-jacents qui signalent leur type moyen comme un pour lequel le système fournit une bibliothèque de filtres. NDIS retourne NDIS_STATUS_NOT_SUPPORTED pour les requêtes spécifiques de liaison initiées par le pilote de protocole à d’autres pilotes miniports.
Pour plus d’informations sur les OID définis par le système, consultez NDIS OIDs.
ProtocolOidRequestComplete peut être appelée avant que le pilote de protocole n’ait eu le temps d’inspecter le code d’état qui NdisOidRequest retourne à Status.
NDIS appelle ProtocolOidRequestComplete au <IRQL = DISPATCH_LEVEL.
exemples de
Pour définir une fonction ProtocolOidRequestComplete, 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 ProtocolOidRequestComplete nommée « MyOidRequestComplete », utilisez le type PROTOCOL_OID_REQUEST_COMPLETE comme indiqué dans cet exemple de code :
PROTOCOL_OID_REQUEST_COMPLETE MyOidRequestComplete;
Ensuite, implémentez votre fonction comme suit :
_Use_decl_annotations_
VOID
MyOidRequestComplete(
NDIS_HANDLE ProtocolBindingContext,
PNDIS_OID_REQUEST OidRequest,
NDIS_STATUS Status
)
{...}
Le type de fonction PROTOCOL_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_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.0 et versions ultérieures. |
plateforme cible | Windows |
d’en-tête | ndis.h (include Ndis.h) |
IRQL | <= DISPATCH_LEVEL |