Ich habe das selbst nicht versucht, aber Sie können versuchen, CeGetVolumeInfo und überprüfen Sie den DwBlockSize-Wert. Dies sieht so aus, als könnte es die Clustergröße sein.
Wenn das nicht funktioniert, wird es ein wenig mehr beteiligt.
Speicherkarten werden normalerweise im Format FAT format formatiert.
Sie müssen auf die Low-Level-Routinen in CE zugreifen, um auf Datenträgerebene zu lesen und die FAT-BPB zu lesen, welche Art von FAT und wie groß die Clustergröße ist.
Verwenden Sie Storage Manager Funktionen FindFirstStore/FindNextStore, um die Speicherkarte zu finden, nach der Sie suchen. Öffnen Sie dann die Speicherkarte mit der CreateFile-API.
GRIFF hdisk (Createfile (storeInfo.szDeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL));
Dann müssen Sie die FAT BPB lesen, die auf dem ersten Sektor für Super-Festplatten (das wäre der Normalfall für Speicherkarten-formatierte Geräte) oder es ist im MBR-Format.
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);
Sobald Sie die BPB, die Sie brauchen, um zu bestimmen, was Fett-Format ist (FAT12/FAT16/FAT32) und dann daraus die Cluster-Größe herausziehen.
Wie Sie das oben in C# tun, liegt an Ihnen. Ich sehe in der Storage Manager-Referenz kann es auf die Partitionsebene gehen und Sie können den Partitionstyp abfragen. Das wird Ihnen den FAT-Typ sagen, so dass Sie es nicht herausfinden müssen.