MINIPORT_RESET 콜백 함수(ndis.h)

경고

MiniportResetExMiniportCheckForHangEx 콜백 함수는 모든 NDIS 6.83 이상 드라이버에 권장되지 않습니다. 자세한 내용은 NDIS 6.83 이상에서 중단 확인 및 다시 설정 작업을 참조하세요.

NDIS는 NDIS 미니포트 드라이버의 MiniportResetEx 함수를 호출하여 NIC(네트워크 인터페이스 카드)의 재설정을 시작합니다. 자세한 내용은 미니포트 어댑터 중단 및 초기화 작업 및미니포트 드라이버 하드웨어 재설정을 참조하세요.

참고 NDIS 미니포트 드라이버는 MINIPORT_RESET 형식을 사용하여 이 함수를 선언할 수 있습니다.
 

구문

MINIPORT_RESET MiniportReset;

NDIS_STATUS MiniportReset(
  [in]  NDIS_HANDLE MiniportAdapterContext,
  [out] PBOOLEAN AddressingReset
)
{...}

매개 변수

[in] MiniportAdapterContext

MiniportInitializeEx 함수에 미니포트 드라이버가 할당한 컨텍스트 영역에 대한 핸들입니다. 미니포트 드라이버는 이 컨텍스트 영역을 사용하여 미니포트 어댑터에 대한 상태 정보를 유지 관리합니다.

[out] AddressingReset

부울 변수에 대한 포인터입니다. 미니포트 드라이버는 NDIS가 MiniportOidRequest 함수를 호출하여 주소 지정 및 기타 구성 설정을 현재 값으로 복원해야 하는 경우 이 변수를 TRUE로 설정합니다. 자세한 내용은 하드웨어 재설정을 참조하세요.

반환 값

MiniportResetEx는 다음 상태 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
NDIS_STATUS_SUCCESS

MiniportResetEx 가 미니포트 어댑터를 작동 상태로 성공적으로 다시 설정했습니다.

NDIS_STATUS_PENDING
드라이버는 작업이 완료되면 NdisMResetComplete 함수를 호출하여 다시 설정 작업을 비동기적으로 완료합니다.
NDIS_STATUS_RESET_IN_PROGRESS

MiniportResetEx 는 미니포트 어댑터가 현재 초기화 중임을 확인했기 때문에 이 호출은 불필요합니다.

NDIS_STATUS_SOFT_ERRORS
MiniportResetEx 가 미니포트 어댑터를 성공적으로 초기화했지만 작업 중에 복구 가능한 오류가 발생했습니다. MiniportResetEx 는 오류에 대한 자세한 정보를 사용하여 NdisWriteErrorLogEntry 함수를 호출해야 합니다.
NDIS_STATUS_HARD_ERRORS
MiniportResetEx 가 미니포트 어댑터를 다시 설정하려고 했지만 작업 중에 복구할 수 없는 오류가 발생했습니다. MiniportResetEx 는 오류에 대한 자세한 정보를 사용하여 NdisWriteErrorLogEntry 를 호출해야 합니다.

설명

드라이버는 를 호출할 때 MiniportResetEx 진입점을 지정합니다. NdisMRegisterMiniportDriver 함수.

중간 드라이버에는 MiniportResetEx가 필요하지 않습니다.

MiniportResetEx 는 미니포트 어댑터의 매개 변수를 다시 설정할 수 있습니다. 초기화로 인해 미니포트 어댑터의 스테이션 주소가 변경되면 미니포트 드라이버는 다시 설정이 완료된 후 스테이션 주소의 이전 값을 자동으로 복원합니다. 하드웨어에 의해 다시 설정되는 멀티캐스트 또는 기능 주소 지정 마스크는 이 함수에서 다시 설정할 필요가 없습니다.

다시 설정 작업이 멀티캐스트 또는 기능 주소 지정 정보와 같은 다른 정보를 변경하는 경우 MiniportResetEx 는 반환하기 전에 AddressingReset 에서 변수를 TRUE 로 설정해야 합니다. 이로 인해 NDIS가 MiniportOidRequest 함수를 호출하여 정보를 복원합니다. 또한 NDIS는 OID_PNP_ADD_WAKE_UP_PATTERN 호출하여 WoL(Wake on the LAN) 패턴 목록을 복원합니다. 하드웨어 목록이 이미 다시 설정되었기 때문에 드라이버는 어댑터 컨텍스트에서 WoL 패턴 목록을 해제해야 합니다.

NDIS는 보류 중인 OID 요청을 중단하거나 요청을 보내지 않습니다. 드라이버가 보류 중인 OID를 안전하게 완료하거나 다시 설정 후 요청을 보낼 수 있는 경우 드라이버는 보류 중인 OID를 보유하거나 다시 설정 작업이 완료될 때까지 요청을 보낼 수 있습니다. 그렇지 않으면 드라이버가 보류 중인 OID를 완료하거나 NdisMOidRequestComplete 또는 를 호출하여 요청을 보내야 합니다.MiniportResetEx가 반환되기 전에 각각 NdisMSendNetBufferListsComplete 함수입니다.

