Condividi tramite


struttura MTP_COMMAND_DATA_IN (mtpext.h)

La struttura MTP_COMMAND_DATA_IN contiene comandi personalizzati MTP (Media Transport Protocol) inviati al dispositivo tramite il metodo IWMDMDevice3::D eviceIoControl .

Sintassi

typedef struct _MTP_COMMAND_DATA_IN {
  WORD  OpCode;
  DWORD NumParams;
  DWORD Params[MTP_COMMAND_MAX_PARAMS];
  DWORD NextPhase;
  DWORD CommandWriteDataSize;
  BYTE  CommandWriteData[1];
} MTP_COMMAND_DATA_IN, *PMTP_COMMAND_DATA_IN;

Members

OpCode

Codice dell'operazione.

NumParams

Numero di parametri passati.

Params[MTP_COMMAND_MAX_PARAMS]

Parametri per il comando. MTP_COMMAND_MAX_PARAMS è una costante definita con un valore pari a 5.

NextPhase

Indica se il comando ha una fase di lettura dei dati, una fase di scrittura dei dati o nessuna fase di dati. I valori validi sono definiti nella tabella seguente.

CommandWriteDataSize

Dimensioni dei dati di CommandWriteData[1], in byte.

CommandWriteData[1]

Facoltativo, primo byte di dati da scrivere nel dispositivo se NextPhase è MTP_NEXTPHASE_WRITE_DATA.

Commenti

Il buffer di input deve contenere una struttura MTP_COMMAND_DATA_IN compilata in modo appropriato. All'uscita, il driver di dispositivo compilerà la struttura MTP_COMMAND_DATA_OUT e la salverà nel buffer di output. Pertanto, qualsiasi richiesta deve avere un buffer di input di almeno SIZEOF_REQUIRED_COMMAND_DATA_IN byte, definito come

#define SIZEOF_REQUIRED_COMMAND_DATA_IN (sizeof(MTP_COMMAND_DATA_IN)-1)

e un buffer di output di almeno SIZEOF_REQUIRED_COMMAND_DATA_OUT byte, che è definito come

#define SIZEOF_REQUIRED_COMMAND_DATA_OUT (sizeof(MTP_COMMAND_DATA_OUT)-1)

Si presuppone che tutti i comandi siano autonomi, vale a dire che possono essere elaborati completamente in una sola chiamata. Ciò ha implicazioni sui trasferimenti di dati lunghi, perché la suddivisione in blocchi nel senso tradizionale non è supportata. Ad esempio, per eseguire una lettura per 3megabyte, il chiamante deve assicurarsi che allochi un buffer di output di 3 MB più SIZEOF_REQUIRED_COMMAND_DATA_OUT byte. I trasferimenti di dati lunghi non devono essere eseguiti con questo metodo, ma piuttosto tramite le NORMALI API di trasferimento dei dati.

Requisiti

Requisito Valore
Intestazione mtpext.h

Vedi anche