Compartir a través de


función FILTER_SYNCHRONOUS_OID_REQUEST (ndis.h)

NDIS llama a la función FilterSynchronousOidRe quest de un controlador de filtro para obtener una vista previa de una solicitud OID sincrónica antes de que la solicitud se dé al controlador de miniport subyacente.

Esta función se admite en NDIS 6.81 y versiones posteriores.

Sintaxis

NDIS_STATUS FILTER_SYNCHRONOUS_OID_REQUEST(
            NDIS_HANDLE      FilterModuleContext,
  [in, out] NDIS_OID_REQUEST *OidRequest,
  [out]     PVOID            *CallContext
);

Parámetros

FilterModuleContext

Identificador del área de contexto del módulo de filtro que es el destino de esta solicitud. El controlador de filtro creó e inicializó este área de contexto en la función filterAttach .

[in, out] OidRequest

Puntero a una estructura NDIS_OID_REQUEST que especifica la operación solicitada.

[out] CallContext

Ranura de almacenamiento de tamaño PVOID para que el controlador de filtro comparta el estado entre sus controladores de FilterSynchronousOidRe quest y FilterSynchronousOidRequestComplete. NDIS garantiza que inicialmente apunta a un valor cero. Consulte la sección Comentarios para obtener más información.

Valor devuelto

Esta función devuelve uno de los siguientes códigos de NDIS_STATUS adecuados:

Código devuelto Descripción
NDIS_STATUS_SUCCESS Permitir que la solicitud OID continúe propagando al controlador de miniport. Los controladores de filtro deben devolver este código de estado para cualquier tipo no reconocido de OID.
NDIS_STATUS_ALREADY_COMPLETE Detenga la propagación de la solicitud OID y, en su lugar, vuelva al autor de la llamada con el estado NDIS_STATUS_SUCCESS.
  • NDIS_STATUS_BUFFER_TOO_SHORT
  • NDIS_STATUS_INVALID_LENGTH
  • NDIS_STATUS_INVALID_DATA
Igual que FilterDirectOidRequest.
NDIS_STATUS_RESOURCES Igual que FilterDirectOidRequest, pero con precaución de que las solicitudes OID sincrónicas deben completarse rápidamente y, por lo tanto, los controladores de filtro normalmente deben evitar asignar recursos.
NDIS_STATUS_NOT_SUPPORTED Los controladores de filtro no deben devolver este código simplemente porque no se reconoce el OID. Los controladores de filtro solo pueden devolver esto si el filtro reconoce la operación, pero no puede realizarlo por algún motivo.

Observaciones

FilterSynchronousOidRequest es una función opcional. Si un controlador de filtro no necesita observar o modificar las solicitudes OID sincrónicas enviadas al controlador de miniport, el controlador de filtro debe establecer el punto de entrada para esta función en NULL cuando llama a NdisFRegisterFilterDriver.

NDIS llama a la función FilterSynchronousOidRe quest del controlador de filtro para procesar solicitudes de OID sincrónicas que se originan en controladores excesivos. Los controladores de filtro pueden leer o modificar algunos campos de la estructura NDIS_OID_REQUEST de la siguiente manera:

Campo Filtrado del acceso
Encabezado Solo lectura
RequestType Lectura y escritura
PortNumber Lectura y escritura
Interrupción No acceder
RequestId No acceder
RequestHandle Lectura y escritura
DATOS Lectura y escritura
NdisReserved No acceder
MiniportReserved No acceder
SourceReserved No acceder
SupportedRevision Lectura y escritura
Reserved1, Reserved2 No acceder
SwitchId Lectura y escritura
VPortId Lectura y escritura
Banderas Lectura y escritura

Además de modificar la estructura de NDIS_OID_REQUEST, los controladores de filtro pueden controlar la solicitud mediante el código devuelto de FilterSynchronousOidRequest:

  • NDIS_STATUS_SUCCESS: el OID continúa propagando hacia abajo hasta el controlador de miniport.
  • NDIS_STATUS_ALREADY_COMPLETE: el OID vuelve a completarse inmediatamente en los controladores que se sobreponen, sin propagarse primero al controlador de miniport. La solicitud de OID se completa en el controlador de sobreaprovisionamiento con NDIS_STATUS_SUCCESS.
  • Cualquier otro código de estado: el OID se vuelve a completar inmediatamente en los controladores que se sobreponen, sin propagarse primero al controlador de miniport. La solicitud OID se completa en el controlador de sobresuso con el código de estado devuelto por el controlador de filtro.

Si el controlador de filtro también registra un controlador de FilterSynchronousOidRequestComplete, NDIS garantiza que se llamará al controlador FilterSynchronousOidRequestComplete si y solo si el controlador FilterSynchronousOidRe quest devuelve NDIS_STATUS_SUCCESS.

El controlador FilterSynchronousOidRequest puede escribir cualquier valor de tamaño PVOID en *CallContexty se devolverá el mismo valor al controlador de filtro FilterSynchronousOidRequestComplete cuando se complete la solicitud OID. El controlador de filtro puede usarlo para llevar el estado entre los dos controladores. Dado que el controlador FilterSynchronousOidRequestComplete solo se invoca si el controlador FilterSynchronousOidRequest devuelve NDIS_STATUS_SUCCESS, no hay ninguna razón para escribir un valor en *CallContext al devolver cualquier otro código. Del mismo modo, no hay ninguna razón para escribir un valor en *CallContext si el controlador de filtro no proporciona un controlador de FilterSynchronousOidRequestComplete.

Los controladores de filtro no deben devolver NDIS_STATUS_PENDING de un controlador de FilterSynchronousOidRequest. Las solicitudes de OID sincrónicas no se pueden escribir ni cancelar.

Se espera que los controladores de filtro vuelvan de sus FilterSynchronousOidRequest controlador rápidamente, sin bloquear, esperar o dormir. Las solicitudes de OID sincrónicas solo se usan para operaciones de baja latencia y los controladores de filtro deben esforzarse por continuar o completarlas dentro de varios milisegundos. NDIS no serializa las solicitudes de OID sincrónicas entre sí, contra otras solicitudes OID o contra FilterPause. Es responsabilidad del controlador de filtro implementar cualquier sincronización necesaria.

NDIS serializa las solicitudes OID sincrónicas en FilterDetach: NDIS garantiza que no se activen solicitudes OID sincrónicas una vez que se invoque FilterDetach.

Los controladores de filtro no deben llamar a NdisAllocateCloneOidRequest o NdisCancelOidRequest en una solicitud de OID sincrónica. Los controladores de filtro no deben llamar a NdisFSynchronousOidRequest en una solicitud OID que se recibe a través de un controlador de FilterSynchronousOidRequest.

Si un controlador de filtro genera irQL en su controlador de FilterSynchronousOidRequest, debe restaurar IRQL a su nivel inicial antes de volver de su controlador de FilterSynchronousOidRequest.

Requisitos

Requisito Valor
cliente mínimo admitido Windows 10, versión 1709
de la plataforma de destino de Windows
encabezado de ndis.h (incluya Ndis.h)
irQL <= DISPATCH_LEVEL

Consulte también

FilterSynchronousOidRequestComplete

NdisFSynchronousOidRequest

interfaz de solicitud OID sincrónica en NDIS 6.80