1 /***********************************************************************\
2 *                                winver.d                               *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.winver;
12 pragma(lib, "version");
13 
14 private import win32.windef;
15 
16 // FIXME: type weirdness
17 enum {
18 	VS_FILE_INFO    =  16,
19 	VS_VERSION_INFO =   1,
20 	VS_USER_DEFINED = 100
21 }
22 
23 enum {
24 	VS_FFI_SIGNATURE     = 0xFEEF04BD,
25 	VS_FFI_STRUCVERSION  =    0x10000,
26 	VS_FFI_FILEFLAGSMASK =       0x3F
27 }
28 
29 enum {
30 	VS_FF_DEBUG        =  1,
31 	VS_FF_PRERELEASE   =  2,
32 	VS_FF_PATCHED      =  4,
33 	VS_FF_PRIVATEBUILD =  8,
34 	VS_FF_INFOINFERRED = 16,
35 	VS_FF_SPECIALBUILD = 32
36 }
37 
38 enum {
39 	VOS_UNKNOWN       =       0,
40 	VOS_DOS           = 0x10000,
41 	VOS_OS216         = 0x20000,
42 	VOS_OS232         = 0x30000,
43 	VOS_NT            = 0x40000,
44 	VOS__BASE         =       0,
45 	VOS__WINDOWS16    =       1,
46 	VOS__PM16         =       2,
47 	VOS__PM32         =       3,
48 	VOS__WINDOWS32    =       4,
49 	VOS_DOS_WINDOWS16 = 0x10001,
50 	VOS_DOS_WINDOWS32 = 0x10004,
51 	VOS_OS216_PM16    = 0x20002,
52 	VOS_OS232_PM32    = 0x30003,
53 	VOS_NT_WINDOWS32  = 0x40004
54 }
55 
56 enum {
57 	VFT_UNKNOWN    = 0,
58 	VFT_APP        = 1,
59 	VFT_DLL        = 2,
60 	VFT_DRV        = 3,
61 	VFT_FONT       = 4,
62 	VFT_VXD        = 5,
63 	VFT_STATIC_LIB = 7
64 }
65 
66 enum {
67 	VFT2_UNKNOWN         =  0,
68 	VFT2_DRV_PRINTER     =  1,
69 	VFT2_DRV_KEYBOARD    =  2,
70 	VFT2_DRV_LANGUAGE    =  3,
71 	VFT2_DRV_DISPLAY     =  4,
72 	VFT2_DRV_MOUSE       =  5,
73 	VFT2_DRV_NETWORK     =  6,
74 	VFT2_DRV_SYSTEM      =  7,
75 	VFT2_DRV_INSTALLABLE =  8,
76 	VFT2_DRV_SOUND       =  9,
77 	VFT2_DRV_COMM        = 10,
78 	VFT2_DRV_INPUTMETHOD = 11,
79 	VFT2_FONT_RASTER     =  1,
80 	VFT2_FONT_VECTOR     =  2,
81 	VFT2_FONT_TRUETYPE   =  3
82 }
83 
84 enum : DWORD {
85 	VFFF_ISSHAREDFILE = 1
86 }
87 
88 enum : DWORD {
89 	VFF_CURNEDEST    = 1,
90 	VFF_FILEINUSE    = 2,
91 	VFF_BUFFTOOSMALL = 4
92 }
93 
94 enum : DWORD {
95 	VIFF_FORCEINSTALL  = 1,
96 	VIFF_DONTDELETEOLD
97 }
98 
99 enum {
100 	VIF_TEMPFILE         = 0x00001,
101 	VIF_MISMATCH         = 0x00002,
102 	VIF_SRCOLD           = 0x00004,
103 	VIF_DIFFLANG         = 0x00008,
104 	VIF_DIFFCODEPG       = 0x00010,
105 	VIF_DIFFTYPE         = 0x00020,
106 	VIF_WRITEPROT        = 0x00040,
107 	VIF_FILEINUSE        = 0x00080,
108 	VIF_OUTOFSPACE       = 0x00100,
109 	VIF_ACCESSVIOLATION  = 0x00200,
110 	VIF_SHARINGVIOLATION = 0x00400,
111 	VIF_CANNOTCREATE     = 0x00800,
112 	VIF_CANNOTDELETE     = 0x01000,
113 	VIF_CANNOTRENAME     = 0x02000,
114 	VIF_CANNOTDELETECUR  = 0x04000,
115 	VIF_OUTOFMEMORY      = 0x08000,
116 	VIF_CANNOTREADSRC    = 0x10000,
117 	VIF_CANNOTREADDST    = 0x20000,
118 	VIF_BUFFTOOSMALL     = 0x40000
119 }
120 
121 struct VS_FIXEDFILEINFO {
122 	DWORD dwSignature;
123 	DWORD dwStrucVersion;
124 	DWORD dwFileVersionMS;
125 	DWORD dwFileVersionLS;
126 	DWORD dwProductVersionMS;
127 	DWORD dwProductVersionLS;
128 	DWORD dwFileFlagsMask;
129 	DWORD dwFileFlags;
130 	DWORD dwFileOS;
131 	DWORD dwFileType;
132 	DWORD dwFileSubtype;
133 	DWORD dwFileDateMS;
134 	DWORD dwFileDateLS;
135 }
136 
137 extern (Windows) {
138 	DWORD VerFindFileA(DWORD, LPCSTR, LPCSTR, LPCSTR, LPSTR, PUINT, LPSTR,
139 	  PUINT);
140 	DWORD VerFindFileW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, PUINT, LPWSTR,
141 	  PUINT);
142 	DWORD VerInstallFileA(DWORD, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPSTR,
143 	  PUINT);
144 	DWORD VerInstallFileW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR,
145 	  LPWSTR, PUINT);
146 	DWORD GetFileVersionInfoSizeA(LPCSTR, PDWORD);
147 	DWORD GetFileVersionInfoSizeW(LPCWSTR, PDWORD);
148 	BOOL GetFileVersionInfoA(LPCSTR, DWORD, DWORD, PVOID);
149 	BOOL GetFileVersionInfoW(LPCWSTR, DWORD, DWORD, PVOID);
150 	DWORD VerLanguageNameA(DWORD, LPSTR, DWORD);
151 	DWORD VerLanguageNameW(DWORD, LPWSTR, DWORD);
152 	BOOL VerQueryValueA(LPCVOID, LPCSTR, LPVOID*, PUINT);
153 	BOOL VerQueryValueW(LPCVOID, LPCWSTR, LPVOID*, PUINT);
154 }
155 
156 version (Unicode) {
157 	alias VerFindFileW VerFindFile;
158 	alias VerQueryValueW VerQueryValue;
159 	alias VerInstallFileW VerInstallFile;
160 	alias GetFileVersionInfoSizeW GetFileVersionInfoSize;
161 	alias GetFileVersionInfoW GetFileVersionInfo;
162 	alias VerLanguageNameW VerLanguageName;
163 	alias VerQueryValueW VerQueryValue;
164 } else {
165 	alias VerQueryValueA VerQueryValue;
166 	alias VerFindFileA VerFindFile;
167 	alias VerInstallFileA VerInstallFile;
168 	alias GetFileVersionInfoSizeA GetFileVersionInfoSize;
169 	alias GetFileVersionInfoA GetFileVersionInfo;
170 	alias VerLanguageNameA VerLanguageName;
171 	alias VerQueryValueA VerQueryValue;
172 }