Share via


MINIPORT_PNP_IRP 콜백 함수(ndis.h)

MiniportPnpIrp 함수를 사용하면 미니포트 드라이버가 필요에 따라 PnP(플러그 앤 플레이) 리소스를 관리할 수 있습니다. MiniportPnpIrp 자체는 미니포트 드라이버에 의해 직접 정의되지 않습니다. 대신 MiniportFilterResourceRequirements 또는 MiniportStartDevice로 정의됩니다.

MiniportFilterResourceRequirements로 정의된 경우 이 함수를 사용하면 미니포트 드라이버가 디바이스에 대한 리소스 요구 사항을 수정할 수 있습니다. MiniportStartDevice로 정의된 경우 이 함수를 사용하면 미니포트 드라이버가 에 추가한 리소스를 제거할 수 있습니다. MiniportFilterResourceRequirements 함수입니다 .

참고 MINIPORT_FILTER_RESOURCE_REQUIREMENTS 형식 또는 MINIPORT_START_DEVICE형식을 사용하여 이 함수를 선언해야 합니다. 자세한 내용은 다음 예제 섹션을 참조하세요.
 

구문

MINIPORT_PNP_IRP MiniportPnpIrp;

NDIS_STATUS MiniportPnpIrp(
  [in] NDIS_HANDLE MiniportAddDeviceContext,
  [in] PIRP Irp
)
{...}

매개 변수

[in] MiniportAddDeviceContext

MiniportAddDevice 함수에서 미니포트 드라이버가 NDIS에 등록한 드라이버 할당 컨텍스트 영역에 대한 핸들입니다.

[in] Irp

이 함수가 MiniportFilterResourceRequirements로 정의된 경우 이 매개 변수는 드라이버가 처리할 IRP_MN_FILTER_RESOURCE_REQUIREMENTS 대한 포인터입니다.

이 함수가 MiniportStartDevice로 정의된 경우 이 매개 변수는 IRP_MN_START_DEVICE IRP에 대한 포인터입니다.

반환 값

MiniportPnpIrp 은 다음 값 중 하나를 반환합니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
미니포트 드라이버가 디바이스 시작 요청을 성공적으로 처리했습니다.
NDIS_STATUS_RESOURCES
미니포트 드라이버는 리소스가 부족하여 시작 디바이스 요청을 처리할 수 없습니다.
NDIS_STATUS_FAILURE
MiniportFilterResourceRequirements 가 리소스 부족 이외의 이유로 실패했습니다.

설명

MiniportFilterResourceRequirements 설명

MiniportFilterResourceRequirements 함수는 선택적 함수입니다. 미니포트 드라이버는 MSI-X를 지원하고 다음 중 하나 이상이 true인 경우 이 함수를 등록해야 합니다.
  • 드라이버에는 각 MSI-X 메시지에 대한 인터럽트 선호도를 변경하는 기능이 필요합니다.
  • 드라이버는 에서 줄 기반 인터럽트 등록 MiniportInitializeEx 함수입니다.
MiniportFilterResourceRequirements를 등록하려면 에서 진입점을 지정합니다. NDIS_MINIPORT_PNP_CHARACTERISTICS 구조체입니다.

NDIS가 을 수신한 후 NDIS는 MiniportFilterResourceRequirements 함수를 호출합니다. IRP_MN_FILTER_RESOURCE_REQUIREMENTS NIC(네트워크 인터페이스 카드)에 대한 IRP입니다. NDIS는 디바이스 스택의 기본 함수 드라이버가 IRP 처리를 완료한 후 MiniportFilterResourceRequirements 를 호출합니다.

MiniportAddDevice 함수가 NDIS_STATUS_SUCCESS 반환한 직후 MiniportFilterResourceRequirements의 IRP_MN_FILTER_RESOURCE_REQUIREMENTS 처리하도록 미니포트 드라이버를 준비해야 합니다.

미니포트 드라이버는 MSI-X 메시지를 설명하는 CmResourceTypeInterrupt 형식의 각 리소스에 대한 선호도 정책을 설정할 수 있습니다. 선호도 정책이 특정 프로세서 집합에 대한 대상 지정을 요청하는 경우 미니포트 드라이버는 IO_RESOURCE_DESCRIPTOR 구조의 Interrupt.TargetedProcessors 멤버에 KAFFINITY 마스크를 설정합니다.

NDIS 6.1 이상 미니포트 드라이버에 더 많은 메시지 인터럽트 리소스가 필요한 경우 리소스 목록에 메시지 인터럽트 리소스를 더 추가할 수 있습니다. 운영 체제에서 더 많은 메시지 인터럽트 리소스를 제공할 수 있는 경우 미니포트 어댑터는 시작할 때 추가된 메시지 인터럽트 리소스를 받습니다.

목록의 각 메시지 인터럽트 리소스에는 리소스 목록에 있는 순서에 해당하는 메시지 번호가 할당됩니다. 메시지는 메시지 인터럽트 리소스의 총 수에서 1을 뺀 값까지 0부터 번호가 매겨집니다.

런타임에 CPU에 MSI-X 테이블 항목을 할당하기 위해 미니포트 드라이버는 다음을 호출할 수 있습니다. NdisMConfigMSIXTableEntry 함수입니다.

