winapi_ui_automation/um/
wincodecsdk.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6use ctypes::{c_uchar, c_ulong};
7use shared::guiddef::{GUID, REFGUID};
8use shared::minwindef::{BOOL, BYTE, DWORD, UINT, ULONG};
9use shared::wtypes::{BSTR, CLIPFORMAT};
10use um::oaidl::LPSAFEARRAY;
11use um::objidl::{IPersistStream, IPersistStreamVtbl};
12use um::objidlbase::{IEnumUnknown, IStream};
13use um::ocidl::{IPropertyBag2, PROPBAG2};
14use um::propidl::PROPVARIANT;
15use um::unknwnbase::{IUnknown, IUnknownVtbl};
16use um::wincodec::{
17    IWICComponentInfo, IWICComponentInfoVtbl, IWICEnumMetadataItem, IWICImagingFactory,
18    IWICImagingFactoryVtbl, IWICMetadataQueryReader, IWICMetadataQueryWriter,
19};
20use um::winnt::{HRESULT, ULARGE_INTEGER, WCHAR};
21DEFINE_GUID!{GUID_MetadataFormatUnknown,
22    0xa45e592f, 0x9078, 0x4a7c, 0xad, 0xb5, 0x4e, 0xdc, 0x4f, 0xd6, 0x1b, 0x1f}
23DEFINE_GUID!{GUID_MetadataFormatIfd,
24    0x537396c6, 0x2d8a, 0x4bb6, 0x9b, 0xf8, 0x2f, 0x0a, 0x8e, 0x2a, 0x3a, 0xdf}
25DEFINE_GUID!{GUID_MetadataFormatSubIfd,
26    0x58a2e128, 0x2db9, 0x4e57, 0xbb, 0x14, 0x51, 0x77, 0x89, 0x1e, 0xd3, 0x31}
27DEFINE_GUID!{GUID_MetadataFormatExif,
28    0x1c3c4f9d, 0xb84a, 0x467d, 0x94, 0x93, 0x36, 0xcf, 0xbd, 0x59, 0xea, 0x57}
29DEFINE_GUID!{GUID_MetadataFormatGps,
30    0x7134ab8a, 0x9351, 0x44ad, 0xaf, 0x62, 0x44, 0x8d, 0xb6, 0xb5, 0x02, 0xec}
31DEFINE_GUID!{GUID_MetadataFormatInterop,
32    0xed686f8e, 0x681f, 0x4c8b, 0xbd, 0x41, 0xa8, 0xad, 0xdb, 0xf6, 0xb3, 0xfc}
33DEFINE_GUID!{GUID_MetadataFormatApp0,
34    0x79007028, 0x268d, 0x45d6, 0xa3, 0xc2, 0x35, 0x4e, 0x6a, 0x50, 0x4b, 0xc9}
35DEFINE_GUID!{GUID_MetadataFormatApp1,
36    0x8fd3dfc3, 0xf951, 0x492b, 0x81, 0x7f, 0x69, 0xc2, 0xe6, 0xd9, 0xa5, 0xb0}
37DEFINE_GUID!{GUID_MetadataFormatApp13,
38    0x326556a2, 0xf502, 0x4354, 0x9c, 0xc0, 0x8e, 0x3f, 0x48, 0xea, 0xf6, 0xb5}
39DEFINE_GUID!{GUID_MetadataFormatIPTC,
40    0x4fab0914, 0xe129, 0x4087, 0xa1, 0xd1, 0xbc, 0x81, 0x2d, 0x45, 0xa7, 0xb5}
41DEFINE_GUID!{GUID_MetadataFormatIRB,
42    0x16100d66, 0x8570, 0x4bb9, 0xb9, 0x2d, 0xfd, 0xa4, 0xb2, 0x3e, 0xce, 0x67}
43DEFINE_GUID!{GUID_MetadataFormat8BIMIPTC,
44    0x0010568c, 0x0852, 0x4e6a, 0xb1, 0x91, 0x5c, 0x33, 0xac, 0x5b, 0x04, 0x30}
45DEFINE_GUID!{GUID_MetadataFormat8BIMResolutionInfo,
46    0x739f305d, 0x81db, 0x43cb, 0xac, 0x5e, 0x55, 0x01, 0x3e, 0xf9, 0xf0, 0x03}
47DEFINE_GUID!{GUID_MetadataFormat8BIMIPTCDigest,
48    0x1ca32285, 0x9ccd, 0x4786, 0x8b, 0xd8, 0x79, 0x53, 0x9d, 0xb6, 0xa0, 0x06}
49DEFINE_GUID!{GUID_MetadataFormatXMP,
50    0xbb5acc38, 0xf216, 0x4cec, 0xa6, 0xc5, 0x5f, 0x6e, 0x73, 0x97, 0x63, 0xa9}
51DEFINE_GUID!{GUID_MetadataFormatThumbnail,
52    0x243dcee9, 0x8703, 0x40ee, 0x8e, 0xf0, 0x22, 0xa6, 0x00, 0xb8, 0x05, 0x8c}
53DEFINE_GUID!{GUID_MetadataFormatChunktEXt,
54    0x568d8936, 0xc0a9, 0x4923, 0x90, 0x5d, 0xdf, 0x2b, 0x38, 0x23, 0x8f, 0xbc}
55DEFINE_GUID!{GUID_MetadataFormatXMPStruct,
56    0x22383cf1, 0xed17, 0x4e2e, 0xaf, 0x17, 0xd8, 0x5b, 0x8f, 0x6b, 0x30, 0xd0}
57DEFINE_GUID!{GUID_MetadataFormatXMPBag,
58    0x833cca5f, 0xdcb7, 0x4516, 0x80, 0x6f, 0x65, 0x96, 0xab, 0x26, 0xdc, 0xe4}
59DEFINE_GUID!{GUID_MetadataFormatXMPSeq,
60    0x63e8df02, 0xeb6c, 0x456c, 0xa2, 0x24, 0xb2, 0x5e, 0x79, 0x4f, 0xd6, 0x48}
61DEFINE_GUID!{GUID_MetadataFormatXMPAlt,
62    0x7b08a675, 0x91aa, 0x481b, 0xa7, 0x98, 0x4d, 0xa9, 0x49, 0x08, 0x61, 0x3b}
63DEFINE_GUID!{GUID_MetadataFormatLSD,
64    0xe256031e, 0x6299, 0x4929, 0xb9, 0x8d, 0x5a, 0xc8, 0x84, 0xaf, 0xba, 0x92}
65DEFINE_GUID!{GUID_MetadataFormatIMD,
66    0xbd2bb086, 0x4d52, 0x48dd, 0x96, 0x77, 0xdb, 0x48, 0x3e, 0x85, 0xae, 0x8f}
67DEFINE_GUID!{GUID_MetadataFormatGCE,
68    0x2a25cad8, 0xdeeb, 0x4c69, 0xa7, 0x88, 0x0e, 0xc2, 0x26, 0x6d, 0xca, 0xfd}
69DEFINE_GUID!{GUID_MetadataFormatAPE,
70    0x2e043dc2, 0xc967, 0x4e05, 0x87, 0x5e, 0x61, 0x8b, 0xf6, 0x7e, 0x85, 0xc3}
71DEFINE_GUID!{GUID_MetadataFormatJpegChrominance,
72    0xf73d0dcf, 0xcec6, 0x4f85, 0x9b, 0x0e, 0x1c, 0x39, 0x56, 0xb1, 0xbe, 0xf7}
73DEFINE_GUID!{GUID_MetadataFormatJpegLuminance,
74    0x86908007, 0xedfc, 0x4860, 0x8d, 0x4b, 0x4e, 0xe6, 0xe8, 0x3e, 0x60, 0x58}
75DEFINE_GUID!{GUID_MetadataFormatJpegComment,
76    0x220e5f33, 0xafd3, 0x474e, 0x9d, 0x31, 0x7d, 0x4f, 0xe7, 0x30, 0xf5, 0x57}
77DEFINE_GUID!{GUID_MetadataFormatGifComment,
78    0xc4b6e0e0, 0xcfb4, 0x4ad3, 0xab, 0x33, 0x9a, 0xad, 0x23, 0x55, 0xa3, 0x4a}
79DEFINE_GUID!{GUID_MetadataFormatChunkgAMA,
80    0xf00935a5, 0x1d5d, 0x4cd1, 0x81, 0xb2, 0x93, 0x24, 0xd7, 0xec, 0xa7, 0x81}
81DEFINE_GUID!{GUID_MetadataFormatChunkbKGD,
82    0xe14d3571, 0x6b47, 0x4dea, 0xb6, 0x0a, 0x87, 0xce, 0x0a, 0x78, 0xdf, 0xb7}
83DEFINE_GUID!{GUID_MetadataFormatChunkiTXt,
84    0xc2bec729, 0x0b68, 0x4b77, 0xaa, 0x0e, 0x62, 0x95, 0xa6, 0xac, 0x18, 0x14}
85DEFINE_GUID!{GUID_MetadataFormatChunkcHRM,
86    0x9db3655b, 0x2842, 0x44b3, 0x80, 0x67, 0x12, 0xe9, 0xb3, 0x75, 0x55, 0x6a}
87DEFINE_GUID!{GUID_MetadataFormatChunkhIST,
88    0xc59a82da, 0xdb74, 0x48a4, 0xbd, 0x6a, 0xb6, 0x9c, 0x49, 0x31, 0xef, 0x95}
89DEFINE_GUID!{GUID_MetadataFormatChunkiCCP,
90    0xeb4349ab, 0xb685, 0x450f, 0x91, 0xb5, 0xe8, 0x02, 0xe8, 0x92, 0x53, 0x6c}
91DEFINE_GUID!{GUID_MetadataFormatChunksRGB,
92    0xc115fd36, 0xcc6f, 0x4e3f, 0x83, 0x63, 0x52, 0x4b, 0x87, 0xc6, 0xb0, 0xd9}
93DEFINE_GUID!{GUID_MetadataFormatChunktIME,
94    0x6b00ae2d, 0xe24b, 0x460a, 0x98, 0xb6, 0x87, 0x8b, 0xd0, 0x30, 0x72, 0xfd}
95DEFINE_GUID!{GUID_MetadataFormatDds,
96    0x4a064603, 0x8c33, 0x4e60, 0x9c, 0x29, 0x13, 0x62, 0x31, 0x70, 0x2d, 0x08}
97DEFINE_GUID!{CLSID_WICUnknownMetadataReader,
98    0x699745c2, 0x5066, 0x4b82, 0xa8, 0xe3, 0xd4, 0x04, 0x78, 0xdb, 0xec, 0x8c}
99DEFINE_GUID!{CLSID_WICUnknownMetadataWriter,
100    0xa09cca86, 0x27ba, 0x4f39, 0x90, 0x53, 0x12, 0x1f, 0xa4, 0xdc, 0x08, 0xfc}
101DEFINE_GUID!{CLSID_WICApp0MetadataWriter,
102    0xf3c633a2, 0x46c8, 0x498e, 0x8f, 0xbb, 0xcc, 0x6f, 0x72, 0x1b, 0xbc, 0xde}
103DEFINE_GUID!{CLSID_WICApp0MetadataReader,
104    0x43324b33, 0xa78f, 0x480f, 0x91, 0x11, 0x96, 0x38, 0xaa, 0xcc, 0xc8, 0x32}
105DEFINE_GUID!{CLSID_WICApp1MetadataWriter,
106    0xee366069, 0x1832, 0x420f, 0xb3, 0x81, 0x04, 0x79, 0xad, 0x06, 0x6f, 0x19}
107DEFINE_GUID!{CLSID_WICApp1MetadataReader,
108    0xdde33513, 0x774e, 0x4bcd, 0xae, 0x79, 0x02, 0xf4, 0xad, 0xfe, 0x62, 0xfc}
109DEFINE_GUID!{CLSID_WICApp13MetadataWriter,
110    0x7b19a919, 0xa9d6, 0x49e5, 0xbd, 0x45, 0x02, 0xc3, 0x4e, 0x4e, 0x4c, 0xd5}
111DEFINE_GUID!{CLSID_WICApp13MetadataReader,
112    0xaa7e3c50, 0x864c, 0x4604, 0xbc, 0x04, 0x8b, 0x0b, 0x76, 0xe6, 0x37, 0xf6}
113DEFINE_GUID!{CLSID_WICIfdMetadataReader,
114    0x8f914656, 0x9d0a, 0x4eb2, 0x90, 0x19, 0x0b, 0xf9, 0x6d, 0x8a, 0x9e, 0xe6}
115DEFINE_GUID!{CLSID_WICIfdMetadataWriter,
116    0xb1ebfc28, 0xc9bd, 0x47a2, 0x8d, 0x33, 0xb9, 0x48, 0x76, 0x97, 0x77, 0xa7}
117DEFINE_GUID!{CLSID_WICSubIfdMetadataReader,
118    0x50d42f09, 0xecd1, 0x4b41, 0xb6, 0x5d, 0xda, 0x1f, 0xda, 0xa7, 0x56, 0x63}
119DEFINE_GUID!{CLSID_WICSubIfdMetadataWriter,
120    0x8ade5386, 0x8e9b, 0x4f4c, 0xac, 0xf2, 0xf0, 0x00, 0x87, 0x06, 0xb2, 0x38}
121DEFINE_GUID!{CLSID_WICExifMetadataReader,
122    0xd9403860, 0x297f, 0x4a49, 0xbf, 0x9b, 0x77, 0x89, 0x81, 0x50, 0xa4, 0x42}
123DEFINE_GUID!{CLSID_WICExifMetadataWriter,
124    0xc9a14cda, 0xc339, 0x460b, 0x90, 0x78, 0xd4, 0xde, 0xbc, 0xfa, 0xbe, 0x91}
125DEFINE_GUID!{CLSID_WICGpsMetadataReader,
126    0x3697790b, 0x223b, 0x484e, 0x99, 0x25, 0xc4, 0x86, 0x92, 0x18, 0xf1, 0x7a}
127DEFINE_GUID!{CLSID_WICGpsMetadataWriter,
128    0xcb8c13e4, 0x62b5, 0x4c96, 0xa4, 0x8b, 0x6b, 0xa6, 0xac, 0xe3, 0x9c, 0x76}
129DEFINE_GUID!{CLSID_WICInteropMetadataReader,
130    0xb5c8b898, 0x0074, 0x459f, 0xb7, 0x00, 0x86, 0x0d, 0x46, 0x51, 0xea, 0x14}
131DEFINE_GUID!{CLSID_WICInteropMetadataWriter,
132    0x122ec645, 0xcd7e, 0x44d8, 0xb1, 0x86, 0x2c, 0x8c, 0x20, 0xc3, 0xb5, 0x0f}
133DEFINE_GUID!{CLSID_WICThumbnailMetadataReader,
134    0xfb012959, 0xf4f6, 0x44d7, 0x9d, 0x09, 0xda, 0xa0, 0x87, 0xa9, 0xdb, 0x57}
135DEFINE_GUID!{CLSID_WICThumbnailMetadataWriter,
136    0xd049b20c, 0x5dd0, 0x44fe, 0xb0, 0xb3, 0x8f, 0x92, 0xc8, 0xe6, 0xd0, 0x80}
137DEFINE_GUID!{CLSID_WICIPTCMetadataReader,
138    0x03012959, 0xf4f6, 0x44d7, 0x9d, 0x09, 0xda, 0xa0, 0x87, 0xa9, 0xdb, 0x57}
139DEFINE_GUID!{CLSID_WICIPTCMetadataWriter,
140    0x1249b20c, 0x5dd0, 0x44fe, 0xb0, 0xb3, 0x8f, 0x92, 0xc8, 0xe6, 0xd0, 0x80}
141DEFINE_GUID!{CLSID_WICIRBMetadataReader,
142    0xd4dcd3d7, 0xb4c2, 0x47d9, 0xa6, 0xbf, 0xb8, 0x9b, 0xa3, 0x96, 0xa4, 0xa3}
143DEFINE_GUID!{CLSID_WICIRBMetadataWriter,
144    0x5c5c1935, 0x0235, 0x4434, 0x80, 0xbc, 0x25, 0x1b, 0xc1, 0xec, 0x39, 0xc6}
145DEFINE_GUID!{CLSID_WIC8BIMIPTCMetadataReader,
146    0x0010668c, 0x0801, 0x4da6, 0xa4, 0xa4, 0x82, 0x65, 0x22, 0xb6, 0xd2, 0x8f}
147DEFINE_GUID!{CLSID_WIC8BIMIPTCMetadataWriter,
148    0x00108226, 0xee41, 0x44a2, 0x9e, 0x9c, 0x4b, 0xe4, 0xd5, 0xb1, 0xd2, 0xcd}
149DEFINE_GUID!{CLSID_WIC8BIMResolutionInfoMetadataReader,
150    0x5805137a, 0xe348, 0x4f7c, 0xb3, 0xcc, 0x6d, 0xb9, 0x96, 0x5a, 0x05, 0x99}
151DEFINE_GUID!{CLSID_WIC8BIMResolutionInfoMetadataWriter,
152    0x4ff2fe0e, 0xe74a, 0x4b71, 0x98, 0xc4, 0xab, 0x7d, 0xc1, 0x67, 0x07, 0xba}
153DEFINE_GUID!{CLSID_WIC8BIMIPTCDigestMetadataReader,
154    0x02805f1e, 0xd5aa, 0x415b, 0x82, 0xc5, 0x61, 0xc0, 0x33, 0xa9, 0x88, 0xa6}
155DEFINE_GUID!{CLSID_WIC8BIMIPTCDigestMetadataWriter,
156    0x2db5e62b, 0x0d67, 0x495f, 0x8f, 0x9d, 0xc2, 0xf0, 0x18, 0x86, 0x47, 0xac}
157DEFINE_GUID!{CLSID_WICPngTextMetadataReader,
158    0x4b59afcc, 0xb8c3, 0x408a, 0xb6, 0x70, 0x89, 0xe5, 0xfa, 0xb6, 0xfd, 0xa7}
159DEFINE_GUID!{CLSID_WICPngTextMetadataWriter,
160    0xb5ebafb9, 0x253e, 0x4a72, 0xa7, 0x44, 0x07, 0x62, 0xd2, 0x68, 0x56, 0x83}
161DEFINE_GUID!{CLSID_WICXMPMetadataReader,
162    0x72b624df, 0xae11, 0x4948, 0xa6, 0x5c, 0x35, 0x1e, 0xb0, 0x82, 0x94, 0x19}
163DEFINE_GUID!{CLSID_WICXMPMetadataWriter,
164    0x1765e14e, 0x1bd4, 0x462e, 0xb6, 0xb1, 0x59, 0x0b, 0xf1, 0x26, 0x2a, 0xc6}
165DEFINE_GUID!{CLSID_WICXMPStructMetadataReader,
166    0x01b90d9a, 0x8209, 0x47f7, 0x9c, 0x52, 0xe1, 0x24, 0x4b, 0xf5, 0x0c, 0xed}
167DEFINE_GUID!{CLSID_WICXMPStructMetadataWriter,
168    0x22c21f93, 0x7ddb, 0x411c, 0x9b, 0x17, 0xc5, 0xb7, 0xbd, 0x06, 0x4a, 0xbc}
169DEFINE_GUID!{CLSID_WICXMPBagMetadataReader,
170    0xe7e79a30, 0x4f2c, 0x4fab, 0x8d, 0x00, 0x39, 0x4f, 0x2d, 0x6b, 0xbe, 0xbe}
171DEFINE_GUID!{CLSID_WICXMPBagMetadataWriter,
172    0xed822c8c, 0xd6be, 0x4301, 0xa6, 0x31, 0x0e, 0x14, 0x16, 0xba, 0xd2, 0x8f}
173DEFINE_GUID!{CLSID_WICXMPSeqMetadataReader,
174    0x7f12e753, 0xfc71, 0x43d7, 0xa5, 0x1d, 0x92, 0xf3, 0x59, 0x77, 0xab, 0xb5}
175DEFINE_GUID!{CLSID_WICXMPSeqMetadataWriter,
176    0x6d68d1de, 0xd432, 0x4b0f, 0x92, 0x3a, 0x09, 0x11, 0x83, 0xa9, 0xbd, 0xa7}
177DEFINE_GUID!{CLSID_WICXMPAltMetadataReader,
178    0xaa94dcc2, 0xb8b0, 0x4898, 0xb8, 0x35, 0x00, 0x0a, 0xab, 0xd7, 0x43, 0x93}
179DEFINE_GUID!{CLSID_WICXMPAltMetadataWriter,
180    0x076c2a6c, 0xf78f, 0x4c46, 0xa7, 0x23, 0x35, 0x83, 0xe7, 0x08, 0x76, 0xea}
181DEFINE_GUID!{CLSID_WICLSDMetadataReader,
182    0x41070793, 0x59e4, 0x479a, 0xa1, 0xf7, 0x95, 0x4a, 0xdc, 0x2e, 0xf5, 0xfc}
183DEFINE_GUID!{CLSID_WICLSDMetadataWriter,
184    0x73c037e7, 0xe5d9, 0x4954, 0x87, 0x6a, 0x6d, 0xa8, 0x1d, 0x6e, 0x57, 0x68}
185DEFINE_GUID!{CLSID_WICGCEMetadataReader,
186    0xb92e345d, 0xf52d, 0x41f3, 0xb5, 0x62, 0x08, 0x1b, 0xc7, 0x72, 0xe3, 0xb9}
187DEFINE_GUID!{CLSID_WICGCEMetadataWriter,
188    0xaf95dc76, 0x16b2, 0x47f4, 0xb3, 0xea, 0x3c, 0x31, 0x79, 0x66, 0x93, 0xe7}
189DEFINE_GUID!{CLSID_WICIMDMetadataReader,
190    0x7447a267, 0x0015, 0x42c8, 0xa8, 0xf1, 0xfb, 0x3b, 0x94, 0xc6, 0x83, 0x61}
191DEFINE_GUID!{CLSID_WICIMDMetadataWriter,
192    0x8c89071f, 0x452e, 0x4e95, 0x96, 0x82, 0x9d, 0x10, 0x24, 0x62, 0x71, 0x72}
193DEFINE_GUID!{CLSID_WICAPEMetadataReader,
194    0x1767b93a, 0xb021, 0x44ea, 0x92, 0x0f, 0x86, 0x3c, 0x11, 0xf4, 0xf7, 0x68}
195DEFINE_GUID!{CLSID_WICAPEMetadataWriter,
196    0xbd6edfca, 0x2890, 0x482f, 0xb2, 0x33, 0x8d, 0x73, 0x39, 0xa1, 0xcf, 0x8d}
197DEFINE_GUID!{CLSID_WICJpegChrominanceMetadataReader,
198    0x50b1904b, 0xf28f, 0x4574, 0x93, 0xf4, 0x0b, 0xad, 0xe8, 0x2c, 0x69, 0xe9}
199DEFINE_GUID!{CLSID_WICJpegChrominanceMetadataWriter,
200    0x3ff566f0, 0x6e6b, 0x49d4, 0x96, 0xe6, 0xb7, 0x88, 0x86, 0x69, 0x2c, 0x62}
201DEFINE_GUID!{CLSID_WICJpegLuminanceMetadataReader,
202    0x356f2f88, 0x05a6, 0x4728, 0xb9, 0xa4, 0x1b, 0xfb, 0xce, 0x04, 0xd8, 0x38}
203DEFINE_GUID!{CLSID_WICJpegLuminanceMetadataWriter,
204    0x1d583abc, 0x8a0e, 0x4657, 0x99, 0x82, 0xa3, 0x80, 0xca, 0x58, 0xfb, 0x4b}
205DEFINE_GUID!{CLSID_WICJpegCommentMetadataReader,
206    0x9f66347c, 0x60c4, 0x4c4d, 0xab, 0x58, 0xd2, 0x35, 0x86, 0x85, 0xf6, 0x07}
207DEFINE_GUID!{CLSID_WICJpegCommentMetadataWriter,
208    0xe573236f, 0x55b1, 0x4eda, 0x81, 0xea, 0x9f, 0x65, 0xdb, 0x02, 0x90, 0xd3}
209DEFINE_GUID!{CLSID_WICGifCommentMetadataReader,
210    0x32557d3b, 0x69dc, 0x4f95, 0x83, 0x6e, 0xf5, 0x97, 0x2b, 0x2f, 0x61, 0x59}
211DEFINE_GUID!{CLSID_WICGifCommentMetadataWriter,
212    0xa02797fc, 0xc4ae, 0x418c, 0xaf, 0x95, 0xe6, 0x37, 0xc7, 0xea, 0xd2, 0xa1}
213DEFINE_GUID!{CLSID_WICPngGamaMetadataReader,
214    0x3692ca39, 0xe082, 0x4350, 0x9e, 0x1f, 0x37, 0x04, 0xcb, 0x08, 0x3c, 0xd5}
215DEFINE_GUID!{CLSID_WICPngGamaMetadataWriter,
216    0xff036d13, 0x5d4b, 0x46dd, 0xb1, 0x0f, 0x10, 0x66, 0x93, 0xd9, 0xfe, 0x4f}
217DEFINE_GUID!{CLSID_WICPngBkgdMetadataReader,
218    0x0ce7a4a6, 0x03e8, 0x4a60, 0x9d, 0x15, 0x28, 0x2e, 0xf3, 0x2e, 0xe7, 0xda}
219DEFINE_GUID!{CLSID_WICPngBkgdMetadataWriter,
220    0x68e3f2fd, 0x31ae, 0x4441, 0xbb, 0x6a, 0xfd, 0x70, 0x47, 0x52, 0x5f, 0x90}
221DEFINE_GUID!{CLSID_WICPngItxtMetadataReader,
222    0xaabfb2fa, 0x3e1e, 0x4a8f, 0x89, 0x77, 0x55, 0x56, 0xfb, 0x94, 0xea, 0x23}
223DEFINE_GUID!{CLSID_WICPngItxtMetadataWriter,
224    0x31879719, 0xe751, 0x4df8, 0x98, 0x1d, 0x68, 0xdf, 0xf6, 0x77, 0x04, 0xed}
225DEFINE_GUID!{CLSID_WICPngChrmMetadataReader,
226    0xf90b5f36, 0x367b, 0x402a, 0x9d, 0xd1, 0xbc, 0x0f, 0xd5, 0x9d, 0x8f, 0x62}
227DEFINE_GUID!{CLSID_WICPngChrmMetadataWriter,
228    0xe23ce3eb, 0x5608, 0x4e83, 0xbc, 0xef, 0x27, 0xb1, 0x98, 0x7e, 0x51, 0xd7}
229DEFINE_GUID!{CLSID_WICPngHistMetadataReader,
230    0x877a0bb7, 0xa313, 0x4491, 0x87, 0xb5, 0x2e, 0x6d, 0x05, 0x94, 0xf5, 0x20}
231DEFINE_GUID!{CLSID_WICPngHistMetadataWriter,
232    0x8a03e749, 0x672e, 0x446e, 0xbf, 0x1f, 0x2c, 0x11, 0xd2, 0x33, 0xb6, 0xff}
233DEFINE_GUID!{CLSID_WICPngIccpMetadataReader,
234    0xf5d3e63b, 0xcb0f, 0x4628, 0xa4, 0x78, 0x6d, 0x82, 0x44, 0xbe, 0x36, 0xb1}
235DEFINE_GUID!{CLSID_WICPngIccpMetadataWriter,
236    0x16671e5f, 0x0ce6, 0x4cc4, 0x97, 0x68, 0xe8, 0x9f, 0xe5, 0x01, 0x8a, 0xde}
237DEFINE_GUID!{CLSID_WICPngSrgbMetadataReader,
238    0xfb40360c, 0x547e, 0x4956, 0xa3, 0xb9, 0xd4, 0x41, 0x88, 0x59, 0xba, 0x66}
239DEFINE_GUID!{CLSID_WICPngSrgbMetadataWriter,
240    0xa6ee35c6, 0x87ec, 0x47df, 0x9f, 0x22, 0x1d, 0x5a, 0xad, 0x84, 0x0c, 0x82}
241DEFINE_GUID!{CLSID_WICPngTimeMetadataReader,
242    0xd94edf02, 0xefe5, 0x4f0d, 0x85, 0xc8, 0xf5, 0xa6, 0x8b, 0x30, 0x00, 0xb1}
243DEFINE_GUID!{CLSID_WICPngTimeMetadataWriter,
244    0x1ab78400, 0xb5a3, 0x4d91, 0x8a, 0xce, 0x33, 0xfc, 0xd1, 0x49, 0x9b, 0xe6}
245DEFINE_GUID!{CLSID_WICDdsMetadataReader,
246    0x276c88ca, 0x7533, 0x4a86, 0xb6, 0x76, 0x66, 0xb3, 0x60, 0x80, 0xd4, 0x84}
247DEFINE_GUID!{CLSID_WICDdsMetadataWriter,
248    0xfd688bbd, 0x31ed, 0x4db7, 0xa7, 0x23, 0x93, 0x49, 0x27, 0xd3, 0x83, 0x67}
249ENUM!{enum WICMetadataCreationOptions {
250    WICMetadataCreationDefault = 0,
251    WICMetadataCreationAllowUnknown = WICMetadataCreationDefault,
252    WICMetadataCreationFailUnknown = 0x10000,
253    WICMetadataCreationMask = 0xffff0000,
254}}
255ENUM!{enum WICPersistOptions {
256    WICPersistOptionDefault = 0,
257    WICPersistOptionLittleEndian = 0,
258    WICPersistOptionBigEndian = 0x1,
259    WICPersistOptionStrictFormat = 0x2,
260    WICPersistOptionNoCacheStream = 0x4,
261    WICPersistOptionPreferUTF8 = 0x8,
262    WICPersistOptionMask = 0xffff,
263}}
264RIDL!{#[uuid(0xfeaa2a8d, 0xb3f3, 0x43e4, 0xb2, 0x5c, 0xd1, 0xde, 0x99, 0x0a, 0x1a, 0xe1)]
265interface IWICMetadataBlockReader(IWICMetadataBlockReaderVtbl): IUnknown(IUnknownVtbl) {
266    fn GetContainerFormat(
267        pguidContainerFormat: *mut GUID,
268    ) -> HRESULT,
269    fn GetCount(
270        pcCount: *mut UINT,
271    ) -> HRESULT,
272    fn GetReaderByIndex(
273        ppIMetadataReader: *mut *mut IWICMetadataReader,
274    ) -> HRESULT,
275    fn GetEnumerator(
276        ppIEnumMetadata: *mut IEnumUnknown,
277    ) -> HRESULT,
278}}
279RIDL!{#[uuid(0x08fb9676, 0xb444, 0x41e8, 0x8d, 0xbe, 0x6a, 0x53, 0xa5, 0x42, 0xbf, 0xf1)]
280interface IWICMetadataBlockWriter(IWICMetadataBlockWriterVtbl):
281    IWICMetadataBlockReader(IWICMetadataBlockReaderVtbl) {
282    fn InitializeFromBlockReader(
283        pIMDBlockReader: *mut IWICMetadataBlockReader,
284    ) -> HRESULT,
285    fn GetWriterByIndex(
286        ppIMetadataWriter: *mut *mut IWICMetadataWriter,
287    ) -> HRESULT,
288    fn AddWriter(
289        pIMetadataWriter: *mut IWICMetadataWriter,
290    ) -> HRESULT,
291    fn SetWriterByIndex(
292        pIMetadataWriter: *mut IWICMetadataWriter,
293    ) -> HRESULT,
294    fn RemoveWriterByIndex(
295        nIndex: UINT,
296    ) -> HRESULT,
297}}
298RIDL!{#[uuid(0x9204fe99, 0xd8fc, 0x4fd5, 0xa0, 0x01, 0x95, 0x36, 0xb0, 0x67, 0xa8, 0x99)]
299interface IWICMetadataReader(IWICMetadataReaderVtbl): IUnknown(IUnknownVtbl) {
300    fn GetMetadataFormat(
301        pguidMetadataFormat: *mut GUID,
302    ) -> HRESULT,
303    fn GetMetadataHandlerInfo(
304        ppIHandler: *mut *mut IWICMetadataHandlerInfo,
305    ) -> HRESULT,
306    fn GetCount(
307        pcCount: *mut UINT,
308    ) -> HRESULT,
309    fn GetValueByIndex(
310        nIndex: UINT,
311        pvarSchema: *mut PROPVARIANT,
312        pvarId: *mut PROPVARIANT,
313        pvarValue: *mut PROPVARIANT,
314    ) -> HRESULT,
315    fn GetValue(
316        pvarSchema: *const PROPVARIANT,
317        pvarId: *const PROPVARIANT,
318        pvarValue: *mut PROPVARIANT,
319    ) -> HRESULT,
320    fn GetEnumerator(
321        ppIEnumMetadata: *mut *mut IWICEnumMetadataItem,
322    ) -> HRESULT,
323}}
324RIDL!{#[uuid(0xf7836e16, 0x3be0, 0x470b, 0x86, 0xbb, 0x16, 0x0d, 0x0a, 0xec, 0xd7, 0xde)]
325interface IWICMetadataWriter(IWICMetadataWriterVtbl): IWICMetadataReader(IWICMetadataReaderVtbl) {
326    fn SetValue(
327        pvarSchema: *const PROPVARIANT,
328        pvarId: *const PROPVARIANT,
329        pvarValue: *const PROPVARIANT,
330    ) -> HRESULT,
331    fn SetValueByIndex(
332        nIndex: UINT,
333        pvarSchema: *const PROPVARIANT,
334        pvarId: *const PROPVARIANT,
335        pvarValue: *const PROPVARIANT,
336    ) -> HRESULT,
337    fn RemoveValue(
338        pvarSchema: *const PROPVARIANT,
339        pvarId: *const PROPVARIANT,
340    ) -> HRESULT,
341    fn RemoveValueByIndex(
342        nIndex: UINT,
343    ) -> HRESULT,
344}}
345RIDL!{#[uuid(0x449494bc, 0xb468, 0x4927, 0x96, 0xd7, 0xba, 0x90, 0xd3, 0x1a, 0xb5, 0x05)]
346interface IWICStreamProvider(IWICStreamProviderVtbl): IUnknown(IUnknownVtbl) {
347    fn GetStream(
348        ppIStream: *mut *mut IStream,
349    ) -> HRESULT,
350    fn GetPersistOptions(
351        pdwPersistOptions: *mut DWORD,
352    ) -> HRESULT,
353    fn GetPreferredVendorGUID(
354        pguidPreferredVendor: *mut GUID,
355    ) -> HRESULT,
356    fn RefreshStream() -> HRESULT,
357}}
358RIDL!{#[uuid(0x00675040, 0x6908, 0x45f8, 0x86, 0xa3, 0x49, 0xc7, 0xdf, 0xd6, 0xd9, 0xad)]
359interface IWICPersistStream(IWICPersistStreamVtbl): IPersistStream(IPersistStreamVtbl) {
360    fn LoadEx(
361        pIStream: *mut IStream,
362        pguidPreferredVendor: *const GUID,
363        dwPersistOptions: DWORD,
364    ) -> HRESULT,
365    fn SaveEx(
366        pIStream: *mut IStream,
367        dwPersistOptions: DWORD,
368        fClearDirty: BOOL,
369    ) -> HRESULT,
370}}
371RIDL!{#[uuid(0xaba958bf, 0xc672, 0x44d1, 0x8d, 0x61, 0xce, 0x6d, 0xf2, 0xe6, 0x82, 0xc2)]
372interface IWICMetadataHandlerInfo(IWICMetadataHandlerInfoVtbl):
373    IWICComponentInfo(IWICComponentInfoVtbl) {
374    fn GetMetadataFormat(
375        pguidMetadataFormat: *mut GUID,
376    ) -> HRESULT,
377    fn GetContainerFormats(
378        cContainerFormats: UINT,
379        pguidContainerFormats: *mut GUID,
380        pcchActual: *mut UINT,
381    ) -> HRESULT,
382    fn GetDeviceManufacturer(
383        cchDeviceManufacturer: UINT,
384        wzDeviceManufacturer: *mut WCHAR,
385        pcchActual: *mut UINT,
386    ) -> HRESULT,
387    fn GetDeviceModels(
388        cchDeviceModels: UINT,
389        wzDeviceModels: *mut WCHAR,
390        pcchActual: *mut UINT,
391    ) -> HRESULT,
392    fn DoesRequireFullStream(
393        pfRequiresFullStream: *mut BOOL,
394    ) -> HRESULT,
395    fn DoesSupportPadding(
396        pfSupportsPadding: *mut BOOL,
397    ) -> HRESULT,
398    fn DoesRequireFixedSize(
399        pfFixedSize: *mut BOOL,
400    ) -> HRESULT,
401}}
402STRUCT!{struct WICMetadataPattern {
403    Position: ULARGE_INTEGER,
404    Length: ULONG,
405    Pattern: *mut BYTE,
406    Mask: *mut BYTE,
407    DataOffset: ULARGE_INTEGER,
408}}
409RIDL!{#[uuid(0xeebf1f5b, 0x07c1, 0x4447, 0xa3, 0xab, 0x22, 0xac, 0xaf, 0x78, 0xa8, 0x04)]
410interface IWICMetadataReaderInfo(IWICMetadataReaderInfoVtbl):
411    IWICMetadataHandlerInfo(IWICMetadataHandlerInfoVtbl) {
412    fn GetPatterns(
413        guidContainerFormat: REFGUID,
414        cbSize: UINT,
415        pPattern: *mut WICMetadataPattern,
416        pcCount: *mut UINT,
417        pcbActual: *mut UINT,
418    ) -> HRESULT,
419    fn MatchesPattern(
420        guidContainerFormat: REFGUID,
421        pIStream: *mut IStream,
422        pfMatches: *mut BOOL,
423    ) -> HRESULT,
424    fn CreateInstance(
425        ppIReader: *mut *mut IWICMetadataReader,
426    ) -> HRESULT,
427}}
428STRUCT!{struct WICMetadataHeader {
429    Position: ULARGE_INTEGER,
430    Length: ULONG,
431    Header: *mut BYTE,
432    DataOffset: ULARGE_INTEGER,
433}}
434RIDL!{#[uuid(0xb22e3fba, 0x3925, 0x4323, 0xb5, 0xc1, 0x9e, 0xbf, 0xc4, 0x30, 0xf2, 0x36)]
435interface IWICMetadataWriterInfo(IWICMetadataWriterInfoVtbl):
436    IWICMetadataHandlerInfo(IWICMetadataHandlerInfoVtbl) {
437    fn GetHeader(
438        guidContainerFormat: REFGUID,
439        cbSize: UINT,
440        pHeader: *mut WICMetadataHeader,
441        pcbActual: *mut UINT,
442    ) -> HRESULT,
443    fn CreateInstance(
444        ppIWriter: *mut *mut IWICMetadataWriter,
445    ) -> HRESULT,
446}}
447RIDL!{#[uuid(0x412d0c3a, 0x9650, 0x44fa, 0xaf, 0x5b, 0xdd, 0x2a, 0x06, 0xc8, 0xe8, 0xfb)]
448interface IWICComponentFactory(IWICComponentFactoryVtbl):
449    IWICImagingFactory(IWICImagingFactoryVtbl) {
450    fn CreateMetadataReader(
451        guidMetadataFormat: REFGUID,
452        pguidVendor: *const GUID,
453        dwOptions: DWORD,
454        pIStream: *mut IStream,
455        ppIReader: *mut *mut IWICMetadataReader,
456    ) -> HRESULT,
457    fn CreateMetadataReaderFromContainer(
458        guidContainerFormat: REFGUID,
459        pguidVendor: *const GUID,
460        dwOptions: DWORD,
461        pIStream: *mut IStream,
462        ppIReader: *mut *mut IWICMetadataReader,
463    ) -> HRESULT,
464    fn CreateMetadataWriter(
465        guidMetadataFormat: REFGUID,
466        pguidVendor: *const GUID,
467        dwMetadataOptions: DWORD,
468        ppIWriter: *mut *mut IWICMetadataWriter,
469    ) -> HRESULT,
470    fn CreateMetadataWriterFromReader(
471        pIReader: *mut IWICMetadataReader,
472        pguidVendor: *const GUID,
473        ppIWriter: *mut *mut IWICMetadataWriter,
474    ) -> HRESULT,
475    fn CreateQueryReaderFromBlockReader(
476        pIBlockReader: *mut IWICMetadataBlockReader,
477        ppIQueryReader: *mut *mut IWICMetadataQueryReader,
478    ) -> HRESULT,
479    fn CreateQueryWriterFromBlockWriter(
480        pIBlockWriter: *mut IWICMetadataBlockWriter,
481        ppIQueryWriter: *mut *mut IWICMetadataQueryWriter,
482    ) -> HRESULT,
483    fn CreateEncoderPropertyBag(
484        ppropOptions: *mut PROPBAG2,
485        cCount: UINT,
486        ppIPropertyBag: *mut *mut IPropertyBag2,
487    ) -> HRESULT,
488}}
489extern "system" {
490    pub fn WICMatchMetadataContent(
491        guidContainerFormat: REFGUID,
492        pguidVendor: *const GUID,
493        pIStream: *mut IStream,
494        pguidMetadataFormat: *mut GUID,
495    ) -> HRESULT;
496    pub fn WICSerializeMetadataContent(
497        guidContainerFormat: REFGUID,
498        pIWriter: *mut IWICMetadataWriter,
499        dwPersistOptions: DWORD,
500        pIStream: *mut IStream,
501    ) -> HRESULT;
502    pub fn WICGetMetadataContentSize(
503        guidContainerFormat: REFGUID,
504        pIWriter: *mut IWICMetadataWriter,
505        pcbSize: *mut ULARGE_INTEGER,
506    ) -> HRESULT;
507    pub fn BSTR_UserSize(
508        pFlags: *mut c_ulong,
509        Offset: c_ulong,
510        pBstr: *mut BSTR,
511    ) -> c_ulong;
512    pub fn BSTR_UserMarshal(
513        pFlags: *mut c_ulong,
514        pBuffer: *mut c_uchar,
515        pBstr: *mut BSTR,
516    ) -> *mut c_uchar;
517    pub fn BSTR_UserUnmarshal(
518        pFlags: *mut c_ulong,
519        pBuffer: *mut c_uchar,
520        pBstr: *mut BSTR,
521    ) -> *mut c_uchar;
522    pub fn BSTR_UserFree(
523        pFlags: *mut c_ulong,
524        pBstr: *mut BSTR,
525    );
526    pub fn CLIPFORMAT_UserSize(
527        pFlags: *mut c_ulong,
528        Offset: c_ulong,
529        pCF: *mut CLIPFORMAT,
530    ) -> c_ulong;
531    pub fn CLIPFORMAT_UserMarshal(
532        pFlags: *mut c_ulong,
533        pBuffer: *mut c_uchar,
534        pCF: *mut CLIPFORMAT,
535    ) -> *mut c_uchar;
536    pub fn CLIPFORMAT_UserUnmarshal(
537        pFlags: *mut c_ulong,
538        pBuffer: *mut c_uchar,
539        pCF: *mut CLIPFORMAT,
540    ) -> *mut c_uchar;
541    pub fn CLIPFORMAT_UserFree(
542        pFlags: *mut c_ulong,
543        pCF: *mut CLIPFORMAT,
544    );
545    pub fn LPSAFEARRAY_UserSize(
546        pFlags: *mut c_ulong,
547        Offset: c_ulong,
548        phBmp: *mut LPSAFEARRAY,
549    ) -> c_ulong;
550    pub fn LPSAFEARRAY_UserMarshal(
551        pFlags: *mut c_ulong,
552        pBuffer: *mut c_uchar,
553        pBstr: *mut LPSAFEARRAY,
554    ) -> *mut c_uchar;
555    pub fn LPSAFEARRAY_UserUnmarshal(
556        pFlags: *mut c_ulong,
557        pBuffer: *mut c_uchar,
558        pBstr: *mut LPSAFEARRAY,
559    ) -> *mut c_uchar;
560    pub fn LPSAFEARRAY_UserFree(
561        pFlags: *mut c_ulong,
562        pBstr: *mut LPSAFEARRAY,
563    );
564}