NDK_FN_REGISTER_MR 콜백 함수(ndkpi.h)

NdkRegisterMr(NDK_FN_REGISTER_MR) 함수는 NDK 어댑터에 거의 연속된 메모리 영역을 등록합니다.

구문

NDK_FN_REGISTER_MR NdkFnRegisterMr;

NTSTATUS NdkFnRegisterMr(
  [in]           NDK_MR *pNdkMr,
  [in]           MDL *Mdl,
  [in]           SIZE_T Length,
  [in]           ULONG Flags,
  [in]           NDK_FN_REQUEST_COMPLETION RequestCompletion,
  [in, optional] PVOID RequestContext
)
{...}

매개 변수

[in] pNdkMr

MR(NDK 메모리 영역) 개체(NDK_MR)에 대한 포인터입니다.

[in] Mdl

시작 가상 주소에서 Length 매개 변수에 지정된 바이트 수까지 거의 연속된 메모리 영역을 나타내는 MDL 또는 MDL 체인입니다.

[in] Length

첫 번째 MDL의 가상 주소부터 등록할 바이트 수입니다. 첫 번째 MDL의 가상 주소는 MmGetMdlVirtualAddress 매크로를 호출하여 가져올 수 있습니다. 길이는 MDL 체인이 나타내는 총 바이트 수를 초과해서는 안됩니다.

[in] Flags

등록된 메모리 영역에 대한 액세스 권한을 지정하는 플래그의 비트 마스크입니다. 다음 플래그를 설정할 수 있습니다.

의미
NDK_MR_FLAG_ALLOW_LOCAL_READ
0x00000000
NDK_MR_FLAG_ALLOW_LOCAL_WRITE
0x00000001
NDK_MR_FLAG_ALLOW_REMOTE_READ
0x00000002
NDK_MR_FLAG_ALLOW_REMOTE_WRITE
0x00000005
NDK_MR_FLAG_RDMA_READ_SINK
0x00000008

[in] RequestCompletion

요청 완료 콜백 루틴 NdkRequestCompletion (NDK_FN_REQUEST_COMPLETION)에 대한 포인터입니다.

[in, optional] RequestContext

RequestCompletion 매개 변수에 지정된 콜백 함수의 Context 매개 변수에 전달할 컨텍스트 값입니다.

반환 값

NdkRegisterMr 함수는 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
MR 등록이 성공적으로 완료되었습니다.
STATUS_PENDING
작업이 보류 중이며 나중에 완료됩니다. 드라이버는 지정된 requestCompletion (NDK_FN_REQUEST_COMPLETION) 함수를 호출하여 보류 중인 작업을 완료합니다.
STATUS_INVALID_PARAMETER
시작 가상 주소부터 길이(바이트)까지의 MDL 체인 부분은 거의 연속된 메모리 영역을 나타내지 않습니다.
STATUS_INSUFFICIENT_RESOURCES
리소스 부족으로 인해 요청이 실패했습니다.
중요 요청은 이 상태 코드와 비동기적으로도 인라인으로 실패할 수 있습니다.
 
기타 상태 코드
오류가 발생했습니다.

설명

FastRegister 매개 변수를 FALSE로 설정하여 만든 NDK_MR 개체에서 NdkRegisterMr은 어댑터에 거의 연속된 메모리 영역을 등록하는 데 사용됩니다.

NDK 소비자는 실제 메모리에 고정된 거의 연속된 메모리 영역을 나타내는 MDL 또는 MDL 체인을 전달해야 합니다. 등록되는 메모리 영역의 기본 가상 주소는 MmGetMdlVirtualAddress 매크로로 표시된 가상 주소입니다. MDL 체인이 시작 가상 주소에서 지정된 길이(바이트)까지 거의 연속된 메모리 영역을 나타내지 않는 경우 NDK 공급자는 요청을 실패해야 합니다.

공급자는 MmGetMdlVirtualAddress 가 반환하는 가상 주소를 등록 중인 메모리 영역의 시작 부분에 대한 인덱스로 처리해야 합니다. 공급자는 버퍼 콘텐츠를 읽거나 쓰기 위한 유효한 가상 주소로 가상 주소를 사용하면 안 됩니다.

등록 요청이 보류 중인 동안 NDK 소비자는 MDL 체인을 사용하지 않아야 합니다.

NdkRegisterMr 은 0부터 시작하는 가상 주소를 지원하지 않습니다.

NDK 소비자는 RDMA 읽기 요청에 대한 싱크 버퍼로 사용할 수 있는 메모리를 등록할 때 NDK_MR_FLAG_RDMA_READ_SINK 플래그를 전달해야 합니다. 특정 NDK 공급자는 NDK_ADAPTER_INFO 구조체의 AdapterFlags 멤버에서 NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED 플래그가 설정되지 않은 어댑터에서 RDMA 읽기 요청에 대해 싱크 버퍼에 대한 특별한 액세스 권한을 사용하도록 설정해야 수 있습니다. NDK_MR_FLAG_RDMA_READ_SINK 플래그를 사용하면 이러한 공급자가 등록 요청을 적절하게 지원할 수 있습니다.

참고 버퍼는 여러 용도로 등록할 수 있습니다. 따라서 NDK_MR_FLAG_RDMA_READ_SINK 플래그에는 다른 플래그가 포함될 수 있습니다.
 
NDK 소비자가 NDK_ADAPTER_INFO 구조체의 AdapterFlags 멤버에서 NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED 플래그가 설정된 어댑터에서 NDK_MR_FLAG_RDMA_READ_SINK 플래그를 전달하는 경우 공급자는 NDK_MR_FLAG_RDMA_READ_SINK 플래그를 처리할 필요가 없으며 이 플래그가 있기 때문에 요청에 실패하지 않아야 합니다.

메모리 영역을 등록 취소하려면 NdkDeregisterMr (NDK_FN_DEREGISTER_MR) 함수를 사용합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 지원되지 않음, NDIS 6.30 이상에서 지원됨
지원되는 최소 서버 Windows Server 2012
대상 플랫폼 Windows
헤더 ndkpi.h(Ndkpi.h 포함)
IRQL <=DISPATCH_LEVEL

추가 정보

MmGetMdlVirtualAddress

NDKPI 개체 수명 요구 사항

NDK_ADAPTER_INFO

NDK_FN_DEREGISTER_MR

NDK_FN_REQUEST_COMPLETION

NDK_MR