Функция NdisIMRegisterLayeredMiniport (ndis.h)

Примечание NDIS 5. X является нерекомендуемым и заменен NDIS 6. x. Сведения о разработке новых драйверов NDIS см. в статье Сетевые драйверы, начиная с Windows Vista. Сведения о переносе NDIS 5. x драйверы для NDIS 6. x, см. раздел Перенос драйверов NDIS 5.x в NDIS 6.0.

NdisIMRegisterLayeredMiniport регистрирует точки входа и имя MiniportXxxx промежуточного драйвера в библиотеке NDIS при инициализации драйвера.

Синтаксис

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, используемой драйвером. Текущее значение равно 0x00, хотя NDIS продолжает поддерживать существующие драйверы.

  • Reserved
    Этот член зарезервирован для системного использования.

  • CheckForHangHandler
    Указывает точку входа функции MiniportCheckForHang вызывающего объекта, если она имеется, или значение NULL.

  • DisableInterruptHandler
    Задает значение NULL.

  • EnableInterruptHandler
    Задает значение NULL.

  • HaltHandler
    Указывает точку входа функции MiniportHalt вызывающего объекта.

  • HandleInterruptHandler
    Задает значение NULL.

  • InitializeHandler
    Указывает точку входа функции MiniportInitialize вызывающего объекта.

  • ISRHandler
    Задает значение NULL.

  • QueryInformationHandler
    Указывает точку входа функции MiniportQueryInformation вызывающего объекта.

  • ПеренастройкаHandler
    Задает значение NULL.

  • ResetHandler
    Указывает точку входа функции MiniportReset вызывающего объекта.

  • SendHandler
    Указывает точку входа функции MiniportSend вызывающего объекта, функции MiniportWanSend или ЗНАЧЕНИЕ NULL , если вызывающий объект предоставляет функцию MiniportSendPackets .

    Если драйвер поддерживает отправку нескольких пакетов или сведения, относящиеся к мультимедиа, он задает вместо него член SendPacketsHandler и задает для этого элемента значение NULL.

  • SetInformationHandler Указывает точку входа функции MiniportSetInformation вызывающего объекта.

  • TransferDataHandler
    Указывает точку входа функции MiniportTransferData вызывающего объекта , если она имеется, или значение NULL. Эта функция драйвера мини-порта требуется, если вызывающий объект не является драйвером сетевой карты глобальной сети или вызывающий объект поддерживает приемы с несколькими пакетами и, следовательно, предоставляет точку входа своей функции MiniportReturnPacket в ReturnPacketHandler.

  • 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 должны регистрировать функцию MiniportShutdown путем вызова NdisIMRegisterLayeredMiniport, а не путем вызова NdisMRegisterAdapterShutdownHandler.

[in] CharacteristicsLength

Задает длину буфера характеристик, предоставленного вызывающим объектом, в байтах. В зависимости от значения MajorNdisVersion этот параметр должен иметь значение sizeof(NDIS50_MINIPORT_CHARACTERISTICS), если драйвер предоставляет NDIS50_MINIPORT_CHARACTERISTICS структуру, или sizeof(NDIS40_MINIPORT_CHARACTERISTICS), если драйвер предоставляет NDIS40_MINIPORT_CHARACTERISTICS структуру.

Если драйвер включает инструкцию сборки NDIS50_MINIPORT (или NDIS40_MINIPORT, если это необходимо) в своих источниках, или если модуль записи драйвера использует -NDIS50_MINIPORT (или .). 40..) параметр компилятора, этот параметр устанавливается при сборке драйвера.

[out] DriverHandle

Указатель на переменную, в которой NdisIMRegisterLayeredMiniport, если этот вызов выполнен успешно, возвращает дескриптор, который вызывающий объект должен сохранить. Затем вызывающий объект должен передать этот дескриптор в NdisIMInitializeDeviceInstance, как правило, из своей функции ProtocolBindAdapter .

Возвращаемое значение

NdisIMRegisterLayeredMiniport возвращает NDIS_STATUS_SUCCESS, если он зарегистрировал вызывающий объект в качестве драйвера мини-порта, или может вернуть одно из следующих значений состояния:

Код возврата Описание
NDIS_STATUS_BAD_CHARACTERISTICS Параметр CharacteristicsLength слишком мал для Параметра MajorNdisVersion, указанного в буфере miniportCharacteristics.
NDIS_STATUS_BAD_VERSION Параметр MajorNdisVersion или MajorNdisVersion , указанный в структуре характеристик, недопустим.
NDIS_STATUS_RESOURCES Нехватка ресурсов, возможно, памяти, не позволила библиотеке NDIS зарегистрировать вызывающий объект в качестве драйвера мини-порта.
NDIS_STATUS_FAILURE Это состояние ошибки по умолчанию, возвращаемое, если ни одна из предыдущих ошибок не привела к сбою регистрации. Например, если библиотеке NDIS не удается загрузить образ драйвера и заблокировать его в системной памяти, она возвращает эту ошибку.

Комментарии

Любой промежуточный драйвер NDIS, который экспортирует функции MiniportXxx и ProtocolXxx, настраивает структуру характеристик и вызывает NdisIMRegisterLayeredMiniport из своей функции DriverEntry после того , как DriverEntry вызывает NdisMInitializeWrapper. Эта структура копируется в запросе NdisIMRegisterLayeredMiniport во внутреннее хранилище библиотеки NDIS. Таким образом, после регистрации такой драйвер не может изменить свои функции обработчика.

После успешного вызова такого промежуточного драйвера NDIS NdisIMRegisterLayeredMiniport он должен вызвать NdisRegisterProtocol , чтобы зарегистрировать свои функции ProtocolXxx в библиотеке NDIS. Такой драйвер обычно имеет функции ProtocolBindAdapter и ProtocolUnbindAdapter . Его функция ProtocolBindAdapter будет вызываться далее, когда базовый драйвер сетевой карты успешно инициализирован. Затем ProtocolBindAdapter может установить привязку к драйверу сетевой карты с помощью NdisOpenAdapter.

Промежуточный драйвер NDIS должен иметь функцию MiniportSendPackets , если базовый драйвер сетевого адаптера может поддерживать отправку или использование сведений, относящихся к мультимедиа, таких как приоритеты пакетов, отправленных в массив пакетов из протокола более высокого уровня. Промежуточный драйвер NDIS должен иметь функцию MiniportReturnPacket, если базовый драйвер сетевого адаптера может поддерживать многопакетные указания приема или указывать массивы пакетов, содержащие сведения, относящиеся к носителям. Библиотека NDIS обрабатывает массивы пакетов, передаваемые между базовым драйвером сетевой карты и протоколом более высокого уровня, который поддерживает передачу только одного пакета от имени такого промежуточного драйвера.

  • Целевая платформа: универсальная
  • Версия: не поддерживается для драйверов NDIS 6.0 в Windows Vista. Вместо этого используйте NdisMRegisterMiniportDriver. Поддерживается для драйверов NDIS 5.1 в Windows Vista и Windows XP.

Требования

Требование Значение
Заголовок ndis.h (включая Ndis.h)
Библиотека Ndis.lib
IRQL PASSIVE_LEVEL

См. также раздел