2013-02-13 3 views
1

Étant donné un volume, comment puis-je déterminer s'il est crypté ou non? J'ai trouvé des choses comme DADiskCopyDescription() et getResourceValue de NSURL: forKey: error: qui donnent une mine d'informations, mais pas si le volume est chiffré.Comment déterminer par programme si un disque est crypté sous OS X?

Même s'il n'y a pas d'API publique pour cela, alors la sortie d'extraction d'un outil de ligne de commande fourni avec le système d'exploitation serait acceptable. Le plus proche que j'ai trouvé était 'diskutil info/dev/disk0', mais encore aucune information de cryptage. Annoyingly l'application GUI Disk Utility fournit cette information lorsque vous cliquez sur le bouton info bleu.

Répondre

1

Vous pouvez (ab) utiliser IOKit pour cela. Notez que la propriété CoreStorage Encrypted n'est officiellement définie nulle part, il s'agit donc clairement d'une API non publique. En outre, vous devrez inspecter l'ensemble de l'objet disque que Core Storage offre au système d'exploitation (par exemple, disk1), et non la partition sur laquelle le Core Storage LV réside (par exemple, disk0s2).

const char *bsdDisk = "disk1"; 

DASessionRef session = DASessionCreate(kCFAllocatorDefault); 
DADiskRef disk = DADiskCreateFromBSDName(kCFAllocatorDefault, session, "disk1"); 

io_service_t diskService = DADiskCopyIOMedia(disk); 
CFBooleanRef isEncrypted = IORegistryEntryCreateCFProperty(diskService, 
                  CFSTR("CoreStorage Encrypted"), 
                  kCFAllocatorDefault, 
                  0); 

fprintf(stdout, 
     "%s %s encrypted\n", 
     bsdDisk, 
     (CFBooleanGetValue(isEncrypted)) ? "is" : "is not"); 

CFRelease(isEncrypted); 
IOObjectRelease(diskService); 
CFRelease(disk); 
CFRelease(session); 
+0

Merci - fonctionne comme un charme! –

0

Il ressemble à ces informations sont disponibles à l'aide system_profiler -detailLevel basic.

Questions connexes