다음을 통해 공유


NdisMRegisterIoPortRange 함수(ndis.h)

NdisMRegisterIoPortRangeNdisRawReadPortXxx 및 NdisRawWritePortXxx 함수를 사용하여 디바이스 I/O 포트에 대한 드라이버 액세스를 설정하고 해당 드라이버의 NIC에 대한 레지스트리의 I/O 포트 주소 범위를 클레임합니다.

구문

NDIS_STATUS NdisMRegisterIoPortRange(
  [out] PVOID       *PortOffset,
  [in]  NDIS_HANDLE MiniportAdapterHandle,
  [in]  UINT        InitialPort,
  [in]  UINT        NumberOfPorts
);

매개 변수

[out] PortOffset

이 함수가 InitialPort 및NumberOfPorts 로 지정된 지정된 버스 상대 I/O 포트 범위에 대해 매핑된 기본 가상 주소를 반환하는 호출자 제공 변수를 지정합니다.

[in] MiniportAdapterHandle

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

[in] InitialPort

매핑할 포트 범위에 대한 버스 상대 기본 포트 주소를 지정합니다.

[in] NumberOfPorts

매핑할 범위의 포트 수를 지정합니다.

반환 값

NdisMRegisterIoPortRange 는 다음 중 하나를 반환할 수 있습니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
지정된 I/O 포트 범위가 성공적으로 매핑되었으므로 PortOffset 의 값이 유효하고 매핑된 범위가 NIC에 대한 레지스트리에서 클레임되었습니다.
NDIS_STATUS_RESOURCE_CONFLICT
레지스트리에서 I/O 포트 범위를 클레임하려는 시도가 실패했습니다. 다른 드라이버가 이미 해당 디바이스의 범위를 주장했기 때문일 수 있습니다. 이 경우 NdisMRegisterIoPortRange 에서 오류를 기록합니다.
NDIS_STATUS_RESOURCES
포트 범위를 매핑할 수 없거나 NDIS가 하드웨어 리소스 충돌을 위해 레지스트리를 검사 리소스를 할당할 수 없습니다.
NDIS_STATUS_FAILURE
버스 유형 또는 버스 번호가 범위를 벗어났거나 지정된 InitialPortNumberOfPorts 가 잘못되었습니다(현재 플랫폼의 I/O 포트 공간 내에 있지 않을 수 있음).

설명

미니포트 드라이버는 MiniportInitializeEx 함수에서 NdisMRegisterIoPortRange를 호출합니다. MiniportInitializeEx는 를 호출해야 합니다.NdisMRegisterIoPortRange를 호출하기 전에 NdisMSetMiniportAttributes.

NdisMRegisterIoPortRange 는 미니포트 드라이버가 이후에 NdisRawXxx 함수를 호출하여 NIC의 I/O 포트 범위에 액세스하는 데 사용할 수 있는 버스 상대 디바이스 주소 범위를 매핑합니다. 호출이 성공하면 호출자의 NIC에 대해 레지스트리에서 지정된 I/O 포트 범위를 클레임합니다.

NdisRawXxx에 전달된 매개 변수가 매핑되었기 때문에 이러한 함수는 해당 NdisImmediate보다 훨씬 빠르게 실행됩니다. 포트Xxx. NdisMRegisterIoPortRange를 성공적으로 호출한 후 미니포트 드라이버는 NdisImmediate를 호출할 수 없습니다. 포트Xxx는 이러한 I/O 포트 범위 내에서 버스 상대 주소 또는 매핑된 가상 주소를 사용하여 작동합니다.

NdisMRegisterIoPortRange에 대한 호출이 실패하면 MiniportInitializeEx는 이미 NIC에 할당된 모든 리소스를 해제한 다음 해당 NIC에 대한 초기화에 실패해야 합니다.

호스트 메모리 공간에서 디바이스 레지스터가 있는 NIC 드라이버는 NdisMMapIoSpace 를 호출하고, 이후에 NdisRead/WriteRegisterXxx 함수를 호출하여 NIC 레지스터에 액세스합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista의 NDIS 6.0 및 NDIS 5.1 드라이버(NdisMRegisterIoPortRange(NDIS 5.1 참조))에 대해 지원됩니다. Windows XP에서 NDIS 5.1 드라이버(NdisMRegisterIoPortRange(NDIS 5.1) 참조)에 대해 지원됩니다.
대상 플랫폼 유니버설
헤더 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 Irql_Miniport_Driver_Function(ndis), NdisMRegisterIoPortRange(ndis)

추가 정보

MiniportInitializeEx

NdisMDeregisterIoPortRange

NdisMMapIoSpace

NdisRawReadPortBufferUchar

NdisRawReadPortBufferUlong

NdisRawReadPortBufferUshort

NdisRawReadPortUchar

NdisRawReadPortUlong

NdisRawReadPortUshort

NdisRawWritePortBufferUchar

NdisRawWritePortBufferUlong

NdisRawWritePortBufferUshort

NdisRawWritePortUchar

NdisRawWritePortUlong

NdisRawWritePortUshort

NdisReadRegisterUchar

NdisReadRegisterUlong

NdisReadRegisterUshort

NdisWriteRegisterUchar

NdisWriteRegisterUlong

NdisWriteRegisterUshort