[project] Rename winvblock__uint16 back to UINT16
[people/sha0/winvblock.git] / src / include / msvhd.h
1 /**
2  * Copyright (C) 2010-2011, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
3  *
4  * This file is part of WinVBlock, originally derived from WinAoE.
5  *
6  * WinVBlock is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * WinVBlock is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 #ifndef WV_M_MSVHD_H_
20 #  define WV_M_MSVHD_H_
21
22 /**
23  * @file
24  *
25  * Microsoft .VHD disk image format specifics.
26  * Structure details from the VHD Image Format Specification Document[1],
27  * kindly provided by Microsoft's Open Source Promise[2].
28  *
29  * [1] http://technet.microsoft.com/en-us/virtualserver/bb676673.aspx
30  * [2] http://www.microsoft.com/interop/osp/default.mspx
31  *
32  */
33
34 /* The .VHD disk image footer format */
35 #ifdef _MSC_VER
36 #  pragma pack(1)
37 #endif
38 struct WV_MSVHD_FOOTER {
39     char cookie[8];
40     byte__array_union(UINT32, features);
41     byte__array_union(UINT32, file_ver);
42     byte__array_union(ULONGLONG, data_offset);
43     byte__array_union(UINT32, timestamp);
44     char creator_app[4];
45     byte__array_union(UINT32, creator_ver);
46     byte__array_union(UINT32, creator_os);
47     byte__array_union(ULONGLONG, orig_size);
48     byte__array_union(ULONGLONG, cur_size);
49     byte__array_union(UINT16, geom_cyls);
50     UCHAR geom_heads;
51     UCHAR geom_sects_per_track;
52     byte__array_union(UINT32, type);
53     byte__array_union(UINT32, checksum);
54     char uid[16];
55     char saved_state;
56     char reserved[427];
57   } __attribute__((__packed__));
58 typedef struct WV_MSVHD_FOOTER WV_S_MSVHD_FOOTER, * WV_SP_MSVHD_FOOTER;
59 #ifdef _MSC_VER
60 #  pragma pack()
61 #endif
62
63 /* Function body in header so user-land utility links without WinVBlock */
64 static void STDCALL
65 msvhd__footer_swap_endian (
66   WV_SP_MSVHD_FOOTER footer_ptr
67  )
68 {
69   byte__rev_array_union ( footer_ptr->features );
70   byte__rev_array_union ( footer_ptr->file_ver );
71   byte__rev_array_union ( footer_ptr->data_offset );
72   byte__rev_array_union ( footer_ptr->timestamp );
73   byte__rev_array_union ( footer_ptr->creator_ver );
74   byte__rev_array_union ( footer_ptr->creator_os );
75   byte__rev_array_union ( footer_ptr->orig_size );
76   byte__rev_array_union ( footer_ptr->cur_size );
77   byte__rev_array_union ( footer_ptr->geom_cyls );
78   byte__rev_array_union ( footer_ptr->type );
79   byte__rev_array_union ( footer_ptr->checksum );
80 }
81
82 #endif  /* WV_M_MSVHD_H_ */