FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA 콜백 함수(vmbuskernelmodeclientlibapi.h)

[일부 정보는 상업용으로 출시되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 명시적 또는 묵시적 보증을 하지 않습니다.]

VmbChannelPacketGetExternalData 함수는 패킷 처리 중에 패킷과 연결된 모든 외부 MDL(메모리 설명자 Lists)을 가져옵니다.

구문

FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA FnVmbChannelPacketGetExternalData;

NTSTATUS FnVmbChannelPacketGetExternalData(
  VMBPACKETCOMPLETION PacketCompletionContext,
  UINT32 Flags,
  PMDL *Mdl
)
{...}

매개 변수

PacketCompletionContext

들어오는 패킷을 식별하고 처리가 완료되면 패킷을 참조하는 데 사용되는 핸들입니다.

Flags

MDL이 매핑되는 방법을 제어하는 플래그입니다. 가능한 플래그 값은 다음과 같습니다.

의미
VMBUS_CHANNEL_PACKET_EXTERNAL_DATA_FLAG_READ_ONLY
MDL을 읽기 전용으로 매핑합니다.

Mdl

매핑된 MDL에 대한 포인터입니다.

반환 값

VmbChannelPacketGetExternalData는 상태 코드를 반환합니다. 이 함수가 STATUS_PENDING 반환하는 경우 호출자는 외부 데이터가 준비되면 다른 IRQL에서 다시 호출되는 패킷 처리 콜백에서 반환해야 합니다. 이 시점에서 이 함수에 대한 호출이 성공하고 외부 데이터를 반환합니다.

설명

이 트랜잭션에서 설명하는 메모리를 나타내는 MDL을 만들면 가상 머신의 이러한 영역이 트랜잭션 수명 동안 메모리에 고정됩니다. 가상 머신의 영역을 페이징해야 할 수 있으므로 함수가 STATUS_PENDING 반환할 수 있습니다.

이 함수에서 반환된 MDL은 이미 잠겨 있는 메모리에 대해 설명합니다. 따라서 MmProbeAndLockPages 함수를 호출할 필요가 없습니다. 그러나 MDL에는 사용자 모드 가상 주소나 커널 모드 가상 주소가 없습니다. 이 함수를 호출하는 드라이버가 가상 머신 내에서 메모리를 조작하기 위해 가상 주소가 필요한 경우 해당 드라이버는 MmMapLockedPagesSpecifyCache 또는 MmGetSystemAddressForMdlSafe를 호출해야 하며, 나중에 는 MmUnmapLockedPages와 같은 해당 잠금 해제 함수를 호출해야 합니다. 가상 주소를 사용하는 대안은 MDL을 직접 메모리 액세스에 사용하는 드라이버에 전달하는 것입니다.

이 함수를 호출하는 드라이버는 MDL을 해제할 필요가 없습니다. VmbChannelPacketComplete 함수를 호출하면 유효하지 않습니다. KMCL(커널 모드 클라이언트 라이브러리)은 나중에 릴리스합니다.

중요

이 함수는 Vmbkmcl.sys 버스 드라이버에서 제공하는 KMCL(VMBus 커널 모드 클라이언트 라이브러리) 인터페이스를 통해 호출됩니다. KMCL_CLIENT_INTERFACE_V1 구조에서 액세스하는 클라이언트 함수입니다.

자세한 내용은 KMCL_CLIENT_INTERFACE_V1 설명 섹션을 참조 하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10, 버전 1803
머리글 vmbuskernelmodeclientlibapi.h

추가 정보

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete