Windows 8中支持的VHDX虚拟磁盘格式,以下是虚拟磁盘结构代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
//Structure 1: File Type Identifier struct VHDX_FILE_IDENTIFIER { UINT64 Signature; UINT16 Creator[256]; }; //Structure 2: Header struct VHDX_HEADER { UINT32 Signature; UINT32 Checksum; UINT64 SequenceNumber; GUID FileWriteGuid; GUID DataWriteGuid; GUID LogGuid; UINT16 LogVersion; UINT16 Version; UINT32 LogLength; UINT64 LogOffset; UINT8[502] Reserved; }; //Structure 3: Region Table Header struct VHDX_REGION_TABLE_HEADER { UINT32 Signature; UINT32 Checksum; UINT32 EntryCount; UINT32 Reserved; }; //Structure 4: Region Table Entry struct VHDX_REGION_TABLE_ENTRY { GUID Guid; UINT64 FileOffset; UINT32 Length; UINT32 Required:1; UINT32 Reserved:31; }; //Structure 5: Log Entry Header struct VHDX_LOG_ENTRY_HEADER { UINT32 Signature; UINT32 Checksum; UINT32 EntryLength; UINT32 Tail; UINT64 SequenceNumber; UINT32 DescriptorCount; UINT32 Reserved; GUID LogGuid; UINT64 FlushedFileOffset; UINT64 LastFileOffset; }; //Structure 6: Log Zero Descriptor struct VHDX_LOG_ZERO_DESCRIPTOR { UINT32 ZeroSignature; UINT32 Reserved; UINT64 ZeroLength; UINT64 FileOffset; UINT64 SequenceNumber; }; //Structure 7: Log Data Descriptor struct VHDX_LOG_DATA_DESCRIPTOR { UINT32 DataSignature; UINT32 TrailingBytes; UINT64 LeadingBytes; UINT64 FileOffset; UINT64 SequenceNumber; }; //Structure 8: Log Data Sector struct VHDX_LOG_DATA_SECTOR { UINT32 DataSignature; UINT32 SequenceHigh; UINT8 Data[4084]; UINT32 SequenceLow; }; //Structure 9: BAT Entry struct VHDX_BAT_ENTRY { UINT64 State:3; UINT64 Reserved:17; UINT64 FileOffsetMB:44; }; //Structure 10: Metadata Table Header struct VHDX_METADATA_TABLE_HEADER { UINT64 Signature; UINT16 Reserved; UINT16 EntryCount; UINT32 Reserved2[5]; }; //Structure 11: Metadata Table Entry struct VHDX_METADATA_TABLE_ENTRY { GUID ItemId; UINT32 Offset; UINT32 Length; UINT32 IsUser:1; UINT32 IsVirtualDisk:1; UINT32 IsRequired:1; UINT32 Reserved:29; UINT32 Reserved2; }; //Structure 12: File Parameters Metadata Item struct VHDX_FILE_PARAMETERS { UINT32 BlockSize; UINT32 LeaveBlocksAllocated:1; UINT32 HasParent:1; UINT32 Reserved:30; }; //Structure 13: Virtual Disk Size Metadata Item struct VHDX_VIRTUAL_DISK_SIZE { UINT64 VirtualDiskSize; }; //Structure 14: Page 83 Data Metadata Item struct VHDX_PAGE83_DATA { GUID Page83Data; }; //Structure 15: Logical Sector Size Metadata Item struct VHDX_VIRTUAL_DISK_LOGICAL_SECTOR_SIZE { UINT32 LogicalSectorSize; }; //Structure 16: Logical Sector Size Metadata Item struct VHDX_VIRTUAL_DISK_PHYSICAL_SECTOR_SIZE { UINT32 PhysicalSectorSize; }; //Structure 17: Parent Locator Header struct VHDX_PARENT_LOCATOR_HEADER { GUID LocatorType; UINT16 Reserved; UINT16 KeyValueCount; }; //Structure 18: Parent Locator Entry struct VHDX_PARENT_LOCATOR_ENTRY { UINT32 KeyOffset; UINT32 ValueOffset; UINT16 KeyLength; UINT16 ValueLength; }; |