función FILTER_SYNCHRONOUS_OID_REQUEST (ndis.h)
NDIS llama a la función FilterSynchronousOidRequest de un controlador de filtro para obtener una vista previa de una solicitud de 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 FilterSynchronousOidRequest y FilterSynchronousOidRequestComplete . NDIS garantiza que esto apunta inicialmente a un valor cero. Vea 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 | Permita que la solicitud de OID continúe propagando al controlador de minipuerto. 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 de OID y, en su lugar, vuelva al autor de la llamada con el estado NDIS_STATUS_SUCCESS. |
|
Igual que FilterDirectOidRequest. |
NDIS_STATUS_RESOURCES | Igual que FilterDirectOidRequest, pero con precaución de que las solicitudes de OID sincrónicas deben completarse rápidamente, por lo que 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 lo puede realizar por algún motivo. |
Comentarios
FilterSynchronousOidRequest es una función opcional. Si no es necesario que un controlador de filtro observe o modifique las solicitudes de OID sincrónicas enviadas al controlador de miniporte, el controlador de filtro debe establecer el punto de entrada de esta función en NULL cuando llama a NdisFRegisterFilterDriver.
NDIS llama a la función FilterSynchronousOidRequest del controlador de filtro para procesar solicitudes de OID sincrónicas que se originan mediante 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/escritura |
PortNumber | Lectura/escritura |
Tiempo de espera | No acceder |
RequestId | No acceder |
RequestHandle | Lectura/escritura |
DATA | Lectura/escritura |
NdisReserved | No acceder |
MiniportReserved | No acceder |
SourceReserved | No acceder |
SupportedRevision | Lectura/escritura |
Reserved1, Reserved2 | No acceder |
SwitchId | Lectura/escritura |
VPortId | Lectura/escritura |
Marcas | Lectura/escritura |
Además de modificar la estructura de NDIS_OID_REQUEST , los controladores de filtro pueden controlar la solicitud mediante el código de retorno de FilterSynchronousOidRequest:
- NDIS_STATUS_SUCCESS: el OID continúa propaguándose hasta el controlador de minipuerto.
- NDIS_STATUS_ALREADY_COMPLETE: el OID se completa inmediatamente de nuevo a los controladores que se sobreponen, sin propagarse primero al controlador de minipuerto. 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 minipuerto. La solicitud de OID se completa en el controlador de sobreasignación con el código de estado devuelto por el controlador de filtro.
Si el controlador de filtro también registra un controlador FilterSynchronousOidRequestComplete , NDIS garantiza que se llamará al controlador FilterSynchronousOidRequestComplete si y solo si el controlador FilterSynchronousOidRequest devuelve NDIS_STATUS_SUCCESS.
El controlador FilterSynchronousOidRequest puede escribir cualquier valor de tamaño PVOID en *CallContext y se devolverá el mismo valor al controlador de filtro FilterSynchronousOidRequestComplete cuando se complete la solicitud OID. El controlador de filtro puede usarlo para transportar 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 FilterSynchronousOidRequestComplete .
Los controladores de filtro no deben devolver NDIS_STATUS_PENDING desde un controlador FilterSynchronousOidRequest . Las solicitudes de OID sincrónicas no se pueden suspender ni cancelar.
Se espera que los controladores de filtro vuelvan de su controlador FilterSynchronousOidRequest rápidamente, sin bloquear, esperar ni dormir. Las solicitudes de OID sincrónicas solo se usan para las 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 de OID o con FilterPause. Es responsabilidad del controlador de filtro implementar cualquier sincronización necesaria.
NDIS serializa las solicitudes de OID sincrónicas en FilterDetach: NDIS garantiza que ninguna solicitud OID sincrónica estará activa 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 de OID que se recibe a través de un controlador FilterSynchronousOidRequest .
Si un controlador de filtro genera el IRQL en su controlador FilterSynchronousOidRequest , debe restaurar irQL a su nivel inicial antes de volver de su controlador FilterSynchronousOidRequest .
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 10, versión 1709 |
Plataforma de destino | Windows |
Encabezado | ndis.h (incluya Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de