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}