Пытаюсь прочитать из SD-карты CID, но получаю массив нулей
1. Сначала открываю карту (для упрощения - через букву)
Код:
sprintf(cBuff, "\\\\.\\%s:", "G");
hDisk = CreateFile(cBuff,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
2. Если открытие успешно - инициализирую данные для команды
Код:
iCmdDatSize = sizeof(SFFDISK_DEVICE_COMMAND_DATA) + sizeof(SDCMD_DESCRIPTOR) + 512; /// Временно, возможно увеличим буфер потом
psCommandData = malloc(iCmdDatSize);
// ToDo Проверка выделения
/// Инициализация pCommandData
memset(psCommandData, 0, iCmdDatSize);
psCommandData->HeaderSize = sizeof(SFFDISK_DEVICE_COMMAND_DATA);
psCommandData->Command = SFFDISK_DC_DEVICE_COMMAND;
psCommandData->ProtocolArgumentSize = sizeof(SDCMD_DESCRIPTOR);
psCommandData->DeviceDataBufferSize = 512; /// см.выше
psCommandData->Information = info;
/// Инициализация sCmdDescriptor
sCmdDescriptor.Cmd = 10; // CMD10
sCmdDescriptor.CmdClass = SDCC_STANDARD;
sCmdDescriptor.TransferDirection = SDTD_READ;
sCmdDescriptor.TransferType = SDTT_CMD_ONLY;
sCmdDescriptor.ResponseType = SDRT_2;
/// Переносим sCmdDescriptor в sCommandData
memcpy((char *)(&(psCommandData->Data[0])), &sCmdDescriptor, sizeof(SDCMD_DESCRIPTOR));
3. Выполняю DeviceIoControl
Код:
iRet = DeviceIoControl(hDisk,
IOCTL_SFFDISK_DEVICE_COMMAND,
psCommandData,
iCmdDatSize,
psCommandData,
iCmdDatSize,
&iBytesReturned,
NULL
);
Выполняется без ошибки, в iBytesReturned размер возвращенных данных точно такой же, как и отправленных, но содержимое никак не изменяется (т.е. CID - нули). Проверял на нескольких рабочих картах.
В чем моя ошибка?
UPD. Проверил другие команды - то же самое (нулевой ответ).