NdisIMRegisterLayeredMiniport 函数 (ndis.h)

注意 NDIS 5. x 已弃用,由 NDIS 6 取代。 x。 有关新的 NDIS 驱动程序开发,请参阅 从 Windows Vista 开始的网络驱动程序。 有关移植 NDIS 5 的信息。 NDIS 6 的 x 驱动程序。 x,请参阅 将 NDIS 5.x 驱动程序移植到 NDIS 6.0

NdisIMRegisterLayeredMiniport 在驱动程序初始化时向 NDIS 库注册中间驱动程序的 MiniportXxx 入口点和名称。

语法

NDIS_STATUS NdisIMRegisterLayeredMiniport(
  [in]  NDIS_HANDLE                    NdisWrapperHandle,
  [in]  PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
  [in]  UINT                           CharacteristicsLength,
  [out] PNDIS_HANDLE                   DriverHandle
);

参数

[in] NdisWrapperHandle

指定 NdisMInitializeWrapper 返回的句柄。

[in] MiniportCharacteristics

指向调用方设置的 NDIS XX_MINIPORT_CHARACTERISTICS 结构的指针。 MiniportCharacteristics 中的结构定义如下:

        typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
            UCHAR MajorNdisVersion;
            UCHAR MinorNdisVersion;
            UINT Reserved;
            W_CHECK_FOR_HANG_HANDLER CheckForHangHandler;
            W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
            W_ENABLE_INTERRUPT_HANDLER  EnableInterruptHandler;
            W_HALT_HANDLER HaltHandler;
            W_HANDLE_INTERRUPT_HANDLER  HandleInterruptHandler;
            W_INITIALIZE_HANDLER InitializeHandler;
            W_ISR_HANDLER ISRHandler;
            W_QUERY_INFORMATION_HANDLER QueryInformationHandler;
            W_RECONFIGURE_HANDLER ReconfigureHandler;
            W_RESET_HANDLER ResetHandler;
            W_SEND_HANDLER SendHandler; 
            W_SET_INFORMATION_HANDLER SetInformationHandler;
            W_TRANSFER_DATA_HANDLER TransferDataHandler;
        //
        // Version used is V4.0 or V5.0
        // with following members
        //
            W_RETURN_PACKET_HANDLER ReturnPacketHandler;
            W_SEND_PACKETS_HANDLER SendPacketsHandler;
            W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
        //
        // Version used is V5.0 with the following members
        //
            W_CO_CREATE_VC_HANDLER CoCreateVcHandler;
            W_CO_DELETE_VC_HANDLER CoDeleteVcHandler;
            W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler;
            W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler;
            W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler;
            W_CO_REQUEST_HANDLER CoRequestHandler;
        //
        // Version used is V5.1 with the following members
        //
            W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
            W_MINIPORT_PNPEVENTNOTIFY_HANDLER PnPEventNotifyHandler;
            W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
        } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;

在设置以下任何成员之前,NDIS 中间驱动程序应用零初始化此结构:

  • MajorNdisVersion
    指定驱动程序正在使用的 NDIS 库的主版本。 当前值为 0x05,尽管 NDIS 库继续支持为 NDIS 4.0 开发的现有微型端口驱动程序。

  • MinorNdisVersion
    指定驱动程序使用的 NDIS 库的次要版本。 虽然 NDIS 继续支持现有驱动程序,但当前值为0x00。

  • Reserved
    此成员保留供系统使用。

  • CheckForHangHandler
    指定调用方 MiniportCheckForHang 函数的入口点(如果有)或 NULL

  • DisableInterruptHandler
    指定 NULL

  • EnableInterruptHandler
    指定 NULL

  • HaltHandler
    指定调用方 MiniportHalt 函数的入口点。

  • HandleInterruptHandler
    指定 NULL

  • InitializeHandler
    指定调用方 MiniportInitialize 函数的入口点。

  • ISRHandler
    指定 NULL

  • QueryInformationHandler
    指定调用方 MiniportQueryInformation 函数的入口点。

  • ReconfigureHandler
    指定 NULL

  • ResetHandler
    指定调用方 MiniportReset 函数的入口点。

  • SendHandler
    指定调用方 MiniportSend 函数、MiniportWanSend 函数的入口点;如果调用方提供 MiniportSendPackets 函数,则指定 NULL

    如果驱动程序支持多包发送或特定于媒体的信息,则会改为设置 SendPacketsHandler 成员,并将此成员设置为 NULL

  • SetInformationHandler 指定调用方 MiniportSetInformation 函数的入口点。

  • TransferDataHandler
    指定调用方 MiniportTransferData 函数的入口点(如果有)或 NULL。 此微型端口驱动程序函数是必需的,除非调用方是 WAN NIC 的驱动程序,或者调用方支持多包接收,因此在 ReturnPacketHandler 提供其 MiniportReturnPacket 函数的入口点。

  • ReturnPacketHandler
    指定调用方 MiniportReturnPacket 函数的入口点(如果有)或 NULL

  • SendPacketsHandler
    指定调用方 MiniportSendPackets 函数的入口点(如果有)或 NULL

  • AllocateCompleteHandler
    指定 NULL

  • CoCreateVcHandler
    指定 NULL

  • CoDeleteVcHandler
    指定 NULL

  • CoActivateVcHandler
    指定 NULL

  • CoDeactivateVcHandler
    指定 NULL

  • CoSendPacketsHandler
    指定 NULL

  • CoRequestHandler
    指定 NULL

  • CancelSendPacketsHandler
    指定调用方 MiniportCancelSendPackets 函数的入口点(如果有)或 NULL。 将数据包排队发送超过一秒的中间驱动程序应注册 MiniportCancelSendPackets 函数。

  • PnPEventNotifyHandler
    指定调用方 MiniportPnPEventNotify 函数的入口点。 NDIS 5.1 微型端口驱动程序必须注册 MiniportPnPEventNotify 函数。 具有 WDM 下边缘的微型端口驱动程序“”应注册 MiniportPnPEventNotify 函数。

  • AdapterShutdownHandler
    指定调用方 MiniportShutdown 函数的入口点(如果有)或 NULL。 NDIS 5.1 中间驱动程序必须注册 MiniportShutdown 函数。 NDIS 5.1 中间驱动程序应通过调用 NdisIMRegisterLayeredMiniport 注册 MiniportShutdown 函数,而不是通过调用 NdisMRegisterAdapterShutdownHandler 来注册 MiniportShutdown 函数。

