Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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. |
|
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 |