2016-12-01 15 views
-2

Я создаю vhd в разных форматах (NTFS, FAT32, FAT16, HFS +), я не нахожу способ получить $ Volume_name смещение раздела NTFS, плюс я хотел бы преобразовать строку в $ Volume_name. Наблюдая за $ Volume_name раздела NTFS, я смог увидеть, что строка вырезана (после каждого символа есть пример с нулевым символом, который мы читаем в шестнадцатеричном имени тома, который будет «WIN10EN» и в hexa «57494e3130454e», если мы переходим к смещению $ volume_name, которое мы будем читать с шестнадцатеричным редактором 570049004e003100300045004e и его представлением ascii "WIN 1 0 EN". Следовательно, мой вопрос: есть ли команда для получения смещения $ Volume_name (смещение в байте 15776 или 0x3DA0)? Есть ли преобразование строк для названия тома?Как переименовать том (раздел) с Objective-C или perl, python, ruby, sh, applescript?

+0

С [Virtual Hard Disk Format Image Specification] (http://download.microsoft.com/download/f/f/e/ffef50a5-07dd-4cf8-aaa3-442c0673a029/Virtual%20Hard% 20Disk% 20Format% 20Spec_10_18_06.doc), я думаю, что имена томов - это Юникод, который был закодирован как UTF-16, что объясняет «вырезанные» символы, которые вы видите в строке. Python имеет обширную поддержку Unicode (я не знаю обо всех остальных). – martineau

+0

Здравствуйте, спасибо за разъяснение, проблема не специфична для vhd, все тома (NTFS) (разделы в NTFS) имеют одинаковую структуру и имеют $ Volume_name (это имя раздела). Получить смещение $ Volume_name и преобразование строки для переименования. Спасибо за ваше время, проведенное на эту тему. – deek5

ответ

-1

В создании Vhd, конечно, есть форматирование раздела (мой Vhd создал уникальный раздел MBR) форматирование с diskutil в соответствии с выбранным системы имена разделов ограничены для NTFS в соответствии с diskutil имена - это буква «Столица», idem для MSDOS FAT. В то время как для разделов NTFS или FAT вы можете использовать имена с маленькой буквой. Поэтому после форматирования для разделов NTFS я использую «newfs_ufsd_NTFS -v» для переименования с помощью буквы «Столица» и маленькой буквы. Для FAT я изменил news_msdos (версия 226 https://opensource.apple.com/tarballs/msdosfs/msdosfs-226.tar.gz) файл newfs_msdos.c на строку 1320 в «mklabel (u_int8_t** * dest, Const char * src)», где мы находим «c = * src? Toupper (* srC++): '';" Изменено на« c = * src? * SrC++: ''; »**, которое позволяет использовать заглавные буквы или маленькие буквы. решение, я не нахожу ответа на то, как получить $ имя_тома смещения из раздела NTFS.

1

Здравствуйте, переименовывать тома с Xcode на Mac, самый простой способ заключается в использовании функциями DiskArbitration и многое другое специально

"void DADiskRename (DADiskRef disk, CFStringRef name, DADiskRenameOptions options, DADiskRenameCallback callback, void * context); 
" 

С пустой Перезвони. Что может дать.

#import <DiskArbitration/DiskArbitration.h> 
#import <Cocoa/Cocoa.h> 



Void MountCallback (DADiskRef disk, DADitererRef dissenter, void * context); 

Void DADiskRename (DADiskRef disk, CFStringRef name, DADiskRenameOptions options, DADiskRenameCallback callback, void * context); 
Int rename (char * argv, char * device) 
Int renomer ((char * argv, char * device) 
{ 

    Const char * deviceName = device; 

    Renom = 1; 

    CFStringRef name = CFStringCreateWithCString (NULL, argv, kCFStringEncodingUTF8); 



    DASessionRef session = DASessionCreate (kCFAllocatorDefault); 

    DADiskRef disk = DADiskCreateFromBSDName (kCFAllocatorDefault, session, deviceName); 

    DADiskRename (disk, name, 0x00000000, MountCallback, (void *) deviceName); 

    DASessionSetDispatchQueue (session, NULL); 

    CFRelease (session); 

    Session = NULL; 

Return EXIT_SUCCESS; 


} 



Void MountCallback (DADiskRef disk, DADitererRef dissenter, void * context) { 

    Return; 
}