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.
6 use shared::basetsd::UINT64;
7 use shared::d3d9::IDirect3DDevice9;
8 use shared::d3d9types::D3DFORMAT;
9 use shared::guiddef::GUID;
10 use shared::minwindef::{BYTE, DWORD, ULONG};
11 use shared::windef::HMONITOR;
12 use um::dxva2api::DXVA2_SampleFormat;
13 use um::unknwnbase::{IUnknown, IUnknownVtbl};
14 use um::winnt::{HRESULT, LUID};
15 DEFINE_GUID!{OPM_GET_CURRENT_HDCP_SRM_VERSION,
16     0x99c5ceff, 0x5f1d, 0x4879, 0x81, 0xc1, 0xc5, 0x24, 0x43, 0xc9, 0x48, 0x2b}
17 DEFINE_GUID!{OPM_GET_CONNECTED_HDCP_DEVICE_INFORMATION,
18     0x0db59d74, 0xa992, 0x492e, 0xa0, 0xbd, 0xc2, 0x3f, 0xda, 0x56, 0x4e, 0x00}
19 DEFINE_GUID!{OPM_GET_ACP_AND_CGMSA_SIGNALING,
20     0x6629a591, 0x3b79, 0x4cf3, 0x92, 0x4a, 0x11, 0xe8, 0xe7, 0x81, 0x16, 0x71}
21 DEFINE_GUID!{OPM_GET_CONNECTOR_TYPE,
22     0x81d0bfd5, 0x6afe, 0x48c2, 0x99, 0xc0, 0x95, 0xa0, 0x8f, 0x97, 0xc5, 0xda}
23 DEFINE_GUID!{OPM_GET_SUPPORTED_PROTECTION_TYPES,
24     0x38f2a801, 0x9a6c, 0x48bb, 0x91, 0x07, 0xb6, 0x69, 0x6e, 0x6f, 0x17, 0x97}
25 DEFINE_GUID!{OPM_GET_VIRTUAL_PROTECTION_LEVEL,
26     0xb2075857, 0x3eda, 0x4d5d, 0x88, 0xdb, 0x74, 0x8f, 0x8c, 0x1a, 0x05, 0x49}
27 DEFINE_GUID!{OPM_GET_ACTUAL_PROTECTION_LEVEL,
28     0x1957210a, 0x7766, 0x452a, 0xb9, 0x9a, 0xd2, 0x7a, 0xed, 0x54, 0xf0, 0x3a}
29 DEFINE_GUID!{OPM_GET_ACTUAL_OUTPUT_FORMAT,
30     0xd7bf1ba3, 0xad13, 0x4f8e, 0xaf, 0x98, 0x0d, 0xcb, 0x3c, 0xa2, 0x04, 0xcc}
31 DEFINE_GUID!{OPM_GET_ADAPTER_BUS_TYPE,
32     0xc6f4d673, 0x6174, 0x4184, 0x8e, 0x35, 0xf6, 0xdb, 0x52, 0x0, 0xbc, 0xba}
33 DEFINE_GUID!{OPM_GET_OUTPUT_ID,
34     0x72cb6df3, 0x244f, 0x40ce, 0xb0, 0x9e, 0x20, 0x50, 0x6a, 0xf6, 0x30, 0x2f}
35 DEFINE_GUID!{OPM_GET_DVI_CHARACTERISTICS,
36     0xa470b3bb, 0x5dd7, 0x4172, 0x83, 0x9c, 0x3d, 0x37, 0x76, 0xe0, 0xeb, 0xf5}
37 DEFINE_GUID!{OPM_GET_CODEC_INFO,
38     0x4f374491, 0x8f5f, 0x4445, 0x9d, 0xba, 0x95, 0x58, 0x8f, 0x6b, 0x58, 0xb4}
39 DEFINE_GUID!{OPM_GET_OUTPUT_HARDWARE_PROTECTION_SUPPORT,
40     0x3b129589, 0x2af8, 0x4ef0, 0x96, 0xa2, 0x70, 0x4a, 0x84, 0x5a, 0x21, 0x8e}
41 DEFINE_GUID!{OPM_SET_PROTECTION_LEVEL,
42     0x9bb9327c, 0x4eb5, 0x4727, 0x9f, 0x00, 0xb4, 0x2b, 0x09, 0x19, 0xc0, 0xda}
43 DEFINE_GUID!{OPM_SET_ACP_AND_CGMSA_SIGNALING,
44     0x09a631a5, 0xd684, 0x4c60, 0x8e, 0x4d, 0xd3, 0xbb, 0x0f, 0x0b, 0xe3, 0xee}
45 DEFINE_GUID!{OPM_SET_HDCP_SRM,
46     0x8b5ef5d1, 0xc30d, 0x44ff, 0x84, 0xa5, 0xea, 0x71, 0xdc, 0xe7, 0x8f, 0x13}
47 DEFINE_GUID!{OPM_SET_PROTECTION_LEVEL_ACCORDING_TO_CSS_DVD,
48     0x39ce333e, 0x4cc0, 0x44ae, 0xbf, 0xcc, 0xda, 0x50, 0xb5, 0xf8, 0x2e, 0x72}
49 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0001 {
50     OPM_OMAC_SIZE = 16,
51     OPM_128_BIT_RANDOM_NUMBER_SIZE = 16,
52     OPM_ENCRYPTED_INITIALIZATION_PARAMETERS_SIZE = 256,
53     OPM_CONFIGURE_SETTING_DATA_SIZE = 4056,
54     OPM_GET_INFORMATION_PARAMETERS_SIZE = 4056,
55     OPM_REQUESTED_INFORMATION_SIZE = 4076,
56     OPM_HDCP_KEY_SELECTION_VECTOR_SIZE = 5,
57     OPM_PROTECTION_TYPE_SIZE = 4,
58     OPM_BUS_TYPE_MASK = 0xffff,
59     OPM_BUS_IMPLEMENTATION_MODIFIER_MASK = 0x7fff,
60 }}
61 ENUM!{enum OPM_VIDEO_OUTPUT_SEMANTICS {
62     OPM_VOS_COPP_SEMANTICS = 0,
63     OPM_VOS_OPM_SEMANTICS = 1,
64     OPM_VOS_OPM_INDIRECT_DISPLAY = 2,
65 }}
66 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0002 {
67     OPM_HDCP_FLAG_NONE = 0,
68     OPM_HDCP_FLAG_REPEATER = 0x1,
69 }}
70 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0003 {
71     OPM_STATUS_NORMAL = 0,
72     OPM_STATUS_LINK_LOST = 0x1,
73     OPM_STATUS_RENEGOTIATION_REQUIRED = 0x2,
74     OPM_STATUS_TAMPERING_DETECTED = 0x4,
75     OPM_STATUS_REVOKED_HDCP_DEVICE_ATTACHED = 0x8,
76 }}
77 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0004 {
78     OPM_CONNECTOR_TYPE_OTHER = -1i32 as u32,
79     OPM_CONNECTOR_TYPE_VGA = 0,
80     OPM_CONNECTOR_TYPE_SVIDEO = 1,
81     OPM_CONNECTOR_TYPE_COMPOSITE_VIDEO = 2,
82     OPM_CONNECTOR_TYPE_COMPONENT_VIDEO = 3,
83     OPM_CONNECTOR_TYPE_DVI = 4,
84     OPM_CONNECTOR_TYPE_HDMI = 5,
85     OPM_CONNECTOR_TYPE_LVDS = 6,
86     OPM_CONNECTOR_TYPE_D_JPN = 8,
87     OPM_CONNECTOR_TYPE_SDI = 9,
88     OPM_CONNECTOR_TYPE_DISPLAYPORT_EXTERNAL = 10,
89     OPM_CONNECTOR_TYPE_DISPLAYPORT_EMBEDDED = 11,
90     OPM_CONNECTOR_TYPE_UDI_EXTERNAL = 12,
91     OPM_CONNECTOR_TYPE_UDI_EMBEDDED = 13,
92     OPM_CONNECTOR_TYPE_RESERVED = 14,
93     OPM_CONNECTOR_TYPE_MIRACAST = 15,
94     OPM_CONNECTOR_TYPE_TRANSPORT_AGNOSTIC_DIGITAL_MODE_A = 16,
95     OPM_CONNECTOR_TYPE_TRANSPORT_AGNOSTIC_DIGITAL_MODE_B = 17,
96     OPM_COPP_COMPATIBLE_CONNECTOR_TYPE_INTERNAL = 0x80000000,
97 }}
98 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0005 {
99     OPM_DVI_CHARACTERISTIC_1_0 = 1,
100     OPM_DVI_CHARACTERISTIC_1_1_OR_ABOVE = 2,
101 }}
102 ENUM!{enum OPM_OUTPUT_HARDWARE_PROTECTION {
103     OPM_OUTPUT_HARDWARE_PROTECTION_NOT_SUPPORTED = 0,
104     OPM_OUTPUT_HARDWARE_PROTECTION_SUPPORTED = 0x1,
105 }}
106 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0006 {
107     OPM_BUS_TYPE_OTHER = 0,
108     OPM_BUS_TYPE_PCI = 0x1,
109     OPM_BUS_TYPE_PCIX = 0x2,
110     OPM_BUS_TYPE_PCIEXPRESS = 0x3,
111     OPM_BUS_TYPE_AGP = 0x4,
112     OPM_BUS_IMPLEMENTATION_MODIFIER_INSIDE_OF_CHIPSET = 0x10000,
113     OPM_BUS_IMPLEMENTATION_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP = 0x20000,
114     OPM_BUS_IMPLEMENTATION_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET = 0x30000,
115     OPM_BUS_IMPLEMENTATION_MODIFIER_DAUGHTER_BOARD_CONNECTOR = 0x40000,
116     OPM_BUS_IMPLEMENTATION_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE = 0x50000,
117     OPM_BUS_IMPLEMENTATION_MODIFIER_NON_STANDARD = 0x80000000,
118     OPM_COPP_COMPATIBLE_BUS_TYPE_INTEGRATED = 0x80000000,
119 }}
120 ENUM!{enum OPM_DPCP_PROTECTION_LEVEL {
121     OPM_DPCP_OFF = 0,
122     OPM_DPCP_ON = 1,
123     OPM_DPCP_FORCE_ULONG = 0x7fffffff,
124 }}
125 ENUM!{enum OPM_HDCP_PROTECTION_LEVEL {
126     OPM_HDCP_OFF = 0,
127     OPM_HDCP_ON = 1,
128     OPM_HDCP_FORCE_ULONG = 0x7fffffff,
129 }}
130 ENUM!{enum OPM_TYPE_ENFORCEMENT_HDCP_PROTECTION_LEVEL {
131     OPM_TYPE_ENFORCEMENT_HDCP_OFF = OPM_HDCP_OFF,
132     OPM_TYPE_ENFORCEMENT_HDCP_ON_WITH_NO_TYPE_RESTRICTION = OPM_HDCP_ON,
133     OPM_TYPE_ENFORCEMENT_HDCP_ON_WITH_TYPE1_RESTRICTION = OPM_HDCP_ON + 1,
134     OPM_TYPE_ENFORCEMENT_HDCP_FORCE_ULONG = 0x7fffffff,
135 }}
136 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0007 {
137     OPM_CGMSA_OFF = 0,
138     OPM_CGMSA_COPY_FREELY = 0x1,
139     OPM_CGMSA_COPY_NO_MORE = 0x2,
140     OPM_CGMSA_COPY_ONE_GENERATION = 0x3,
141     OPM_CGMSA_COPY_NEVER = 0x4,
142     OPM_CGMSA_REDISTRIBUTION_CONTROL_REQUIRED = 0x8,
143 }}
144 ENUM!{enum OPM_ACP_PROTECTION_LEVEL {
145     OPM_ACP_OFF = 0,
146     OPM_ACP_LEVEL_ONE = 1,
147     OPM_ACP_LEVEL_TWO = 2,
148     OPM_ACP_LEVEL_THREE = 3,
149     OPM_ACP_FORCE_ULONG = 0x7fffffff,
150 }}
151 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0008 {
152     OPM_PROTECTION_TYPE_OTHER = 0x80000000,
153     OPM_PROTECTION_TYPE_NONE = 0,
154     OPM_PROTECTION_TYPE_COPP_COMPATIBLE_HDCP = 0x1,
155     OPM_PROTECTION_TYPE_ACP = 0x2,
156     OPM_PROTECTION_TYPE_CGMSA = 0x4,
157     OPM_PROTECTION_TYPE_HDCP = 0x8,
158     OPM_PROTECTION_TYPE_DPCP = 0x10,
159     OPM_PROTECTION_TYPE_TYPE_ENFORCEMENT_HDCP = 0x20,
160 }}
161 ENUM!{enum __MIDL___MIDL_itf_opmapi_0000_0000_0009 {
162     OPM_PROTECTION_STANDARD_OTHER = 0x80000000,
163     OPM_PROTECTION_STANDARD_NONE = 0,
164     OPM_PROTECTION_STANDARD_IEC61880_525I = 0x1,
165     OPM_PROTECTION_STANDARD_IEC61880_2_525I = 0x2,
166     OPM_PROTECTION_STANDARD_IEC62375_625P = 0x4,
167     OPM_PROTECTION_STANDARD_EIA608B_525 = 0x8,
168     OPM_PROTECTION_STANDARD_EN300294_625I = 0x10,
169     OPM_PROTECTION_STANDARD_CEA805A_TYPEA_525P = 0x20,
170     OPM_PROTECTION_STANDARD_CEA805A_TYPEA_750P = 0x40,
171     OPM_PROTECTION_STANDARD_CEA805A_TYPEA_1125I = 0x80,
172     OPM_PROTECTION_STANDARD_CEA805A_TYPEB_525P = 0x100,
173     OPM_PROTECTION_STANDARD_CEA805A_TYPEB_750P = 0x200,
174     OPM_PROTECTION_STANDARD_CEA805A_TYPEB_1125I = 0x400,
175     OPM_PROTECTION_STANDARD_ARIBTRB15_525I = 0x800,
176     OPM_PROTECTION_STANDARD_ARIBTRB15_525P = 0x1000,
177     OPM_PROTECTION_STANDARD_ARIBTRB15_750P = 0x2000,
178     OPM_PROTECTION_STANDARD_ARIBTRB15_1125I = 0x4000,
179 }}
180 ENUM!{enum OPM_IMAGE_ASPECT_RATIO_EN300294 {
181     OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_4_BY_3 = 0,
182     OPM_ASPECT_RATIO_EN300294_BOX_14_BY_9_CENTER = 1,
183     OPM_ASPECT_RATIO_EN300294_BOX_14_BY_9_TOP = 2,
184     OPM_ASPECT_RATIO_EN300294_BOX_16_BY_9_CENTER = 3,
185     OPM_ASPECT_RATIO_EN300294_BOX_16_BY_9_TOP = 4,
186     OPM_ASPECT_RATIO_EN300294_BOX_GT_16_BY_9_CENTER = 5,
187     OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_4_BY_3_PROTECTED_CENTER = 6,
188     OPM_ASPECT_RATIO_EN300294_FULL_FORMAT_16_BY_9_ANAMORPHIC = 7,
189     OPM_ASPECT_RATIO_FORCE_ULONG = 0x7fffffff,
190 }}
191 STRUCT!{#[repr(packed)] struct OPM_RANDOM_NUMBER {
192     abRandomNumber: [BYTE; 16],
193 }}
194 STRUCT!{#[repr(packed)] struct OPM_OMAC {
195     abOMAC: [BYTE; 16],
196 }}
197 STRUCT!{#[repr(packed)] struct OPM_ENCRYPTED_INITIALIZATION_PARAMETERS {
198     abEncryptedInitializationParameters: [BYTE; 256],
199 }}
200 STRUCT!{#[repr(packed)] struct OPM_GET_INFO_PARAMETERS {
201     omac: OPM_OMAC,
202     rnRandomNumber: OPM_RANDOM_NUMBER,
203     guidInformation: GUID,
204     ulSequenceNumber: ULONG,
205     cbParametersSize: ULONG,
206     abParameters: [BYTE; 4056],
207 }}
208 STRUCT!{#[repr(packed)] struct OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS {
209     rnRandomNumber: OPM_RANDOM_NUMBER,
210     guidInformation: GUID,
211     ulSequenceNumber: ULONG,
212     cbParametersSize: ULONG,
213     abParameters: [BYTE; 4056],
214 }}
215 STRUCT!{#[repr(packed)] struct OPM_HDCP_KEY_SELECTION_VECTOR {
216     abKeySelectionVector: [BYTE; 5],
217 }}
218 STRUCT!{#[repr(packed)] struct OPM_CONNECTED_HDCP_DEVICE_INFORMATION {
219     rnRandomNumber: OPM_RANDOM_NUMBER,
220     ulStatusFlags: ULONG,
221     ulHDCPFlags: ULONG,
222     ksvB: OPM_HDCP_KEY_SELECTION_VECTOR,
223     Reserved: [BYTE; 11],
224     Reserved2: [BYTE; 16],
225     Reserved3: [BYTE; 16],
226 }}
227 STRUCT!{#[repr(packed)] struct OPM_REQUESTED_INFORMATION {
228     omac: OPM_OMAC,
229     cbRequestedInformationSize: ULONG,
230     abRequestedInformation: [BYTE; 4076],
231 }}
232 STRUCT!{#[repr(packed)] struct OPM_STANDARD_INFORMATION {
233     rnRandomNumber: OPM_RANDOM_NUMBER,
234     ulStatusFlags: ULONG,
235     ulInformation: ULONG,
236     ulReserved: ULONG,
237     ulReserved2: ULONG,
238 }}
239 STRUCT!{#[repr(packed)] struct OPM_ACTUAL_OUTPUT_FORMAT {
240     rnRandomNumber: OPM_RANDOM_NUMBER,
241     ulStatusFlags: ULONG,
242     ulDisplayWidth: ULONG,
243     ulDisplayHeight: ULONG,
244     dsfSampleInterleaveFormat: DXVA2_SampleFormat,
245     d3dFormat: D3DFORMAT,
246     ulFrequencyNumerator: ULONG,
247     ulFrequencyDenominator: ULONG,
248 }}
249 STRUCT!{#[repr(packed)] struct OPM_ACP_AND_CGMSA_SIGNALING {
250     rnRandomNumber: OPM_RANDOM_NUMBER,
251     ulStatusFlags: ULONG,
252     ulAvailableTVProtectionStandards: ULONG,
253     ulActiveTVProtectionStandard: ULONG,
254     ulReserved: ULONG,
255     ulAspectRatioValidMask1: ULONG,
256     ulAspectRatioData1: ULONG,
257     ulAspectRatioValidMask2: ULONG,
258     ulAspectRatioData2: ULONG,
259     ulAspectRatioValidMask3: ULONG,
260     ulAspectRatioData3: ULONG,
261     ulReserved2: [ULONG; 4],
262     ulReserved3: [ULONG; 4],
263 }}
264 STRUCT!{#[repr(packed)] struct OPM_OUTPUT_ID_DATA {
265     rnRandomNumber: OPM_RANDOM_NUMBER,
266     ulStatusFlags: ULONG,
267     OutputId: UINT64,
268 }}
269 STRUCT!{#[repr(packed)] struct OPM_CONFIGURE_PARAMETERS {
270     omac: OPM_OMAC,
271     guidSetting: GUID,
272     ulSequenceNumber: ULONG,
273     cbParametersSize: ULONG,
274     abParameters: [BYTE; 4056],
275 }}
276 STRUCT!{#[repr(packed)] struct OPM_SET_PROTECTION_LEVEL_PARAMETERS {
277     ulProtectionType: ULONG,
278     ulProtectionLevel: ULONG,
279     Reserved: ULONG,
280     Reserved2: ULONG,
281 }}
282 STRUCT!{#[repr(packed)] struct OPM_SET_ACP_AND_CGMSA_SIGNALING_PARAMETERS {
283     ulNewTVProtectionStandard: ULONG,
284     ulAspectRatioChangeMask1: ULONG,
285     ulAspectRatioData1: ULONG,
286     ulAspectRatioChangeMask2: ULONG,
287     ulAspectRatioData2: ULONG,
288     ulAspectRatioChangeMask3: ULONG,
289     ulAspectRatioData3: ULONG,
290     ulReserved: [ULONG; 4],
291     ulReserved2: [ULONG; 4],
292     ulReserved3: ULONG,
293 }}
294 STRUCT!{#[repr(packed)] struct OPM_SET_HDCP_SRM_PARAMETERS {
295     ulSRMVersion: ULONG,
296 }}
297 STRUCT!{#[repr(packed)] struct OPM_GET_CODEC_INFO_PARAMETERS {
298     cbVerifier: DWORD,
299     Verifier: [BYTE; 4052],
300 }}
301 STRUCT!{#[repr(packed)] struct OPM_GET_CODEC_INFO_INFORMATION {
302     rnRandomNumber: OPM_RANDOM_NUMBER,
303     Merit: DWORD,
304 }}
305 DEFINE_GUID!{IID_IOPMVideoOutput,
306     0x0a15159d, 0x41c7, 0x4456, 0x93, 0xe1, 0x28, 0x4c, 0xd6, 0x1d, 0x4e, 0x8d}
307 RIDL!{#[uuid(0x0a15159d, 0x41c7, 0x4456, 0x93, 0xe1, 0x28, 0x4c, 0xd6, 0x1d, 0x4e, 0x8d)]
308 interface IOPMVideoOutput(IOPMVideoOutputVtbl): IUnknown(IUnknownVtbl) {
309     fn StartInitialization(
310         prnRandomNumber: *mut OPM_RANDOM_NUMBER,
311         ppbCertificate: *mut *mut BYTE,
312         pulCertificateLength: *mut ULONG,
313     ) -> HRESULT,
314     fn FinishInitialization(
315         pParameters: *const OPM_ENCRYPTED_INITIALIZATION_PARAMETERS,
316     ) -> HRESULT,
317     fn GetInformation(
318         pParameters: *const OPM_GET_INFO_PARAMETERS,
319         pRequestedInformation: *mut OPM_REQUESTED_INFORMATION,
320     ) -> HRESULT,
321     fn COPPCompatibleGetInformation(
322         pParameters: *const OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS,
323         pRequestedInformation: *mut OPM_REQUESTED_INFORMATION,
324     ) -> HRESULT,
325     fn Configure(
326         pParameters: *const OPM_CONFIGURE_PARAMETERS,
327         ulAdditionalParametersSize: ULONG,
328         pbAdditionalParameters: *const BYTE,
329     ) -> HRESULT,
330 }}
331 #[inline]
GetBusType(ulBusTypeAndImplementation: ULONG) -> ULONG332 pub fn GetBusType(ulBusTypeAndImplementation: ULONG) -> ULONG {
333     ulBusTypeAndImplementation & OPM_BUS_TYPE_MASK
334 }
335 #[inline]
GetBusImplementation(ulBusTypeAndImplementation: ULONG) -> ULONG336 pub fn GetBusImplementation(ulBusTypeAndImplementation: ULONG) -> ULONG {
337     (ulBusTypeAndImplementation & OPM_BUS_IMPLEMENTATION_MODIFIER_MASK) >> 16
338 }
339 #[inline]
IsNonStandardBusImplementation(ulBusTypeAndImplementation: ULONG) -> ULONG340 pub fn IsNonStandardBusImplementation(ulBusTypeAndImplementation: ULONG) -> ULONG {
341     ulBusTypeAndImplementation & OPM_BUS_IMPLEMENTATION_MODIFIER_NON_STANDARD
342 }
343 extern "system" {
OPMGetVideoOutputsFromHMONITOR( hMonitor: HMONITOR, vos: OPM_VIDEO_OUTPUT_SEMANTICS, pulNumVideoOutputs: *mut ULONG, pppOPMVideoOutputArray: *mut *mut *mut IOPMVideoOutput, ) -> HRESULT344     pub fn OPMGetVideoOutputsFromHMONITOR(
345         hMonitor: HMONITOR,
346         vos: OPM_VIDEO_OUTPUT_SEMANTICS,
347         pulNumVideoOutputs: *mut ULONG,
348         pppOPMVideoOutputArray: *mut *mut *mut IOPMVideoOutput,
349     ) -> HRESULT;
OPMGetVideoOutputForTarget( pAdapterLuid: *mut LUID, VidPnTarget: ULONG, vos: OPM_VIDEO_OUTPUT_SEMANTICS, ppOPMVideoOutput: *mut *mut IOPMVideoOutput, ) -> HRESULT350     pub fn OPMGetVideoOutputForTarget(
351         pAdapterLuid: *mut LUID,
352         VidPnTarget: ULONG,
353         vos: OPM_VIDEO_OUTPUT_SEMANTICS,
354         ppOPMVideoOutput: *mut *mut IOPMVideoOutput,
355     ) -> HRESULT;
OPMGetVideoOutputsFromIDirect3DDevice9Object( pDirect3DDevice9: *mut IDirect3DDevice9, vos: OPM_VIDEO_OUTPUT_SEMANTICS, pulNumVideoOutputs: *mut ULONG, pppOPMVideoOutputArray: *mut *mut *mut IOPMVideoOutput, ) -> HRESULT356     pub fn OPMGetVideoOutputsFromIDirect3DDevice9Object(
357         pDirect3DDevice9: *mut IDirect3DDevice9,
358         vos: OPM_VIDEO_OUTPUT_SEMANTICS,
359         pulNumVideoOutputs: *mut ULONG,
360         pppOPMVideoOutputArray: *mut *mut *mut IOPMVideoOutput,
361     ) -> HRESULT;
362 }
363