Share via


NdisMSetAttributesEx 함수(ndis.h)

참고 NDIS 5. x 는 더 이상 사용되지 않으며 NDIS 6으로 대체됩니다. x. 새로운 NDIS 드라이버 개발은 Windows Vista부터 시작하는 네트워크 드라이버를 참조하세요. NDIS 5 포팅에 대한 자세한 내용입니다. x 드라이버를 NDIS 6에 연결합니다. x, NDIS 5.x 드라이버를 NDIS 6.0으로 포팅을 참조하세요.

NdisMSetAttributesEx 는 초기화 중에 호출자의 NIC 또는 가상 NIC의 중요한 기능에 대해 NDIS 라이브러리에 알릴 수 있습니다.

구문

void NdisMSetAttributesEx(
  [in]           NDIS_HANDLE         MiniportAdapterHandle,
  [in]           NDIS_HANDLE         MiniportAdapterContext,
  [in, optional] UINT                CheckForHangTimeInSeconds,
  [in]           ULONG               AttributeFlags,
  [in, optional] NDIS_INTERFACE_TYPE AdapterType
);

매개 변수

[in] MiniportAdapterHandle

MiniportInitialize에 대한 핸들 입력을 지정합니다.

[in] MiniportAdapterContext

MiniportInitialize에서 할당한 상주 컨텍스트 영역에 대한 핸들을 지정합니다.

[in, optional] CheckForHangTimeInSeconds

NDIS가 MiniportCheckForHang 함수를 호출해야 하는 간격(초)을 지정합니다. 드라이버가 OID 요청에 응답하지 않았거나 MiniportCheckForHang에 대한 두 번의 연속 호출 내에서 요청을 보낸 경우 NDIS는 드라이버의 MiniportReset 함수를 호출할 수 있습니다.

MiniportCheckForHang을 호출할 때 NDIS가 사용하는 실제 간격은 항상 2초의 배수입니다. 예를 들어 5초를 지정하면 실제 간격은 약 4초가 됩니다.

이 매개 변수에 대해 0을 지정하면 NDIS가 NDIS 기본 2초 간격으로 MiniportCheckForHang 을 호출해야 했음을 나타냅니다.

호출자가 AttributeFlags에서 NDIS_ATTRIBUTE_DESERIALIZE 설정하는 경우 NDIS는 미니포트 드라이버에 대해 보류 중인 보내기를 큐에 대기하지 않습니다. 대신, 이러한 역직렬화된 드라이버는 들어오는 송신을 즉시 전송할 리소스가 부족할 때마다 내부적으로 후속 송신 요청의 자체 큐를 관리해야 합니다.

[in] AttributeFlags