[in] CharacteristicsLength

指定调用方提供的特征缓冲区的长度(以字节为单位)。 根据 MajorNdisVersion 的值,如果驱动程序提供NDIS50_MINIPORT_CHARACTERISTICS结构,则此参数必须为 sizeof (NDIS50_MINIPORT_CHARACTERISTICS) ,如果驱动程序提供NDIS40_MINIPORT_CHARACTERISTICS结构,则此参数必须为 size of (NDIS40_MINIPORT_CHARACTERISTICS) 。

如果驱动程序包含生成指令NDIS50_MINIPORT (或NDIS40_MINIPORT,则根据需要在其源中) ,或者驱动程序编写器使用 -NDIS50_MINIPORT (或 。40..) 编译器开关,此参数在生成驱动程序时设置。

[out] DriverHandle

指向变量的指针,其中 NdisIMRegisterLayeredMiniport 如果此调用成功,则返回调用方应保存的句柄。 调用方随后必须将此句柄传递给 NdisIMInitializeDeviceInstance,通常是从其 ProtocolBindAdapter 函数传递的。

返回值

如果 NdisIMRegisterLayeredMiniport 将调用方注册为微型端口驱动程序,则返回NDIS_STATUS_SUCCESS,或者可以返回以下状态值之一:

返回代码 说明
NDIS_STATUS_BAD_CHARACTERISTICS 对于 MiniportCharacteristics 的缓冲区中指定的 MajorNdisVersion 来说,CharacteristicsLength 太小。
NDIS_STATUS_BAD_VERSION 在特征结构中指定的 MajorNdisVersionMajorNdisVersion 无效。
NDIS_STATUS_RESOURCES 资源(可能内存)不足,导致 NDIS 库无法将调用方注册为微型端口驱动程序。
NDIS_STATUS_FAILURE 这是默认错误状态,在上述任何错误都未导致注册失败时返回。 例如,如果 NDIS 库无法加载驱动程序的映像并将其锁定到系统内存中,则返回此错误。

注解

同时导出 MiniportXxxProtocolXxx 函数的任何 NDIS 中间驱动程序都设置特征结构,并在 DriverEntry 调用 NdisMInitializeWrapper 后从其 DriverEntry 函数调用 NdisIMRegisterLayeredMiniport。 此结构在 NdisIMRegisterLayeredMiniport 请求中复制到 NDIS 库的内部存储。 因此,一旦注册,此类驱动程序就不能更改其处理程序函数。

在此类 NDIS 中间驱动程序成功调用 NdisIMRegisterLayeredMiniport 后,它必须调用 NdisRegisterProtocol 以向 NDIS 库注册其 ProtocolXxx 函数。 此类驱动程序通常同时具有 ProtocolBindAdapterProtocolUnbindAdapter 函数。 基础 NIC 驱动程序成功初始化后,接下来将调用其 ProtocolBindAdapter 函数。 然后,ProtocolBindAdapter 可以使用 NdisOpenAdapter 建立到该 NIC 驱动程序的绑定。

如果基础 NIC 驱动程序可能支持多包发送或使用来自更高级别协议的数据包阵列中向下发送的特定于媒体的信息(如数据包优先级),则 NDIS 中间驱动程序应具有 MiniportSendPackets 函数。 如果基础 NIC 驱动程序可能支持多包接收指示或指示包含媒体特定信息的数据包数组,则 NDIS 中间驱动程序应具有 MiniportReturnPacket 函数。 NDIS 库处理基础 NIC 驱动程序与仅支持代表此类中间驱动程序的单数据包传输的更高级别的协议之间传输的数据包阵列。

  • 目标平台: 通用
  • 版本:Windows Vista 中的 NDIS 6.0 驱动程序不支持。 请改用 NdisMRegisterMiniportDriver。 支持 Windows Vista 和 Windows XP 中的 NDIS 5.1 驱动程序。

要求

要求
Header ndis.h (包括 Ndis.h)
Library Ndis.lib
IRQL PASSIVE_LEVEL

另请参阅