1 // Copyright © 2015, skdltmxn
2 // Licensed under the MIT License <LICENSE.md>
3 //! user APIs for the Configuration Manager
4 pub type PCVOID = *const ::VOID;
5 pub const MAX_DEVICE_ID_LEN: usize = 200;
6 pub const MAX_DEVNODE_ID_LEN: usize = MAX_DEVICE_ID_LEN;
7 pub const MAX_GUID_STRING_LEN: usize = 39;
8 pub const MAX_CLASS_NAME_LEN: usize = 32;
9 pub const MAX_PROFILE_LEN: usize = 80;
10 pub const MAX_CONFIG_VALUE: ::DWORD = 9999;
11 pub const MAX_INSTANCE_VALUE: ::DWORD = 9999;
12 pub const MAX_MEM_REGISTERS: ::DWORD = 9;
13 pub const MAX_IO_PORTS: ::DWORD = 20;
14 pub const MAX_IRQS: ::DWORD = 7;
15 pub const MAX_DMA_CHANNELS: ::DWORD = 7;
16 pub const DWORD_MAX: ::DWORD = 0xffffffff;
17 pub const DWORDLONG_MAX: ::DWORDLONG = 0xffffffffffffffff;
18 pub const CONFIGMG_VERSION: ::DWORD = 0x0400;
19 pub type RETURN_TYPE = ::DWORD;
20 pub type CONFIGRET = RETURN_TYPE;
21 pub type DEVNODE = ::DWORD;
22 pub type DEVINST = ::DWORD;
23 pub type PDEVNODE = *mut DEVNODE;
24 pub type PDEVINST = *mut DEVNODE;
25 pub type DEVNODEID_A = *mut ::CHAR;
26 pub type DEVINSTID_A = *mut ::CHAR;
27 pub type DEVNODEID_W = *mut ::WCHAR;
28 pub type DEVINSTID_W = *mut ::WCHAR;
29 pub type LOG_CONF = ::DWORD_PTR;
30 pub type PLOG_CONF = *mut LOG_CONF;
31 pub type RES_DES = ::DWORD_PTR;
32 pub type PRES_DES = *mut RES_DES;
33 pub type RESOURCEID = ::ULONG;
34 pub type PRESOURCEID = *mut RESOURCEID;
35 pub type PRIORITY = ::ULONG;
36 pub type PPRIORITY = *mut PRIORITY;
37 pub type RANGE_LIST = ::DWORD_PTR;
38 pub type PRANGE_LIST = *mut RANGE_LIST;
39 pub type RANGE_ELEMENT = ::DWORD_PTR;
40 pub type PRANGE_ELEMENT = *mut RANGE_ELEMENT;
41 pub type HMACHINE = ::HANDLE;
42 pub type PHMACHINE = *mut HMACHINE;
43 pub type CONFLICT_LIST = ::ULONG_PTR;
44 pub type PCONFLICT_LIST = *mut CONFLICT_LIST;
45 STRUCT!{nodebug struct CONFLICT_DETAILS_A {
46     CD_ulSize: ::ULONG,
47     CD_ulMask: ::ULONG,
48     CD_dnDevInst: DEVINST,
49     CD_rdResDes: RES_DES,
50     CD_ulFlags: ::ULONG,
51     CD_szDescription: [::CHAR; ::MAX_PATH],
52 }}
53 pub type PCONFLICT_DETAILS_A = *mut CONFLICT_DETAILS_A;
54 STRUCT!{nodebug struct CONFLICT_DETAILS_W {
55     CD_ulSize: ::ULONG,
56     CD_ulMask: ::ULONG,
57     CD_dnDevInst: DEVINST,
58     CD_rdResDes: RES_DES,
59     CD_ulFlags: ::ULONG,
60     CD_szDescription: [::WCHAR; ::MAX_PATH],
61 }}
62 pub type PCONFLICT_DETAILS_W = *mut CONFLICT_DETAILS_W;
63 pub const CM_CDMASK_DEVINST: ::ULONG = 0x00000001;
64 pub const CM_CDMASK_RESDES: ::ULONG = 0x00000002;
65 pub const CM_CDMASK_FLAGS: ::ULONG = 0x00000004;
66 pub const CM_CDMASK_DESCRIPTION: ::ULONG = 0x00000008;
67 pub const CM_CDMASK_VALID: ::ULONG = 0x0000000F;
68 pub const CM_CDFLAGS_DRIVER: ::ULONG = 0x00000001;
69 pub const CM_CDFLAGS_ROOT_OWNED: ::ULONG = 0x00000002;
70 pub const CM_CDFLAGS_RESERVED: ::ULONG = 0x00000004;
71 pub type REGDISPOSITION = ::ULONG;
72 pub const mMD_MemoryType: ::DWORD = 0x1;
73 pub const fMD_MemoryType: ::DWORD = mMD_MemoryType;
74 pub const fMD_ROM: ::DWORD = 0x0;
75 pub const fMD_RAM: ::DWORD = 0x1;
76 pub const mMD_32_24: ::DWORD = 0x2;
77 pub const fMD_32_24: ::DWORD = mMD_32_24;
78 pub const fMD_24: ::DWORD = 0x0;
79 pub const fMD_32: ::DWORD = 0x2;
80 pub const mMD_Prefetchable: ::DWORD = 0x4;
81 pub const fMD_Prefetchable: ::DWORD = mMD_Prefetchable;
82 pub const fMD_Pref: ::DWORD = mMD_Prefetchable;
83 pub const fMD_PrefetchDisallowed: ::DWORD = 0x0;
84 pub const fMD_PrefetchAllowed: ::DWORD = 0x4;
85 pub const mMD_Readable: ::DWORD = 0x8;
86 pub const fMD_Readable: ::DWORD = mMD_Readable;
87 pub const fMD_ReadAllowed: ::DWORD = 0x0;
88 pub const fMD_ReadDisallowed: ::DWORD = 0x8;
89 pub const mMD_CombinedWrite: ::DWORD = 0x10;
90 pub const fMD_CombinedWrite: ::DWORD = mMD_CombinedWrite;
91 pub const fMD_CombinedWriteDisallowed: ::DWORD = 0x0;
92 pub const fMD_CombinedWriteAllowed: ::DWORD = 0x10;
93 pub const mMD_Cacheable: ::DWORD = 0x20;
94 pub const fMD_NonCacheable: ::DWORD = 0x0;
95 pub const fMD_Cacheable: ::DWORD = 0x20;
96 pub const fMD_WINDOW_DECODE: ::DWORD = 0x40;
97 pub const fMD_MEMORY_BAR: ::DWORD = 0x80;
98 STRUCT!{struct MEM_RANGE {
99     MR_Align: ::DWORDLONG,
100     MR_nBytes: ::ULONG,
101     MR_Min: ::DWORDLONG,
102     MR_Max: ::DWORDLONG,
103     MR_Flags: ::DWORD,
104     MR_Reserved: ::DWORD,
105 }}
106 pub type PMEM_RANGE = *mut MEM_RANGE;
107 STRUCT!{struct MEM_DES {
108     MD_Count: ::DWORD,
109     MD_Type: ::DWORD,
110     MD_Alloc_Base: ::DWORDLONG,
111     MD_Alloc_End: ::DWORDLONG,
112     MD_Flags: ::DWORD,
113     MD_Reserved: ::DWORD,
114 }}
115 pub type PMEM_DES = *mut MEM_DES;
116 STRUCT!{struct MEM_RESOURCE {
117     MEM_Header: MEM_DES,
118     MEM_Data: [MEM_RANGE; ::ANYSIZE_ARRAY],
119 }}
120 pub type PMEM_RESOURCE = *mut MEM_RESOURCE;
121 STRUCT!{struct MEM_LARGE_RANGE {
122     MLR_Align: ::DWORDLONG,
123     MLR_nBytes: ::ULONGLONG,
124     MLR_Min: ::DWORDLONG,
125     MLR_Max: ::DWORDLONG,
126     MLR_Flags: ::DWORD,
127     MLR_Reserved: ::DWORD,
128 }}
129 pub type PMEM_LARGE_RANGE = *mut MEM_LARGE_RANGE;
130 STRUCT!{struct MEM_LARGE_DES {
131     MLD_Count: ::DWORD,
132     MLD_Type: ::DWORD,
133     MLD_Alloc_Base: ::DWORDLONG,
134     MLD_Alloc_End: ::DWORDLONG,
135     MLD_Flags: ::DWORD,
136     MLD_Reserved: ::DWORD,
137 }}
138 pub type PMEM_LARGE_DES = *mut MEM_LARGE_DES;
139 STRUCT!{struct MEM_LARGE_RESOURCE {
140     MEM_LARGE_Header: MEM_LARGE_DES,
141     MEM_LARGE_Data: [MEM_LARGE_RANGE; ::ANYSIZE_ARRAY],
142 }}
143 pub type PMEM_LARGE_RESOURCE = *mut MEM_LARGE_RESOURCE;
144 pub const fIOD_PortType: ::DWORD = 0x1;
145 pub const fIOD_Memory: ::DWORD = 0x0;
146 pub const fIOD_IO: ::DWORD = 0x1;
147 pub const fIOD_DECODE: ::DWORD = 0x00fc;
148 pub const fIOD_10_BIT_DECODE: ::DWORD = 0x0004;
149 pub const fIOD_12_BIT_DECODE: ::DWORD = 0x0008;
150 pub const fIOD_16_BIT_DECODE: ::DWORD = 0x0010;
151 pub const fIOD_POSITIVE_DECODE: ::DWORD = 0x0020;
152 pub const fIOD_PASSIVE_DECODE: ::DWORD = 0x0040;
153 pub const fIOD_WINDOW_DECODE: ::DWORD = 0x0080;
154 pub const fIOD_PORT_BAR: ::DWORD = 0x0100;
155 pub const IO_ALIAS_10_BIT_DECODE: ::DWORDLONG = 0x00000004;
156 pub const IO_ALIAS_12_BIT_DECODE: ::DWORDLONG = 0x00000010;
157 pub const IO_ALIAS_16_BIT_DECODE: ::DWORDLONG = 0x00000000;
158 pub const IO_ALIAS_POSITIVE_DECODE: ::DWORDLONG = 0x000000FF;
159 STRUCT!{struct IO_RANGE {
160     IOR_Align: ::DWORDLONG,
161     IOR_nPorts: ::DWORD,
162     IOR_Min: ::DWORDLONG,
163     IOR_Max: ::DWORDLONG,
164     IOR_RangeFlags: ::DWORD,
165     IOR_Alias: ::DWORDLONG,
166 }}
167 pub type PIO_RANGE = *mut IO_RANGE;
168 STRUCT!{struct IO_DES {
169     IOD_Count: ::DWORD,
170     IOD_Type: ::DWORD,
171     IOD_Alloc_Base: ::DWORDLONG,
172     IOD_Alloc_End: ::DWORDLONG,
173     IOD_DesFlags: ::DWORD,
174 }}
175 pub type PIO_DES = *mut IO_DES;
176 STRUCT!{struct IO_RESOURCE {
177     IO_Header: IO_DES,
178     IO_Data: [IO_RANGE; ::ANYSIZE_ARRAY],
179 }}
180 pub type PIO_RESOURCE = *mut IO_RESOURCE;
181 pub const mDD_Width: ::ULONG = 0x3;
182 pub const fDD_BYTE: ::ULONG = 0x0;
183 pub const fDD_WORD: ::ULONG = 0x1;
184 pub const fDD_DWORD: ::ULONG = 0x2;
185 pub const fDD_BYTE_AND_WORD: ::ULONG = 0x3;
186 pub const mDD_BusMaster: ::ULONG = 0x4;
187 pub const fDD_NoBusMaster: ::ULONG = 0x0;
188 pub const fDD_BusMaster: ::ULONG = 0x4;
189 pub const mDD_Type: ::ULONG = 0x18;
190 pub const fDD_TypeStandard: ::ULONG = 0x00;
191 pub const fDD_TypeA: ::ULONG = 0x08;
192 pub const fDD_TypeB: ::ULONG = 0x10;
193 pub const fDD_TypeF: ::ULONG = 0x18;
194 STRUCT!{struct DMA_RANGE {
195     DR_Min: ::ULONG,
196     DR_Max: ::ULONG,
197     DR_Flags: ::ULONG,
198 }}
199 pub type PDMA_RANGE = *mut DMA_RANGE;
200 STRUCT!{struct DMA_DES {
201     DD_Count: ::DWORD,
202     DD_Type: ::DWORD,
203     DD_Flags: ::DWORD,
204     DD_Alloc_Chan: ::ULONG,
205 }}
206 pub type PDMA_DES = *mut DMA_DES;
207 STRUCT!{struct DMA_RESOURCE {
208     DMA_Header: DMA_DES,
209     DMA_Data: [DMA_RANGE; ::ANYSIZE_ARRAY],
210 }}
211 pub type PDMA_RESOURCE = *mut DMA_RESOURCE;
212 pub const mIRQD_Share: ::ULONG = 0x1;
213 pub const fIRQD_Exclusive: ::ULONG = 0x0;
214 pub const fIRQD_Share: ::ULONG = 0x1;
215 pub const fIRQD_Share_Bit: ::ULONG = 0;
216 pub const fIRQD_Level_Bit: ::ULONG = 1;
217 pub const mIRQD_Edge_Level: ::ULONG = 0x2;
218 pub const fIRQD_Level: ::ULONG = 0x0;
219 pub const fIRQD_Edge: ::ULONG = 0x2;
220 STRUCT!{struct IRQ_RANGE {
221     IRQR_Min: ::ULONG,
222     IRQR_Max: ::ULONG,
223     IRQR_Flags: ::ULONG,
224 }}
225 pub type PIRQ_RANGE = *mut IRQ_RANGE;
226 STRUCT!{struct IRQ_DES_32 {
227     IRQD_Count: ::DWORD,
228     IRQD_Type: ::DWORD,
229     IRQD_Flags: ::DWORD,
230     IRQD_Alloc_Num: ::ULONG,
231     IRQD_Affinity: ::ULONG32,
232 }}
233 pub type PIRQ_DES_32 = *mut IRQ_DES_32;
234 STRUCT!{struct IRQ_DES_64 {
235     IRQD_Count: ::DWORD,
236     IRQD_Type: ::DWORD,
237     IRQD_Flags: ::DWORD,
238     IRQD_Alloc_Num: ::ULONG,
239     IRQD_Affinity: ::ULONG64,
240 }}
241 pub type PIRQ_DES_64 = *mut IRQ_DES_64;
242 STRUCT!{struct IRQ_RESOURCE_32 {
243     IRQ_Header: IRQ_DES_32,
244     IRQ_Data: [IRQ_RANGE; ::ANYSIZE_ARRAY],
245 }}
246 pub type PIRQ_RESOURCE_32 = *mut IRQ_RESOURCE_32;
247 STRUCT!{struct IRQ_RESOURCE_64 {
248     IRQ_Header: IRQ_DES_64,
249     IRQ_Data: [IRQ_RANGE; ::ANYSIZE_ARRAY],
250 }}
251 pub type PIRQ_RESOURCE_64 = *mut IRQ_RESOURCE_64;
252 STRUCT!{struct DEVPRIVATE_RANGE {
253     PR_Data1: ::DWORD,
254     PR_Data2: ::DWORD,
255     PR_Data3: ::DWORD,
256 }}
257 pub type PDEVPRIVATE_RANGE = *mut DEVPRIVATE_RANGE;
258 STRUCT!{struct DEVPRIVATE_DES {
259     PD_Count: ::DWORD,
260     PD_Type: ::DWORD,
261     PD_Data1: ::DWORD,
262     PD_Data2: ::DWORD,
263     PD_Data3: ::DWORD,
264     PD_Flags: ::DWORD,
265 }}
266 pub type PDEVPRIVATE_DES = *mut DEVPRIVATE_DES;
267 STRUCT!{struct DEVPRIVATE_RESOURCE {
268     PRV_Header: DEVPRIVATE_DES,
269     PRV_Data: [DEVPRIVATE_RANGE; ::ANYSIZE_ARRAY],
270 }}
271 pub type PDEVPRIVATE_RESOURCE = *mut DEVPRIVATE_RESOURCE;
272 STRUCT!{struct CS_DES {
273     CSD_SignatureLength: ::DWORD,
274     CSD_LegacyDataOffset: ::DWORD,
275     CSD_LegacyDataSize: ::DWORD,
276     CSD_Flags: ::DWORD,
277     CSD_ClassGuid: ::GUID,
278     CSD_Signature: [::BYTE; ::ANYSIZE_ARRAY],
279 }}
280 pub type PCS_DES = *mut CS_DES;
281 STRUCT!{struct CS_RESOURCE {
282     CS_Header: CS_DES,
283 }}
284 pub type PCS_RESOURCE = *mut CS_RESOURCE;
285 pub const mPCD_IO_8_16: ::DWORD = 0x1;
286 pub const fPCD_IO_8: ::DWORD = 0x0;
287 pub const fPCD_IO_16: ::DWORD = 0x1;
288 pub const mPCD_MEM_8_16: ::DWORD = 0x2;
289 pub const fPCD_MEM_8: ::DWORD = 0x0;
290 pub const fPCD_MEM_16: ::DWORD = 0x2;
291 pub const mPCD_MEM_A_C: ::DWORD = 0xC;
292 pub const fPCD_MEM1_A: ::DWORD = 0x4;
293 pub const fPCD_MEM2_A: ::DWORD = 0x8;
294 pub const fPCD_IO_ZW_8: ::DWORD = 0x10;
295 pub const fPCD_IO_SRC_16: ::DWORD = 0x20;
296 pub const fPCD_IO_WS_16: ::DWORD = 0x40;
297 pub const mPCD_MEM_WS: ::DWORD = 0x300;
298 pub const fPCD_MEM_WS_ONE: ::DWORD = 0x100;
299 pub const fPCD_MEM_WS_TWO: ::DWORD = 0x200;
300 pub const fPCD_MEM_WS_THREE: ::DWORD = 0x300;
301 pub const fPCD_MEM_A: ::DWORD = 0x4;
302 pub const fPCD_ATTRIBUTES_PER_WINDOW: ::DWORD = 0x8000;
303 pub const fPCD_IO1_16: ::DWORD = 0x00010000;
304 pub const fPCD_IO1_ZW_8: ::DWORD = 0x00020000;
305 pub const fPCD_IO1_SRC_16: ::DWORD = 0x00040000;
306 pub const fPCD_IO1_WS_16: ::DWORD = 0x00080000;
307 pub const fPCD_IO2_16: ::DWORD = 0x00100000;
308 pub const fPCD_IO2_ZW_8: ::DWORD = 0x00200000;
309 pub const fPCD_IO2_SRC_16: ::DWORD = 0x00400000;
310 pub const fPCD_IO2_WS_16: ::DWORD = 0x00800000;
311 pub const mPCD_MEM1_WS: ::DWORD = 0x03000000;
312 pub const fPCD_MEM1_WS_TWO: ::DWORD = 0x02000000;
313 pub const fPCD_MEM1_WS_THREE: ::DWORD = 0x03000000;
314 pub const fPCD_MEM1_16: ::DWORD = 0x04000000;
315 pub const mPCD_MEM2_WS: ::DWORD = 0x30000000;
316 pub const fPCD_MEM2_WS_ONE: ::DWORD = 0x10000000;
317 pub const fPCD_MEM2_WS_TWO: ::DWORD = 0x20000000;
318 pub const fPCD_MEM2_WS_THREE: ::DWORD = 0x30000000;
319 pub const fPCD_MEM2_16: ::DWORD = 0x40000000;
320 pub const PCD_MAX_MEMORY: usize = 2;
321 pub const PCD_MAX_IO: usize = 2;
322 STRUCT!{struct PCCARD_DES {
323     PCD_Count: ::DWORD,
324     PCD_Type: ::DWORD,
325     PCD_Flags: ::DWORD,
326     PCD_ConfigIndex: ::BYTE,
327     PCD_Reserved: [::BYTE; 3],
328     PCD_MemoryCardBase1: ::DWORD,
329     PCD_MemoryCardBase2: ::DWORD,
330     PCD_MemoryCardBase: [::DWORD; PCD_MAX_MEMORY],
331     PCD_MemoryFlags: [::WORD; PCD_MAX_MEMORY],
332     PCD_IoFlags: [::BYTE; PCD_MAX_IO],
333 }}
334 pub type PPCCARD_DES = *mut PCCARD_DES;
335 STRUCT!{struct PCCARD_RESOURCE {
336     PcCard_Header: PCCARD_DES,
337 }}
338 pub type PPCCARD_RESOURCE = *mut PCCARD_RESOURCE;
339 pub const mPMF_AUDIO_ENABLE: ::DWORD = 0x8;
340 pub const fPMF_AUDIO_ENABLE: ::DWORD = 0x8;
341 STRUCT!{struct MFCARD_DES {
342     PMF_Count: ::DWORD,
343     PMF_Type: ::DWORD,
344     PMF_Flags: ::DWORD,
345     PMF_ConfigOptions: ::BYTE,
346     PMF_IoResourceIndex: ::BYTE,
347     PMF_Reserved: [::BYTE; 2],
348     PMF_ConfigRegisterBase: ::DWORD,
349 }}
350 pub type PMFCARD_DES = *mut MFCARD_DES;
351 STRUCT!{struct MFCARD_RESOURCE {
352     MfCard_Header: MFCARD_DES,
353 }}
354 pub type PMFCARD_RESOURCE = *mut MFCARD_RESOURCE;
355 STRUCT!{struct BUSNUMBER_RANGE {
356     BUSR_Min: ::ULONG,
357     BUSR_Max: ::ULONG,
358     BUSR_nBusNumbers: ::ULONG,
359     BUSR_Flags: ::ULONG,
360 }}
361 pub type PBUSNUMBER_RANGE = *mut BUSNUMBER_RANGE;
362 STRUCT!{struct BUSNUMBER_DES {
363     BUSD_Count: ::DWORD,
364     BUSD_Type: ::DWORD,
365     BUSD_Flags: ::DWORD,
366     BUSD_Alloc_Base: ::ULONG,
367     BUSD_Alloc_End: ::ULONG,
368 }}
369 pub type PBUSNUMBER_DES = *mut BUSNUMBER_DES;
370 STRUCT!{struct BUSNUMBER_RESOURCE {
371     BusNumber_Header: BUSNUMBER_DES,
372     BusNumber_Data: [BUSNUMBER_RANGE; ::ANYSIZE_ARRAY],
373 }}
374 pub type PBUSNUMBER_RESOURCE = *mut BUSNUMBER_RESOURCE;
375 STRUCT!{struct CONNECTION_DES {
376     COND_Type: ::DWORD,
377     COND_Flags: ::DWORD,
378     COND_Class: ::BYTE,
379     COND_ClassType: ::BYTE,
380     COND_Reserved1: ::BYTE,
381     COND_Reserved2: ::BYTE,
382     COND_Id: ::LARGE_INTEGER,
383 }}
384 pub type PCONNECTION_DES = *mut CONNECTION_DES;
385 STRUCT!{struct CONNECTION_RESOURCE {
386     Connection_Header: CONNECTION_DES,
387 }}
388 pub type PCONNECTION_RESOURCE = *mut CONNECTION_RESOURCE;
389 pub const CM_HWPI_NOT_DOCKABLE: ::DWORD = 0x00000000;
390 pub const CM_HWPI_UNDOCKED: ::DWORD = 0x00000001;
391 pub const CM_HWPI_DOCKED: ::DWORD = 0x00000002;
392 STRUCT!{nodebug struct HWPROFILEINFO_A {
393     HWPI_ulHWProfile: ::ULONG,
394     HWPI_szFriendlyName: [::CHAR; MAX_PROFILE_LEN],
395     HWPI_dwFlags: ::DWORD,
396 }}
397 pub type PHWPROFILEINFO_A = *mut HWPROFILEINFO_A;
398 STRUCT!{nodebug struct HWPROFILEINFO_W {
399     HWPI_ulHWProfile: ::ULONG,
400     HWPI_szFriendlyName: [::WCHAR; MAX_PROFILE_LEN],
401     HWPI_dwFlags: ::DWORD,
402 }}
403 pub type PHWPROFILEINFO_W = *mut HWPROFILEINFO_W;
404 pub const ResType_All: RESOURCEID = 0x00000000;
405 pub const ResType_None: RESOURCEID = 0x00000000;
406 pub const ResType_Mem: RESOURCEID = 0x00000001;
407 pub const ResType_IO: RESOURCEID = 0x00000002;
408 pub const ResType_DMA: RESOURCEID = 0x00000003;
409 pub const ResType_IRQ: RESOURCEID = 0x00000004;
410 pub const ResType_DoNotUse: RESOURCEID = 0x00000005;
411 pub const ResType_BusNumber: RESOURCEID = 0x00000006;
412 pub const ResType_MemLarge: RESOURCEID = 0x00000007;
413 pub const ResType_MAX: RESOURCEID = 0x00000007;
414 pub const ResType_Ignored_Bit: RESOURCEID = 0x00008000;
415 pub const ResType_ClassSpecific: RESOURCEID = 0x0000FFFF;
416 pub const ResType_Reserved: RESOURCEID = 0x00008000;
417 pub const ResType_DevicePrivate: RESOURCEID = 0x00008001;
418 pub const ResType_PcCardConfig: RESOURCEID = 0x00008002;
419 pub const ResType_MfCardConfig: RESOURCEID = 0x00008003;
420 pub const ResType_Connection: RESOURCEID = 0x00008004;
421 pub const CM_ADD_RANGE_ADDIFCONFLICT: ::ULONG = 0x00000000;
422 pub const CM_ADD_RANGE_DONOTADDIFCONFLICT: ::ULONG = 0x00000001;
423 pub const CM_ADD_RANGE_BITS: ::ULONG = 0x00000001;
424 pub const BASIC_LOG_CONF: ::ULONG = 0x00000000;
425 pub const FILTERED_LOG_CONF: ::ULONG = 0x00000001;
426 pub const ALLOC_LOG_CONF: ::ULONG = 0x00000002;
427 pub const BOOT_LOG_CONF: ::ULONG = 0x00000003;
428 pub const FORCED_LOG_CONF: ::ULONG = 0x00000004;
429 pub const OVERRIDE_LOG_CONF: ::ULONG = 0x00000005;
430 pub const NUM_LOG_CONF: ::ULONG = 0x00000006;
431 pub const LOG_CONF_BITS: ::ULONG = 0x00000007;
432 pub const PRIORITY_EQUAL_FIRST: ::ULONG = 0x00000008;
433 pub const PRIORITY_EQUAL_LAST: ::ULONG = 0x00000000;
434 pub const PRIORITY_BIT: ::ULONG = 0x00000008;
435 pub const RegDisposition_OpenAlways: REGDISPOSITION = 0x00000000;
436 pub const RegDisposition_OpenExisting: REGDISPOSITION = 0x00000001;
437 pub const RegDisposition_Bits: REGDISPOSITION = 0x00000001;
438 pub const CM_ADD_ID_HARDWARE: ::ULONG = 0x00000000;
439 pub const CM_ADD_ID_COMPATIBLE: ::ULONG = 0x00000001;
440 pub const CM_ADD_ID_BITS: ::ULONG = 0x00000001;
441 pub const CM_CREATE_DEVNODE_NORMAL: ::ULONG = 0x00000000;
442 pub const CM_CREATE_DEVNODE_NO_WAIT_INSTALL: ::ULONG = 0x00000001;
443 pub const CM_CREATE_DEVNODE_PHANTOM: ::ULONG = 0x00000002;
444 pub const CM_CREATE_DEVNODE_GENERATE_ID: ::ULONG = 0x00000004;
445 pub const CM_CREATE_DEVNODE_DO_NOT_INSTALL: ::ULONG = 0x00000008;
446 pub const CM_CREATE_DEVNODE_BITS: ::ULONG = 0x0000000F;
447 pub const CM_CREATE_DEVINST_NORMAL: ::ULONG = CM_CREATE_DEVNODE_NORMAL;
448 pub const CM_CREATE_DEVINST_NO_WAIT_INSTALL: ::ULONG = CM_CREATE_DEVNODE_NO_WAIT_INSTALL;
449 pub const CM_CREATE_DEVINST_PHANTOM: ::ULONG = CM_CREATE_DEVNODE_PHANTOM;
450 pub const CM_CREATE_DEVINST_GENERATE_ID: ::ULONG = CM_CREATE_DEVNODE_GENERATE_ID;
451 pub const CM_CREATE_DEVINST_DO_NOT_INSTALL: ::ULONG = CM_CREATE_DEVNODE_DO_NOT_INSTALL;
452 pub const CM_CREATE_DEVINST_BITS: ::ULONG = CM_CREATE_DEVNODE_BITS;
453 pub const CM_DELETE_CLASS_ONLY: ::ULONG = 0x00000000;
454 pub const CM_DELETE_CLASS_SUBKEYS: ::ULONG = 0x00000001;
455 pub const CM_DELETE_CLASS_INTERFACE: ::ULONG = 0x00000002;
456 pub const CM_DELETE_CLASS_BITS: ::ULONG = 0x00000003;
457 pub const CM_ENUMERATE_CLASSES_INSTALLER: ::ULONG = 0x00000000;
458 pub const CM_ENUMERATE_CLASSES_INTERFACE: ::ULONG = 0x00000001;
459 pub const CM_ENUMERATE_CLASSES_BITS: ::ULONG = 0x00000001;
460 pub const CM_DETECT_NEW_PROFILE: ::ULONG = 0x00000001;
461 pub const CM_DETECT_CRASHED: ::ULONG = 0x00000002;
462 pub const CM_DETECT_HWPROF_FIRST_BOOT: ::ULONG = 0x00000004;
463 pub const CM_DETECT_RUN: ::ULONG = 0x80000000;
464 pub const CM_DETECT_BITS: ::ULONG = 0x80000007;
465 pub const CM_DISABLE_POLITE: ::ULONG = 0x00000000;
466 pub const CM_DISABLE_ABSOLUTE: ::ULONG = 0x00000001;
467 pub const CM_DISABLE_HARDWARE: ::ULONG = 0x00000002;
468 pub const CM_DISABLE_UI_NOT_OK: ::ULONG = 0x00000004;
469 pub const CM_DISABLE_BITS: ::ULONG = 0x00000007;
470 pub const CM_GETIDLIST_FILTER_NONE: ::ULONG = 0x00000000;
471 pub const CM_GETIDLIST_FILTER_ENUMERATOR: ::ULONG = 0x00000001;
472 pub const CM_GETIDLIST_FILTER_SERVICE: ::ULONG = 0x00000002;
473 pub const CM_GETIDLIST_FILTER_EJECTRELATIONS: ::ULONG = 0x00000004;
474 pub const CM_GETIDLIST_FILTER_REMOVALRELATIONS: ::ULONG = 0x00000008;
475 pub const CM_GETIDLIST_FILTER_POWERRELATIONS: ::ULONG = 0x00000010;
476 pub const CM_GETIDLIST_FILTER_BUSRELATIONS: ::ULONG = 0x00000020;
477 pub const CM_GETIDLIST_DONOTGENERATE: ::ULONG = 0x10000040;
478 pub const CM_GETIDLIST_FILTER_TRANSPORTRELATIONS: ::ULONG = 0x00000080;
479 pub const CM_GETIDLIST_FILTER_PRESENT: ::ULONG = 0x00000100;
480 pub const CM_GETIDLIST_FILTER_CLASS: ::ULONG = 0x00000200;
481 pub const CM_GETIDLIST_FILTER_BITS: ::ULONG = 0x100003FF;
482 pub const CM_GET_DEVICE_INTERFACE_LIST_PRESENT: ::ULONG = 0x00000000;
483 pub const CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES: ::ULONG = 0x00000001;
484 pub const CM_GET_DEVICE_INTERFACE_LIST_BITS: ::ULONG = 0x00000001;
485 pub const CM_DRP_DEVICEDESC: ::ULONG = 0x00000001;
486 pub const CM_DRP_HARDWAREID: ::ULONG = 0x00000002;
487 pub const CM_DRP_COMPATIBLEIDS: ::ULONG = 0x00000003;
488 pub const CM_DRP_UNUSED0: ::ULONG = 0x00000004;
489 pub const CM_DRP_SERVICE: ::ULONG = 0x00000005;
490 pub const CM_DRP_UNUSED1: ::ULONG = 0x00000006;
491 pub const CM_DRP_UNUSED2: ::ULONG = 0x00000007;
492 pub const CM_DRP_CLASS: ::ULONG = 0x00000008;
493 pub const CM_DRP_CLASSGUID: ::ULONG = 0x00000009;
494 pub const CM_DRP_DRIVER: ::ULONG = 0x0000000A;
495 pub const CM_DRP_CONFIGFLAGS: ::ULONG = 0x0000000B;
496 pub const CM_DRP_MFG: ::ULONG = 0x0000000C;
497 pub const CM_DRP_FRIENDLYNAME: ::ULONG = 0x0000000D;
498 pub const CM_DRP_LOCATION_INFORMATION: ::ULONG = 0x0000000E;
499 pub const CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME: ::ULONG = 0x0000000F;
500 pub const CM_DRP_CAPABILITIES: ::ULONG = 0x00000010;
501 pub const CM_DRP_UI_NUMBER: ::ULONG = 0x00000011;
502 pub const CM_DRP_UPPERFILTERS: ::ULONG = 0x00000012;
503 pub const CM_CRP_UPPERFILTERS: ::ULONG = CM_DRP_UPPERFILTERS;
504 pub const CM_DRP_LOWERFILTERS: ::ULONG = 0x00000013;
505 pub const CM_CRP_LOWERFILTERS: ::ULONG = CM_DRP_LOWERFILTERS;
506 pub const CM_DRP_BUSTYPEGUID: ::ULONG = 0x00000014;
507 pub const CM_DRP_LEGACYBUSTYPE: ::ULONG = 0x00000015;
508 pub const CM_DRP_BUSNUMBER: ::ULONG = 0x00000016;
509 pub const CM_DRP_ENUMERATOR_NAME: ::ULONG = 0x00000017;
510 pub const CM_DRP_SECURITY: ::ULONG = 0x00000018;
511 pub const CM_CRP_SECURITY: ::ULONG = CM_DRP_SECURITY;
512 pub const CM_DRP_SECURITY_SDS: ::ULONG = 0x00000019;
513 pub const CM_CRP_SECURITY_SDS: ::ULONG = CM_DRP_SECURITY_SDS;
514 pub const CM_DRP_DEVTYPE: ::ULONG = 0x0000001A;
515 pub const CM_CRP_DEVTYPE: ::ULONG = CM_DRP_DEVTYPE;
516 pub const CM_DRP_EXCLUSIVE: ::ULONG = 0x0000001B;
517 pub const CM_CRP_EXCLUSIVE: ::ULONG = CM_DRP_EXCLUSIVE;
518 pub const CM_DRP_CHARACTERISTICS: ::ULONG = 0x0000001C;
519 pub const CM_CRP_CHARACTERISTICS: ::ULONG = CM_DRP_CHARACTERISTICS;
520 pub const CM_DRP_ADDRESS: ::ULONG = 0x0000001D;
521 pub const CM_DRP_UI_NUMBER_DESC_FORMAT: ::ULONG = 0x0000001E;
522 pub const CM_DRP_DEVICE_POWER_DATA: ::ULONG = 0x0000001F;
523 pub const CM_DRP_REMOVAL_POLICY: ::ULONG = 0x00000020;
524 pub const CM_DRP_REMOVAL_POLICY_HW_DEFAULT: ::ULONG = 0x00000021;
525 pub const CM_DRP_REMOVAL_POLICY_OVERRIDE: ::ULONG = 0x00000022;
526 pub const CM_DRP_INSTALL_STATE: ::ULONG = 0x00000023;
527 pub const CM_DRP_LOCATION_PATHS: ::ULONG = 0x00000024;
528 pub const CM_DRP_BASE_CONTAINERID: ::ULONG = 0x00000025;
529 pub const CM_DRP_MIN: ::ULONG = 0x00000001;
530 pub const CM_CRP_MIN: ::ULONG = CM_DRP_MIN;
531 pub const CM_DRP_MAX: ::ULONG = 0x00000025;
532 pub const CM_CRP_MAX: ::ULONG = CM_DRP_MAX;
533 pub const CM_DEVCAP_LOCKSUPPORTED: ::ULONG = 0x00000001;
534 pub const CM_DEVCAP_EJECTSUPPORTED: ::ULONG = 0x00000002;
535 pub const CM_DEVCAP_REMOVABLE: ::ULONG = 0x00000004;
536 pub const CM_DEVCAP_DOCKDEVICE: ::ULONG = 0x00000008;
537 pub const CM_DEVCAP_UNIQUEID: ::ULONG = 0x00000010;
538 pub const CM_DEVCAP_SILENTINSTALL: ::ULONG = 0x00000020;
539 pub const CM_DEVCAP_RAWDEVICEOK: ::ULONG = 0x00000040;
540 pub const CM_DEVCAP_SURPRISEREMOVALOK: ::ULONG = 0x00000080;
541 pub const CM_DEVCAP_HARDWAREDISABLED: ::ULONG = 0x00000100;
542 pub const CM_DEVCAP_NONDYNAMIC: ::ULONG = 0x00000200;
543 pub const CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL: ::ULONG = 1;
544 pub const CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL: ::ULONG = 2;
545 pub const CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL: ::ULONG = 3;
546 pub const CM_INSTALL_STATE_INSTALLED: ::ULONG = 0;
547 pub const CM_INSTALL_STATE_NEEDS_REINSTALL: ::ULONG = 1;
548 pub const CM_INSTALL_STATE_FAILED_INSTALL: ::ULONG = 2;
549 pub const CM_INSTALL_STATE_FINISH_INSTALL: ::ULONG = 3;
550 pub const CM_LOCATE_DEVNODE_NORMAL: ::ULONG = 0x00000000;
551 pub const CM_LOCATE_DEVNODE_PHANTOM: ::ULONG = 0x00000001;
552 pub const CM_LOCATE_DEVNODE_CANCELREMOVE: ::ULONG = 0x00000002;
553 pub const CM_LOCATE_DEVNODE_NOVALIDATION: ::ULONG = 0x00000004;
554 pub const CM_LOCATE_DEVNODE_BITS: ::ULONG = 0x00000007;
555 pub const CM_LOCATE_DEVINST_NORMAL: ::ULONG = CM_LOCATE_DEVNODE_NORMAL;
556 pub const CM_LOCATE_DEVINST_PHANTOM: ::ULONG = CM_LOCATE_DEVNODE_PHANTOM;
557 pub const CM_LOCATE_DEVINST_CANCELREMOVE: ::ULONG = CM_LOCATE_DEVNODE_CANCELREMOVE;
558 pub const CM_LOCATE_DEVINST_NOVALIDATION: ::ULONG = CM_LOCATE_DEVNODE_NOVALIDATION;
559 pub const CM_LOCATE_DEVINST_BITS: ::ULONG = CM_LOCATE_DEVNODE_BITS;
560 pub const CM_OPEN_CLASS_KEY_INSTALLER: ::ULONG = 0x00000000;
561 pub const CM_OPEN_CLASS_KEY_INTERFACE: ::ULONG = 0x00000001;
562 pub const CM_OPEN_CLASS_KEY_BITS: ::ULONG = 0x00000001;
563 pub const CM_REMOVE_UI_OK: ::ULONG = 0x00000000;
564 pub const CM_REMOVE_UI_NOT_OK: ::ULONG = 0x00000001;
565 pub const CM_REMOVE_NO_RESTART: ::ULONG = 0x00000002;
566 pub const CM_REMOVE_BITS: ::ULONG = 0x00000003;
567 pub const CM_QUERY_REMOVE_UI_OK: ::ULONG = CM_REMOVE_UI_OK;
568 pub const CM_QUERY_REMOVE_UI_NOT_OK: ::ULONG = CM_REMOVE_UI_NOT_OK;
569 pub const CM_QUERY_REMOVE_BITS: ::ULONG = CM_QUERY_REMOVE_UI_OK | CM_QUERY_REMOVE_UI_NOT_OK;
570 pub const CM_REENUMERATE_NORMAL: ::ULONG = 0x00000000;
571 pub const CM_REENUMERATE_SYNCHRONOUS: ::ULONG = 0x00000001;
572 pub const CM_REENUMERATE_RETRY_INSTALLATION: ::ULONG = 0x00000002;
573 pub const CM_REENUMERATE_ASYNCHRONOUS: ::ULONG = 0x00000004;
574 pub const CM_REENUMERATE_BITS: ::ULONG = 0x00000007;
575 pub const CM_REGISTER_DEVICE_DRIVER_STATIC: ::ULONG = 0x00000000;
576 pub const CM_REGISTER_DEVICE_DRIVER_DISABLEABLE: ::ULONG = 0x00000001;
577 pub const CM_REGISTER_DEVICE_DRIVER_REMOVABLE: ::ULONG = 0x00000002;
578 pub const CM_REGISTER_DEVICE_DRIVER_BITS: ::ULONG = 0x00000003;
579 pub const CM_REGISTRY_HARDWARE: ::ULONG = 0x00000000;
580 pub const CM_REGISTRY_SOFTWARE: ::ULONG = 0x00000001;
581 pub const CM_REGISTRY_USER: ::ULONG = 0x00000100;
582 pub const CM_REGISTRY_CONFIG: ::ULONG = 0x00000200;
583 pub const CM_REGISTRY_BITS: ::ULONG = 0x00000301;
584 pub const CM_SET_DEVNODE_PROBLEM_NORMAL: ::ULONG = 0x00000000;
585 pub const CM_SET_DEVNODE_PROBLEM_OVERRIDE: ::ULONG = 0x00000001;
586 pub const CM_SET_DEVNODE_PROBLEM_BITS: ::ULONG = 0x00000001;
587 pub const CM_SET_DEVINST_PROBLEM_NORMAL: ::ULONG = CM_SET_DEVNODE_PROBLEM_NORMAL;
588 pub const CM_SET_DEVINST_PROBLEM_OVERRIDE: ::ULONG = CM_SET_DEVNODE_PROBLEM_OVERRIDE;
589 pub const CM_SET_DEVINST_PROBLEM_BITS: ::ULONG = CM_SET_DEVNODE_PROBLEM_BITS;
590 pub const CM_SET_HW_PROF_FLAGS_UI_NOT_OK: ::ULONG = 0x00000001;
591 pub const CM_SET_HW_PROF_FLAGS_BITS: ::ULONG = 0x00000001;
592 pub const CM_SETUP_DEVNODE_READY: ::ULONG = 0x00000000;
593 pub const CM_SETUP_DEVINST_READY: ::ULONG = CM_SETUP_DEVNODE_READY;
594 pub const CM_SETUP_DOWNLOAD: ::ULONG = 0x00000001;
595 pub const CM_SETUP_WRITE_LOG_CONFS: ::ULONG = 0x00000002;
596 pub const CM_SETUP_PROP_CHANGE: ::ULONG = 0x00000003;
597 pub const CM_SETUP_DEVNODE_RESET: ::ULONG = 0x00000004;
598 pub const CM_SETUP_DEVINST_RESET: ::ULONG = CM_SETUP_DEVNODE_RESET;
599 pub const CM_SETUP_DEVNODE_CONFIG: ::ULONG = 0x00000005;
600 pub const CM_SETUP_DEVINST_CONFIG: ::ULONG = CM_SETUP_DEVNODE_CONFIG;
601 pub const CM_SETUP_DEVNODE_CONFIG_CLASS: ::ULONG = 0x00000006;
602 pub const CM_SETUP_DEVINST_CONFIG_CLASS: ::ULONG = CM_SETUP_DEVNODE_CONFIG_CLASS;
603 pub const CM_SETUP_DEVNODE_CONFIG_EXTENSIONS: ::ULONG = 0x00000007;
604 pub const CM_SETUP_DEVINST_CONFIG_EXTENSIONS: ::ULONG = CM_SETUP_DEVNODE_CONFIG_EXTENSIONS;
605 pub const CM_SETUP_BITS: ::ULONG = 0x00000007;
606 pub const CM_QUERY_ARBITRATOR_RAW: ::ULONG = 0x00000000;
607 pub const CM_QUERY_ARBITRATOR_TRANSLATED: ::ULONG = 0x00000001;
608 pub const CM_QUERY_ARBITRATOR_BITS: ::ULONG = 0x00000001;
609 pub const CM_CUSTOMDEVPROP_MERGE_MULTISZ: ::ULONG = 0x00000001;
610 pub const CM_CUSTOMDEVPROP_BITS: ::ULONG = 0x00000001;
611 pub const CM_NAME_ATTRIBUTE_NAME_RETRIEVED_FROM_DEVICE: ::ULONG = 0x1;
612 pub const CM_NAME_ATTRIBUTE_USER_ASSIGNED_NAME: ::ULONG = 0x2;
613 pub const CM_CLASS_PROPERTY_INSTALLER: ::ULONG = 0x00000000;
614 pub const CM_CLASS_PROPERTY_INTERFACE: ::ULONG = 0x00000001;
615 pub const CM_CLASS_PROPERTY_BITS: ::ULONG = 0x00000001;
616 DECLARE_HANDLE!(HCMNOTIFICATION, HCMNOTIFICATION__);
617 pub type PHCMNOTIFICATION = *mut HCMNOTIFICATION;
618 pub const CM_NOTIFY_FILTER_FLAG_ALL_INTERFACE_CLASSES: ::ULONG = 0x00000001;
619 pub const CM_NOTIFY_FILTER_FLAG_ALL_DEVICE_INSTANCES: ::ULONG = 0x00000002;
620 pub const CM_NOTIFY_FILTER_VALID_FLAGS: ::ULONG = CM_NOTIFY_FILTER_FLAG_ALL_INTERFACE_CLASSES
621     | CM_NOTIFY_FILTER_FLAG_ALL_DEVICE_INSTANCES;
622 ENUM!{enum CM_NOTIFY_FILTER_TYPE {
623     CM_NOTIFY_FILTER_TYPE_DEVICEINTERFACE = 0,
624     CM_NOTIFY_FILTER_TYPE_DEVICEHANDLE,
625     CM_NOTIFY_FILTER_TYPE_DEVICEINSTANCE,
626     CM_NOTIFY_FILTER_TYPE_MAX,
627 }}
628 pub type PCM_NOTIFY_FILTER_TYPE = *mut CM_NOTIFY_FILTER_TYPE;
629 STRUCT!{struct CM_NOTIFY_FILTER_DeviceInterface {
630     ClassGuid: ::GUID,
631 }}
632 STRUCT!{struct CM_NOTIFY_FILTER_DeviceHandle {
633     hTarget: ::HANDLE,
634 }}
635 STRUCT!{nodebug struct CM_NOTIFY_FILTER_DeviceInstance {
636     InstanceId: [::WCHAR; MAX_DEVICE_ID_LEN],
637 }}
638 STRUCT!{nodebug struct CM_NOTIFY_FILTER {
639     cbSize: ::DWORD,
640     Flags: ::DWORD,
641     FilterType: CM_NOTIFY_FILTER_TYPE,
642     Reserved: ::DWORD,
643     u: [::BYTE; 400],
644 }}
645 UNION!(CM_NOTIFY_FILTER, u, DeviceInterface, DeviceInterface_mut, CM_NOTIFY_FILTER_DeviceInterface);
646 UNION!(CM_NOTIFY_FILTER, u, DeviceHandle, DeviceHandle_mut, CM_NOTIFY_FILTER_DeviceHandle);
647 UNION!(CM_NOTIFY_FILTER, u, DeviceInstance, DeviceInstance_mut, CM_NOTIFY_FILTER_DeviceInstance);
648 pub type PCM_NOTIFY_FILTER = *mut CM_NOTIFY_FILTER;
649 ENUM!{enum CM_NOTIFY_ACTION {
650     CM_NOTIFY_ACTION_DEVICEINTERFACEARRIVAL = 0,
651     CM_NOTIFY_ACTION_DEVICEINTERFACEREMOVAL,
652     CM_NOTIFY_ACTION_DEVICEQUERYREMOVE,
653     CM_NOTIFY_ACTION_DEVICEQUERYREMOVEFAILED,
654     CM_NOTIFY_ACTION_DEVICEREMOVEPENDING,
655     CM_NOTIFY_ACTION_DEVICEREMOVECOMPLETE,
656     CM_NOTIFY_ACTION_DEVICECUSTOMEVENT,
657     CM_NOTIFY_ACTION_DEVICEINSTANCEENUMERATED,
658     CM_NOTIFY_ACTION_DEVICEINSTANCESTARTED,
659     CM_NOTIFY_ACTION_DEVICEINSTANCEREMOVED,
660     CM_NOTIFY_ACTION_MAX,
661 }}
662 pub type PCM_NOTIFY_ACTION = *mut CM_NOTIFY_ACTION;
663 STRUCT!{struct CM_NOTIFY_EVENT_DATA_DeviceInterface {
664     ClassGuid: ::GUID,
665     SymbolicLink: [::WCHAR; ::ANYSIZE_ARRAY],
666 }}
667 STRUCT!{struct CM_NOTIFY_EVENT_DATA_DeviceHandle {
668     EventGuid: ::GUID,
669     NameOffset: ::LONG,
670     DataSize: ::DWORD,
671     Data: [::BYTE; ::ANYSIZE_ARRAY],
672 }}
673 STRUCT!{struct CM_NOTIFY_EVENT_DATA_DeviceInstance {
674     InstanceId: [::WCHAR; ::ANYSIZE_ARRAY],
675 }}
676 STRUCT!{struct CM_NOTIFY_EVENT_DATA {
677     FilterType: CM_NOTIFY_FILTER_TYPE,
678     Reserved: ::DWORD,
679     u: [::BYTE; 25],
680 }}
681 UNION!(
682     CM_NOTIFY_EVENT_DATA, u, DeviceInterface, DeviceInterface_mut,
683     CM_NOTIFY_EVENT_DATA_DeviceInterface
684 );
685 UNION!(CM_NOTIFY_EVENT_DATA, u, DeviceHandle, DeviceHandle_mut, CM_NOTIFY_EVENT_DATA_DeviceHandle);
686 UNION!(
687     CM_NOTIFY_EVENT_DATA, u, DeviceInstance, DeviceInstance_mut, CM_NOTIFY_EVENT_DATA_DeviceInstance
688 );
689 pub type PCM_NOTIFY_EVENT_DATA = *mut CM_NOTIFY_EVENT_DATA;
690 pub type PCM_NOTIFY_CALLBACK = Option<unsafe extern "system" fn(
691     hNotify: HCMNOTIFICATION, Context: ::PVOID, Action: CM_NOTIFY_ACTION,
692     EventData: PCM_NOTIFY_EVENT_DATA, EventDataSize: ::DWORD,
693 ) -> ::DWORD>;
694 pub const CR_SUCCESS: CONFIGRET = 0x00000000;
695 pub const CR_DEFAULT: CONFIGRET = 0x00000001;
696 pub const CR_OUT_OF_MEMORY: CONFIGRET = 0x00000002;
697 pub const CR_INVALID_POINTER: CONFIGRET = 0x00000003;
698 pub const CR_INVALID_FLAG: CONFIGRET = 0x00000004;
699 pub const CR_INVALID_DEVNODE: CONFIGRET = 0x00000005;
700 pub const CR_INVALID_DEVINST: CONFIGRET = CR_INVALID_DEVNODE;
701 pub const CR_INVALID_RES_DES: CONFIGRET = 0x00000006;
702 pub const CR_INVALID_LOG_CONF: CONFIGRET = 0x00000007;
703 pub const CR_INVALID_ARBITRATOR: CONFIGRET = 0x00000008;
704 pub const CR_INVALID_NODELIST: CONFIGRET = 0x00000009;
705 pub const CR_DEVNODE_HAS_REQS: CONFIGRET = 0x0000000A;
706 pub const CR_DEVINST_HAS_REQS: CONFIGRET = CR_DEVNODE_HAS_REQS;
707 pub const CR_INVALID_RESOURCEID: CONFIGRET = 0x0000000B;
708 pub const CR_DLVXD_NOT_FOUND: CONFIGRET = 0x0000000C;
709 pub const CR_NO_SUCH_DEVNODE: CONFIGRET = 0x0000000D;
710 pub const CR_NO_SUCH_DEVINST: CONFIGRET = CR_NO_SUCH_DEVNODE;
711 pub const CR_NO_MORE_LOG_CONF: CONFIGRET = 0x0000000E;
712 pub const CR_NO_MORE_RES_DES: CONFIGRET = 0x0000000F;
713 pub const CR_ALREADY_SUCH_DEVNODE: CONFIGRET = 0x00000010;
714 pub const CR_ALREADY_SUCH_DEVINST: CONFIGRET = CR_ALREADY_SUCH_DEVNODE;
715 pub const CR_INVALID_RANGE_LIST: CONFIGRET = 0x00000011;
716 pub const CR_INVALID_RANGE: CONFIGRET = 0x00000012;
717 pub const CR_FAILURE: CONFIGRET = 0x00000013;
718 pub const CR_NO_SUCH_LOGICAL_DEV: CONFIGRET = 0x00000014;
719 pub const CR_CREATE_BLOCKED: CONFIGRET = 0x00000015;
720 pub const CR_NOT_SYSTEM_VM: CONFIGRET = 0x00000016;
721 pub const CR_REMOVE_VETOED: CONFIGRET = 0x00000017;
722 pub const CR_APM_VETOED: CONFIGRET = 0x00000018;
723 pub const CR_INVALID_LOAD_TYPE: CONFIGRET = 0x00000019;
724 pub const CR_BUFFER_SMALL: CONFIGRET = 0x0000001A;
725 pub const CR_NO_ARBITRATOR: CONFIGRET = 0x0000001B;
726 pub const CR_NO_REGISTRY_HANDLE: CONFIGRET = 0x0000001C;
727 pub const CR_REGISTRY_ERROR: CONFIGRET = 0x0000001D;
728 pub const CR_INVALID_DEVICE_ID: CONFIGRET = 0x0000001E;
729 pub const CR_INVALID_DATA: CONFIGRET = 0x0000001F;
730 pub const CR_INVALID_API: CONFIGRET = 0x00000020;
731 pub const CR_DEVLOADER_NOT_READY: CONFIGRET = 0x00000021;
732 pub const CR_NEED_RESTART: CONFIGRET = 0x00000022;
733 pub const CR_NO_MORE_HW_PROFILES: CONFIGRET = 0x00000023;
734 pub const CR_DEVICE_NOT_THERE: CONFIGRET = 0x00000024;
735 pub const CR_NO_SUCH_VALUE: CONFIGRET = 0x00000025;
736 pub const CR_WRONG_TYPE: CONFIGRET = 0x00000026;
737 pub const CR_INVALID_PRIORITY: CONFIGRET = 0x00000027;
738 pub const CR_NOT_DISABLEABLE: CONFIGRET = 0x00000028;
739 pub const CR_FREE_RESOURCES: CONFIGRET = 0x00000029;
740 pub const CR_QUERY_VETOED: CONFIGRET = 0x0000002A;
741 pub const CR_CANT_SHARE_IRQ: CONFIGRET = 0x0000002B;
742 pub const CR_NO_DEPENDENT: CONFIGRET = 0x0000002C;
743 pub const CR_SAME_RESOURCES: CONFIGRET = 0x0000002D;
744 pub const CR_NO_SUCH_REGISTRY_KEY: CONFIGRET = 0x0000002E;
745 pub const CR_INVALID_MACHINENAME: CONFIGRET = 0x0000002F;
746 pub const CR_REMOTE_COMM_FAILURE: CONFIGRET = 0x00000030;
747 pub const CR_MACHINE_UNAVAILABLE: CONFIGRET = 0x00000031;
748 pub const CR_NO_CM_SERVICES: CONFIGRET = 0x00000032;
749 pub const CR_ACCESS_DENIED: CONFIGRET = 0x00000033;
750 pub const CR_CALL_NOT_IMPLEMENTED: CONFIGRET = 0x00000034;
751 pub const CR_INVALID_PROPERTY: CONFIGRET = 0x00000035;
752 pub const CR_DEVICE_INTERFACE_ACTIVE: CONFIGRET = 0x00000036;
753 pub const CR_NO_SUCH_DEVICE_INTERFACE: CONFIGRET = 0x00000037;
754 pub const CR_INVALID_REFERENCE_STRING: CONFIGRET = 0x00000038;
755 pub const CR_INVALID_CONFLICT_LIST: CONFIGRET = 0x00000039;
756 pub const CR_INVALID_INDEX: CONFIGRET = 0x0000003A;
757 pub const CR_INVALID_STRUCTURE_SIZE: CONFIGRET = 0x0000003B;
758 pub const NUM_CR_RESULTS: CONFIGRET = 0x0000003C;
759