미니포트 드라이버는 메시지 인터럽트 리소스인 CmResourceTypeInterrupt 유형의 모든 리소스를 제거할 수 있습니다. 그런 다음 드라이버는 MiniportInitializeEx 함수에서 줄 기반 인터럽트에 등록할 수 있습니다. 미니포트 드라이버가 이러한 메시지 인터럽트 리소스를 제거하지 않으면 드라이버가 MiniportInitializeEx에서 줄 기반 인터럽트를 등록하려고 하면 운영 체제가 실패합니다.

새 리소스 요구 사항 목록에 메모리를 할당하려면 NdisAllocateMemoryWithTagPriority 함수입니다. 미니포트 드라이버는 NdisFreeMemory 함수를 사용하여 이전 리소스 요구 사항 목록에 대한 메모리를 해제할 수 있습니다. PnP 관리자는 연결된 IRP가 완료된 후 드라이버 할당 메모리를 해제합니다.

미니포트 드라이버는 CmResourceTypeMemoryCmResourceTypePort 리소스와 같은 다른 리소스를 수정해서는 안 됩니다. 미니포트 드라이버는 리소스 목록에 새 리소스를 추가하지 않아야 합니다. 그러나 미니포트 드라이버는 메시지 인터럽트 리소스를 더 추가할 수 있습니다. 미니포트 드라이버가 메시지 인터럽트 리소스를 더 추가하는 경우 드라이버는 MiniportStartDevice 함수에서 제거해서는 안 됩니다.

미니포트 드라이버가 MiniportFilterResourceRequirements에서 NDIS_STATUS_RESOURCES 또는 NDIS_STATUS_FAILURE 반환하는 경우 NDIS는 부모 버스 드라이버에서 지정한 대로 리소스 요구 사항을 사용합니다.

NDIS는 MiniportRemoveDevice 함수를 호출하기 전에 MiniportFilterResourceRequirements를 여러 번 호출할 수 있습니다. 그러나 NDIS는 디바이스가 중지된 상태일 때만 MiniportFilterResourceRequirements 를 호출합니다.

NDIS는 IRQL = PASSIVE_LEVEL MiniportFilterResourceRequirements 를 호출합니다.

MiniportFilterResourceRequirements 예제

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

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

MINIPORT_FILTER_RESOURCE_REQUIREMENTS MyFilterResourceRequirements;

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

_Use_decl_annotations_
NDIS_STATUS
 MyFilterResourceRequirements(
    NDIS_HANDLE  MiniportAddDeviceContext,
    PIRP  Irp
    )
  {...}

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

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

MiniportStartDevice 설명

MiniportStartDevice 는 선택적 함수입니다. MSI-X를 지원하는 미니포트 드라이버는 에서 이 함수의 진입점을 지정할 수 있습니다. NDIS_MINIPORT_PNP_CHARACTERISTICS 구조체입니다. NDIS가 플러그 앤 플레이(PnP) 관리자로부터 디바이스 시작 요청을 받으면 NDIS는 MiniportStartDevice 함수(있는 경우)를 호출합니다. 미니포트 드라이버가 에 새 리소스를 추가하는 경우 MiniportFilterResourceRequirements 함수는 리소스를 제거하는 MiniportStartDevice 함수를 제공해야 합니다.

미니포트 드라이버가 기본 버스 드라이버가 리소스를 인식할 수 없는 방식으로 리소스를 수정하는 경우 드라이버는 리소스를 제거하는 MiniportStartDevice 함수를 제공해야 합니다. 미니포트 드라이버가 MiniportFilterResourceRequirements에 추가한 리소스를 인식하지 못하는 경우 기본 버스 드라이버가 디바이스 시작 요청에 실패할 수 있습니다. 미니포트 드라이버가 메시지 인터럽트 리소스를 추가하는 경우 MiniportStartDevice에서 제거해서는 안 됩니다.

NDIS는 기본 드라이버에 시작 디바이스 요청을 전달하기 전에 MiniportStartDevice 를 호출합니다. 기본 드라이버가 요청을 성공적으로 완료하면 NDIS는 MiniportInitializeEx 함수를 호출하여 미니포트 어댑터를 초기화합니다.

NDIS는 IRQL = PASSIVE_LEVEL MiniportStartDevice 를 호출합니다.

MiniportStartDevice 예제

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

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

MINIPORT_START_DEVICE MyStartDevice;

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

_Use_decl_annotations_
NDIS_STATUS
 MyStartDevice(
    NDIS_HANDLE  MiniportAddDeviceContext,
    PIRP  Irp
    )
  {...}

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

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

요구 사항

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

추가 정보

IO_RESOURCE_DESCRIPTOR

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

IRP_MN_START_DEVICE

KAFFINITY

MiniportAddDevice

MiniportFilterResourceRequirements

MiniportInitializeEx

MiniportRemoveDevice

MiniportStartDevice

NDIS_MINIPORT_PNP_CHARACTERISTICS NdisAllocateMemoryWithTagPriority

NdisFreeMemory

NdisMConfigMSIXTableEntry