다음 플래그 중 하나 이상의 ORed로 설정할 수 있는 비트 마스크를 지정합니다.

  • NDIS_ATTRIBUTE_BUS_MASTER
    호출자의 NIC가 버스 master DMA 디바이스인지를 설정합니다.

  • NDIS_ATTRIBUTE_DESERIALIZE
    호출자가 역직렬화된 미니포트 드라이버인 경우 를 설정합니다.

  • NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT
    NDIS가 대기 중인 송신 패킷을 호출자에게 대기 중인 시간 초과하려고 시도하지 않을 경우 를 설정합니다. 중간 드라이버는 이 플래그를 설정해야 하지만 NIC 드라이버는 설정해서는 안 됩니다.

  • NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT
    NDIS가 보류 중인 쿼리의 시간 초과를 시도하지 않도록 하고 호출자에게 큐에 대기 중인 요청을 설정하지 않도록 설정합니다. 중간 드라이버는 이 플래그를 설정해야 하지만 NIC 드라이버는 설정해서는 안 됩니다.

  • NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER
    호출자가 중간 드라이버인 경우 를 설정합니다.

  • NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS
    토큰 링 오류가 표시되면 NDIS가 토큰 링 NIC 드라이버의 MiniportReset 함수를 호출하지 않아야 하는 경우 를 설정합니다.

  • NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND
    시스템이 저전력(절전 모드) 상태로 전환되기 전에 NDIS가 드라이버의 MiniportHalt 함수를 호출하지 않아야 하는 경우 를 설정합니다. 하드웨어 유지 관리 상태를 사용하는 드라이버는 이 플래그를 설정해서는 안 됩니다.

    참고 이 플래그를 설정하면 컴퓨터가 NIC(네트워크 인터페이스 카드)에 대한 속성 대화 상자의 전원 관리 탭에 있는 전원 검사 절전 모드를 해제하도록 허용 상자가 비활성화됩니다. NIC에서 전원을 관리할 수 있더라도 전원 관리를 사용할 수 없습니다.

  • NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK
    드라이버가 사용자 알림 없이 NIC 제거를 처리할 수 있는지를 설정합니다. 이러한 드라이버는 MiniportPnPEventNotify 함수를 내보냅니다. NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 대한 시스템 지원은 Windows XP 이상 운영 체제에서 사용할 수 있습니다.

  • NDIS_ATTRIBUTE_NOT_CO_NDIS
    연결 지향 디바이스와 연결 없는 디바이스를 모두 지원할 수 있는 드라이버에 의해 설정되어 디바이스가 연결 없는 디바이스임을 나타냅니다. NDIS_ATTRIBUTE_NOT_CO_NDIS 대한 시스템 지원은 Windows XP 이상 운영 체제에서 사용할 수 있습니다.

  • NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS
    NdisBufferVirtualAddressSafe, NdisGetFirstBufferFromPacketSafeNdisQueryBufferSafe를 단독으로 사용하여 패킷 버퍼 보내기에 대한 시스템 가상 주소에 액세스하는 드라이버에 의해 설정됩니다. 또한 NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 물리적 주소를 사용하여 이러한 버퍼에 액세스하는 드라이버에 의해 설정됩니다. 운영 체제가 패킷 버퍼를 시스템 가상 주소에 매핑할 필요가 없으므로 NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 설정하면 성능이 향상될 수 있습니다. NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 대한 시스템 지원은 Windows XP 이상 버전에서 사용할 수 있습니다.

  • NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO
    TAPI 서비스를 제공하지 않는 CoNDIS 미니포트 드라이버에 의해 설정됩니다. NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO 설정하면 NDIS가 미니포트 드라이버를 NDIS TAPI 프록시 드라이버(NDPROXY)에 바인딩할 수 없습니다. 기본적으로 NDIS는 NDPROXY를 모든 CoNDIS 미니포트 드라이버에 바인딩합니다.

[in, optional] AdapterType

호출자 NIC의 I/O 버스 인터페이스 형식을 지정합니다. 일반적으로 NIC가 연결된 I/O 버스의 형식은 다음 중 하나로 지정됩니다.

  • NdisInterfaceInternal
    호스트별 내부 인터페이스를 지정합니다.

  • NdisInterfaceIsa
    ISA 인터페이스를 지정합니다.

  • NdisInterfaceEisa
    EISA(확장 ISA) 인터페이스를 지정합니다.

  • NdisInterfaceMca
    이는 더 이상 지원되지 않는 MCA 버스를 나타냅니다.

  • NdisInterfaceTurboChannel
    Turbo 채널 인터페이스를 지정합니다.

  • NdisInterfacePci
    PCI(주변 구성 요소 상호 연결) 인터페이스를 지정합니다.

  • NdisInterfacePcMcia
    개인용 컴퓨터 메모리 카드 국제 연결(PC 카드) 인터페이스를 지정합니다.

이 매개 변수는 이 인수에 대해 0을 NdisMSetAttributesEx에 전달해야 하는 중간 드라이버와는 관련이 없습니다.

반환 값

없음

설명

MiniportInitialize 함수는 NdisMSetAttributesEx에 제공된 정보에 따라 다른 NdisMRegisterXxx 또는 NdisXxx 함수를 호출하기 전에 NdisMSetAttributesEx(또는 NdisMSetAttributes)를 호출해야 합니다. 예를 들어 MiniportInitialize가 아직 NdisMSetAttributesEx를 호출하지 않은 경우 NdisMAllocateMapRegisters에 대한 NIC 드라이버의 호출이 실패하고 NDIS_ATTRIBUTE_BUS_MASTER.

중간 드라이버는 NdisMSetAttributes가 아닌 NdisMSetAttributesEx를 호출해야 하며 AttributeFlags에서 NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 설정해야 합니다. 이 플래그를 설정하면 NDIS에서 중간 드라이버를 전체 이중 미니포트 드라이버로 처리하므로 중간 드라이버에서 드물지만 간헐적인 교착 상태가 발생하지 않습니다. 따라서 모든 중간 드라이버는 동시 전송 및 표시를 처리할 수 있어야 합니다.

