Función NdisIMInitializeDeviceInstanceEx (ndis.h)

La función NdisIMInitializeDeviceInstanceEx inicia la operación de inicialización para un miniporte virtual y, opcionalmente, configura la información de estado sobre el miniporte virtual para los controladores de protocolo enlazados posteriormente.

Sintaxis

NDIS_STATUS NdisIMInitializeDeviceInstanceEx(
  [in]           NDIS_HANDLE  DriverHandle,
  [in]           PNDIS_STRING DriverInstance,
  [in, optional] NDIS_HANDLE  DeviceContext
);

Parámetros

[in] DriverHandle

Controlador de minipuerto que el controlador La función NdisMRegisterMiniportDriver devuelve en NdisMiniportDriverHandle .

[in] DriverInstance

Puntero a un tipo de NDIS_STRING que describe una cadena con recuento inicializado por el autor de la llamada en el juego de caracteres predeterminado del sistema. La cadena contiene el nombre de la clave del Registro en la que el controlador almacena información sobre un miniporte virtual y, posiblemente, información específica del enlace. Para los controladores de Microsoft Windows 2000 y versiones posteriores, esta cadena contiene caracteres Unicode. Es decir, para Windows 2000 y versiones posteriores, NDIS define el tipo NDIS_STRING como un tipo de UNICODE_STRING .

[in, optional] DeviceContext

Puntero a la memoria proporcionada por el autor de la llamada que se va a configurar con información de contexto de dispositivo definida por el controlador sobre la minipuerta virtual, que todavía los controladores de protocolo de nivel superior que posteriormente se enlazan a este miniport virtual pueden usar. Este parámetro puede ser NULL si el controlador intermedio no tiene este área de contexto del dispositivo.

Valor devuelto

NdisIMInitializeDeviceInstanceEx puede devolver cualquiera de las siguientes opciones:

Código devuelto Descripción
NDIS_STATUS_SUCCESS
NDIS inició la operación de inicialización para la miniporte virtual del controlador intermedio.
NDIS_STATUS_NOT_ACCEPTED
Error de NdisIMInitializeDeviceInstanceEx porque el dispositivo especificado por DriverHandle ya se ha inicializado.

Comentarios

Un controlador intermedio NDIS debe llamar a NdisIMInitializeDeviceInstanceEx desde su función ProtocolBindAdapterEx . Un error al llamar a NdisIMInitializeDeviceInstanceEx desde un controlador intermedio de NDIS impide eficazmente que ese controlador se cargue correctamente.

Antes de llamar a NdisIMInitializeDeviceInstanceEx, la función ProtocolBindAdapterEx del controlador intermedio debe enlazarse a los controladores de miniport subyacentes necesarios para que el controlador intermedio funcione. La función ProtocolBindAdapterEx también puede asignar un área en DeviceContext , posiblemente configurándola con información intermedia determinada por el controlador sobre las funcionalidades del adaptador de miniport subyacente y recopilada por ProtocolBindAdapterEx. La función MiniportInitializeEx del controlador intermedio podría usar dicha información posteriormente para configurar esta área de contexto con información sobre la miniporte virtual del controlador.

La llamada del controlador intermedio a NdisIMInitializeDeviceInstanceEx hace que NDIS llame a la función MiniportInitializeEx del controlador intermedio, si NDIS recibe una IRP_MN_START_DEVICE IRP para iniciar el dispositivo. Si NDIS no recibe este TIPO de IRP, NDIS no llamará a la función MiniportInitializeEx del controlador intermedio.

La llamada a MiniportInitializeEx puede producirse más adelante y, por lo tanto, no está necesariamente dentro del contexto de la llamada a NdisIMInitializeDeviceInstanceEx. Si NDIS nunca llama a MiniportInitializeEx para el miniport virtual al que se hace referencia en una llamada a NdisIMInitializeDeviceInstanceEx y el controlador intermedio ya no requiere la miniport virtual, el controlador intermedio debe llamar al Función NdisIMCancelInitializeDeviceInstance para cancelar la inicialización del miniporte virtual. Por ejemplo, supongamos que un controlador intermedio crea un minipuerto virtual en respuesta a un enlace correcto a un adaptador de minipuerto subyacente. Si ese enlace se quita antes de que NDIS llame a MiniportInitializeEx, el controlador intermedio debe llamar a NdisIMCancelInitializeDeviceInstance para cancelar la inicialización del miniport virtual.

MiniportInitializeEx asigna los recursos que el controlador requiere para realizar operaciones de E/S de red, como llamar a . Función NdisMSetMiniportAttributes e inicializar el miniporte virtual del controlador en un estado operativo. A continuación, los controladores de protocolo de nivel superior se pueden enlazar a su minipuerto virtual cuando la inicialización del controlador intermedio se completa correctamente.

Después de que MiniportInitializeEx devuelva el control, el área de contexto del dispositivo del controlador intermedio, si existe, puede contener los datos definidos por el controlador intermedio que posteriormente permiten a todos los controladores de protocolo de nivel superior que están enlazados al mismo miniport virtual para acceder a la información en ese área de contexto. Este tipo de controlador de protocolo de nivel superior puede consultar el contexto de dispositivo proporcionado por el controlador intermedio con el Función NdisIMGetBindingContext .

Antes de que NDIS llame a la función MiniportInitializeEx de un controlador intermedio, el controlador puede llamar a NdisIMCancelInitializeDeviceInstance para cancelar la operación de inicialización.

Después de que NDIS llame a la función MiniportInitializeEx de un controlador intermedio, el controlador debe llamar a NdisIMDeInitializeDeviceInstance para invertir la operación de inicialización.

Requisitos

Requisito Value
Cliente mínimo compatible Compatible con los controladores NDIS 6.0 y NDIS 5.1 (consulte NdisIMInitializeDeviceInstanceEx (NDIS 5.1)) en Windows Vista. Compatible con los controladores NDIS 5.1 (consulte NdisIMInitializeDeviceInstanceEx (NDIS 5.1)) en Windows XP.
Plataforma de destino Escritorio
Encabezado ndis.h (incluya Ndis.h)
Library Ndis.lib
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI Irql_IM_Function(ndis)

Consulte también

IRP_MN_START_DEVICE

MiniportInitializeEx

NdisAllocateMemoryWithTagPriority NdisIMCancelInitializeDeviceInstance NdisIMDeInitializeDeviceInstance

NdisIMGetBindingContext

NdisIMInitializeDeviceInstanceEx

NdisInitializeString

NdisMRegisterMiniportDriver

NdisMSetMiniportAttributes

NdisOpenAdapterEx

ProtocolBindAdapterEx

UNICODE_STRING