PROTOCOL_OID_REQUEST_COMPLETE función de devolución de llamada (ndis.h)
La función ProtocolOidRequestComplete completa el procesamiento de una solicitud OID iniciada por el controlador de protocolo para la que la función NdisOidRequest devolvió NDIS_STATUS_PENDING.
Sintaxis
PROTOCOL_OID_REQUEST_COMPLETE ProtocolOidRequestComplete;
void ProtocolOidRequestComplete(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNDIS_OID_REQUEST OidRequest,
[in] NDIS_STATUS Status
)
{...}
Parámetros
[in] ProtocolBindingContext
Identificador de un área de contexto asignada por controlador de protocolo en la que el controlador de protocolo mantiene el estado en tiempo de ejecución por enlace. El controlador proporcionó este identificador cuando llamó a la función NdisOpenAdapterEx.
[in] OidRequest
Puntero a la estructura de NDIS_OID_REQUEST proporcionada por el controlador de protocolo que se pasó anteriormente a la función NdisOidRequest.
[in] Status
Estado final de la solicitud. El controlador o NDIS subyacente determina este estado final. Este parámetro determina lo que protocolOidRequestComplete hace con la información de OidRequest.
Valor devuelto
Ninguno
Observaciones
ProtocolOidRequestComplete usa el valor de entrada de Status como se indica a continuación:
-
Si estado es NDIS_STATUS_SUCCESS, el bytesRead o miembro BytesWritten de la estructura de NDIS_OID_REQUEST ha sido establecido por NDIS o el controlador subyacente para especificar la cantidad de información proporcionada por el controlador de protocolo que se transfirió desde el búfer en InformationBuffer a la NIC en una operación de conjunto o la cantidad de información que se devolvió en InformationBuffer en respuesta a una operación de consulta.
Si el controlador de protocolo realizó una consulta, protocolOidRequestComplete puede usar los datos devueltos en informationBuffer de cualquier manera determinado por el controlador de protocolo, dependiendo del valor del miembro de Oid.
Por ejemplo, si el controlador de protocolo inició originalmente un OID_GEN_MAXIMUM_SEND_PACKETS consulta, protocolOidRequestComplete podría configurar variables de estado en el área de ProtocolBindingContext para limitar el número de envíos pendientes que el controlador configurará para las llamadas posteriores a la función NdisSendNetBufferLIsts.
-
Si de estado es NDIS_STATUS_INVALID_LENGTH o NDIS_STATUS_BUFFER_TOO_SHORT, el miembro BytesNeeded especifica el valor específico del OID del miembro InformationBufferLength necesario para llevar a cabo la operación solicitada.
En estas circunstancias, protocolOidRequestComplete puede asignar suficiente espacio de búfer para la solicitud, configurar otra estructura de NDIS_OID_REQUEST con el InformationBufferLength necesario y el mismo Oidy volver a intentar la llamada a la función NdisOidRequest.
ProtocolOidRequestComplete puede reintentar solicitudes para otros argumentos NDIS_STATUS_ XXX, así como se describe en la referencia para la función NdisOidRequest.
- Si Status es un valor NDIS_STATUS_ XXX que es un error irrecuperable, ProtocolOidRequestComplete debe liberar la memoria asignada para la estructura NDIS_OID_REQUEST y determinar si el controlador debe cerrar el enlace o ajustar su información de estado específica del enlace para controlar las operaciones de E/S de red continuas en el enlace.
Para las consultas específicas del enlace, NDIS llama a la función ProtocolOidRequestComplete. Dado que la biblioteca NDIS mantiene enlaces para todos los controladores de miniport, NDIS puede devolver información específica del enlace solo sobre los controladores subyacentes que informan de su tipo medio como uno para el que el sistema proporciona una biblioteca de filtros. NDIS devuelve NDIS_STATUS_NOT_SUPPORTED para consultas específicas del enlace iniciadas por el controlador de protocolo a otros controladores de miniport.
Para obtener más información sobre los OID definidos por el sistema, consulte NDIS OIDs.
ProtocolOidRequestComplete se puede llamar antes de que el controlador de protocolo haya tenido tiempo para inspeccionar el código de estado que NdisOidRequest devuelve en Status.
NDIS llama a ProtocolOidRequestComplete en IRQL <= DISPATCH_LEVEL.
Ejemplos de
Para definir una función ProtocolOidRequestComplete, primero debe proporcionar una declaración de función que identifique el tipo de función que va a definir. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.Por ejemplo, para definir un ProtocolOidRequestComplete función denominada "MyOidRequestComplete", use el tipo PROTOCOL_OID_REQUEST_COMPLETE como se muestra en este ejemplo de código:
PROTOCOL_OID_REQUEST_COMPLETE MyOidRequestComplete;
A continuación, implemente la función de la siguiente manera:
_Use_decl_annotations_
VOID
MyOidRequestComplete(
NDIS_HANDLE ProtocolBindingContext,
PNDIS_OID_REQUEST OidRequest,
NDIS_STATUS Status
)
{...}
El tipo de función PROTOCOL_OID_REQUEST_COMPLETE se define en el archivo de encabezado Ndis.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función PROTOCOL_OID_REQUEST_COMPLETE en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declaración de funciones mediante el uso de tipos de roles de función para controladores NDIS.
Para obtener información sobre Use_decl_annotations, vea Anotación del comportamiento de la función.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Se admite en NDIS 6.0 y versiones posteriores. |
de la plataforma de destino de | Windows |
encabezado de | ndis.h (incluya Ndis.h) |
irQL | <= DISPATCH_LEVEL |