역직렬화된 드라이버는 NdisMSetAttributesEx를 호출해야 하며 AttributeFlags에서 NDIS_ATTRIBUTE_DESERIALIZE 설정해야 합니다. NDIS는 역직렬화된 드라이버에 대한 송신 패킷 큐를 유지 관리하지 않으며 NDIS는 이러한 드라이버의 MiniportXxx 함수에 대한 호출을 직렬화하지 않습니다. 역직렬화된 드라이버는 다음을 담당합니다.

  • 들어오는 모든 송신 요청 수락
  • 예를 들어, 역직렬화된 NIC 드라이버에 현재 들어오는 송신 패킷을 즉시 전송하는 데 사용할 수 있는 리소스가 부족한 경우와 같이 필요한 경우 내부적으로 들어오는 송신 패킷을 큐에 대기합니다.
  • 드라이버의 루틴에서 필요에 따라 내부 큐에 대한 액세스 동기화
  • 요청된 모든 완료는 이후에 Miniport(Co)Send(Packets) 함수에 전달된 각 프로토콜 제공 패킷 설명자를 사용하여 NdisMSendComplete를 호출하여 비동기적으로 전송됩니다.

NDIS는 NdisMSetAttributesEx에 전달하는 AttributeFlags에 관계없이 모든 연결 지향 미니포트가 역직렬화된 드라이버라고 가정합니다. 즉, NdisMRegisterMiniport0x05 MajorNdisVersion 으로 호출하는 모든 드라이버는 역직렬화된 미니포트 드라이버여야 합니다.

직렬화된 NIC 드라이버는 MiniportInitialize에서 이러한 함수 중 하나를 호출할 수 있지만 NdisMSetAttributes 에서는 호출자가 NIC 드라이버의 MiniportCheckForHang 및/또는 MiniportReset 함수가 호출되는 간격을 조정할 수 없습니다.

CheckForHangTimeInSeconds 값은 전송에 대한 NDIS 라이브러리의 제한 시간 간격(있는 경우)을 결정하고 호출자에게 큐에 대기 중인 요청을 결정합니다. 기본적으로 NDIS는 대기 중인 전송(직렬화된 드라이버에 대해서만)과 요청을 검사 중단 간격의 두 배로 시간 초과하며, 그 후 드라이버가 NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT AttributeFlags를 설정하고 NdisMSetAttributesEx를 호출할 때 NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 않는 한 MiniportReset 함수를 호출합니다. 이러한 드라이버는 기본 NIC 드라이버가 송신 및 요청을 처리할 시기를 결정하거나 제어할 수 없으므로 NdisMSetAttributesEx 를 호출할 때 이러한 플래그를 설정해야 합니다.

NDIS는 직렬화된 NIC 드라이버에서 이러한 사양을 적용하지만 NIC 드라이버는 NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 및 NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 플래그를 설정해서는 안 됩니다. 그러나 NIC 드라이버는 명시적 CheckForHangTimeInSeconds를 지정하여 MiniportReset 함수가 호출되는 시간 제한 간격을 조정할 수 있습니다. 예를 들어 모뎀을 통해 이더넷을 에뮬레이트하는 NIC 드라이버는 NDIS 라이브러리의 기본 제한 시간 간격 내에서 모든 패킷을 완료하지 못할 수 있습니다. 패킷이 이러한 NIC에서 시간 초과로 나타날 때마다 NDIS는 NIC가 더 이상 올바르게 작동하지 않는다고 가정하고 드라이버의 MiniportReset 함수를 호출합니다. 이러한 NIC의 드라이버에 대해 CheckForHangTimeInSeconds를 2보다 큰 값으로 설정하여 NdisMSetAttributesEx를 호출하면 불필요한 재설정을 방지하고 NIC의 작동 상태를 테스트하기 위해 MiniportCheckForHang 함수가 호출되는 간격을 연장합니다.

중간 드라이버는 NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 플래그를 설정해야 합니다. 이 플래그를 설정하면 시스템이 저전력(절전 모드) 상태로 전환되기 전에 NDIS에서 드라이버를 중지할 수 없습니다.

