다음을 통해 공유


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA 콜백 함수(vmbuskernelmodeclientlibapi.h)

[일부 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보와 관련하여 명시적이거나 묵시적인 보증을 하지 않습니다.]

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

통사론

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

자세한 내용은 KMCL_CLIENT_INTERFACE_V1주의 섹션을 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows 10 버전 1803
헤더 vmbuskernelmodeclientlibapi.h

참고 항목

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

mmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete