структура MTP_COMMAND_DATA_OUT (mtpext.h)
Структура MTP_COMMAND_DATA_OUT содержит ответы MTP, которые заполняются драйвером устройства при выходе из вызова IWMDMDevice3::D eviceIoControl.
Синтаксис
typedef struct _MTP_COMMAND_DATA_OUT {
WORD ResponseCode;
DWORD NumParams;
DWORD Params[MTP_RESPONSE_MAX_PARAMS];
DWORD CommandReadDataSize;
BYTE CommandReadData[1];
} MTP_COMMAND_DATA_OUT, *PMTP_COMMAND_DATA_OUT;
Члены
ResponseCode
Код ответа.
NumParams
Количество параметров для этого ответа.
Params[MTP_RESPONSE_MAX_PARAMS]
Параметры ответа. MTP_RESPONSE_MAX_PARAMS является определенной константой со значением 5.
CommandReadDataSize
Размер данных CommandReadData[1], в байтах.
CommandReadData[1]
Необязательный— первый байт данных для чтения с устройства, если MTP_COMMAND_DATA_IN. NextPhase имеет MTP_NEXTPHASE_READ_DATA.
Комментарии
Ожидается, что входной буфер будет содержать надлежащим образом заполненную MTP_COMMAND_DATA_IN структуру. При выходе драйвер устройства заполнит структуру MTP_COMMAND_DATA_OUT и сохранит ее в выходном буфере. Таким образом, любой запрос должен иметь входной буфер не менее SIZEOF_REQUIRED_COMMAND_DATA_IN байтов, который определяется следующим образом:
#define SIZEOF_REQUIRED_COMMAND_DATA_IN (sizeof(MTP_COMMAND_DATA_IN)-1)
Любой запрос также должен иметь выходной буфер не менее SIZEOF_REQUIRED_COMMAND_DATA_OUT байтов, который определяется следующим образом:
#define SIZEOF_REQUIRED_COMMAND_DATA_OUT (sizeof(MTP_COMMAND_DATA_OUT)-1)
Предполагается, что все команды являются автономными, то есть могут быть полностью обработаны в одном вызове. Это влияет на длительную передачу данных, так как фрагментация в традиционном смысле не поддерживается. (Например, чтобы выполнить чтение в течение 3 мегабайт, вызывающему объекту необходимо обеспечить выделение выходного буфера размером 3 МБ плюс SIZEOF_REQUIRED_COMMAND_DATA_OUT байт.) Длительные передачи данных следует выполнять не с помощью этого метода, а через обычные API передачи данных.
Требования
Требование | Значение |
---|---|
Заголовок | mtpext.h |