PnP 인식이 아닌 NIC를 관리하는 레거시 미니포트 드라이버는 시스템이 저전력 상태로 전환되기 전에 NDIS가 드라이버를 중지하지 못하도록 NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 플래그를 설정할 수 있습니다. 미니포트 드라이버가 이 플래그를 설정하는 경우 NDIS는 미니포트 드라이버의 NIC에 대한 버스 드라이버가 NIC가 PM을 인식하지 않는다고 표시했을 수 있더라도 OID_PNP_CAPABILITIES 사용하여 미니포트 드라이버를 쿼리합니다. 미니포트 드라이버는 NDIS_STATUS_SUCCESS OID_PNP_CAPABILITIES 요청을 성공시켜야 합니다. 이 OID에서 반환된 NDIS_PM_WAKE_UP_CAPABILITIES 구조에서 미니포트 드라이버는 각 절전 모드 해제 기능에 대해 NdisDeviceStateUnspecified 디바이스 전원 상태도 지정해야 합니다. 시스템이 저전력 상태로 전환되면 NDIS는 이러한 미니포트 드라이버의 MiniportHalt 함수를 호출하지 않습니다. 시스템이 저전력 상태로 전환하기 전에 미니포트 드라이버는 유지 관리되는 하드웨어 컨텍스트를 저장해야 합니다. D3 상태에 대한 OID_PNP_SET_POWER 요청을 받으면 미니포트 드라이버는 해당 NIC를 저전력 상태에 대한 적절한 상태로 설정해야 합니다. D0 상태에 대한 OID_PNP_SET_POWER 요청을 수신할 때 미니포트 드라이버는 해당 NIC를 작업 상태에 대한 적절한 상태로 설정해야 합니다.

디바이스의 깜짝 제거를 지원하는 미니포트 드라이버(사용자 인터페이스를 통한 알림 없이 제거)는 NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 설정해야 합니다. 이렇게 하면 미니포트의 디바이스가 알림 없이 제거될 때 PnPEventNdisDevicePnPEventSurpriseRemoved로 설정된 드라이버의 MiniportPnPEventNotify 함수를 호출합니다. 또한 NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 설정하면 디바이스를 제거하기 전에 사용자에게 디바이스를 중지하도록 요청하는 경고 대화 상자가 표시되지 않습니다.

연결이 없는 디바이스와 연결 지향 디바이스를 모두 지원할 수 있는 미니포트 드라이버는 디바이스가 연결 없는 디바이스인 경우 NDIS_ATTRIBUTE_NOT_CO_NDIS 설정해야 합니다. 그렇지 않으면 드라이버가 NdisMRegisterMiniport에 연결 지향 미니포트 드라이버 함수를 등록하기 때문에 NDIS는 디바이스가 연결 지향이라고 잘못 가정합니다.

일반적으로 NIC 드라이버는 NIC에 대한 레지스트리의 하드웨어 리소스를 클레임하는 NdisXxx 함수를 호출하기 전에 NdisMSetAttributesEx를 호출해야 합니다. 이러한 호출을 수행하려면 NDIS에 AttributeFlags 값이 있어야 하고 드라이버가 일반적으로 이러한 호출에 대한 정보를 저장하기 위해 MiniportAdapterContext의 메모리가 필요하기 때문입니다. 이 제한은 NIC 드라이버의 MiniportInitialize 함수가 NdisMSetAttributesEx를 호출하기 전에 다음 NdisXxx를 호출할 수 없음을 의미합니다.

그러나 NdisMSetAttributesEx를 호출하기 전에 모든 드라이버의 MiniportInitialize 함수는 Ndis를 호출할 수 있습니다 . 레지스트리에 설치된 구성 정보를 검색하는 구성 함수입니다. MiniportInitialize 는 드라이버의 인터페이스 형식에 대해 설치된 레지스트리 항목이 버스 유형별 NdisReadXxxMiniportInitialize 호출과 일치하는 한 NdisReadPciSlotInformation과 같은 버스 형식별 NdisReadXxx 함수를 호출할 수도 있습니다.

NdisMSetAttributesEx에 제공된 MiniportAdapterContext 핸들은 NdisMRegisterMiniport 또는 NdisIMRegisterLayeredMiniport 호출에서 MiniportInitialize와 함께 등록된 모든 MiniportXxx 함수에 대한 입력 매개 변수가 됩니다. 일반적으로 이 핸들은 드라이버가 NIC별 런타임 상태를 유지하는 MiniportInitialize에서 할당한 상주 메모리에 대한 포인터입니다.

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

요구 사항

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

추가 정보