winresult/
_lib.rs

1#![doc = include_str!("../doc/intro.md")]
2//!
3//! ### Types
4//!
5//! |        min |        max | type                                        | notes |
6//! | ----------:| ----------:| ------------------------------------------- | ----- |
7//! |          0 |     0xFFFF | [`ErrorCode`]
8//! |          0 | 0x7FFFFFFF | [`HResultSuccess`]
9//! | 0x80000000 | 0xFFFFFFFF | [`HResultError`]
10//! |          0 | 0xFFFFFFFF | [`HResult`]                                 | [`HResultSuccess`] \| [`HResultError`]
11//! |          0 |      0xFFF |     [`HResultFacilityMicrosoft`]  |
12//! |          0 | 0xFFFFFFFF | [`NtStatus`]                                | ~~`SuccessNtStatus` \| `ErrorNtStatus`~~
13//! |          0 |      0xFFF |     [`NtStatusFacilityMicrosoft`] |
14//! |          0 |          4 |     [`NtStatusSeverity`]          |
15//! |          0 | 0xFFFFFFFF | [`WaitCode`]                                | mostly <= 0x102
16//! |          0 | 0xFFFFFFFF | [`ErrorHResultOrCode`]                      | [`ErrorCode`] \| [`HResultError`]
17//!
18//! ### Modules of Note
19//!
20//! | mod                   | types         |
21//! | --------------------- | ------------- |
22//! | [ERROR]               | [ErrorCode], [HResultError], and [HResultSuccess]\(!\)
23//! | [FACILITY]            | [HResultFacilityMicrosoft], [NtStatusFacilityMicrosoft]
24//! | [STATUS]              | [NtStatus]
25//! | [STATUS::SEVERITY]    | [NtStatusSeverity]
26//! | [WAIT]                | [WaitCode]
27//!
28//! ### Buggy Bitwise Comparisons to Forbid
29//!
30//! | left          | right                 | why |
31//! | ------------- | --------------------- | --- |
32//! | [`ErrorCode`] | [`HResultError`]      | never `true`, non-overlapping ranges, need to add or remove facility
33//! | [`ErrorCode`] | [`HResultSuccess`]    | `ERROR_INVALID_FUNCTION == S_FALSE`, need to add or remove facility
34//! | [`ErrorCode`] | [`HResult`]           | `ERROR_INVALID_FUNCTION == S_FALSE`, need to add or remove facility
35//! | [`ErrorCode`] | [`WaitCode`]          | `ERROR_INVALID_FUNCTION == WAIT_OBJECT_0+1`
36//! | \*Success     | \*Error\*             | never `true` except by accident
37//!
38//! ### Conversions
39//!
40//! *   [HResultSuccess] → [HResult]
41//! *   ([HResultFacilityMicrosoft], [ErrorCode]) → [HResultError] → [HResult]
42
43#![no_std]
44
45
46
47extern crate winresult_types as types;
48
49pub use types::{
50    ErrorCode,
51    HResult,
52    HResultFacilityMicrosoft,
53    HResultSuccess,
54    HResultError,
55    NtStatus,
56    NtStatusFacilityMicrosoft,
57    NtStatusSeverity,
58    WaitCode,
59    ErrorHResultOrCode,
60};
61
62pub use gen::codes::{*, STATUS};
63
64
65
66/// **FACILITY_\* Values** for [HResult]s and [NtStatus]es.<br>
67/// pub mod [FACILITY::HRESULT::*](Self::HRESULT),
68/// [FACILITY::NTSTATUS::*](Self::NTSTATUS);
69/// <br><br>
70#[allow(non_snake_case)]
71pub mod FACILITY {
72    /// HRESULT facilities
73    pub mod HRESULT {
74        use crate::HResultFacilityMicrosoft;
75        macro_rules! microsoft_hresult_facilities {($(
76            #define FACILITY_ $f:ident $value:literal
77        )*) => {$(
78            #[doc = concat!("`", stringify!($value), "` (HRESULT)")]
79            pub const $f : HResultFacilityMicrosoft = HResultFacilityMicrosoft::from_constant($value);
80        )*}}
81        include!("hresult/extra.facilities.rs");
82        include!("hresult/winerror.facilities.rs");
83    }
84
85    /// NTSTATUS facilities
86    pub mod NTSTATUS {
87        use crate::NtStatusFacilityMicrosoft;
88        macro_rules! microsoft_ntstatus_facilities {($(
89            #define $prefix:ident $f:ident $value:literal
90        )*) => {$(
91            #[doc = concat!("`", stringify!($value), "` (NTSTATUS)")]
92            pub const $f : NtStatusFacilityMicrosoft = NtStatusFacilityMicrosoft::from_constant($value);
93        )*}}
94        include!("ntstatus/facilities.rs");
95    }
96
97    #[doc(inline)] pub use HRESULT::*;
98    #[doc(inline)] pub use NTSTATUS::*;
99}
100
101/// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-waitformultipleobjectsex#return-value)\]
102/// WAIT_\* values returned by various WaitFor\* and other win32 functions.
103#[allow(non_snake_case)]
104pub mod WAIT {
105    use super::*;
106
107    pub const OBJECT_0      : WaitCode = WaitCode::from_constant(0); // STATUS_WAIT_0
108
109    // DO NOT INCLUDE: CHILD, GRANDCHILD (these are for _cwait, not WaitFor*, and ignored to boot according to process.h!
110
111    pub const ABANDONED_0   : WaitCode = WaitCode::from_constant(0x80); // STATUS_ABANDONED_WAIT_0
112
113    /// The wait was ended by one or more user-mode [asynchronous procedure calls](https://docs.microsoft.com/en-us/windows/desktop/Sync/asynchronous-procedure-calls) (APC) queued to the thread.
114    pub const IO_COMPLETION : WaitCode = WaitCode::from_constant(0xC0); // STATUS_USER_APC
115
116    /// The time-out interval elapsed.
117    pub const TIMEOUT       : WaitCode = WaitCode::from_constant(258); // = 0x102 = STATUS_TIMEOUT
118
119    // PENDING = 0x103 = 259 (STATUS_*, but no WAIT_*?)
120
121    /// The function has failed. To get extended error information, generally call [GetLastError](https://docs.microsoft.com/en-us/windows/desktop/api/errhandlingapi/nf-errhandlingapi-getlasterror).
122    pub const FAILED        : WaitCode = WaitCode::from_constant(0xFFFFFFFF);
123
124    /// WAIT_OBJECT_0 + n
125    ///
126    /// ### Returns
127    /// *   [None]                  if `n >= 64` (MAXIMUM_WAIT_OBJECTS)
128    /// *   [Some]\([WaitCode]\)    otherwise
129    pub const fn OBJECT(n: u32) -> Option<WaitCode> {
130        if n >= MAXIMUM_WAIT_OBJECTS { return None }
131        Some(WaitCode::from_constant(WAIT::OBJECT_0.to_u32() + n))
132    }
133
134    /// WAIT_ABANDONED_0 + n
135    ///
136    /// ### Returns
137    /// *   [None]                  if `n >= 64` (MAXIMUM_WAIT_OBJECTS)
138    /// *   [Some]\([WaitCode]\)    otherwise
139    pub const fn ABANDONED(n: u32) -> Option<WaitCode> {
140        if n >= MAXIMUM_WAIT_OBJECTS { return None }
141        Some(WaitCode::from_constant(WAIT::ABANDONED_0.to_u32() + n))
142    }
143
144    /// Maximum number of wait objects
145    const MAXIMUM_WAIT_OBJECTS : u32 = 64;
146}
147
148
149
150mod gen {
151    pub mod codes {
152        #![allow(non_snake_case)]
153        #![allow(non_upper_case_globals)]
154        use types::{ErrorCode, HResultSuccess, HResultError, NtStatus, NtStatusSeverity};
155
156
157
158        #[path = "STATUS.rs"] mod _STATUS;
159        /// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/87fba13e-bf06-450e-83b1-9241dc81e781)\]
160        /// [NtStatus](types::NtStatus) errors, warnings, and other codes (for use in e.g. Kernel / Drivers)
161        pub mod STATUS {
162            use super::*;
163
164            /// \[[docs.microsoft.com](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/87fba13e-bf06-450e-83b1-9241dc81e781)\]
165            /// [NtStatus::sev]\(\):
166            /// [SUCCESS](Self::SUCCESS)
167            /// [INFORMATIONAL](Self::INFORMATIONAL)
168            /// [WARNING](Self::WARNING)
169            /// [ERROR](Self::ERROR)
170            pub mod SEVERITY {
171                use super::*;
172
173                pub const SUCCESS       : NtStatusSeverity = NtStatusSeverity::from_constant(0);
174                pub const INFORMATIONAL : NtStatusSeverity = NtStatusSeverity::from_constant(1);
175                pub const WARNING       : NtStatusSeverity = NtStatusSeverity::from_constant(2);
176                pub const ERROR         : NtStatusSeverity = NtStatusSeverity::from_constant(3);
177            }
178
179            // TODO: SUCCESS = 0 ?
180
181            pub use super::_STATUS::*;
182        }
183
184        /// **Success codes**
185        pub mod S;
186
187
188
189        // ---- ERRORS ----
190
191        /// [WinRT](https://en.wikipedia.org/wiki/Windows_Runtime) / [UWP](https://en.wikipedia.org/wiki/Universal_Windows_Platform) AppModel
192        pub mod APPMODEL;
193
194        /// [APPX](https://en.wikipedia.org/wiki/Universal_Windows_Platform_apps#APPX) package
195        pub mod APPX;
196
197        /// Background Task
198        pub mod BT;
199
200        /// Remote Desktop Protocol Bitmap Cache?
201        pub mod CACHE;
202
203        /// [COM Categories](https://docs.microsoft.com/en-us/windows/win32/api/comcat/)
204        pub mod CAT;
205
206        /// Certificates (for e.g. HTTPS etc.)
207        pub mod CERT;
208
209        /// Certificate Server (for e.g. Certificate Authority validation, etc.)
210        pub mod CERTSRV;
211
212        /// COM Class
213        pub mod CLASS;
214
215        /// Clipboard
216        pub mod CLIPBRD;
217
218        /// COM
219        pub mod CO;
220
221        /// [COM Admin / Catalog](https://docs.microsoft.com/en-us/windows/win32/api/comadmin/)
222        pub mod COMADMIN;
223
224        /// [COM+ Queued Components Protocol](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wpo/55d601ed-c63b-485b-8648-53866b3e8e21)
225        pub mod COMQC;
226
227        /// [DCOM Context](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/94a587a3-826a-4bac-969b-ae0bbfc9a663)?
228        pub mod CONTEXT;
229        pub mod CONVERT10;
230        pub mod CRYPT;
231        pub mod CS;
232
233        /// [Direct3D](https://docs.microsoft.com/en-us/windows/win32/direct3d)
234        pub mod D3D { use super::*; pub const OK : HResultSuccess = HResultSuccess::from_constant(0); }
235
236        /// [Direct3D](https://docs.microsoft.com/en-us/windows/win32/direct3d) 10+
237        pub mod D3D10;
238
239        /// [Direct3D 11](https://docs.microsoft.com/en-us/windows/win32/direct3d11/atoc-dx-graphics-direct3d-11)+
240        pub mod D3D11;
241
242        /// [Direct3D 12](https://docs.microsoft.com/en-us/windows/win32/direct3d12/direct3d-12-graphics)+
243        pub mod D3D12;
244
245        /// [Direct3D](https://docs.microsoft.com/en-us/windows/win32/direct3d) Errors
246        pub mod D3DERR;
247
248        /// [D3DX](https://en.wikipedia.org/wiki/D3DX) Errors
249        pub mod D3DXERR;
250
251        /// [D3DX](https://en.wikipedia.org/wiki/D3DX) `.X` file type errors
252        pub mod D3DXFERR;
253
254        /// [Direct3D](https://docs.microsoft.com/en-us/windows/win32/direct3d)
255        pub mod D3DOK;
256
257        /// OLE / Clipboard Stuff?
258        pub mod DATA;
259
260        /// [DirectComposition](https://docs.microsoft.com/en-us/windows/win32/directcomp/directcomposition-portal)
261        pub mod DCOMPOSITION;
262
263        /// Digital Signature
264        pub mod DIGSIG;
265
266        /// [IDispatch](https://docs.microsoft.com/en-us/windows/win32/api/oaidl/nf-oaidl-idispatch-invoke)
267        pub mod DISP;
268
269        /// Domain Name Services
270        pub mod DNS;
271
272        /// [Drag and Drop](https://docs.microsoft.com/en-us/windows/win32/com/drag-and-drop)
273        pub mod DRAGDROP;
274
275        /// OLE / Data Values / Clipboard Stuff?
276        pub mod DV;
277
278        /// Display Window Manager (desktop rendering composition)
279        pub mod DWM;
280
281        /// [DirectWrite](https://docs.microsoft.com/en-us/windows/win32/directwrite/direct-write-portal)
282        pub mod DWRITE;
283
284        /// DirectX
285        pub mod DXCORE;
286
287        /// [DXGI](https://docs.microsoft.com/en-us/windows/win32/direct3ddxgi/dx-graphics-dxgi)
288        pub mod DXGI;
289
290        /// **Errors Codes**.  Typically [HResultError]s.
291        pub mod E;
292
293        /// Exchange ActiveSync
294        pub mod EAS;
295
296        /// DO NOT EXPOSE THIS MESS AS IS.  See [doc/ept-and-rpc-codes-are-evil.md](https://github.com/MaulingMonkey/winresult/blob/5094a8a5568392ef855babd8bc62458f29153e46/crates/winresult/doc/ept-and-rpc-codes-are-evil.md) for details.
297        ///
298        /// **E**ntry **P**oin**t** for Remote Procedure Calls
299        #[allow(dead_code)] mod EPT {}
300
301        #[path = "ERROR.rs"] mod _ERROR;
302        /// **Error Codes**.  Mostly a mixture of [HResultError]s and [ErrorCode]s.
303        /// submodules:
304        /// [CLOUD_FILE](Self::CLOUD_FILE),
305        /// [CLUSTER](Self::CLUSTER),
306        /// [DBG](Self::DBG),
307        /// [DS](Self::DS),
308        /// [EVT](Self::EVT),
309        /// [GRAPHICS](Self::GRAPHICS),
310        /// [IPSEC](Self::IPSEC),
311        /// [MRM](Self::MRM),
312        /// [MUI](Self::MUI),
313        /// [NDIS](Self::NDIS),
314        /// [PRI_MERGE](Self::PRI_MERGE),
315        /// [SECUREBOOT](Self::SECUREBOOT),
316        /// [SERVICE](Self::SERVICE),
317        /// [SVHDX](Self::SVHDX),
318        /// [SXS](Self::SXS),
319        /// [SXS::XML](Self::SXS::XML),
320        /// [VHD](Self::VHD),
321        /// [WMI](Self::WMI)
322        /// <br>
323        /// Note that `ERROR::SUBCATEGORY::CODE` is also generally exported as `ERROR::SUBCATEGORY_CODE`, although the latter is hidden from the docs to reduce clutter.
324        /// <br><br>
325        pub mod ERROR {
326            use types::{ErrorCode, HResultSuccess, HResultError};
327
328            // TODO: SUCCESS = 0 ?
329
330            pub use super::_ERROR::*;
331
332            /// WinSpool / Printer related
333            pub mod BIDI;
334
335            /// [OneDrive](https://en.wikipedia.org/wiki/OneDrive) / [Cloud Filter API](https://docs.microsoft.com/en-us/windows/win32/api/_cloudapi/)
336            pub mod CLOUD_FILE;
337
338            /// [Windows Clustering](https://docs.microsoft.com/en-us/windows/win32/api/_mscs/)
339            pub mod CLUSTER;
340
341            /// [Debugging](https://docs.microsoft.com/en-us/windows/win32/debug/debugging-functions)
342            pub mod DBG;
343
344            /// DHCP-related?
345            pub mod DDS;
346
347            /// DHCP
348            pub mod DHCP;
349
350            /// [Domain Services](https://en.wikipedia.org/wiki/Active_Directory#Domain_Services)
351            pub mod DS;
352
353            /// [Windows Event Log](https://docs.microsoft.com/en-us/windows/win32/wes/windows-event-log-error-constants)
354            pub mod EVT;
355
356            /// I/O Filter
357            pub mod FLT;
358
359            /// WinINet / File Transfer Protocol
360            pub mod FTP;
361
362            /// Direct3D and other graphics APIs
363            pub mod GRAPHICS;
364
365            /// WinINet / Gopher Protocol
366            pub mod GOPHER;
367
368            /// WinINet / Hyper Text Transfer Protocol
369            pub mod HTTP;
370
371            /// WinINet
372            pub mod INTERNET;
373
374            /// [IPSec](https://en.wikipedia.org/wiki/IPsec)
375            pub mod IPSEC;
376
377            /// [Package Resource Indexing](https://docs.microsoft.com/en-us/windows/win32/menurc/pri-indexing-reference)
378            pub mod MRM;
379
380            /// [Multilingual User Interface](https://en.wikipedia.org/wiki/Multilingual_User_Interface)
381            pub mod MUI;
382
383            /// Network Driver Interface Services
384            pub mod NDIS;
385
386            pub mod PATCH;
387
388            /// PatchWiz
389            pub mod PCW;
390
391            /// [Package Resource Indexing](https://docs.microsoft.com/en-us/windows/win32/menurc/pri-indexing-reference)
392            pub mod PRI_MERGE;
393
394            /// [Secure Boot](https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot)
395            pub mod SECUREBOOT;
396
397            pub mod SERVER;
398
399            /// [Service Application](https://docs.microsoft.com/en-us/windows/win32/services/services)
400            pub mod SERVICE;
401
402            /// [Shared Virtual Hard Disk](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn281956(v=ws.11))s (w/ \*.vhdx)
403            pub mod SVHDX;
404
405            #[path = "SXS.rs"] mod _SXS;
406            #[path = "../ERROR_SXS_XML.rs"] mod _SXS_XML;
407
408            /// [Side-by-side assembly](https://en.wikipedia.org/wiki/Side-by-side_assembly)
409            pub mod SXS {
410                pub use super::_SXS::*;
411
412                /// Manifest parsing errors
413                pub mod XML {
414                    pub use super::super::_SXS_XML::*;
415                }
416            }
417
418            /// Virtual Hard Disk (\*.vhd)
419            pub mod VHD;
420
421            pub mod WINHTTP;
422
423            /// WinRS / WinRM shell/client for WS-Management Service?
424            pub mod WINRS;
425
426            /// [Windows Management Instrumentation](https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-start-page)
427            pub mod WMI;
428
429            /// WS-Management Service
430            pub mod WSMAN;
431        }
432
433        /// [COM Events](https://docs.microsoft.com/en-us/windows/win32/api/eventsys/)
434        pub mod EVENT;
435
436        pub mod FA;
437
438        /// Full Volume Encryption / [Bitlocker](https://en.wikipedia.org/wiki/BitLocker)
439        pub mod FVE;
440
441        /// Windows Filtering Platform
442        pub mod FWP; // https://docs.microsoft.com/en-us/windows/win32/fwp/wfp-error-codes
443
444        /// [Host Computer Network](https://docs.microsoft.com/en-us/windows-server/networking/technologies/hcn/hcn-top)
445        pub mod GCN;
446
447        /// [Host Computer Network](https://docs.microsoft.com/en-us/windows-server/networking/technologies/hcn/hcn-top)
448        pub mod HCN;
449
450        /// [Host Compute System](https://docs.microsoft.com/en-us/virtualization/api/hcs/overview)
451        pub mod HCS;
452
453        pub mod HSP;
454
455        /// [WinINet / WinHTTP](https://docs.microsoft.com/en-us/windows/win32/wininet/wininet-vs-winhttp)
456        pub mod HTTP;
457
458        /// [WinINet](https://docs.microsoft.com/en-us/windows/win32/wininet/about-wininet)
459        pub mod INET;
460
461        pub mod INPLACE;
462
463        pub mod INPUT;
464
465        /// [I/O Ring](https://learn.microsoft.com/en-us/windows/win32/api/ioringapi/)
466        pub mod IORING;
467
468        pub mod JSCRIPT;
469        pub mod MEM;
470
471        /// [**M**obile Device Management (MDM)](https://learn.microsoft.com/en-us/windows/client-management/mdm/mdm-overview) **Enroll**ment
472        pub mod MENROLL;
473
474        pub mod MK;
475        pub mod MSDTC;
476        pub mod MSSIPOTF;
477        pub mod NAP;
478
479        /// "Object Linking and Embedding"
480        pub mod OLE;
481
482        /// "Object Linking and Embedding"
483        pub mod OLEOBJ;
484
485        pub mod ONL;
486        pub mod PEER;
487
488        /// [Peer Distribution](https://docs.microsoft.com/en-us/windows/win32/p2psdk/peer-distribution)
489        pub mod PEERDIST;
490
491        pub mod PERSIST;
492
493        /// [Performance Logs and Alerts](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/pla/using-performance-logs-and-alerts)
494        pub mod PLA;
495
496        pub mod PRESENTATION;
497
498        /// COM+ registration database
499        pub mod REGDB;
500
501        /// WinRT COM
502        pub mod RO;
503
504        /// DO NOT EXPOSE THIS MESS AS IS.  See [doc/ept-and-rpc-codes-are-evil.md](https://github.com/MaulingMonkey/winresult/blob/5094a8a5568392ef855babd8bc62458f29153e46/crates/winresult/doc/ept-and-rpc-codes-are-evil.md) for details.
505        ///
506        /// Remote Procedure Call
507        #[allow(dead_code)] mod RPC {}
508
509        /// [Smart Card](https://docs.microsoft.com/en-us/windows/security/identity-protection/smart-cards/smart-card-windows-smart-card-technical-reference)
510        pub mod SCARD;
511
512        /// Task Scheduler
513        pub mod SCHED;
514
515        pub mod SDIAG;
516        pub mod SEC;
517        pub mod SPAPI;
518
519        /// [SQLite](https://www.sqlite.org/index.html)
520        pub mod SQLITE;
521
522        pub mod STATEREPOSITORY;
523
524        /// [Structured Storage](https://docs.microsoft.com/en-us/windows/win32/stg/functions)?
525        pub mod STG;
526
527        /// [Microsoft Store](https://en.wikipedia.org/wiki/Microsoft_Store)?
528        pub mod STORE;
529
530        pub mod TBS;
531        pub mod TBSIMP;
532
533        /// Tablet PC
534        pub mod TPC;
535
536        /// [Trusted Platform Module 2.0](https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-tpm)
537        pub mod TPM_20;
538
539        /// Trusted Platform Module (1.2)
540        pub mod TPM;
541
542        /// Trusted Platform Module
543        pub mod TPMAPI;
544
545        /// Certificate Trust
546        pub mod TRUST;
547
548        /// COM Type Libraries
549        pub mod TYPE;
550
551        pub mod UI;
552
553        /// Universal Telemetry Client (UTC) data in Event Tracing for Windows (ETW) traces.
554        pub mod UTC;
555
556        pub mod VIEW;
557
558        pub mod VM_SAVED_STATE_DUMP;
559
560        /// [WinINet / WinHTTP](https://docs.microsoft.com/en-us/windows/win32/wininet/wininet-vs-winhttp)
561        pub mod WEB;
562
563        /// Wired Equivalent Privacy
564        pub mod WEP;
565
566        /// Windows Error Reporting
567        pub mod WER;
568
569        /// Windows Hypervisor Platform
570        pub mod WHV;
571
572        /// [WinINet](https://docs.microsoft.com/en-us/windows/win32/wininet/about-wininet)
573        pub mod WININET;
574
575        /// Windows Push Notifications?
576        pub mod WPN;
577
578        /// [Windows Web Services](https://docs.microsoft.com/en-us/windows/win32/wsw/portal)
579        pub mod WS;
580
581        /// WinSock
582        pub mod WSA;
583
584        /// [Cross-platform Audio Creation Tool (XACT)](https://en.wikipedia.org/wiki/Cross-platform_Audio_Creation_Tool)
585        pub mod XACT;
586
587        /// [XAudio 2](https://docs.microsoft.com/en-us/windows/win32/xaudio2/xaudio2-introduction)
588        pub mod XAUDIO2;
589
590        /// Pre-Vista [Certificate Enrollment Control](https://docs.microsoft.com/en-us/windows/win32/seccertenroll/mapping-xenroll-dll-to-certenroll-dll)
591        pub mod XENROLL;
592    }
593}