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 |