참고 NDIS 6.30부터 미니포트 드라이버는 다시 설정 작업이 완료될 때까지 보류 중인 OID를 보유하거나 요청을 보내서는 안 됩니다. 대신, 드라이버는 다시 설정 작업이 완료되기 전에 각각 NdisMOidRequestComplete 또는 NdisMSendNetBufferListsComplete 함수를 호출하여 보류 중인 요청을 완료해야 합니다. 드라이버가 비동기적으로 다시 설정 작업을 완료하는 경우 드라이버가 NdisMResetComplete를 호출하기 전에 보류 중인 OID를 완료하고 요청을 보내야 합니다.
 
미니포트 드라이버는 NdisMIndicateStatusEx 함수를 호출하여 각 재설정 작업의 시작과 완료를 알리면 안 됩니다. NDIS는 재설정이 시작되고 종료되면 바인딩된 프로토콜 드라이버에 알립니다.

MiniportResetEx가 초기화 작업 중에 미니포트 어댑터의 상태 변경을 기다려야 하는 경우 NdisStallExecution 함수를 호출할 수 있습니다. 단,
MiniportResetEx 함수는 시간 간격이 50마이크로초보다 큰 NdisStallExecution 을 호출해서는 안 됩니다. 드라이버가 50 마이크로초 이상 기다려야 하는 경우(또는 폴링하는 경우) 대신 타이머를 설정하고 NDIS_STATUS_PENDING 반환해야 합니다.

MiniportResetEx가 NDIS_STATUS_PENDING 반환하는 경우 드라이버는 NdisMResetComplete 함수를 호출하여 재설정을 완료해야 합니다.

미니포트 어댑터가 MediaConnectStateConnected 상태이고 MediaConnectStateUnknown 상태 변경을 포함하여 재설정으로 인해 상태가 변경되는 경우 미니포트 드라이버는 NDIS_STATUS_LINK_STATE 상태 표시를 사용하여 상태 변경을 보고해야 합니다. 또한 미니포트 드라이버는 다시 설정 후 링크가 다시 설정될 때 MediaConnectStateConnected 상태 표시를 나타내야 합니다.

MiniportResetEx 는 인터럽트를 통해 선점할 수 있습니다.

NDIS는 MiniportCheckForHangEx 함수를 주기적으로 호출하여 MiniportResetEx를 호출해야 하는지 여부를 결정합니다. MiniportCheckForHangEx 호출에 대한 기본 제한 시간은 2초입니다. 이 기본값이 너무 짧으면 미니포트 드라이버는 를 호출할 때 더 큰 CheckForHangTimeInSeconds 값을 설정할 수 있습니다.
초기화 중 NdisMSetMiniportAttributes 함수입니다. 자세한 내용은 미니포트 어댑터 중단 확인 및 다시 설정 작업을 참조하세요.

NDIS는 NIC가 수신 작업에 대한 응답을 중지했는지 여부를 확인할 수 없습니다. 이러한 종류의 오류를 처리하기 위해 MiniportCheckForHangEx 함수는 수신 작업을 모니터링하고 필요한 경우 TRUE 를 반환하여 강제로 재설정할 수 있습니다. 미니포트는 NdisMResetMiniport를 호출하여 재설정을 요청할 수도 있습니다.

NDIS는 IRQL <= DISPATCH_LEVEL MiniportResetEx를 호출합니다.

MiniportResetEx 함수를 정의하려면 먼저 정의 중인 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾을 수 있으며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 " MyResetEx"라는 MiniportResetEx 함수를 정의하려면 다음 코드 예제와 같이 MINIPORT_RESET 형식을 사용합니다.

MINIPORT_RESET MyResetEx;

그런 다음 다음과 같이 함수를 구현합니다.

_Use_decl_annotations_
NDIS_STATUS
 MyResetEx(
    NDIS_HANDLE  MiniportAdapterContext,
    PBOOLEAN  AddressingReset
    )
  {...}

MINIPORT_RESET 함수 형식은 Ndis.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 MINIPORT_RESET 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언 요구 사항에 대한 자세한 내용은 NDIS 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요.

Use_decl_annotations 대한 자세한 내용은 함수 동작 주석 지정을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 Windows
헤더 ndis.h(Ndis.h 포함)
IRQL <= DISPATCH_LEVEL

추가 정보

미니포트 어댑터 중단 확인 및 다시 설정 작업

미니포트 드라이버 하드웨어 재설정

MiniportCheckForHangEx

MiniportInitializeEx

MiniportOidRequest

NDIS_STATUS_LINK_STATE

NdisMIndicateStatusEx

NdisMOidRequestComplete

NdisMRegisterMiniportDriver

NdisMResetComplete

NdisMResetMiniport

NdisMSendNetBufferListsComplete

NdisMSetMiniportAttributes

NdisStallExecution

NdisWriteErrorLogEntry