Я сам не пробовал, но вы можете попробовать CeGetVolumeInfo и проверить значение dwBlockSize. Похоже, это может быть размер кластера.
Если это не сработает, тогда это будет немного сложнее.
Карты памяти обычно отформатированы в формате FAT .
Вам необходим доступ к подпрограммам нижнего уровня в CE, чтобы читать на уровне диска и читать FAT BPB, чтобы определить тип FAT и размер кластера.
Используйте Диспетчер хранилища Функции FindFirstStore / FindNextStore, чтобы найти нужную карту памяти. Затем откройте карту памяти с помощью API CreateFile.
HANDLE hDisk (CreateFile (storeInfo.szDeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) *
Затем вам нужно прочитать FAT BPB, который находится в первом секторе для супер дисков (что было бы обычным случаем для устройств, отформатированных в карте памяти) или в формате MBR.
SG_REQ req;
DWORD cb;
req.sr_start = 0;
req.sr_num_sec = 1;
req.sr_num_sg = 1;
req.sr_status = 0;
req.sr_callback = 0;
req.sr_sglist[0].sb_buf = sectorBuffer;
req.sr_sglist[0].sb_len = storeInfo.dwBytesPerSector;
DeviceIoControl(hDisk, DISK_IOCTL_READ, &req, sizeof(req), 0, 0, &cb, 0);
После того, как у вас есть BPB, вам нужно определить, какой это жирный формат (FAT12 / FAT16 / FAT32), а затем извлечь из него размер кластера.
Как вы это делаете в C #, зависит от вас. Я вижу в справочнике менеджера хранилища, он может опуститься до уровня раздела, и вы можете запросить тип раздела. Это скажет вам тип FAT, так что вам не нужно это выяснять.