2016-12-01 64 views
-2

我創建了不同格式的vhd(NTFS,FAT32,FAT16,HFS +),我沒有找到獲得NTFS分區的$ Volume_name偏移量的方式,再加上我想將字符串轉換爲$ Volume_name。通過觀察NTFS分區的$ Volume_name,我可以看到該字符串被剪切(每個字符後面都有一個空字符示例,我們在volume_name的十六進制中讀取的將是「WIN10EN」,而在hexa「57494e3130454e」中if我們轉到$ volume_name的偏移量,我們將用一個十六進制編輯器570049004e003100300045004e及其表示ascii「WIN 1 0 EN」。 因此我的問題是有一個命令來獲得$ Volume_name的偏移量(偏移量是字節15776或0x3DA0)? 是否有一個字符串轉換來命名一個卷?如何用Objective-C或perl,python,ruby,sh,applescript重命名卷(分區)?

+0

從[虛擬硬盤圖像格式規格](http://download.microsoft.com/download/f/f/e/ffef50a5-07dd-4cf8-aaa3-442c0673a029/Virtual%20Hard% 20Disk%20Format%20Spec_10_18_06.doc),我認爲卷名是Unicode編碼爲UTF-16,這將解釋您在字符串中看到的「剪切」字符。 Python有廣泛的Unicode支持(我不知道所有其他的)。 – martineau

+0

感謝您的澄清,問題不是特定於vhd,所有卷(NTFS)(NTFS中的分區)具有相同的結構並具有$ Volume_name(這是分區的名稱)獲取$ Volume_name偏移量並將字符串轉換爲重命名。 謝謝你花在這個主題上的時間。 – deek5

回答

-1

在創建一個Vhd當然有格式化的分區(我的Vhd創建了一個獨特的MBR分區)根據所選的diskutil格式系統根據diskutil分區的名稱限制爲NTFS名稱都是大寫字母,對於MSDOS FAT同義詞。只要使用NTFS或FAT分區,您就可以使用帶小寫字母的名稱。因此,格式化NTFS分區後,我使用「newfs_ufsd_NTFS -v」重新命名大寫字母和小寫字母。對於FAT,我將newsfsms(版本226 https://opensource.apple.com/tarballs/msdosfs/msdosfs-226.tar.gz)newfs_msdos.c文件更改爲「mklabel (u_int8_t** * dest, Const char * src)」中的第1320行,其中我們找到「c = * src? Toupper (* srC++): '';"更改爲」c = * src? * SrC++: '';「**,這使得可以使用大寫字母或小寫字母。解決方案,我找不到如何從NTFS分區獲得$ Volume_name偏移量的答案。

1

你好,要在Mac上用Xcode重命名卷,最簡單的方法是使用 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; 
}