Condividi tramite


FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA funzione di callback (vmbuskernelmodeclientlibapi.h)

[Alcune informazioni si riferiscono al prodotto pre-rilasciato che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non offre garanzie, esplicite o implicite, rispetto alle informazioni fornite qui.

La funzione VmbChannelPacketGetExternalData ottiene qualsiasi descrittore di memoria esterna Elenchi associato a un pacchetto durante l'elaborazione dei pacchetti.

Sintassi

FN_VMB_CHANNEL_PACKET_GET_EXTERNAL_DATA FnVmbChannelPacketGetExternalData;

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

Parametri

PacketCompletionContext

Handle che identifica il pacchetto in ingresso e viene usato per fare riferimento al pacchetto al termine dell'elaborazione.

Flags

Flag che controllano la modalità di mapping dell'MDL. I valori del flag possibili sono:

Valore Significato
VMBUS_CHANNEL_PACKET_EXTERNAL_DATA_FLAG_READ_ONLY
Eseguire il mapping di MDL come di sola lettura.

Mdl

Puntatore al MDL mappato.

Valore restituito

VmbChannelPacketGetExternalData restituisce un codice di stato. Se questa funzione restituisce STATUS_PENDING, il chiamante deve restituire dal callback dell'elaborazione dei pacchetti, che verrà chiamato di nuovo, possibilmente in un irQL diverso, quando i dati esterni sono pronti. A questo punto, una chiamata a questa funzione avrà esito positivo e restituirà i dati esterni.

Commenti

La creazione di un MDL che rappresenta la memoria descritta da questa transazione causa l'aggiunta di queste aree della macchina virtuale nella memoria per il resto della durata della transazione. Si tratta di ciò che può causare la restituzione della funzione STATUS_PENDING, perché le aree della macchina virtuale potrebbero essere in cui deve essere visualizzata la pagina.

L'MDL restituito da questa funzione descrive la memoria già bloccata. Pertanto, non è necessario chiamare la funzione MmProbeAndLockPages . L'MDL avrà tuttavia un indirizzo virtuale in modalità utente o un indirizzo virtuale in modalità kernel. Se il driver che chiama questa funzione richiede un indirizzo virtuale per modificare la memoria all'interno della macchina virtuale, tale driver deve chiamare MmMapLockedPagesSpecifyCache o MmGetSystemAddressForMdlSafe e la funzione di sblocco corrispondente in un secondo momento, ad esempio MmUnmapLockedPages. Un'alternativa all'uso di un indirizzo virtuale consiste nel passare l'MDL a un driver che lo usa per l'accesso diretto alla memoria.

Il driver che chiama questa funzione non è necessario per rilasciare MDL. Non è valido quando si chiama la funzione VmbChannelPacketComplete . La libreria client in modalità kernel (KMCL) la rilascia in seguito.

Importante

Questa funzione viene chiamata tramite l'interfaccia VMBus Kernel Mode Client Library (KMCL), fornita dal driver del bus di Vmbkmcl.sys. Si tratta di una funzione client accessibile dalla struttura KMCL_CLIENT_INTERFACE_V1 .

Per altre informazioni, vedere la sezione Osservazioni della KMCL_CLIENT_INTERFACE_V1.

Requisiti

Requisito Valore
Client minimo supportato Windows 10, versione 1803
Intestazione vmbuskernelmodeclientlibapi.h

Vedi anche

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnmapLockedPages

VmbChannelPacketComplete