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 는 드라이버가 초기화될 때 중간 드라이버의 MiniportXxx 진입점 및 이름을 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 중간 드라이버는 다음 멤버를 설정하기 전에 이 구조를 0으로 초기화해야 합니다.

  • MajorNdisVersion
    드라이버에서 사용 중인 NDIS 라이브러리의 주 버전을 지정합니다. NDIS 라이브러리는 NDIS 4.0용으로 개발된 기존 미니포트 드라이버를 계속 지원하지만 현재 값은 0x05.

  • 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
    호출자가 MiniportSendPackets 함수를 제공하는 경우 호출자의 MiniportSend 함수, MiniportWanSend 함수 또는 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의 진입점을 지정합니다. 1초 이상 패킷을 보내는 큐에 대기하는 중간 드라이버는 MiniportCancelSendPackets 함수를 등록해야 합니다.

  • PnPEventNotifyHandler
    호출자의 MiniportPnPEventNotify 함수의 진입점을 지정합니다. NDIS 5.1 미니포트 드라이버는 MiniportPnPEventNotify 함수를 등록해야 합니다. WDM 아래쪽 가장자리가 있는 미니포트 드라이버 ''는 MiniportPnPEventNotify 함수를 등록해야 합니다.

  • AdapterShutdownHandler
    호출자의 MiniportShutdown 함수(있는 경우) 또는 NULL의 진입점을 지정합니다. NDIS 5.1 중간 드라이버는 MiniportShutdown 함수를 등록해야 합니다. NDIS 5.1 중간 드라이버는 NdisMRegisterAdapterShutdownHandler를 호출하지 않고 NdisIMRegisterLayeredMiniport를 호출하여 MiniportShutdown 함수를 등록해야 합니다.

[in] CharacteristicsLength

호출자가 제공한 특성 버퍼의 길이(바이트)를 지정합니다. MajorNdisVersion 값에 따라 드라이버가 NDIS50_MINIPORT_CHARACTERISTICS 구조를 제공하는 경우 이 매개 변수는 sizeof(NDIS50_MINIPORT_CHARACTERISTICS)이거나 드라이버가 NDIS40_MINIPORT_CHARACTERISTICS 구조를 제공하는 경우 sizeof(NDIS40_MINIPORT_CHARACTERISTICS)여야 합니다.

드라이버가 원본에 빌드 명령 NDIS50_MINIPORT(또는 적절하게 NDIS40_MINIPORT)을 포함하거나 드라이버 작성기에서 -NDIS50_MINIPORT(또는 )를 사용하는 경우 입니다. 40..) 컴파일러 스위치는 드라이버가 빌드되면 이 매개 변수가 설정됩니다.

[out] DriverHandle

이 호출에 성공하면 NdisIMRegisterLayeredMiniport가 호출자가 저장해야 하는 핸들을 반환하는 변수에 대한 포인터입니다. 호출자는 이 핸들을 일반적으로 ProtocolBindAdapter 함수에서 NdisIMInitializeDeviceInstance에 전달해야 합니다.

반환 값

NdisIMRegisterLayeredMiniport는 호출자를 미니포트 드라이버로 등록한 경우 NDIS_STATUS_SUCCESS 반환하거나 다음 상태 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
NDIS_STATUS_BAD_CHARACTERISTICS CharacteristicsLengthMiniportCharacteristics의 버퍼에 지정된 MajorNdisVersion에 비해 너무 작습니다.
NDIS_STATUS_BAD_VERSION 특성 구조에 지정된 MajorNdisVersion 또는 MajorNdisVersion 이 잘못되었습니다.
NDIS_STATUS_RESOURCES 메모리가 부족하여 NDIS 라이브러리가 호출자를 미니포트 드라이버로 등록하지 못했습니다.
NDIS_STATUS_FAILURE 이는 이전 오류 중 어느 것도 등록에 실패하지 않은 경우 반환되는 기본 오류 상태. 예를 들어 NDIS 라이브러리가 드라이버의 이미지를 로드하고 시스템 메모리에 잠글 수 없는 경우 이 오류가 반환됩니다.

설명

MiniportXxxProtocolXxx 함수를 모두 내보내는 NDIS 중간 드라이버는 특성 구조를 설정하고 DriverEntryNdisMInitializeWrapper를 호출한 후 DriverEntry 함수에서 NdisIMRegisterLayeredMiniport를 호출합니다. 이 구조체는 NdisIMRegisterLayeredMiniport 요청에서 NDIS 라이브러리의 내부 스토리지에 복사됩니다. 따라서 등록되면 이러한 드라이버는 해당 처리기 함수를 변경할 수 없습니다.

이러한 NDIS 중간 드라이버가 NdisIMRegisterLayeredMiniport 를 성공적으로 호출한 후에는 NdisRegisterProtocol 을 호출하여 ProtocolXxx 함수를 NDIS 라이브러리에 등록해야 합니다. 이러한 드라이버에는 일반적으로 ProtocolBindAdapterProtocolUnbindAdapter 함수가 모두 있습니다. 기본 NIC 드라이버가 성공적으로 초기화되면 ProtocolBindAdapter 함수가 다음에 호출됩니다. ProtocolBindAdapterNdisOpenAdapter를 사용하여 해당 NIC 드라이버에 대한 바인딩을 설정할 수 있습니다.

기본 NIC 드라이버가 상위 수준 프로토콜에서 패킷 배열로 전송되는 패킷 우선 순위와 같은 미디어 관련 정보를 다중 패키지 보내기를 지원하거나 사용할 수 있는 경우 NDIS 중간 드라이버에는 MiniportSendPackets 함수가 있어야 합니다. 기본 NIC 드라이버가 멀티패켓 수신 표시를 지원하거나 미디어별 정보를 포함하는 패킷 배열을 나타낼 수 있는 경우 NDIS 중간 드라이버에는 MiniportReturnPacket 함수가 있어야 합니다. NDIS 라이브러리는 이러한 중간 드라이버를 대신하여 단일 패킷 전송만 지원하는 기본 NIC 드라이버와 상위 수준 프로토콜 간에 전송되는 패킷 배열을 처리합니다.

  • 대상 플랫폼: 유니버설
  • 버전: Windows Vista의 NDIS 6.0 드라이버에는 지원되지 않습니다. 대신 NdisMRegisterMiniportDriver를 사용합니다. Windows Vista 및 Windows XP에서 NDIS 5.1 드라이버에 대해 지원됩니다.

요구 사항

요구 사항
헤더 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
IRQL PASSIVE_LEVEL

추가 정보