aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/compiler/objcopy.zig2
-rw-r--r--lib/compiler/resinator/main.zig22
-rw-r--r--lib/compiler_rt/emutls.zig2
-rw-r--r--lib/libc/mingw/crt/crtdll.c10
-rw-r--r--lib/libc/mingw/crt/crtexe.c12
-rw-r--r--lib/libc/mingw/def-include/msvcrt-common.def.in16
-rw-r--r--lib/libc/mingw/lib-common/acledit.def1
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-0.def37
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-0_windowsapp.def25
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-1.def20
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-1_windowsapp.def19
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-2.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-3.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-apiquery-l2-1-0.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-atoms-l1-1-0.def21
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-atoms-l1-1-0_windowsapp.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-backgroundtask-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-calendar-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-0.def84
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-0_windowsapp.def57
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-2.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-3.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-com-l2-1-1.def25
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-com-midlproxystub-l1-1-0.def77
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-0.def22
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-console-l1-1-0.def17
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-console-l1-2-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-console-l1-2-1.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-console-l2-1-0.def37
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-console-l2-2-0.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-console-l3-2-0.def36
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-1.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-debug-minidump-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-delayload-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-delayload-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-enclave-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-enclave-l1-1-1.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-1.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-1_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-3.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-3_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-featurestaging-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-featurestaging-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-fibers-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-fibers-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l1-1-0.def13
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l2-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l2-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-fromapp-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l1-1-0.def79
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l1-1-0_windowsapp.def77
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-1.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-2.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-2_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-3.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-0.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-2.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-2_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-3.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-firmware-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-handle-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-heap-l1-1-0.def19
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-heap-l2-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-heap-l2-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-heap-obsolete-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-heap-obsolete-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-interlocked-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-interlocked-l1-2-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-1.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-1_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-job-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-0.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-1.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-ansi-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-ansi-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0.def41
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0_windowsapp.def23
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-1.def18
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-1_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-2.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-2_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-3.def18
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-4.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-5.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-5_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-6.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-largeinteger-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-0.def33
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-0_windowsapp.def27
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-1.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l2-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-ansi-l1-1-0.def22
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-ansi-l1-1-0_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-0.def63
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-0_windowsapp.def62
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-2.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-3.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-4.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-l2-1-0.def16
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-l2-1-0_windowsapp.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-obsolete-l1-2-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-localization-obsolete-l1-2-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-0.def20
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-1.def20
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-1_windowsapp.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-2.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-2_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-3.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-4.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-5.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-5_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-6.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-6_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-7.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-7_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-2-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-2-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-namespace-ansi-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-namespace-l1-1-0.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-normalization-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-path-l1-1-0.def26
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-perfcounters-l1-1-0.def18
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-0.def18
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-ansi-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-1-0.def25
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-2-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-2-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processsnapshot-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-0.def53
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-1.def18
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-2.def13
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-2_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-3.def16
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-3_windowsapp.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-4.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processtopology-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processtopology-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-profile-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-psapi-ansi-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-psapi-ansi-l1-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-psapi-l1-1-0.def25
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-psapi-l1-1-0_windowsapp.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-psm-appnotify-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-quirks-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-quirks-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-1.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-2.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-0.def47
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-1.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-2.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-registry-l2-1-0.def31
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-1-0.def17
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-0_windowsapp.def4
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-shutdown-ansi-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sidebyside-ansi-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sidebyside-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-slapi-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-state-helpers-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-string-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-0.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-0_windowsapp.def13
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-stringansi-l1-1-0.def16
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-stringansi-l1-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-synch-ansi-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-synch-ansi-l1-1-0_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-1-0.def45
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-2-0.def21
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-2-1.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-1-0.def26
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-0.def13
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-0_windowsapp.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-1.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-3.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-3_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-4.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-5.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-6.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-threadpool-l1-2-0.def41
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-threadpool-legacy-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-timezone-l1-1-0.def17
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-timezone-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-1.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-url-l1-1-0.def42
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-url-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-util-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-util-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-windowsceip-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-0.def16
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-1.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-2.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-3.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-0_windowsapp.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-1.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-1_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-l1-1-0.def13
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-registration-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-robuffer-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-roparameterizediid-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-0.def31
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-0_windowsapp.def30
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-1.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-3.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-3.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-0.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-conio-l1-1-0.def38
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-convert-l1-1-0.def.in136
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-environment-l1-1-0.def24
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-filesystem-l1-1-0.def79
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-heap-l1-1-0.def32
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-locale-l1-1-0.def25
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-math-l1-1-0.def.in384
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-multibyte-l1-1-0.def205
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-private-l1-1-0.def.in1174
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-process-l1-1-0.def57
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-runtime-l1-1-0.def.in120
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-stdio-l1-1-0.def194
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-string-l1-1-0.def211
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-time-l1-1-0.def89
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-crt-utility-l1-1-0.def37
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-1.def43
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-1_windowsapp.def17
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-2.def18
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-2_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-1.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-swdevice-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-devices-swdevice-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-advapi32-l1-1-0.def164
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-advapi32-l2-1-0.def92
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-normaliz-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-ole32-l1-1-0.def84
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-shell32-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-shlwapi-l1-1-0.def175
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-shlwapi-l2-1-0.def65
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-user32-l1-1-0.def28
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-downlevel-version-l1-1-0.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-classicprovider-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-classicprovider-l1-1-0_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-consumer-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-consumer-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-controller-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-controller-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-legacy-l1-1-0.def18
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-legacy-l1-1-0_windowsapp.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-obsolete-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-obsolete-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-provider-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-tdh-l1-1-0.def16
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventing-tdh-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-eventlog-legacy-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-gaming-deviceinformation-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-gaming-expandedresources-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-2.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-3.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-4.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-mm-time-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-mm-time-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-net-isolation-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-net-isolation-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-ntuser-sysparams-l1-1-0.def16
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-ntuser-sysparams-l1-1-0_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-oobe-notification-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-perf-legacy-l1-1-0.def13
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-power-base-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-power-base-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-power-limitsmanagement-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-ro-typeresolution-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-ro-typeresolution-l1-1-1.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-appcontainer-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-base-ansi-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-base-ansi-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-base-l1-1-0.def99
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-base-l1-1-0_windowsapp.def59
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-cpwl-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-cpwl-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-credentials-l1-1-0.def33
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-cryptoapi-l1-1-0.def43
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-cryptoapi-l1-1-0_windowsapp.def35
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-isolatedcontainer-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-isolatedcontainer-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-ansi-l2-1-0.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-0.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-lsapolicy-l1-1-0.def17
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-lsapolicy-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-provider-ansi-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-provider-l1-1-0.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-sddl-ansi-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-sddl-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-systemfunctions-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-security-systemfunctions-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-core-ansi-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-core-ansi-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-1.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-2.def6
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-3.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-4.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-management-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-management-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-management-l2-1-0.def12
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-winsvc-l1-1-0.def20
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-service-winsvc-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-obsolete-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-obsolete-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-path-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-registry-l1-1-0.def32
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-registry-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-1.def10
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-stream-l1-1-0.def19
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-stream-winrt-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-sysinfo-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shcore-unicodeansi-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib-common/api-ms-win-shell-shdirectory-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib-common/htui.def1
-rw-r--r--lib/libc/mingw/lib-common/keymgr.def1
-rw-r--r--lib/libc/mingw/lib-common/photowiz.def1
-rw-r--r--lib/libc/mingw/lib-common/prntvpt.def1
-rw-r--r--lib/libc/mingw/lib-common/shlwapi.def248
-rw-r--r--lib/libc/mingw/lib-common/wsmsvc.def3675
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-0.def37
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-0_windowsapp.def25
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-1.def20
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-1_windowsapp.def19
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-2.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-3.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-apiquery-l2-1-0.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-atoms-l1-1-0.def21
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-atoms-l1-1-0_windowsapp.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-backgroundtask-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-calendar-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-0.def84
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-0_windowsapp.def57
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-2.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-3.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-com-l2-1-1.def25
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-com-midlproxystub-l1-1-0.def77
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-0.def22
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-console-l1-1-0.def17
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-console-l1-2-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-console-l1-2-1.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-console-l2-1-0.def37
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-console-l2-2-0.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-console-l3-2-0.def36
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-1.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-debug-minidump-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-delayload-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-delayload-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-enclave-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-enclave-l1-1-1.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-1.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-1_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-3.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-3_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-featurestaging-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-featurestaging-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-fibers-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-fibers-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l1-1-0.def13
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l2-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l2-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-fromapp-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l1-1-0.def79
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l1-1-0_windowsapp.def77
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-1.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-2.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-2_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-3.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-0.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-2.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-2_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-3.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-firmware-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-handle-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-heap-l1-1-0.def19
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-heap-l2-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-heap-l2-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-heap-obsolete-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-heap-obsolete-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-interlocked-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-interlocked-l1-2-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-1.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-1_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-job-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-0.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-1.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-ansi-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-ansi-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-0.def41
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-0_windowsapp.def23
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-1.def18
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-1_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-2.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-2_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-3.def18
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-4.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-5.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-5_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-6.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-largeinteger-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-0.def33
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-0_windowsapp.def27
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-1.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l2-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-ansi-l1-1-0.def22
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-ansi-l1-1-0_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-0.def63
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-0_windowsapp.def62
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-2.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-3.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-4.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-l2-1-0.def16
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-l2-1-0_windowsapp.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-obsolete-l1-2-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-localization-obsolete-l1-2-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-0.def20
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-1.def20
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-1_windowsapp.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-2.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-2_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-3.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-4.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-5.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-5_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-6.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-6_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-7.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-7_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-namedpipe-ansi-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-namedpipe-ansi-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-2-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-2-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-namespace-ansi-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-namespace-l1-1-0.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-normalization-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-path-l1-1-0.def26
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-perfcounters-l1-1-0.def18
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-0.def18
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processenvironment-ansi-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-1-0.def25
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-2-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-2-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processsnapshot-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-0.def53
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-1.def18
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-2.def13
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-2_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-3.def16
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-3_windowsapp.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-4.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processtopology-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processtopology-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-profile-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-psapi-ansi-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-psapi-ansi-l1-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-psapi-l1-1-0.def25
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-psapi-l1-1-0_windowsapp.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-psm-appnotify-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-quirks-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-quirks-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-1.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-2.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-0.def47
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-1.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-2.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-registry-l2-1-0.def31
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-1.def3
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-shutdown-ansi-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sidebyside-ansi-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sidebyside-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-slapi-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-state-helpers-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-string-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-0.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-0_windowsapp.def13
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-stringansi-l1-1-0.def16
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-stringansi-l1-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-synch-ansi-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-synch-ansi-l1-1-0_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-synch-l1-1-0.def45
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-synch-l1-2-0.def21
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-synch-l1-2-1.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-1-0.def26
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-0.def13
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-0_windowsapp.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-1.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-3.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-3_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-4.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-5.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-6.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-threadpool-l1-2-0.def41
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-threadpool-legacy-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-timezone-l1-1-0.def17
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-timezone-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-1.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-url-l1-1-0.def42
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-url-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-util-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-util-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-0_windowsapp.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-windowsceip-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-0.def16
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-1.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-2.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-3.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-0_windowsapp.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-1.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-1_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-l1-1-0.def13
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-registration-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-robuffer-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-roparameterizediid-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-0.def27
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-0_windowsapp.def26
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-1.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-1_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-3.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-3.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-0.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-1.def43
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-1_windowsapp.def17
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-2.def18
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-2_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-0_windowsapp.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-1.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-swdevice-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-devices-swdevice-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-advapi32-l1-1-0.def164
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-advapi32-l2-1-0.def92
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-normaliz-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-ole32-l1-1-0.def84
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-shell32-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-shlwapi-l1-1-0.def175
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-shlwapi-l2-1-0.def65
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-user32-l1-1-0.def28
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-downlevel-version-l1-1-0.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-classicprovider-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-classicprovider-l1-1-0_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-consumer-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-consumer-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-controller-l1-1-0.def15
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-controller-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-legacy-l1-1-0.def18
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-legacy-l1-1-0_windowsapp.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-obsolete-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-obsolete-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-provider-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-tdh-l1-1-0.def16
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventing-tdh-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-eventlog-legacy-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-gaming-deviceinformation-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-gaming-expandedresources-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-2.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-3.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-4.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-mm-time-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-mm-time-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-net-isolation-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-net-isolation-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-ntuser-sysparams-l1-1-0.def16
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-ntuser-sysparams-l1-1-0_windowsapp.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-oobe-notification-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-perf-legacy-l1-1-0.def13
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-power-base-l1-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-power-base-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-power-limitsmanagement-l1-1-0.def14
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-1.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-ro-typeresolution-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-ro-typeresolution-l1-1-1.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-appcontainer-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-base-ansi-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-base-ansi-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-base-l1-1-0.def99
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-base-l1-1-0_windowsapp.def59
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-cpwl-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-cpwl-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-credentials-l1-1-0.def33
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-cryptoapi-l1-1-0.def43
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-cryptoapi-l1-1-0_windowsapp.def35
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-isolatedcontainer-l1-1-0.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-isolatedcontainer-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-lsalookup-ansi-l2-1-0.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-0.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-lsapolicy-l1-1-0.def17
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-lsapolicy-l1-1-0_windowsapp.def9
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-provider-ansi-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-provider-l1-1-0.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-sddl-ansi-l1-1-0.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-sddl-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-systemfunctions-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-security-systemfunctions-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-core-ansi-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-core-ansi-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-1.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-2.def6
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-3.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-4.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-management-l1-1-0.def11
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-management-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-management-l2-1-0.def12
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-winsvc-l1-1-0.def20
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-service-winsvc-l1-1-0_windowsapp.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-obsolete-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-obsolete-l1-1-0_windowsapp.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-path-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-registry-l1-1-0.def32
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-registry-l1-1-1.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-1.def10
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-2.def5
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-stream-l1-1-0.def19
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-stream-winrt-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-sysinfo-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shcore-unicodeansi-l1-1-0.def8
-rw-r--r--lib/libc/mingw/lib32/api-ms-win-shell-shdirectory-l1-1-0.def7
-rw-r--r--lib/libc/mingw/lib32/davclnt.def1
-rw-r--r--lib/libc/mingw/lib32/msoledbsql.def1
-rw-r--r--lib/libc/mingw/lib32/p2p.def1
-rw-r--r--lib/libc/mingw/lib32/p2pcollab.def1
-rw-r--r--lib/libc/mingw/lib32/prntvpt.def1
-rw-r--r--lib/libc/mingw/lib32/shlwapi.def235
-rw-r--r--lib/libc/mingw/lib32/spoolss.def1
-rw-r--r--lib/libc/mingw/lib32/wsmsvc.def3673
-rw-r--r--lib/libc/mingw/lib64/PS5UI.def1
-rw-r--r--lib/libc/mingw/lib64/PSCRIPT5.def1
-rw-r--r--lib/libc/mingw/lib64/UNIDRV.def1
-rw-r--r--lib/libc/mingw/lib64/UNIDRVUI.def1
-rw-r--r--lib/libc/mingw/lib64/admparse.def1
-rw-r--r--lib/libc/mingw/lib64/dmconfig.def1
-rw-r--r--lib/libc/mingw/lib64/exstrace.def1
-rw-r--r--lib/libc/mingw/lib64/fldrclnr.def1
-rw-r--r--lib/libc/mingw/lib64/fxsdrv.def1
-rw-r--r--lib/libc/mingw/lib64/fxsst.def1
-rw-r--r--lib/libc/mingw/lib64/gpkcsp.def1
-rw-r--r--lib/libc/mingw/lib64/guitrn.def1
-rw-r--r--lib/libc/mingw/lib64/hnetwiz.def1
-rw-r--r--lib/libc/mingw/lib64/ieencode.def1
-rw-r--r--lib/libc/mingw/lib64/iisrtl.def1
-rw-r--r--lib/libc/mingw/lib64/imeshare.def1
-rw-r--r--lib/libc/mingw/lib64/imjpcus.def1
-rw-r--r--lib/libc/mingw/lib64/imjputyc.def1
-rw-r--r--lib/libc/mingw/lib64/iyuv_32.def1
-rw-r--r--lib/libc/mingw/lib64/localspl.def1
-rw-r--r--lib/libc/mingw/lib64/log.def1
-rw-r--r--lib/libc/mingw/lib64/migism.def1
-rw-r--r--lib/libc/mingw/lib64/msdart.def1
-rw-r--r--lib/libc/mingw/lib64/msoledbsql.def1
-rw-r--r--lib/libc/mingw/lib64/mtxclu.def1
-rw-r--r--lib/libc/mingw/lib64/netplwiz.def1
-rw-r--r--lib/libc/mingw/lib64/ntlanman.def1
-rw-r--r--lib/libc/mingw/lib64/ntlanui.def1
-rw-r--r--lib/libc/mingw/lib64/oledb32.def1
-rw-r--r--lib/libc/mingw/lib64/p2pcollab.def1
-rw-r--r--lib/libc/mingw/lib64/printui.def1
-rw-r--r--lib/libc/mingw/lib64/profmap.def1
-rw-r--r--lib/libc/mingw/lib64/script.def1
-rw-r--r--lib/libc/mingw/lib64/spoolss.def1
-rw-r--r--lib/libc/mingw/lib64/sqlxmlx.def1
-rw-r--r--lib/libc/mingw/lib64/srrstr.def1
-rw-r--r--lib/libc/mingw/lib64/strmfilt.def1
-rw-r--r--lib/libc/mingw/lib64/sysmod.def1
-rw-r--r--lib/libc/mingw/lib64/vdsutil.def1
-rw-r--r--lib/libc/mingw/lib64/w3tp.def1
-rw-r--r--lib/libc/mingw/lib64/wiaservc.def1
-rw-r--r--lib/libc/mingw/lib64/xinput1_1.def1
-rw-r--r--lib/libc/mingw/lib64/xinput1_2.def1
-rw-r--r--lib/libc/mingw/lib64/xinput1_3.def1
-rw-r--r--lib/libc/mingw/libsrc/strmiids.c5
-rw-r--r--lib/libc/mingw/misc/mkstemp.c6
-rw-r--r--lib/libc/mingw/stdio/mingw_pformat.c65
-rw-r--r--lib/std/Build.zig8
-rw-r--r--lib/std/Build/Step/Run.zig44
-rw-r--r--lib/std/Random/benchmark.zig6
-rw-r--r--lib/std/Thread.zig144
-rw-r--r--lib/std/Thread/Futex.zig135
-rw-r--r--lib/std/Thread/Mutex.zig21
-rw-r--r--lib/std/builtin.zig6
-rw-r--r--lib/std/c.zig57
-rw-r--r--lib/std/c/darwin.zig239
-rw-r--r--lib/std/c/dragonfly.zig2
-rw-r--r--lib/std/c/freebsd.zig4
-rw-r--r--lib/std/c/haiku.zig4
-rw-r--r--lib/std/c/linux.zig4
-rw-r--r--lib/std/c/netbsd.zig4
-rw-r--r--lib/std/c/openbsd.zig4
-rw-r--r--lib/std/c/solaris.zig4
-rw-r--r--lib/std/c/wasi.zig2
-rw-r--r--lib/std/child_process.zig181
-rw-r--r--lib/std/crypto/Certificate/Bundle.zig2
-rw-r--r--lib/std/crypto/Certificate/Bundle/macos.zig2
-rw-r--r--lib/std/crypto/tlcsprng.zig17
-rw-r--r--lib/std/crypto/tls/Client.zig28
-rw-r--r--lib/std/debug.zig117
-rw-r--r--lib/std/dwarf.zig4
-rw-r--r--lib/std/dwarf/abi.zig85
-rw-r--r--lib/std/dynamic_library.zig60
-rw-r--r--lib/std/fmt.zig17
-rw-r--r--lib/std/fmt/format_float.zig (renamed from lib/std/fmt/ryu128.zig)10
-rw-r--r--lib/std/fs.zig171
-rw-r--r--lib/std/fs/AtomicFile.zig3
-rw-r--r--lib/std/fs/Dir.zig157
-rw-r--r--lib/std/fs/File.zig61
-rw-r--r--lib/std/fs/get_app_data_dir.zig15
-rw-r--r--lib/std/fs/test.zig142
-rw-r--r--lib/std/fs/wasi.zig5
-rw-r--r--lib/std/hash/benchmark.zig12
-rw-r--r--lib/std/hash_map.zig10
-rw-r--r--lib/std/heap.zig20
-rw-r--r--lib/std/heap/PageAllocator.zig32
-rw-r--r--lib/std/http/Client.zig10
-rw-r--r--lib/std/io.zig110
-rw-r--r--lib/std/io/buffered_tee.zig379
-rw-r--r--lib/std/io/c_writer.zig7
-rw-r--r--lib/std/math/frexp.zig405
-rw-r--r--lib/std/net.zig333
-rw-r--r--lib/std/os.zig7516
-rw-r--r--lib/std/os/emscripten.zig4
-rw-r--r--lib/std/os/linux.zig623
-rw-r--r--lib/std/os/linux/IoUring.zig502
-rw-r--r--lib/std/os/linux/arm-eabi.zig4
-rw-r--r--lib/std/os/linux/arm64.zig4
-rw-r--r--lib/std/os/linux/bpf.zig3
-rw-r--r--lib/std/os/linux/errno/generic.zig460
-rw-r--r--lib/std/os/linux/errno/mips.zig141
-rw-r--r--lib/std/os/linux/errno/sparc.zig144
-rw-r--r--lib/std/os/linux/io_uring_sqe.zig123
-rw-r--r--lib/std/os/linux/mips.zig4
-rw-r--r--lib/std/os/linux/mips64.zig4
-rw-r--r--lib/std/os/linux/powerpc.zig4
-rw-r--r--lib/std/os/linux/powerpc64.zig4
-rw-r--r--lib/std/os/linux/riscv64.zig4
-rw-r--r--lib/std/os/linux/sparc64.zig4
-rw-r--r--lib/std/os/linux/start_pie.zig2
-rw-r--r--lib/std/os/linux/test.zig16
-rw-r--r--lib/std/os/linux/tls.zig19
-rw-r--r--lib/std/os/linux/vdso.zig2
-rw-r--r--lib/std/os/linux/x86.zig4
-rw-r--r--lib/std/os/linux/x86_64.zig4
-rw-r--r--lib/std/os/plan9.zig97
-rw-r--r--lib/std/os/plan9/errno.zig84
-rw-r--r--lib/std/os/wasi.zig4
-rw-r--r--lib/std/os/windows.zig21
-rw-r--r--lib/std/os/windows/test.zig4
-rw-r--r--lib/std/os/windows/ws2_32.zig2
-rw-r--r--lib/std/pdb.zig1
-rw-r--r--lib/std/posix.zig7326
-rw-r--r--lib/std/posix/test.zig (renamed from lib/std/os/test.zig)435
-rw-r--r--lib/std/process.zig197
-rw-r--r--lib/std/start.zig45
-rw-r--r--lib/std/std.zig7
-rw-r--r--lib/std/time.zig55
-rw-r--r--lib/std/zig.zig2
-rw-r--r--lib/std/zig/Server.zig2
-rw-r--r--lib/std/zig/system.zig19
-rw-r--r--lib/std/zig/system/NativePaths.zig6
-rw-r--r--lib/std/zig/system/darwin/macos.zig3
917 files changed, 30803 insertions, 11129 deletions
diff --git a/lib/compiler/objcopy.zig b/lib/compiler/objcopy.zig
index 67926be335..7772b8f290 100644
--- a/lib/compiler/objcopy.zig
+++ b/lib/compiler/objcopy.zig
@@ -1285,7 +1285,7 @@ const ElfFileHelper = struct {
for (consolidated.items) |cmd| {
switch (cmd) {
.write_data => |data| {
- var iovec = [_]std.os.iovec_const{.{ .iov_base = data.data.ptr, .iov_len = data.data.len }};
+ var iovec = [_]std.posix.iovec_const{.{ .iov_base = data.data.ptr, .iov_len = data.data.len }};
try out_file.pwritevAll(&iovec, data.out_offset);
},
.copy_range => |range| {
diff --git a/lib/compiler/resinator/main.zig b/lib/compiler/resinator/main.zig
index b01d720c8c..10ffafcfc7 100644
--- a/lib/compiler/resinator/main.zig
+++ b/lib/compiler/resinator/main.zig
@@ -26,7 +26,7 @@ pub fn main() !void {
if (args.len < 2) {
try renderErrorMessage(stderr.writer(), stderr_config, .err, "expected zig lib dir as first argument", .{});
- std.os.exit(1);
+ std.process.exit(1);
}
const zig_lib_dir = args[1];
var cli_args = args[2..];
@@ -62,7 +62,7 @@ pub fn main() !void {
var options = cli.parse(allocator, cli_args, &cli_diagnostics) catch |err| switch (err) {
error.ParseError => {
try error_handler.emitCliDiagnostics(allocator, cli_args, &cli_diagnostics);
- std.os.exit(1);
+ std.process.exit(1);
},
else => |e| return e,
};
@@ -117,7 +117,7 @@ pub fn main() !void {
},
}
try error_handler.emitMessage(allocator, .note, "to disable auto includes, use the option /:auto-includes none", .{});
- std.os.exit(1);
+ std.process.exit(1);
},
};
@@ -153,16 +153,16 @@ pub fn main() !void {
preprocess.preprocess(&comp, preprocessed_buf.writer(), argv.items, maybe_dependencies_list) catch |err| switch (err) {
error.GeneratedSourceError => {
try error_handler.emitAroDiagnostics(allocator, "failed during preprocessor setup (this is always a bug):", &comp);
- std.os.exit(1);
+ std.process.exit(1);
},
// ArgError can occur if e.g. the .rc file is not found
error.ArgError, error.PreprocessError => {
try error_handler.emitAroDiagnostics(allocator, "failed during preprocessing:", &comp);
- std.os.exit(1);
+ std.process.exit(1);
},
error.StreamTooLong => {
try error_handler.emitMessage(allocator, .err, "failed during preprocessing: maximum file size exceeded", .{});
- std.os.exit(1);
+ std.process.exit(1);
},
error.OutOfMemory => |e| return e,
};
@@ -171,7 +171,7 @@ pub fn main() !void {
} else {
break :full_input std.fs.cwd().readFileAlloc(allocator, options.input_filename, std.math.maxInt(usize)) catch |err| {
try error_handler.emitMessage(allocator, .err, "unable to read input file path '{s}': {s}", .{ options.input_filename, @errorName(err) });
- std.os.exit(1);
+ std.process.exit(1);
};
}
};
@@ -191,14 +191,14 @@ pub fn main() !void {
const final_input = removeComments(mapping_results.result, mapping_results.result, &mapping_results.mappings) catch |err| switch (err) {
error.InvalidSourceMappingCollapse => {
try error_handler.emitMessage(allocator, .err, "failed during comment removal; this is a known bug", .{});
- std.os.exit(1);
+ std.process.exit(1);
},
else => |e| return e,
};
var output_file = std.fs.cwd().createFile(options.output_filename, .{}) catch |err| {
try error_handler.emitMessage(allocator, .err, "unable to create output file '{s}': {s}", .{ options.output_filename, @errorName(err) });
- std.os.exit(1);
+ std.process.exit(1);
};
var output_file_closed = false;
defer if (!output_file_closed) output_file.close();
@@ -231,7 +231,7 @@ pub fn main() !void {
output_file_closed = true;
// Failing to delete is not really a big deal, so swallow any errors
std.fs.cwd().deleteFile(options.output_filename) catch {};
- std.os.exit(1);
+ std.process.exit(1);
},
else => |e| return e,
};
@@ -247,7 +247,7 @@ pub fn main() !void {
if (options.depfile_path) |depfile_path| {
var depfile = std.fs.cwd().createFile(depfile_path, .{}) catch |err| {
try error_handler.emitMessage(allocator, .err, "unable to create depfile '{s}': {s}", .{ depfile_path, @errorName(err) });
- std.os.exit(1);
+ std.process.exit(1);
};
defer depfile.close();
diff --git a/lib/compiler_rt/emutls.zig b/lib/compiler_rt/emutls.zig
index db14ad04ee..111193934a 100644
--- a/lib/compiler_rt/emutls.zig
+++ b/lib/compiler_rt/emutls.zig
@@ -7,7 +7,7 @@ const std = @import("std");
const builtin = @import("builtin");
const common = @import("common.zig");
-const abort = std.os.abort;
+const abort = std.posix.abort;
const assert = std.debug.assert;
const expect = std.testing.expect;
diff --git a/lib/libc/mingw/crt/crtdll.c b/lib/libc/mingw/crt/crtdll.c
index e264d4e964..88450ce9f7 100644
--- a/lib/libc/mingw/crt/crtdll.c
+++ b/lib/libc/mingw/crt/crtdll.c
@@ -35,10 +35,10 @@
extern void __cdecl _initterm(_PVFV *,_PVFV *);
extern void __main ();
extern void _pei386_runtime_relocator (void);
-extern _CRTALLOC(".CRT$XIA") _PIFV __xi_a[];
-extern _CRTALLOC(".CRT$XIZ") _PIFV __xi_z[];
-extern _CRTALLOC(".CRT$XCA") _PVFV __xc_a[];
-extern _CRTALLOC(".CRT$XCZ") _PVFV __xc_z[];
+extern _PIFV __xi_a[];
+extern _PIFV __xi_z[];
+extern _PVFV __xc_a[];
+extern _PVFV __xc_z[];
/* TLS initialization hook. */
@@ -142,7 +142,7 @@ WINBOOL WINAPI DllMainCRTStartup (HANDLE, DWORD, LPVOID);
int __mingw_init_ehandler (void);
#endif
-__attribute__((used)) /* required due to bug in gcc / ld */
+__attribute__((used)) /* required due to GNU LD bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30300 */
WINBOOL WINAPI
DllMainCRTStartup (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved)
{
diff --git a/lib/libc/mingw/crt/crtexe.c b/lib/libc/mingw/crt/crtexe.c
index 03bda59120..9d51268786 100644
--- a/lib/libc/mingw/crt/crtexe.c
+++ b/lib/libc/mingw/crt/crtexe.c
@@ -50,10 +50,10 @@ extern _CRTIMP void __cdecl _initterm(_PVFV *, _PVFV *);
static int __cdecl check_managed_app (void);
-extern _CRTALLOC(".CRT$XIA") _PIFV __xi_a[];
-extern _CRTALLOC(".CRT$XIZ") _PIFV __xi_z[];
-extern _CRTALLOC(".CRT$XCA") _PVFV __xc_a[];
-extern _CRTALLOC(".CRT$XCZ") _PVFV __xc_z[];
+extern _PIFV __xi_a[];
+extern _PIFV __xi_z[];
+extern _PVFV __xc_a[];
+extern _PVFV __xc_z[];
/* TLS initialization hook. */
@@ -146,7 +146,7 @@ static int __tmainCRTStartup (void);
int WinMainCRTStartup (void);
-__attribute__((used)) /* required due to bug in gcc / ld */
+__attribute__((used)) /* required due to GNU LD bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30300 */
int WinMainCRTStartup (void)
{
int ret = 255;
@@ -177,7 +177,7 @@ int mainCRTStartup (void);
int __mingw_init_ehandler (void);
#endif
-__attribute__((used)) /* required due to bug in gcc / ld */
+__attribute__((used)) /* required due to GNU LD bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30300 */
int mainCRTStartup (void)
{
int ret = 255;
diff --git a/lib/libc/mingw/def-include/msvcrt-common.def.in b/lib/libc/mingw/def-include/msvcrt-common.def.in
index b68964db0d..9728b5ab86 100644
--- a/lib/libc/mingw/def-include/msvcrt-common.def.in
+++ b/lib/libc/mingw/def-include/msvcrt-common.def.in
@@ -35,17 +35,19 @@ ADD_UNDERSCORE(execv)
ADD_UNDERSCORE(execve)
ADD_UNDERSCORE(execvp)
ADD_UNDERSCORE(execvpe)
+ADD_UNDERSCORE(fcloseall)
ADD_UNDERSCORE(fcvt)
ADD_UNDERSCORE(fdopen)
ADD_UNDERSCORE(fgetchar)
ADD_UNDERSCORE(fgetwchar)
ADD_UNDERSCORE(filelength)
ADD_UNDERSCORE(fileno)
-; fpreset)
+; Alias fpreset is set in CRT_fp10.c and CRT_fp8.c.
+; ADD_UNDERSCORE(fpreset)
ADD_UNDERSCORE(fputchar)
ADD_UNDERSCORE(fputwchar)
-;fstat)
-;ftime)
+; ADD_UNDERSCORE(fstat)
+; ADD_UNDERSCORE(ftime)
ADD_UNDERSCORE(gcvt)
ADD_UNDERSCORE(getch)
ADD_UNDERSCORE(getche)
@@ -90,7 +92,7 @@ ADD_UNDERSCORE(spawnv)
ADD_UNDERSCORE(spawnve)
ADD_UNDERSCORE(spawnvp)
ADD_UNDERSCORE(spawnvpe)
-;stat)
+; ADD_UNDERSCORE(stat)
#ifndef UCRTBASE
ADD_UNDERSCORE(strcmpi)
#endif
@@ -134,13 +136,13 @@ ADD_UNDERSCORE(y0)
ADD_UNDERSCORE(y1)
ADD_UNDERSCORE(yn)
ADD_UNDERSCORE(chgsign)
-;scalb
+; ADD_UNDERSCORE(scalb)
ADD_UNDERSCORE(finite)
ADD_UNDERSCORE(fpclass)
; C99 functions
-;cabs
+; ADD_UNDERSCORE(cabs)
ADD_UNDERSCORE(hypot)
-;logb
+; ADD_UNDERSCORE(logb)
ADD_UNDERSCORE(nextafter)
#ifndef UCRTBASE
diff --git a/lib/libc/mingw/lib-common/acledit.def b/lib/libc/mingw/lib-common/acledit.def
index da55b74007..5d29e73a5d 100644
--- a/lib/libc/mingw/lib-common/acledit.def
+++ b/lib/libc/mingw/lib-common/acledit.def
@@ -9,7 +9,6 @@ EXPORTS
EditAuditInfo
EditOwnerInfo
EditPermissionInfo
-DllMain
FMExtensionProcW
SedDiscretionaryAclEditor
SedSystemAclEditor
diff --git a/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-0.def
new file mode 100644
index 0000000000..f2117fb201
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-0.def
@@ -0,0 +1,37 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-0
+
+EXPORTS
+
+ClosePackageInfo
+CreateDeviceAccessInstance
+GetApplicationUserModelId
+GetCurrentApplicationUserModelId
+GetCurrentPackageFamilyName
+GetCurrentPackageFullName
+GetCurrentPackageId
+GetCurrentPackageInfo
+GetCurrentPackagePath
+GetPackageFamilyName
+GetPackageFullName
+GetPackageId
+GetPackageInfo
+GetPackagePath
+GetPackagesByPackageFamily
+OpenPackageInfoByFullName
+PackageFamilyNameFromFullName
+PackageFamilyNameFromId
+PackageFullNameFromId
+PackageIdFromFullName
+PackageNameAndPublisherIdFromFamilyName
+ProcessTrackerInsertOrWait
+ProcessTrackerRemove
+TokenBindingDeleteAllBindings
+TokenBindingDeleteBinding
+TokenBindingGenerateBinding
+TokenBindingGenerateID
+TokenBindingGenerateIDForUri
+TokenBindingGenerateMessage
+TokenBindingGetHighestSupportedVersion
+TokenBindingGetKeyTypesClient
+TokenBindingGetKeyTypesServer
+TokenBindingVerifyMessage
diff --git a/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..a22ea4d350
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-0_windowsapp.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-0
+
+EXPORTS
+
+ClosePackageInfo
+CreateDeviceAccessInstance
+GetApplicationUserModelId
+GetCurrentApplicationUserModelId
+GetCurrentPackageFamilyName
+GetCurrentPackageFullName
+GetCurrentPackageId
+GetCurrentPackageInfo
+GetCurrentPackagePath
+GetPackageFamilyName
+GetPackageFullName
+GetPackageId
+GetPackageInfo
+GetPackagePath
+GetPackagesByPackageFamily
+OpenPackageInfoByFullName
+PackageFamilyNameFromFullName
+PackageFamilyNameFromId
+PackageFullNameFromId
+PackageIdFromFullName
+PackageNameAndPublisherIdFromFamilyName
diff --git a/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-1.def
new file mode 100644
index 0000000000..6dfe386d51
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-1.def
@@ -0,0 +1,20 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-1
+
+EXPORTS
+
+FindPackagesByPackageFamily
+FormatApplicationUserModelId
+GetApplicationUserModelIdFromToken
+GetPackageApplicationIds
+GetPackageFamilyNameFromToken
+GetPackageFullNameFromToken
+GetPackagePathByFullName
+GetStagedPackageOrigin
+GetStagedPackagePathByFullName
+OpenPackageInfoByFullNameForUser
+ParseApplicationUserModelId
+VerifyApplicationUserModelId
+VerifyPackageFamilyName
+VerifyPackageFullName
+VerifyPackageId
+VerifyPackageRelativeApplicationId
diff --git a/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..8cbafa6a6a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-1_windowsapp.def
@@ -0,0 +1,19 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-1
+
+EXPORTS
+
+FindPackagesByPackageFamily
+FormatApplicationUserModelId
+GetApplicationUserModelIdFromToken
+GetPackageApplicationIds
+GetPackageFamilyNameFromToken
+GetPackageFullNameFromToken
+GetPackagePathByFullName
+GetStagedPackagePathByFullName
+OpenPackageInfoByFullNameForUser
+ParseApplicationUserModelId
+VerifyApplicationUserModelId
+VerifyPackageFamilyName
+VerifyPackageFullName
+VerifyPackageId
+VerifyPackageRelativeApplicationId
diff --git a/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-2.def
new file mode 100644
index 0000000000..ff5158c833
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-2.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-2
+
+EXPORTS
+
+AppPolicyGetClrCompat
+AppPolicyGetCreateFileAccess
+AppPolicyGetLifecycleManagement
+AppPolicyGetMediaFoundationCodecLoading
+AppPolicyGetProcessTerminationMethod
+AppPolicyGetShowDeveloperDiagnostic
+AppPolicyGetThreadInitializationType
+AppPolicyGetWindowingModel
diff --git a/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-3.def
new file mode 100644
index 0000000000..8294812aa3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-appmodel-runtime-l1-1-3.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-3
+
+EXPORTS
+
+GetCurrentPackageInfo2
+GetCurrentPackagePath2
+GetPackageInfo2
+GetPackagePathByFullName2
+GetStagedPackagePathByFullName2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-apiquery-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-apiquery-l2-1-0.def
new file mode 100644
index 0000000000..b5cdfb7181
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-apiquery-l2-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-apiquery-l2-1-0
+
+EXPORTS
+
+IsApiSetImplemented
+TokenBindingDeleteAllBindings
+TokenBindingDeleteBinding
+TokenBindingGenerateBinding
+TokenBindingGenerateID
+TokenBindingGenerateIDForUri
+TokenBindingGenerateMessage
+TokenBindingGetHighestSupportedVersion
+TokenBindingGetKeyTypesClient
+TokenBindingGetKeyTypesServer
+TokenBindingVerifyMessage
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-atoms-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-atoms-l1-1-0.def
new file mode 100644
index 0000000000..9355a3bbe9
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-atoms-l1-1-0.def
@@ -0,0 +1,21 @@
+LIBRARY api-ms-win-core-atoms-l1-1-0
+
+EXPORTS
+
+AddAtomA
+AddAtomW
+DeleteAtom
+FindAtomA
+FindAtomW
+GetAtomNameA
+GetAtomNameW
+GlobalAddAtomA
+GlobalAddAtomExA
+GlobalAddAtomExW
+GlobalAddAtomW
+GlobalDeleteAtom
+GlobalFindAtomA
+GlobalFindAtomW
+GlobalGetAtomNameA
+GlobalGetAtomNameW
+InitAtomTable
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-atoms-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-atoms-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..61a034a455
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-atoms-l1-1-0_windowsapp.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-atoms-l1-1-0
+
+EXPORTS
+
+AddAtomA
+AddAtomW
+DeleteAtom
+FindAtomA
+FindAtomW
+GetAtomNameA
+GetAtomNameW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-backgroundtask-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-backgroundtask-l1-1-0.def
new file mode 100644
index 0000000000..e0d183e0d7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-backgroundtask-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-backgroundtask-l1-1-0
+
+EXPORTS
+
+RaiseCustomSystemEventTrigger
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-calendar-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-calendar-l1-1-0.def
new file mode 100644
index 0000000000..489c518323
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-calendar-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-calendar-l1-1-0
+
+EXPORTS
+
+AdjustCalendarDate
+ConvertCalDateTimeToSystemTime
+ConvertSystemTimeToCalDateTime
+GetCalendarDateFormatEx
+GetCalendarSupportedDateRange
+IsCalendarLeapYear
+UpdateCalendarDayOfWeek
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-0.def
new file mode 100644
index 0000000000..2bf089c9bf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-0.def
@@ -0,0 +1,84 @@
+LIBRARY api-ms-win-core-com-l1-1-0
+
+EXPORTS
+
+CLSIDFromProgID
+CLSIDFromString
+CoAddRefServerProcess
+CoAllowUnmarshalerCLSID
+CoCancelCall
+CoCopyProxy
+CoCreateFreeThreadedMarshaler
+CoCreateGuid
+CoCreateInstance
+CoCreateInstanceEx
+CoCreateInstanceFromApp
+CoDecodeProxy
+CoDecrementMTAUsage
+CoDisableCallCancellation
+CoDisconnectContext
+CoDisconnectObject
+CoEnableCallCancellation
+CoFreeUnusedLibraries
+CoFreeUnusedLibrariesEx
+CoGetApartmentType
+CoGetCallContext
+CoGetCallerTID
+CoGetCancelObject
+CoGetClassObject
+CoGetContextToken
+CoGetCurrentLogicalThreadId
+CoGetCurrentProcess
+CoGetDefaultContext
+CoGetInterfaceAndReleaseStream
+CoGetMalloc
+CoGetMarshalSizeMax
+CoGetObjectContext
+CoGetPSClsid
+CoGetStandardMarshal
+CoGetStdMarshalEx
+CoGetTreatAsClass
+CoImpersonateClient
+CoIncrementMTAUsage
+CoInitializeEx
+CoInitializeSecurity
+CoInvalidateRemoteMachineBindings
+CoIsHandlerConnected
+CoLockObjectExternal
+CoMarshalHresult
+CoMarshalInterface
+CoMarshalInterThreadInterfaceInStream
+CoQueryAuthenticationServices
+CoQueryClientBlanket
+CoQueryProxyBlanket
+CoRegisterClassObject
+CoRegisterPSClsid
+CoRegisterSurrogate
+CoReleaseMarshalData
+CoReleaseServerProcess
+CoResumeClassObjects
+CoRevertToSelf
+CoRevokeClassObject
+CoSetCancelObject
+CoSetProxyBlanket
+CoSuspendClassObjects
+CoSwitchCallContext
+CoTaskMemAlloc
+CoTaskMemFree
+CoTaskMemRealloc
+CoTestCancel
+CoUninitialize
+CoUnmarshalHresult
+CoUnmarshalInterface
+CoWaitForMultipleHandles
+CoWaitForMultipleObjects
+CreateStreamOnHGlobal
+FreePropVariantArray
+GetHGlobalFromStream
+IIDFromString
+ProgIDFromCLSID
+PropVariantClear
+PropVariantCopy
+StringFromCLSID
+StringFromGUID2
+StringFromIID
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..4814f8748d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-0_windowsapp.def
@@ -0,0 +1,57 @@
+LIBRARY api-ms-win-core-com-l1-1-0
+
+EXPORTS
+
+CLSIDFromProgID
+CLSIDFromString
+CoAddRefServerProcess
+CoCreateFreeThreadedMarshaler
+CoCreateGuid
+CoCreateInstance
+CoCreateInstanceEx
+CoCreateInstanceFromApp
+CoDecrementMTAUsage
+CoDisconnectObject
+CoFreeUnusedLibraries
+CoFreeUnusedLibrariesEx
+CoGetApartmentType
+CoGetClassObject
+CoGetContextToken
+CoGetCurrentLogicalThreadId
+CoGetInterfaceAndReleaseStream
+CoGetMalloc
+CoGetMarshalSizeMax
+CoGetObjectContext
+CoGetStandardMarshal
+CoIncrementMTAUsage
+CoInitializeEx
+CoInitializeSecurity
+CoLockObjectExternal
+CoMarshalInterface
+CoMarshalInterThreadInterfaceInStream
+CoRegisterClassObject
+CoRegisterPSClsid
+CoReleaseMarshalData
+CoReleaseServerProcess
+CoResumeClassObjects
+CoRevokeClassObject
+CoSetProxyBlanket
+CoSuspendClassObjects
+CoSwitchCallContext
+CoTaskMemAlloc
+CoTaskMemFree
+CoTaskMemRealloc
+CoUninitialize
+CoUnmarshalInterface
+CoWaitForMultipleHandles
+CoWaitForMultipleObjects
+CreateStreamOnHGlobal
+FreePropVariantArray
+GetHGlobalFromStream
+IIDFromString
+ProgIDFromCLSID
+PropVariantClear
+PropVariantCopy
+StringFromCLSID
+StringFromGUID2
+StringFromIID
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-1.def
new file mode 100644
index 0000000000..2b71894406
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-com-l1-1-1
+
+EXPORTS
+
+CoRegisterActivationFilter
+RoGetAgileReference
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..98f5d0b443
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-com-l1-1-1
+
+EXPORTS
+
+RoGetAgileReference
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-2.def
new file mode 100644
index 0000000000..9259c8d019
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-com-l1-1-2
+
+EXPORTS
+
+CLSIDFromProgIDEx
+CoFileTimeNow
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-3.def
new file mode 100644
index 0000000000..9b58f9c1ea
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-com-l1-1-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-com-l1-1-3
+
+EXPORTS
+
+CoRegisterDeviceCatalog
+CoRevokeDeviceCatalog
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-com-l2-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-com-l2-1-1.def
new file mode 100644
index 0000000000..9c75cc8a6c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-com-l2-1-1.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-core-com-l2-1-1
+
+EXPORTS
+
+CreateILockBytesOnHGlobal
+FmtIdToPropStgName
+GetConvertStg
+GetHGlobalFromILockBytes
+PropStgNameToFmtId
+ReadClassStg
+ReadClassStm
+StgCreateDocfile
+StgCreateDocfileOnILockBytes
+StgCreatePropSetStg
+StgCreatePropStg
+StgCreateStorageEx
+StgIsStorageFile
+StgIsStorageILockBytes
+StgOpenPropStg
+StgOpenStorage
+StgOpenStorageEx
+StgOpenStorageOnILockBytes
+StgSetTimes
+WriteClassStg
+WriteClassStm
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-com-midlproxystub-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-com-midlproxystub-l1-1-0.def
new file mode 100644
index 0000000000..5c76541ad5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-com-midlproxystub-l1-1-0.def
@@ -0,0 +1,77 @@
+LIBRARY api-ms-win-core-com-midlproxystub-l1-1-0
+
+EXPORTS
+
+CStdAsyncStubBuffer_AddRef
+CStdAsyncStubBuffer_Connect
+CStdAsyncStubBuffer_Disconnect
+CStdAsyncStubBuffer_Invoke
+CStdAsyncStubBuffer_QueryInterface
+CStdAsyncStubBuffer_Release
+CStdAsyncStubBuffer2_Connect
+CStdAsyncStubBuffer2_Disconnect
+CStdAsyncStubBuffer2_Release
+CStdStubBuffer2_Connect
+CStdStubBuffer2_CountRefs
+CStdStubBuffer2_Disconnect
+CStdStubBuffer2_QueryInterface
+NdrProxyForwardingFunction10
+NdrProxyForwardingFunction11
+NdrProxyForwardingFunction12
+NdrProxyForwardingFunction13
+NdrProxyForwardingFunction14
+NdrProxyForwardingFunction15
+NdrProxyForwardingFunction16
+NdrProxyForwardingFunction17
+NdrProxyForwardingFunction18
+NdrProxyForwardingFunction19
+NdrProxyForwardingFunction20
+NdrProxyForwardingFunction21
+NdrProxyForwardingFunction22
+NdrProxyForwardingFunction23
+NdrProxyForwardingFunction24
+NdrProxyForwardingFunction25
+NdrProxyForwardingFunction26
+NdrProxyForwardingFunction27
+NdrProxyForwardingFunction28
+NdrProxyForwardingFunction29
+NdrProxyForwardingFunction3
+NdrProxyForwardingFunction30
+NdrProxyForwardingFunction31
+NdrProxyForwardingFunction32
+NdrProxyForwardingFunction4
+NdrProxyForwardingFunction5
+NdrProxyForwardingFunction6
+NdrProxyForwardingFunction7
+NdrProxyForwardingFunction8
+NdrProxyForwardingFunction9
+ObjectStublessClient10
+ObjectStublessClient11
+ObjectStublessClient12
+ObjectStublessClient13
+ObjectStublessClient14
+ObjectStublessClient15
+ObjectStublessClient16
+ObjectStublessClient17
+ObjectStublessClient18
+ObjectStublessClient19
+ObjectStublessClient20
+ObjectStublessClient21
+ObjectStublessClient22
+ObjectStublessClient23
+ObjectStublessClient24
+ObjectStublessClient25
+ObjectStublessClient26
+ObjectStublessClient27
+ObjectStublessClient28
+ObjectStublessClient29
+ObjectStublessClient3
+ObjectStublessClient30
+ObjectStublessClient31
+ObjectStublessClient32
+ObjectStublessClient4
+ObjectStublessClient5
+ObjectStublessClient6
+ObjectStublessClient7
+ObjectStublessClient8
+ObjectStublessClient9
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-0.def
new file mode 100644
index 0000000000..70e3f03f41
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-0.def
@@ -0,0 +1,22 @@
+LIBRARY api-ms-win-core-comm-l1-1-0
+
+EXPORTS
+
+ClearCommBreak
+ClearCommError
+EscapeCommFunction
+GetCommConfig
+GetCommMask
+GetCommModemStatus
+GetCommProperties
+GetCommState
+GetCommTimeouts
+PurgeComm
+SetCommBreak
+SetCommConfig
+SetCommMask
+SetCommState
+SetCommTimeouts
+SetupComm
+TransmitCommChar
+WaitCommEvent
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-1.def
new file mode 100644
index 0000000000..4b7efde4a1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-comm-l1-1-1
+
+EXPORTS
+
+OpenCommPort
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-2.def
new file mode 100644
index 0000000000..5d6b8afd78
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-comm-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-comm-l1-1-2
+
+EXPORTS
+
+GetCommPorts
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-1-0.def
new file mode 100644
index 0000000000..03c9a91c17
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-1-0.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-core-console-l1-1-0
+
+EXPORTS
+
+AllocConsole
+GetConsoleCP
+GetConsoleMode
+GetConsoleOutputCP
+GetNumberOfConsoleInputEvents
+ReadConsoleA
+ReadConsoleInputA
+ReadConsoleInputW
+ReadConsoleW
+SetConsoleCtrlHandler
+SetConsoleMode
+WriteConsoleA
+WriteConsoleW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-2-0.def
new file mode 100644
index 0000000000..22520b064a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-2-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-console-l1-2-0
+
+EXPORTS
+
+AttachConsole
+FreeConsole
+PeekConsoleInputA
+PeekConsoleInputW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-2-1.def
new file mode 100644
index 0000000000..4e8e304408
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-console-l1-2-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-console-l1-2-1
+
+EXPORTS
+
+ClosePseudoConsole
+CreatePseudoConsole
+ResizePseudoConsole
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-console-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-console-l2-1-0.def
new file mode 100644
index 0000000000..eb74431cdd
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-console-l2-1-0.def
@@ -0,0 +1,37 @@
+LIBRARY api-ms-win-core-console-l2-1-0
+
+EXPORTS
+
+CreateConsoleScreenBuffer
+FillConsoleOutputAttribute
+FillConsoleOutputCharacterA
+FillConsoleOutputCharacterW
+FlushConsoleInputBuffer
+GenerateConsoleCtrlEvent
+GetConsoleCursorInfo
+GetConsoleScreenBufferInfo
+GetConsoleScreenBufferInfoEx
+GetLargestConsoleWindowSize
+ReadConsoleOutputA
+ReadConsoleOutputAttribute
+ReadConsoleOutputCharacterA
+ReadConsoleOutputCharacterW
+ReadConsoleOutputW
+ScrollConsoleScreenBufferA
+ScrollConsoleScreenBufferW
+SetConsoleActiveScreenBuffer
+SetConsoleCP
+SetConsoleCursorInfo
+SetConsoleCursorPosition
+SetConsoleOutputCP
+SetConsoleScreenBufferInfoEx
+SetConsoleScreenBufferSize
+SetConsoleTextAttribute
+SetConsoleWindowInfo
+WriteConsoleInputA
+WriteConsoleInputW
+WriteConsoleOutputA
+WriteConsoleOutputAttribute
+WriteConsoleOutputCharacterA
+WriteConsoleOutputCharacterW
+WriteConsoleOutputW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-console-l2-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-console-l2-2-0.def
new file mode 100644
index 0000000000..282dae772a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-console-l2-2-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-console-l2-2-0
+
+EXPORTS
+
+GetConsoleOriginalTitleA
+GetConsoleOriginalTitleW
+GetConsoleTitleA
+GetConsoleTitleW
+SetConsoleTitleA
+SetConsoleTitleW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-console-l3-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-console-l3-2-0.def
new file mode 100644
index 0000000000..ca873297e3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-console-l3-2-0.def
@@ -0,0 +1,36 @@
+LIBRARY api-ms-win-core-console-l3-2-0
+
+EXPORTS
+
+AddConsoleAliasA
+AddConsoleAliasW
+ExpungeConsoleCommandHistoryA
+ExpungeConsoleCommandHistoryW
+GetConsoleAliasA
+GetConsoleAliasesA
+GetConsoleAliasesLengthA
+GetConsoleAliasesLengthW
+GetConsoleAliasesW
+GetConsoleAliasExesA
+GetConsoleAliasExesLengthA
+GetConsoleAliasExesLengthW
+GetConsoleAliasExesW
+GetConsoleAliasW
+GetConsoleCommandHistoryA
+GetConsoleCommandHistoryLengthA
+GetConsoleCommandHistoryLengthW
+GetConsoleCommandHistoryW
+GetConsoleDisplayMode
+GetConsoleFontSize
+GetConsoleHistoryInfo
+GetConsoleProcessList
+GetConsoleSelectionInfo
+GetConsoleWindow
+GetCurrentConsoleFont
+GetCurrentConsoleFontEx
+GetNumberOfConsoleMouseButtons
+SetConsoleDisplayMode
+SetConsoleHistoryInfo
+SetConsoleNumberOfCommandsA
+SetConsoleNumberOfCommandsW
+SetCurrentConsoleFontEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-0.def
new file mode 100644
index 0000000000..cb767e9972
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-datetime-l1-1-0
+
+EXPORTS
+
+GetDateFormatA
+GetDateFormatW
+GetTimeFormatA
+GetTimeFormatW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-1.def
new file mode 100644
index 0000000000..6e5075a0e1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-datetime-l1-1-1
+
+EXPORTS
+
+GetDateFormatEx
+GetTimeFormatEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-2.def
new file mode 100644
index 0000000000..53ee9abc69
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-datetime-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-datetime-l1-1-2
+
+EXPORTS
+
+GetDurationFormatEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-0.def
new file mode 100644
index 0000000000..83422517c1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-debug-l1-1-0
+
+EXPORTS
+
+DebugBreak
+IsDebuggerPresent
+OutputDebugStringA
+OutputDebugStringW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-1.def
new file mode 100644
index 0000000000..f8d4dc1145
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-debug-l1-1-1
+
+EXPORTS
+
+CheckRemoteDebuggerPresent
+ContinueDebugEvent
+DebugActiveProcess
+DebugActiveProcessStop
+WaitForDebugEvent
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-2.def
new file mode 100644
index 0000000000..fbf92375ed
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-debug-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-debug-l1-1-2
+
+EXPORTS
+
+WaitForDebugEventEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-debug-minidump-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-debug-minidump-l1-1-0.def
new file mode 100644
index 0000000000..3da31d6517
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-debug-minidump-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-debug-minidump-l1-1-0
+
+EXPORTS
+
+MiniDumpReadDumpStream
+MiniDumpWriteDump
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-delayload-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-delayload-l1-1-0.def
new file mode 100644
index 0000000000..89de2e52a0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-delayload-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-delayload-l1-1-0
+
+EXPORTS
+
+DelayLoadFailureHook
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-delayload-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-delayload-l1-1-1.def
new file mode 100644
index 0000000000..4de11487ed
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-delayload-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-delayload-l1-1-1
+
+EXPORTS
+
+ResolveDelayLoadedAPI
+ResolveDelayLoadsFromDll
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-enclave-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-enclave-l1-1-0.def
new file mode 100644
index 0000000000..df5edbe301
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-enclave-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-enclave-l1-1-0
+
+EXPORTS
+
+CreateEnclave
+InitializeEnclave
+IsEnclaveTypeSupported
+LoadEnclaveData
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-enclave-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-enclave-l1-1-1.def
new file mode 100644
index 0000000000..8141addf38
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-enclave-l1-1-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-enclave-l1-1-1
+
+EXPORTS
+
+CallEnclave
+DeleteEnclave
+LoadEnclaveImageA
+LoadEnclaveImageW
+TerminateEnclave
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-0.def
new file mode 100644
index 0000000000..1b7f655223
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-0
+
+EXPORTS
+
+GetErrorMode
+GetLastError
+RaiseException
+SetErrorMode
+SetLastError
+SetUnhandledExceptionFilter
+UnhandledExceptionFilter
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-1.def
new file mode 100644
index 0000000000..8387d4dc6c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-1
+
+EXPORTS
+
+AddVectoredContinueHandler
+AddVectoredExceptionHandler
+RemoveVectoredContinueHandler
+RemoveVectoredExceptionHandler
+RestoreLastError
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..7d93581c21
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-1_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-1
+
+EXPORTS
+
+AddVectoredExceptionHandler
+RemoveVectoredExceptionHandler
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-2.def
new file mode 100644
index 0000000000..2b29a8db66
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-2
+
+EXPORTS
+
+RaiseFailFastException
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-3.def
new file mode 100644
index 0000000000..c876fe7d38
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-3.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-3
+
+EXPORTS
+
+FatalAppExitA
+FatalAppExitW
+GetThreadErrorMode
+SetThreadErrorMode
+TerminateProcessOnMemoryExhaustion
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-3_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-3_windowsapp.def
new file mode 100644
index 0000000000..9891cc42cf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-errorhandling-l1-1-3_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-3
+
+EXPORTS
+
+FatalAppExitA
+FatalAppExitW
+GetThreadErrorMode
+SetThreadErrorMode
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-featurestaging-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-featurestaging-l1-1-0.def
new file mode 100644
index 0000000000..9ad6c2ad38
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-featurestaging-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-featurestaging-l1-1-0
+
+EXPORTS
+
+GetFeatureEnabledState
+RecordFeatureError
+RecordFeatureUsage
+SubscribeFeatureStateChangeNotification
+UnsubscribeFeatureStateChangeNotification
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-featurestaging-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-featurestaging-l1-1-1.def
new file mode 100644
index 0000000000..c9bc941a1d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-featurestaging-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-featurestaging-l1-1-1
+
+EXPORTS
+
+GetFeatureVariant
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l1-1-0.def
new file mode 100644
index 0000000000..58094ce7cf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-fibers-l1-1-0
+
+EXPORTS
+
+FlsAlloc
+FlsFree
+FlsGetValue
+FlsSetValue
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l1-1-1.def
new file mode 100644
index 0000000000..0d6151a24a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-fibers-l1-1-1
+
+EXPORTS
+
+IsThreadAFiber
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-0.def
new file mode 100644
index 0000000000..9e90974dcf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-fibers-l2-1-0
+
+EXPORTS
+
+ConvertFiberToThread
+ConvertThreadToFiber
+CreateFiber
+DeleteFiber
+SwitchToFiber
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..18368fae74
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-fibers-l2-1-0
+
+EXPORTS
+
+ConvertFiberToThread
+DeleteFiber
+SwitchToFiber
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-1.def
new file mode 100644
index 0000000000..51c0d944b1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-fibers-l2-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-fibers-l2-1-1
+
+EXPORTS
+
+ConvertThreadToFiberEx
+CreateFiberEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l1-1-0.def
new file mode 100644
index 0000000000..7caaffe33e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l1-1-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-file-ansi-l1-1-0
+
+EXPORTS
+
+DefineDosDeviceA
+DeleteVolumeMountPointA
+FindFirstVolumeA
+FindNextVolumeA
+GetLogicalDriveStringsA
+GetVolumeNameForVolumeMountPointA
+GetVolumePathNameA
+GetVolumePathNamesForVolumeNameA
+QueryDosDeviceA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..8ce52bcca9
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-file-ansi-l1-1-0
+
+EXPORTS
+
+DeleteVolumeMountPointA
+FindFirstVolumeA
+FindNextVolumeA
+GetLogicalDriveStringsA
+GetVolumePathNameA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l2-1-0.def
new file mode 100644
index 0000000000..e20372724c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l2-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-file-ansi-l2-1-0
+
+EXPORTS
+
+CopyFileExA
+CreateDirectoryExA
+CreateSymbolicLinkA
+MoveFileWithProgressA
+ReplaceFileA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l2-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..715f933096
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-ansi-l2-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-file-ansi-l2-1-0
+
+EXPORTS
+
+CopyFileExA
+CreateDirectoryExA
+MoveFileWithProgressA
+ReplaceFileA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-fromapp-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-fromapp-l1-1-0.def
new file mode 100644
index 0000000000..d5b2c33d11
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-fromapp-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-file-fromapp-l1-1-0
+
+EXPORTS
+
+CopyFileFromAppW
+CreateDirectoryFromAppW
+CreateFile2FromAppW
+CreateFileFromAppW
+DeleteFileFromAppW
+FindFirstFileExFromAppW
+GetFileAttributesExFromAppW
+MoveFileFromAppW
+RemoveDirectoryFromAppW
+ReplaceFileFromAppW
+SetFileAttributesFromAppW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-1-0.def
new file mode 100644
index 0000000000..2a377aeac8
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-1-0.def
@@ -0,0 +1,79 @@
+LIBRARY api-ms-win-core-file-l1-1-0
+
+EXPORTS
+
+CompareFileTime
+CreateDirectoryA
+CreateDirectoryW
+CreateFileA
+CreateFileW
+DefineDosDeviceW
+DeleteFileA
+DeleteFileW
+DeleteVolumeMountPointW
+FileTimeToLocalFileTime
+FindClose
+FindCloseChangeNotification
+FindFirstChangeNotificationA
+FindFirstChangeNotificationW
+FindFirstFileA
+FindFirstFileExA
+FindFirstFileExW
+FindFirstFileW
+FindFirstVolumeW
+FindNextChangeNotification
+FindNextFileA
+FindNextFileW
+FindNextVolumeW
+FindVolumeClose
+FlushFileBuffers
+GetDiskFreeSpaceA
+GetDiskFreeSpaceExA
+GetDiskFreeSpaceExW
+GetDiskFreeSpaceW
+GetDriveTypeA
+GetDriveTypeW
+GetFileAttributesA
+GetFileAttributesExA
+GetFileAttributesExW
+GetFileAttributesW
+GetFileInformationByHandle
+GetFileSize
+GetFileSizeEx
+GetFileTime
+GetFileType
+GetFinalPathNameByHandleA
+GetFinalPathNameByHandleW
+GetFullPathNameA
+GetFullPathNameW
+GetLogicalDrives
+GetLogicalDriveStringsW
+GetLongPathNameA
+GetLongPathNameW
+GetShortPathNameW
+GetTempFileNameW
+GetVolumeInformationByHandleW
+GetVolumeInformationW
+GetVolumePathNameW
+LocalFileTimeToFileTime
+LockFile
+LockFileEx
+QueryDosDeviceW
+ReadFile
+ReadFileEx
+ReadFileScatter
+RemoveDirectoryA
+RemoveDirectoryW
+SetEndOfFile
+SetFileAttributesA
+SetFileAttributesW
+SetFileInformationByHandle
+SetFilePointer
+SetFilePointerEx
+SetFileTime
+SetFileValidData
+UnlockFile
+UnlockFileEx
+WriteFile
+WriteFileEx
+WriteFileGather
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..fb547c7527
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-1-0_windowsapp.def
@@ -0,0 +1,77 @@
+LIBRARY api-ms-win-core-file-l1-1-0
+
+EXPORTS
+
+CompareFileTime
+CreateDirectoryA
+CreateDirectoryW
+CreateFileA
+CreateFileW
+DeleteFileA
+DeleteFileW
+DeleteVolumeMountPointW
+FileTimeToLocalFileTime
+FindClose
+FindCloseChangeNotification
+FindFirstChangeNotificationA
+FindFirstChangeNotificationW
+FindFirstFileA
+FindFirstFileExA
+FindFirstFileExW
+FindFirstFileW
+FindFirstVolumeW
+FindNextChangeNotification
+FindNextFileA
+FindNextFileW
+FindNextVolumeW
+FindVolumeClose
+FlushFileBuffers
+GetDiskFreeSpaceA
+GetDiskFreeSpaceExA
+GetDiskFreeSpaceExW
+GetDiskFreeSpaceW
+GetDriveTypeA
+GetDriveTypeW
+GetFileAttributesA
+GetFileAttributesExA
+GetFileAttributesExW
+GetFileAttributesW
+GetFileInformationByHandle
+GetFileSize
+GetFileSizeEx
+GetFileTime
+GetFileType
+GetFinalPathNameByHandleA
+GetFinalPathNameByHandleW
+GetFullPathNameA
+GetFullPathNameW
+GetLogicalDrives
+GetLogicalDriveStringsW
+GetLongPathNameA
+GetLongPathNameW
+GetShortPathNameW
+GetTempFileNameW
+GetVolumeInformationByHandleW
+GetVolumeInformationW
+GetVolumePathNameW
+LocalFileTimeToFileTime
+LockFile
+LockFileEx
+ReadFile
+ReadFileEx
+ReadFileScatter
+RemoveDirectoryA
+RemoveDirectoryW
+SetEndOfFile
+SetFileAttributesA
+SetFileAttributesW
+SetFileInformationByHandle
+SetFilePointer
+SetFilePointerEx
+SetFileTime
+SetFileValidData
+UnlockFile
+UnlockFileEx
+WriteFile
+WriteFileEx
+WriteFileGather
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-0.def
new file mode 100644
index 0000000000..f66dc8765b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-file-l1-2-0
+
+EXPORTS
+
+CreateFile2
+GetTempPathW
+GetVolumeNameForVolumeMountPointW
+GetVolumePathNamesForVolumeNameW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-1.def
new file mode 100644
index 0000000000..5d1e45028f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-file-l1-2-1
+
+EXPORTS
+
+GetCompressedFileSizeA
+GetCompressedFileSizeW
+SetFileIoOverlappedRange
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-2.def
new file mode 100644
index 0000000000..5ef8f9461a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-2.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-file-l1-2-2
+
+EXPORTS
+
+AreFileApisANSI
+FindFirstFileNameW
+FindFirstStreamW
+FindNextFileNameW
+FindNextStreamW
+GetTempFileNameA
+GetTempPathA
+GetVolumeInformationA
+SetFileApisToANSI
+SetFileApisToOEM
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-2_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-2_windowsapp.def
new file mode 100644
index 0000000000..10b71c9bec
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-2_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-file-l1-2-2
+
+EXPORTS
+
+AreFileApisANSI
+GetTempFileNameA
+GetTempPathA
+GetVolumeInformationA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-3.def
new file mode 100644
index 0000000000..661ebc4f7a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l1-2-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-file-l1-2-3
+
+EXPORTS
+
+GetDiskSpaceInformationA
+GetDiskSpaceInformationW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-0.def
new file mode 100644
index 0000000000..550b9cd669
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-file-l2-1-0
+
+EXPORTS
+
+CopyFile2
+CopyFileExW
+CreateDirectoryExW
+CreateHardLinkW
+CreateSymbolicLinkW
+GetFileInformationByHandleEx
+MoveFileExW
+MoveFileWithProgressW
+ReadDirectoryChangesW
+ReOpenFile
+ReplaceFileW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-1.def
new file mode 100644
index 0000000000..a362f060de
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-file-l2-1-1
+
+EXPORTS
+
+OpenFileById
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-2.def
new file mode 100644
index 0000000000..a01581d9f5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-file-l2-1-2
+
+EXPORTS
+
+CopyFileW
+CreateHardLinkA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-2_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-2_windowsapp.def
new file mode 100644
index 0000000000..2bcfe4d54f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-2_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-file-l2-1-2
+
+EXPORTS
+
+CopyFileW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-3.def
new file mode 100644
index 0000000000..abeeef4021
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-file-l2-1-3.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-file-l2-1-3
+
+EXPORTS
+
+ReadDirectoryChangesExW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-firmware-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-firmware-l1-1-0.def
new file mode 100644
index 0000000000..a935244efc
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-firmware-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-firmware-l1-1-0
+
+EXPORTS
+
+GetFirmwareEnvironmentVariableA
+GetFirmwareEnvironmentVariableExA
+GetFirmwareEnvironmentVariableExW
+GetFirmwareEnvironmentVariableW
+SetFirmwareEnvironmentVariableA
+SetFirmwareEnvironmentVariableExA
+SetFirmwareEnvironmentVariableExW
+SetFirmwareEnvironmentVariableW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-handle-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-handle-l1-1-0.def
new file mode 100644
index 0000000000..ae6df29659
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-handle-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-handle-l1-1-0
+
+EXPORTS
+
+CloseHandle
+CompareObjectHandles
+DuplicateHandle
+GetHandleInformation
+SetHandleInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-heap-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-heap-l1-1-0.def
new file mode 100644
index 0000000000..36855dcf98
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-heap-l1-1-0.def
@@ -0,0 +1,19 @@
+LIBRARY api-ms-win-core-heap-l1-1-0
+
+EXPORTS
+
+GetProcessHeap
+GetProcessHeaps
+HeapAlloc
+HeapCompact
+HeapCreate
+HeapDestroy
+HeapFree
+HeapLock
+HeapQueryInformation
+HeapReAlloc
+HeapSetInformation
+HeapSize
+HeapUnlock
+HeapValidate
+HeapWalk
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-heap-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-heap-l2-1-0.def
new file mode 100644
index 0000000000..f78a08de27
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-heap-l2-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-heap-l2-1-0
+
+EXPORTS
+
+GlobalAlloc
+GlobalFree
+LocalAlloc
+LocalFree
+LocalLock
+LocalReAlloc
+LocalUnlock
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-heap-l2-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-heap-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..8db6ba16ce
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-heap-l2-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-heap-l2-1-0
+
+EXPORTS
+
+GlobalAlloc
+GlobalFree
+LocalAlloc
+LocalFree
+LocalReAlloc
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-heap-obsolete-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-heap-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..3402d7e220
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-heap-obsolete-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-heap-obsolete-l1-1-0
+
+EXPORTS
+
+GlobalFlags
+GlobalHandle
+GlobalLock
+GlobalReAlloc
+GlobalSize
+GlobalUnlock
+LocalFlags
+LocalSize
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-heap-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-heap-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..ba2dcc6d40
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-heap-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-heap-obsolete-l1-1-0
+
+EXPORTS
+
+GlobalLock
+GlobalReAlloc
+GlobalSize
+GlobalUnlock
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-interlocked-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-interlocked-l1-1-0.def
new file mode 100644
index 0000000000..b3a441e0af
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-interlocked-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-interlocked-l1-1-0
+
+EXPORTS
+
+InitializeSListHead
+InterlockedFlushSList
+InterlockedPopEntrySList
+InterlockedPushEntrySList
+QueryDepthSList
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-interlocked-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-interlocked-l1-2-0.def
new file mode 100644
index 0000000000..eb0ff81fbb
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-interlocked-l1-2-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-interlocked-l1-2-0
+
+EXPORTS
+
+InterlockedPushListSListEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-0.def
new file mode 100644
index 0000000000..8fd77c911d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-io-l1-1-0
+
+EXPORTS
+
+CancelIoEx
+CreateIoCompletionPort
+DeviceIoControl
+GetOverlappedResult
+GetQueuedCompletionStatus
+GetQueuedCompletionStatusEx
+PostQueuedCompletionStatus
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-1.def
new file mode 100644
index 0000000000..41668ee7ac
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-io-l1-1-1
+
+EXPORTS
+
+CancelIo
+CancelSynchronousIo
+GetOverlappedResultEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..69b913f0b5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-io-l1-1-1_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-io-l1-1-1
+
+EXPORTS
+
+CancelIo
+GetOverlappedResultEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-job-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-job-l1-1-0.def
new file mode 100644
index 0000000000..cbd2a18a83
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-job-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-job-l1-1-0
+
+EXPORTS
+
+IsProcessInJob
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-0.def
new file mode 100644
index 0000000000..7f4e9d2a3a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-job-l2-1-0
+
+EXPORTS
+
+AssignProcessToJobObject
+CreateJobObjectW
+OpenJobObjectW
+QueryInformationJobObject
+SetInformationJobObject
+TerminateJobObject
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..b044e6515b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-job-l2-1-0
+
+EXPORTS
+
+AssignProcessToJobObject
+CreateJobObjectW
+SetInformationJobObject
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-1.def
new file mode 100644
index 0000000000..89c0e1c0a5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-job-l2-1-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-job-l2-1-1
+
+EXPORTS
+
+FreeMemoryJobObject
+QueryIoRateControlInformationJobObject
+SetIoRateControlInformationJobObject
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-ansi-l1-1-0.def
new file mode 100644
index 0000000000..c00819bbc9
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-ansi-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-kernel32-legacy-ansi-l1-1-0
+
+EXPORTS
+
+AddLocalAlternateComputerNameA
+CreateFileMappingNumaA
+CreateFileTransactedA
+CreateJobObjectA
+FindFirstVolumeMountPointA
+FindNextVolumeMountPointA
+GetFileAttributesTransactedA
+OpenJobObjectA
+SetDllDirectoryA
+SetVolumeLabelA
+SetVolumeMountPointA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..3d8b7710c2
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-kernel32-legacy-ansi-l1-1-0
+
+EXPORTS
+
+SetDllDirectoryA
+SetVolumeLabelA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0.def
new file mode 100644
index 0000000000..43be046ccc
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0.def
@@ -0,0 +1,41 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-0
+
+EXPORTS
+
+AddLocalAlternateComputerNameW
+BackupRead
+BackupWrite
+BindIoCompletionCallback
+CopyFileA
+CreateFileMappingA
+CreateFileTransactedW
+CreateMailslotA
+CreateNamedPipeA
+DnsHostnameToComputerNameW
+DosDateTimeToFileTime
+FileTimeToDosDateTime
+FindResourceA
+FindResourceExA
+GetComputerNameA
+GetComputerNameW
+GetMaximumProcessorGroupCount
+GetNamedPipeClientProcessId
+GetNamedPipeServerProcessId
+GetShortPathNameA
+GetStartupInfoA
+GetSystemPowerStatus
+GetTapeParameters
+GetThreadSelectorEntry
+GlobalMemoryStatus
+MoveFileA
+MoveFileExA
+MoveFileW
+OpenFile
+PulseEvent
+RegisterWaitForSingleObject
+SetFileCompletionNotificationModes
+SetHandleCount
+SetMailslotInfo
+SetVolumeLabelW
+UnregisterWait
+WTSGetActiveConsoleSessionId
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..75d3067a02
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-0_windowsapp.def
@@ -0,0 +1,23 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-0
+
+EXPORTS
+
+CopyFileA
+CreateFileMappingA
+CreateNamedPipeA
+DosDateTimeToFileTime
+FileTimeToDosDateTime
+FindResourceA
+GetComputerNameA
+GetComputerNameW
+GetShortPathNameA
+GetStartupInfoA
+GetSystemPowerStatus
+GlobalMemoryStatus
+MoveFileA
+MoveFileExA
+MoveFileW
+RegisterWaitForSingleObject
+SetFileCompletionNotificationModes
+SetVolumeLabelW
+UnregisterWait
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-1.def
new file mode 100644
index 0000000000..0c2b46057f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-1.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-1
+
+EXPORTS
+
+FindFirstVolumeMountPointW
+FindNextVolumeMountPointW
+FindVolumeMountPointClose
+GetFileAttributesTransactedW
+GetFirmwareType
+GetNumaAvailableMemoryNodeEx
+GetNumaNodeProcessorMask
+GetNumaProcessorNodeEx
+PowerClearRequest
+PowerCreateRequest
+PowerSetRequest
+SetDllDirectoryW
+SetVolumeMountPointW
+VerifyVersionInfoW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..55f945c1af
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-1_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-1
+
+EXPORTS
+
+SetDllDirectoryW
+VerifyVersionInfoW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-2.def
new file mode 100644
index 0000000000..9f6dcf4170
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-2.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-2
+
+EXPORTS
+
+GetBinaryTypeW
+Module32First
+Module32Next
+OpenFileMappingA
+Process32First
+Process32Next
+SetTermsrvAppInstallMode
+VerifyVersionInfoA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-2_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-2_windowsapp.def
new file mode 100644
index 0000000000..75f2f22356
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-2_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-2
+
+EXPORTS
+
+OpenFileMappingA
+Process32First
+Process32Next
+VerifyVersionInfoA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-3.def
new file mode 100644
index 0000000000..09be6d56ee
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-3.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-3
+
+EXPORTS
+
+CopyFileTransactedW
+CreateDirectoryTransactedW
+CreateHardLinkTransactedW
+CreateMailslotW
+CreateSymbolicLinkTransactedW
+DeleteFileTransactedW
+FindFirstFileTransactedW
+GetBinaryTypeA
+GetCompressedFileSizeTransactedW
+GetFullPathNameTransactedW
+GetLongPathNameTransactedW
+MoveFileTransactedW
+RemoveDirectoryTransactedW
+SetFileAttributesTransactedW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-4.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-4.def
new file mode 100644
index 0000000000..fc043034f4
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-4.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-4
+
+EXPORTS
+
+GetMailslotInfo
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-5.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-5.def
new file mode 100644
index 0000000000..82a4c3f246
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-5.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-5
+
+EXPORTS
+
+GetDllDirectoryW
+SetThreadExecutionState
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-5_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-5_windowsapp.def
new file mode 100644
index 0000000000..7cee34b81d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-5_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-5
+
+EXPORTS
+
+SetThreadExecutionState
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-6.def b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-6.def
new file mode 100644
index 0000000000..daa567cc11
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-kernel32-legacy-l1-1-6.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-6
+
+EXPORTS
+
+GetDevicePowerState
+GetMaximumProcessorCount
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-largeinteger-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-largeinteger-l1-1-0.def
new file mode 100644
index 0000000000..c7ca573bdc
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-largeinteger-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-largeinteger-l1-1-0
+
+EXPORTS
+
+MulDiv
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-0.def
new file mode 100644
index 0000000000..5fac717b33
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-0.def
@@ -0,0 +1,33 @@
+LIBRARY api-ms-win-core-libraryloader-l1-2-0
+
+EXPORTS
+
+AddDllDirectory
+DisableThreadLibraryCalls
+EnumResourceLanguagesExA
+EnumResourceLanguagesExW
+EnumResourceNamesExA
+EnumResourceNamesExW
+EnumResourceTypesExA
+EnumResourceTypesExW
+FindResourceExW
+FindStringOrdinal
+FreeLibrary
+FreeLibraryAndExitThread
+FreeResource
+GetModuleFileNameA
+GetModuleFileNameW
+GetModuleHandleA
+GetModuleHandleExA
+GetModuleHandleExW
+GetModuleHandleW
+GetProcAddress
+LoadLibraryExA
+LoadLibraryExW
+LoadResource
+LoadStringA
+LoadStringW
+LockResource
+RemoveDllDirectory
+SetDefaultDllDirectories
+SizeofResource
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..d3119e5563
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-0_windowsapp.def
@@ -0,0 +1,27 @@
+LIBRARY api-ms-win-core-libraryloader-l1-2-0
+
+EXPORTS
+
+AddDllDirectory
+DisableThreadLibraryCalls
+FindResourceExW
+FindStringOrdinal
+FreeLibrary
+FreeLibraryAndExitThread
+FreeResource
+GetModuleFileNameA
+GetModuleFileNameW
+GetModuleHandleA
+GetModuleHandleExA
+GetModuleHandleExW
+GetModuleHandleW
+GetProcAddress
+LoadLibraryExA
+LoadLibraryExW
+LoadResource
+LoadStringA
+LoadStringW
+LockResource
+RemoveDllDirectory
+SetDefaultDllDirectories
+SizeofResource
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-1.def
new file mode 100644
index 0000000000..03a8767073
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-libraryloader-l1-2-1
+
+EXPORTS
+
+FindResourceW
+LoadLibraryA
+LoadLibraryW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-2.def
new file mode 100644
index 0000000000..39da1b608d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-libraryloader-l1-2-2
+
+EXPORTS
+
+EnumResourceNamesW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l2-1-0.def
new file mode 100644
index 0000000000..eba35f6ad8
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-libraryloader-l2-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-libraryloader-l2-1-0
+
+EXPORTS
+
+LoadPackagedLibrary
+QueryOptionalDelayLoadedAPI
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-ansi-l1-1-0.def
new file mode 100644
index 0000000000..da7260f77f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-ansi-l1-1-0.def
@@ -0,0 +1,22 @@
+LIBRARY api-ms-win-core-localization-ansi-l1-1-0
+
+EXPORTS
+
+EnumCalendarInfoA
+EnumCalendarInfoExA
+EnumDateFormatsA
+EnumDateFormatsExA
+EnumLanguageGroupLocalesA
+EnumSystemCodePagesA
+EnumSystemLanguageGroupsA
+EnumTimeFormatsA
+EnumUILanguagesA
+FoldStringA
+GetCalendarInfoA
+GetCPInfoExA
+GetCurrencyFormatA
+GetGeoInfoA
+GetNumberFormatA
+GetStringTypeExA
+SetCalendarInfoA
+SetLocaleInfoA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..6028463568
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-localization-ansi-l1-1-0
+
+EXPORTS
+
+EnumUILanguagesA
+FoldStringA
+GetCalendarInfoA
+GetStringTypeExA
+SetCalendarInfoA
+SetLocaleInfoA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-0.def
new file mode 100644
index 0000000000..4ae8956300
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-0.def
@@ -0,0 +1,63 @@
+LIBRARY api-ms-win-core-localization-l1-2-0
+
+EXPORTS
+
+ConvertDefaultLocale
+EnumSystemGeoID
+EnumSystemLocalesA
+EnumSystemLocalesW
+FindNLSString
+FindNLSStringEx
+FormatMessageA
+FormatMessageW
+GetACP
+GetCalendarInfoEx
+GetCalendarInfoW
+GetCPInfo
+GetCPInfoExW
+GetFileMUIInfo
+GetFileMUIPath
+GetGeoInfoW
+GetLocaleInfoA
+GetLocaleInfoEx
+GetLocaleInfoW
+GetNLSVersion
+GetNLSVersionEx
+GetOEMCP
+GetProcessPreferredUILanguages
+GetSystemDefaultLangID
+GetSystemDefaultLCID
+GetSystemPreferredUILanguages
+GetThreadLocale
+GetThreadPreferredUILanguages
+GetThreadUILanguage
+GetUILanguageInfo
+GetUserDefaultLangID
+GetUserDefaultLCID
+GetUserDefaultLocaleName
+GetUserGeoID
+GetUserPreferredUILanguages
+IdnToAscii
+IdnToUnicode
+IsDBCSLeadByte
+IsDBCSLeadByteEx
+IsNLSDefinedString
+IsValidCodePage
+IsValidLanguageGroup
+IsValidLocale
+IsValidLocaleName
+IsValidNLSVersion
+LCMapStringA
+LCMapStringEx
+LCMapStringW
+LocaleNameToLCID
+ResolveLocaleName
+SetCalendarInfoW
+SetLocaleInfoW
+SetProcessPreferredUILanguages
+SetThreadLocale
+SetThreadPreferredUILanguages
+SetThreadUILanguage
+SetUserGeoID
+VerLanguageNameA
+VerLanguageNameW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..de9a0c16bf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-0_windowsapp.def
@@ -0,0 +1,62 @@
+LIBRARY api-ms-win-core-localization-l1-2-0
+
+EXPORTS
+
+ConvertDefaultLocale
+EnumSystemGeoID
+EnumSystemLocalesA
+EnumSystemLocalesW
+FindNLSString
+FindNLSStringEx
+FormatMessageA
+FormatMessageW
+GetACP
+GetCalendarInfoEx
+GetCalendarInfoW
+GetCPInfo
+GetCPInfoExW
+GetFileMUIInfo
+GetFileMUIPath
+GetGeoInfoW
+GetLocaleInfoA
+GetLocaleInfoEx
+GetLocaleInfoW
+GetNLSVersion
+GetNLSVersionEx
+GetOEMCP
+GetProcessPreferredUILanguages
+GetSystemDefaultLangID
+GetSystemDefaultLCID
+GetSystemPreferredUILanguages
+GetThreadLocale
+GetThreadPreferredUILanguages
+GetThreadUILanguage
+GetUILanguageInfo
+GetUserDefaultLangID
+GetUserDefaultLCID
+GetUserDefaultLocaleName
+GetUserGeoID
+GetUserPreferredUILanguages
+IdnToAscii
+IdnToUnicode
+IsDBCSLeadByte
+IsDBCSLeadByteEx
+IsNLSDefinedString
+IsValidCodePage
+IsValidLanguageGroup
+IsValidLocale
+IsValidLocaleName
+IsValidNLSVersion
+LCMapStringA
+LCMapStringEx
+LCMapStringW
+LocaleNameToLCID
+ResolveLocaleName
+SetCalendarInfoW
+SetLocaleInfoW
+SetProcessPreferredUILanguages
+SetThreadLocale
+SetThreadPreferredUILanguages
+SetThreadUILanguage
+VerLanguageNameA
+VerLanguageNameW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-1.def
new file mode 100644
index 0000000000..71012cae89
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-localization-l1-2-1
+
+EXPORTS
+
+EnumSystemLocalesEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-2.def
new file mode 100644
index 0000000000..aad38fecb2
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-localization-l1-2-2
+
+EXPORTS
+
+GetSystemDefaultLocaleName
+LCIDToLocaleName
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-3.def
new file mode 100644
index 0000000000..2e310a9c3a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-3.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-localization-l1-2-3
+
+EXPORTS
+
+EnumSystemGeoNames
+GetGeoInfoEx
+GetUserDefaultGeoName
+SetUserGeoName
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-4.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-4.def
new file mode 100644
index 0000000000..a3f69f39a8
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l1-2-4.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-localization-l1-2-4
+
+EXPORTS
+
+RestoreThreadPreferredUILanguages
+SetThreadPreferredUILanguages2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l2-1-0.def
new file mode 100644
index 0000000000..00307d4954
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l2-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-core-localization-l2-1-0
+
+EXPORTS
+
+EnumCalendarInfoExEx
+EnumCalendarInfoExW
+EnumCalendarInfoW
+EnumDateFormatsExEx
+EnumDateFormatsExW
+EnumDateFormatsW
+EnumSystemCodePagesW
+EnumTimeFormatsEx
+EnumTimeFormatsW
+GetCurrencyFormatEx
+GetCurrencyFormatW
+GetNumberFormatEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-l2-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..42abb8784c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-l2-1-0_windowsapp.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-localization-l2-1-0
+
+EXPORTS
+
+EnumCalendarInfoExEx
+EnumCalendarInfoW
+EnumDateFormatsExEx
+EnumSystemCodePagesW
+EnumTimeFormatsEx
+GetCurrencyFormatEx
+GetCurrencyFormatW
+GetNumberFormatEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-obsolete-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-obsolete-l1-2-0.def
new file mode 100644
index 0000000000..130780154d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-obsolete-l1-2-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-localization-obsolete-l1-2-0
+
+EXPORTS
+
+CompareStringA
+EnumLanguageGroupLocalesW
+EnumSystemLanguageGroupsW
+EnumUILanguagesW
+GetNumberFormatW
+GetStringTypeA
+GetSystemDefaultUILanguage
+GetUserDefaultUILanguage
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-localization-obsolete-l1-2-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-localization-obsolete-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..47dc192de0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-localization-obsolete-l1-2-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-localization-obsolete-l1-2-0
+
+EXPORTS
+
+CompareStringA
+EnumUILanguagesW
+GetStringTypeA
+GetSystemDefaultUILanguage
+GetUserDefaultUILanguage
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-0.def
new file mode 100644
index 0000000000..fe1afb8b4b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-0.def
@@ -0,0 +1,20 @@
+LIBRARY api-ms-win-core-memory-l1-1-0
+
+EXPORTS
+
+CreateFileMappingW
+FlushViewOfFile
+MapViewOfFile
+MapViewOfFileEx
+OpenFileMappingW
+ReadProcessMemory
+UnmapViewOfFile
+VirtualAlloc
+VirtualAllocEx
+VirtualFree
+VirtualFreeEx
+VirtualProtect
+VirtualProtectEx
+VirtualQuery
+VirtualQueryEx
+WriteProcessMemory
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-1.def
new file mode 100644
index 0000000000..07a944aa7c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-1.def
@@ -0,0 +1,20 @@
+LIBRARY api-ms-win-core-memory-l1-1-1
+
+EXPORTS
+
+CreateFileMappingFromApp
+CreateFileMappingNumaW
+CreateMemoryResourceNotification
+GetLargePageMinimum
+GetProcessWorkingSetSizeEx
+GetSystemFileCacheSize
+GetWriteWatch
+MapViewOfFileFromApp
+PrefetchVirtualMemory
+QueryMemoryResourceNotification
+ResetWriteWatch
+SetProcessWorkingSetSizeEx
+SetSystemFileCacheSize
+UnmapViewOfFileEx
+VirtualLock
+VirtualUnlock
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..194ce4eaf8
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-1_windowsapp.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-memory-l1-1-1
+
+EXPORTS
+
+CreateFileMappingFromApp
+GetLargePageMinimum
+GetProcessWorkingSetSizeEx
+GetWriteWatch
+MapViewOfFileFromApp
+ResetWriteWatch
+SetProcessWorkingSetSizeEx
+UnmapViewOfFileEx
+VirtualLock
+VirtualUnlock
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-2.def
new file mode 100644
index 0000000000..2ad9631037
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-2.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-memory-l1-1-2
+
+EXPORTS
+
+AllocateUserPhysicalPages
+AllocateUserPhysicalPagesNuma
+DiscardVirtualMemory
+FreeUserPhysicalPages
+GetMemoryErrorHandlingCapabilities
+MapUserPhysicalPages
+OfferVirtualMemory
+ReclaimVirtualMemory
+RegisterBadMemoryNotification
+UnregisterBadMemoryNotification
+VirtualAllocExNuma
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-2_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-2_windowsapp.def
new file mode 100644
index 0000000000..8cd4da6a14
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-2_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-memory-l1-1-2
+
+EXPORTS
+
+DiscardVirtualMemory
+OfferVirtualMemory
+ReclaimVirtualMemory
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-3.def
new file mode 100644
index 0000000000..2699bd2a2c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-3.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-memory-l1-1-3
+
+EXPORTS
+
+OpenFileMappingFromApp
+SetProcessValidCallTargets
+VirtualAllocFromApp
+VirtualProtectFromApp
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-4.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-4.def
new file mode 100644
index 0000000000..f87e72b0c0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-4.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-memory-l1-1-4
+
+EXPORTS
+
+QueryVirtualMemoryInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-5.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-5.def
new file mode 100644
index 0000000000..f468baa0ad
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-5.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-memory-l1-1-5
+
+EXPORTS
+
+MapViewOfFileNuma2
+UnmapViewOfFile2
+VirtualUnlockEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-5_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-5_windowsapp.def
new file mode 100644
index 0000000000..0a0ed7e860
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-5_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-memory-l1-1-5
+
+EXPORTS
+
+UnmapViewOfFile2
+VirtualUnlockEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-6.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-6.def
new file mode 100644
index 0000000000..1c357027bd
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-6.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-memory-l1-1-6
+
+EXPORTS
+
+MapViewOfFile3
+MapViewOfFile3FromApp
+VirtualAlloc2
+VirtualAlloc2FromApp
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-6_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-6_windowsapp.def
new file mode 100644
index 0000000000..4b55a7d908
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-6_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-memory-l1-1-6
+
+EXPORTS
+
+MapViewOfFile3FromApp
+VirtualAlloc2FromApp
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-7.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-7.def
new file mode 100644
index 0000000000..2ff99b18d9
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-7.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-memory-l1-1-7
+
+EXPORTS
+
+CreateFileMapping2
+SetProcessValidCallTargetsForMappedView
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-7_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-7_windowsapp.def
new file mode 100644
index 0000000000..a18fe2eab9
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-memory-l1-1-7_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-memory-l1-1-7
+
+EXPORTS
+
+SetProcessValidCallTargetsForMappedView
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-0.def
new file mode 100644
index 0000000000..cab65a5c8c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-namedpipe-ansi-l1-1-0
+
+EXPORTS
+
+GetNamedPipeClientComputerNameA
+GetNamedPipeHandleStateA
+WaitNamedPipeA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-1.def
new file mode 100644
index 0000000000..f22081930a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-ansi-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-namedpipe-ansi-l1-1-1
+
+EXPORTS
+
+CallNamedPipeA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-1-0.def
new file mode 100644
index 0000000000..30fe0888a7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-namedpipe-l1-1-0
+
+EXPORTS
+
+ConnectNamedPipe
+CreateNamedPipeW
+CreatePipe
+DisconnectNamedPipe
+GetNamedPipeClientComputerNameW
+ImpersonateNamedPipeClient
+PeekNamedPipe
+SetNamedPipeHandleState
+TransactNamedPipe
+WaitNamedPipeW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-2-1.def
new file mode 100644
index 0000000000..f2c2339916
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-2-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-namedpipe-l1-2-1
+
+EXPORTS
+
+GetNamedPipeHandleStateW
+GetNamedPipeInfo
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-2-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-2-2.def
new file mode 100644
index 0000000000..b194275ba5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-namedpipe-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-namedpipe-l1-2-2
+
+EXPORTS
+
+CallNamedPipeW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-namespace-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-namespace-ansi-l1-1-0.def
new file mode 100644
index 0000000000..fa16fade6d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-namespace-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-namespace-ansi-l1-1-0
+
+EXPORTS
+
+CreateBoundaryDescriptorA
+CreatePrivateNamespaceA
+OpenPrivateNamespaceA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-namespace-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-namespace-l1-1-0.def
new file mode 100644
index 0000000000..38613de60d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-namespace-l1-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-namespace-l1-1-0
+
+EXPORTS
+
+AddSIDToBoundaryDescriptor
+ClosePrivateNamespace
+CreateBoundaryDescriptorW
+CreatePrivateNamespaceW
+DeleteBoundaryDescriptor
+OpenPrivateNamespaceW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-normalization-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-normalization-l1-1-0.def
new file mode 100644
index 0000000000..55da3d3117
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-normalization-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-normalization-l1-1-0
+
+EXPORTS
+
+GetStringScripts
+IdnToNameprepUnicode
+IsNormalizedString
+NormalizeString
+VerifyScripts
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-path-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-path-l1-1-0.def
new file mode 100644
index 0000000000..42ca163355
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-path-l1-1-0.def
@@ -0,0 +1,26 @@
+LIBRARY api-ms-win-core-path-l1-1-0
+
+EXPORTS
+
+PathAllocCanonicalize
+PathAllocCombine
+PathCchAddBackslash
+PathCchAddBackslashEx
+PathCchAddExtension
+PathCchAppend
+PathCchAppendEx
+PathCchCanonicalize
+PathCchCanonicalizeEx
+PathCchCombine
+PathCchCombineEx
+PathCchFindExtension
+PathCchIsRoot
+PathCchRemoveBackslash
+PathCchRemoveBackslashEx
+PathCchRemoveExtension
+PathCchRemoveFileSpec
+PathCchRenameExtension
+PathCchSkipRoot
+PathCchStripPrefix
+PathCchStripToRoot
+PathIsUNCEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-perfcounters-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-perfcounters-l1-1-0.def
new file mode 100644
index 0000000000..33b59b6e25
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-perfcounters-l1-1-0.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-perfcounters-l1-1-0
+
+EXPORTS
+
+PerfCreateInstance
+PerfDecrementULongCounterValue
+PerfDecrementULongLongCounterValue
+PerfDeleteInstance
+PerfIncrementULongCounterValue
+PerfIncrementULongLongCounterValue
+PerfQueryInstance
+PerfSetCounterRefValue
+PerfSetCounterSetInfo
+PerfSetULongCounterValue
+PerfSetULongLongCounterValue
+PerfStartProvider
+PerfStartProviderEx
+PerfStopProvider
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-0.def
new file mode 100644
index 0000000000..fc5581fe1a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-0.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-privateprofile-l1-1-0
+
+EXPORTS
+
+GetPrivateProfileIntA
+GetPrivateProfileIntW
+GetPrivateProfileSectionW
+GetPrivateProfileStringA
+GetPrivateProfileStringW
+GetProfileIntA
+GetProfileIntW
+GetProfileSectionA
+GetProfileSectionW
+GetProfileStringA
+GetProfileStringW
+WritePrivateProfileSectionA
+WritePrivateProfileStringA
+WritePrivateProfileStringW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..9ada645eab
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-privateprofile-l1-1-0
+
+EXPORTS
+
+GetPrivateProfileIntA
+GetPrivateProfileStringA
+GetPrivateProfileStringW
+WritePrivateProfileStringA
+WritePrivateProfileStringW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-1.def
new file mode 100644
index 0000000000..27fdfc399a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-privateprofile-l1-1-1
+
+EXPORTS
+
+GetPrivateProfileSectionA
+WritePrivateProfileSectionW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..3238a609d1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-privateprofile-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-privateprofile-l1-1-1
+
+EXPORTS
+
+GetPrivateProfileSectionA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-ansi-l1-1-0.def
new file mode 100644
index 0000000000..3dc3ca3292
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-ansi-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-processenvironment-ansi-l1-1-0
+
+EXPORTS
+
+SetEnvironmentStringsA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-1-0.def
new file mode 100644
index 0000000000..332eb4813d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-1-0.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-core-processenvironment-l1-1-0
+
+EXPORTS
+
+ExpandEnvironmentStringsA
+ExpandEnvironmentStringsW
+FreeEnvironmentStringsA
+FreeEnvironmentStringsW
+GetCommandLineA
+GetCommandLineW
+GetCurrentDirectoryA
+GetCurrentDirectoryW
+GetEnvironmentStrings
+GetEnvironmentStringsW
+GetEnvironmentVariableA
+GetEnvironmentVariableW
+GetStdHandle
+SearchPathW
+SetCurrentDirectoryA
+SetCurrentDirectoryW
+SetEnvironmentStringsW
+SetEnvironmentVariableA
+SetEnvironmentVariableW
+SetStdHandle
+SetStdHandleEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-2-0.def
new file mode 100644
index 0000000000..f864f2ff6a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-2-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-processenvironment-l1-2-0
+
+EXPORTS
+
+NeedCurrentDirectoryForExePathA
+NeedCurrentDirectoryForExePathW
+SearchPathA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-2-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..0987083d1f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processenvironment-l1-2-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-processenvironment-l1-2-0
+
+EXPORTS
+
+SearchPathA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processsnapshot-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-processsnapshot-l1-1-0.def
new file mode 100644
index 0000000000..77c533ea5a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processsnapshot-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-processsnapshot-l1-1-0
+
+EXPORTS
+
+PssCaptureSnapshot
+PssDuplicateSnapshot
+PssFreeSnapshot
+PssQuerySnapshot
+PssWalkMarkerCreate
+PssWalkMarkerFree
+PssWalkMarkerGetPosition
+PssWalkMarkerSeekToBeginning
+PssWalkMarkerSetPosition
+PssWalkSnapshot
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-0.def
new file mode 100644
index 0000000000..f2d3b5d0d8
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-0.def
@@ -0,0 +1,53 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-0
+
+EXPORTS
+
+CreateProcessA
+CreateProcessAsUserW
+CreateProcessW
+CreateRemoteThread
+CreateRemoteThreadEx
+CreateThread
+DeleteProcThreadAttributeList
+ExitProcess
+ExitThread
+FlushProcessWriteBuffers
+GetCurrentProcess
+GetCurrentProcessId
+GetCurrentThread
+GetCurrentThreadId
+GetExitCodeProcess
+GetExitCodeThread
+GetPriorityClass
+GetProcessId
+GetProcessIdOfThread
+GetProcessTimes
+GetProcessVersion
+GetStartupInfoW
+GetThreadId
+GetThreadPriority
+GetThreadPriorityBoost
+InitializeProcThreadAttributeList
+OpenProcessToken
+OpenThread
+OpenThreadToken
+ProcessIdToSessionId
+QueryProcessAffinityUpdateMode
+QueueUserAPC
+ResumeThread
+SetPriorityClass
+SetProcessAffinityUpdateMode
+SetProcessShutdownParameters
+SetThreadPriority
+SetThreadPriorityBoost
+SetThreadStackGuarantee
+SetThreadToken
+SuspendThread
+SwitchToThread
+TerminateProcess
+TerminateThread
+TlsAlloc
+TlsFree
+TlsGetValue
+TlsSetValue
+UpdateProcThreadAttribute
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-1.def
new file mode 100644
index 0000000000..b3f1baa78c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-1.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-1
+
+EXPORTS
+
+FlushInstructionCache
+GetCurrentProcessorNumber
+GetCurrentProcessorNumberEx
+GetCurrentThreadStackLimits
+GetProcessHandleCount
+GetProcessMitigationPolicy
+GetThreadContext
+GetThreadIdealProcessorEx
+GetThreadTimes
+IsProcessorFeaturePresent
+OpenProcess
+SetProcessMitigationPolicy
+SetThreadContext
+SetThreadIdealProcessorEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-2.def
new file mode 100644
index 0000000000..a6559cd60c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-2.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-2
+
+EXPORTS
+
+GetProcessPriorityBoost
+GetSystemTimes
+GetThreadInformation
+GetThreadIOPendingFlag
+IsProcessCritical
+QueryProtectedPolicy
+SetProcessPriorityBoost
+SetProtectedPolicy
+SetThreadInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-2_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-2_windowsapp.def
new file mode 100644
index 0000000000..d2e7dc236c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-2_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-2
+
+EXPORTS
+
+GetProcessPriorityBoost
+GetSystemTimes
+SetProcessPriorityBoost
+SetThreadInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-3.def
new file mode 100644
index 0000000000..23040a6ec7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-3.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-3
+
+EXPORTS
+
+CreateProcessAsUserA
+GetProcessDefaultCpuSets
+GetProcessInformation
+GetProcessShutdownParameters
+GetSystemCpuSetInformation
+GetThreadDescription
+GetThreadSelectedCpuSets
+SetProcessDefaultCpuSets
+SetProcessInformation
+SetThreadDescription
+SetThreadIdealProcessor
+SetThreadSelectedCpuSets
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-3_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-3_windowsapp.def
new file mode 100644
index 0000000000..e1a430593d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-3_windowsapp.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-3
+
+EXPORTS
+
+CreateProcessAsUserA
+GetProcessDefaultCpuSets
+GetProcessInformation
+GetSystemCpuSetInformation
+GetThreadDescription
+GetThreadSelectedCpuSets
+SetProcessDefaultCpuSets
+SetProcessInformation
+SetThreadDescription
+SetThreadIdealProcessor
+SetThreadSelectedCpuSets
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-4.def b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-4.def
new file mode 100644
index 0000000000..4f85d27a4d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processthreads-l1-1-4.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-4
+
+EXPORTS
+
+SetProcessDynamicEHContinuationTargets
+SetProcessDynamicEnforcedCetCompatibleRanges
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-l1-1-0.def
new file mode 100644
index 0000000000..ccbf79d96f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-processtopology-l1-1-0
+
+EXPORTS
+
+GetProcessGroupAffinity
+GetThreadGroupAffinity
+SetThreadGroupAffinity
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..a9f01daa49
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-processtopology-l1-1-0
+
+EXPORTS
+
+GetThreadGroupAffinity
+SetThreadGroupAffinity
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..6f54d0b28b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-processtopology-obsolete-l1-1-0
+
+EXPORTS
+
+GetActiveProcessorCount
+GetProcessAffinityMask
+GetProcessIoCounters
+SetProcessAffinityMask
+SetThreadAffinityMask
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..ab09b2eafd
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-processtopology-obsolete-l1-1-0
+
+EXPORTS
+
+GetProcessAffinityMask
+GetProcessIoCounters
+SetProcessAffinityMask
+SetThreadAffinityMask
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-1.def
new file mode 100644
index 0000000000..191d165cb5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-processtopology-obsolete-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-processtopology-obsolete-l1-1-1
+
+EXPORTS
+
+GetActiveProcessorGroupCount
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-profile-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-profile-l1-1-0.def
new file mode 100644
index 0000000000..9272dad7bf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-profile-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-profile-l1-1-0
+
+EXPORTS
+
+QueryPerformanceCounter
+QueryPerformanceFrequency
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-psapi-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-psapi-ansi-l1-1-0.def
new file mode 100644
index 0000000000..cb308c02d5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-psapi-ansi-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-psapi-ansi-l1-1-0
+
+EXPORTS
+
+K32EnumPageFilesA
+K32GetDeviceDriverBaseNameA
+K32GetDeviceDriverFileNameA
+K32GetMappedFileNameA
+K32GetModuleBaseNameA
+K32GetModuleFileNameExA
+K32GetProcessImageFileNameA
+QueryFullProcessImageNameA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-psapi-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-psapi-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..468fa6bf40
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-psapi-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-psapi-ansi-l1-1-0
+
+EXPORTS
+
+K32GetModuleBaseNameA
+K32GetModuleFileNameExA
+QueryFullProcessImageNameA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-psapi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-psapi-l1-1-0.def
new file mode 100644
index 0000000000..ed96c1bffa
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-psapi-l1-1-0.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-core-psapi-l1-1-0
+
+EXPORTS
+
+K32EmptyWorkingSet
+K32EnumDeviceDrivers
+K32EnumPageFilesW
+K32EnumProcesses
+K32EnumProcessModules
+K32EnumProcessModulesEx
+K32GetDeviceDriverBaseNameW
+K32GetDeviceDriverFileNameW
+K32GetMappedFileNameW
+K32GetModuleBaseNameW
+K32GetModuleFileNameExW
+K32GetModuleInformation
+K32GetPerformanceInfo
+K32GetProcessImageFileNameW
+K32GetProcessMemoryInfo
+K32GetWsChanges
+K32GetWsChangesEx
+K32InitializeProcessForWsWatch
+K32QueryWorkingSet
+K32QueryWorkingSetEx
+QueryFullProcessImageNameW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-psapi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-psapi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..920bc315ad
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-psapi-l1-1-0_windowsapp.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-psapi-l1-1-0
+
+EXPORTS
+
+K32EnumProcesses
+K32GetModuleBaseNameW
+K32GetModuleFileNameExW
+K32GetModuleInformation
+K32GetProcessMemoryInfo
+K32QueryWorkingSet
+K32QueryWorkingSetEx
+QueryFullProcessImageNameW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-psm-appnotify-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-psm-appnotify-l1-1-0.def
new file mode 100644
index 0000000000..fbddce139b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-psm-appnotify-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-psm-appnotify-l1-1-0
+
+EXPORTS
+
+RegisterAppStateChangeNotification
+UnregisterAppStateChangeNotification
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-quirks-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-quirks-l1-1-0.def
new file mode 100644
index 0000000000..820bae79f9
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-quirks-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-quirks-l1-1-0
+
+EXPORTS
+
+QuirkGetData
+QuirkGetData2
+QuirkIsEnabled
+QuirkIsEnabled2
+QuirkIsEnabled3
+QuirkIsEnabledForPackage
+QuirkIsEnabledForPackage2
+QuirkIsEnabledForProcess
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-quirks-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-quirks-l1-1-1.def
new file mode 100644
index 0000000000..bb1da215e0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-quirks-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-quirks-l1-1-1
+
+EXPORTS
+
+QuirkIsEnabledForPackage3
+QuirkIsEnabledForPackage4
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-0.def
new file mode 100644
index 0000000000..52f6851e1f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-realtime-l1-1-0
+
+EXPORTS
+
+QueryIdleProcessorCycleTime
+QueryIdleProcessorCycleTimeEx
+QueryProcessCycleTime
+QueryThreadCycleTime
+QueryUnbiasedInterruptTime
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..3ea1592fa6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-realtime-l1-1-0
+
+EXPORTS
+
+QueryThreadCycleTime
+QueryUnbiasedInterruptTime
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-1.def
new file mode 100644
index 0000000000..1fa142c3b7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-realtime-l1-1-1
+
+EXPORTS
+
+QueryInterruptTime
+QueryInterruptTimePrecise
+QueryUnbiasedInterruptTimePrecise
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-2.def
new file mode 100644
index 0000000000..a00ee64ca5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-realtime-l1-1-2.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-realtime-l1-1-2
+
+EXPORTS
+
+ConvertAuxiliaryCounterToPerformanceCounter
+ConvertPerformanceCounterToAuxiliaryCounter
+QueryAuxiliaryCounterFrequency
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-0.def
new file mode 100644
index 0000000000..2f01992ed4
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-0.def
@@ -0,0 +1,47 @@
+LIBRARY api-ms-win-core-registry-l1-1-0
+
+EXPORTS
+
+RegCloseKey
+RegCopyTreeW
+RegCreateKeyExA
+RegCreateKeyExW
+RegDeleteKeyExA
+RegDeleteKeyExW
+RegDeleteTreeA
+RegDeleteTreeW
+RegDeleteValueA
+RegDeleteValueW
+RegDisablePredefinedCacheEx
+RegEnumKeyExA
+RegEnumKeyExW
+RegEnumValueA
+RegEnumValueW
+RegFlushKey
+RegGetKeySecurity
+RegGetValueA
+RegGetValueW
+RegLoadAppKeyA
+RegLoadAppKeyW
+RegLoadKeyA
+RegLoadKeyW
+RegLoadMUIStringA
+RegLoadMUIStringW
+RegNotifyChangeKeyValue
+RegOpenCurrentUser
+RegOpenKeyExA
+RegOpenKeyExW
+RegOpenUserClassesRoot
+RegQueryInfoKeyA
+RegQueryInfoKeyW
+RegQueryValueExA
+RegQueryValueExW
+RegRestoreKeyA
+RegRestoreKeyW
+RegSaveKeyExA
+RegSaveKeyExW
+RegSetKeySecurity
+RegSetValueExA
+RegSetValueExW
+RegUnLoadKeyA
+RegUnLoadKeyW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-1.def
new file mode 100644
index 0000000000..fab2e1bd9a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-1.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-registry-l1-1-1
+
+EXPORTS
+
+RegDeleteKeyValueA
+RegDeleteKeyValueW
+RegSetKeyValueA
+RegSetKeyValueW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-2.def
new file mode 100644
index 0000000000..4494f001f1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-registry-l1-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-registry-l1-1-2
+
+EXPORTS
+
+RegQueryMultipleValuesA
+RegQueryMultipleValuesW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-registry-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-registry-l2-1-0.def
new file mode 100644
index 0000000000..81c833c2fd
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-registry-l2-1-0.def
@@ -0,0 +1,31 @@
+LIBRARY api-ms-win-core-registry-l2-1-0
+
+EXPORTS
+
+RegConnectRegistryA
+RegConnectRegistryW
+RegCopyTreeA
+RegCreateKeyA
+RegCreateKeyTransactedA
+RegCreateKeyTransactedW
+RegCreateKeyW
+RegDeleteKeyA
+RegDeleteKeyTransactedA
+RegDeleteKeyTransactedW
+RegDeleteKeyW
+RegDisablePredefinedCache
+RegEnumKeyA
+RegEnumKeyW
+RegOpenKeyA
+RegOpenKeyTransactedA
+RegOpenKeyTransactedW
+RegOpenKeyW
+RegOverridePredefKey
+RegQueryValueA
+RegQueryValueW
+RegReplaceKeyA
+RegReplaceKeyW
+RegSaveKeyA
+RegSaveKeyW
+RegSetValueA
+RegSetValueW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-1-0.def
new file mode 100644
index 0000000000..79478fe9ba
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-1-0.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-core-rtlsupport-l1-1-0
+
+EXPORTS
+
+RtlAddFunctionTable
+RtlCaptureContext
+RtlCaptureStackBackTrace
+RtlCompareMemory
+RtlDeleteFunctionTable
+RtlInstallFunctionTableCallback
+RtlLookupFunctionEntry
+RtlPcToFileHeader
+RtlRaiseException
+RtlRestoreContext
+RtlUnwind
+RtlUnwindEx
+RtlVirtualUnwind
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-0.def
new file mode 100644
index 0000000000..7d59326feb
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-rtlsupport-l1-2-0
+
+EXPORTS
+
+RtlAddGrowableFunctionTable
+RtlDeleteGrowableFunctionTable
+RtlGrowFunctionTable
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..06e121bdc4
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-0_windowsapp.def
@@ -0,0 +1,4 @@
+LIBRARY api-ms-win-core-rtlsupport-l1-2-0
+
+EXPORTS
+
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-1.def
new file mode 100644
index 0000000000..a69c2cb834
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-rtlsupport-l1-2-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-rtlsupport-l1-2-1
+
+EXPORTS
+
+RtlCaptureContext2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-ansi-l1-1-0.def
new file mode 100644
index 0000000000..2f338c1b9d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-shutdown-ansi-l1-1-0
+
+EXPORTS
+
+AbortSystemShutdownA
+InitiateSystemShutdownA
+InitiateSystemShutdownExA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-0.def
new file mode 100644
index 0000000000..fdba470b44
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-shutdown-l1-1-0
+
+EXPORTS
+
+AbortSystemShutdownW
+InitiateSystemShutdownExW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..25800d1243
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-shutdown-l1-1-0
+
+EXPORTS
+
+InitiateSystemShutdownExW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-1.def
new file mode 100644
index 0000000000..b9c2fe609f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-shutdown-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-shutdown-l1-1-1
+
+EXPORTS
+
+InitiateShutdownW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sidebyside-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-sidebyside-ansi-l1-1-0.def
new file mode 100644
index 0000000000..39a01ee536
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sidebyside-ansi-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-sidebyside-ansi-l1-1-0
+
+EXPORTS
+
+CreateActCtxA
+FindActCtxSectionStringA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sidebyside-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-sidebyside-l1-1-0.def
new file mode 100644
index 0000000000..b7b4933920
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sidebyside-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-sidebyside-l1-1-0
+
+EXPORTS
+
+ActivateActCtx
+AddRefActCtx
+CreateActCtxW
+DeactivateActCtx
+FindActCtxSectionGuid
+FindActCtxSectionStringW
+GetCurrentActCtx
+QueryActCtxSettingsW
+QueryActCtxW
+ReleaseActCtx
+ZombifyActCtx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-slapi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-slapi-l1-1-0.def
new file mode 100644
index 0000000000..89413f9f12
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-slapi-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-slapi-l1-1-0
+
+EXPORTS
+
+SLQueryLicenseValueFromApp
+SLQueryLicenseValueFromApp2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-state-helpers-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-state-helpers-l1-1-0.def
new file mode 100644
index 0000000000..98141534a7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-state-helpers-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-state-helpers-l1-1-0
+
+EXPORTS
+
+GetRegistryValueWithFallbackW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-string-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-string-l1-1-0.def
new file mode 100644
index 0000000000..82770efa8c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-string-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-string-l1-1-0
+
+EXPORTS
+
+CompareStringEx
+CompareStringOrdinal
+CompareStringW
+FoldStringW
+GetStringTypeExW
+GetStringTypeW
+MultiByteToWideChar
+WideCharToMultiByte
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-0.def
new file mode 100644
index 0000000000..1fca00a5c5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-string-l2-1-0
+
+EXPORTS
+
+CharLowerBuffW
+CharLowerW
+CharNextW
+CharPrevW
+CharUpperBuffW
+CharUpperW
+IsCharAlphaNumericW
+IsCharAlphaW
+IsCharLowerW
+IsCharUpperW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..a9445193c3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-string-l2-1-0
+
+EXPORTS
+
+CharLowerBuffW
+CharLowerW
+CharNextW
+CharUpperW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-1.def
new file mode 100644
index 0000000000..6eddf1e132
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-string-l2-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-string-l2-1-1
+
+EXPORTS
+
+SHLoadIndirectString
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..0a825e4a1f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-string-obsolete-l1-1-0
+
+EXPORTS
+
+lstrcatW
+lstrcmpA
+lstrcmpiA
+lstrcmpiW
+lstrcmpW
+lstrcpynA
+lstrcpynW
+lstrcpyW
+lstrlenA
+lstrlenW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..ecc48e0e22
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-string-obsolete-l1-1-0
+
+EXPORTS
+
+lstrcatW
+lstrcmpA
+lstrcmpiA
+lstrcmpiW
+lstrcmpW
+lstrcpynW
+lstrcpyW
+lstrlenA
+lstrlenW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-1.def
new file mode 100644
index 0000000000..ff51775bf1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-string-obsolete-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-string-obsolete-l1-1-1
+
+EXPORTS
+
+lstrcatA
+lstrcpyA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-stringansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-stringansi-l1-1-0.def
new file mode 100644
index 0000000000..209d06d8fa
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-stringansi-l1-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-core-stringansi-l1-1-0
+
+EXPORTS
+
+CharLowerA
+CharLowerBuffA
+CharNextA
+CharNextExA
+CharPrevA
+CharPrevExA
+CharUpperA
+CharUpperBuffA
+IsCharAlphaA
+IsCharAlphaNumericA
+IsCharLowerA
+IsCharUpperA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-stringansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-stringansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..08fc2160cf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-stringansi-l1-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-stringansi-l1-1-0
+
+EXPORTS
+
+CharLowerA
+CharNextA
+CharNextExA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-synch-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-synch-ansi-l1-1-0.def
new file mode 100644
index 0000000000..f466b268e7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-synch-ansi-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-synch-ansi-l1-1-0
+
+EXPORTS
+
+CreateSemaphoreA
+CreateSemaphoreExA
+CreateWaitableTimerA
+CreateWaitableTimerExA
+OpenMutexA
+OpenSemaphoreA
+OpenWaitableTimerA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-synch-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-synch-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..311d40d6fe
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-synch-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-synch-ansi-l1-1-0
+
+EXPORTS
+
+CreateSemaphoreA
+CreateSemaphoreExA
+CreateWaitableTimerA
+CreateWaitableTimerExA
+OpenMutexA
+OpenWaitableTimerA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-1-0.def
new file mode 100644
index 0000000000..3d89c6969a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-1-0.def
@@ -0,0 +1,45 @@
+LIBRARY api-ms-win-core-synch-l1-1-0
+
+EXPORTS
+
+AcquireSRWLockExclusive
+AcquireSRWLockShared
+CancelWaitableTimer
+CreateEventA
+CreateEventExA
+CreateEventExW
+CreateEventW
+CreateMutexA
+CreateMutexExA
+CreateMutexExW
+CreateMutexW
+CreateSemaphoreExW
+CreateWaitableTimerExW
+DeleteCriticalSection
+EnterCriticalSection
+InitializeCriticalSection
+InitializeCriticalSectionAndSpinCount
+InitializeCriticalSectionEx
+InitializeSRWLock
+LeaveCriticalSection
+OpenEventA
+OpenEventW
+OpenMutexW
+OpenSemaphoreW
+OpenWaitableTimerW
+ReleaseMutex
+ReleaseSemaphore
+ReleaseSRWLockExclusive
+ReleaseSRWLockShared
+ResetEvent
+SetCriticalSectionSpinCount
+SetEvent
+SetWaitableTimer
+SetWaitableTimerEx
+SleepEx
+TryAcquireSRWLockExclusive
+TryAcquireSRWLockShared
+TryEnterCriticalSection
+WaitForMultipleObjectsEx
+WaitForSingleObject
+WaitForSingleObjectEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-2-0.def
new file mode 100644
index 0000000000..4a2f4f9251
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-2-0.def
@@ -0,0 +1,21 @@
+LIBRARY api-ms-win-core-synch-l1-2-0
+
+EXPORTS
+
+DeleteSynchronizationBarrier
+EnterSynchronizationBarrier
+InitializeConditionVariable
+InitializeSynchronizationBarrier
+InitOnceBeginInitialize
+InitOnceComplete
+InitOnceExecuteOnce
+InitOnceInitialize
+SignalObjectAndWait
+Sleep
+SleepConditionVariableCS
+SleepConditionVariableSRW
+WaitOnAddress
+WakeAllConditionVariable
+WakeByAddressAll
+WakeByAddressSingle
+WakeConditionVariable
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-2-1.def
new file mode 100644
index 0000000000..3b1a79f3f3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-synch-l1-2-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-synch-l1-2-1
+
+EXPORTS
+
+CreateSemaphoreW
+CreateWaitableTimerW
+WaitForMultipleObjects
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-1-0.def
new file mode 100644
index 0000000000..e1dee65297
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-1-0.def
@@ -0,0 +1,26 @@
+LIBRARY api-ms-win-core-sysinfo-l1-1-0
+
+EXPORTS
+
+GetComputerNameExA
+GetComputerNameExW
+GetLocalTime
+GetLogicalProcessorInformation
+GetLogicalProcessorInformationEx
+GetSystemDirectoryA
+GetSystemDirectoryW
+GetSystemInfo
+GetSystemTime
+GetSystemTimeAdjustment
+GetSystemTimeAsFileTime
+GetSystemWindowsDirectoryA
+GetSystemWindowsDirectoryW
+GetTickCount
+GetTickCount64
+GetVersion
+GetVersionExA
+GetVersionExW
+GetWindowsDirectoryA
+GetWindowsDirectoryW
+GlobalMemoryStatusEx
+SetLocalTime
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-0.def
new file mode 100644
index 0000000000..9b93fd3d7c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-0
+
+EXPORTS
+
+EnumSystemFirmwareTables
+GetNativeSystemInfo
+GetOsSafeBootMode
+GetProductInfo
+GetSystemFirmwareTable
+GetSystemTimePreciseAsFileTime
+SetComputerNameExW
+SetSystemTime
+VerSetConditionMask
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..3e6d943153
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-0_windowsapp.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-0
+
+EXPORTS
+
+EnumSystemFirmwareTables
+GetNativeSystemInfo
+GetProductInfo
+GetSystemFirmwareTable
+GetSystemTimePreciseAsFileTime
+SetSystemTime
+VerSetConditionMask
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-1.def
new file mode 100644
index 0000000000..77b44ba000
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-1
+
+EXPORTS
+
+DnsHostnameToComputerNameExW
+GetPhysicallyInstalledSystemMemory
+InstallELAMCertificateInfo
+SetComputerNameEx2W
+SetSystemTimeAdjustment
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-1_windowsapp.def
new file mode 100644
index 0000000000..5a946d4865
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-1
+
+EXPORTS
+
+GetPhysicallyInstalledSystemMemory
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-2.def
new file mode 100644
index 0000000000..5f4dfe10b3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-2
+
+EXPORTS
+
+GetProcessorSystemCycleTime
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-3.def
new file mode 100644
index 0000000000..90e42f15e5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-3.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-3
+
+EXPORTS
+
+GetIntegratedDisplaySize
+GetOsManufacturingMode
+SetComputerNameA
+SetComputerNameExA
+SetComputerNameW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-3_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-3_windowsapp.def
new file mode 100644
index 0000000000..e9228b5c5f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-3_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-3
+
+EXPORTS
+
+GetIntegratedDisplaySize
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-4.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-4.def
new file mode 100644
index 0000000000..4d28cb64ee
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-4.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-4
+
+EXPORTS
+
+GetSystemTimeAdjustmentPrecise
+SetSystemTimeAdjustmentPrecise
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-5.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-5.def
new file mode 100644
index 0000000000..2e66ec3a87
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-5.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-5
+
+EXPORTS
+
+GetSystemLeapSecondInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-6.def b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-6.def
new file mode 100644
index 0000000000..3557c8d92c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-sysinfo-l1-2-6.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-6
+
+EXPORTS
+
+IsUserCetAvailableInEnvironment
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-0.def
new file mode 100644
index 0000000000..ae1ec5b33b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-systemtopology-l1-1-0
+
+EXPORTS
+
+GetNumaHighestNodeNumber
+GetNumaNodeProcessorMaskEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..c47c8f7af6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-systemtopology-l1-1-0
+
+EXPORTS
+
+GetNumaHighestNodeNumber
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-1.def
new file mode 100644
index 0000000000..c4f707147b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-systemtopology-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-systemtopology-l1-1-1
+
+EXPORTS
+
+GetNumaProximityNodeEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-threadpool-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-threadpool-l1-2-0.def
new file mode 100644
index 0000000000..788e88e05d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-threadpool-l1-2-0.def
@@ -0,0 +1,41 @@
+LIBRARY api-ms-win-core-threadpool-l1-2-0
+
+EXPORTS
+
+CallbackMayRunLong
+CancelThreadpoolIo
+CloseThreadpool
+CloseThreadpoolCleanupGroup
+CloseThreadpoolCleanupGroupMembers
+CloseThreadpoolIo
+CloseThreadpoolTimer
+CloseThreadpoolWait
+CloseThreadpoolWork
+CreateThreadpool
+CreateThreadpoolCleanupGroup
+CreateThreadpoolIo
+CreateThreadpoolTimer
+CreateThreadpoolWait
+CreateThreadpoolWork
+DisassociateCurrentThreadFromCallback
+FreeLibraryWhenCallbackReturns
+IsThreadpoolTimerSet
+LeaveCriticalSectionWhenCallbackReturns
+QueryThreadpoolStackInformation
+ReleaseMutexWhenCallbackReturns
+ReleaseSemaphoreWhenCallbackReturns
+SetEventWhenCallbackReturns
+SetThreadpoolStackInformation
+SetThreadpoolThreadMaximum
+SetThreadpoolThreadMinimum
+SetThreadpoolTimer
+SetThreadpoolTimerEx
+SetThreadpoolWait
+SetThreadpoolWaitEx
+StartThreadpoolIo
+SubmitThreadpoolWork
+TrySubmitThreadpoolCallback
+WaitForThreadpoolIoCallbacks
+WaitForThreadpoolTimerCallbacks
+WaitForThreadpoolWaitCallbacks
+WaitForThreadpoolWorkCallbacks
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-threadpool-legacy-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-threadpool-legacy-l1-1-0.def
new file mode 100644
index 0000000000..7238be0bb8
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-threadpool-legacy-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-threadpool-legacy-l1-1-0
+
+EXPORTS
+
+ChangeTimerQueueTimer
+CreateTimerQueue
+CreateTimerQueueTimer
+DeleteTimerQueueEx
+DeleteTimerQueueTimer
+QueueUserWorkItem
+UnregisterWaitEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-timezone-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-timezone-l1-1-0.def
new file mode 100644
index 0000000000..cb988a2cff
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-timezone-l1-1-0.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-core-timezone-l1-1-0
+
+EXPORTS
+
+EnumDynamicTimeZoneInformation
+FileTimeToSystemTime
+GetDynamicTimeZoneInformation
+GetDynamicTimeZoneInformationEffectiveYears
+GetTimeZoneInformation
+GetTimeZoneInformationForYear
+SetDynamicTimeZoneInformation
+SetTimeZoneInformation
+SystemTimeToFileTime
+SystemTimeToTzSpecificLocalTime
+SystemTimeToTzSpecificLocalTimeEx
+TzSpecificLocalTimeToSystemTime
+TzSpecificLocalTimeToSystemTimeEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-timezone-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-timezone-l1-1-1.def
new file mode 100644
index 0000000000..03f9b99b49
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-timezone-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-timezone-l1-1-1
+
+EXPORTS
+
+LocalFileTimeToLocalSystemTime
+LocalSystemTimeToLocalFileTime
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-0.def
new file mode 100644
index 0000000000..419f0d8e68
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-toolhelp-l1-1-0
+
+EXPORTS
+
+CreateToolhelp32Snapshot
+Module32FirstW
+Module32NextW
+Process32FirstW
+Process32NextW
+Thread32First
+Thread32Next
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..0e031ec067
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-toolhelp-l1-1-0
+
+EXPORTS
+
+CreateToolhelp32Snapshot
+Process32FirstW
+Process32NextW
+Thread32First
+Thread32Next
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-1.def
new file mode 100644
index 0000000000..1a999f8802
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-toolhelp-l1-1-1.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-toolhelp-l1-1-1
+
+EXPORTS
+
+Heap32First
+Heap32ListFirst
+Heap32ListNext
+Heap32Next
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-url-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-url-l1-1-0.def
new file mode 100644
index 0000000000..77ad596baf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-url-l1-1-0.def
@@ -0,0 +1,42 @@
+LIBRARY api-ms-win-core-url-l1-1-0
+
+EXPORTS
+
+GetAcceptLanguagesA
+GetAcceptLanguagesW
+HashData
+IsInternetESCEnabled
+ParseURLA
+ParseURLW
+PathCreateFromUrlA
+PathCreateFromUrlAlloc
+PathCreateFromUrlW
+PathIsURLA
+PathIsURLW
+UrlApplySchemeA
+UrlApplySchemeW
+UrlCanonicalizeA
+UrlCanonicalizeW
+UrlCombineA
+UrlCombineW
+UrlCompareA
+UrlCompareW
+UrlCreateFromPathA
+UrlCreateFromPathW
+UrlEscapeA
+UrlEscapeW
+UrlFixupW
+UrlGetLocationA
+UrlGetLocationW
+UrlGetPartA
+UrlGetPartW
+UrlHashA
+UrlHashW
+UrlIsA
+UrlIsNoHistoryA
+UrlIsNoHistoryW
+UrlIsOpaqueA
+UrlIsOpaqueW
+UrlIsW
+UrlUnescapeA
+UrlUnescapeW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-url-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-url-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..480df242f6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-url-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-url-l1-1-0
+
+EXPORTS
+
+GetAcceptLanguagesA
+GetAcceptLanguagesW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-util-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-util-l1-1-0.def
new file mode 100644
index 0000000000..ccec54b30d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-util-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-util-l1-1-0
+
+EXPORTS
+
+Beep
+DecodePointer
+DecodeSystemPointer
+EncodePointer
+EncodeSystemPointer
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-util-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-util-l1-1-1.def
new file mode 100644
index 0000000000..c562107565
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-util-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-util-l1-1-1
+
+EXPORTS
+
+DecodeRemotePointer
+EncodeRemotePointer
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-0.def
new file mode 100644
index 0000000000..4aaf83294e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-version-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExW
+GetFileVersionInfoSizeExW
+VerFindFileW
+VerQueryValueW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..6dc9f6bc57
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-version-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExW
+GetFileVersionInfoSizeExW
+VerQueryValueW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-1.def
new file mode 100644
index 0000000000..b0239bce5e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-version-l1-1-1
+
+EXPORTS
+
+GetFileVersionInfoSizeW
+GetFileVersionInfoW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..f9cdfe925b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-version-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-version-l1-1-1
+
+EXPORTS
+
+GetFileVersionInfoW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-0.def
new file mode 100644
index 0000000000..cfc0ebd4b1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-versionansi-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExA
+GetFileVersionInfoSizeExA
+VerFindFileA
+VerQueryValueA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..bd69fd6f98
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-versionansi-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExA
+GetFileVersionInfoSizeExA
+VerQueryValueA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-1.def
new file mode 100644
index 0000000000..a1bf1a314f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-versionansi-l1-1-1
+
+EXPORTS
+
+GetFileVersionInfoA
+GetFileVersionInfoSizeA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..eb58d917c1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-versionansi-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-versionansi-l1-1-1
+
+EXPORTS
+
+GetFileVersionInfoA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-windowsceip-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-windowsceip-l1-1-0.def
new file mode 100644
index 0000000000..0283b75ff9
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-windowsceip-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-windowsceip-l1-1-0
+
+EXPORTS
+
+CeipIsOptedIn
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-0.def
new file mode 100644
index 0000000000..0fef348e44
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-0
+
+EXPORTS
+
+GetApplicationRecoveryCallback
+GetApplicationRestartSettings
+WerGetFlags
+WerpNotifyLoadStringResource
+WerpNotifyUseStringResource
+WerRegisterFile
+WerRegisterMemoryBlock
+WerRegisterRuntimeExceptionModule
+WerSetFlags
+WerUnregisterFile
+WerUnregisterMemoryBlock
+WerUnregisterRuntimeExceptionModule
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..f29d62e824
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-0
+
+EXPORTS
+
+WerRegisterFile
+WerRegisterMemoryBlock
+WerUnregisterFile
+WerUnregisterMemoryBlock
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-1.def
new file mode 100644
index 0000000000..08d8c28206
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-1.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-1
+
+EXPORTS
+
+WerRegisterAdditionalProcess
+WerRegisterCustomMetadata
+WerRegisterExcludedMemoryBlock
+WerUnregisterAdditionalProcess
+WerUnregisterCustomMetadata
+WerUnregisterExcludedMemoryBlock
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-2.def
new file mode 100644
index 0000000000..6870da1379
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-2
+
+EXPORTS
+
+WerRegisterAppLocalDump
+WerUnregisterAppLocalDump
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-3.def
new file mode 100644
index 0000000000..b69ef5ecd8
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-windowserrorreporting-l1-1-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-3
+
+EXPORTS
+
+RegisterApplicationRestart
+UnregisterApplicationRestart
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-0.def
new file mode 100644
index 0000000000..e84af147f4
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-winrt-error-l1-1-0
+
+EXPORTS
+
+GetRestrictedErrorInfo
+RoCaptureErrorContext
+RoFailFastWithErrorContext
+RoGetErrorReportingFlags
+RoOriginateError
+RoOriginateErrorW
+RoResolveRestrictedErrorInfoReference
+RoSetErrorReportingFlags
+RoTransformError
+RoTransformErrorW
+SetRestrictedErrorInfo
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..18a607b8a8
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-0_windowsapp.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-winrt-error-l1-1-0
+
+EXPORTS
+
+GetRestrictedErrorInfo
+RoCaptureErrorContext
+RoFailFastWithErrorContext
+RoGetErrorReportingFlags
+RoOriginateError
+RoOriginateErrorW
+RoSetErrorReportingFlags
+RoTransformError
+RoTransformErrorW
+SetRestrictedErrorInfo
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-1.def
new file mode 100644
index 0000000000..282d8aab6f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-1.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-winrt-error-l1-1-1
+
+EXPORTS
+
+IsErrorPropagationEnabled
+RoClearError
+RoGetMatchingRestrictedErrorInfo
+RoInspectCapturedStackBackTrace
+RoInspectThreadErrorInfo
+RoOriginateLanguageException
+RoReportFailedDelegate
+RoReportUnhandledError
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..75be68abec
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-error-l1-1-1_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-winrt-error-l1-1-1
+
+EXPORTS
+
+IsErrorPropagationEnabled
+RoClearError
+RoGetMatchingRestrictedErrorInfo
+RoOriginateLanguageException
+RoReportFailedDelegate
+RoReportUnhandledError
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-l1-1-0.def
new file mode 100644
index 0000000000..9e841a5a7f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-l1-1-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-winrt-l1-1-0
+
+EXPORTS
+
+RoActivateInstance
+RoGetActivationFactory
+RoGetApartmentIdentifier
+RoInitialize
+RoRegisterActivationFactories
+RoRegisterForApartmentShutdown
+RoRevokeActivationFactories
+RoUninitialize
+RoUnregisterForApartmentShutdown
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-registration-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-registration-l1-1-0.def
new file mode 100644
index 0000000000..a7ad121a9a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-registration-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-winrt-registration-l1-1-0
+
+EXPORTS
+
+RoGetActivatableClassRegistration
+RoGetServerActivatableClasses
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-robuffer-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-robuffer-l1-1-0.def
new file mode 100644
index 0000000000..8e6e25f30a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-robuffer-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-winrt-robuffer-l1-1-0
+
+EXPORTS
+
+RoGetBufferMarshaler
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-roparameterizediid-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-roparameterizediid-l1-1-0.def
new file mode 100644
index 0000000000..b09d4444d2
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-roparameterizediid-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-winrt-roparameterizediid-l1-1-0
+
+EXPORTS
+
+RoFreeParameterizedTypeExtra
+RoGetParameterizedTypeInstanceIID
+RoParameterizedTypeExtraGetTypeSignature
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-0.def
new file mode 100644
index 0000000000..c1636e1c64
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-0.def
@@ -0,0 +1,31 @@
+LIBRARY api-ms-win-core-winrt-string-l1-1-0
+
+EXPORTS
+
+HSTRING_UserFree
+HSTRING_UserFree64
+HSTRING_UserMarshal
+HSTRING_UserMarshal64
+HSTRING_UserSize
+HSTRING_UserSize64
+HSTRING_UserUnmarshal
+HSTRING_UserUnmarshal64
+WindowsCompareStringOrdinal
+WindowsConcatString
+WindowsCreateString
+WindowsCreateStringReference
+WindowsDeleteString
+WindowsDeleteStringBuffer
+WindowsDuplicateString
+WindowsGetStringLen
+WindowsGetStringRawBuffer
+WindowsInspectString
+WindowsIsStringEmpty
+WindowsPreallocateStringBuffer
+WindowsPromoteStringBuffer
+WindowsReplaceString
+WindowsStringHasEmbeddedNull
+WindowsSubstring
+WindowsSubstringWithSpecifiedLength
+WindowsTrimStringEnd
+WindowsTrimStringStart
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..127d74961b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-0_windowsapp.def
@@ -0,0 +1,30 @@
+LIBRARY api-ms-win-core-winrt-string-l1-1-0
+
+EXPORTS
+
+HSTRING_UserFree
+HSTRING_UserFree64
+HSTRING_UserMarshal
+HSTRING_UserMarshal64
+HSTRING_UserSize
+HSTRING_UserSize64
+HSTRING_UserUnmarshal
+HSTRING_UserUnmarshal64
+WindowsCompareStringOrdinal
+WindowsConcatString
+WindowsCreateString
+WindowsCreateStringReference
+WindowsDeleteString
+WindowsDeleteStringBuffer
+WindowsDuplicateString
+WindowsGetStringLen
+WindowsGetStringRawBuffer
+WindowsIsStringEmpty
+WindowsPreallocateStringBuffer
+WindowsPromoteStringBuffer
+WindowsReplaceString
+WindowsStringHasEmbeddedNull
+WindowsSubstring
+WindowsSubstringWithSpecifiedLength
+WindowsTrimStringEnd
+WindowsTrimStringStart
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-1.def
new file mode 100644
index 0000000000..9254c0b478
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-winrt-string-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-winrt-string-l1-1-1
+
+EXPORTS
+
+WindowsInspectString2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-0.def
new file mode 100644
index 0000000000..b873d0cf46
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-wow64-l1-1-0
+
+EXPORTS
+
+IsWow64Process
+Wow64DisableWow64FsRedirection
+Wow64RevertWow64FsRedirection
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..38eebd2e30
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-wow64-l1-1-0
+
+EXPORTS
+
+IsWow64Process
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-1.def
new file mode 100644
index 0000000000..9d710148f1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-1.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-wow64-l1-1-1
+
+EXPORTS
+
+GetSystemWow64Directory2A
+GetSystemWow64Directory2W
+GetSystemWow64DirectoryA
+GetSystemWow64DirectoryW
+IsWow64Process2
+Wow64SetThreadDefaultGuestMachine
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..6ab135ba6e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-wow64-l1-1-1
+
+EXPORTS
+
+IsWow64Process2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-2.def
new file mode 100644
index 0000000000..8d852059d7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-wow64-l1-1-2
+
+EXPORTS
+
+IsWow64GuestMachineSupported
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-3.def
new file mode 100644
index 0000000000..66878c6932
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-wow64-l1-1-3.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-wow64-l1-1-3
+
+EXPORTS
+
+Wow64GetThreadContext
+Wow64SetThreadContext
+Wow64SuspendThread
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-0.def
new file mode 100644
index 0000000000..1ab5c8fd65
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-xstate-l1-1-0
+
+EXPORTS
+
+RtlCopyExtendedContext
+RtlGetEnabledExtendedFeatures
+RtlGetExtendedContextLength
+RtlGetExtendedFeaturesMask
+RtlInitializeExtendedContext
+RtlLocateExtendedFeature
+RtlLocateLegacyContext
+RtlSetExtendedFeaturesMask
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-1.def
new file mode 100644
index 0000000000..792b649cac
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-xstate-l1-1-1
+
+EXPORTS
+
+RtlCopyContext
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-2.def
new file mode 100644
index 0000000000..e264d589ab
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-xstate-l1-1-2
+
+EXPORTS
+
+RtlLocateExtendedFeature2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-3.def
new file mode 100644
index 0000000000..436f7fc5f2
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l1-1-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-xstate-l1-1-3
+
+EXPORTS
+
+RtlGetExtendedContextLength2
+RtlInitializeExtendedContext2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-0.def
new file mode 100644
index 0000000000..91e211e55d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-xstate-l2-1-0
+
+EXPORTS
+
+CopyContext
+GetEnabledXStateFeatures
+GetXStateFeaturesMask
+InitializeContext
+LocateXStateFeature
+SetXStateFeaturesMask
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..90d693cf89
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-xstate-l2-1-0
+
+EXPORTS
+
+GetEnabledXStateFeatures
+GetXStateFeaturesMask
+InitializeContext
+LocateXStateFeature
diff --git a/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-1.def
new file mode 100644
index 0000000000..53e6a64b19
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-core-xstate-l2-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-xstate-l2-1-1
+
+EXPORTS
+
+InitializeContext2
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-conio-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-conio-l1-1-0.def
new file mode 100644
index 0000000000..b9a9df6a65
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-conio-l1-1-0.def
@@ -0,0 +1,38 @@
+LIBRARY api-ms-win-crt-conio-l1-1-0
+
+EXPORTS
+
+__conio_common_vcprintf
+__conio_common_vcprintf_p
+__conio_common_vcprintf_s
+__conio_common_vcscanf
+__conio_common_vcwprintf
+__conio_common_vcwprintf_p
+__conio_common_vcwprintf_s
+__conio_common_vcwscanf
+_cgets
+_cgets_s
+_cgetws
+_cgetws_s
+_cputs
+_cputws
+_getch
+getch == _getch
+_getch_nolock
+_getche
+getche == _getche
+_getche_nolock
+_getwch
+_getwch_nolock
+_getwche
+_getwche_nolock
+_putch
+putch == _putch
+_putch_nolock
+_putwch
+_putwch_nolock
+_ungetch
+ungetch == _ungetch
+_ungetch_nolock
+_ungetwch
+_ungetwch_nolock
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-convert-l1-1-0.def.in b/lib/libc/mingw/lib-common/api-ms-win-crt-convert-l1-1-0.def.in
new file mode 100644
index 0000000000..c172b0969e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-convert-l1-1-0.def.in
@@ -0,0 +1,136 @@
+LIBRARY api-ms-win-crt-convert-l1-1-0
+
+EXPORTS
+
+#include "func.def.in"
+
+__toascii
+toascii == __toascii
+_atodbl
+_atodbl_l
+_atof_l
+_atoflt
+_atoflt_l
+_atoi64
+_atoi64_l
+_atoi_l
+_atol_l
+_atoldbl
+_atoldbl_l
+_atoll_l
+_ecvt
+ecvt == _ecvt
+_ecvt_s
+_fcvt
+fcvt == _fcvt
+_fcvt_s
+_gcvt
+gcvt == _gcvt
+_gcvt_s
+_i64toa
+_i64toa_s
+_i64tow
+_i64tow_s
+_itoa
+itoa == _itoa
+_itoa_s
+_itow
+_itow_s
+_ltoa
+ltoa == _ltoa
+_ltoa_s
+_ltow
+_ltow_s
+_strtod_l
+_strtof_l
+_strtoi64
+_strtoi64_l
+_strtoimax_l
+_strtol_l
+_strtold_l
+_strtoll_l
+_strtoui64
+_strtoui64_l
+_strtoul_l
+_strtoull_l
+_strtoumax_l
+_ui64toa
+_ui64toa_s
+_ui64tow
+_ui64tow_s
+_ultoa
+_ultoa_s
+_ultow
+_ultow_s
+_wcstod_l
+_wcstof_l
+_wcstoi64
+_wcstoi64_l
+_wcstoimax_l
+_wcstol_l
+_wcstold_l
+_wcstoll_l
+_wcstombs_l
+_wcstombs_s_l
+_wcstoui64
+_wcstoui64_l
+_wcstoul_l
+_wcstoull_l
+_wcstoumax_l
+_wctomb_l
+_wctomb_s_l
+_wtof
+_wtof_l
+_wtoi
+_wtoi64
+_wtoi64_l
+_wtoi_l
+_wtol
+_wtol_l
+_wtoll
+_wtoll_l
+atof
+atoi
+atol
+atoll
+btowc
+c16rtomb
+c32rtomb
+mbrtoc16
+mbrtoc32
+mbrtowc
+mbsrtowcs
+mbsrtowcs_s
+mbstowcs
+mbstowcs_s
+mbtowc
+strtod
+strtof
+strtoimax
+strtol
+; Can't use long double functions from the CRT on x86
+F_ARM_ANY(strtold)
+strtoll
+strtoul
+strtoull
+strtoumax
+wcrtomb
+wcrtomb_s
+wcsrtombs
+wcsrtombs_s
+wcstod
+wcstof
+wcstoimax
+wcstol
+; Can't use long double functions from the CRT on x86
+F_ARM_ANY(wcstold)
+wcstoll
+wcstombs
+wcstombs_s
+wcstoul
+wcstoull
+wcstoumax
+wctob
+wctomb
+wctomb_s
+wctrans
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-environment-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-environment-l1-1-0.def
new file mode 100644
index 0000000000..5969bb1fbd
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-environment-l1-1-0.def
@@ -0,0 +1,24 @@
+LIBRARY api-ms-win-crt-environment-l1-1-0
+
+EXPORTS
+
+__p__environ
+__p__wenviron
+_dupenv_s
+_putenv
+putenv == _putenv
+_putenv_s
+_searchenv
+searchenv == _searchenv
+_searchenv_s
+_wdupenv_s
+_wgetcwd
+_wgetdcwd
+_wgetenv
+_wgetenv_s
+_wputenv
+_wputenv_s
+_wsearchenv
+_wsearchenv_s
+getenv
+getenv_s
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-filesystem-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-filesystem-l1-1-0.def
new file mode 100644
index 0000000000..45ae728baf
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-filesystem-l1-1-0.def
@@ -0,0 +1,79 @@
+LIBRARY api-ms-win-crt-filesystem-l1-1-0
+
+EXPORTS
+
+_access
+; access is provided as an alias for __mingw_access
+; access == _access
+_access_s
+_chdir
+chdir == _chdir
+_chdrive
+_chmod
+chmod == _chmod
+_findclose
+_findfirst == _findfirst64
+_findfirst32
+_findfirst32i64
+_findfirst64
+_findfirst64i32
+_findnext == _findnext64
+_findnext32
+_findnext32i64
+_findnext64
+_findnext64i32
+_fstat32
+_fstat32i64
+_fstat64
+_fstat64i32
+_fullpath
+_getdiskfree
+_getdrive
+_getdrives
+_lock_file
+_makepath
+_makepath_s
+_mkdir
+mkdir == _mkdir
+_rmdir
+rmdir == _rmdir
+_splitpath
+_splitpath_s
+_stat32
+_stat32i64
+_stat64
+_stat64i32
+_umask
+umask == _umask
+_umask_s
+_unlink
+unlink == _unlink
+_unlock_file
+_waccess
+_waccess_s
+_wchdir
+_wchmod
+_wfindfirst32
+_wfindfirst32i64
+_wfindfirst64
+_wfindfirst64i32
+_wfindnext32
+_wfindnext32i64
+_wfindnext64
+_wfindnext64i32
+_wfullpath
+_wmakepath
+_wmakepath_s
+_wmkdir
+_wremove
+_wrename
+_wrmdir
+_wsplitpath
+_wsplitpath_s
+_wstat32
+_wstat32i64
+_wstat64
+_wstat64i32
+_wunlink
+remove
+rename
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-heap-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-heap-l1-1-0.def
new file mode 100644
index 0000000000..fd793fe824
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-heap-l1-1-0.def
@@ -0,0 +1,32 @@
+LIBRARY api-ms-win-crt-heap-l1-1-0
+
+EXPORTS
+
+_aligned_free
+_aligned_malloc
+_aligned_msize
+_aligned_offset_malloc
+_aligned_offset_realloc
+_aligned_offset_recalloc
+_aligned_realloc
+_aligned_recalloc
+_callnewh
+_calloc_base
+_expand
+_free_base
+_get_heap_handle
+_heapchk
+_heapmin
+_heapwalk
+heapwalk == _heapwalk
+_malloc_base
+_msize
+_query_new_handler
+_query_new_mode
+_realloc_base
+_recalloc
+_set_new_mode
+calloc
+free
+malloc
+realloc
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-locale-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-locale-l1-1-0.def
new file mode 100644
index 0000000000..e1dba6ce09
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-locale-l1-1-0.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-crt-locale-l1-1-0
+
+EXPORTS
+
+___lc_codepage_func
+___lc_collate_cp_func
+___lc_locale_name_func
+___mb_cur_max_func
+___mb_cur_max_l_func
+__initialize_lconv_for_unsigned_char
+__lconv_init == __initialize_lconv_for_unsigned_char
+__pctype_func
+__pwctype_func
+_configthreadlocale
+_create_locale
+_free_locale
+_get_current_locale
+_getmbcp
+_lock_locales
+_setmbcp
+_unlock_locales
+_wcreate_locale
+_wsetlocale
+localeconv
+setlocale
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-math-l1-1-0.def.in b/lib/libc/mingw/lib-common/api-ms-win-crt-math-l1-1-0.def.in
new file mode 100644
index 0000000000..9493e57113
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-math-l1-1-0.def.in
@@ -0,0 +1,384 @@
+LIBRARY api-ms-win-crt-math-l1-1-0
+
+EXPORTS
+
+#include "func.def.in"
+
+#ifdef DEF_I386
+_CIacos
+_CIasin
+_CIatan
+_CIatan2
+_CIcos
+_CIcosh
+_CIexp
+_CIfmod
+_CIlog
+_CIlog10
+_CIpow
+_CIsin
+_CIsinh
+_CIsqrt
+_CItan
+_CItanh
+#endif
+_Cbuild
+_Cmulcc
+_Cmulcr
+_FCbuild
+_FCmulcc
+_FCmulcr
+_LCbuild
+_LCmulcc
+_LCmulcr
+#ifdef DEF_I386
+__libm_sse2_acos
+__libm_sse2_acosf
+__libm_sse2_asin
+__libm_sse2_asinf
+__libm_sse2_atan
+__libm_sse2_atan2
+__libm_sse2_atanf
+__libm_sse2_cos
+__libm_sse2_cosf
+__libm_sse2_exp
+__libm_sse2_expf
+__libm_sse2_log
+__libm_sse2_log10
+__libm_sse2_log10f
+__libm_sse2_logf
+__libm_sse2_pow
+__libm_sse2_powf
+__libm_sse2_sin
+__libm_sse2_sinf
+__libm_sse2_tan
+__libm_sse2_tanf
+#endif
+__setusermatherr
+; DATA set manually
+_cabs DATA
+_chgsign
+chgsign == _chgsign
+_chgsignf
+_copysign
+_copysignf
+_d_int
+_dclass
+_dexp
+_dlog
+_dnorm
+_dpcomp
+_dpoly
+_dscale
+_dsign
+_dsin
+_dtest
+_dunscale
+_except1
+_fd_int
+_fdclass
+_fdexp
+_fdlog
+_fdnorm
+_fdopen
+fdopen == _fdopen
+_fdpcomp
+_fdpoly
+_fdscale
+_fdsign
+_fdsin
+_fdtest
+_fdunscale
+_finite
+finite == _finite
+F_NON_I386(_finitef)
+_fpclass
+fpclass == _fpclass
+_fpclassf
+F_I386(_ftol)
+_get_FMA3_enable
+_hypot
+_hypotf
+_isnan
+F_X64(_isnanf)
+_j0
+j0 == _j0
+_j1
+j1 == _j1
+_jn
+jn == _jn
+_ld_int
+_ldclass
+_ldexp
+_ldlog
+_ldpcomp
+_ldpoly
+_ldscale
+_ldsign
+_ldsin
+_ldtest
+_ldunscale
+#ifdef DEF_I386
+_libm_sse2_acos_precise
+_libm_sse2_asin_precise
+_libm_sse2_atan_precise
+_libm_sse2_cos_precise
+_libm_sse2_exp_precise
+_libm_sse2_log10_precise
+_libm_sse2_log_precise
+_libm_sse2_pow_precise
+_libm_sse2_sin_precise
+_libm_sse2_sqrt_precise
+_libm_sse2_tan_precise
+#endif
+_logb
+F_NON_I386(_logbf)
+_nextafter
+F_X64(_nextafterf)
+_scalb
+F_X64(_scalbf)
+F64(_set_FMA3_enable)
+F_I386(_set_SSE2_enable)
+_y0
+y0 == _y0
+_y1
+y1 == _y1
+_yn
+yn == _yn
+acos
+F_NON_I386(acosf)
+F_ARM_ANY(acosl == acos)
+acosh
+acoshf
+acoshl F_X86_ANY(DATA)
+asin
+F_NON_I386(asinf)
+F_ARM_ANY(asinl == asin)
+asinh
+asinhf
+asinhl F_X86_ANY(DATA)
+atan
+atan2
+F_NON_I386(atan2f)
+F_ARM_ANY(atan2l == atan2)
+F_NON_I386(atanf)
+F_ARM_ANY(atanl == atan)
+atanh
+atanhf
+atanhl F_X86_ANY(DATA)
+cabs
+cabsf
+cabsl
+cacos
+cacosf
+cacosh
+cacoshf
+cacoshl
+cacosl
+carg
+cargf
+cargl
+casin
+casinf
+casinh
+casinhf
+casinhl
+casinl
+catan
+catanf
+catanh
+catanhf
+catanhl
+catanl
+cbrt
+cbrtf
+cbrtl F_X86_ANY(DATA)
+ccos
+ccosf
+ccosh
+ccoshf
+ccoshl
+ccosl
+ceil
+F_NON_I386(ceilf)
+F_ARM_ANY(ceill == ceil)
+cexp
+cexpf
+cexpl
+cimag
+cimagf
+cimagl
+clog
+clog10
+clog10f
+clog10l
+clogf
+clogl
+conj
+conjf
+conjl
+copysign
+copysignf
+copysignl F_X86_ANY(DATA)
+cos
+F_NON_I386(cosf)
+F_ARM_ANY(cosl == cos)
+cosh
+F_NON_I386(coshf)
+cpow
+cpowf
+cpowl
+cproj
+cprojf
+cprojl
+creal
+crealf
+creall
+csin
+csinf
+csinh
+csinhf
+csinhl
+csinl
+csqrt
+csqrtf
+csqrtl
+ctan
+ctanf
+ctanh
+ctanhf
+ctanhl
+ctanl
+erf
+erfc
+erfcf
+erfcl F_X86_ANY(DATA)
+erff
+erfl F_X86_ANY(DATA)
+exp
+exp2
+exp2f
+exp2l F_X86_ANY(DATA)
+F_NON_I386(expf)
+F_ARM_ANY(expl == exp)
+expm1
+expm1f
+expm1l F_X86_ANY(DATA)
+fabs
+F_ARM_ANY(fabsf)
+fdim
+fdimf
+fdiml F_X86_ANY(DATA)
+floor
+F_NON_I386(floorf)
+F_ARM_ANY(floorl == floor)
+fma
+fmaf
+fmal F_X86_ANY(DATA)
+fmax
+fmaxf
+fmaxl F_X86_ANY(DATA)
+fmin
+fminf
+fminl F_X86_ANY(DATA)
+fmod
+F_NON_I386(fmodf)
+F_ARM_ANY(fmodl == fmod)
+frexp
+hypot
+ilogb
+ilogbf
+ilogbl F_X86_ANY(DATA)
+ldexp
+; The UCRT lgamma functions don't set/provide the signgam variable like
+; the mingw ones do. Therefore prefer the libmingwex version instead.
+lgamma DATA
+lgammaf DATA
+lgammal DATA
+llrint
+llrintf
+llrintl F_X86_ANY(DATA)
+llround
+llroundf
+llroundl F_X86_ANY(DATA)
+log
+log10
+F_NON_I386(log10f)
+F_ARM_ANY(log10l == log10)
+log1p
+log1pf
+log1pl F_X86_ANY(DATA)
+log2
+log2f
+log2l F_X86_ANY(DATA)
+logb
+logbf
+logbl F_X86_ANY(DATA)
+F_NON_I386(logf)
+F_ARM_ANY(logl == log)
+lrint
+lrintf
+lrintl F_X86_ANY(DATA)
+lround
+lroundf
+lroundl F_X86_ANY(DATA)
+modf
+F_NON_I386(modff)
+nan
+nanf
+nanl F_X86_ANY(DATA)
+nearbyint
+nearbyintf
+nearbyintl F_X86_ANY(DATA)
+nextafter
+nextafterf
+nextafterl F_X86_ANY(DATA)
+; All of the nexttoward functions take the second parameter as long doubke,
+; making them unusable for x86.
+nexttoward F_X86_ANY(DATA)
+nexttowardf F_X86_ANY(DATA)
+nexttowardl F_X86_ANY(DATA)
+norm
+normf
+norml
+pow
+F_NON_I386(powf)
+F_ARM_ANY(powl == pow)
+remainder
+remainderf
+remainderl F_X86_ANY(DATA)
+remquo
+remquof
+remquol F_X86_ANY(DATA)
+rint
+rintf
+rintl F_X86_ANY(DATA)
+round
+roundf
+roundl F_X86_ANY(DATA)
+scalbln
+scalblnf
+scalblnl F_X86_ANY(DATA)
+scalbn
+scalbnf
+scalbnl F_X86_ANY(DATA)
+sin
+F_NON_I386(sinf)
+F_ARM_ANY(sinl == sin)
+; if we implement sinh, we can set it DATA only.
+sinh
+F_NON_I386(sinhf)
+sqrt
+F_NON_I386(sqrtf)
+tan
+F_NON_I386(tanf)
+F_ARM_ANY(tanl == tan)
+; if we implement tanh, we can set it to DATA only.
+tanh
+F_NON_I386(tanhf)
+tgamma
+tgammaf
+tgammal F_X86_ANY(DATA)
+trunc
+truncf
+truncl F_X86_ANY(DATA)
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-multibyte-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-multibyte-l1-1-0.def
new file mode 100644
index 0000000000..86d22500ba
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-multibyte-l1-1-0.def
@@ -0,0 +1,205 @@
+LIBRARY api-ms-win-crt-multibyte-l1-1-0
+
+EXPORTS
+
+__p__mbcasemap
+__p__mbctype
+_ismbbalnum
+_ismbbalnum_l
+_ismbbalpha
+_ismbbalpha_l
+_ismbbblank
+_ismbbblank_l
+_ismbbgraph
+_ismbbgraph_l
+_ismbbkalnum
+_ismbbkalnum_l
+_ismbbkana
+_ismbbkana_l
+_ismbbkprint
+_ismbbkprint_l
+_ismbbkpunct
+_ismbbkpunct_l
+_ismbblead
+_ismbblead_l
+_ismbbprint
+_ismbbprint_l
+_ismbbpunct
+_ismbbpunct_l
+_ismbbtrail
+_ismbbtrail_l
+_ismbcalnum
+_ismbcalnum_l
+_ismbcalpha
+_ismbcalpha_l
+_ismbcblank
+_ismbcblank_l
+_ismbcdigit
+_ismbcdigit_l
+_ismbcgraph
+_ismbcgraph_l
+_ismbchira
+_ismbchira_l
+_ismbckata
+_ismbckata_l
+_ismbcl0
+_ismbcl0_l
+_ismbcl1
+_ismbcl1_l
+_ismbcl2
+_ismbcl2_l
+_ismbclegal
+_ismbclegal_l
+_ismbclower
+_ismbclower_l
+_ismbcprint
+_ismbcprint_l
+_ismbcpunct
+_ismbcpunct_l
+_ismbcspace
+_ismbcspace_l
+_ismbcsymbol
+_ismbcsymbol_l
+_ismbcupper
+_ismbcupper_l
+_ismbslead
+_ismbslead_l
+_ismbstrail
+_ismbstrail_l
+_mbbtombc
+_mbbtombc_l
+_mbbtype
+_mbbtype_l
+; DATA added manually
+_mbcasemap DATA
+_mbccpy
+_mbccpy_l
+_mbccpy_s
+_mbccpy_s_l
+_mbcjistojms
+_mbcjistojms_l
+_mbcjmstojis
+_mbcjmstojis_l
+_mbclen
+_mbclen_l
+_mbctohira
+_mbctohira_l
+_mbctokata
+_mbctokata_l
+_mbctolower
+_mbctolower_l
+_mbctombb
+_mbctombb_l
+_mbctoupper
+_mbctoupper_l
+_mblen_l
+_mbsbtype
+_mbsbtype_l
+_mbscat_s
+_mbscat_s_l
+_mbschr
+_mbschr_l
+_mbscmp
+_mbscmp_l
+_mbscoll
+_mbscoll_l
+_mbscpy_s
+_mbscpy_s_l
+_mbscspn
+_mbscspn_l
+_mbsdec
+_mbsdec_l
+_mbsdup
+_mbsicmp
+_mbsicmp_l
+_mbsicoll
+_mbsicoll_l
+_mbsinc
+_mbsinc_l
+_mbslen
+_mbslen_l
+_mbslwr
+_mbslwr_l
+_mbslwr_s
+_mbslwr_s_l
+_mbsnbcat
+_mbsnbcat_l
+_mbsnbcat_s
+_mbsnbcat_s_l
+_mbsnbcmp
+_mbsnbcmp_l
+_mbsnbcnt
+_mbsnbcnt_l
+_mbsnbcoll
+_mbsnbcoll_l
+_mbsnbcpy
+_mbsnbcpy_l
+_mbsnbcpy_s
+_mbsnbcpy_s_l
+_mbsnbicmp
+_mbsnbicmp_l
+_mbsnbicoll
+_mbsnbicoll_l
+_mbsnbset
+_mbsnbset_l
+_mbsnbset_s
+_mbsnbset_s_l
+_mbsncat
+_mbsncat_l
+_mbsncat_s
+_mbsncat_s_l
+_mbsnccnt
+_mbsnccnt_l
+_mbsncmp
+_mbsncmp_l
+_mbsncoll
+_mbsncoll_l
+_mbsncpy
+_mbsncpy_l
+_mbsncpy_s
+_mbsncpy_s_l
+_mbsnextc
+_mbsnextc_l
+_mbsnicmp
+_mbsnicmp_l
+_mbsnicoll
+_mbsnicoll_l
+_mbsninc
+_mbsninc_l
+_mbsnlen
+_mbsnlen_l
+_mbsnset
+_mbsnset_l
+_mbsnset_s
+_mbsnset_s_l
+_mbspbrk
+_mbspbrk_l
+_mbsrchr
+_mbsrchr_l
+_mbsrev
+_mbsrev_l
+_mbsset
+_mbsset_l
+_mbsset_s
+_mbsset_s_l
+_mbsspn
+_mbsspn_l
+_mbsspnp
+_mbsspnp_l
+_mbsstr
+_mbsstr_l
+_mbstok
+_mbstok_l
+_mbstok_s
+_mbstok_s_l
+_mbstowcs_l
+_mbstowcs_s_l
+_mbstrlen
+_mbstrlen_l
+_mbstrnlen
+_mbstrnlen_l
+_mbsupr
+_mbsupr_l
+_mbsupr_s
+_mbsupr_s_l
+_mbtowc_l
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-private-l1-1-0.def.in b/lib/libc/mingw/lib-common/api-ms-win-crt-private-l1-1-0.def.in
new file mode 100644
index 0000000000..669638b905
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-private-l1-1-0.def.in
@@ -0,0 +1,1174 @@
+LIBRARY api-ms-win-crt-private-l1-1-0
+
+EXPORTS
+
+#include "func.def.in"
+
+_CreateFrameInfo
+F_I386(_CxxThrowException@8)
+F_NON_I386(_CxxThrowException)
+F_I386(_EH_prolog)
+_FindAndUnlinkFrame
+_GetImageBase
+_GetThrowImageBase
+_IsExceptionObjectToBeDestroyed
+_NLG_Dispatch2
+_NLG_Return
+_NLG_Return2
+_SetImageBase
+_SetThrowImageBase
+_SetWinRTOutOfMemoryExceptionCallback
+__AdjustPointer
+__BuildCatchObject
+__BuildCatchObjectHelper
+F_NON_I386(__C_specific_handler)
+__CxxDetectRethrow
+__CxxExceptionFilter
+__CxxFrameHandler
+__CxxFrameHandler2
+__CxxFrameHandler3
+F_I386(__CxxLongjmpUnwind@4)
+__CxxQueryExceptionSize
+__CxxRegisterExceptionObject
+__CxxUnregisterExceptionObject
+__DestructExceptionObject
+__FrameUnwindFilter
+__GetPlatformExceptionInfo
+__NLG_Dispatch2
+__NLG_Return2
+__RTCastToVoid
+__RTDynamicCast
+__RTtypeid
+__TypeMatch
+__current_exception
+__current_exception_context
+__dcrt_get_wide_environment_from_os
+__dcrt_initial_narrow_environment
+__intrinsic_abnormal_termination
+__intrinsic_setjmp
+F64(__intrinsic_setjmpex)
+__processing_throw
+__report_gsfailure
+__std_exception_copy
+__std_exception_destroy
+__std_type_info_compare
+__std_type_info_destroy_list
+__std_type_info_hash
+__std_type_info_name
+__unDName
+__unDNameEx
+__uncaught_exception
+F_I386(_chkesp)
+F_I386(_except_handler2)
+F_I386(_except_handler3)
+F_I386(_except_handler4_common)
+_get_purecall_handler
+_get_unexpected
+F_I386(_global_unwind2)
+_is_exception_typeof
+F_X64(_local_unwind)
+F_I386(_local_unwind2)
+F_I386(_local_unwind4)
+F_I386(_longjmpex)
+_o__CIacos
+_o__CIasin
+_o__CIatan
+_o__CIatan2
+_o__CIcos
+_o__CIcosh
+_o__CIexp
+_o__CIfmod
+_o__CIlog
+_o__CIlog10
+_o__CIpow
+_o__CIsin
+_o__CIsinh
+_o__CIsqrt
+_o__CItan
+_o__CItanh
+_o__Getdays
+_o__Getmonths
+_o__Gettnames
+_o__Strftime
+_o__W_Getdays
+_o__W_Getmonths
+_o__W_Gettnames
+_o__Wcsftime
+_o___acrt_iob_func
+_o___conio_common_vcprintf
+_o___conio_common_vcprintf_p
+_o___conio_common_vcprintf_s
+_o___conio_common_vcscanf
+_o___conio_common_vcwprintf
+_o___conio_common_vcwprintf_p
+_o___conio_common_vcwprintf_s
+_o___conio_common_vcwscanf
+_o___daylight
+_o___dstbias
+_o___fpe_flt_rounds
+_o___libm_sse2_acos
+_o___libm_sse2_acosf
+_o___libm_sse2_asin
+_o___libm_sse2_asinf
+_o___libm_sse2_atan
+_o___libm_sse2_atan2
+_o___libm_sse2_atanf
+_o___libm_sse2_cos
+_o___libm_sse2_cosf
+_o___libm_sse2_exp
+_o___libm_sse2_expf
+_o___libm_sse2_log
+_o___libm_sse2_log10
+_o___libm_sse2_log10f
+_o___libm_sse2_logf
+_o___libm_sse2_pow
+_o___libm_sse2_powf
+_o___libm_sse2_sin
+_o___libm_sse2_sinf
+_o___libm_sse2_tan
+_o___libm_sse2_tanf
+_o___p___argc
+_o___p___argv
+_o___p___wargv
+_o___p__acmdln
+_o___p__commode
+_o___p__environ
+_o___p__fmode
+_o___p__mbcasemap
+_o___p__mbctype
+_o___p__pgmptr
+_o___p__wcmdln
+_o___p__wenviron
+_o___p__wpgmptr
+_o___pctype_func
+_o___pwctype_func
+_o___stdio_common_vfprintf
+_o___stdio_common_vfprintf_p
+_o___stdio_common_vfprintf_s
+_o___stdio_common_vfscanf
+_o___stdio_common_vfwprintf
+_o___stdio_common_vfwprintf_p
+_o___stdio_common_vfwprintf_s
+_o___stdio_common_vfwscanf
+_o___stdio_common_vsnprintf_s
+_o___stdio_common_vsnwprintf_s
+_o___stdio_common_vsprintf
+_o___stdio_common_vsprintf_p
+_o___stdio_common_vsprintf_s
+_o___stdio_common_vsscanf
+_o___stdio_common_vswprintf
+_o___stdio_common_vswprintf_p
+_o___stdio_common_vswprintf_s
+_o___stdio_common_vswscanf
+_o___timezone
+_o___tzname
+_o___wcserror
+_o__access
+_o__access_s
+_o__aligned_free
+_o__aligned_malloc
+_o__aligned_msize
+_o__aligned_offset_malloc
+_o__aligned_offset_realloc
+_o__aligned_offset_recalloc
+_o__aligned_realloc
+_o__aligned_recalloc
+_o__atodbl
+_o__atodbl_l
+_o__atof_l
+_o__atoflt
+_o__atoflt_l
+_o__atoi64
+_o__atoi64_l
+_o__atoi_l
+_o__atol_l
+_o__atoldbl
+_o__atoldbl_l
+_o__atoll_l
+_o__beep
+_o__beginthread
+_o__beginthreadex
+_o__cabs
+_o__callnewh
+_o__calloc_base
+_o__cgets
+_o__cgets_s
+_o__cgetws
+_o__cgetws_s
+_o__chdir
+_o__chdrive
+_o__chmod
+_o__chsize
+_o__chsize_s
+_o__close
+_o__commit
+_o__configure_wide_argv
+_o__cputs
+_o__cputws
+_o__creat
+_o__create_locale
+_o__ctime32_s
+_o__ctime64_s
+_o__cwait
+_o__d_int
+_o__dclass
+_o__difftime32
+_o__difftime64
+_o__dlog
+_o__dnorm
+_o__dpcomp
+_o__dpoly
+_o__dscale
+_o__dsign
+_o__dsin
+_o__dtest
+_o__dunscale
+_o__dup
+_o__dup2
+_o__dupenv_s
+_o__ecvt
+_o__ecvt_s
+_o__endthread
+_o__endthreadex
+_o__eof
+_o__errno
+_o__except1
+_o__execute_onexit_table
+_o__execv
+_o__execve
+_o__execvp
+_o__execvpe
+_o__expand
+_o__fclose_nolock
+_o__fcloseall
+_o__fcvt
+_o__fcvt_s
+_o__fd_int
+_o__fdclass
+_o__fdexp
+_o__fdlog
+_o__fdopen
+_o__fdpcomp
+_o__fdpoly
+_o__fdscale
+_o__fdsign
+_o__fdsin
+_o__fflush_nolock
+_o__fgetc_nolock
+_o__fgetchar
+_o__fgetwc_nolock
+_o__fgetwchar
+_o__filelength
+_o__filelengthi64
+_o__fileno
+_o__findclose
+_o__findfirst32
+_o__findfirst32i64
+_o__findfirst64
+_o__findfirst64i32
+_o__findnext32
+_o__findnext32i64
+_o__findnext64
+_o__findnext64i32
+_o__flushall
+_o__fpclass
+_o__fpclassf
+_o__fputc_nolock
+_o__fputchar
+_o__fputwc_nolock
+_o__fputwchar
+_o__fread_nolock
+_o__fread_nolock_s
+_o__free_base
+_o__free_locale
+_o__fseek_nolock
+_o__fseeki64
+_o__fseeki64_nolock
+_o__fsopen
+_o__fstat32
+_o__fstat32i64
+_o__fstat64
+_o__fstat64i32
+_o__ftell_nolock
+_o__ftelli64
+_o__ftelli64_nolock
+_o__ftime32
+_o__ftime32_s
+_o__ftime64
+_o__ftime64_s
+_o__fullpath
+_o__futime32
+_o__futime64
+_o__fwrite_nolock
+_o__gcvt
+_o__gcvt_s
+_o__get_daylight
+_o__get_doserrno
+_o__get_dstbias
+_o__get_errno
+_o__get_fmode
+_o__get_heap_handle
+_o__get_invalid_parameter_handler
+_o__get_narrow_winmain_command_line
+_o__get_osfhandle
+_o__get_pgmptr
+_o__get_stream_buffer_pointers
+_o__get_terminate
+_o__get_thread_local_invalid_parameter_handler
+_o__get_timezone
+_o__get_tzname
+_o__get_wide_winmain_command_line
+_o__get_wpgmptr
+_o__getc_nolock
+_o__getch
+_o__getch_nolock
+_o__getche
+_o__getche_nolock
+_o__getcwd
+_o__getdcwd
+_o__getdiskfree
+_o__getdllprocaddr
+_o__getdrive
+_o__getdrives
+_o__getmbcp
+_o__getsystime
+_o__getw
+_o__getwc_nolock
+_o__getwch
+_o__getwch_nolock
+_o__getwche
+_o__getwche_nolock
+_o__getws
+_o__getws_s
+_o__gmtime32
+_o__gmtime32_s
+_o__gmtime64
+_o__gmtime64_s
+_o__heapchk
+_o__heapmin
+_o__hypot
+_o__hypotf
+_o__i64toa
+_o__i64toa_s
+_o__i64tow
+_o__i64tow_s
+_o__initialize_onexit_table
+_o__invalid_parameter_noinfo
+_o__invalid_parameter_noinfo_noreturn
+_o__isatty
+_o__isctype
+_o__isctype_l
+_o__isleadbyte_l
+_o__ismbbalnum
+_o__ismbbalnum_l
+_o__ismbbalpha
+_o__ismbbalpha_l
+_o__ismbbblank
+_o__ismbbblank_l
+_o__ismbbgraph
+_o__ismbbgraph_l
+_o__ismbbkalnum
+_o__ismbbkalnum_l
+_o__ismbbkana
+_o__ismbbkana_l
+_o__ismbbkprint
+_o__ismbbkprint_l
+_o__ismbbkpunct
+_o__ismbbkpunct_l
+_o__ismbblead
+_o__ismbblead_l
+_o__ismbbprint
+_o__ismbbprint_l
+_o__ismbbpunct
+_o__ismbbpunct_l
+_o__ismbbtrail
+_o__ismbbtrail_l
+_o__ismbcalnum
+_o__ismbcalnum_l
+_o__ismbcalpha
+_o__ismbcalpha_l
+_o__ismbcblank
+_o__ismbcblank_l
+_o__ismbcdigit
+_o__ismbcdigit_l
+_o__ismbcgraph
+_o__ismbcgraph_l
+_o__ismbchira
+_o__ismbchira_l
+_o__ismbckata
+_o__ismbckata_l
+_o__ismbcl0
+_o__ismbcl0_l
+_o__ismbcl1
+_o__ismbcl1_l
+_o__ismbcl2
+_o__ismbcl2_l
+_o__ismbclegal
+_o__ismbclegal_l
+_o__ismbclower
+_o__ismbclower_l
+_o__ismbcprint
+_o__ismbcprint_l
+_o__ismbcpunct
+_o__ismbcpunct_l
+_o__ismbcspace
+_o__ismbcspace_l
+_o__ismbcsymbol
+_o__ismbcsymbol_l
+_o__ismbcupper
+_o__ismbcupper_l
+_o__ismbslead
+_o__ismbslead_l
+_o__ismbstrail
+_o__ismbstrail_l
+_o__iswctype_l
+_o__itoa
+_o__itoa_s
+_o__itow
+_o__itow_s
+_o__j0
+_o__j1
+_o__jn
+_o__kbhit
+_o__ld_int
+_o__ldclass
+_o__ldexp
+_o__ldlog
+_o__ldpcomp
+_o__ldpoly
+_o__ldscale
+_o__ldsign
+_o__ldsin
+_o__ldtest
+_o__ldunscale
+_o__lfind
+_o__lfind_s
+_o__libm_sse2_acos_precise
+_o__libm_sse2_asin_precise
+_o__libm_sse2_atan_precise
+_o__libm_sse2_cos_precise
+_o__libm_sse2_exp_precise
+_o__libm_sse2_log10_precise
+_o__libm_sse2_log_precise
+_o__libm_sse2_pow_precise
+_o__libm_sse2_sin_precise
+_o__libm_sse2_sqrt_precise
+_o__libm_sse2_tan_precise
+_o__loaddll
+_o__localtime32
+_o__localtime32_s
+_o__localtime64
+_o__localtime64_s
+_o__lock_file
+_o__locking
+_o__logb
+_o__logbf
+_o__lsearch
+_o__lsearch_s
+_o__lseek
+_o__lseeki64
+_o__ltoa
+_o__ltoa_s
+_o__ltow
+_o__ltow_s
+_o__makepath
+_o__makepath_s
+_o__malloc_base
+_o__mbbtombc
+_o__mbbtombc_l
+_o__mbbtype
+_o__mbbtype_l
+_o__mbccpy
+_o__mbccpy_l
+_o__mbccpy_s
+_o__mbccpy_s_l
+_o__mbcjistojms
+_o__mbcjistojms_l
+_o__mbcjmstojis
+_o__mbcjmstojis_l
+_o__mbclen
+_o__mbclen_l
+_o__mbctohira
+_o__mbctohira_l
+_o__mbctokata
+_o__mbctokata_l
+_o__mbctolower
+_o__mbctolower_l
+_o__mbctombb
+_o__mbctombb_l
+_o__mbctoupper
+_o__mbctoupper_l
+_o__mblen_l
+_o__mbsbtype
+_o__mbsbtype_l
+_o__mbscat_s
+_o__mbscat_s_l
+_o__mbschr
+_o__mbschr_l
+_o__mbscmp
+_o__mbscmp_l
+_o__mbscoll
+_o__mbscoll_l
+_o__mbscpy_s
+_o__mbscpy_s_l
+_o__mbscspn
+_o__mbscspn_l
+_o__mbsdec
+_o__mbsdec_l
+_o__mbsicmp
+_o__mbsicmp_l
+_o__mbsicoll
+_o__mbsicoll_l
+_o__mbsinc
+_o__mbsinc_l
+_o__mbslen
+_o__mbslen_l
+_o__mbslwr
+_o__mbslwr_l
+_o__mbslwr_s
+_o__mbslwr_s_l
+_o__mbsnbcat
+_o__mbsnbcat_l
+_o__mbsnbcat_s
+_o__mbsnbcat_s_l
+_o__mbsnbcmp
+_o__mbsnbcmp_l
+_o__mbsnbcnt
+_o__mbsnbcnt_l
+_o__mbsnbcoll
+_o__mbsnbcoll_l
+_o__mbsnbcpy
+_o__mbsnbcpy_l
+_o__mbsnbcpy_s
+_o__mbsnbcpy_s_l
+_o__mbsnbicmp
+_o__mbsnbicmp_l
+_o__mbsnbicoll
+_o__mbsnbicoll_l
+_o__mbsnbset
+_o__mbsnbset_l
+_o__mbsnbset_s
+_o__mbsnbset_s_l
+_o__mbsncat
+_o__mbsncat_l
+_o__mbsncat_s
+_o__mbsncat_s_l
+_o__mbsnccnt
+_o__mbsnccnt_l
+_o__mbsncmp
+_o__mbsncmp_l
+_o__mbsncoll
+_o__mbsncoll_l
+_o__mbsncpy
+_o__mbsncpy_l
+_o__mbsncpy_s
+_o__mbsncpy_s_l
+_o__mbsnextc
+_o__mbsnextc_l
+_o__mbsnicmp
+_o__mbsnicmp_l
+_o__mbsnicoll
+_o__mbsnicoll_l
+_o__mbsninc
+_o__mbsninc_l
+_o__mbsnlen
+_o__mbsnlen_l
+_o__mbsnset
+_o__mbsnset_l
+_o__mbsnset_s
+_o__mbsnset_s_l
+_o__mbspbrk
+_o__mbspbrk_l
+_o__mbsrchr
+_o__mbsrchr_l
+_o__mbsrev
+_o__mbsrev_l
+_o__mbsset
+_o__mbsset_l
+_o__mbsset_s
+_o__mbsset_s_l
+_o__mbsspn
+_o__mbsspn_l
+_o__mbsspnp
+_o__mbsspnp_l
+_o__mbsstr
+_o__mbsstr_l
+_o__mbstok
+_o__mbstok_l
+_o__mbstok_s
+_o__mbstok_s_l
+_o__mbstowcs_l
+_o__mbstowcs_s_l
+_o__mbstrlen
+_o__mbstrlen_l
+_o__mbstrnlen
+_o__mbstrnlen_l
+_o__mbsupr
+_o__mbsupr_l
+_o__mbsupr_s
+_o__mbsupr_s_l
+_o__mbtowc_l
+_o__memicmp
+_o__memicmp_l
+_o__mkdir
+_o__mkgmtime32
+_o__mkgmtime64
+_o__mktemp
+_o__mktemp_s
+_o__mktime32
+_o__mktime64
+_o__msize
+_o__nextafter
+_o__nextafterf
+_o__open_osfhandle
+_o__pclose
+_o__pipe
+_o__popen
+_o__putc_nolock
+_o__putch
+_o__putch_nolock
+_o__putenv
+_o__putenv_s
+_o__putw
+_o__putwc_nolock
+_o__putwch
+_o__putwch_nolock
+_o__putws
+_o__read
+_o__realloc_base
+_o__recalloc
+_o__register_onexit_function
+_o__resetstkoflw
+_o__rmdir
+_o__rmtmp
+_o__scalb
+_o__scalbf
+_o__searchenv
+_o__searchenv_s
+_o__set_abort_behavior
+_o__set_doserrno
+_o__set_errno
+_o__set_invalid_parameter_handler
+_o__set_new_handler
+_o__set_new_mode
+_o__set_thread_local_invalid_parameter_handler
+_o__seterrormode
+_o__setmbcp
+_o__setmode
+_o__setsystime
+_o__sleep
+_o__sopen
+_o__sopen_dispatch
+_o__sopen_s
+_o__spawnv
+_o__spawnve
+_o__spawnvp
+_o__spawnvpe
+_o__splitpath
+_o__splitpath_s
+_o__stat32
+_o__stat32i64
+_o__stat64
+_o__stat64i32
+_o__strcoll_l
+_o__strdate
+_o__strdate_s
+_o__strdup
+_o__strerror
+_o__strerror_s
+_o__strftime_l
+_o__stricmp
+_o__stricmp_l
+_o__stricoll
+_o__stricoll_l
+_o__strlwr
+_o__strlwr_l
+_o__strlwr_s
+_o__strlwr_s_l
+_o__strncoll
+_o__strncoll_l
+_o__strnicmp
+_o__strnicmp_l
+_o__strnicoll
+_o__strnicoll_l
+_o__strnset_s
+_o__strset_s
+_o__strtime
+_o__strtime_s
+_o__strtod_l
+_o__strtof_l
+_o__strtoi64
+_o__strtoi64_l
+_o__strtol_l
+_o__strtold_l
+_o__strtoll_l
+_o__strtoui64
+_o__strtoui64_l
+_o__strtoul_l
+_o__strtoull_l
+_o__strupr
+_o__strupr_l
+_o__strupr_s
+_o__strupr_s_l
+_o__strxfrm_l
+_o__swab
+_o__tell
+_o__telli64
+_o__timespec32_get
+_o__timespec64_get
+_o__tolower
+_o__tolower_l
+_o__toupper
+_o__toupper_l
+_o__towlower_l
+_o__towupper_l
+_o__tzset
+_o__ui64toa
+_o__ui64toa_s
+_o__ui64tow
+_o__ui64tow_s
+_o__ultoa
+_o__ultoa_s
+_o__ultow
+_o__ultow_s
+_o__umask
+_o__umask_s
+_o__ungetc_nolock
+_o__ungetch
+_o__ungetch_nolock
+_o__ungetwc_nolock
+_o__ungetwch
+_o__ungetwch_nolock
+_o__unlink
+_o__unloaddll
+_o__unlock_file
+_o__utime32
+_o__utime64
+_o__waccess
+_o__waccess_s
+_o__wasctime
+_o__wasctime_s
+_o__wchdir
+_o__wchmod
+_o__wcreat
+_o__wcreate_locale
+_o__wcscoll_l
+_o__wcsdup
+_o__wcserror
+_o__wcserror_s
+_o__wcsftime_l
+_o__wcsicmp
+_o__wcsicmp_l
+_o__wcsicoll
+_o__wcsicoll_l
+_o__wcslwr
+_o__wcslwr_l
+_o__wcslwr_s
+_o__wcslwr_s_l
+_o__wcsncoll
+_o__wcsncoll_l
+_o__wcsnicmp
+_o__wcsnicmp_l
+_o__wcsnicoll
+_o__wcsnicoll_l
+_o__wcsnset
+_o__wcsnset_s
+_o__wcsset
+_o__wcsset_s
+_o__wcstod_l
+_o__wcstof_l
+_o__wcstoi64
+_o__wcstoi64_l
+_o__wcstol_l
+_o__wcstold_l
+_o__wcstoll_l
+_o__wcstombs_l
+_o__wcstombs_s_l
+_o__wcstoui64
+_o__wcstoui64_l
+_o__wcstoul_l
+_o__wcstoull_l
+_o__wcsupr
+_o__wcsupr_l
+_o__wcsupr_s
+_o__wcsupr_s_l
+_o__wcsxfrm_l
+_o__wctime32
+_o__wctime32_s
+_o__wctime64
+_o__wctime64_s
+_o__wctomb_l
+_o__wctomb_s_l
+_o__wdupenv_s
+_o__wexecv
+_o__wexecve
+_o__wexecvp
+_o__wexecvpe
+_o__wfdopen
+_o__wfindfirst32
+_o__wfindfirst32i64
+_o__wfindfirst64
+_o__wfindfirst64i32
+_o__wfindnext32
+_o__wfindnext32i64
+_o__wfindnext64
+_o__wfindnext64i32
+_o__wfopen
+_o__wfopen_s
+_o__wfreopen
+_o__wfreopen_s
+_o__wfsopen
+_o__wfullpath
+_o__wgetcwd
+_o__wgetdcwd
+_o__wgetenv
+_o__wgetenv_s
+_o__wmakepath
+_o__wmakepath_s
+_o__wmkdir
+_o__wmktemp
+_o__wmktemp_s
+_o__wperror
+_o__wpopen
+_o__wputenv
+_o__wputenv_s
+_o__wremove
+_o__wrename
+_o__write
+_o__wrmdir
+_o__wsearchenv
+_o__wsearchenv_s
+_o__wsetlocale
+_o__wsopen_dispatch
+_o__wsopen_s
+_o__wspawnv
+_o__wspawnve
+_o__wspawnvp
+_o__wspawnvpe
+_o__wsplitpath
+_o__wsplitpath_s
+_o__wstat32
+_o__wstat32i64
+_o__wstat64
+_o__wstat64i32
+_o__wstrdate
+_o__wstrdate_s
+_o__wstrtime
+_o__wstrtime_s
+_o__wsystem
+_o__wtmpnam_s
+_o__wtof
+_o__wtof_l
+_o__wtoi
+_o__wtoi64
+_o__wtoi64_l
+_o__wtoi_l
+_o__wtol
+_o__wtol_l
+_o__wtoll
+_o__wtoll_l
+_o__wunlink
+_o__wutime32
+_o__wutime64
+_o__y0
+_o__y1
+_o__yn
+_o_abort
+_o_acos
+_o_acosf
+_o_acosh
+_o_acoshf
+_o_acoshl
+_o_asctime
+_o_asctime_s
+_o_asin
+_o_asinf
+_o_asinh
+_o_asinhf
+_o_asinhl
+_o_atan
+_o_atan2
+_o_atan2f
+_o_atanf
+_o_atanh
+_o_atanhf
+_o_atanhl
+_o_atof
+_o_atoi
+_o_atol
+_o_atoll
+_o_bsearch
+_o_bsearch_s
+_o_btowc
+_o_calloc
+_o_cbrt
+_o_cbrtf
+_o_ceil
+_o_ceilf
+_o_clearerr
+_o_clearerr_s
+_o_cos
+_o_cosf
+_o_cosh
+_o_coshf
+_o_erf
+_o_erfc
+_o_erfcf
+_o_erfcl
+_o_erff
+_o_erfl
+_o_exp
+_o_exp2
+_o_exp2f
+_o_exp2l
+_o_expf
+_o_fabs
+_o_fclose
+_o_feof
+_o_ferror
+_o_fflush
+_o_fgetc
+_o_fgetpos
+_o_fgets
+_o_fgetwc
+_o_fgetws
+_o_floor
+_o_floorf
+_o_fma
+_o_fmaf
+_o_fmal
+_o_fmod
+_o_fmodf
+_o_fopen
+_o_fopen_s
+_o_fputc
+_o_fputs
+_o_fputwc
+_o_fputws
+_o_fread
+_o_fread_s
+_o_free
+_o_freopen
+_o_freopen_s
+_o_frexp
+_o_fseek
+_o_fsetpos
+_o_ftell
+_o_fwrite
+_o_getc
+_o_getchar
+_o_getenv
+_o_getenv_s
+_o_gets
+_o_gets_s
+_o_getwc
+_o_getwchar
+_o_hypot
+_o_is_wctype
+_o_isalnum
+_o_isalpha
+_o_isblank
+_o_iscntrl
+_o_isdigit
+_o_isgraph
+_o_isleadbyte
+_o_islower
+_o_isprint
+_o_ispunct
+_o_isspace
+_o_isupper
+_o_iswalnum
+_o_iswalpha
+_o_iswascii
+_o_iswblank
+_o_iswcntrl
+_o_iswctype
+_o_iswdigit
+_o_iswgraph
+_o_iswlower
+_o_iswprint
+_o_iswpunct
+_o_iswspace
+_o_iswupper
+_o_iswxdigit
+_o_isxdigit
+_o_ldexp
+_o_lgamma
+_o_lgammaf
+_o_lgammal
+_o_llrint
+_o_llrintf
+_o_llrintl
+_o_llround
+_o_llroundf
+_o_llroundl
+_o_localeconv
+_o_log
+_o_log10
+_o_log10f
+_o_log1p
+_o_log1pf
+_o_log1pl
+_o_log2
+_o_log2f
+_o_log2l
+_o_logb
+_o_logbf
+_o_logbl
+_o_logf
+_o_lrint
+_o_lrintf
+_o_lrintl
+_o_lround
+_o_lroundf
+_o_lroundl
+_o_malloc
+_o_mblen
+_o_mbrlen
+_o_mbrtoc16
+_o_mbrtoc32
+_o_mbrtowc
+_o_mbsrtowcs
+_o_mbsrtowcs_s
+_o_mbstowcs
+_o_mbstowcs_s
+_o_mbtowc
+_o_memset
+_o_modf
+_o_modff
+_o_nan
+_o_nanf
+_o_nanl
+_o_nearbyint
+_o_nearbyintf
+_o_nearbyintl
+_o_nextafter
+_o_nextafterf
+_o_nextafterl
+_o_nexttoward
+_o_nexttowardf
+_o_nexttowardl
+_o_pow
+_o_powf
+_o_putc
+_o_putchar
+_o_puts
+_o_putwc
+_o_putwchar
+_o_qsort
+_o_qsort_s
+_o_raise
+_o_rand
+_o_rand_s
+_o_realloc
+_o_remainder
+_o_remainderf
+_o_remainderl
+_o_remove
+_o_remquo
+_o_remquof
+_o_remquol
+_o_rewind
+_o_rint
+_o_rintf
+_o_rintl
+_o_round
+_o_roundf
+_o_roundl
+_o_scalbln
+_o_scalblnf
+_o_scalblnl
+_o_scalbn
+_o_scalbnf
+_o_scalbnl
+_o_set_terminate
+_o_setbuf
+_o_setvbuf
+_o_sin
+_o_sinf
+_o_sinh
+_o_sinhf
+_o_sqrt
+_o_sqrtf
+_o_srand
+_o_strcat_s
+_o_strcoll
+_o_strcpy_s
+_o_strerror
+_o_strerror_s
+_o_strftime
+_o_strncat_s
+_o_strncpy_s
+_o_strtod
+_o_strtof
+_o_strtok
+_o_strtok_s
+_o_strtol
+_o_strtold
+_o_strtoll
+_o_strtoul
+_o_strtoull
+_o_system
+_o_tan
+_o_tanf
+_o_tanh
+_o_tanhf
+_o_terminate
+_o_tgamma
+_o_tgammaf
+_o_tgammal
+_o_tmpfile_s
+_o_tmpnam_s
+_o_tolower
+_o_toupper
+_o_towlower
+_o_towupper
+_o_ungetc
+_o_ungetwc
+_o_wcrtomb
+_o_wcrtomb_s
+_o_wcscat_s
+_o_wcscoll
+_o_wcscpy
+_o_wcscpy_s
+_o_wcsftime
+_o_wcsncat_s
+_o_wcsncpy_s
+_o_wcsrtombs
+_o_wcsrtombs_s
+_o_wcstod
+_o_wcstof
+_o_wcstok
+_o_wcstok_s
+_o_wcstol
+_o_wcstold
+_o_wcstoll
+_o_wcstombs
+_o_wcstombs_s
+_o_wcstoul
+_o_wcstoull
+_o_wctob
+_o_wctomb
+_o_wctomb_s
+_o_wmemcpy_s
+_o_wmemmove_s
+_purecall
+F_I386(_seh_longjmp_unwind@4)
+F_I386(_seh_longjmp_unwind4@4)
+_set_purecall_handler
+_set_se_translator
+F_I386(_setjmp3)
+longjmp
+memchr
+memcmp
+memcpy
+memmove
+set_unexpected
+F_X64(setjmp)
+strchr
+strrchr
+strstr
+unexpected
+wcschr
+wcsrchr
+wcsstr
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-process-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-process-l1-1-0.def
new file mode 100644
index 0000000000..dafa456a52
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-process-l1-1-0.def
@@ -0,0 +1,57 @@
+LIBRARY api-ms-win-crt-process-l1-1-0
+
+EXPORTS
+
+_beep
+_cwait
+cwait == _cwait
+_execl
+execl == _execl
+_execle
+execle == _execle
+_execlp
+execlp == _execlp
+_execlpe
+execlpe == _execlpe
+_execv
+execv == _execv
+_execve
+execve == _execve
+_execvp
+execvp == _execvp
+_execvpe
+execvpe == _execvpe
+_loaddll
+_spawnl
+spawnl == _spawnl
+_spawnle
+spawnle == _spawnle
+_spawnlp
+spawnlp == _spawnlp
+_spawnlpe
+spawnlpe == _spawnlpe
+_spawnv
+spawnv == _spawnv
+_spawnve
+spawnve == _spawnve
+_spawnvp
+spawnvp == _spawnvp
+_spawnvpe
+spawnvpe == _spawnvpe
+_unloaddll
+_wexecl
+_wexecle
+_wexeclp
+_wexeclpe
+_wexecv
+_wexecve
+_wexecvp
+_wexecvpe
+_wspawnl
+_wspawnle
+_wspawnlp
+_wspawnlpe
+_wspawnv
+_wspawnve
+_wspawnvp
+_wspawnvpe
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-runtime-l1-1-0.def.in b/lib/libc/mingw/lib-common/api-ms-win-crt-runtime-l1-1-0.def.in
new file mode 100644
index 0000000000..ea310d426f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-runtime-l1-1-0.def.in
@@ -0,0 +1,120 @@
+LIBRARY api-ms-win-crt-runtime-l1-1-0
+
+EXPORTS
+
+#include "func.def.in"
+
+_Exit
+F_I386(__control87_2)
+__doserrno
+__fpe_flt_rounds
+__fpecode
+__p___argc
+__p___argv
+__p___wargv
+__p__acmdln
+__p__pgmptr
+__p__wcmdln
+__p__wpgmptr
+__pxcptinfoptrs
+__sys_errlist
+__sys_nerr
+__threadhandle
+__threadid
+__wcserror
+__wcserror_s
+; DATA set manually
+_assert
+_beginthread
+_beginthreadex
+_c_exit
+_cexit
+_clearfp
+_configure_narrow_argv
+_configure_wide_argv
+_control87
+_controlfp
+_controlfp_s
+_crt_at_quick_exit
+_crt_atexit
+_crt_debugger_hook
+_endthread
+_endthreadex
+_errno
+_execute_onexit_table
+_exit
+F_NON_I386(_fpieee_flt)
+; DATA added manually
+_fpreset DATA
+_get_doserrno
+_get_errno
+_get_initial_narrow_environment
+_get_initial_wide_environment
+_get_invalid_parameter_handler
+_get_narrow_winmain_command_line
+_get_pgmptr
+_get_terminate
+_get_thread_local_invalid_parameter_handler
+_get_wide_winmain_command_line
+_get_wpgmptr
+_getdllprocaddr
+_getpid
+getpid == _getpid
+_initialize_narrow_environment
+_initialize_onexit_table
+_initialize_wide_environment
+_initterm
+_initterm_e
+_invalid_parameter_noinfo
+_invalid_parameter_noinfo_noreturn
+_invoke_watson
+_query_app_type
+_register_onexit_function
+_register_thread_local_exe_atexit_callback
+_resetstkoflw
+_seh_filter_dll
+_seh_filter_exe
+_set_abort_behavior
+_set_app_type
+__set_app_type == _set_app_type
+_set_controlfp
+_set_doserrno
+_set_errno
+_set_error_mode
+_set_invalid_parameter_handler
+_set_new_handler
+_set_thread_local_invalid_parameter_handler
+_seterrormode
+_sleep
+_statusfp
+F_I386(_statusfp2)
+_strerror
+_strerror_s
+_wassert
+_wcserror
+_wcserror_s
+_wperror
+_wsystem
+abort
+exit
+; Don't use the float env functions from UCRT; fesetround doesn't seem to have
+; any effect on the FPU control word as required by other libmingwex math
+; routines.
+feclearexcept DATA
+fegetenv DATA
+fegetexceptflag DATA
+fegetround DATA
+feholdexcept DATA
+fesetenv DATA
+fesetexceptflag DATA
+fesetround DATA
+fetestexcept DATA
+perror
+quick_exit
+raise
+set_terminate
+signal
+strerror
+strerror_s
+system
+terminate
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-stdio-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-stdio-l1-1-0.def
new file mode 100644
index 0000000000..cdfc2362b6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-stdio-l1-1-0.def
@@ -0,0 +1,194 @@
+LIBRARY api-ms-win-crt-stdio-l1-1-0
+
+EXPORTS
+
+__acrt_iob_func
+__p__commode
+__p__fmode
+__stdio_common_vfprintf
+__stdio_common_vfprintf_p
+__stdio_common_vfprintf_s
+__stdio_common_vfscanf
+__stdio_common_vfwprintf
+__stdio_common_vfwprintf_p
+__stdio_common_vfwprintf_s
+__stdio_common_vfwscanf
+__stdio_common_vsnprintf_s
+__stdio_common_vsnwprintf_s
+__stdio_common_vsprintf
+__stdio_common_vsprintf_p
+__stdio_common_vsprintf_s
+__stdio_common_vsscanf
+__stdio_common_vswprintf
+__stdio_common_vswprintf_p
+__stdio_common_vswprintf_s
+__stdio_common_vswscanf
+_chsize
+chsize == _chsize
+_chsize_s
+_close
+close == _close
+_commit
+_creat
+creat == _creat
+_dup
+dup == _dup
+_dup2
+dup2 == _dup2
+_eof
+eof == _eof
+_fclose_nolock
+_fcloseall
+fcloseall == _fcloseall
+_fflush_nolock
+_fgetc_nolock
+_fgetchar
+fgetchar == _fgetchar
+_fgetwc_nolock
+_fgetwchar
+fgetwchar == _fgetwchar
+_filelength
+filelength == _filelength
+_filelengthi64
+_fileno
+fileno == _fileno
+_flushall
+_fputc_nolock
+_fputchar
+fputchar == _fputchar
+_fputwc_nolock
+_fputwchar
+fputwchar == _fputwchar
+_fread_nolock
+_fread_nolock_s
+_fseek_nolock
+_fseeki64
+_fseeki64_nolock
+_fsopen
+_ftell_nolock
+_ftelli64
+_ftelli64_nolock
+_fwrite_nolock
+_get_fmode
+_get_osfhandle
+_get_printf_count_output
+_get_stream_buffer_pointers
+_getc_nolock
+_getcwd
+getcwd == _getcwd
+_getdcwd
+_getmaxstdio
+_getw
+getw == _getw
+_getwc_nolock
+_getws
+_getws_s
+_isatty
+isatty == _isatty
+_kbhit
+kbhit == _kbhit
+_locking
+_lseek
+lseek == _lseek
+_lseeki64
+_mktemp
+mktemp == _mktemp
+_mktemp_s
+_open
+open == _open
+_open_osfhandle
+_pclose
+pclose == _pclose
+_pipe
+_popen
+popen == _popen
+_putc_nolock
+_putw
+putw == _putw
+_putwc_nolock
+_putws
+_read
+read == _read
+_rmtmp
+rmtmp == _rmtmp
+_set_fmode
+_set_printf_count_output
+_setmaxstdio
+_setmode
+setmode == _setmode
+_sopen
+sopen == _sopen
+_sopen_dispatch
+_sopen_s
+_tell
+tell == _tell
+_telli64
+_tempnam
+tempnam == _tempnam
+_ungetc_nolock
+_ungetwc_nolock
+_wcreat
+_wfdopen
+_wfopen
+_wfopen_s
+_wfreopen
+_wfreopen_s
+_wfsopen
+_wmktemp
+_wmktemp_s
+_wopen
+_wpopen
+wpopen == _wpopen
+_write
+write == _write
+_wsopen
+_wsopen_dispatch
+_wsopen_s
+_wtempnam
+_wtmpnam
+_wtmpnam_s
+clearerr
+clearerr_s
+fclose
+feof
+ferror
+fflush
+fgetc
+fgetpos
+fgets
+fgetwc
+fgetws
+fopen
+fopen_s
+fputc
+fputs
+fputwc
+fputws
+fread
+fread_s
+freopen
+freopen_s
+fseek
+fsetpos
+ftell
+fwrite
+getc
+getchar
+gets
+gets_s
+getwc
+getwchar
+putc
+putchar
+puts
+putwc
+putwchar
+rewind
+setbuf
+setvbuf
+tmpfile
+tmpfile_s
+tmpnam
+tmpnam_s
+ungetc
+ungetwc
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-string-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-string-l1-1-0.def
new file mode 100644
index 0000000000..dcce58dbc3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-string-l1-1-0.def
@@ -0,0 +1,211 @@
+LIBRARY api-ms-win-crt-string-l1-1-0
+
+EXPORTS
+
+__isascii
+isascii == __isascii
+__iscsym
+iscsym == __iscsym
+__iscsymf
+iscsymf == __iscsymf
+__iswcsym
+__iswcsymf
+__strncnt
+__wcsncnt
+_isalnum_l
+_isalpha_l
+_isblank_l
+_iscntrl_l
+_isctype
+_isctype_l
+_isdigit_l
+_isgraph_l
+_isleadbyte_l
+_islower_l
+_isprint_l
+_ispunct_l
+_isspace_l
+_isupper_l
+_iswalnum_l
+_iswalpha_l
+_iswblank_l
+_iswcntrl_l
+_iswcsym_l
+_iswcsymf_l
+_iswctype_l
+_iswdigit_l
+_iswgraph_l
+_iswlower_l
+_iswprint_l
+_iswpunct_l
+_iswspace_l
+_iswupper_l
+_iswxdigit_l
+_isxdigit_l
+_memccpy
+memccpy == _memccpy
+_memicmp
+memicmp == _memicmp
+_memicmp_l
+_strcoll_l
+_strdup
+strdup == _strdup
+_stricmp
+_strcmpi == _stricmp
+strcmpi == _stricmp
+stricmp == _stricmp
+strcasecmp == _stricmp
+_stricmp_l
+_stricoll
+stricoll == _stricoll
+_stricoll_l
+_strlwr
+strlwr == _strlwr
+_strlwr_l
+_strlwr_s
+_strlwr_s_l
+_strncoll
+_strncoll_l
+_strnicmp
+strnicmp == _strnicmp
+strncasecmp == _strnicmp
+_strnicmp_l
+_strnicoll
+_strnicoll_l
+_strnset
+strnset == _strnset
+_strnset_s
+_strrev
+strrev == _strrev
+_strset
+strset == _strset
+_strset_s
+_strupr
+strupr == _strupr
+_strupr_l
+_strupr_s
+_strupr_s_l
+_strxfrm_l
+_tolower
+_tolower_l
+_toupper
+_toupper_l
+_towlower_l
+_towupper_l
+_wcscoll_l
+_wcsdup
+wcsdup == _wcsdup
+_wcsicmp
+wcsicmp == _wcsicmp
+wcscmpi == _wcsicmp
+_wcsicmp_l
+_wcsicoll
+wcsicoll == _wcsicoll
+_wcsicoll_l
+_wcslwr
+wcslwr == _wcslwr
+_wcslwr_l
+_wcslwr_s
+_wcslwr_s_l
+_wcsncoll
+_wcsncoll_l
+_wcsnicmp
+wcsnicmp == _wcsnicmp
+_wcsnicmp_l
+_wcsnicoll
+_wcsnicoll_l
+_wcsnset
+wcsnset == _wcsnset
+_wcsnset_s
+_wcsrev
+wcsrev == _wcsrev
+_wcsset
+wcsset == _wcsset
+_wcsset_s
+_wcsupr
+wcsupr == _wcsupr
+_wcsupr_l
+_wcsupr_s
+_wcsupr_s_l
+_wcsxfrm_l
+_wctype
+is_wctype
+isalnum
+isalpha
+isblank
+iscntrl
+isdigit
+isgraph
+isleadbyte
+islower
+isprint
+ispunct
+isspace
+isupper
+iswalnum
+iswalpha
+iswascii
+iswblank
+iswcntrl
+iswctype
+iswdigit
+iswgraph
+iswlower
+iswprint
+iswpunct
+iswspace
+iswupper
+iswxdigit
+isxdigit
+mblen
+mbrlen
+memcpy_s
+memmove_s
+memset
+strcat
+strcat_s
+strcmp
+strcoll
+strcpy
+strcpy_s
+strcspn
+strlen
+strncat
+strncat_s
+strncmp
+strncpy
+strncpy_s
+; strnlen replaced by emu
+strpbrk
+strspn
+strtok
+strtok_s
+strxfrm
+tolower
+toupper
+towctrans
+towlower
+towupper
+wcscat
+wcscat_s
+wcscmp
+wcscoll
+wcscpy
+wcscpy_s
+wcscspn
+wcslen
+wcsncat
+wcsncat_s
+wcsncmp
+wcsncpy
+wcsncpy_s
+; We provide replacement implementation in libmingwex
+wcsnlen DATA
+wcspbrk
+wcsspn
+wcstok
+wcstok_s
+wcsxfrm
+wctype
+wmemcpy_s
+wmemmove_s
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-time-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-time-l1-1-0.def
new file mode 100644
index 0000000000..0e30b11271
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-time-l1-1-0.def
@@ -0,0 +1,89 @@
+LIBRARY api-ms-win-crt-time-l1-1-0
+
+EXPORTS
+
+__daylight
+__dstbias
+__timezone
+__tzname
+_ctime32
+_ctime32_s
+_ctime64
+_ctime64_s
+_difftime32
+_difftime64
+_ftime == _ftime64
+_ftime32
+_ftime32_s
+_ftime64
+_ftime64_s
+_futime == _futime64
+_futime32
+_futime64
+_get_daylight
+_get_dstbias
+_get_timezone
+_get_tzname
+_getsystime
+_Getdays
+_Getmonths
+_Gettnames
+_gmtime32
+_gmtime32_s
+_gmtime64
+_gmtime64_s
+_localtime32
+_localtime32_s
+_localtime64
+_localtime64_s
+_mkgmtime32
+_mkgmtime64
+_mktime32
+_mktime64
+_setsystime
+_strdate
+_strdate_s
+_Strftime
+_strftime_l
+_strtime
+_strtime_s
+_time32
+_time64
+_timespec32_get
+_timespec64_get
+; This is wrapped in the compat code.
+_tzset DATA
+_utime == _utime64
+utime == _utime64
+_utime32
+_utime64
+_W_Getdays
+_W_Getmonths
+_W_Gettnames
+_wasctime
+_wasctime_s
+_Wcsftime
+_wcsftime_l
+_wctime32
+_wctime32_s
+_wctime64
+_wctime64_s
+_wstrdate
+_wstrdate_s
+_wstrtime
+_wstrtime_s
+_wutime == _wutime64
+_wutime32
+_wutime64
+asctime
+asctime_s
+clock
+strftime
+wcsftime
+; These functions may satisfy configure scripts.
+ctime == _ctime64
+gmtime == _gmtime64
+localtime == _localtime64
+mktime == _mktime64
+time == _time64
+timespec_get == _timespec64_get
diff --git a/lib/libc/mingw/lib-common/api-ms-win-crt-utility-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-crt-utility-l1-1-0.def
new file mode 100644
index 0000000000..6013445323
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-crt-utility-l1-1-0.def
@@ -0,0 +1,37 @@
+LIBRARY api-ms-win-crt-utility-l1-1-0
+
+EXPORTS
+
+_abs64
+_byteswap_uint64
+_byteswap_ulong
+_byteswap_ushort
+_lfind
+lfind == _lfind
+_lfind_s
+_lrotl
+_lrotr
+_lsearch
+lsearch == _lsearch
+_lsearch_s
+_rotl
+_rotl64
+_rotr
+_rotr64
+_swab
+swab == _swab
+abs
+bsearch
+bsearch_s
+div
+imaxabs
+imaxdiv
+labs
+ldiv
+llabs
+lldiv
+qsort
+qsort_s
+rand
+rand_s
+srand
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-1.def
new file mode 100644
index 0000000000..e84ca03ac7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-1.def
@@ -0,0 +1,43 @@
+LIBRARY api-ms-win-devices-config-l1-1-1
+
+EXPORTS
+
+CM_Delete_Class_Key
+CM_Delete_Device_Interface_KeyW
+CM_Delete_DevNode_Key
+CM_Disable_DevNode
+CM_Enable_DevNode
+CM_Get_Child
+CM_Get_Class_Property_Keys
+CM_Get_Class_PropertyW
+CM_Get_Class_Registry_PropertyW
+CM_Get_Depth
+CM_Get_Device_ID_List_SizeW
+CM_Get_Device_ID_ListW
+CM_Get_Device_ID_Size
+CM_Get_Device_IDW
+CM_Get_Device_Interface_List_SizeW
+CM_Get_Device_Interface_ListW
+CM_Get_Device_Interface_Property_KeysW
+CM_Get_Device_Interface_PropertyW
+CM_Get_DevNode_Property_Keys
+CM_Get_DevNode_PropertyW
+CM_Get_DevNode_Registry_PropertyW
+CM_Get_DevNode_Status
+CM_Get_Parent
+CM_Get_Sibling
+CM_Locate_DevNodeW
+CM_MapCrToWin32Err
+CM_Open_Class_KeyW
+CM_Open_Device_Interface_KeyW
+CM_Open_DevNode_Key
+CM_Query_And_Remove_SubTreeW
+CM_Register_Notification
+CM_Set_Class_PropertyW
+CM_Set_Class_Registry_PropertyW
+CM_Set_Device_Interface_PropertyW
+CM_Set_DevNode_PropertyW
+CM_Set_DevNode_Registry_PropertyW
+CM_Setup_DevNode
+CM_Uninstall_DevNode
+CM_Unregister_Notification
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-1_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..f9d52afdc0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-1_windowsapp.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-devices-config-l1-1-1
+
+EXPORTS
+
+CM_Get_Device_ID_List_SizeW
+CM_Get_Device_ID_ListW
+CM_Get_Device_IDW
+CM_Get_Device_Interface_List_SizeW
+CM_Get_Device_Interface_ListW
+CM_Get_Device_Interface_PropertyW
+CM_Get_DevNode_PropertyW
+CM_Get_DevNode_Status
+CM_Get_Parent
+CM_Locate_DevNodeW
+CM_MapCrToWin32Err
+CM_Register_Notification
+CM_Unregister_Notification
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-2.def
new file mode 100644
index 0000000000..626857b66e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-2.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-devices-config-l1-1-2
+
+EXPORTS
+
+CM_Delete_Device_Interface_KeyA
+CM_Get_Class_Registry_PropertyA
+CM_Get_Device_ID_List_SizeA
+CM_Get_Device_ID_ListA
+CM_Get_Device_IDA
+CM_Get_Device_Interface_List_SizeA
+CM_Get_Device_Interface_ListA
+CM_Get_DevNode_Registry_PropertyA
+CM_Locate_DevNodeA
+CM_Open_Class_KeyA
+CM_Open_Device_Interface_KeyA
+CM_Query_And_Remove_SubTreeA
+CM_Set_Class_Registry_PropertyA
+CM_Set_DevNode_Registry_PropertyA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-2_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-2_windowsapp.def
new file mode 100644
index 0000000000..eb9a440e8d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-config-l1-1-2_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-devices-config-l1-1-2
+
+EXPORTS
+
+CM_Get_Device_Interface_List_SizeA
+CM_Get_Device_Interface_ListA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-0.def
new file mode 100644
index 0000000000..d40aa188b6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-devices-query-l1-1-0
+
+EXPORTS
+
+DevCloseObjectQuery
+DevCreateObjectQuery
+DevCreateObjectQueryFromId
+DevCreateObjectQueryFromIds
+DevFindProperty
+DevFreeObjectProperties
+DevFreeObjects
+DevGetObjectProperties
+DevGetObjects
+DevSetObjectProperties
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..5d1c7fffe5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-devices-query-l1-1-0
+
+EXPORTS
+
+DevCloseObjectQuery
+DevCreateObjectQuery
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-1.def
new file mode 100644
index 0000000000..837d289ec0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-query-l1-1-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-devices-query-l1-1-1
+
+EXPORTS
+
+DevCreateObjectQueryEx
+DevCreateObjectQueryFromIdEx
+DevCreateObjectQueryFromIdsEx
+DevGetObjectPropertiesEx
+DevGetObjectsEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-swdevice-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-devices-swdevice-l1-1-0.def
new file mode 100644
index 0000000000..f6cc7201b6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-swdevice-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-devices-swdevice-l1-1-0
+
+EXPORTS
+
+SwDeviceClose
+SwDeviceCreate
+SwDeviceInterfacePropertySet
+SwDeviceInterfaceRegister
+SwDeviceInterfaceSetState
+SwDevicePropertySet
+SwMemFree
diff --git a/lib/libc/mingw/lib-common/api-ms-win-devices-swdevice-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-devices-swdevice-l1-1-1.def
new file mode 100644
index 0000000000..4557ce32a5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-devices-swdevice-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-devices-swdevice-l1-1-1
+
+EXPORTS
+
+SwDeviceGetLifetime
+SwDeviceSetLifetime
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-advapi32-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-advapi32-l1-1-0.def
new file mode 100644
index 0000000000..4eb6a3b76a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-advapi32-l1-1-0.def
@@ -0,0 +1,164 @@
+LIBRARY api-ms-win-downlevel-advapi32-l1-1-0
+
+EXPORTS
+
+AccessCheck
+AccessCheckAndAuditAlarmW
+AccessCheckByType
+AccessCheckByTypeAndAuditAlarmW
+AccessCheckByTypeResultList
+AccessCheckByTypeResultListAndAuditAlarmByHandleW
+AccessCheckByTypeResultListAndAuditAlarmW
+AddAccessAllowedAce
+AddAccessAllowedAceEx
+AddAccessAllowedObjectAce
+AddAccessDeniedAce
+AddAccessDeniedAceEx
+AddAccessDeniedObjectAce
+AddAce
+AddAuditAccessAce
+AddAuditAccessAceEx
+AddAuditAccessObjectAce
+AddMandatoryAce
+AdjustTokenGroups
+AdjustTokenPrivileges
+AllocateAndInitializeSid
+AllocateLocallyUniqueId
+AreAllAccessesGranted
+AreAnyAccessesGranted
+CheckTokenMembership
+ConvertToAutoInheritPrivateObjectSecurity
+CopySid
+CreatePrivateObjectSecurity
+CreatePrivateObjectSecurityEx
+CreatePrivateObjectSecurityWithMultipleInheritance
+CreateProcessAsUserW
+CreateRestrictedToken
+CreateWellKnownSid
+DeleteAce
+DestroyPrivateObjectSecurity
+DuplicateToken
+DuplicateTokenEx
+EqualDomainSid
+EqualPrefixSid
+EqualSid
+EventActivityIdControl
+EventEnabled
+EventProviderEnabled
+EventRegister
+EventUnregister
+EventWrite
+EventWriteEx
+EventWriteString
+EventWriteTransfer
+FindFirstFreeAce
+FreeSid
+GetAce
+GetAclInformation
+GetFileSecurityW
+GetKernelObjectSecurity
+GetLengthSid
+GetPrivateObjectSecurity
+GetSecurityDescriptorControl
+GetSecurityDescriptorDacl
+GetSecurityDescriptorGroup
+GetSecurityDescriptorLength
+GetSecurityDescriptorOwner
+GetSecurityDescriptorRMControl
+GetSecurityDescriptorSacl
+GetSidIdentifierAuthority
+GetSidLengthRequired
+GetSidSubAuthority
+GetSidSubAuthorityCount
+GetTokenInformation
+GetTraceEnableFlags
+GetTraceEnableLevel
+GetTraceLoggerHandle
+GetWindowsAccountDomainSid
+ImpersonateAnonymousToken
+ImpersonateLoggedOnUser
+ImpersonateNamedPipeClient
+ImpersonateSelf
+InitializeAcl
+InitializeSecurityDescriptor
+InitializeSid
+IsTokenRestricted
+IsValidAcl
+IsValidSecurityDescriptor
+IsValidSid
+IsWellKnownSid
+MakeAbsoluteSD
+MakeSelfRelativeSD
+MapGenericMask
+ObjectCloseAuditAlarmW
+ObjectDeleteAuditAlarmW
+ObjectOpenAuditAlarmW
+ObjectPrivilegeAuditAlarmW
+OpenProcessToken
+OpenThreadToken
+PrivilegeCheck
+PrivilegedServiceAuditAlarmW
+QuerySecurityAccessMask
+RegCloseKey
+RegCopyTreeW
+RegCreateKeyExA
+RegCreateKeyExW
+RegDeleteKeyExA
+RegDeleteKeyExW
+RegDeleteTreeA
+RegDeleteTreeW
+RegDeleteValueA
+RegDeleteValueW
+RegDisablePredefinedCacheEx
+RegEnumKeyExA
+RegEnumKeyExW
+RegEnumValueA
+RegEnumValueW
+RegFlushKey
+RegGetKeySecurity
+RegGetValueA
+RegGetValueW
+RegLoadAppKeyA
+RegLoadAppKeyW
+RegLoadKeyA
+RegLoadKeyW
+RegLoadMUIStringA
+RegLoadMUIStringW
+RegNotifyChangeKeyValue
+RegOpenCurrentUser
+RegOpenKeyExA
+RegOpenKeyExW
+RegOpenUserClassesRoot
+RegQueryInfoKeyA
+RegQueryInfoKeyW
+RegQueryValueExA
+RegQueryValueExW
+RegRestoreKeyA
+RegRestoreKeyW
+RegSaveKeyExA
+RegSaveKeyExW
+RegSetKeySecurity
+RegSetValueExA
+RegSetValueExW
+RegUnLoadKeyA
+RegUnLoadKeyW
+RegisterTraceGuidsW
+RevertToSelf
+SetAclInformation
+SetFileSecurityW
+SetKernelObjectSecurity
+SetPrivateObjectSecurity
+SetPrivateObjectSecurityEx
+SetSecurityAccessMask
+SetSecurityDescriptorControl
+SetSecurityDescriptorDacl
+SetSecurityDescriptorGroup
+SetSecurityDescriptorOwner
+SetSecurityDescriptorRMControl
+SetSecurityDescriptorSacl
+SetThreadToken
+SetTokenInformation
+TraceEvent
+TraceMessage
+TraceMessageVa
+UnregisterTraceGuids
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-advapi32-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-advapi32-l2-1-0.def
new file mode 100644
index 0000000000..d625083fa7
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-advapi32-l2-1-0.def
@@ -0,0 +1,92 @@
+LIBRARY api-ms-win-downlevel-advapi32-l2-1-0
+
+EXPORTS
+
+ChangeServiceConfig2A
+ChangeServiceConfig2W
+ChangeServiceConfigA
+ChangeServiceConfigW
+CloseServiceHandle
+CloseTrace
+ControlService
+ControlServiceExA
+ControlServiceExW
+ControlTraceA
+ControlTraceW
+ConvertSecurityDescriptorToStringSecurityDescriptorW
+ConvertSidToStringSidW
+ConvertStringSecurityDescriptorToSecurityDescriptorW
+ConvertStringSidToSidW
+CreateServiceA
+CreateServiceW
+CredDeleteA
+CredDeleteW
+CredEnumerateA
+CredEnumerateW
+CredFindBestCredentialA
+CredFindBestCredentialW
+CredFree
+CredGetSessionTypes
+CredGetTargetInfoA
+CredGetTargetInfoW
+CredIsMarshaledCredentialW
+CredIsProtectedA
+CredIsProtectedW
+CredMarshalCredentialA
+CredMarshalCredentialW
+CredProtectA
+CredProtectW
+CredReadA
+CredReadDomainCredentialsA
+CredReadDomainCredentialsW
+CredReadW
+CredUnmarshalCredentialA
+CredUnmarshalCredentialW
+CredUnprotectA
+CredUnprotectW
+CredWriteA
+CredWriteDomainCredentialsA
+CredWriteDomainCredentialsW
+CredWriteW
+DeleteService
+EnableTraceEx2
+EnumDependentServicesW
+EnumServicesStatusExW
+EnumerateTraceGuidsEx
+EventAccessControl
+EventAccessQuery
+EventAccessRemove
+NotifyServiceStatusChangeA
+NotifyServiceStatusChangeW
+OpenSCManagerA
+OpenSCManagerW
+OpenServiceA
+OpenServiceW
+OpenTraceW
+ProcessTrace
+QueryAllTracesA
+QueryAllTracesW
+QueryServiceConfig2A
+QueryServiceConfig2W
+QueryServiceConfigA
+QueryServiceConfigW
+QueryServiceObjectSecurity
+QueryServiceStatus
+QueryServiceStatusEx
+RegisterServiceCtrlHandlerA
+RegisterServiceCtrlHandlerExA
+RegisterServiceCtrlHandlerExW
+RegisterServiceCtrlHandlerW
+RegisterTraceGuidsA
+RemoveTraceCallback
+SetServiceObjectSecurity
+SetServiceStatus
+SetTraceCallback
+StartServiceA
+StartServiceCtrlDispatcherA
+StartServiceCtrlDispatcherW
+StartServiceW
+StartTraceA
+StartTraceW
+StopTraceW
+TraceSetInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-normaliz-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-normaliz-l1-1-0.def
new file mode 100644
index 0000000000..54005208e6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-normaliz-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-downlevel-normaliz-l1-1-0
+
+EXPORTS
+
+IdnToAscii
+IdnToUnicode
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-ole32-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-ole32-l1-1-0.def
new file mode 100644
index 0000000000..3ef7fbb93f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-ole32-l1-1-0.def
@@ -0,0 +1,84 @@
+LIBRARY api-ms-win-downlevel-ole32-l1-1-0
+
+EXPORTS
+
+CLSIDFromProgID
+CLSIDFromString
+CoAddRefServerProcess
+CoCancelCall
+CoCopyProxy
+CoCreateFreeThreadedMarshaler
+CoCreateGuid
+CoCreateInstance
+CoCreateInstanceEx
+CoDisableCallCancellation
+CoDisconnectContext
+CoDisconnectObject
+CoEnableCallCancellation
+CoFreeUnusedLibraries
+CoFreeUnusedLibrariesEx
+CoGetApartmentType
+CoGetCallContext
+CoGetCallerTID
+CoGetCancelObject
+CoGetClassObject
+CoGetContextToken
+CoGetCurrentLogicalThreadId
+CoGetCurrentProcess
+CoGetDefaultContext
+CoGetInterfaceAndReleaseStream
+CoGetMalloc
+CoGetMarshalSizeMax
+CoGetObjectContext
+CoGetPSClsid
+CoGetStandardMarshal
+CoGetStdMarshalEx
+CoGetTreatAsClass
+CoImpersonateClient
+CoInitializeEx
+CoInitializeSecurity
+CoInvalidateRemoteMachineBindings
+CoIsHandlerConnected
+CoLockObjectExternal
+CoMarshalHresult
+CoMarshalInterThreadInterfaceInStream
+CoMarshalInterface
+CoQueryAuthenticationServices
+CoQueryClientBlanket
+CoQueryProxyBlanket
+CoRegisterClassObject
+CoRegisterInitializeSpy
+CoRegisterMessageFilter
+CoRegisterPSClsid
+CoRegisterSurrogate
+CoReleaseMarshalData
+CoReleaseServerProcess
+CoResumeClassObjects
+CoRevertToSelf
+CoRevokeClassObject
+CoRevokeInitializeSpy
+CoSetCancelObject
+CoSetProxyBlanket
+CoSuspendClassObjects
+CoSwitchCallContext
+CoTaskMemAlloc
+CoTaskMemFree
+CoTaskMemRealloc
+CoTestCancel
+CoUninitialize
+CoUnmarshalHresult
+CoUnmarshalInterface
+CoWaitForMultipleHandles
+CreateErrorInfo
+CreateStreamOnHGlobal
+FreePropVariantArray
+GetErrorInfo
+GetHGlobalFromStream
+IIDFromString
+ProgIDFromCLSID
+PropVariantClear
+PropVariantCopy
+SetErrorInfo
+StringFromCLSID
+StringFromGUID2
+StringFromIID
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-shell32-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-shell32-l1-1-0.def
new file mode 100644
index 0000000000..f9c1f41d72
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-shell32-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-downlevel-shell32-l1-1-0
+
+EXPORTS
+
+CommandLineToArgvW
+GetCurrentProcessExplicitAppUserModelID
+SetCurrentProcessExplicitAppUserModelID
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-shlwapi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-shlwapi-l1-1-0.def
new file mode 100644
index 0000000000..f892f5053b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-shlwapi-l1-1-0.def
@@ -0,0 +1,175 @@
+LIBRARY api-ms-win-downlevel-shlwapi-l1-1-0
+
+EXPORTS
+
+GetAcceptLanguagesW
+HashData
+IsCharSpaceA
+IsCharSpaceW
+IsInternetESCEnabled
+ParseURLW
+PathAddBackslashA
+PathAddBackslashW
+PathAddExtensionA
+PathAddExtensionW
+PathAppendA
+PathAppendW
+PathCanonicalizeA
+PathCanonicalizeW
+PathCombineA
+PathCombineW
+PathCommonPrefixA
+PathCommonPrefixW
+PathCreateFromUrlAlloc
+PathCreateFromUrlW
+PathFileExistsA
+PathFileExistsW
+PathFindExtensionA
+PathFindExtensionW
+PathFindFileNameA
+PathFindFileNameW
+PathFindNextComponentA
+PathFindNextComponentW
+PathGetArgsA
+PathGetArgsW
+PathGetCharTypeA
+PathGetCharTypeW
+PathGetDriveNumberA
+PathGetDriveNumberW
+PathIsFileSpecA
+PathIsFileSpecW
+PathIsLFNFileSpecA
+PathIsLFNFileSpecW
+PathIsPrefixA
+PathIsPrefixW
+PathIsRelativeA
+PathIsRelativeW
+PathIsRootA
+PathIsRootW
+PathIsSameRootA
+PathIsSameRootW
+PathIsUNCA
+PathIsUNCServerA
+PathIsUNCServerShareA
+PathIsUNCServerShareW
+PathIsUNCServerW
+PathIsUNCW
+PathIsURLW
+PathMatchSpecA
+PathMatchSpecExA
+PathMatchSpecExW
+PathMatchSpecW
+PathParseIconLocationA
+PathParseIconLocationW
+PathQuoteSpacesA
+PathQuoteSpacesW
+PathRelativePathToA
+PathRelativePathToW
+PathRemoveBackslashA
+PathRemoveBackslashW
+PathRemoveBlanksA
+PathRemoveBlanksW
+PathRemoveExtensionA
+PathRemoveExtensionW
+PathRemoveFileSpecA
+PathRemoveFileSpecW
+PathRenameExtensionA
+PathRenameExtensionW
+PathSearchAndQualifyA
+PathSearchAndQualifyW
+PathSkipRootA
+PathSkipRootW
+PathStripPathA
+PathStripPathW
+PathStripToRootA
+PathStripToRootW
+PathUnExpandEnvStringsA
+PathUnExpandEnvStringsW
+PathUnquoteSpacesA
+PathUnquoteSpacesW
+QISearch
+SHLoadIndirectString
+SHRegCloseUSKey
+SHRegDeleteUSValueA
+SHRegDeleteUSValueW
+SHRegEnumUSKeyA
+SHRegEnumUSKeyW
+SHRegGetBoolUSValueA
+SHRegGetBoolUSValueW
+SHRegGetUSValueA
+SHRegGetUSValueW
+SHRegOpenUSKeyA
+SHRegOpenUSKeyW
+SHRegQueryUSValueA
+SHRegQueryUSValueW
+SHRegSetUSValueA
+SHRegSetUSValueW
+StrCSpnA
+StrCSpnIA
+StrCSpnIW
+StrCSpnW
+StrCatBuffA
+StrCatBuffW
+StrCatChainW
+StrChrA
+StrChrIA
+StrChrIW
+StrChrNIW
+StrChrNW
+StrChrW
+StrCmpCA
+StrCmpCW
+StrCmpICA
+StrCmpICW
+StrCmpIW
+StrCmpLogicalW
+StrCmpNA
+StrCmpNCA
+StrCmpNCW
+StrCmpNIA
+StrCmpNICA
+StrCmpNICW
+StrCmpNIW
+StrCmpNW
+StrCmpW
+StrCpyNW
+StrDupA
+StrDupW
+StrIsIntlEqualA
+StrIsIntlEqualW
+StrPBrkA
+StrPBrkW
+StrRChrA
+StrRChrIA
+StrRChrIW
+StrRChrW
+StrRStrIA
+StrRStrIW
+StrSpnA
+StrSpnW
+StrStrA
+StrStrIA
+StrStrIW
+StrStrNIW
+StrStrNW
+StrStrW
+StrToInt64ExA
+StrToInt64ExW
+StrToIntA
+StrToIntExA
+StrToIntExW
+StrToIntW
+StrTrimA
+StrTrimW
+UrlApplySchemeW
+UrlCanonicalizeW
+UrlCombineA
+UrlCombineW
+UrlCreateFromPathW
+UrlEscapeW
+UrlFixupW
+UrlGetLocationW
+UrlGetPartW
+UrlIsW
+UrlUnescapeA
+UrlUnescapeW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-shlwapi-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-shlwapi-l2-1-0.def
new file mode 100644
index 0000000000..0135be820c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-shlwapi-l2-1-0.def
@@ -0,0 +1,65 @@
+LIBRARY api-ms-win-downlevel-shlwapi-l2-1-0
+
+EXPORTS
+
+IStream_Copy
+IStream_Read
+IStream_ReadStr
+IStream_Reset
+IStream_Size
+IStream_Write
+IStream_WriteStr
+IUnknown_AtomicRelease
+IUnknown_GetSite
+IUnknown_QueryService
+IUnknown_Set
+IUnknown_SetSite
+IsOS
+SHAnsiToAnsi
+SHAnsiToUnicode
+SHCopyKeyA
+SHCopyKeyW
+SHCreateMemStream
+SHCreateStreamOnFileA
+SHCreateStreamOnFileEx
+SHCreateStreamOnFileW
+SHCreateThread
+SHCreateThreadRef
+SHCreateThreadWithHandle
+SHDeleteEmptyKeyA
+SHDeleteEmptyKeyW
+SHDeleteKeyA
+SHDeleteKeyW
+SHDeleteValueA
+SHDeleteValueW
+SHEnumKeyExA
+SHEnumKeyExW
+SHEnumValueA
+SHEnumValueW
+SHGetThreadRef
+SHGetValueA
+SHGetValueW
+SHOpenRegStream2A
+SHOpenRegStream2W
+SHOpenRegStreamA
+SHOpenRegStreamW
+SHQueryInfoKeyA
+SHQueryInfoKeyW
+SHQueryValueExA
+SHQueryValueExW
+SHRegDuplicateHKey
+SHRegGetIntW
+SHRegGetPathA
+SHRegGetPathW
+SHRegGetValueA
+SHRegGetValueW
+SHRegSetPathA
+SHRegSetPathW
+SHReleaseThreadRef
+SHSetThreadRef
+SHSetValueA
+SHSetValueW
+SHStrDupA
+SHStrDupW
+SHUnicodeToAnsi
+SHUnicodeToUnicode
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-user32-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-user32-l1-1-0.def
new file mode 100644
index 0000000000..494abc85cd
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-user32-l1-1-0.def
@@ -0,0 +1,28 @@
+LIBRARY api-ms-win-downlevel-user32-l1-1-0
+
+EXPORTS
+
+CharLowerA
+CharLowerBuffA
+CharLowerBuffW
+CharLowerW
+CharNextA
+CharNextExA
+CharNextW
+CharPrevA
+CharPrevExA
+CharPrevW
+CharUpperA
+CharUpperBuffA
+CharUpperBuffW
+CharUpperW
+IsCharAlphaA
+IsCharAlphaNumericA
+IsCharAlphaNumericW
+IsCharAlphaW
+IsCharLowerA
+IsCharLowerW
+IsCharUpperA
+IsCharUpperW
+LoadStringA
+LoadStringW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-downlevel-version-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-downlevel-version-l1-1-0.def
new file mode 100644
index 0000000000..fb362e73df
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-downlevel-version-l1-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-downlevel-version-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExW
+GetFileVersionInfoSizeExW
+VerFindFileA
+VerFindFileW
+VerQueryValueA
+VerQueryValueW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-classicprovider-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-classicprovider-l1-1-0.def
new file mode 100644
index 0000000000..a29da8792d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-classicprovider-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-eventing-classicprovider-l1-1-0
+
+EXPORTS
+
+GetTraceEnableFlags
+GetTraceEnableLevel
+GetTraceLoggerHandle
+RegisterTraceGuidsW
+TraceEvent
+TraceMessage
+TraceMessageVa
+UnregisterTraceGuids
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-classicprovider-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-classicprovider-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..3b44d50b26
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-classicprovider-l1-1-0_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-eventing-classicprovider-l1-1-0
+
+EXPORTS
+
+GetTraceEnableFlags
+GetTraceEnableLevel
+GetTraceLoggerHandle
+RegisterTraceGuidsW
+TraceMessage
+UnregisterTraceGuids
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-consumer-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-consumer-l1-1-0.def
new file mode 100644
index 0000000000..847e6be991
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-consumer-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-eventing-consumer-l1-1-0
+
+EXPORTS
+
+CloseTrace
+OpenTraceW
+ProcessTrace
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-consumer-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-consumer-l1-1-1.def
new file mode 100644
index 0000000000..8b44e3f2f1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-consumer-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-eventing-consumer-l1-1-1
+
+EXPORTS
+
+QueryTraceProcessingHandle
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-controller-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-controller-l1-1-0.def
new file mode 100644
index 0000000000..21f5f8030b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-controller-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-eventing-controller-l1-1-0
+
+EXPORTS
+
+ControlTraceW
+EnableTraceEx2
+EnumerateTraceGuidsEx
+EventAccessControl
+EventAccessQuery
+EventAccessRemove
+QueryAllTracesW
+StartTraceW
+StopTraceW
+TraceQueryInformation
+TraceSetInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-controller-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-controller-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..f25d5fe6f6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-controller-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-eventing-controller-l1-1-0
+
+EXPORTS
+
+ControlTraceW
+EnableTraceEx2
+EnumerateTraceGuidsEx
+StartTraceW
+StopTraceW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-legacy-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-legacy-l1-1-0.def
new file mode 100644
index 0000000000..4136b54e24
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-legacy-l1-1-0.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-eventing-legacy-l1-1-0
+
+EXPORTS
+
+ControlTraceA
+EnableTrace
+EnableTraceEx
+EnumerateTraceGuids
+FlushTraceA
+FlushTraceW
+OpenTraceA
+QueryAllTracesA
+QueryTraceA
+QueryTraceW
+StartTraceA
+StopTraceA
+UpdateTraceA
+UpdateTraceW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-legacy-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-legacy-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..4ba798155d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-legacy-l1-1-0_windowsapp.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-eventing-legacy-l1-1-0
+
+EXPORTS
+
+ControlTraceA
+EnableTrace
+EnableTraceEx
+FlushTraceW
+OpenTraceA
+QueryTraceW
+StartTraceA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-obsolete-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..c9c5230c0d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-obsolete-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-eventing-obsolete-l1-1-0
+
+EXPORTS
+
+RegisterTraceGuidsA
+RemoveTraceCallback
+SetTraceCallback
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..cdf58edcac
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-eventing-obsolete-l1-1-0
+
+EXPORTS
+
+RegisterTraceGuidsA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-provider-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-provider-l1-1-0.def
new file mode 100644
index 0000000000..a54e760470
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-provider-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-eventing-provider-l1-1-0
+
+EXPORTS
+
+EventActivityIdControl
+EventEnabled
+EventProviderEnabled
+EventRegister
+EventSetInformation
+EventUnregister
+EventWrite
+EventWriteEx
+EventWriteString
+EventWriteTransfer
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-tdh-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-tdh-l1-1-0.def
new file mode 100644
index 0000000000..22c1c0a02e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-tdh-l1-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-eventing-tdh-l1-1-0
+
+EXPORTS
+
+TdhEnumerateManifestProviderEvents
+TdhEnumerateProviderFieldInformation
+TdhEnumerateProviders
+TdhFormatProperty
+TdhGetEventInformation
+TdhGetEventMapInformation
+TdhGetManifestEventInformation
+TdhGetProperty
+TdhGetPropertySize
+TdhLoadManifest
+TdhQueryProviderFieldInformation
+TdhUnloadManifest
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventing-tdh-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-eventing-tdh-l1-1-1.def
new file mode 100644
index 0000000000..5de7c09704
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventing-tdh-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-eventing-tdh-l1-1-1
+
+EXPORTS
+
+TdhLoadManifestFromMemory
+TdhUnloadManifestFromMemory
diff --git a/lib/libc/mingw/lib-common/api-ms-win-eventlog-legacy-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-eventlog-legacy-l1-1-0.def
new file mode 100644
index 0000000000..7b83c13159
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-eventlog-legacy-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-eventlog-legacy-l1-1-0
+
+EXPORTS
+
+DeregisterEventSource
+RegisterEventSourceW
+ReportEventW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-gaming-deviceinformation-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-gaming-deviceinformation-l1-1-0.def
new file mode 100644
index 0000000000..35f1de3263
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-gaming-deviceinformation-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-gaming-deviceinformation-l1-1-0
+
+EXPORTS
+
+GetGamingDeviceModelInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-gaming-expandedresources-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-gaming-expandedresources-l1-1-0.def
new file mode 100644
index 0000000000..f5914c1908
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-gaming-expandedresources-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-gaming-expandedresources-l1-1-0
+
+EXPORTS
+
+GetExpandedResourceExclusiveCpuCount
+HasExpandedResources
+ReleaseExclusiveCpuSets
diff --git a/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-0.def
new file mode 100644
index 0000000000..aa949963d0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-0
+
+EXPORTS
+
+ProcessPendingGameUI
+ShowChangeFriendRelationshipUI
+ShowGameInviteUI
+ShowPlayerPickerUI
+ShowProfileCardUI
+ShowTitleAchievementsUI
+TryCancelPendingGameUI
diff --git a/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-1.def
new file mode 100644
index 0000000000..465e804477
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-1
+
+EXPORTS
+
+CheckGamingPrivilegeSilently
+CheckGamingPrivilegeWithUI
diff --git a/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-2.def
new file mode 100644
index 0000000000..1ed04cbcd3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-2.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-2
+
+EXPORTS
+
+CheckGamingPrivilegeSilentlyForUser
+CheckGamingPrivilegeWithUIForUser
+ShowChangeFriendRelationshipUIForUser
+ShowGameInviteUIForUser
+ShowPlayerPickerUIForUser
+ShowProfileCardUIForUser
+ShowTitleAchievementsUIForUser
diff --git a/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-3.def
new file mode 100644
index 0000000000..4fcb4732ad
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-3
+
+EXPORTS
+
+ShowGameInviteUIWithContext
+ShowGameInviteUIWithContextForUser
diff --git a/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-4.def b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-4.def
new file mode 100644
index 0000000000..c6762ba634
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-gaming-tcui-l1-1-4.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-4
+
+EXPORTS
+
+ShowCustomizeUserProfileUI
+ShowCustomizeUserProfileUIForUser
+ShowFindFriendsUI
+ShowFindFriendsUIForUser
+ShowGameInfoUI
+ShowGameInfoUIForUser
+ShowUserSettingsUI
+ShowUserSettingsUIForUser
diff --git a/lib/libc/mingw/lib-common/api-ms-win-mm-time-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-mm-time-l1-1-0.def
new file mode 100644
index 0000000000..825b661926
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-mm-time-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-mm-time-l1-1-0
+
+EXPORTS
+
+timeBeginPeriod
+timeEndPeriod
+timeGetDevCaps
+timeGetSystemTime
+timeGetTime
diff --git a/lib/libc/mingw/lib-common/api-ms-win-mm-time-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-mm-time-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..721c037ba0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-mm-time-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-mm-time-l1-1-0
+
+EXPORTS
+
+timeBeginPeriod
+timeEndPeriod
+timeGetDevCaps
+timeGetTime
diff --git a/lib/libc/mingw/lib-common/api-ms-win-net-isolation-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-net-isolation-l1-1-0.def
new file mode 100644
index 0000000000..8e6762e931
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-net-isolation-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-net-isolation-l1-1-0
+
+EXPORTS
+
+NetworkIsolationDiagnoseConnectFailureAndGetInfo
+NetworkIsolationEnumAppContainers
+NetworkIsolationFreeAppContainers
+NetworkIsolationGetAppContainerConfig
+NetworkIsolationRegisterForAppContainerChanges
+NetworkIsolationSetAppContainerConfig
+NetworkIsolationSetupAppContainerBinaries
+NetworkIsolationUnregisterForAppContainerChanges
diff --git a/lib/libc/mingw/lib-common/api-ms-win-net-isolation-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-net-isolation-l1-1-1.def
new file mode 100644
index 0000000000..225eaae93a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-net-isolation-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-net-isolation-l1-1-1
+
+EXPORTS
+
+NetworkIsolationDiagnoseConnectFailure
diff --git a/lib/libc/mingw/lib-common/api-ms-win-ntuser-sysparams-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-ntuser-sysparams-l1-1-0.def
new file mode 100644
index 0000000000..a8d93982c4
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-ntuser-sysparams-l1-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-ntuser-sysparams-l1-1-0
+
+EXPORTS
+
+ChangeDisplaySettingsExW
+DisplayConfigGetDeviceInfo
+DisplayConfigSetDeviceInfo
+EnumDisplayDevicesW
+EnumDisplayMonitors
+EnumDisplaySettingsExW
+EnumDisplaySettingsW
+GetDisplayConfigBufferSizes
+GetMonitorInfoW
+GetSystemMetrics
+QueryDisplayConfig
+SystemParametersInfoW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-ntuser-sysparams-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-ntuser-sysparams-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..b10283ba8d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-ntuser-sysparams-l1-1-0_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-ntuser-sysparams-l1-1-0
+
+EXPORTS
+
+EnumDisplayDevicesW
+EnumDisplayMonitors
+EnumDisplaySettingsExW
+GetMonitorInfoW
+GetSystemMetrics
+SystemParametersInfoW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-oobe-notification-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-oobe-notification-l1-1-0.def
new file mode 100644
index 0000000000..42c5584aa1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-oobe-notification-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-oobe-notification-l1-1-0
+
+EXPORTS
+
+OOBEComplete
+RegisterWaitUntilOOBECompleted
+UnregisterWaitUntilOOBECompleted
diff --git a/lib/libc/mingw/lib-common/api-ms-win-perf-legacy-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-perf-legacy-l1-1-0.def
new file mode 100644
index 0000000000..7b666748ed
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-perf-legacy-l1-1-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-perf-legacy-l1-1-0
+
+EXPORTS
+
+PerfAddCounters
+PerfCloseQueryHandle
+PerfDeleteCounters
+PerfEnumerateCounterSet
+PerfEnumerateCounterSetInstances
+PerfOpenQueryHandle
+PerfQueryCounterData
+PerfQueryCounterInfo
+PerfQueryCounterSetRegistrationInfo
diff --git a/lib/libc/mingw/lib-common/api-ms-win-power-base-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-power-base-l1-1-0.def
new file mode 100644
index 0000000000..501399bf30
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-power-base-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-power-base-l1-1-0
+
+EXPORTS
+
+CallNtPowerInformation
+GetPwrCapabilities
+PowerDeterminePlatformRoleEx
+PowerRegisterSuspendResumeNotification
+PowerUnregisterSuspendResumeNotification
diff --git a/lib/libc/mingw/lib-common/api-ms-win-power-base-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-power-base-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..0885049eb3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-power-base-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-power-base-l1-1-0
+
+EXPORTS
+
+CallNtPowerInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-power-limitsmanagement-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-power-limitsmanagement-l1-1-0.def
new file mode 100644
index 0000000000..a78b308937
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-power-limitsmanagement-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-power-limitsmanagement-l1-1-0
+
+EXPORTS
+
+PowerCloseEnvironmentalMonitor
+PowerCloseLimitsMitigation
+PowerCloseLimitsPolicy
+PowerRegisterEnvironmentalMonitor
+PowerRegisterLimitsMitigation
+PowerRegisterLimitsPolicy
+PowerReportLimitsEvent
+PowerUpdateEnvironmentalMonitorState
+PowerUpdateEnvironmentalMonitorThresholds
+PowerUpdateLimitsMitigation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-0.def
new file mode 100644
index 0000000000..5971710b68
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-power-setting-l1-1-0
+
+EXPORTS
+
+PowerGetActiveScheme
+PowerReadACValue
+PowerReadDCValue
+PowerSetActiveScheme
+PowerSettingRegisterNotification
+PowerSettingUnregisterNotification
+PowerWriteACValueIndex
+PowerWriteDCValueIndex
diff --git a/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..09875816f1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-power-setting-l1-1-0
+
+EXPORTS
+
+PowerGetActiveScheme
+PowerReadACValue
+PowerSettingRegisterNotification
+PowerSettingUnregisterNotification
diff --git a/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-1.def
new file mode 100644
index 0000000000..e82011e304
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-power-setting-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-power-setting-l1-1-1
+
+EXPORTS
+
+PowerRegisterForEffectivePowerModeNotifications
+PowerUnregisterFromEffectivePowerModeNotifications
diff --git a/lib/libc/mingw/lib-common/api-ms-win-ro-typeresolution-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-ro-typeresolution-l1-1-0.def
new file mode 100644
index 0000000000..d6d95e7a82
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-ro-typeresolution-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-ro-typeresolution-l1-1-0
+
+EXPORTS
+
+RoGetMetaDataFile
+RoParseTypeName
+RoResolveNamespace
diff --git a/lib/libc/mingw/lib-common/api-ms-win-ro-typeresolution-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-ro-typeresolution-l1-1-1.def
new file mode 100644
index 0000000000..bcb10a2c4d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-ro-typeresolution-l1-1-1.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-ro-typeresolution-l1-1-1
+
+EXPORTS
+
+RoCreateNonAgilePropertySet
+RoCreatePropertySetSerializer
+RoIsApiContractMajorVersionPresent
+RoIsApiContractPresent
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-appcontainer-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-appcontainer-l1-1-0.def
new file mode 100644
index 0000000000..b93763ce44
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-appcontainer-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-appcontainer-l1-1-0
+
+EXPORTS
+
+GetAppContainerNamedObjectPath
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-base-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-base-ansi-l1-1-0.def
new file mode 100644
index 0000000000..e61daf15fa
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-base-ansi-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-security-base-ansi-l1-1-0
+
+EXPORTS
+
+GetFileSecurityA
+SetFileSecurityA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-base-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-security-base-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..3cce783655
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-base-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-base-ansi-l1-1-0
+
+EXPORTS
+
+SetFileSecurityA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-1-0.def
new file mode 100644
index 0000000000..6749536513
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-1-0.def
@@ -0,0 +1,99 @@
+LIBRARY api-ms-win-security-base-l1-1-0
+
+EXPORTS
+
+AccessCheck
+AccessCheckAndAuditAlarmW
+AccessCheckByType
+AccessCheckByTypeAndAuditAlarmW
+AccessCheckByTypeResultList
+AccessCheckByTypeResultListAndAuditAlarmByHandleW
+AccessCheckByTypeResultListAndAuditAlarmW
+AddAccessAllowedAce
+AddAccessAllowedAceEx
+AddAccessAllowedObjectAce
+AddAccessDeniedAce
+AddAccessDeniedAceEx
+AddAccessDeniedObjectAce
+AddAce
+AddAuditAccessAce
+AddAuditAccessAceEx
+AddAuditAccessObjectAce
+AddMandatoryAce
+AdjustTokenGroups
+AdjustTokenPrivileges
+AllocateAndInitializeSid
+AllocateLocallyUniqueId
+AreAllAccessesGranted
+AreAnyAccessesGranted
+CheckTokenMembership
+ConvertToAutoInheritPrivateObjectSecurity
+CopySid
+CreatePrivateObjectSecurity
+CreatePrivateObjectSecurityEx
+CreatePrivateObjectSecurityWithMultipleInheritance
+CreateRestrictedToken
+CreateWellKnownSid
+DeleteAce
+DestroyPrivateObjectSecurity
+DuplicateToken
+DuplicateTokenEx
+EqualDomainSid
+EqualPrefixSid
+EqualSid
+FindFirstFreeAce
+FreeSid
+GetAce
+GetAclInformation
+GetFileSecurityW
+GetKernelObjectSecurity
+GetLengthSid
+GetPrivateObjectSecurity
+GetSecurityDescriptorControl
+GetSecurityDescriptorDacl
+GetSecurityDescriptorGroup
+GetSecurityDescriptorLength
+GetSecurityDescriptorOwner
+GetSecurityDescriptorRMControl
+GetSecurityDescriptorSacl
+GetSidIdentifierAuthority
+GetSidLengthRequired
+GetSidSubAuthority
+GetSidSubAuthorityCount
+GetTokenInformation
+GetWindowsAccountDomainSid
+ImpersonateAnonymousToken
+ImpersonateLoggedOnUser
+ImpersonateSelf
+InitializeAcl
+InitializeSecurityDescriptor
+InitializeSid
+IsTokenRestricted
+IsValidAcl
+IsValidSecurityDescriptor
+IsValidSid
+IsWellKnownSid
+MakeAbsoluteSD
+MakeSelfRelativeSD
+MapGenericMask
+ObjectCloseAuditAlarmW
+ObjectDeleteAuditAlarmW
+ObjectOpenAuditAlarmW
+ObjectPrivilegeAuditAlarmW
+PrivilegeCheck
+PrivilegedServiceAuditAlarmW
+QuerySecurityAccessMask
+RevertToSelf
+SetAclInformation
+SetFileSecurityW
+SetKernelObjectSecurity
+SetPrivateObjectSecurity
+SetPrivateObjectSecurityEx
+SetSecurityAccessMask
+SetSecurityDescriptorControl
+SetSecurityDescriptorDacl
+SetSecurityDescriptorGroup
+SetSecurityDescriptorOwner
+SetSecurityDescriptorRMControl
+SetSecurityDescriptorSacl
+SetTokenInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..e4fd623c89
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-1-0_windowsapp.def
@@ -0,0 +1,59 @@
+LIBRARY api-ms-win-security-base-l1-1-0
+
+EXPORTS
+
+AddAccessAllowedAce
+AddAccessAllowedAceEx
+AddAce
+AddMandatoryAce
+AdjustTokenGroups
+AdjustTokenPrivileges
+AllocateAndInitializeSid
+AllocateLocallyUniqueId
+CheckTokenMembership
+CopySid
+CreateWellKnownSid
+DeleteAce
+DuplicateToken
+DuplicateTokenEx
+EqualDomainSid
+EqualSid
+FreeSid
+GetAce
+GetAclInformation
+GetFileSecurityW
+GetKernelObjectSecurity
+GetLengthSid
+GetSecurityDescriptorControl
+GetSecurityDescriptorDacl
+GetSecurityDescriptorGroup
+GetSecurityDescriptorLength
+GetSecurityDescriptorOwner
+GetSecurityDescriptorRMControl
+GetSecurityDescriptorSacl
+GetSidIdentifierAuthority
+GetSidLengthRequired
+GetSidSubAuthority
+GetSidSubAuthorityCount
+GetTokenInformation
+GetWindowsAccountDomainSid
+ImpersonateLoggedOnUser
+InitializeAcl
+InitializeSecurityDescriptor
+InitializeSid
+IsValidAcl
+IsValidSecurityDescriptor
+IsValidSid
+IsWellKnownSid
+MakeAbsoluteSD
+MakeSelfRelativeSD
+RevertToSelf
+SetFileSecurityW
+SetKernelObjectSecurity
+SetSecurityDescriptorControl
+SetSecurityDescriptorDacl
+SetSecurityDescriptorGroup
+SetSecurityDescriptorOwner
+SetSecurityDescriptorRMControl
+SetSecurityDescriptorSacl
+SetTokenInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-0.def
new file mode 100644
index 0000000000..b3556934bc
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-security-base-l1-2-0
+
+EXPORTS
+
+AddResourceAttributeAce
+AddScopedPolicyIDAce
+CheckTokenCapability
+CheckTokenMembershipEx
+GetAppContainerAce
+GetCachedSigningLevel
+SetCachedSigningLevel
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..53f8b1fa68
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-base-l1-2-0
+
+EXPORTS
+
+CheckTokenMembershipEx
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-1.def b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-1.def
new file mode 100644
index 0000000000..1ae03b20b6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-base-l1-2-1
+
+EXPORTS
+
+CveEventWrite
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-2.def b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-2.def
new file mode 100644
index 0000000000..65ec23a0de
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-base-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-base-l1-2-2
+
+EXPORTS
+
+DeriveCapabilitySidsFromName
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-cpwl-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-cpwl-l1-1-0.def
new file mode 100644
index 0000000000..14dfe5ebe6
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-cpwl-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-security-cpwl-l1-1-0
+
+EXPORTS
+
+CreateProcessWithLogonW
+CreateProcessWithTokenW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-cpwl-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-security-cpwl-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..508b4b047a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-cpwl-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-cpwl-l1-1-0
+
+EXPORTS
+
+CreateProcessWithLogonW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-credentials-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-credentials-l1-1-0.def
new file mode 100644
index 0000000000..e20e52888c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-credentials-l1-1-0.def
@@ -0,0 +1,33 @@
+LIBRARY api-ms-win-security-credentials-l1-1-0
+
+EXPORTS
+
+CredDeleteA
+CredDeleteW
+CredEnumerateA
+CredEnumerateW
+CredFindBestCredentialA
+CredFindBestCredentialW
+CredFree
+CredGetSessionTypes
+CredGetTargetInfoA
+CredGetTargetInfoW
+CredIsMarshaledCredentialW
+CredIsProtectedA
+CredIsProtectedW
+CredMarshalCredentialA
+CredMarshalCredentialW
+CredProtectA
+CredProtectW
+CredReadA
+CredReadDomainCredentialsA
+CredReadDomainCredentialsW
+CredReadW
+CredUnmarshalCredentialA
+CredUnmarshalCredentialW
+CredUnprotectA
+CredUnprotectW
+CredWriteA
+CredWriteDomainCredentialsA
+CredWriteDomainCredentialsW
+CredWriteW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-cryptoapi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-cryptoapi-l1-1-0.def
new file mode 100644
index 0000000000..e9249362fb
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-cryptoapi-l1-1-0.def
@@ -0,0 +1,43 @@
+LIBRARY api-ms-win-security-cryptoapi-l1-1-0
+
+EXPORTS
+
+CryptAcquireContextA
+CryptAcquireContextW
+CryptContextAddRef
+CryptCreateHash
+CryptDecrypt
+CryptDeriveKey
+CryptDestroyHash
+CryptDestroyKey
+CryptDuplicateHash
+CryptDuplicateKey
+CryptEncrypt
+CryptEnumProvidersA
+CryptEnumProvidersW
+CryptEnumProviderTypesA
+CryptEnumProviderTypesW
+CryptExportKey
+CryptGenKey
+CryptGenRandom
+CryptGetDefaultProviderA
+CryptGetDefaultProviderW
+CryptGetHashParam
+CryptGetKeyParam
+CryptGetProvParam
+CryptGetUserKey
+CryptHashData
+CryptHashSessionKey
+CryptImportKey
+CryptReleaseContext
+CryptSetHashParam
+CryptSetKeyParam
+CryptSetProviderA
+CryptSetProviderExA
+CryptSetProviderExW
+CryptSetProviderW
+CryptSetProvParam
+CryptSignHashA
+CryptSignHashW
+CryptVerifySignatureA
+CryptVerifySignatureW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-cryptoapi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-security-cryptoapi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..ebeeda2c54
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-cryptoapi-l1-1-0_windowsapp.def
@@ -0,0 +1,35 @@
+LIBRARY api-ms-win-security-cryptoapi-l1-1-0
+
+EXPORTS
+
+CryptAcquireContextA
+CryptAcquireContextW
+CryptCreateHash
+CryptDecrypt
+CryptDeriveKey
+CryptDestroyHash
+CryptDestroyKey
+CryptDuplicateKey
+CryptEncrypt
+CryptEnumProvidersA
+CryptEnumProvidersW
+CryptExportKey
+CryptGenKey
+CryptGenRandom
+CryptGetDefaultProviderA
+CryptGetDefaultProviderW
+CryptGetHashParam
+CryptGetKeyParam
+CryptGetProvParam
+CryptGetUserKey
+CryptHashData
+CryptImportKey
+CryptReleaseContext
+CryptSetHashParam
+CryptSetKeyParam
+CryptSetProviderW
+CryptSetProvParam
+CryptSignHashA
+CryptSignHashW
+CryptVerifySignatureA
+CryptVerifySignatureW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-isolatedcontainer-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-isolatedcontainer-l1-1-0.def
new file mode 100644
index 0000000000..f9ae366998
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-isolatedcontainer-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-isolatedcontainer-l1-1-0
+
+EXPORTS
+
+IsProcessInIsolatedContainer
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-isolatedcontainer-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-security-isolatedcontainer-l1-1-1.def
new file mode 100644
index 0000000000..c54c65d08c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-isolatedcontainer-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-isolatedcontainer-l1-1-1
+
+EXPORTS
+
+IsProcessInWDAGContainer
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-ansi-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-ansi-l2-1-0.def
new file mode 100644
index 0000000000..a9f218a42c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-ansi-l2-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-security-lsalookup-ansi-l2-1-0
+
+EXPORTS
+
+LookupAccountNameA
+LookupAccountSidA
+LookupPrivilegeDisplayNameA
+LookupPrivilegeNameA
+LookupPrivilegeValueA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-0.def
new file mode 100644
index 0000000000..1e19a1946a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-security-lsalookup-l2-1-0
+
+EXPORTS
+
+LookupAccountNameW
+LookupAccountSidW
+LookupPrivilegeDisplayNameW
+LookupPrivilegeNameW
+LookupPrivilegeValueW
+LsaEnumerateTrustedDomains
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..b4f67c882a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-security-lsalookup-l2-1-0
+
+EXPORTS
+
+LookupAccountNameW
+LookupAccountSidW
+LookupPrivilegeDisplayNameW
+LookupPrivilegeNameW
+LookupPrivilegeValueW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-1.def
new file mode 100644
index 0000000000..0a5a79ca9e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-lsalookup-l2-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-lsalookup-l2-1-1
+
+EXPORTS
+
+LsaManageSidNameMapping
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-lsapolicy-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-lsapolicy-l1-1-0.def
new file mode 100644
index 0000000000..f7d83c0ef1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-lsapolicy-l1-1-0.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-security-lsapolicy-l1-1-0
+
+EXPORTS
+
+LsaAddAccountRights
+LsaClose
+LsaEnumerateAccountRights
+LsaEnumerateAccountsWithUserRight
+LsaFreeMemory
+LsaLookupNames2
+LsaLookupSids
+LsaLookupSids2
+LsaOpenPolicy
+LsaQueryInformationPolicy
+LsaRemoveAccountRights
+LsaRetrievePrivateData
+LsaSetInformationPolicy
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-lsapolicy-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-security-lsapolicy-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..4ce53a0560
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-lsapolicy-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-security-lsapolicy-l1-1-0
+
+EXPORTS
+
+LsaClose
+LsaFreeMemory
+LsaLookupNames2
+LsaLookupSids
+LsaOpenPolicy
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-provider-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-provider-ansi-l1-1-0.def
new file mode 100644
index 0000000000..1ca75cce24
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-provider-ansi-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-security-provider-ansi-l1-1-0
+
+EXPORTS
+
+GetExplicitEntriesFromAclA
+GetNamedSecurityInfoA
+SetEntriesInAclA
+SetNamedSecurityInfoA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-provider-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-provider-l1-1-0.def
new file mode 100644
index 0000000000..ed1285545e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-provider-l1-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-security-provider-l1-1-0
+
+EXPORTS
+
+GetExplicitEntriesFromAclW
+GetNamedSecurityInfoW
+GetSecurityInfo
+SetEntriesInAclW
+SetNamedSecurityInfoW
+SetSecurityInfo
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-sddl-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-sddl-ansi-l1-1-0.def
new file mode 100644
index 0000000000..7c042f5405
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-sddl-ansi-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-security-sddl-ansi-l1-1-0
+
+EXPORTS
+
+ConvertSidToStringSidA
+ConvertStringSidToSidA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-sddl-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-sddl-l1-1-0.def
new file mode 100644
index 0000000000..ff71f3f8e0
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-sddl-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-security-sddl-l1-1-0
+
+EXPORTS
+
+ConvertSecurityDescriptorToStringSecurityDescriptorW
+ConvertSidToStringSidW
+ConvertStringSecurityDescriptorToSecurityDescriptorW
+ConvertStringSidToSidW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-systemfunctions-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-security-systemfunctions-l1-1-0.def
new file mode 100644
index 0000000000..cd1588ad70
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-systemfunctions-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-security-systemfunctions-l1-1-0
+
+EXPORTS
+
+SystemFunction036
+SystemFunction040
+SystemFunction041
diff --git a/lib/libc/mingw/lib-common/api-ms-win-security-systemfunctions-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-security-systemfunctions-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..e10a70d874
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-security-systemfunctions-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-systemfunctions-l1-1-0
+
+EXPORTS
+
+SystemFunction036
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-core-ansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-service-core-ansi-l1-1-0.def
new file mode 100644
index 0000000000..ec245fe311
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-core-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-service-core-ansi-l1-1-0
+
+EXPORTS
+
+EnumServicesStatusExA
+GetServiceDisplayNameA
+GetServiceKeyNameA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-core-ansi-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-service-core-ansi-l1-1-1.def
new file mode 100644
index 0000000000..a894dfd169
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-core-ansi-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-core-ansi-l1-1-1
+
+EXPORTS
+
+EnumDependentServicesA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-0.def
new file mode 100644
index 0000000000..1cefff147d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-service-core-l1-1-0
+
+EXPORTS
+
+RegisterServiceCtrlHandlerExW
+SetServiceStatus
+StartServiceCtrlDispatcherW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..f6098ac558
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-core-l1-1-0
+
+EXPORTS
+
+RegisterServiceCtrlHandlerExW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-1.def
new file mode 100644
index 0000000000..b0576c9f54
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-service-core-l1-1-1
+
+EXPORTS
+
+EnumDependentServicesW
+EnumServicesStatusExW
+QueryServiceDynamicInformation
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-2.def
new file mode 100644
index 0000000000..372096b392
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-service-core-l1-1-2
+
+EXPORTS
+
+GetServiceDisplayNameW
+GetServiceKeyNameW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-3.def b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-3.def
new file mode 100644
index 0000000000..071cb49c86
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-3.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-core-l1-1-3
+
+EXPORTS
+
+GetServiceRegistryStateKey
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-4.def b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-4.def
new file mode 100644
index 0000000000..a8d4321e41
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-core-l1-1-4.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-core-l1-1-4
+
+EXPORTS
+
+GetServiceDirectory
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-management-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-service-management-l1-1-0.def
new file mode 100644
index 0000000000..3cc1821a6a
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-management-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-service-management-l1-1-0
+
+EXPORTS
+
+CloseServiceHandle
+ControlServiceExW
+CreateServiceW
+DeleteService
+OpenSCManagerW
+OpenServiceW
+StartServiceW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-management-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-service-management-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..6b3400bdd1
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-management-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-management-l1-1-0
+
+EXPORTS
+
+OpenSCManagerW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-management-l2-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-service-management-l2-1-0.def
new file mode 100644
index 0000000000..57c5113fa4
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-management-l2-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-service-management-l2-1-0
+
+EXPORTS
+
+ChangeServiceConfig2W
+ChangeServiceConfigW
+NotifyServiceStatusChangeW
+QueryServiceConfig2W
+QueryServiceConfigW
+QueryServiceObjectSecurity
+QueryServiceStatusEx
+SetServiceObjectSecurity
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-winsvc-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-service-winsvc-l1-1-0.def
new file mode 100644
index 0000000000..36afb129ca
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-winsvc-l1-1-0.def
@@ -0,0 +1,20 @@
+LIBRARY api-ms-win-service-winsvc-l1-1-0
+
+EXPORTS
+
+ChangeServiceConfig2A
+ChangeServiceConfigA
+ControlService
+ControlServiceExA
+CreateServiceA
+NotifyServiceStatusChangeA
+OpenSCManagerA
+OpenServiceA
+QueryServiceConfig2A
+QueryServiceConfigA
+QueryServiceStatus
+RegisterServiceCtrlHandlerA
+RegisterServiceCtrlHandlerExA
+RegisterServiceCtrlHandlerW
+StartServiceA
+StartServiceCtrlDispatcherA
diff --git a/lib/libc/mingw/lib-common/api-ms-win-service-winsvc-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-service-winsvc-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..35809ff2fb
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-service-winsvc-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-service-winsvc-l1-1-0
+
+EXPORTS
+
+OpenSCManagerA
+RegisterServiceCtrlHandlerA
+RegisterServiceCtrlHandlerExA
+RegisterServiceCtrlHandlerW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-obsolete-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..155b211d8b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-obsolete-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shcore-obsolete-l1-1-0
+
+EXPORTS
+
+CommandLineToArgvW
+SHStrDupA
+SHStrDupW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..67c40c9538
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-shcore-obsolete-l1-1-0
+
+EXPORTS
+
+CommandLineToArgvW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-path-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-path-l1-1-0.def
new file mode 100644
index 0000000000..80bfb94f4c
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-path-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-shcore-path-l1-1-0
+
+EXPORTS
+
+PathBuildRootA
+PathBuildRootW
+PathIsNetworkPathA
+PathIsNetworkPathW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-registry-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-registry-l1-1-0.def
new file mode 100644
index 0000000000..70bfde759b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-registry-l1-1-0.def
@@ -0,0 +1,32 @@
+LIBRARY api-ms-win-shcore-registry-l1-1-0
+
+EXPORTS
+
+SHCopyKeyA
+SHCopyKeyW
+SHDeleteEmptyKeyA
+SHDeleteEmptyKeyW
+SHDeleteKeyA
+SHDeleteKeyW
+SHDeleteValueA
+SHDeleteValueW
+SHEnumKeyExA
+SHEnumKeyExW
+SHEnumValueA
+SHEnumValueW
+SHGetValueA
+SHGetValueW
+SHQueryInfoKeyA
+SHQueryInfoKeyW
+SHQueryValueExA
+SHQueryValueExW
+SHRegDuplicateHKey
+SHRegGetIntW
+SHRegGetPathA
+SHRegGetPathW
+SHRegGetValueA
+SHRegGetValueW
+SHRegSetPathA
+SHRegSetPathW
+SHSetValueA
+SHSetValueW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-registry-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-registry-l1-1-1.def
new file mode 100644
index 0000000000..9db533f7d5
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-registry-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-shcore-registry-l1-1-1
+
+EXPORTS
+
+SHRegGetValueFromHKCUHKLM
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-0.def
new file mode 100644
index 0000000000..aafcac2734
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shcore-scaling-l1-1-0
+
+EXPORTS
+
+GetScaleFactorForDevice
+RegisterScaleChangeNotifications
+RevokeScaleChangeNotifications
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-1.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-1.def
new file mode 100644
index 0000000000..03f6c1980f
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-1.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-shcore-scaling-l1-1-1
+
+EXPORTS
+
+GetDpiForMonitor
+GetProcessDpiAwareness
+GetScaleFactorForMonitor
+RegisterScaleChangeEvent
+SetProcessDpiAwareness
+UnregisterScaleChangeEvent
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-2.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-2.def
new file mode 100644
index 0000000000..29b20d2dca
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-scaling-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-shcore-scaling-l1-1-2
+
+EXPORTS
+
+GetDpiForShellUIComponent
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-stream-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-stream-l1-1-0.def
new file mode 100644
index 0000000000..2d8534d9e4
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-stream-l1-1-0.def
@@ -0,0 +1,19 @@
+LIBRARY api-ms-win-shcore-stream-l1-1-0
+
+EXPORTS
+
+IStream_Copy
+IStream_Read
+IStream_ReadStr
+IStream_Reset
+IStream_Size
+IStream_Write
+IStream_WriteStr
+SHCreateMemStream
+SHCreateStreamOnFileA
+SHCreateStreamOnFileEx
+SHCreateStreamOnFileW
+SHOpenRegStream2A
+SHOpenRegStream2W
+SHOpenRegStreamA
+SHOpenRegStreamW
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-stream-winrt-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-stream-winrt-l1-1-0.def
new file mode 100644
index 0000000000..c0ed75874b
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-stream-winrt-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shcore-stream-winrt-l1-1-0
+
+EXPORTS
+
+CreateRandomAccessStreamOnFile
+CreateRandomAccessStreamOverStream
+CreateStreamOverRandomAccessStream
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-sysinfo-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-sysinfo-l1-1-0.def
new file mode 100644
index 0000000000..f5654b5c4e
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-sysinfo-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shcore-sysinfo-l1-1-0
+
+EXPORTS
+
+GetCurrentProcessExplicitAppUserModelID
+IsOS
+SetCurrentProcessExplicitAppUserModelID
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shcore-unicodeansi-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shcore-unicodeansi-l1-1-0.def
new file mode 100644
index 0000000000..90f5ec35a3
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shcore-unicodeansi-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-shcore-unicodeansi-l1-1-0
+
+EXPORTS
+
+SHAnsiToAnsi
+SHAnsiToUnicode
+SHUnicodeToAnsi
+SHUnicodeToUnicode
diff --git a/lib/libc/mingw/lib-common/api-ms-win-shell-shdirectory-l1-1-0.def b/lib/libc/mingw/lib-common/api-ms-win-shell-shdirectory-l1-1-0.def
new file mode 100644
index 0000000000..862bba88ec
--- /dev/null
+++ b/lib/libc/mingw/lib-common/api-ms-win-shell-shdirectory-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shell-shdirectory-l1-1-0
+
+EXPORTS
+
+SHCreateDirectory
+SHCreateDirectoryExA
+SHCreateDirectoryExW
diff --git a/lib/libc/mingw/lib-common/htui.def b/lib/libc/mingw/lib-common/htui.def
index a778a275bd..24c3f057dd 100644
--- a/lib/libc/mingw/lib-common/htui.def
+++ b/lib/libc/mingw/lib-common/htui.def
@@ -6,7 +6,6 @@
;
LIBRARY htUI.dll
EXPORTS
-DllMain
HTUI_ColorAdjustment
HTUI_ColorAdjustmentA
HTUI_ColorAdjustmentW
diff --git a/lib/libc/mingw/lib-common/keymgr.def b/lib/libc/mingw/lib-common/keymgr.def
index db865ef3e2..039d846003 100644
--- a/lib/libc/mingw/lib-common/keymgr.def
+++ b/lib/libc/mingw/lib-common/keymgr.def
@@ -7,7 +7,6 @@
LIBRARY KEYMGR.dll
EXPORTS
CPlApplet
-DllMain
KRShowKeyMgr
PRShowRestoreFromMsginaW
PRShowRestoreWizardExW
diff --git a/lib/libc/mingw/lib-common/photowiz.def b/lib/libc/mingw/lib-common/photowiz.def
index 057a165138..3298eea87a 100644
--- a/lib/libc/mingw/lib-common/photowiz.def
+++ b/lib/libc/mingw/lib-common/photowiz.def
@@ -10,6 +10,5 @@ UsePPWForPrintTo
DllCanUnloadNow
DllGetClassObject
DllInstall
-DllMain
DllRegisterServer
DllUnregisterServer
diff --git a/lib/libc/mingw/lib-common/prntvpt.def b/lib/libc/mingw/lib-common/prntvpt.def
index 5a2d512897..efaa3a0100 100644
--- a/lib/libc/mingw/lib-common/prntvpt.def
+++ b/lib/libc/mingw/lib-common/prntvpt.def
@@ -18,7 +18,6 @@ ConvertPrintTicketToDevModeThunk
ConvertPrintTicketToDevModeThunk2
DllCanUnloadNow
DllGetClassObject
-DllMain
DllRegisterServer
DllUnregisterServer
GetDeviceDefaultPrintTicketThunk
diff --git a/lib/libc/mingw/lib-common/shlwapi.def b/lib/libc/mingw/lib-common/shlwapi.def
index 850fa7f920..a298a912ff 100644
--- a/lib/libc/mingw/lib-common/shlwapi.def
+++ b/lib/libc/mingw/lib-common/shlwapi.def
@@ -5,103 +5,84 @@
;
LIBRARY "SHLWAPI.dll"
EXPORTS
-ParseURLA
-ParseURLW
-SHAllocShared
-SHLockShared
-SHUnlockShared
-SHFreeShared
-SHCreateMemStream
-GetAcceptLanguagesA
-GetAcceptLanguagesW
-SHCreateThread
-IsCharSpaceW
-StrCmpNCA
-StrCmpNCW
-StrCmpNICA
-StrCmpNICW
-StrCmpCA
-StrCmpCW
-StrCmpICA
-StrCmpICW
-IUnknown_QueryStatus
-IUnknown_Exec
-ConnectToConnectionPoint
-IUnknown_AtomicRelease
-IUnknown_GetWindow
-IUnknown_SetSite
-IUnknown_QueryService
-IStream_Read
-SHMessageBoxCheckA
-SHMessageBoxCheckW
-IUnknown_Set
-SHStripMneumonicA
-SHIsChildOrSelf
-IStream_Write
-IStream_Reset
-IStream_Size
-SHAnsiToUnicode
-SHUnicodeToAnsi
-SHUnicodeToAnsiCP
-QISearch
-SHStripMneumonicW
-SHPinDllOfCLSID
-IUnknown_GetSite
-GUIDFromStringW
-WhichPlatform
-SHCreateWorkerWindowW
-SHRegGetIntW
-SHPackDispParamsV
-SHAnsiToAnsi
-SHUnicodeToUnicode
-SHFormatDateTimeA
-SHFormatDateTimeW
-MLLoadLibraryA
-MLLoadLibraryW
-ShellMessageBoxW
-MLFreeLibrary
-SHSendMessageBroadcastA
-SHSendMessageBroadcastW
-IsOS
-PathFileExistsAndAttributesW
-UrlFixupW
-SHRunIndirectRegClientCommand
-SHLoadIndirectString
-IStream_ReadPidl
-IStream_WritePidl
-SHGetViewStatePropertyBag
-IsInternetESCEnabled
-SHPropertyBag_ReadStrAlloc
-IStream_Copy
-DelayLoadFailureHook
-SHPropertyBag_WriteBSTR
+AssocCopyVerbs
AssocCreate
AssocGetPerceivedType
AssocIsDangerous
+AssocMakeApplicationByKeyW
+AssocMakeProgid
AssocQueryKeyA
AssocQueryKeyW
AssocQueryStringA
AssocQueryStringByKeyA
AssocQueryStringByKeyW
AssocQueryStringW
+CalculateAspectRatio
+CharUpperNoDBCSW
ChrCmpIA
ChrCmpIW
ColorAdjustLuma
ColorHLSToRGB
-IStream_ReadStr
-IStream_WriteStr
ColorRGBToHLS
+ConnectToConnectionPoint
+DelayLoadFailureHook
DllGetVersion
+DoesStringRoundTripW
+DupWideToAnsi
+FDSA_DeleteItem
+FDSA_Initialize
+FDSA_InsertItem
+FixSlashesAndColonW
+GetAcceptLanguagesA
+GetAcceptLanguagesW
GetMenuPosFromID
+GUIDFromStringW
HashData
-SHCreateThreadWithHandle
IntlStrEqWorkerA
IntlStrEqWorkerW
IsCharSpaceA
+IsCharSpaceW
+IShellFolder_GetDisplayNameOf
+IShellFolder_ParseDisplayName
+IsInternetESCEnabled
+IsOS
+IStream_Copy
+IStream_Read
+IStream_ReadPidl
+IStream_ReadStr
+IStream_Reset
+IStream_Size
+IStream_Write
+IStream_WritePidl
+IStream_WriteStr
+IUnknown_AtomicRelease
+IUnknown_CPContainerInvokeIndirect
+IUnknown_EnableModeless
+IUnknown_Exec
+IUnknown_GetSite
+IUnknown_GetWindow
+IUnknown_HasFocusIO
+IUnknown_OnFocusChangeIS
+IUnknown_QueryService
+IUnknown_QueryServiceExec
+IUnknown_QueryServiceForWebBrowserApp
+IUnknown_QueryServicePropertyBag
+IUnknown_QueryStatus
+IUnknown_Set
+IUnknown_SetOwner
+IUnknown_SetSite
+IUnknown_TranslateAcceleratorIO
+IUnknown_UIActivateIO
+MayExecForward
+MayQSForward
+MIME_GetExtensionW
+MLFreeLibrary
+MLLoadLibraryA
+MLLoadLibraryW
+ParseURLA
+ParseURLW
PathAddBackslashA
PathAddBackslashW
-SHRegGetValueFromHKCUHKLM
-SHRegGetBoolValueFromHKCUHKLM
PathAddExtensionA
PathAddExtensionW
PathAppendA
@@ -122,6 +103,10 @@ PathCreateFromUrlA
PathCreateFromUrlAlloc
PathCreateFromUrlW
PathFileExistsA
+PathFileExistsAndAttributesA
+PathFileExistsAndAttributesW
+PathFileExistsDefExtAndAttributesW
+PathFileExistsDefExtW
PathFileExistsW
PathFindExtensionA
PathFindExtensionW
@@ -130,6 +115,7 @@ PathFindFileNameW
PathFindNextComponentA
PathFindNextComponentW
PathFindOnPathA
+PathFindOnPathExW
PathFindOnPathW
PathFindSuffixArrayA
PathFindSuffixArrayW
@@ -205,23 +191,38 @@ PathStripPathA
PathStripPathW
PathStripToRootA
PathStripToRootW
-PathUnExpandEnvStringsA
-PathUnExpandEnvStringsW
PathUndecorateA
PathUndecorateW
+PathUnExpandEnvStringsA
+PathUnExpandEnvStringsForUserW
+PathUnExpandEnvStringsW
PathUnmakeSystemFolderA
PathUnmakeSystemFolderW
PathUnquoteSpacesA
PathUnquoteSpacesW
+QISearch
+QuerySourceCreateFromKey
+SHAddDataBlock
+SHAllocShared
+SHAnsiToAnsi
+SHAnsiToUnicode
SHAutoComplete
+SHClearViewStatePropertyBag
SHCopyKeyA
SHCopyKeyW
+SHCreateMemStream
+SHCreatePropertyBagOnProfileSection
+SHCreatePropertyBagOnRegKey
+SHCreatePropertyStoreOnXML
SHCreateShellPalette
SHCreateStreamOnFileA
SHCreateStreamOnFileEx
SHCreateStreamOnFileW
SHCreateStreamWrapper
+SHCreateThread
SHCreateThreadRef
+SHCreateThreadWithHandle
+SHCreateWorkerWindowW
SHDeleteEmptyKeyA
SHDeleteEmptyKeyW
SHDeleteKeyA
@@ -230,23 +231,63 @@ SHDeleteOrphanKeyA
SHDeleteOrphanKeyW
SHDeleteValueA
SHDeleteValueW
+ShellMessageBoxA
+ShellMessageBoxW
SHEnumKeyExA
SHEnumKeyExW
SHEnumValueA
SHEnumValueW
+SHExpandEnvironmentStringsAlloc
+SHExpandEnvironmentStringsForUserW
+SHFillRectClr
+SHFindDataBlock
+SHFormatDateTimeA
+SHFormatDateTimeW
+SHForwardContextMenuMsg
+SHFreeDataBlockList
+SHFreeShared
+SHGetCurColorRes
+SHGetFileDescriptionW
+SHGetIniStringW
SHGetInverseCMAP
+SHGetMenuFromID
+SHGetPerScreenResName
+SHGetRestriction
+SHGetShellKeyEx
SHGetThreadRef
SHGetValueA
SHGetValueW
+SHGetViewStatePropertyBag
+SHInvokeCommand
+SHInvokeCommandOnContextMenu
+SHInvokeCommandOnContextMenuEx
+SHInvokeCommandWithFlagsAndSite
+SHInvokeDefaultCommand
+SHIsChildOrSelf
+SHIsExpandableFolder
SHIsLowMemoryMachine
+SHLoadFromPropertyBag
+SHLoadIndirectString
+SHLoadMenuPopup
+SHLockShared
+SHMenuIndexFromID
+SHMessageBoxCheckA
+SHMessageBoxCheckExW
+SHMessageBoxCheckW
SHOpenRegStream2A
SHOpenRegStream2W
SHOpenRegStreamA
SHOpenRegStreamW
+SHPackDispParamsV
+SHPinDllOfCLSID
+SHPropertyBag_ReadStrAlloc
+SHPropertyBag_WriteBSTR
SHQueryInfoKeyA
SHQueryInfoKeyW
SHQueryValueExA
SHQueryValueExW
+SHQueueUserWorkItem
+SHReadDataBlockList
SHRegCloseUSKey
SHRegCreateUSKeyA
SHRegCreateUSKeyW
@@ -261,12 +302,17 @@ SHRegEnumUSValueA
SHRegEnumUSValueW
SHRegGetBoolUSValueA
SHRegGetBoolUSValueW
+SHRegGetBoolValueFromHKCUHKLM
+SHRegGetIntW
SHRegGetPathA
SHRegGetPathW
SHRegGetUSValueA
SHRegGetUSValueW
SHRegGetValueA
+SHRegGetValueFromHKCUHKLM
SHRegGetValueW
+SHRegisterClassW
+SHRegisterValidateTemplate
SHRegOpenUSKeyA
SHRegOpenUSKeyW
SHRegQueryInfoUSKeyA
@@ -279,19 +325,36 @@ SHRegSetUSValueA
SHRegSetUSValueW
SHRegWriteUSValueA
SHRegWriteUSValueW
-SHRegisterValidateTemplate
SHReleaseThreadRef
+SHRemoveDataBlock
+SHRemoveDefaultDialogFont
+SHRestrictionLookup
+SHRunIndirectRegClientCommand
+SHSendMessageBroadcastA
+SHSendMessageBroadcastW
+SHSetDefaultDialogFont
+SHSetIniStringW
SHSetThreadRef
SHSetValueA
SHSetValueW
+SHSetWindowBits
+SHSimulateDrop
SHSkipJunction
SHStrDupA
SHStrDupW
-ShellMessageBoxA
-StrCSpnA
-StrCSpnIA
-StrCSpnIW
-StrCSpnW
+SHStringFromGUIDW
+SHStripMneumonicA
+SHStripMneumonicW
+SHUnicodeToAnsi
+SHUnicodeToAnsiCP
+SHUnicodeToUnicode
+SHUnlockShared
+SHWeakQueryInterface
+SHWeakReleaseInterface
+SHWriteDataBlockList
+SKAllocValueW
+SKGetValueW
+SKSetValueW
StrCatBuffA
StrCatBuffW
StrCatChainW
@@ -302,15 +365,27 @@ StrChrIW
StrChrNIW
StrChrNW
StrChrW
+StrCmpCA
+StrCmpCW
+StrCmpICA
+StrCmpICW
StrCmpIW
StrCmpLogicalW
StrCmpNA
+StrCmpNCA
+StrCmpNCW
StrCmpNIA
+StrCmpNICA
+StrCmpNICW
StrCmpNIW
StrCmpNW
StrCmpW
StrCpyNW
StrCpyW
+StrCSpnA
+StrCSpnIA
+StrCSpnIW
+StrCSpnW
StrDupA
StrDupW
StrFormatByteSize64A
@@ -331,13 +406,13 @@ StrRChrA
StrRChrIA
StrRChrIW
StrRChrW
-StrRStrIA
-StrRStrIW
StrRetToBSTR
StrRetToBufA
StrRetToBufW
StrRetToStrA
StrRetToStrW
+StrRStrIA
+StrRStrIW
StrSpnA
StrSpnW
StrStrA
@@ -366,6 +441,7 @@ UrlCreateFromPathA
UrlCreateFromPathW
UrlEscapeA
UrlEscapeW
+UrlFixupW
UrlGetLocationA
UrlGetLocationW
UrlGetPartA
@@ -380,7 +456,9 @@ UrlIsOpaqueW
UrlIsW
UrlUnescapeA
UrlUnescapeW
+WhichPlatform
wnsprintfA
wnsprintfW
wvnsprintfA
wvnsprintfW
+ZoneCheckUrlExW
diff --git a/lib/libc/mingw/lib-common/wsmsvc.def b/lib/libc/mingw/lib-common/wsmsvc.def
new file mode 100644
index 0000000000..ced290c77d
--- /dev/null
+++ b/lib/libc/mingw/lib-common/wsmsvc.def
@@ -0,0 +1,3675 @@
+LIBRARY "WsmSvc.DLL"
+EXPORTS
+??0?$AutoCleanup@V?$AutoDelete@D@@PEAD@@QEAA@PEAD@Z
+??0?$AutoCleanup@V?$AutoDelete@G@@PEAG@@QEAA@PEAG@Z
+??0?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PEAUIPRange@CWSManIPFilter@@@@QEAA@PEAUIPRange@CWSManIPFilter@@@Z
+??0?$AutoCleanup@V?$AutoDelete@U_SID@@@@PEAU_SID@@@@QEAA@PEAU_SID@@@Z
+??0?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PEAU_WSMAN_STREAM_ID_SET@@@@QEAA@PEAU_WSMAN_STREAM_ID_SET@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PEAV?$Handle@VISubscription@@@@@@QEAA@PEAV?$Handle@VISubscription@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@QEAA@PEAV?$SafeSet@PEAVCCertMapping@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@QEAA@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@PEAV?$SimpleStack@VCListenerOperation@@@@@@QEAA@PEAV?$SimpleStack@VCListenerOperation@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@PEAV?$SimpleStack@VShellHostEntry@@@@@@QEAA@PEAV?$SimpleStack@VShellHostEntry@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAA@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QEAA@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEAA@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@QEAA@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PEAVAdminSid@CSecurity@@@@QEAA@PEAVAdminSid@CSecurity@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@@QEAA@PEAVBlockedRecord@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAA@PEAVCBaseConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PEAVCCertMapping@@@@QEAA@PEAVCCertMapping@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PEAVCConfigChangeSource@@@@QEAA@PEAVCConfigChangeSource@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PEAVCListenerSettings@@@@QEAA@PEAVCListenerSettings@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PEAVCObserverConfigChangeErrors@@@@QEAA@PEAVCObserverConfigChangeErrors@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@@QEAA@PEAVCServiceWatcher@CServiceConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PEAVCShellUriSettings@@@@QEAA@PEAVCShellUriSettings@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAA@PEAVCWSManEPR@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@@QEAA@PEAVCWSManResource@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PEAVCertHash@@@@QEAA@PEAVCertHash@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@QEAA@PEAVConfigUpdate@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAA@PEAVEnumSinkEx@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PEAVEventHandler@WSMan@@@@QEAA@PEAVEventHandler@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PEAVExpiredOperationIdRecord@@@@QEAA@PEAVExpiredOperationIdRecord@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PEAVGPApiManager@@@@QEAA@PEAVGPApiManager@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAA@PEAVGeneralSinkEx@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PEAVIChannelObserverFactory@@@@QEAA@PEAVIChannelObserverFactory@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEAA@PEAVIQueryDASHSMASHInterface@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEAA@PEAVISpecification@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PEAVInteractiveSid@CSecurity@@@@QEAA@PEAVInteractiveSid@CSecurity@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PEAVIpHlpApiDllLoader@@@@QEAA@PEAVIpHlpApiDllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PEAVMachineName@@@@QEAA@PEAVMachineName@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PEAVNetworkServiceSid@CSecurity@@@@QEAA@PEAVNetworkServiceSid@CSecurity@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PEAVNtDsApiDllLoader@@@@QEAA@PEAVNtDsApiDllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAA@PEAVOptionValue@SessionOptions@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@@QEAA@PEAVPacketCreator@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PEAVPacketParser@@@@QEAA@PEAVPacketParser@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PEAVResources@Locale@@@@QEAA@PEAVResources@Locale@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PEAVRunAsConfiguration@@@@QEAA@PEAVRunAsConfiguration@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@@QEAA@PEAVSecurityEntry@Catalog@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PEAVSendPacketArgs@RobustConnectionBuffer@@@@QEAA@PEAVSendPacketArgs@RobustConnectionBuffer@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@@QEAA@PEAVServiceSoapProcessor@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PEAVShell32DllLoader@@@@QEAA@PEAVShell32DllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PEAVShlWApiDllLoader@@@@QEAA@PEAVShlWApiDllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PEAVSubscriptionEnumerator@@@@QEAA@PEAVSubscriptionEnumerator@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PEAVSubscriptionManager@@@@QEAA@PEAVSubscriptionManager@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEAA@PEAVTSTRBUFFER@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PEAVUniqueStringOverflow@@@@QEAA@PEAVUniqueStringOverflow@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PEAVUser32DllLoader@@@@QEAA@PEAVUser32DllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PEAVWSMANCONFIGTABLE_IDENTITY@@@@QEAA@PEAVWSMANCONFIGTABLE_IDENTITY@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PEAVWSManMemCryptManager@@@@QEAA@PEAVWSManMemCryptManager@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEAA@PEAVWmiEnumContext@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@QEAA@PEAVXmlReader@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PEBG@@QEAA@PEBG@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@D@@PEAD@@QEAA@PEAD@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEAA@PEAE@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEAA@PEAG@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@H@@PEAH@@QEAA@PEAH@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEAA@PEAPEAG@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEAA@PEAPEBG@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PEAU_CONFIG_UPDATE@@@@QEAA@PEAU_CONFIG_UPDATE@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAA@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEAA@PEAU_WINRS_RUN_COMMAND_ARG@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PEAU_WSMAN_OPTION@@@@QEAA@PEAU_WSMAN_OPTION@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@X@@PEAX@@QEAA@PEAX@Z
+??0?$AutoCleanup@V?$AutoFree@E@@PEAE@@QEAA@PEAE@Z
+??0?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@@QEAA@PEAVPacket@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PEAUIAppHostAdminManager@@@@QEAA@PEAUIAppHostAdminManager@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PEAUIAppHostChildElementCollection@@@@QEAA@PEAUIAppHostChildElementCollection@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PEAUIAppHostConfigException@@@@QEAA@PEAUIAppHostConfigException@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PEAUIAppHostElement@@@@QEAA@PEAUIAppHostElement@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PEAUIAppHostElementCollection@@@@QEAA@PEAUIAppHostElementCollection@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PEAUIAppHostProperty@@@@QEAA@PEAUIAppHostProperty@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PEAUIAppHostPropertyCollection@@@@QEAA@PEAUIAppHostPropertyCollection@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEAA@PEAUIClientSecurity@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEAA@PEAUIEnumWbemClassObject@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEAA@PEAUIErrorInfo@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEAA@PEAUIUnknown@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEAA@PEAUIWbemClassObject@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEAA@PEAUIWbemContext@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEAA@PEAUIWbemLocator@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEAA@PEAUIWbemObjectTextSrc@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEAA@PEAUIWbemPath@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEAA@PEAUIWbemPathKeyList@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEAA@PEAUIWbemQualifierSet@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEAA@PEAUIWbemQuery@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEAA@PEAUIWbemServices@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PEAVApplication@Client@WSMan@@@@QEAA@PEAVApplication@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAA@PEAVCBaseConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@QEAA@PEAVCClientConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PEAVCCommonConfigSettings@@@@QEAA@PEAVCCommonConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PEAVCConfigCacheMap@CBaseConfigCache@@@@QEAA@PEAVCConfigCacheMap@CBaseConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@QEAA@PEAVCConfigManager@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PEAVCRemoteOperation@@@@QEAA@PEAVCRemoteOperation@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@QEAA@PEAVCRemoteSession@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@QEAA@PEAVCRequestContext@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PEAVCServiceCommonConfigSettings@@@@QEAA@PEAVCServiceCommonConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PEAVCServiceConfigCache@@@@QEAA@PEAVCServiceConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@@QEAA@PEAVCServiceConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAA@PEAVCWSManEPR@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PEAVCWSManGroupPolicyCache@@@@QEAA@PEAVCWSManGroupPolicyCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@@QEAA@PEAVCWSManGroupPolicyManager@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PEAVCWSManObject@@@@QEAA@PEAVCWSManObject@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@QEAA@PEAVCWSManResource@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEAA@PEAVCWinRSPluginConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@@QEAA@PEAVCWinRSPluginConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PEAVCommand@Client@WSMan@@@@QEAA@PEAVCommand@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PEAVConfigNotification@@@@QEAA@PEAVConfigNotification@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PEAVConnectShellOperation@Client@WSMan@@@@QEAA@PEAVConnectShellOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PEAVCreateShellOperation@Client@WSMan@@@@QEAA@PEAVCreateShellOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PEAVDeleteShellOperation@Client@WSMan@@@@QEAA@PEAVDeleteShellOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PEAVDisconnectOperation@Client@WSMan@@@@QEAA@PEAVDisconnectOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAA@PEAVEnumSinkEx@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAA@PEAVGeneralSinkEx@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PEAVIISConfigSettings@@@@QEAA@PEAVIISConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PEAVIPCSoapProcessor@@@@QEAA@PEAVIPCSoapProcessor@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEAA@PEAVIRequestContext@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEAA@XZ
+??0?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PEAVISubscription@@@@QEAA@PEAVISubscription@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@QEAA@PEAVInboundRequestDetails@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PEAVReceiveOperation@Client@WSMan@@@@QEAA@PEAVReceiveOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PEAVReconnectOperation@Client@WSMan@@@@QEAA@PEAVReconnectOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PEAVSendOperation@Client@WSMan@@@@QEAA@PEAVSendOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAA@PEAVShell@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VShellInfo@@@@PEAVShellInfo@@@@QEAA@PEAVShellInfo@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PEAVSignalOperation@Client@WSMan@@@@QEAA@PEAVSignalOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@@QEAA@PEAVUserRecord@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PEAVWSManHttpListener@@@@QEAA@PEAVWSManHttpListener@@@Z
+??0?$AutoCleanup@V?$AutoReleaseEx@VHostMappingTableEntry@@@@PEAVHostMappingTableEntry@@@@QEAA@PEAVHostMappingTableEntry@@@Z
+??0?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAA@PEAVShell@Client@WSMan@@@Z
+??0?$AutoCleanup@VAutoBstr@@PEAG@@QEAA@PEAG@Z
+??0?$AutoCleanup@VAutoBstr@@PEAG@@QEAA@XZ
+??0?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEAA@PEAG@Z
+??0?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEAA@XZ
+??0?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@QEAA@PEBU_CERT_CONTEXT@@@Z
+??0?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@QEAA@XZ
+??0?$AutoCleanup@VAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@@QEAA@PEBU_CERT_CHAIN_CONTEXT@@@Z
+??0?$AutoCleanup@VAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@@QEAA@XZ
+??0?$AutoCleanup@VAutoCoTaskMemFree@@PEAX@@QEAA@PEAX@Z
+??0?$AutoCleanup@VAutoCoTaskMemFree@@PEAX@@QEAA@XZ
+??0?$AutoCleanup@VAutoFwXmlCloseParser@@PEAX@@QEAA@PEAX@Z
+??0?$AutoCleanup@VAutoFwXmlCloseParser@@PEAX@@QEAA@XZ
+??0?$AutoCleanup@VAutoHandle@@PEAX@@QEAA@PEAX@Z
+??0?$AutoCleanup@VAutoHandle@@PEAX@@QEAA@XZ
+??0?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEAA@PEAX@Z
+??0?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEAA@XZ
+??0?$AutoCleanup@VAutoLibrary@@PEAUHINSTANCE__@@@@QEAA@PEAUHINSTANCE__@@@Z
+??0?$AutoCleanup@VAutoLibrary@@PEAUHINSTANCE__@@@@QEAA@XZ
+??0?$AutoCleanup@VAutoLocalFree@@PEAX@@QEAA@PEAX@Z
+??0?$AutoCleanup@VAutoLocalFree@@PEAX@@QEAA@XZ
+??0?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEAA@PEAU_MI_Class@@@Z
+??0?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEAA@XZ
+??0?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@QEAA@PEAU_MI_Instance@@@Z
+??0?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@QEAA@XZ
+??0?$AutoCleanup@VAutoObject@@PEAUWSMAN_OBJECT@@@@QEAA@PEAUWSMAN_OBJECT@@@Z
+??0?$AutoCleanup@VAutoObject@@PEAUWSMAN_OBJECT@@@@QEAA@XZ
+??0?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@QEAA@PEAUHKEY__@@@Z
+??0?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@QEAA@XZ
+??0?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@QEAA@PEAX@Z
+??0?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@QEAA@XZ
+??0?$AutoCleanup@VAutoWaitHandle@@PEAX@@QEAA@PEAX@Z
+??0?$AutoCleanup@VAutoWaitHandle@@PEAX@@QEAA@XZ
+??0?$AutoDelete@D@@QEAA@XZ
+??0?$AutoDelete@G@@QEAA@PEAG@Z
+??0?$AutoDelete@G@@QEAA@XZ
+??0?$AutoDelete@UIPRange@CWSManIPFilter@@@@QEAA@XZ
+??0?$AutoDelete@U_SID@@@@QEAA@PEAU_SID@@@Z
+??0?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@QEAA@PEAU_WSMAN_STREAM_ID_SET@@@Z
+??0?$AutoDelete@V?$Handle@VISubscription@@@@@@QEAA@PEAV?$Handle@VISubscription@@@@@Z
+??0?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA@XZ
+??0?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA@XZ
+??0?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@QEAA@PEAV?$SafeSet@PEAVCCertMapping@@@@@Z
+??0?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@QEAA@XZ
+??0?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@QEAA@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@Z
+??0?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@QEAA@XZ
+??0?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA@XZ
+??0?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@QEAA@XZ
+??0?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@QEAA@XZ
+??0?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAA@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@Z
+??0?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAA@XZ
+??0?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QEAA@XZ
+??0?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEAA@XZ
+??0?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@QEAA@XZ
+??0?$AutoDelete@VAdminSid@CSecurity@@@@QEAA@PEAVAdminSid@CSecurity@@@Z
+??0?$AutoDelete@VBlockedRecord@@@@QEAA@XZ
+??0?$AutoDelete@VCBaseConfigCache@@@@QEAA@PEAVCBaseConfigCache@@@Z
+??0?$AutoDelete@VCCertMapping@@@@QEAA@PEAVCCertMapping@@@Z
+??0?$AutoDelete@VCConfigChangeSource@@@@QEAA@XZ
+??0?$AutoDelete@VCListenerSettings@@@@QEAA@PEAVCListenerSettings@@@Z
+??0?$AutoDelete@VCObserverConfigChangeErrors@@@@QEAA@XZ
+??0?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@QEAA@PEAVCServiceWatcher@CServiceConfigCache@@@Z
+??0?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@QEAA@XZ
+??0?$AutoDelete@VCShellUriSettings@@@@QEAA@PEAVCShellUriSettings@@@Z
+??0?$AutoDelete@VCWSManEPR@@@@QEAA@PEAVCWSManEPR@@@Z
+??0?$AutoDelete@VCWSManResource@@@@QEAA@PEAVCWSManResource@@@Z
+??0?$AutoDelete@VCWSManResource@@@@QEAA@XZ
+??0?$AutoDelete@VCertHash@@@@QEAA@PEAVCertHash@@@Z
+??0?$AutoDelete@VCertHash@@@@QEAA@XZ
+??0?$AutoDelete@VConfigUpdate@@@@QEAA@PEAVConfigUpdate@@@Z
+??0?$AutoDelete@VConfigUpdate@@@@QEAA@XZ
+??0?$AutoDelete@VEnumSinkEx@@@@QEAA@PEAVEnumSinkEx@@@Z
+??0?$AutoDelete@VEnumSinkEx@@@@QEAA@XZ
+??0?$AutoDelete@VEventHandler@WSMan@@@@QEAA@PEAVEventHandler@WSMan@@@Z
+??0?$AutoDelete@VExpiredOperationIdRecord@@@@QEAA@PEAVExpiredOperationIdRecord@@@Z
+??0?$AutoDelete@VGPApiManager@@@@QEAA@XZ
+??0?$AutoDelete@VGeneralSinkEx@@@@QEAA@PEAVGeneralSinkEx@@@Z
+??0?$AutoDelete@VGeneralSinkEx@@@@QEAA@XZ
+??0?$AutoDelete@VIChannelObserverFactory@@@@QEAA@PEAVIChannelObserverFactory@@@Z
+??0?$AutoDelete@VIChannelObserverFactory@@@@QEAA@XZ
+??0?$AutoDelete@VIQueryDASHSMASHInterface@@@@QEAA@PEAVIQueryDASHSMASHInterface@@@Z
+??0?$AutoDelete@VIQueryDASHSMASHInterface@@@@QEAA@XZ
+??0?$AutoDelete@VISpecification@@@@QEAA@PEAVISpecification@@@Z
+??0?$AutoDelete@VISpecification@@@@QEAA@XZ
+??0?$AutoDelete@VInteractiveSid@CSecurity@@@@QEAA@PEAVInteractiveSid@CSecurity@@@Z
+??0?$AutoDelete@VIpHlpApiDllLoader@@@@QEAA@PEAVIpHlpApiDllLoader@@@Z
+??0?$AutoDelete@VMachineName@@@@QEAA@PEAVMachineName@@@Z
+??0?$AutoDelete@VNetworkServiceSid@CSecurity@@@@QEAA@PEAVNetworkServiceSid@CSecurity@@@Z
+??0?$AutoDelete@VNtDsApiDllLoader@@@@QEAA@PEAVNtDsApiDllLoader@@@Z
+??0?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@QEAA@PEAVOptionValue@SessionOptions@Client@WSMan@@@Z
+??0?$AutoDelete@VPacketCreator@@@@QEAA@PEAVPacketCreator@@@Z
+??0?$AutoDelete@VPacketCreator@@@@QEAA@XZ
+??0?$AutoDelete@VPacketParser@@@@QEAA@XZ
+??0?$AutoDelete@VResources@Locale@@@@QEAA@PEAVResources@Locale@@@Z
+??0?$AutoDelete@VRunAsConfiguration@@@@QEAA@PEAVRunAsConfiguration@@@Z
+??0?$AutoDelete@VSecurityEntry@Catalog@@@@QEAA@PEAVSecurityEntry@Catalog@@@Z
+??0?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@QEAA@PEAVSendPacketArgs@RobustConnectionBuffer@@@Z
+??0?$AutoDelete@VServiceSoapProcessor@@@@QEAA@XZ
+??0?$AutoDelete@VShell32DllLoader@@@@QEAA@PEAVShell32DllLoader@@@Z
+??0?$AutoDelete@VShlWApiDllLoader@@@@QEAA@PEAVShlWApiDllLoader@@@Z
+??0?$AutoDelete@VSubscriptionEnumerator@@@@QEAA@XZ
+??0?$AutoDelete@VSubscriptionManager@@@@QEAA@PEAVSubscriptionManager@@@Z
+??0?$AutoDelete@VTSTRBUFFER@@@@QEAA@PEAVTSTRBUFFER@@@Z
+??0?$AutoDelete@VTSTRBUFFER@@@@QEAA@XZ
+??0?$AutoDelete@VUniqueStringOverflow@@@@QEAA@XZ
+??0?$AutoDelete@VUser32DllLoader@@@@QEAA@PEAVUser32DllLoader@@@Z
+??0?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@QEAA@PEAVWSMANCONFIGTABLE_IDENTITY@@@Z
+??0?$AutoDelete@VWSManMemCryptManager@@@@QEAA@PEAVWSManMemCryptManager@@@Z
+??0?$AutoDelete@VWmiEnumContext@@@@QEAA@PEAVWmiEnumContext@@@Z
+??0?$AutoDelete@VWmiEnumContext@@@@QEAA@XZ
+??0?$AutoDelete@VXmlReader@@@@QEAA@PEAVXmlReader@@@Z
+??0?$AutoDelete@VXmlReader@@@@QEAA@XZ
+??0?$AutoDeleteVector@$$CBG@@QEAA@XZ
+??0?$AutoDeleteVector@D@@QEAA@PEAD@Z
+??0?$AutoDeleteVector@D@@QEAA@XZ
+??0?$AutoDeleteVector@E@@QEAA@PEAE@Z
+??0?$AutoDeleteVector@E@@QEAA@XZ
+??0?$AutoDeleteVector@G@@QEAA@PEAG@Z
+??0?$AutoDeleteVector@G@@QEAA@XZ
+??0?$AutoDeleteVector@H@@QEAA@PEAH@Z
+??0?$AutoDeleteVector@PEAG@@QEAA@PEAPEAG@Z
+??0?$AutoDeleteVector@PEAG@@QEAA@XZ
+??0?$AutoDeleteVector@PEBG@@QEAA@PEAPEBG@Z
+??0?$AutoDeleteVector@PEBG@@QEAA@XZ
+??0?$AutoDeleteVector@U_CONFIG_UPDATE@@@@QEAA@XZ
+??0?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAA@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@Z
+??0?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAA@XZ
+??0?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@QEAA@PEAU_WINRS_RUN_COMMAND_ARG@@@Z
+??0?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@QEAA@XZ
+??0?$AutoDeleteVector@U_WSMAN_OPTION@@@@QEAA@PEAU_WSMAN_OPTION@@@Z
+??0?$AutoDeleteVector@U_WSMAN_OPTION@@@@QEAA@XZ
+??0?$AutoDeleteVector@X@@QEAA@PEAX@Z
+??0?$AutoDeleteVector@X@@QEAA@XZ
+??0?$AutoFree@E@@QEAA@PEAE@Z
+??0?$AutoFree@E@@QEAA@XZ
+??0?$AutoLocklessItemRecycle@VPacket@@@@QEAA@PEAVPacket@@@Z
+??0?$AutoLocklessItemRecycle@VPacket@@@@QEAA@XZ
+??0?$AutoRelease@UIAppHostAdminManager@@@@QEAA@PEAUIAppHostAdminManager@@@Z
+??0?$AutoRelease@UIAppHostChildElementCollection@@@@QEAA@XZ
+??0?$AutoRelease@UIAppHostConfigException@@@@QEAA@PEAUIAppHostConfigException@@@Z
+??0?$AutoRelease@UIAppHostElement@@@@QEAA@PEAUIAppHostElement@@@Z
+??0?$AutoRelease@UIAppHostElement@@@@QEAA@XZ
+??0?$AutoRelease@UIAppHostElementCollection@@@@QEAA@XZ
+??0?$AutoRelease@UIAppHostProperty@@@@QEAA@XZ
+??0?$AutoRelease@UIAppHostPropertyCollection@@@@QEAA@XZ
+??0?$AutoRelease@UIClientSecurity@@@@QEAA@PEAUIClientSecurity@@@Z
+??0?$AutoRelease@UIClientSecurity@@@@QEAA@XZ
+??0?$AutoRelease@UIEnumWbemClassObject@@@@QEAA@PEAUIEnumWbemClassObject@@@Z
+??0?$AutoRelease@UIEnumWbemClassObject@@@@QEAA@XZ
+??0?$AutoRelease@UIErrorInfo@@@@QEAA@PEAUIErrorInfo@@@Z
+??0?$AutoRelease@UIErrorInfo@@@@QEAA@XZ
+??0?$AutoRelease@UIUnknown@@@@QEAA@PEAUIUnknown@@@Z
+??0?$AutoRelease@UIUnknown@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemClassObject@@@@QEAA@PEAUIWbemClassObject@@@Z
+??0?$AutoRelease@UIWbemClassObject@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemContext@@@@QEAA@PEAUIWbemContext@@@Z
+??0?$AutoRelease@UIWbemContext@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemLocator@@@@QEAA@PEAUIWbemLocator@@@Z
+??0?$AutoRelease@UIWbemLocator@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemObjectTextSrc@@@@QEAA@PEAUIWbemObjectTextSrc@@@Z
+??0?$AutoRelease@UIWbemObjectTextSrc@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemPath@@@@QEAA@PEAUIWbemPath@@@Z
+??0?$AutoRelease@UIWbemPath@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemPathKeyList@@@@QEAA@PEAUIWbemPathKeyList@@@Z
+??0?$AutoRelease@UIWbemPathKeyList@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemQualifierSet@@@@QEAA@PEAUIWbemQualifierSet@@@Z
+??0?$AutoRelease@UIWbemQualifierSet@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemQuery@@@@QEAA@PEAUIWbemQuery@@@Z
+??0?$AutoRelease@UIWbemQuery@@@@QEAA@XZ
+??0?$AutoRelease@UIWbemServices@@@@QEAA@PEAUIWbemServices@@@Z
+??0?$AutoRelease@UIWbemServices@@@@QEAA@XZ
+??0?$AutoRelease@VApplication@Client@WSMan@@@@QEAA@XZ
+??0?$AutoRelease@VCBaseConfigCache@@@@QEAA@PEAVCBaseConfigCache@@@Z
+??0?$AutoRelease@VCClientConfigSettings@@@@QEAA@PEAVCClientConfigSettings@@@Z
+??0?$AutoRelease@VCClientConfigSettings@@@@QEAA@XZ
+??0?$AutoRelease@VCCommonConfigSettings@@@@QEAA@PEAVCCommonConfigSettings@@@Z
+??0?$AutoRelease@VCCommonConfigSettings@@@@QEAA@XZ
+??0?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@QEAA@PEAVCConfigCacheMap@CBaseConfigCache@@@Z
+??0?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@QEAA@XZ
+??0?$AutoRelease@VCConfigManager@@@@QEAA@PEAVCConfigManager@@@Z
+??0?$AutoRelease@VCConfigManager@@@@QEAA@XZ
+??0?$AutoRelease@VCRemoteOperation@@@@QEAA@PEAVCRemoteOperation@@@Z
+??0?$AutoRelease@VCRemoteSession@@@@QEAA@PEAVCRemoteSession@@@Z
+??0?$AutoRelease@VCRemoteSession@@@@QEAA@XZ
+??0?$AutoRelease@VCRequestContext@@@@QEAA@PEAVCRequestContext@@@Z
+??0?$AutoRelease@VCRequestContext@@@@QEAA@XZ
+??0?$AutoRelease@VCServiceCommonConfigSettings@@@@QEAA@PEAVCServiceCommonConfigSettings@@@Z
+??0?$AutoRelease@VCServiceCommonConfigSettings@@@@QEAA@XZ
+??0?$AutoRelease@VCServiceConfigCache@@@@QEAA@PEAVCServiceConfigCache@@@Z
+??0?$AutoRelease@VCServiceConfigCache@@@@QEAA@XZ
+??0?$AutoRelease@VCServiceConfigSettings@@@@QEAA@PEAVCServiceConfigSettings@@@Z
+??0?$AutoRelease@VCServiceConfigSettings@@@@QEAA@XZ
+??0?$AutoRelease@VCWSManEPR@@@@QEAA@PEAVCWSManEPR@@@Z
+??0?$AutoRelease@VCWSManEPR@@@@QEAA@XZ
+??0?$AutoRelease@VCWSManGroupPolicyCache@@@@QEAA@PEAVCWSManGroupPolicyCache@@@Z
+??0?$AutoRelease@VCWSManGroupPolicyManager@@@@QEAA@PEAVCWSManGroupPolicyManager@@@Z
+??0?$AutoRelease@VCWSManObject@@@@QEAA@PEAVCWSManObject@@@Z
+??0?$AutoRelease@VCWSManResource@@@@QEAA@PEAVCWSManResource@@@Z
+??0?$AutoRelease@VCWSManResource@@@@QEAA@XZ
+??0?$AutoRelease@VCWinRSPluginConfigCache@@@@QEAA@PEAVCWinRSPluginConfigCache@@@Z
+??0?$AutoRelease@VCWinRSPluginConfigCache@@@@QEAA@XZ
+??0?$AutoRelease@VCWinRSPluginConfigSettings@@@@QEAA@PEAVCWinRSPluginConfigSettings@@@Z
+??0?$AutoRelease@VCommand@Client@WSMan@@@@QEAA@PEAVCommand@Client@WSMan@@@Z
+??0?$AutoRelease@VConfigNotification@@@@QEAA@PEAVConfigNotification@@@Z
+??0?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@QEAA@PEAVConnectShellOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@QEAA@PEAVCreateShellOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@QEAA@PEAVDeleteShellOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@QEAA@PEAVDisconnectOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VEnumSinkEx@@@@QEAA@PEAVEnumSinkEx@@@Z
+??0?$AutoRelease@VEnumSinkEx@@@@QEAA@XZ
+??0?$AutoRelease@VGeneralSinkEx@@@@QEAA@PEAVGeneralSinkEx@@@Z
+??0?$AutoRelease@VGeneralSinkEx@@@@QEAA@XZ
+??0?$AutoRelease@VIISConfigSettings@@@@QEAA@XZ
+??0?$AutoRelease@VIPCSoapProcessor@@@@QEAA@PEAVIPCSoapProcessor@@@Z
+??0?$AutoRelease@VIRequestContext@@@@QEAA@PEAVIRequestContext@@@Z
+??0?$AutoRelease@VIRequestContext@@@@QEAA@XZ
+??0?$AutoRelease@VISubscription@@@@QEAA@PEAVISubscription@@@Z
+??0?$AutoRelease@VInboundRequestDetails@@@@QEAA@XZ
+??0?$AutoRelease@VReceiveOperation@Client@WSMan@@@@QEAA@PEAVReceiveOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VReconnectOperation@Client@WSMan@@@@QEAA@PEAVReconnectOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VSendOperation@Client@WSMan@@@@QEAA@PEAVSendOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VShell@Client@WSMan@@@@QEAA@PEAVShell@Client@WSMan@@@Z
+??0?$AutoRelease@VShellInfo@@@@QEAA@XZ
+??0?$AutoRelease@VSignalOperation@Client@WSMan@@@@QEAA@PEAVSignalOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VUserRecord@@@@QEAA@XZ
+??0?$AutoRelease@VWSManHttpListener@@@@QEAA@PEAVWSManHttpListener@@@Z
+??0?$AutoReleaseEx@VHostMappingTableEntry@@@@QEAA@XZ
+??0?$AutoReleaseEx@VShell@Client@WSMan@@@@QEAA@PEAVShell@Client@WSMan@@@Z
+??0?$ILoader@VAdminSid@CSecurity@@@@QEAA@P8AdminSid@CSecurity@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VEventHandler@WSMan@@@@QEAA@P8EventHandler@WSMan@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VInteractiveSid@CSecurity@@@@QEAA@P8InteractiveSid@CSecurity@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VIpHlpApiDllLoader@@@@QEAA@P8IpHlpApiDllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VMachineName@@@@QEAA@P8MachineName@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VNetworkServiceSid@CSecurity@@@@QEAA@P8NetworkServiceSid@CSecurity@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VNtDsApiDllLoader@@@@QEAA@P8NtDsApiDllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VResources@Locale@@@@QEAA@P8Resources@Locale@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VShell32DllLoader@@@@QEAA@P8Shell32DllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VShlWApiDllLoader@@@@QEAA@P8ShlWApiDllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VSubscriptionManager@@@@QEAA@P8SubscriptionManager@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VUser32DllLoader@@@@QEAA@P8User32DllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$ILoader@VWSManMemCryptManager@@@@QEAA@P8WSManMemCryptManager@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$Loader@VAdminSid@CSecurity@@$00@@QEAA@XZ
+??0?$Loader@VEventHandler@WSMan@@$00@@QEAA@XZ
+??0?$Loader@VInteractiveSid@CSecurity@@$00@@QEAA@XZ
+??0?$Loader@VIpHlpApiDllLoader@@$00@@QEAA@XZ
+??0?$Loader@VMachineName@@$00@@QEAA@XZ
+??0?$Loader@VNetworkServiceSid@CSecurity@@$00@@QEAA@XZ
+??0?$Loader@VNtDsApiDllLoader@@$00@@QEAA@XZ
+??0?$Loader@VResources@Locale@@$0A@@@QEAA@XZ
+??0?$Loader@VShell32DllLoader@@$00@@QEAA@XZ
+??0?$Loader@VShlWApiDllLoader@@$00@@QEAA@XZ
+??0?$Loader@VUser32DllLoader@@$00@@QEAA@XZ
+??0?$Loader@VWSManMemCryptManager@@$00@@QEAA@XZ
+??0?$LoaderSerializer@VAdminSid@CSecurity@@$00@@QEAA@P8AdminSid@CSecurity@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VEventHandler@WSMan@@$00@@QEAA@P8EventHandler@WSMan@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VInteractiveSid@CSecurity@@$00@@QEAA@P8InteractiveSid@CSecurity@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VIpHlpApiDllLoader@@$00@@QEAA@P8IpHlpApiDllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VMachineName@@$00@@QEAA@P8MachineName@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VNetworkServiceSid@CSecurity@@$00@@QEAA@P8NetworkServiceSid@CSecurity@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VNtDsApiDllLoader@@$00@@QEAA@P8NtDsApiDllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VResources@Locale@@$0A@@@QEAA@P8Resources@Locale@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VShell32DllLoader@@$00@@QEAA@P8Shell32DllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VShlWApiDllLoader@@$00@@QEAA@P8ShlWApiDllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VSubscriptionManager@@$01@@QEAA@P8SubscriptionManager@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VUser32DllLoader@@$00@@QEAA@P8User32DllLoader@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VWSManMemCryptManager@@$00@@QEAA@P8WSManMemCryptManager@@EAA_NAEAVIRequestContext@@@Z1@Z
+??0?$PacketElement@K@PacketParser@@QEAA@XZ
+??0?$PacketElement@PEAU_FWXML_ELEMENT@@@PacketParser@@QEAA@XZ
+??0?$PacketElement@PEBG@PacketParser@@QEAA@XZ
+??0?$PacketElement@_K@PacketParser@@QEAA@XZ
+??0?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@QEAA@XZ
+??0?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA@XZ
+??0?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@QEAA@XZ
+??0?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@QEAA@XZ
+??0?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAA@XZ
+??0?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAA@XZ
+??0?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAA@XZ
+??0?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEAA@XZ
+??0?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA@XZ
+??0?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAA@XZ
+??0?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAA@XZ
+??0?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAA@XZ
+??0?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA@XZ
+??0?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAA@XZ
+??0?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEAA@AEAV?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEAA@AEAV?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEAA@AEAV?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Iterator@PEAXUEmpty@@@@QEAA@AEAV?$SafeMap@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@_N@Z
+??0?$SafeMap_Iterator@UPluginKey@@K@@QEAA@AEAV?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@_N@Z
+??0?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@QEAA@AEAV?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@_N@Z
+??0?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEAA@AEAV?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@_N@Z
+??0?$SafeMap_Iterator@VKey@Locale@@K@@QEAA@AEAV?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@_N@Z
+??0?$SafeMap_Iterator@VStringKeyCI@@K@@QEAA@AEAV?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@_N@Z
+??0?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QEAA@AEAV?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@_N@Z
+??0?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEAA@AEAV?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@_N@Z
+??0?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@QEAA@AEAV?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@_N@Z
+??0?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAA@AEAV?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@_N@Z
+??0?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@QEAA@AEAV?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@_N@Z
+??0?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@QEAA@AEBV?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@QEAA@AEBV?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@_N@Z
+??0?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@QEAA@AEBV?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA@AEBV?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@_N@Z
+??0?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@QEAA@AEBV?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@QEAA@AEBV?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@_N@Z
+??0?$SafeMap_Lock@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@QEAA@AEBV?$SafeMap@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@_N@Z
+??0?$SafeMap_Lock@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@QEAA@AEBV?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@_N@Z
+??0?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAA@AEBV?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@_N@Z
+??0?$SafeMap_Lock@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAA@AEBV?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@_N@Z
+??0?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAA@AEBV?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@_N@Z
+??0?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEAA@AEBV?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA@AEBV?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QEAA@AEBV?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAA@AEBV?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAA@AEBV?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAA@AEBV?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@_N@Z
+??0?$SafeMap_Lock@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA@AEBV?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@_N@Z
+??0?$SafeMap_Lock@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAA@AEBV?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@_N@Z
+??0?$SafeSet@PEAVCCertMapping@@@@QEAA@XZ
+??0?$SafeSet@PEAVCListenerOperation@@@@QEAA@XZ
+??0?$SafeSet@PEAVCShellUriSettings@@@@QEAA@XZ
+??0?$SafeSet@PEAX@@QEAA@XZ
+??0?$SafeSet_Iterator@PEAVCCertMapping@@@@QEAA@AEAV?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@_N@Z
+??0?$SafeSet_Iterator@PEAVCCertMapping@@@@QEAA@AEAV?$SafeSet@PEAVCCertMapping@@@@@Z
+??0?$SafeSet_Iterator@PEAVCListenerOperation@@@@QEAA@AEAV?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@_N@Z
+??0?$SafeSet_Iterator@PEAVCListenerOperation@@@@QEAA@AEAV?$SafeSet@PEAVCListenerOperation@@@@@Z
+??0?$SafeSet_Iterator@PEAVCShellUriSettings@@@@QEAA@AEAV?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@_N@Z
+??0?$SafeSet_Iterator@PEAX@@QEAA@AEAV?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@_N@Z
+??0?$SimpleQueue@T_LARGE_INTEGER@@@@QEAA@XZ
+??0AutoBstr@@QEAA@PEAG@Z
+??0AutoBstr@@QEAA@XZ
+??0AutoBstrNoAlloc@@QEAA@PEAG@Z
+??0AutoBstrNoAlloc@@QEAA@XZ
+??0AutoCertContext@@QEAA@PEBU_CERT_CONTEXT@@@Z
+??0AutoCertContext@@QEAA@XZ
+??0AutoChainContext@@QEAA@PEBU_CERT_CHAIN_CONTEXT@@@Z
+??0AutoChainContext@@QEAA@XZ
+??0AutoCoTaskMemFree@@QEAA@PEAX@Z
+??0AutoCoTaskMemFree@@QEAA@XZ
+??0AutoFwXmlCloseParser@@QEAA@PEAX@Z
+??0AutoFwXmlCloseParser@@QEAA@XZ
+??0AutoHandle@@QEAA@PEAX@Z
+??0AutoHandle@@QEAA@XZ
+??0AutoImpersonateUser@@QEAA@PEAX@Z
+??0AutoImpersonateUser@@QEAA@XZ
+??0AutoLibrary@@QEAA@PEAUHINSTANCE__@@@Z
+??0AutoLibrary@@QEAA@XZ
+??0AutoLocalFree@@QEAA@PEAX@Z
+??0AutoLocalFree@@QEAA@XZ
+??0AutoMIClass@@QEAA@PEAU_MI_Class@@@Z
+??0AutoMIClass@@QEAA@XZ
+??0AutoMIInstance@@QEAA@PEAU_MI_Instance@@@Z
+??0AutoMIInstance@@QEAA@XZ
+??0AutoObject@@QEAA@PEAUWSMAN_OBJECT@@@Z
+??0AutoObject@@QEAA@XZ
+??0AutoRegKey@@QEAA@PEAUHKEY__@@@Z
+??0AutoRegKey@@QEAA@XZ
+??0AutoSecurityDescriptor@@QEAA@PEAX@Z
+??0AutoSecurityDescriptor@@QEAA@XZ
+??0AutoWaitHandle@@QEAA@PEAX@Z
+??0AutoWaitHandle@@QEAA@XZ
+??0BufferFormatter@@QEAA@PEAEK@Z
+??0BufferFormatter@@QEAA@XZ
+??0CBaseConfigCache@@IEAA@W4ConfigLocation@CConfigChangeSource@@PEAVFastLock@@PEAVCConfigCacheMap@0@@Z
+??0CClientConfigCache@@AEAA@XZ
+??0CConfigManager@@AEAA@XZ
+??0CErrorContext@@QEAA@_N@Z
+??0CRequestContext@@QEAA@PEBG@Z
+??0CRequestContext@@QEAA@XZ
+??0CResourceAlias@@QEAA@PEBG@Z
+??0CServiceConfigCache@@AEAA@XZ
+??0CServiceWatcher@CServiceConfigCache@@AEAA@PEAV1@PEAVIServiceConfigObserver@@@Z
+??0CWSManCriticalSection@@QEAA@XZ
+??0CWSManCriticalSectionWithConditionVar@@QEAA@XZ
+??0CWSManEPR@@QEAA@H@Z
+??0CWSManGroupPolicyManager@@AEAA@XZ
+??0CWSManResource@@QEAA@H@Z
+??0CWSManResourceNoResourceUri@@QEAA@H@Z
+??0CWSManSecurityUI@@QEAA@XZ
+??0CWinRSPluginConfigCache@@AEAA@XZ
+??0ChildLifeTimeManager@@QEAA@AEBV0@@Z
+??0ChildLifeTimeManager@@QEAA@XZ
+??0CircularBufferFormatter@@QEAA@XZ
+??0ConfigRegistry@@IEAA@XZ
+??0EtwCorrelationHelper@@QEAA@AEBV0@@Z
+??0EventHandler@WSMan@@QEAA@XZ
+??0ExtendedSemantic@@QEAA@K@Z
+??0FastLock@@QEAA@XZ
+??0Fragment@PacketParser@@QEAA@XZ
+??0IConfigChangeObserver@@QEAA@AEBV0@@Z
+??0IConfigChangeObserver@@QEAA@XZ
+??0ILifeTimeMgmt@@QEAA@AEBV0@@Z
+??0ILifeTimeMgmt@@QEAA@XZ
+??0IRequestContext@@IEAA@XZ
+??0IWSManGroupPolicyObserver@@QEAA@AEBV0@@Z
+??0IWSManGroupPolicyObserver@@QEAA@XZ
+??0IWSManGroupPolicyPublisher@@QEAA@AEBV0@@Z
+??0IWSManGroupPolicyPublisher@@QEAA@XZ
+??0Locale@@QEAA@AEBV0@@Z
+??0Locale@@QEAA@PEAVIRequestContext@@@Z
+??0Locale@@QEAA@XZ
+??0MessageId@PacketParser@@QEAA@XZ
+??0NotUnderstandSoapHeader@PacketParser@@QEAA@XZ
+??0OnHTTPInitialize@@QEAA@XZ
+??0OperationId@PacketParser@@QEAA@XZ
+??0OwnLock@@QEAA@AEAVFastLock@@@Z
+??0PacketFormatter@@QEAA@XZ
+??0PacketParser@@QEAA@XZ
+??0RBUFFER@@QEAA@I@Z
+??0RBUFFER@@QEAA@PEAEI@Z
+??0ReferenceParameters@PacketParser@@QEAA@XZ
+??0SBUFFER@@QEAA@XZ
+??0SessionId@PacketParser@@QEAA@XZ
+??0ShareLock@@QEAA@AEAVFastLock@@@Z
+??0SoapSemanticConverter@@QEAA@XZ
+??0TSTRBUFFER@@QEAA@XZ
+??0UserAuthzRecord@@QEAA@$$QEAV0@@Z
+??0UserAuthzRecord@@QEAA@AEBV0@@Z
+??0UserAuthzRecord@@QEAA@XZ
+??0UserRecord@@QEAA@XZ
+??0XmlReader@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@D@@PEAD@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@G@@PEAG@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PEAUIPRange@CWSManIPFilter@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@U_SID@@@@PEAU_SID@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PEAU_WSMAN_STREAM_ID_SET@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PEAV?$Handle@VISubscription@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@PEAV?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCollector@@@@@@PEAV?$SafeSet_Iterator@PEAVCollector@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVHostOperation@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@PEAV?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@PEAV?$SimpleStack@VCListenerOperation@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@PEAV?$SimpleStack@VShellHostEntry@@@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$queue@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@PEAV?$queue@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVCWSManRequest@@V?$transport_allocator@PEAVCWSManRequest@@@@@std@@@@PEAV?$vector@PEAVCWSManRequest@@V?$transport_allocator@PEAVCWSManRequest@@@@@std@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVWSManHttpSenderConnection@@V?$transport_allocator@PEAVWSManHttpSenderConnection@@@@@std@@@@PEAV?$vector@PEAVWSManHttpSenderConnection@@V?$transport_allocator@PEAVWSManHttpSenderConnection@@@@@std@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PEAVAdminSid@CSecurity@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PEAVCCertMapping@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PEAVCConfigChangeSource@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PEAVCListenerSettings@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PEAVCObserverConfigChangeErrors@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PEAVCShellUriSettings@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PEAVCertHash@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PEAVEventHandler@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PEAVExpiredOperationIdRecord@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PEAVGPApiManager@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PEAVIChannelObserverFactory@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PEAVInteractiveSid@CSecurity@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PEAVIpHlpApiDllLoader@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PEAVMachineName@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@PEAVMasterReceiveData@CListenerReceive@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PEAVNetworkServiceSid@CSecurity@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PEAVNtDsApiDllLoader@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PEAVPacketParser@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PEAVResources@Locale@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PEAVRunAsConfiguration@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PEAVSendPacketArgs@RobustConnectionBuffer@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PEAVShell32DllLoader@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PEAVShlWApiDllLoader@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PEAVSubscriptionEnumerator@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PEAVSubscriptionManager@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PEAVUniqueStringOverflow@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PEAVUser32DllLoader@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PEAVWSMANCONFIGTABLE_IDENTITY@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PEAVWSManMemCryptManager@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PEBG@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@D@@PEAD@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@H@@PEAH@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PEAU_CONFIG_UPDATE@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PEAU_WSMAN_OPTION@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@X@@PEAX@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoFree@E@@PEAE@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PEAUIAppHostAdminManager@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PEAUIAppHostChildElementCollection@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PEAUIAppHostConfigException@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PEAUIAppHostElement@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PEAUIAppHostElementCollection@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PEAUIAppHostProperty@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PEAUIAppHostPropertyCollection@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PEAVApplication@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCClientConfigCache@@@@PEAVCClientConfigCache@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PEAVCCommonConfigSettings@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PEAVCConfigCacheMap@CBaseConfigCache@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCListenerCommand@@@@PEAVCListenerCommand@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCListenerMasterOperation@@@@PEAVCListenerMasterOperation@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCListenerReceive@@@@PEAVCListenerReceive@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCListenerShell@@@@PEAVCListenerShell@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PEAVCRemoteOperation@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PEAVCServiceCommonConfigSettings@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PEAVCServiceConfigCache@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PEAVCWSManGroupPolicyCache@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PEAVCWSManObject@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManSession@@@@PEAVCWSManSession@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PEAVCommand@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PEAVConfigNotification@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PEAVConnectShellOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PEAVCreateShellOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PEAVDeleteShellOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PEAVDisconnectOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VHostMappingTable@@@@PEAVHostMappingTable@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PEAVIISConfigSettings@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PEAVIPCSoapProcessor@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PEAVISubscription@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VProxyManager@Client@WSMan@@@@PEAVProxyManager@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VProxySelection@Client@WSMan@@@@PEAVProxySelection@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VPushSubscribeOperation@@@@PEAVPushSubscribeOperation@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VPushSubscription@@@@PEAVPushSubscription@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PEAVReceiveOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PEAVReconnectOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PEAVSendOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VShellInfo@@@@PEAVShellInfo@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PEAVSignalOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PEAVWSManHttpListener@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoReleaseEx@VHostMappingTableEntry@@@@PEAVHostMappingTableEntry@@@@QEAA@XZ
+??1?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAA@XZ
+??1?$AutoCleanup@VAutoBstr@@PEAG@@QEAA@XZ
+??1?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEAA@XZ
+??1?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@QEAA@XZ
+??1?$AutoCleanup@VAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@@QEAA@XZ
+??1?$AutoCleanup@VAutoCoTaskMemFree@@PEAX@@QEAA@XZ
+??1?$AutoCleanup@VAutoFwXmlCloseParser@@PEAX@@QEAA@XZ
+??1?$AutoCleanup@VAutoHandle@@PEAX@@QEAA@XZ
+??1?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEAA@XZ
+??1?$AutoCleanup@VAutoLibrary@@PEAUHINSTANCE__@@@@QEAA@XZ
+??1?$AutoCleanup@VAutoLocalFree@@PEAX@@QEAA@XZ
+??1?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEAA@XZ
+??1?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@QEAA@XZ
+??1?$AutoCleanup@VAutoObject@@PEAUWSMAN_OBJECT@@@@QEAA@XZ
+??1?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@QEAA@XZ
+??1?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@QEAA@XZ
+??1?$AutoCleanup@VAutoWaitHandle@@PEAX@@QEAA@XZ
+??1?$AutoDelete@D@@QEAA@XZ
+??1?$AutoDelete@G@@QEAA@XZ
+??1?$AutoDelete@UIPRange@CWSManIPFilter@@@@QEAA@XZ
+??1?$AutoDelete@U_SID@@@@QEAA@XZ
+??1?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@QEAA@XZ
+??1?$AutoDelete@V?$Handle@VISubscription@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeSet_Iterator@PEAVCollector@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@QEAA@XZ
+??1?$AutoDelete@V?$queue@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@QEAA@XZ
+??1?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAA@XZ
+??1?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QEAA@XZ
+??1?$AutoDelete@V?$vector@PEAVCWSManRequest@@V?$transport_allocator@PEAVCWSManRequest@@@@@std@@@@QEAA@XZ
+??1?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEAA@XZ
+??1?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@QEAA@XZ
+??1?$AutoDelete@V?$vector@PEAVWSManHttpSenderConnection@@V?$transport_allocator@PEAVWSManHttpSenderConnection@@@@@std@@@@QEAA@XZ
+??1?$AutoDelete@VAdminSid@CSecurity@@@@QEAA@XZ
+??1?$AutoDelete@VBlockedRecord@@@@QEAA@XZ
+??1?$AutoDelete@VCBaseConfigCache@@@@QEAA@XZ
+??1?$AutoDelete@VCCertMapping@@@@QEAA@XZ
+??1?$AutoDelete@VCConfigChangeSource@@@@QEAA@XZ
+??1?$AutoDelete@VCListenerSettings@@@@QEAA@XZ
+??1?$AutoDelete@VCObserverConfigChangeErrors@@@@QEAA@XZ
+??1?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@QEAA@XZ
+??1?$AutoDelete@VCShellUriSettings@@@@QEAA@XZ
+??1?$AutoDelete@VCWSManEPR@@@@QEAA@XZ
+??1?$AutoDelete@VCWSManResource@@@@QEAA@XZ
+??1?$AutoDelete@VCertHash@@@@QEAA@XZ
+??1?$AutoDelete@VConfigUpdate@@@@QEAA@XZ
+??1?$AutoDelete@VEnumSinkEx@@@@QEAA@XZ
+??1?$AutoDelete@VEventHandler@WSMan@@@@QEAA@XZ
+??1?$AutoDelete@VExpiredOperationIdRecord@@@@QEAA@XZ
+??1?$AutoDelete@VGPApiManager@@@@QEAA@XZ
+??1?$AutoDelete@VGeneralSinkEx@@@@QEAA@XZ
+??1?$AutoDelete@VIChannelObserverFactory@@@@QEAA@XZ
+??1?$AutoDelete@VIQueryDASHSMASHInterface@@@@QEAA@XZ
+??1?$AutoDelete@VISpecification@@@@QEAA@XZ
+??1?$AutoDelete@VInteractiveSid@CSecurity@@@@QEAA@XZ
+??1?$AutoDelete@VIpHlpApiDllLoader@@@@QEAA@XZ
+??1?$AutoDelete@VMachineName@@@@QEAA@XZ
+??1?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@QEAA@XZ
+??1?$AutoDelete@VNetworkServiceSid@CSecurity@@@@QEAA@XZ
+??1?$AutoDelete@VNtDsApiDllLoader@@@@QEAA@XZ
+??1?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@QEAA@XZ
+??1?$AutoDelete@VPacketCreator@@@@QEAA@XZ
+??1?$AutoDelete@VPacketParser@@@@QEAA@XZ
+??1?$AutoDelete@VResources@Locale@@@@QEAA@XZ
+??1?$AutoDelete@VRunAsConfiguration@@@@QEAA@XZ
+??1?$AutoDelete@VSecurityEntry@Catalog@@@@QEAA@XZ
+??1?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@QEAA@XZ
+??1?$AutoDelete@VServiceSoapProcessor@@@@QEAA@XZ
+??1?$AutoDelete@VShell32DllLoader@@@@QEAA@XZ
+??1?$AutoDelete@VShlWApiDllLoader@@@@QEAA@XZ
+??1?$AutoDelete@VSubscriptionEnumerator@@@@QEAA@XZ
+??1?$AutoDelete@VSubscriptionManager@@@@QEAA@XZ
+??1?$AutoDelete@VTSTRBUFFER@@@@QEAA@XZ
+??1?$AutoDelete@VUniqueStringOverflow@@@@QEAA@XZ
+??1?$AutoDelete@VUser32DllLoader@@@@QEAA@XZ
+??1?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@QEAA@XZ
+??1?$AutoDelete@VWSManMemCryptManager@@@@QEAA@XZ
+??1?$AutoDelete@VWmiEnumContext@@@@QEAA@XZ
+??1?$AutoDelete@VXmlReader@@@@QEAA@XZ
+??1?$AutoDeleteVector@$$CBG@@QEAA@XZ
+??1?$AutoDeleteVector@D@@QEAA@XZ
+??1?$AutoDeleteVector@E@@QEAA@XZ
+??1?$AutoDeleteVector@G@@QEAA@XZ
+??1?$AutoDeleteVector@H@@QEAA@XZ
+??1?$AutoDeleteVector@PEAG@@QEAA@XZ
+??1?$AutoDeleteVector@PEBG@@QEAA@XZ
+??1?$AutoDeleteVector@U_CONFIG_UPDATE@@@@QEAA@XZ
+??1?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAA@XZ
+??1?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@QEAA@XZ
+??1?$AutoDeleteVector@U_WSMAN_OPTION@@@@QEAA@XZ
+??1?$AutoDeleteVector@X@@QEAA@XZ
+??1?$AutoFree@E@@QEAA@XZ
+??1?$AutoLocklessItemRecycle@VPacket@@@@QEAA@XZ
+??1?$AutoRelease@UIAppHostAdminManager@@@@QEAA@XZ
+??1?$AutoRelease@UIAppHostChildElementCollection@@@@QEAA@XZ
+??1?$AutoRelease@UIAppHostConfigException@@@@QEAA@XZ
+??1?$AutoRelease@UIAppHostElement@@@@QEAA@XZ
+??1?$AutoRelease@UIAppHostElementCollection@@@@QEAA@XZ
+??1?$AutoRelease@UIAppHostProperty@@@@QEAA@XZ
+??1?$AutoRelease@UIAppHostPropertyCollection@@@@QEAA@XZ
+??1?$AutoRelease@UIClientSecurity@@@@QEAA@XZ
+??1?$AutoRelease@UIEnumWbemClassObject@@@@QEAA@XZ
+??1?$AutoRelease@UIErrorInfo@@@@QEAA@XZ
+??1?$AutoRelease@UIUnknown@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemClassObject@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemContext@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemLocator@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemObjectTextSrc@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemPath@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemPathKeyList@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemQualifierSet@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemQuery@@@@QEAA@XZ
+??1?$AutoRelease@UIWbemServices@@@@QEAA@XZ
+??1?$AutoRelease@VApplication@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VCBaseConfigCache@@@@QEAA@XZ
+??1?$AutoRelease@VCClientConfigCache@@@@QEAA@XZ
+??1?$AutoRelease@VCClientConfigSettings@@@@QEAA@XZ
+??1?$AutoRelease@VCCommonConfigSettings@@@@QEAA@XZ
+??1?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@QEAA@XZ
+??1?$AutoRelease@VCConfigManager@@@@QEAA@XZ
+??1?$AutoRelease@VCListenerCommand@@@@QEAA@XZ
+??1?$AutoRelease@VCListenerMasterOperation@@@@QEAA@XZ
+??1?$AutoRelease@VCListenerReceive@@@@QEAA@XZ
+??1?$AutoRelease@VCListenerShell@@@@QEAA@XZ
+??1?$AutoRelease@VCRemoteOperation@@@@QEAA@XZ
+??1?$AutoRelease@VCRemoteSession@@@@QEAA@XZ
+??1?$AutoRelease@VCRequestContext@@@@QEAA@XZ
+??1?$AutoRelease@VCServiceCommonConfigSettings@@@@QEAA@XZ
+??1?$AutoRelease@VCServiceConfigCache@@@@QEAA@XZ
+??1?$AutoRelease@VCServiceConfigSettings@@@@QEAA@XZ
+??1?$AutoRelease@VCWSManEPR@@@@QEAA@XZ
+??1?$AutoRelease@VCWSManGroupPolicyCache@@@@QEAA@XZ
+??1?$AutoRelease@VCWSManGroupPolicyManager@@@@QEAA@XZ
+??1?$AutoRelease@VCWSManObject@@@@QEAA@XZ
+??1?$AutoRelease@VCWSManResource@@@@QEAA@XZ
+??1?$AutoRelease@VCWSManSession@@@@QEAA@XZ
+??1?$AutoRelease@VCWinRSPluginConfigCache@@@@QEAA@XZ
+??1?$AutoRelease@VCWinRSPluginConfigSettings@@@@QEAA@XZ
+??1?$AutoRelease@VCommand@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VConfigNotification@@@@QEAA@XZ
+??1?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VEnumSinkEx@@@@QEAA@XZ
+??1?$AutoRelease@VGeneralSinkEx@@@@QEAA@XZ
+??1?$AutoRelease@VHostMappingTable@@@@QEAA@XZ
+??1?$AutoRelease@VIISConfigSettings@@@@QEAA@XZ
+??1?$AutoRelease@VIPCSoapProcessor@@@@QEAA@XZ
+??1?$AutoRelease@VIRequestContext@@@@QEAA@XZ
+??1?$AutoRelease@VISubscription@@@@QEAA@XZ
+??1?$AutoRelease@VInboundRequestDetails@@@@QEAA@XZ
+??1?$AutoRelease@VProxyManager@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VProxySelection@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VPushSubscribeOperation@@@@QEAA@XZ
+??1?$AutoRelease@VPushSubscription@@@@QEAA@XZ
+??1?$AutoRelease@VReceiveOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VReconnectOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VSendOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VShell@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VShellInfo@@@@QEAA@XZ
+??1?$AutoRelease@VSignalOperation@Client@WSMan@@@@QEAA@XZ
+??1?$AutoRelease@VUserRecord@@@@QEAA@XZ
+??1?$AutoRelease@VWSManHttpListener@@@@QEAA@XZ
+??1?$AutoReleaseEx@VHostMappingTableEntry@@@@QEAA@XZ
+??1?$AutoReleaseEx@VShell@Client@WSMan@@@@QEAA@XZ
+??1?$ILoader@VAdminSid@CSecurity@@@@QEAA@XZ
+??1?$ILoader@VEventHandler@WSMan@@@@QEAA@XZ
+??1?$ILoader@VInteractiveSid@CSecurity@@@@QEAA@XZ
+??1?$ILoader@VIpHlpApiDllLoader@@@@QEAA@XZ
+??1?$ILoader@VMachineName@@@@QEAA@XZ
+??1?$ILoader@VNetworkServiceSid@CSecurity@@@@QEAA@XZ
+??1?$ILoader@VNtDsApiDllLoader@@@@QEAA@XZ
+??1?$ILoader@VResources@Locale@@@@QEAA@XZ
+??1?$ILoader@VShell32DllLoader@@@@QEAA@XZ
+??1?$ILoader@VShlWApiDllLoader@@@@QEAA@XZ
+??1?$ILoader@VSubscriptionManager@@@@QEAA@XZ
+??1?$ILoader@VUser32DllLoader@@@@QEAA@XZ
+??1?$ILoader@VWSManMemCryptManager@@@@QEAA@XZ
+??1?$Loader@VAdminSid@CSecurity@@$00@@QEAA@XZ
+??1?$Loader@VEventHandler@WSMan@@$00@@QEAA@XZ
+??1?$Loader@VInteractiveSid@CSecurity@@$00@@QEAA@XZ
+??1?$Loader@VIpHlpApiDllLoader@@$00@@QEAA@XZ
+??1?$Loader@VMachineName@@$00@@QEAA@XZ
+??1?$Loader@VNetworkServiceSid@CSecurity@@$00@@QEAA@XZ
+??1?$Loader@VNtDsApiDllLoader@@$00@@QEAA@XZ
+??1?$Loader@VResources@Locale@@$0A@@@QEAA@XZ
+??1?$Loader@VShell32DllLoader@@$00@@QEAA@XZ
+??1?$Loader@VShlWApiDllLoader@@$00@@QEAA@XZ
+??1?$Loader@VSubscriptionManager@@$01@@QEAA@XZ
+??1?$Loader@VUser32DllLoader@@$00@@QEAA@XZ
+??1?$Loader@VWSManMemCryptManager@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VAdminSid@CSecurity@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VEventHandler@WSMan@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VInteractiveSid@CSecurity@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VIpHlpApiDllLoader@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VMachineName@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VNetworkServiceSid@CSecurity@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VNtDsApiDllLoader@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VResources@Locale@@$0A@@@QEAA@XZ
+??1?$LoaderSerializer@VShell32DllLoader@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VShlWApiDllLoader@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VSubscriptionManager@@$01@@QEAA@XZ
+??1?$LoaderSerializer@VUser32DllLoader@@$00@@QEAA@XZ
+??1?$LoaderSerializer@VWSManMemCryptManager@@$00@@QEAA@XZ
+??1?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@QEAA@XZ
+??1?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA@XZ
+??1?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@QEAA@XZ
+??1?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeSet_Iterator@PEAVCollector@@@@@@QEAA@XZ
+??1?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@QEAA@XZ
+??1?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVIOperation@@@@@@QEAA@XZ
+??1?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@QEAA@XZ
+??1?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVPushSubscription@@@@@@QEAA@XZ
+??1?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@QEAA@XZ
+??1?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAA@XZ
+??1?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAA@XZ
+??1?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAA@XZ
+??1?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEAA@XZ
+??1?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA@XZ
+??1?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QEAA@XZ
+??1?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAA@XZ
+??1?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAA@XZ
+??1?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAA@XZ
+??1?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA@XZ
+??1?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@PEAXUEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@UPluginKey@@K@@QEAA@XZ
+??1?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@QEAA@XZ
+??1?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEAA@XZ
+??1?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@QEAA@XZ
+??1?$SafeMap_Iterator@VKey@Locale@@K@@QEAA@XZ
+??1?$SafeMap_Iterator@VStringKeyCI@@K@@QEAA@XZ
+??1?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@QEAA@XZ
+??1?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QEAA@XZ
+??1?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEAA@XZ
+??1?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@QEAA@XZ
+??1?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAA@XZ
+??1?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@QEAA@XZ
+??1?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAA@XZ
+??1?$SafeMap_Lock@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEAA@XZ
+??1?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA@XZ
+??1?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA@XZ
+??1?$SafeMap_Lock@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAA@XZ
+??1?$SafeSet@PEAVCCertMapping@@@@QEAA@XZ
+??1?$SafeSet@PEAVCListenerOperation@@@@QEAA@XZ
+??1?$SafeSet@PEAVCShellUriSettings@@@@QEAA@XZ
+??1?$SafeSet@PEAVCollector@@@@QEAA@XZ
+??1?$SafeSet@PEAVHostOperation@@@@QEAA@XZ
+??1?$SafeSet@PEAVIOperation@@@@QEAA@XZ
+??1?$SafeSet@PEAVListenerSourceSubscription@@@@QEAA@XZ
+??1?$SafeSet@PEAVPushSubscription@@@@QEAA@XZ
+??1?$SafeSet@PEAX@@QEAA@XZ
+??1?$SafeSet@VStringKeyCI@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAVCCertMapping@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAVCListenerOperation@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAVCShellUriSettings@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAVCollector@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAVHostOperation@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAVIOperation@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAVPushSubscription@@@@QEAA@XZ
+??1?$SafeSet_Iterator@PEAX@@QEAA@XZ
+??1?$SafeSet_Iterator@VStringKeyCI@@@@QEAA@XZ
+??1?$SimpleQueue@T_LARGE_INTEGER@@@@QEAA@XZ
+??1AutoBstr@@QEAA@XZ
+??1AutoBstrNoAlloc@@QEAA@XZ
+??1AutoCertContext@@QEAA@XZ
+??1AutoChainContext@@QEAA@XZ
+??1AutoCoTaskMemFree@@QEAA@XZ
+??1AutoFwXmlCloseParser@@QEAA@XZ
+??1AutoHandle@@QEAA@XZ
+??1AutoImpersonateUser@@QEAA@XZ
+??1AutoLibrary@@QEAA@XZ
+??1AutoLocalFree@@QEAA@XZ
+??1AutoMIClass@@QEAA@XZ
+??1AutoMIInstance@@QEAA@XZ
+??1AutoObject@@QEAA@XZ
+??1AutoRegKey@@QEAA@XZ
+??1AutoSecurityDescriptor@@QEAA@XZ
+??1AutoWaitHandle@@QEAA@XZ
+??1BufferFormatter@@UEAA@XZ
+??1CBaseConfigCache@@UEAA@XZ
+??1CClientConfigCache@@UEAA@XZ
+??1CCommonConfigSettings@@UEAA@XZ
+??1CConfigManager@@UEAA@XZ
+??1CErrorContext@@UEAA@XZ
+??1CRequestContext@@UEAA@XZ
+??1CResourceAlias@@QEAA@XZ
+??1CServiceConfigCache@@EEAA@XZ
+??1CServiceWatcher@CServiceConfigCache@@QEAA@XZ
+??1CWSManCriticalSection@@QEAA@XZ
+??1CWSManCriticalSectionWithConditionVar@@QEAA@XZ
+??1CWSManEPR@@UEAA@XZ
+??1CWSManGroupPolicyManager@@EEAA@XZ
+??1CWSManResource@@UEAA@XZ
+??1CWSManResourceNoResourceUri@@UEAA@XZ
+??1CWSManSecurityUI@@QEAA@XZ
+??1CWinRSPluginConfigCache@@EEAA@XZ
+??1ChildLifeTimeManager@@QEAA@XZ
+??1CircularBufferFormatter@@UEAA@XZ
+??1ConfigRegistry@@IEAA@XZ
+??1EtwCorrelationHelper@@UEAA@XZ
+??1EventHandler@WSMan@@QEAA@XZ
+??1IConfigChangeObserver@@UEAA@XZ
+??1ILifeTimeMgmt@@UEAA@XZ
+??1IRequestContext@@UEAA@XZ
+??1IWSManGroupPolicyObserver@@UEAA@XZ
+??1IWSManGroupPolicyPublisher@@UEAA@XZ
+??1MessageId@PacketParser@@QEAA@XZ
+??1OnHTTPInitialize@@QEAA@XZ
+??1OperationId@PacketParser@@QEAA@XZ
+??1OwnLock@@QEAA@XZ
+??1PacketParser@@QEAA@XZ
+??1RBUFFER@@QEAA@XZ
+??1ReferenceParameters@PacketParser@@QEAA@XZ
+??1SBUFFER@@QEAA@XZ
+??1ShareLock@@QEAA@XZ
+??1SoapSemanticConverter@@QEAA@XZ
+??1TSTRBUFFER@@QEAA@XZ
+??1UserRecord@@QEAA@XZ
+??1XmlReader@@QEAA@XZ
+??4?$AutoCleanup@V?$AutoDelete@D@@PEAD@@QEAAAEAV?$AutoDelete@D@@PEAD@Z
+??4?$AutoCleanup@V?$AutoDelete@G@@PEAG@@QEAAAEAV?$AutoDelete@G@@PEAG@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@QEAAAEAV?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@QEAAAEAV?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAAAEAV?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAAAEAV?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QEAAAEAV?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEAAAEAV?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@QEAAAEAV?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@@QEAAAEAV?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PEAVCConfigChangeSource@@@@QEAAAEAV?$AutoDelete@VCConfigChangeSource@@@@PEAVCConfigChangeSource@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PEAVCObserverConfigChangeErrors@@@@QEAAAEAV?$AutoDelete@VCObserverConfigChangeErrors@@@@PEAVCObserverConfigChangeErrors@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@@QEAAAEAV?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@@QEAAAEAV?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PEAVCertHash@@@@QEAAAEAV?$AutoDelete@VCertHash@@@@PEAVCertHash@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@QEAAAEAV?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAAEAV?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PEAVGPApiManager@@@@QEAAAEAV?$AutoDelete@VGPApiManager@@@@PEAVGPApiManager@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAAEAV?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PEAVIChannelObserverFactory@@@@QEAAAEAV?$AutoDelete@VIChannelObserverFactory@@@@PEAVIChannelObserverFactory@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEAAAEAV?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEAAAEAV?$AutoDelete@VISpecification@@@@PEAVISpecification@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@@QEAAAEAV?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PEAVPacketParser@@@@QEAAAEAV?$AutoDelete@VPacketParser@@@@PEAVPacketParser@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PEAVRunAsConfiguration@@@@QEAAAEAV?$AutoDelete@VRunAsConfiguration@@@@PEAVRunAsConfiguration@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@@QEAAAEAV?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@@QEAAAEAV?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PEAVSubscriptionEnumerator@@@@QEAAAEAV?$AutoDelete@VSubscriptionEnumerator@@@@PEAVSubscriptionEnumerator@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEAAAEAV?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PEAVUniqueStringOverflow@@@@QEAAAEAV?$AutoDelete@VUniqueStringOverflow@@@@PEAVUniqueStringOverflow@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PEAVWSMANCONFIGTABLE_IDENTITY@@@@QEAAAEAV?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PEAVWSMANCONFIGTABLE_IDENTITY@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEAAAEAV?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@QEAAAEAV?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PEBG@@QEAAAEAV?$AutoDeleteVector@$$CBG@@PEBG@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@D@@PEAD@@QEAAAEAV?$AutoDeleteVector@D@@PEAD@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEAAAEAV?$AutoDeleteVector@E@@PEAE@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEAAAEAV?$AutoDeleteVector@G@@PEAG@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEAAAEAV?$AutoDeleteVector@PEAG@@PEAPEAG@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEAAAEAV?$AutoDeleteVector@PEBG@@PEAPEBG@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PEAU_CONFIG_UPDATE@@@@QEAAAEAV?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PEAU_CONFIG_UPDATE@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAAAEAV?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEAAAEAV?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PEAU_WSMAN_OPTION@@@@QEAAAEAV?$AutoDeleteVector@U_WSMAN_OPTION@@@@PEAU_WSMAN_OPTION@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@X@@PEAX@@QEAAAEAV?$AutoDeleteVector@X@@PEAX@Z
+??4?$AutoCleanup@V?$AutoFree@E@@PEAE@@QEAAAEAV?$AutoFree@E@@PEAE@Z
+??4?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@@QEAAAEAV?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEAAAEAV?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEAAAEAV?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEAAAEAV?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEAAAEAV?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEAAAEAV?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEAAAEAV?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEAAAEAV?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEAAAEAV?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEAAAEAV?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEAAAEAV?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEAAAEAV?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEAAAEAV?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEAAAEAV?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PEAVApplication@Client@WSMan@@@@QEAAAEAV?$AutoRelease@VApplication@Client@WSMan@@@@PEAVApplication@Client@WSMan@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAAAEAV?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@QEAAAEAV?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PEAVCCommonConfigSettings@@@@QEAAAEAV?$AutoRelease@VCCommonConfigSettings@@@@PEAVCCommonConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PEAVCConfigCacheMap@CBaseConfigCache@@@@QEAAAEAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PEAVCConfigCacheMap@CBaseConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@QEAAAEAV?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PEAVCRemoteOperation@@@@QEAAAEAV?$AutoRelease@VCRemoteOperation@@@@PEAVCRemoteOperation@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@QEAAAEAV?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@QEAAAEAV?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PEAVCServiceCommonConfigSettings@@@@QEAAAEAV?$AutoRelease@VCServiceCommonConfigSettings@@@@PEAVCServiceCommonConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PEAVCServiceConfigCache@@@@QEAAAEAV?$AutoRelease@VCServiceConfigCache@@@@PEAVCServiceConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@@QEAAAEAV?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAAAEAV?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@@QEAAAEAV?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@QEAAAEAV?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEAAAEAV?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@@QEAAAEAV?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAAEAV?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAAEAV?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEAAAEAV?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PEAVISubscription@@@@QEAAAEAV?$AutoRelease@VISubscription@@@@PEAVISubscription@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@QEAAAEAV?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@@QEAAAEAV?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PEAVWSManHttpListener@@@@QEAAAEAV?$AutoRelease@VWSManHttpListener@@@@PEAVWSManHttpListener@@@Z
+??4?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAAAEAV?$AutoReleaseEx@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@Z
+??4?$AutoCleanup@VAutoBstr@@PEAG@@QEAAAEAVAutoBstr@@PEAG@Z
+??4?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEAAAEAVAutoBstrNoAlloc@@PEAG@Z
+??4?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@QEAAAEAVAutoCertContext@@PEBU_CERT_CONTEXT@@@Z
+??4?$AutoCleanup@VAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@@QEAAAEAVAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@Z
+??4?$AutoCleanup@VAutoCoTaskMemFree@@PEAX@@QEAAAEAVAutoCoTaskMemFree@@PEAX@Z
+??4?$AutoCleanup@VAutoFwXmlCloseParser@@PEAX@@QEAAAEAVAutoFwXmlCloseParser@@PEAX@Z
+??4?$AutoCleanup@VAutoHandle@@PEAX@@QEAAAEAVAutoHandle@@PEAX@Z
+??4?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEAAAEAVAutoImpersonateUser@@PEAX@Z
+??4?$AutoCleanup@VAutoLibrary@@PEAUHINSTANCE__@@@@QEAAAEAVAutoLibrary@@PEAUHINSTANCE__@@@Z
+??4?$AutoCleanup@VAutoLocalFree@@PEAX@@QEAAAEAVAutoLocalFree@@PEAX@Z
+??4?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEAAAEAVAutoMIClass@@PEAU_MI_Class@@@Z
+??4?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@QEAAAEAVAutoMIInstance@@PEAU_MI_Instance@@@Z
+??4?$AutoCleanup@VAutoObject@@PEAUWSMAN_OBJECT@@@@QEAAAEAVAutoObject@@PEAUWSMAN_OBJECT@@@Z
+??4?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@QEAAAEAVAutoRegKey@@PEAUHKEY__@@@Z
+??4?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@QEAAAEAVAutoSecurityDescriptor@@PEAX@Z
+??4?$AutoCleanup@VAutoWaitHandle@@PEAX@@QEAAAEAVAutoWaitHandle@@PEAX@Z
+??4?$AutoDelete@D@@QEAAAEAV0@PEAD@Z
+??4?$AutoDelete@G@@QEAAAEAV0@PEAG@Z
+??4?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAAEAV0@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@Z
+??4?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAAEAV0@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@Z
+??4?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@QEAAAEAV0@PEAV?$SafeSet@PEAVCCertMapping@@@@@Z
+??4?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@QEAAAEAV0@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@Z
+??4?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAAAEAV0@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@Z
+??4?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAAAEAV0@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@Z
+??4?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QEAAAEAV0@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@Z
+??4?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEAAAEAV0@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@Z
+??4?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@QEAAAEAV0@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@Z
+??4?$AutoDelete@VBlockedRecord@@@@QEAAAEAV0@PEAVBlockedRecord@@@Z
+??4?$AutoDelete@VCConfigChangeSource@@@@QEAAAEAV0@PEAVCConfigChangeSource@@@Z
+??4?$AutoDelete@VCObserverConfigChangeErrors@@@@QEAAAEAV0@PEAVCObserverConfigChangeErrors@@@Z
+??4?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@QEAAAEAV0@PEAVCServiceWatcher@CServiceConfigCache@@@Z
+??4?$AutoDelete@VCWSManResource@@@@QEAAAEAV0@PEAVCWSManResource@@@Z
+??4?$AutoDelete@VCertHash@@@@QEAAAEAV0@PEAVCertHash@@@Z
+??4?$AutoDelete@VConfigUpdate@@@@QEAAAEAV0@PEAVConfigUpdate@@@Z
+??4?$AutoDelete@VEnumSinkEx@@@@QEAAAEAV0@PEAVEnumSinkEx@@@Z
+??4?$AutoDelete@VGPApiManager@@@@QEAAAEAV0@PEAVGPApiManager@@@Z
+??4?$AutoDelete@VGeneralSinkEx@@@@QEAAAEAV0@PEAVGeneralSinkEx@@@Z
+??4?$AutoDelete@VIChannelObserverFactory@@@@QEAAAEAV0@PEAVIChannelObserverFactory@@@Z
+??4?$AutoDelete@VIQueryDASHSMASHInterface@@@@QEAAAEAV0@PEAVIQueryDASHSMASHInterface@@@Z
+??4?$AutoDelete@VISpecification@@@@QEAAAEAV0@PEAVISpecification@@@Z
+??4?$AutoDelete@VPacketCreator@@@@QEAAAEAV0@PEAVPacketCreator@@@Z
+??4?$AutoDelete@VPacketParser@@@@QEAAAEAV0@PEAVPacketParser@@@Z
+??4?$AutoDelete@VRunAsConfiguration@@@@QEAAAEAV0@PEAVRunAsConfiguration@@@Z
+??4?$AutoDelete@VSecurityEntry@Catalog@@@@QEAAAEAV0@PEAVSecurityEntry@Catalog@@@Z
+??4?$AutoDelete@VServiceSoapProcessor@@@@QEAAAEAV0@PEAVServiceSoapProcessor@@@Z
+??4?$AutoDelete@VSubscriptionEnumerator@@@@QEAAAEAV0@PEAVSubscriptionEnumerator@@@Z
+??4?$AutoDelete@VTSTRBUFFER@@@@QEAAAEAV0@PEAVTSTRBUFFER@@@Z
+??4?$AutoDelete@VUniqueStringOverflow@@@@QEAAAEAV0@PEAVUniqueStringOverflow@@@Z
+??4?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@QEAAAEAV0@PEAVWSMANCONFIGTABLE_IDENTITY@@@Z
+??4?$AutoDelete@VWmiEnumContext@@@@QEAAAEAV0@PEAVWmiEnumContext@@@Z
+??4?$AutoDelete@VXmlReader@@@@QEAAAEAV0@PEAVXmlReader@@@Z
+??4?$AutoDeleteVector@$$CBG@@QEAAAEAV0@PEBG@Z
+??4?$AutoDeleteVector@D@@QEAAAEAV0@PEAD@Z
+??4?$AutoDeleteVector@E@@QEAAAEAV0@PEAE@Z
+??4?$AutoDeleteVector@G@@QEAAAEAV0@PEAG@Z
+??4?$AutoDeleteVector@PEAG@@QEAAAEAV0@PEAPEAG@Z
+??4?$AutoDeleteVector@PEBG@@QEAAAEAV0@PEAPEBG@Z
+??4?$AutoDeleteVector@U_CONFIG_UPDATE@@@@QEAAAEAV0@PEAU_CONFIG_UPDATE@@@Z
+??4?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAAAEAV0@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@Z
+??4?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@QEAAAEAV0@PEAU_WINRS_RUN_COMMAND_ARG@@@Z
+??4?$AutoDeleteVector@U_WSMAN_OPTION@@@@QEAAAEAV0@PEAU_WSMAN_OPTION@@@Z
+??4?$AutoDeleteVector@X@@QEAAAEAV0@PEAX@Z
+??4?$AutoFree@E@@QEAAAEAV0@PEAE@Z
+??4?$AutoLocklessItemRecycle@VPacket@@@@QEAAAEAV0@PEAVPacket@@@Z
+??4?$AutoRelease@UIClientSecurity@@@@QEAAAEAV0@PEAUIClientSecurity@@@Z
+??4?$AutoRelease@UIEnumWbemClassObject@@@@QEAAAEAV0@PEAUIEnumWbemClassObject@@@Z
+??4?$AutoRelease@UIErrorInfo@@@@QEAAAEAV0@PEAUIErrorInfo@@@Z
+??4?$AutoRelease@UIUnknown@@@@QEAAAEAV0@PEAUIUnknown@@@Z
+??4?$AutoRelease@UIWbemClassObject@@@@QEAAAEAV0@PEAUIWbemClassObject@@@Z
+??4?$AutoRelease@UIWbemContext@@@@QEAAAEAV0@PEAUIWbemContext@@@Z
+??4?$AutoRelease@UIWbemLocator@@@@QEAAAEAV0@PEAUIWbemLocator@@@Z
+??4?$AutoRelease@UIWbemObjectTextSrc@@@@QEAAAEAV0@PEAUIWbemObjectTextSrc@@@Z
+??4?$AutoRelease@UIWbemPath@@@@QEAAAEAV0@PEAUIWbemPath@@@Z
+??4?$AutoRelease@UIWbemPathKeyList@@@@QEAAAEAV0@PEAUIWbemPathKeyList@@@Z
+??4?$AutoRelease@UIWbemQualifierSet@@@@QEAAAEAV0@PEAUIWbemQualifierSet@@@Z
+??4?$AutoRelease@UIWbemQuery@@@@QEAAAEAV0@PEAUIWbemQuery@@@Z
+??4?$AutoRelease@UIWbemServices@@@@QEAAAEAV0@PEAUIWbemServices@@@Z
+??4?$AutoRelease@VApplication@Client@WSMan@@@@QEAAAEAV0@PEAVApplication@Client@WSMan@@@Z
+??4?$AutoRelease@VCBaseConfigCache@@@@QEAAAEAV0@PEAVCBaseConfigCache@@@Z
+??4?$AutoRelease@VCClientConfigSettings@@@@QEAAAEAV0@PEAVCClientConfigSettings@@@Z
+??4?$AutoRelease@VCCommonConfigSettings@@@@QEAAAEAV0@PEAVCCommonConfigSettings@@@Z
+??4?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@QEAAAEAV0@PEAVCConfigCacheMap@CBaseConfigCache@@@Z
+??4?$AutoRelease@VCConfigManager@@@@QEAAAEAV0@PEAVCConfigManager@@@Z
+??4?$AutoRelease@VCRemoteOperation@@@@QEAAAEAV0@PEAVCRemoteOperation@@@Z
+??4?$AutoRelease@VCRemoteSession@@@@QEAAAEAV0@PEAVCRemoteSession@@@Z
+??4?$AutoRelease@VCRequestContext@@@@QEAAAEAV0@PEAVCRequestContext@@@Z
+??4?$AutoRelease@VCServiceCommonConfigSettings@@@@QEAAAEAV0@PEAVCServiceCommonConfigSettings@@@Z
+??4?$AutoRelease@VCServiceConfigCache@@@@QEAAAEAV0@PEAVCServiceConfigCache@@@Z
+??4?$AutoRelease@VCServiceConfigSettings@@@@QEAAAEAV0@PEAVCServiceConfigSettings@@@Z
+??4?$AutoRelease@VCWSManEPR@@@@QEAAAEAV0@PEAVCWSManEPR@@@Z
+??4?$AutoRelease@VCWSManGroupPolicyManager@@@@QEAAAEAV0@PEAVCWSManGroupPolicyManager@@@Z
+??4?$AutoRelease@VCWSManResource@@@@QEAAAEAV0@PEAVCWSManResource@@@Z
+??4?$AutoRelease@VCWinRSPluginConfigCache@@@@QEAAAEAV0@PEAVCWinRSPluginConfigCache@@@Z
+??4?$AutoRelease@VCWinRSPluginConfigSettings@@@@QEAAAEAV0@PEAVCWinRSPluginConfigSettings@@@Z
+??4?$AutoRelease@VEnumSinkEx@@@@QEAAAEAV0@PEAVEnumSinkEx@@@Z
+??4?$AutoRelease@VGeneralSinkEx@@@@QEAAAEAV0@PEAVGeneralSinkEx@@@Z
+??4?$AutoRelease@VIRequestContext@@@@QEAAAEAV0@PEAVIRequestContext@@@Z
+??4?$AutoRelease@VISubscription@@@@QEAAAEAV0@PEAVISubscription@@@Z
+??4?$AutoRelease@VInboundRequestDetails@@@@QEAAAEAV0@PEAVInboundRequestDetails@@@Z
+??4?$AutoRelease@VUserRecord@@@@QEAAAEAV0@PEAVUserRecord@@@Z
+??4?$AutoRelease@VWSManHttpListener@@@@QEAAAEAV0@PEAVWSManHttpListener@@@Z
+??4?$AutoReleaseEx@VShell@Client@WSMan@@@@QEAAAEAV0@PEAVShell@Client@WSMan@@@Z
+??4?$PacketElement@K@PacketParser@@QEAAAEAV01@$$QEAV01@@Z
+??4?$PacketElement@K@PacketParser@@QEAAAEAV01@AEBV01@@Z
+??4?$PacketElement@PEAU_FWXML_ELEMENT@@@PacketParser@@QEAAAEAV01@$$QEAV01@@Z
+??4?$PacketElement@PEAU_FWXML_ELEMENT@@@PacketParser@@QEAAAEAV01@AEBV01@@Z
+??4?$PacketElement@PEBG@PacketParser@@QEAAAEAV01@$$QEAV01@@Z
+??4?$PacketElement@PEBG@PacketParser@@QEAAAEAV01@AEBV01@@Z
+??4?$PacketElement@_K@PacketParser@@QEAAAEAV01@$$QEAV01@@Z
+??4?$PacketElement@_K@PacketParser@@QEAAAEAV01@AEBV01@@Z
+??4?$SimpleQueue@T_LARGE_INTEGER@@@@QEAAAEAV0@AEBV0@@Z
+??4AutoBstr@@QEAAAEAV0@PEAG@Z
+??4AutoBstrNoAlloc@@QEAAAEAV0@PEAG@Z
+??4AutoCertContext@@QEAAAEAV0@PEBU_CERT_CONTEXT@@@Z
+??4AutoChainContext@@QEAAAEAV0@PEBU_CERT_CHAIN_CONTEXT@@@Z
+??4AutoCoTaskMemFree@@QEAAAEAV0@PEAX@Z
+??4AutoFwXmlCloseParser@@QEAAAEAV0@PEAX@Z
+??4AutoHandle@@QEAAAEAV0@PEAX@Z
+??4AutoImpersonateUser@@QEAAAEAV0@PEAX@Z
+??4AutoLibrary@@QEAAAEAV0@PEAUHINSTANCE__@@@Z
+??4AutoLocalFree@@QEAAAEAV0@PEAX@Z
+??4AutoMIClass@@QEAAAEAV0@PEAU_MI_Class@@@Z
+??4AutoMIInstance@@QEAAAEAV0@PEAU_MI_Instance@@@Z
+??4AutoObject@@QEAAAEAV0@PEAUWSMAN_OBJECT@@@Z
+??4AutoRegKey@@QEAAAEAV0@PEAUHKEY__@@@Z
+??4AutoSecurityDescriptor@@QEAAAEAV0@PEAX@Z
+??4AutoWaitHandle@@QEAAAEAV0@PEAX@Z
+??4ChildLifeTimeManager@@QEAAAEAV0@AEBV0@@Z
+??4ConfigRegistry@@QEAAAEAV0@AEBV0@@Z
+??4EtwCorrelationHelper@@QEAAAEAV0@AEBV0@@Z
+??4EventLog@@QEAAAEAV0@$$QEAV0@@Z
+??4EventLog@@QEAAAEAV0@AEBV0@@Z
+??4ExtendedSemantic@@QEAAAEAV0@$$QEAV0@@Z
+??4ExtendedSemantic@@QEAAAEAV0@AEBV0@@Z
+??4FastLock@@QEAAAEAV0@$$QEAV0@@Z
+??4FastLock@@QEAAAEAV0@AEBV0@@Z
+??4Fragment@PacketParser@@QEAAAEAV01@$$QEAV01@@Z
+??4Fragment@PacketParser@@QEAAAEAV01@AEBV01@@Z
+??4IConfigChangeObserver@@QEAAAEAV0@AEBV0@@Z
+??4ILifeTimeMgmt@@QEAAAEAV0@AEBV0@@Z
+??4IWSManGroupPolicyObserver@@QEAAAEAV0@AEBV0@@Z
+??4IWSManGroupPolicyPublisher@@QEAAAEAV0@AEBV0@@Z
+??4Locale@@QEAAAEAV0@AEBV0@@Z
+??4NotUnderstandSoapHeader@PacketParser@@QEAAAEAV01@$$QEAV01@@Z
+??4NotUnderstandSoapHeader@PacketParser@@QEAAAEAV01@AEBV01@@Z
+??4PacketFormatter@@QEAAAEAV0@$$QEAV0@@Z
+??4PacketFormatter@@QEAAAEAV0@AEBV0@@Z
+??4RBUFFER@@QEAAAEAV0@AEBV0@@Z
+??4SBUFFER@@QEAAAEAV0@$$QEAV0@@Z
+??4SBUFFER@@QEAAAEAV0@AEBV0@@Z
+??4SessionId@PacketParser@@QEAAAEAV01@$$QEAV01@@Z
+??4SessionId@PacketParser@@QEAAAEAV01@AEBV01@@Z
+??4SoapSemanticConverter@@QEAAAEAV0@AEBV0@@Z
+??4UserAuthzRecord@@QEAAAEAV0@$$QEAV0@@Z
+??4UserAuthzRecord@@QEAAAEAV0@AEBV0@@Z
+??6BufferFormatter@@UEAAAEAV0@AEAVBufferFormatterDataFormatDWORD@@@Z
+??6BufferFormatter@@UEAAAEAV0@AEAVBufferFormatterDataFormatULONGLONG@@@Z
+??6BufferFormatter@@UEAAAEAV0@AEAVBufferFormatterDataPCWSTR@@@Z
+??6BufferFormatter@@UEAAAEAV0@AEAVBufferFormatterDataPUCHAR@@@Z
+??6BufferFormatter@@UEAAAEAV0@AEAVBufferFormatterDataXmlEscape@@@Z
+??6BufferFormatter@@UEAAAEAV0@K@Z
+??6BufferFormatter@@UEAAAEAV0@PEAU_FWXML_ELEMENT@@@Z
+??7?$AutoCleanup@V?$AutoDelete@G@@PEAG@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PEAVRunAsConfiguration@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PEAVSubscriptionEnumerator@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@D@@PEAD@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@X@@PEAX@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEBA_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@QEBA_NXZ
+??7?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEBA_NXZ
+??7?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@QEBA_NXZ
+??7?$AutoCleanup@VAutoHandle@@PEAX@@QEBA_NXZ
+??7?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEBA_NXZ
+??7?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEBA_NXZ
+??7?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@QEBA_NXZ
+??7?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@QEBA_NXZ
+??A?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAAPEAKAEBUPluginKey@@@Z
+??A?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAAPEAPEAVBlockedRecord@@AEBUUserKey@@@Z
+??A?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAAPEAVCertThumbprintMappedSet@CServiceConfigSettings@@AEBVCertThumbprintKey@@@Z
+??A?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAPEAKAEBVStringKeyCI@@@Z
+??A?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAAPEAUUSER_CONTEXT_INFO@WSManHttpListener@@AEBVStringKeyCI@@@Z
+??A?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAAPEAPEAVExpiredOperationIdRecord@@AEBVStringKeyStore@@@Z
+??A?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAAPEAPEAVServerFullDuplexChannel@@AEBVStringKeyStore@@@Z
+??A?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAPEAPEAVOptionValue@SessionOptions@Client@WSMan@@AEBW4WSManSessionOption@@@Z
+??A?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAAPEAPEAVSendPacketArgs@RobustConnectionBuffer@@AEB_K@Z
+??A?$SafeSet@PEAX@@QEBAPEBQEAXAEBQEAX@Z
+??B?$AutoCleanup@V?$AutoDelete@D@@PEAD@@QEAAPEADXZ
+??B?$AutoCleanup@V?$AutoDelete@G@@PEAG@@QEAAPEAGXZ
+??B?$AutoCleanup@V?$AutoDelete@G@@PEAG@@QEBAQEAGXZ
+??B?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PEAUIPRange@CWSManIPFilter@@@@QEAAPEAUIPRange@CWSManIPFilter@@XZ
+??B?$AutoCleanup@V?$AutoDelete@U_SID@@@@PEAU_SID@@@@QEAAPEAU_SID@@XZ
+??B?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PEAU_WSMAN_STREAM_ID_SET@@@@QEAAPEAU_WSMAN_STREAM_ID_SET@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PEAV?$Handle@VISubscription@@@@@@QEAAPEAV?$Handle@VISubscription@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAPEAV?$SafeMap_Iterator@VStringKeyCI@@K@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAPEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@QEAAPEAV?$SafeSet@PEAVCCertMapping@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@QEAAPEAV?$SafeSet@PEAVCShellUriSettings@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAAPEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAAPEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QEAAPEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEAAPEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEBAQEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@QEAAPEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PEAVAdminSid@CSecurity@@@@QEAAPEAVAdminSid@CSecurity@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@@QEAAPEAVBlockedRecord@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAAPEAVCBaseConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PEAVCCertMapping@@@@QEAAPEAVCCertMapping@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PEAVCConfigChangeSource@@@@QEAAPEAVCConfigChangeSource@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PEAVCListenerSettings@@@@QEAAPEAVCListenerSettings@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PEAVCObserverConfigChangeErrors@@@@QEAAPEAVCObserverConfigChangeErrors@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@@QEAAPEAVCServiceWatcher@CServiceConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PEAVCShellUriSettings@@@@QEAAPEAVCShellUriSettings@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAAPEAVCWSManEPR@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@@QEAAPEAVCWSManResource@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PEAVCertHash@@@@QEAAPEAVCertHash@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@QEAAPEAVConfigUpdate@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAPEAVEnumSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEBAQEAVEnumSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PEAVEventHandler@WSMan@@@@QEAAPEAVEventHandler@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PEAVExpiredOperationIdRecord@@@@QEAAPEAVExpiredOperationIdRecord@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PEAVGPApiManager@@@@QEAAPEAVGPApiManager@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAPEAVGeneralSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEBAQEAVGeneralSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PEAVIChannelObserverFactory@@@@QEAAPEAVIChannelObserverFactory@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEAAPEAVIQueryDASHSMASHInterface@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEBAQEAVIQueryDASHSMASHInterface@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEAAPEAVISpecification@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEBAQEAVISpecification@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PEAVInteractiveSid@CSecurity@@@@QEAAPEAVInteractiveSid@CSecurity@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PEAVIpHlpApiDllLoader@@@@QEAAPEAVIpHlpApiDllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PEAVMachineName@@@@QEAAPEAVMachineName@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PEAVNetworkServiceSid@CSecurity@@@@QEAAPEAVNetworkServiceSid@CSecurity@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PEAVNtDsApiDllLoader@@@@QEAAPEAVNtDsApiDllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAAPEAVOptionValue@SessionOptions@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@@QEAAPEAVPacketCreator@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PEAVPacketParser@@@@QEAAPEAVPacketParser@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PEAVResources@Locale@@@@QEAAPEAVResources@Locale@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@@QEAAPEAVSecurityEntry@Catalog@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@@QEAAPEAVServiceSoapProcessor@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PEAVShell32DllLoader@@@@QEAAPEAVShell32DllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PEAVShlWApiDllLoader@@@@QEAAPEAVShlWApiDllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PEAVSubscriptionManager@@@@QEAAPEAVSubscriptionManager@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEAAPEAVTSTRBUFFER@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEBAQEAVTSTRBUFFER@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PEAVUniqueStringOverflow@@@@QEAAPEAVUniqueStringOverflow@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PEAVUser32DllLoader@@@@QEAAPEAVUser32DllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PEAVWSMANCONFIGTABLE_IDENTITY@@@@QEAAPEAVWSMANCONFIGTABLE_IDENTITY@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PEAVWSManMemCryptManager@@@@QEAAPEAVWSManMemCryptManager@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEAAPEAVWmiEnumContext@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEBAQEAVWmiEnumContext@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@QEAAPEAVXmlReader@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PEBG@@QEAAPEBGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@D@@PEAD@@QEAAPEADXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEAAPEAEXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEBAQEAEXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEAAPEAGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEBAQEAGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@H@@PEAH@@QEAAPEAHXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEAAPEAPEAGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEBAQEAPEAGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEAAPEAPEBGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEBAQEAPEBGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PEAU_CONFIG_UPDATE@@@@QEAAPEAU_CONFIG_UPDATE@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAAPEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEBAQEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEAAPEAU_WINRS_RUN_COMMAND_ARG@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEBAQEAU_WINRS_RUN_COMMAND_ARG@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PEAU_WSMAN_OPTION@@@@QEAAPEAU_WSMAN_OPTION@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@X@@PEAX@@QEAAPEAXXZ
+??B?$AutoCleanup@V?$AutoFree@E@@PEAE@@QEAAPEAEXZ
+??B?$AutoCleanup@V?$AutoFree@E@@PEAE@@QEBAQEAEXZ
+??B?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@@QEAAPEAVPacket@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PEAUIAppHostChildElementCollection@@@@QEAAPEAUIAppHostChildElementCollection@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PEAUIAppHostElement@@@@QEAAPEAUIAppHostElement@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PEAUIAppHostElementCollection@@@@QEAAPEAUIAppHostElementCollection@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEAAPEAUIClientSecurity@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEBAQEAUIClientSecurity@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEAAPEAUIEnumWbemClassObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEBAQEAUIEnumWbemClassObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEAAPEAUIErrorInfo@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEBAQEAUIErrorInfo@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEAAPEAUIUnknown@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEBAQEAUIUnknown@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEAAPEAUIWbemClassObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEBAQEAUIWbemClassObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEAAPEAUIWbemContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEBAQEAUIWbemContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEAAPEAUIWbemLocator@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEBAQEAUIWbemLocator@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEAAPEAUIWbemObjectTextSrc@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEBAQEAUIWbemObjectTextSrc@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEAAPEAUIWbemPath@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEBAQEAUIWbemPath@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEAAPEAUIWbemPathKeyList@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEBAQEAUIWbemPathKeyList@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEAAPEAUIWbemQualifierSet@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEBAQEAUIWbemQualifierSet@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEAAPEAUIWbemQuery@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEBAQEAUIWbemQuery@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEAAPEAUIWbemServices@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEBAQEAUIWbemServices@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAAPEAVCBaseConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@QEAAPEAVCClientConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PEAVCCommonConfigSettings@@@@QEAAPEAVCCommonConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PEAVCConfigCacheMap@CBaseConfigCache@@@@QEAAPEAVCConfigCacheMap@CBaseConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@QEAAPEAVCConfigManager@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@QEAAPEAVCRemoteSession@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@QEAAPEAVCRequestContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PEAVCServiceCommonConfigSettings@@@@QEAAPEAVCServiceCommonConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PEAVCServiceConfigCache@@@@QEAAPEAVCServiceConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@@QEAAPEAVCServiceConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAAPEAVCWSManEPR@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEBAQEAVCWSManEPR@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PEAVCWSManGroupPolicyCache@@@@QEAAPEAVCWSManGroupPolicyCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@@QEAAPEAVCWSManGroupPolicyManager@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PEAVCWSManObject@@@@QEAAPEAVCWSManObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@QEAAPEAVCWSManResource@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@QEBAQEAVCWSManResource@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEAAPEAVCWinRSPluginConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEBAQEAVCWinRSPluginConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@@QEAAPEAVCWinRSPluginConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PEAVCommand@Client@WSMan@@@@QEAAPEAVCommand@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PEAVConfigNotification@@@@QEAAPEAVConfigNotification@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PEAVConnectShellOperation@Client@WSMan@@@@QEAAPEAVConnectShellOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PEAVCreateShellOperation@Client@WSMan@@@@QEAAPEAVCreateShellOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PEAVDeleteShellOperation@Client@WSMan@@@@QEAAPEAVDeleteShellOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PEAVDisconnectOperation@Client@WSMan@@@@QEAAPEAVDisconnectOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAPEAVEnumSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEBAQEAVEnumSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAPEAVGeneralSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEBAQEAVGeneralSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PEAVIISConfigSettings@@@@QEAAPEAVIISConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PEAVIPCSoapProcessor@@@@QEAAPEAVIPCSoapProcessor@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEAAPEAVIRequestContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEBAQEAVIRequestContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PEAVISubscription@@@@QEAAPEAVISubscription@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@QEAAPEAVInboundRequestDetails@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@QEBAQEAVInboundRequestDetails@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PEAVReceiveOperation@Client@WSMan@@@@QEAAPEAVReceiveOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PEAVReconnectOperation@Client@WSMan@@@@QEAAPEAVReconnectOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PEAVSendOperation@Client@WSMan@@@@QEAAPEAVSendOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAAPEAVShell@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEBAQEAVShell@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PEAVSignalOperation@Client@WSMan@@@@QEAAPEAVSignalOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@@QEAAPEAVUserRecord@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@@QEBAQEAVUserRecord@@XZ
+??B?$AutoCleanup@VAutoBstr@@PEAG@@QEAAPEAGXZ
+??B?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEAAPEAGXZ
+??B?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEBAQEAGXZ
+??B?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@QEAAPEBU_CERT_CONTEXT@@XZ
+??B?$AutoCleanup@VAutoHandle@@PEAX@@QEAAPEAXXZ
+??B?$AutoCleanup@VAutoHandle@@PEAX@@QEBAQEAXXZ
+??B?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEAAPEAXXZ
+??B?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEBAQEAXXZ
+??B?$AutoCleanup@VAutoLibrary@@PEAUHINSTANCE__@@@@QEAAPEAUHINSTANCE__@@XZ
+??B?$AutoCleanup@VAutoLocalFree@@PEAX@@QEAAPEAXXZ
+??B?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEAAPEAU_MI_Class@@XZ
+??B?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@QEAAPEAU_MI_Instance@@XZ
+??B?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@QEAAPEAUHKEY__@@XZ
+??B?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@QEAAPEAXXZ
+??B?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEBA_NXZ
+??B?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEBA_NXZ
+??B?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEBA_NXZ
+??B?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEBA_NXZ
+??B?$SafeMap_Iterator@VKey@Locale@@K@@QEBA_NXZ
+??B?$SafeMap_Iterator@VStringKeyCI@@K@@QEBA_NXZ
+??B?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QEBA_NXZ
+??B?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEBA_NXZ
+??B?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEBA_NXZ
+??C?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PEAU_WSMAN_STREAM_ID_SET@@@@QEAAPEAU_WSMAN_STREAM_ID_SET@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PEAV?$Handle@VISubscription@@@@@@QEAAPEAV?$Handle@VISubscription@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAPEAV?$SafeMap_Iterator@VStringKeyCI@@K@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAPEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@QEAAPEAV?$SafeSet@PEAVCCertMapping@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@QEAAPEAV?$SafeSet@PEAVCShellUriSettings@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAAPEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAAPEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QEAAPEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@QEAAPEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@QEAAPEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@@QEAAPEAVBlockedRecord@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAAPEAVCBaseConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PEAVCCertMapping@@@@QEAAPEAVCCertMapping@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PEAVCConfigChangeSource@@@@QEAAPEAVCConfigChangeSource@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PEAVCListenerSettings@@@@QEAAPEAVCListenerSettings@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@@QEAAPEAVCServiceWatcher@CServiceConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PEAVCShellUriSettings@@@@QEAAPEAVCShellUriSettings@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAAPEAVCWSManEPR@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@@QEAAPEAVCWSManResource@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PEAVCertHash@@@@QEAAPEAVCertHash@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@QEAAPEAVConfigUpdate@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAPEAVEnumSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEBAQEAVEnumSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PEAVExpiredOperationIdRecord@@@@QEAAPEAVExpiredOperationIdRecord@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PEAVGPApiManager@@@@QEAAPEAVGPApiManager@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAPEAVGeneralSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEBAQEAVGeneralSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PEAVIChannelObserverFactory@@@@QEAAPEAVIChannelObserverFactory@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEAAPEAVIQueryDASHSMASHInterface@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEBAQEAVIQueryDASHSMASHInterface@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEAAPEAVISpecification@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEBAQEAVISpecification@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@PEAVMasterReceiveData@CListenerReceive@@@@QEAAPEAVMasterReceiveData@CListenerReceive@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAAPEAVOptionValue@SessionOptions@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@@QEAAPEAVPacketCreator@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PEAVPacketParser@@@@QEAAPEAVPacketParser@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PEAVRunAsConfiguration@@@@QEAAPEAVRunAsConfiguration@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@@QEAAPEAVSecurityEntry@Catalog@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PEAVSendPacketArgs@RobustConnectionBuffer@@@@QEAAPEAVSendPacketArgs@RobustConnectionBuffer@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@@QEAAPEAVServiceSoapProcessor@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PEAVSubscriptionEnumerator@@@@QEAAPEAVSubscriptionEnumerator@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEAAPEAVTSTRBUFFER@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEBAQEAVTSTRBUFFER@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PEAVUniqueStringOverflow@@@@QEAAPEAVUniqueStringOverflow@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PEAVWSMANCONFIGTABLE_IDENTITY@@@@QEAAPEAVWSMANCONFIGTABLE_IDENTITY@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEAAPEAVWmiEnumContext@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEBAQEAVWmiEnumContext@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@QEAAPEAVXmlReader@@XZ
+??C?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEAAPEAEXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEBAQEAEXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEAAPEAGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEBAQEAGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEAAPEAPEAGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEBAQEAPEAGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEAAPEAPEBGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEBAQEAPEBGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAAPEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+??C?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEBAQEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+??C?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEAAPEAU_WINRS_RUN_COMMAND_ARG@@XZ
+??C?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEBAQEAU_WINRS_RUN_COMMAND_ARG@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PEAUIAppHostAdminManager@@@@QEAAPEAUIAppHostAdminManager@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PEAUIAppHostChildElementCollection@@@@QEAAPEAUIAppHostChildElementCollection@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PEAUIAppHostConfigException@@@@QEAAPEAUIAppHostConfigException@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PEAUIAppHostElementCollection@@@@QEAAPEAUIAppHostElementCollection@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PEAUIAppHostProperty@@@@QEAAPEAUIAppHostProperty@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PEAUIAppHostPropertyCollection@@@@QEAAPEAUIAppHostPropertyCollection@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEAAPEAUIClientSecurity@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEBAQEAUIClientSecurity@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEAAPEAUIEnumWbemClassObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEBAQEAUIEnumWbemClassObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEAAPEAUIErrorInfo@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEBAQEAUIErrorInfo@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEAAPEAUIUnknown@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEBAQEAUIUnknown@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEAAPEAUIWbemClassObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEBAQEAUIWbemClassObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEAAPEAUIWbemContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEBAQEAUIWbemContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEAAPEAUIWbemLocator@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEBAQEAUIWbemLocator@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEAAPEAUIWbemObjectTextSrc@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEBAQEAUIWbemObjectTextSrc@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEAAPEAUIWbemPath@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEBAQEAUIWbemPath@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEAAPEAUIWbemPathKeyList@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEBAQEAUIWbemPathKeyList@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEAAPEAUIWbemQualifierSet@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEBAQEAUIWbemQualifierSet@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEAAPEAUIWbemQuery@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEBAQEAUIWbemQuery@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEAAPEAUIWbemServices@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEBAQEAUIWbemServices@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAAPEAVCBaseConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@QEAAPEAVCClientConfigSettings@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PEAVCConfigCacheMap@CBaseConfigCache@@@@QEAAPEAVCConfigCacheMap@CBaseConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@QEAAPEAVCConfigManager@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCListenerReceive@@@@PEAVCListenerReceive@@@@QEAAPEAVCListenerReceive@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@QEAAPEAVCRemoteSession@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@QEBAQEAVCRemoteSession@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@QEAAPEAVCRequestContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PEAVCServiceCommonConfigSettings@@@@QEAAPEAVCServiceCommonConfigSettings@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PEAVCServiceConfigCache@@@@QEAAPEAVCServiceConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@@QEAAPEAVCServiceConfigSettings@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAAPEAVCWSManEPR@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEBAQEAVCWSManEPR@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PEAVCWSManGroupPolicyCache@@@@QEAAPEAVCWSManGroupPolicyCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@@QEAAPEAVCWSManGroupPolicyManager@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PEAVCWSManObject@@@@QEAAPEAVCWSManObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@QEAAPEAVCWSManResource@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEAAPEAVCWinRSPluginConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEBAQEAVCWinRSPluginConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@@QEAAPEAVCWinRSPluginConfigSettings@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PEAVCommand@Client@WSMan@@@@QEAAPEAVCommand@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PEAVConfigNotification@@@@QEAAPEAVConfigNotification@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PEAVConnectShellOperation@Client@WSMan@@@@QEAAPEAVConnectShellOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PEAVCreateShellOperation@Client@WSMan@@@@QEAAPEAVCreateShellOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PEAVDeleteShellOperation@Client@WSMan@@@@QEAAPEAVDeleteShellOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PEAVDisconnectOperation@Client@WSMan@@@@QEAAPEAVDisconnectOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAPEAVEnumSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEBAQEAVEnumSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAPEAVGeneralSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEBAQEAVGeneralSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PEAVIPCSoapProcessor@@@@QEAAPEAVIPCSoapProcessor@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEAAPEAVIRequestContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEBAQEAVIRequestContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@QEAAPEAVInboundRequestDetails@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@QEBAQEAVInboundRequestDetails@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PEAVReceiveOperation@Client@WSMan@@@@QEAAPEAVReceiveOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PEAVReconnectOperation@Client@WSMan@@@@QEAAPEAVReconnectOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PEAVSendOperation@Client@WSMan@@@@QEAAPEAVSendOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAAPEAVShell@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEBAQEAVShell@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PEAVSignalOperation@Client@WSMan@@@@QEAAPEAVSignalOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@@QEAAPEAVUserRecord@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PEAVWSManHttpListener@@@@QEAAPEAVWSManHttpListener@@XZ
+??C?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEAAPEAGXZ
+??C?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEBAQEAGXZ
+??C?$AutoCleanup@VAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@@QEAAPEBU_CERT_CHAIN_CONTEXT@@XZ
+??C?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEAAPEAXXZ
+??C?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEBAQEAXXZ
+??C?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEAAPEAU_MI_Class@@XZ
+??C?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEBAAEAPEAVExpiredOperationIdRecord@@XZ
+??C?$SafeSet_Iterator@PEAVCListenerOperation@@@@QEBAAEBQEAVCListenerOperation@@XZ
+??D?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEBAAEAVCertThumbprintMappedSet@CServiceConfigSettings@@XZ
+??D?$SafeMap_Iterator@VKey@Locale@@K@@QEBAAEAKXZ
+??D?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEBAAEAPEAVExpiredOperationIdRecord@@XZ
+??D?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEBAAEAPEAVOptionValue@SessionOptions@Client@WSMan@@XZ
+??D?$SafeSet_Iterator@PEAVCCertMapping@@@@QEBAAEBQEAVCCertMapping@@XZ
+??D?$SafeSet_Iterator@PEAVCListenerOperation@@@@QEBAAEBQEAVCListenerOperation@@XZ
+??D?$SafeSet_Iterator@PEAVCShellUriSettings@@@@QEBAAEBQEAVCShellUriSettings@@XZ
+??E?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEAAXH@Z
+??E?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEAAXH@Z
+??E?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEAAXH@Z
+??E?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEAAXH@Z
+??E?$SafeMap_Iterator@VStringKeyCI@@K@@QEAAXH@Z
+??E?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QEAAXH@Z
+??E?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEAAXH@Z
+??E?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAAXH@Z
+??_7?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@6B@ DATA
+??_7?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@6B@ DATA
+??_7?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@6B@ DATA
+??_7?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeSet_Iterator@PEAVCollector@@@@@@6B@ DATA
+??_7?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@6B@ DATA
+??_7?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVIOperation@@@@@@6B@ DATA
+??_7?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@6B@ DATA
+??_7?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVPushSubscription@@@@@@6B@ DATA
+??_7?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@6B@ DATA
+??_7?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@6B@ DATA
+??_7?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@6B@ DATA
+??_7?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@6B@ DATA
+??_7?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@6B@ DATA
+??_7?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@6B@ DATA
+??_7?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@6B@ DATA
+??_7?$SafeSet@PEAVCCertMapping@@@@6B@ DATA
+??_7?$SafeSet@PEAVCListenerOperation@@@@6B@ DATA
+??_7?$SafeSet@PEAVCShellUriSettings@@@@6B@ DATA
+??_7?$SafeSet@PEAX@@6B@ DATA
+??_7BufferFormatter@@6B@ DATA
+??_7CBaseConfigCache@@6BIConfigChangeObserver@@@ DATA
+??_7CBaseConfigCache@@6BILifeTimeMgmt@@@ DATA
+??_7CClientConfigCache@@6BIConfigChangeObserver@@@ DATA
+??_7CClientConfigCache@@6BILifeTimeMgmt@@@ DATA
+??_7CConfigManager@@6B@ DATA
+??_7CErrorContext@@6B@ DATA
+??_7CRequestContext@@6BCErrorContext@@@ DATA
+??_7CRequestContext@@6BEtwCorrelationHelper@@@ DATA
+??_7CServiceConfigCache@@6BIConfigChangeObserver@@@ DATA
+??_7CServiceConfigCache@@6BILifeTimeMgmt@@@ DATA
+??_7CWSManEPR@@6B@ DATA
+??_7CWSManGroupPolicyManager@@6B@ DATA
+??_7CWSManResource@@6B@ DATA
+??_7CWSManResourceNoResourceUri@@6B@ DATA
+??_7CWSManSecurityUI@@6B@ DATA
+??_7CWinRSPluginConfigCache@@6BIConfigChangeObserver@@@ DATA
+??_7CWinRSPluginConfigCache@@6BILifeTimeMgmt@@@ DATA
+??_7CircularBufferFormatter@@6B@ DATA
+??_7EtwCorrelationHelper@@6B@ DATA
+??_7IConfigChangeObserver@@6B@ DATA
+??_7ILifeTimeMgmt@@6B@ DATA
+??_7IRequestContext@@6B@ DATA
+??_7IWSManGroupPolicyObserver@@6B@ DATA
+??_7IWSManGroupPolicyPublisher@@6B@ DATA
+??_7PacketParser@@6B@ DATA
+??_7UserAuthzRecord@@6B@ DATA
+??_7UserRecord@@6B@ DATA
+??_FCErrorContext@@QEAAXXZ
+??_FRBUFFER@@QEAAXXZ
+?Acquire@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeSet_Iterator@PEAVCollector@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVIOperation@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVPushSubscription@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@UEBAXXZ
+?Acquire@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@UEBAXXZ
+?Acquire@?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VKey@CWmiPtrCache@@VMapping@2@V?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKey@@PEAVListenerEvents@@V?$SafeMap_Iterator@VStringKey@@PEAVListenerEvents@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKey@@PEAVListenerSourceSubscription@@V?$SafeMap_Iterator@VStringKey@@PEAVListenerSourceSubscription@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKey@@UOption@WinRM_OperationOptions@@V?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@PEAVIISEndpoint@@V?$SafeMap_Iterator@VStringKeyCI@@PEAVIISEndpoint@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@V?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@@@UEBAXXZ
+?Acquire@?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@UEBAXXZ
+?Acquire@?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@UEBAXXZ
+?Acquire@?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAXXZ
+?Acquire@?$SafeMap_Lock@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAAXXZ
+?Acquire@CWSManCriticalSection@@QEAAXXZ
+?AcquireExclusive@FastLock@@QEAAXXZ
+?AcquireShared@FastLock@@QEAAXXZ
+?Acquired@?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA_NXZ
+?Acquired@?$SafeMap_Lock@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAA_NXZ
+?Add@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@QEAA_NAEBQEAVCCertMapping@@AEBUEmpty@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA_NAEBQEAVCListenerOperation@@AEBUEmpty@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@QEAA_NAEBQEAVCShellUriSettings@@AEBUEmpty@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@QEAA_NAEBQEAXAEBUEmpty@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAA_NAEBUPluginKey@@AEBKAEAVIRequestContext@@@Z
+?Add@?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAA_NAEBUUserKey@@AEBQEAVBlockedRecord@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAA_NAEBVCertThumbprintKey@@AEBVCertThumbprintMappedSet@CServiceConfigSettings@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEAA_NAEBVKey@Locale@@AEBKAEAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA_NAEBVStringKeyCI@@AEBKAEAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QEAA_NAEBVStringKeyCI@@AEBUEmpty@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAA_NAEBVStringKeyCI@@AEBUUSER_CONTEXT_INFO@WSManHttpListener@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAA_NAEBVStringKeyStore@@AEBQEAVExpiredOperationIdRecord@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAA_NAEBVStringKeyStore@@AEBQEAVServerFullDuplexChannel@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAA_NAEBW4WSManSessionOption@@AEBQEAVOptionValue@SessionOptions@Client@WSMan@@AEAVIRequestContext@@@Z
+?Add@?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAA_NAEB_KAEBQEAVSendPacketArgs@RobustConnectionBuffer@@AEAVIRequestContext@@@Z
+?Add@?$SafeSet@PEAVCCertMapping@@@@QEAA_NAEBQEAVCCertMapping@@AEAVIRequestContext@@@Z
+?Add@?$SafeSet@PEAVCListenerOperation@@@@QEAA_NAEBQEAVCListenerOperation@@AEAVIRequestContext@@@Z
+?Add@?$SafeSet@PEAVCShellUriSettings@@@@QEAA_NAEBQEAVCShellUriSettings@@AEAVIRequestContext@@@Z
+?Add@?$SafeSet@PEAX@@QEAA_NAEBQEAXAEAVIRequestContext@@@Z
+?Add@?$SafeSet@VStringKeyCI@@@@QEAA_NAEBVStringKeyCI@@AEAVIRequestContext@@@Z
+?AddDefaultPlugins@ConfigUpdate@@SAHPEAVIRequestContext@@H@Z
+?AddKey@CWSManResourceNoResourceUri@@QEAAHPEBG0PEAVIRequestContext@@@Z
+?AddMessage@CRequestContext@@AEAAHPEBGPEAPEAD1@Z
+?AddOption@CWSManResourceNoResourceUri@@QEAAHPEBG0HPEAVIRequestContext@@@Z
+?AddOptionSet@CWSManResourceNoResourceUri@@QEAAHPEAU_WSMAN_OPTION_SET@@PEAVIRequestContext@@@Z
+?AddPacket@PacketParser@@QEAA_NPEAVPacket@@_N11@Z
+?AddRef@CWSManSecurityUI@@UEAAKXZ
+?AddRef@ILifeTimeMgmt@@UEAAJXZ
+?AddRef@UserRecord@@QEAA_NAEAVIRequestContext@@@Z
+?AddSource@CBaseConfigCache@@IEAAHPEAVIRequestContext@@PEAVCConfigChangeSource@@@Z
+?AddToMap@CBaseConfigCache@@AEAAHPEAVIRequestContext@@AEAVAutoLocalFree@@@Z
+?Alloc@WSManMemory@@SAPEAX_KHW4_NitsFaultMode@@@Z
+?AllocBstr@WSManMemory@@SAPEAGPEBGHH@Z
+?AllocBstrLen@WSManMemory@@SAPEAGPEBGIHH@Z
+?AllocCache@CClientConfigCache@@CAPEAVCBaseConfigCache@@XZ
+?AllocCache@CServiceConfigCache@@CAPEAVCBaseConfigCache@@XZ
+?AllocCache@CWinRSPluginConfigCache@@CAPEAVCBaseConfigCache@@XZ
+?AllocSysString@TSTRBUFFER@@QEBAJPEAPEAG@Z
+?AllowBasic@CCommonConfigSettings@@UEBAHXZ
+?AllowClientCertificate@CCommonConfigSettings@@UEBAHXZ
+?AllowCredSsp@CCommonConfigSettings@@UEBAHXZ
+?AllowKerberos@CCommonConfigSettings@@UEBAHXZ
+?AllowNegotiate@CCommonConfigSettings@@UEBAHXZ
+?AllowUnencrypted@CCommonConfigSettings@@UEBAHXZ
+?Append@SBUFFER@@QEAAJPEAEI@Z
+?Append@SBUFFER@@QEAAJPEAV1@@Z
+?Append@TSTRBUFFER@@QEAAJPEBG@Z
+?Append@TSTRBUFFER@@QEAAJPEBGII@Z
+?AppendChar@TSTRBUFFER@@QEAAJG@Z
+?AppendEscapeXmlAttribute@TSTRBUFFER@@QEAAJPEBGG@Z
+?AppendEscapeXmlContent@TSTRBUFFER@@QEAAJPEBG_N@Z
+?AppendXmlElem@TSTRBUFFER@@QEAAJPEBG0HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlElemWithNamespace@TSTRBUFFER@@QEAAJPEBG00HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlElemWithNamespaceAndPrefix@TSTRBUFFER@@QEAAJPEBG000HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlElemWithPrefix@TSTRBUFFER@@QEAAJPEBG00HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlEndElem@TSTRBUFFER@@QEAAJPEBG@Z
+?AppendXmlEndElemWithPrefix@TSTRBUFFER@@QEAAJPEBG0@Z
+?AppendXmlEndFragment@TSTRBUFFER@@QEAAJXZ
+?AppendXmlEndItem@TSTRBUFFER@@QEAAJXZ
+?AppendXmlStartElem@TSTRBUFFER@@QEAAJPEBGHKPEAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithNamespace@TSTRBUFFER@@QEAAJPEBG0HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithNamespaceAndPrefix@TSTRBUFFER@@QEAAJPEBG00HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithNamespaces@TSTRBUFFER@@QEAAJPEBGKPEAU_XML_NAMESPACE_PREFIX@@HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithNamespacesAndPrefixes@TSTRBUFFER@@QEAAJPEBG0KPEAU_XML_NAMESPACE_PREFIX@@HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithPrefix@TSTRBUFFER@@QEAAJPEBG0HKPEAU_XML_ATTRIB@@@Z
+?AppendXmlStartFragment@TSTRBUFFER@@QEAAJXZ
+?AppendXmlStartItem@TSTRBUFFER@@QEAAJXZ
+?ApplyQuota@UserRecord@@QEAA_NW4OperationType@@AEAVIRequestContext@@PEBVProvider@Catalog@@PEAVCServiceConfigSettings@@@Z
+?ApplySecurity@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEAUHKEY__@@PEBG2@Z
+?AsReference@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAAEAV1@XZ
+?AsReference@?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAAAEAV1@XZ
+?AuthzComplete@UserRecord@@UEAAKPEAX0W4AdministratorType@UserAuthzRecord@@KPEBG@Z
+?BOMS@PacketFormatter@@0QBUBOMInfo@1@B DATA
+?BeginRevertToSelf@CSecurity@@SAHPEAPEAXK@Z
+?BuildFragmentTransfer@CWSManResourceNoResourceUri@@UEAAHAEAVBufferFormatter@@@Z
+?BuildOptionSet@CWSManResourceNoResourceUri@@QEAAHAEAVBufferFormatter@@@Z
+?BuildSelectorSet@CWSManEPR@@UEAAHAEAVBufferFormatter@@@Z
+?BuildSelectorSet@CWSManResourceNoResourceUri@@UEAAHAEAVBufferFormatter@@@Z
+?CHARSETS@PacketFormatter@@0QBUCharsetInfo@1@B DATA
+?ChangeLogging@CServiceConfigCache@@QEAAXW4ErrorLogging@@@Z
+?CheckSharedSSLConfiguration@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEBG1HPEAH@Z
+?Clear@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEAAXXZ
+?Clear@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAXXZ
+?Clear@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAAXXZ
+?Clear@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAAXXZ
+?ClearKeys@CWSManResourceNoResourceUri@@QEAAHXZ
+?ClearOptions@CWSManResourceNoResourceUri@@QEAAHXZ
+?ClearRegistryKeys@ConfigRegistry@@IEAAHPEAVIRequestContext@@@Z
+?ClearSubKeys@@YAHPEAUHKEY__@@PEAVIRequestContext@@@Z
+?CompleteWithErrorContext@CRequestContext@@QEAAXPEAU_WSMAN_PLUGIN_REQUEST@@@Z
+?Confirm@ExtendedSemantic@@2KB DATA
+?Copy@TSTRBUFFER@@QEAAJPEBG@Z
+?CopyString@@YAPEAGPEAVIRequestContext@@W4CallSiteId@@PEBG@Z
+?CopyString@@YAPEAGPEBGAEBHAEAVIRequestContext@@@Z
+?CopyString@MessageId@PacketParser@@QEAAKPEBGH@Z
+?CopyTo@CErrorContext@@UEBAXPEAVIRequestContext@@@Z
+?CopyTo@CRequestContext@@UEBAXPEAVIRequestContext@@@Z
+?CreateActivityId@EventHandler@WSMan@@SAXAEAU_GUID@@@Z
+?CreateAnEvent@SoapSemanticConverter@@QEAAKKPEAVSemanticMessage@@AEAVBufferFormatter@@PEAVIRequestContext@@@Z
+?CreateAutoConfiguredListener@CConfigManager@@AEAAHPEAVIRequestContext@@PEAVLISTENER_IDENTITY@@@Z
+?CreateInstance@?$ILoader@VAdminSid@CSecurity@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VEventHandler@WSMan@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VInteractiveSid@CSecurity@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VIpHlpApiDllLoader@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VMachineName@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VNetworkServiceSid@CSecurity@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VNtDsApiDllLoader@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VResources@Locale@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VShell32DllLoader@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VShlWApiDllLoader@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VSubscriptionManager@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VUser32DllLoader@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VWSManMemCryptManager@@@@IEAA_NAEAVIRequestContext@@@Z
+?CreateKey@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEBGPEAPEAUHKEY__@@1KPEAK@Z
+?CreateNew@CBaseConfigCache@@CAPEAV1@PEAVIRequestContext@@PEAVCConfigCacheMap@1@P6APEAV1@XZW4ErrorLogging@@H@Z
+?CreateProvHost@@YAPEAXPEAUHWND__@@PEAK1PEAJ@Z
+?CreateRenderingInformation@CWSManSecurityUI@@AEAAHPEAVIRequestContext@@@Z
+?CreateResponse@SoapSemanticConverter@@QEAAKKW4_MI_OperationCallback_ResponseType@@AEAVBufferFormatter@@PEAVIRequestContext@@@Z
+?CreateSessionGuid@SessionId@PacketParser@@QEAAKPEBGH@Z
+?Data@?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@IEBAAEAV?$STLMap@PEAVCCertMapping@@UEmpty@@@@XZ
+?Data@?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@IEBAAEAV?$STLMap@PEAVCListenerOperation@@UEmpty@@@@XZ
+?Data@?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@IEBAAEAV?$STLMap@PEAVCShellUriSettings@@UEmpty@@@@XZ
+?Data@?$SafeMap_Iterator@PEAXUEmpty@@@@IEBAAEAV?$STLMap@PEAXUEmpty@@@@XZ
+?Data@?$SafeMap_Iterator@UPluginKey@@K@@IEBAAEAV?$STLMap@UPluginKey@@K@@XZ
+?Data@?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@IEBAAEAV?$STLMap@UUserKey@@PEAVBlockedRecord@@@@XZ
+?Data@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@IEBAAEAV?$STLMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@XZ
+?Data@?$SafeMap_Iterator@VKey@Locale@@K@@IEBAAEAV?$STLMap@VKey@Locale@@K@@XZ
+?Data@?$SafeMap_Iterator@VStringKeyCI@@K@@IEBAAEAV?$STLMap@VStringKeyCI@@K@@XZ
+?Data@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@IEBAAEAV?$STLMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@XZ
+?Data@?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@IEBAAEAV?$STLMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@XZ
+?Data@?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@IEBAAEAV?$STLMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@XZ
+?Data@?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@IEBAAEAV?$STLMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@XZ
+?Data@?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@IEBAAEAV?$STLMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@XZ
+?DeInitialize@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeSet_Iterator@PEAVCollector@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVIOperation@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVPushSubscription@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VKey@CWmiPtrCache@@VMapping@2@V?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKey@@PEAVListenerEvents@@V?$SafeMap_Iterator@VStringKey@@PEAVListenerEvents@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKey@@PEAVListenerSourceSubscription@@V?$SafeMap_Iterator@VStringKey@@PEAVListenerSourceSubscription@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKey@@UOption@WinRM_OperationOptions@@V?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@PEAVIISEndpoint@@V?$SafeMap_Iterator@VStringKeyCI@@PEAVIISEndpoint@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@V?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?DeInitialize@CWSManGroupPolicyManager@@AEAAHXZ
+?DeInitialize@EventHandler@WSMan@@QEAA_NAEAVIRequestContext@@@Z
+?Debug@ExtendedSemantic@@2KB DATA
+?Decode@PacketFormatter@@QEBAKPEAPEAVPacket@@_N@Z
+?DecodeFaultObject@CRequestContext@@AEAAKPEAU_FWXML_ELEMENT@@AEAPEBG11@Z
+?DecodeFaultObject@CRequestContext@@AEAAKPEBGKAEAPEBG11@Z
+?DecodeFaultObjectProvider@CRequestContext@@AEAAKPEAU_FWXML_ELEMENT@@AEAPEBG1@Z
+?DecodeFaultObjectProviderMessage@CRequestContext@@AEAAKPEAU_FWXML_ELEMENT@@AEAPEBG@Z
+?DecodeFaultReason@CRequestContext@@AEAAKPEAU_FWXML_ELEMENT@@AEAPEBG@Z
+?DecreaseProfileCount@UserRecord@@QEAAXXZ
+?DeleteConfigKey@ConfigRegistry@@KAHPEAVIRequestContext@@PEBG1H@Z
+?DeleteCredentialsFromCredmanStore@CConfigManager@@SAHPEAVIRequestContext@@PEAG@Z
+?DeleteKey@@YAHPEAVIRequestContext@@PEBG1@Z
+?DeleteKey@ConfigRegistry@@KAHPEAVIRequestContext@@PEBGH@Z
+?DeleteSubkeys@ConfigRegistry@@KAHPEAVIRequestContext@@PEAUHKEY__@@PEBGHH@Z
+?DeleteValues@ConfigRegistry@@KAHPEAVIRequestContext@@PEAUHKEY__@@@Z
+?Detach@?$AutoCleanup@V?$AutoDelete@G@@PEAG@@QEAAPEAGXZ
+?Detach@?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PEAUIPRange@CWSManIPFilter@@@@QEAAPEAUIPRange@CWSManIPFilter@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PEAU_WSMAN_STREAM_ID_SET@@@@QEAAPEAU_WSMAN_STREAM_ID_SET@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PEAV?$Handle@VISubscription@@@@@@QEAAPEAV?$Handle@VISubscription@@@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@QEAAPEAV?$SafeSet@PEAVCCertMapping@@@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@QEAAPEAV?$SafeSet@PEAVCShellUriSettings@@@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@QEAAPEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PEAVAdminSid@CSecurity@@@@QEAAPEAVAdminSid@CSecurity@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@@QEAAPEAVBlockedRecord@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAAPEAVCBaseConfigCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PEAVCCertMapping@@@@QEAAPEAVCCertMapping@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PEAVCListenerSettings@@@@QEAAPEAVCListenerSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@@QEAAPEAVCServiceWatcher@CServiceConfigCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PEAVCShellUriSettings@@@@QEAAPEAVCShellUriSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAAPEAVCWSManEPR@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@@QEAAPEAVCWSManResource@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PEAVCertHash@@@@QEAAPEAVCertHash@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@QEAAPEAVConfigUpdate@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAPEAVEnumSinkEx@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PEAVEventHandler@WSMan@@@@QEAAPEAVEventHandler@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PEAVExpiredOperationIdRecord@@@@QEAAPEAVExpiredOperationIdRecord@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAPEAVGeneralSinkEx@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEAAPEAVIQueryDASHSMASHInterface@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEAAPEAVISpecification@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PEAVInteractiveSid@CSecurity@@@@QEAAPEAVInteractiveSid@CSecurity@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PEAVIpHlpApiDllLoader@@@@QEAAPEAVIpHlpApiDllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PEAVMachineName@@@@QEAAPEAVMachineName@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PEAVNetworkServiceSid@CSecurity@@@@QEAAPEAVNetworkServiceSid@CSecurity@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PEAVNtDsApiDllLoader@@@@QEAAPEAVNtDsApiDllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAAPEAVOptionValue@SessionOptions@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PEAVResources@Locale@@@@QEAAPEAVResources@Locale@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@@QEAAPEAVSecurityEntry@Catalog@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@@QEAAPEAVServiceSoapProcessor@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PEAVShell32DllLoader@@@@QEAAPEAVShell32DllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PEAVShlWApiDllLoader@@@@QEAAPEAVShlWApiDllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PEAVSubscriptionManager@@@@QEAAPEAVSubscriptionManager@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEAAPEAVTSTRBUFFER@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PEAVUser32DllLoader@@@@QEAAPEAVUser32DllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PEAVWSManMemCryptManager@@@@QEAAPEAVWSManMemCryptManager@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEAAPEAVWmiEnumContext@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@QEAAPEAVXmlReader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PEBG@@QEAAPEBGXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@D@@PEAD@@QEAAPEADXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEAAPEAEXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEAAPEAGXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEAAPEAPEAGXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEAAPEAPEBGXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAAPEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEAAPEAU_WINRS_RUN_COMMAND_ARG@@XZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PEAU_WSMAN_OPTION@@@@QEAAPEAU_WSMAN_OPTION@@XZ
+?Detach@?$AutoCleanup@V?$AutoFree@E@@PEAE@@QEAAPEAEXZ
+?Detach@?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@@QEAAPEAVPacket@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEAAPEAUIClientSecurity@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEAAPEAUIEnumWbemClassObject@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEAAPEAUIErrorInfo@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEAAPEAUIUnknown@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEAAPEAUIWbemClassObject@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEAAPEAUIWbemContext@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEAAPEAUIWbemLocator@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEAAPEAUIWbemObjectTextSrc@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEAAPEAUIWbemPath@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEAAPEAUIWbemPathKeyList@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEAAPEAUIWbemQualifierSet@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEAAPEAUIWbemQuery@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEAAPEAUIWbemServices@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PEAVApplication@Client@WSMan@@@@QEAAPEAVApplication@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@QEAAPEAVCBaseConfigCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@QEAAPEAVCClientConfigSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PEAVCCommonConfigSettings@@@@QEAAPEAVCCommonConfigSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@QEAAPEAVCConfigManager@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@QEAAPEAVCRemoteSession@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@QEAAPEAVCRequestContext@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@@QEAAPEAVCServiceConfigSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAAPEAVCWSManEPR@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PEAVCWSManGroupPolicyCache@@@@QEAAPEAVCWSManGroupPolicyCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@@QEAAPEAVCWSManGroupPolicyManager@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PEAVCWSManObject@@@@QEAAPEAVCWSManObject@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEAAPEAVCWinRSPluginConfigCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@@QEAAPEAVCWinRSPluginConfigSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PEAVCommand@Client@WSMan@@@@QEAAPEAVCommand@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAPEAVEnumSinkEx@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAPEAVGeneralSinkEx@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PEAVIPCSoapProcessor@@@@QEAAPEAVIPCSoapProcessor@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEAAPEAVIRequestContext@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PEAVReceiveOperation@Client@WSMan@@@@QEAAPEAVReceiveOperation@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PEAVSendOperation@Client@WSMan@@@@QEAAPEAVSendOperation@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAAPEAVShell@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PEAVSignalOperation@Client@WSMan@@@@QEAAPEAVSignalOperation@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEAAPEAGXZ
+?Detach@?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@QEAAPEBU_CERT_CONTEXT@@XZ
+?Detach@?$AutoCleanup@VAutoHandle@@PEAX@@QEAAPEAXXZ
+?Detach@?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEAAPEAXXZ
+?Detach@?$AutoCleanup@VAutoLocalFree@@PEAX@@QEAAPEAXXZ
+?Detach@?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEAAPEAU_MI_Class@@XZ
+?Detach@?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@QEAAPEAU_MI_Instance@@XZ
+?Detach@?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@QEAAPEAUHKEY__@@XZ
+?Detach@?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@QEAAPEAXXZ
+?Detach@?$AutoCleanup@VAutoWaitHandle@@PEAX@@QEAAPEAXXZ
+?Detach@BufferFormatter@@QEAAPEAEXZ
+?Discard@CServiceWatcher@CServiceConfigCache@@QEAAXXZ
+?DoOnChange@CBaseConfigCache@@IEAAXW4ConfigChangeSources@@KW4ConfigChangeSeverityType@@@Z
+?DoesThreadOwnLock@CWSManCriticalSection@@QEAAHXZ
+?Down@?$LoaderSerializer@VSubscriptionManager@@$01@@AEAAJXZ
+?DropData@CircularBufferFormatter@@QEAAXK@Z
+?DuplicateCurrentToken@CSecurity@@SAHPEAPEAXKPEAU_SECURITY_ATTRIBUTES@@W4_SECURITY_IMPERSONATION_LEVEL@@W4_TOKEN_TYPE@@H@Z
+?EnableAllPrivileges@@YAHPEAPEAE@Z
+?Encode@PacketFormatter@@QEBAKPEAPEAVPacket@@@Z
+?Encode@PacketFormatter@@QEBAKPEBGKPEAEKPEAPEAEPEAK_N@Z
+?EndOfStream@PacketParser@@QEAAXK@Z
+?EndRevertToSelf@CSecurity@@SAHPEAX@Z
+?EnsureActivityIdOnThread@EventHandler@WSMan@@SAXXZ
+?EnsureNoActiveCaches@CClientConfigCache@@SAXXZ
+?EnsureNoActiveCaches@CServiceConfigCache@@SAXXZ
+?Error@EventLog@@SAXK@Z
+?Error@EventLog@@SAXKGPEAPEBG@Z
+?Error@EventLog@@SAXKPEBG@Z
+?ErrorAction@ExtendedSemantic@@2KB DATA
+?EventEnabled@EventHandler@WSMan@@AEAA_NAEBU_EVENT_DESCRIPTOR@@@Z
+?EventProviderEnabled@EventHandler@WSMan@@AEAA_NXZ
+?EventWrite@EventHandler@WSMan@@AEAAXAEBU_EVENT_DESCRIPTOR@@KPEAU_EVENT_DATA_DESCRIPTOR@@@Z
+?ExtractContextId@PacketParser@@QEAAHPEAPEBGKPEBG@Z
+?ExtractShellId@PacketParser@@QEAAHPEAVCRequestContext@@PEAGK@Z
+?ExtractSidFromToken@CSecurity@@SAHPEAVIRequestContext@@PEAXAEAVAutoLocalFree@@@Z
+?FindExisting@CBaseConfigCache@@CAPEAV1@PEAVCConfigCacheMap@1@PEBGW4ErrorLogging@@@Z
+?FindMatch@CResourceAlias@@AEAAPEAU_ALIAS_INFORMATION@@PEBG@Z
+?First@TSTRBUFFER@@QEBAPEBGXZ
+?Format@Locale@@AEBA_NKPEAPEADPEAPEAXPEAGKGW4CallSiteId@@@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SAXAEAU_EVENT_DATA_DESCRIPTOR@@AEAG@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SAXAEAU_EVENT_DATA_DESCRIPTOR@@AEAJ@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SAXAEAU_EVENT_DATA_DESCRIPTOR@@AEAK@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SAXAEAU_EVENT_DATA_DESCRIPTOR@@PEBD@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SAXAEAU_EVENT_DATA_DESCRIPTOR@@PEBG@Z
+?FormatWithFallback@Locale@@AEBA_NKPEAPEAD0PEAPEAXPEAGK@Z
+?Free@WSManMemory@@SAXPEAXH@Z
+?FreeBstr@WSManMemory@@SAXPEAGHH@Z
+?FreeInstance@?$ILoader@VAdminSid@CSecurity@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VEventHandler@WSMan@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VInteractiveSid@CSecurity@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VIpHlpApiDllLoader@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VMachineName@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VNetworkServiceSid@CSecurity@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VNtDsApiDllLoader@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VResources@Locale@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VShell32DllLoader@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VShlWApiDllLoader@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VSubscriptionManager@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VUser32DllLoader@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VWSManMemCryptManager@@@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeInstance@?$LoaderSerializer@VSubscriptionManager@@$01@@QEAA_NAEAVIRequestContext@@_N@Z
+?FreeMemory@RBUFFER@@QEAAXXZ
+?FreeMemory@SBUFFER@@QEAAXXZ
+?FreePacket@PacketParser@@QEAAXXZ
+?FreeXmlStructure@PacketParser@@QEAAXXZ
+?GenerateTransferId@EventHandler@WSMan@@SAXAEBU_EVENT_DESCRIPTOR@@PEBU_GUID@@1@Z
+?GenerateTransferIdImp@EventHandler@WSMan@@AEAAXAEBU_EVENT_DESCRIPTOR@@PEBU_GUID@@1@Z
+?GetAccessRights@CWSManSecurityUI@@UEAAJPEBU_GUID@@KPEAPEAU_SI_ACCESS@@PEAK2@Z
+?GetAction@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetActionType@SoapSemanticConverter@@AEAA_NPEBGPEAW4_MI_OperationCallback_ResponseType@@PEAW4_MI_CallbackMode@@PEAVIRequestContext@@@Z
+?GetActivityIdOnCurrentThread@EventHandler@WSMan@@SAXAEAU_GUID@@@Z
+?GetBaseUri@CWSManResource@@QEAAPEBGXZ
+?GetBomIndex@PacketFormatter@@QEBA?AW4Charset@1@XZ
+?GetBookmarkXml@PacketParser@@QEAAAEBV?$PacketElement@PEAU_FWXML_ELEMENT@@@1@XZ
+?GetBool@CConfigManager@@QEAAHPEAVIRequestContext@@W4ConfigSetting@@PEAHPEAW4WSManConfigSource@@@Z
+?GetBool@CWSManGroupPolicyManager@@QEAAHPEAVIRequestContext@@W4WSManGroupPolicySetting@@PEAHPEAW4WSManGroupPolicySettingState@@@Z
+?GetBuffer@BufferFormatter@@UEAAPEAEXZ
+?GetBuffer@BufferFormatter@@UEBAPEBEXZ
+?GetBuffer@CircularBufferFormatter@@UEAAPEAEXZ
+?GetBuffer@CircularBufferFormatter@@UEBAPEBEXZ
+?GetBuffer@XmlReader@@QEAAPEBGXZ
+?GetBufferLength@PacketParser@@UEAAKXZ
+?GetBufferPtr@PacketParser@@UEAAPEAPEAGXZ
+?GetBufferSize@BufferFormatter@@QEBAKXZ
+?GetCacheCount@CClientConfigCache@@SAKXZ
+?GetCacheCount@CServiceConfigCache@@SAKXZ
+?GetCalculationSize@BufferFormatter@@UEBAK_N@Z
+?GetCalculationSize@CircularBufferFormatter@@UEBAK_N@Z
+?GetCharInUse@TSTRBUFFER@@QEBAIXZ
+?GetCharset@PacketFormatter@@QEBA?AW4Charset@1@XZ
+?GetCharsetLen@PacketFormatter@@QEBAKXZ
+?GetCharsetName@PacketFormatter@@QEBAPEBDXZ
+?GetChildCount@ChildLifeTimeManager@@QEBAJXZ
+?GetConfigCache@CBaseConfigCache@@KAPEAV1@PEAVIRequestContext@@W4ErrorLogging@@P6APEAV1@XZPEAVFastLock@@AEAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@H@Z
+?GetConfigCache@CClientConfigCache@@SAPEAV1@PEAVIRequestContext@@H@Z
+?GetConfigCache@CServiceConfigCache@@SAPEAV1@PEAVIRequestContext@@W4ErrorLogging@@H@Z
+?GetConfigCache@CWinRSPluginConfigCache@@SAPEAV1@PEAVIRequestContext@@W4ErrorLogging@@H@Z
+?GetConfigManager@CConfigManager@@SAPEAV1@XZ
+?GetConfigManagerForCertMapping@CConfigManager@@SAPEAV1@PEAVCERTMAPPING_IDENTITY@@PEAVIRequestContext@@@Z
+?GetConfigManagerForListener@CConfigManager@@SAPEAV1@PEAVLISTENER_IDENTITY@@PEAVIRequestContext@@@Z
+?GetConfigManagerForShellUri@CConfigManager@@SAPEAV1@PEAVSHELLURI_IDENTITY@@PEAVIRequestContext@@@Z
+?GetConfigManagerForTable@CConfigManager@@SAPEAV1@PEAVWSMANCONFIGTABLE_IDENTITY@@PEAVIRequestContext@@@Z
+?GetConfigXml@CConfigManager@@QEAAHPEAVIRequestContext@@PEAPEBGPEAPEAVXmlReader@@PEAH@Z
+?GetCorrelationId@PacketParser@@QEAAAEAU_GUID@@XZ
+?GetCurrentCertMappingIdentity@CConfigManager@@QEAAHPEAVCERTMAPPING_IDENTITY@@PEAVIRequestContext@@@Z
+?GetCurrentListenerIdentity@CConfigManager@@QEAAHPEAVLISTENER_IDENTITY@@PEAVIRequestContext@@@Z
+?GetCurrentSettings@CBaseConfigCache@@IEAAPEAVCCommonConfigSettings@@PEAVIRequestContext@@@Z
+?GetCurrentSettings@CClientConfigCache@@QEAAPEAVCClientConfigSettings@@PEAVIRequestContext@@@Z
+?GetCurrentSettings@CServiceConfigCache@@QEAAPEAVCServiceConfigSettings@@PEAVIRequestContext@@@Z
+?GetCurrentSettings@CWinRSPluginConfigCache@@QEAAPEAVCWinRSPluginConfigSettings@@PEAVIRequestContext@@@Z
+?GetCurrentShellUriIdentity@CConfigManager@@QEAAHPEAVSHELLURI_IDENTITY@@PEAVIRequestContext@@@Z
+?GetCurrentTableIdentity@CConfigManager@@QEAAHPEAVWSMANCONFIGTABLE_IDENTITY@@PEAVIRequestContext@@@Z
+?GetDataLocale@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetDataLocaleHelper@PacketParser@@QEAAAEAVLocale@@XZ
+?GetDescriptionElement@SoapSemanticConverter@@QEAAPEAU_FWXML_ELEMENT@@PEAU2@PEAVIRequestContext@@@Z
+?GetDestructorIter@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@QEAAAEAV?$SafeSet_Iterator@PEAVCCertMapping@@@@XZ
+?GetDestructorIter@?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@QEAAAEAV?$SafeSet_Iterator@PEAVCShellUriSettings@@@@XZ
+?GetDestructorIter@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAAAEAV?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@XZ
+?GetDestructorIter@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAAAEAV?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@XZ
+?GetDestructorIter@?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAAEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@XZ
+?GetDialect@Fragment@PacketParser@@QEBAPEBGXZ
+?GetError@BufferFormatter@@QEBAKXZ
+?GetErrorCode@CErrorContext@@UEBAKXZ
+?GetEventType@SoapSemanticConverter@@AEAAKPEBGPEAVIRequestContext@@@Z
+?GetEventTypeAndResponseElement@SoapSemanticConverter@@AEAAPEAU_FWXML_ELEMENT@@PEAU2@PEAKPEAVIRequestContext@@@Z
+?GetExtendedErrorString@CErrorContext@@UEAAPEAGXZ
+?GetExtendedErrorString@CRequestContext@@UEAAPEAGXZ
+?GetFaultToXml@PacketParser@@QEBAAEBVReferenceParameters@1@XZ
+?GetFaultXML@CErrorContext@@UEBAPEBGXZ
+?GetFaultXML@CRequestContext@@UEBAPEBGXZ
+?GetFaultXMLPrivate@CRequestContext@@AEAAXPEAPEAD0KHKKPEBG11@Z
+?GetFirstConfigManagerForCertMapping@CConfigManager@@SAPEAV1@PEBG@Z
+?GetFirstConfigManagerForListener@CConfigManager@@SAPEAV1@PEBG@Z
+?GetFirstConfigManagerForShellUri@CConfigManager@@SAPEAV1@PEBG@Z
+?GetFirstConfigManagerForTable@CConfigManager@@SAPEAV1@W4WSMANTableConfigType@@PEBG@Z
+?GetFormat@PacketFormatter@@QEBA?AW4Charset@1@XZ
+?GetFormatterMode@BufferFormatter@@QEAA?AW4Charset@PacketFormatter@@XZ
+?GetFragment@PacketParser@@QEBAAEBVFragment@1@XZ
+?GetFragmentDialect@CWSManResourceNoResourceUri@@QEAAPEBGXZ
+?GetFragmentPath@CWSManResourceNoResourceUri@@QEAAPEBGXZ
+?GetGroupPolicyManager@CWSManGroupPolicyManager@@SAPEAV1@PEAVIRequestContext@@PEBG@Z
+?GetHeap@WSManMemory@@SAPEAXXZ
+?GetIISConfiguration@CConfigManager@@SAHPEAVIRequestContext@@PEBGPEAPEAVXmlReader@@@Z
+?GetImpersonationToken@UserRecord@@QEAAPEAXXZ
+?GetInheritTypes@CWSManSecurityUI@@UEAAJPEAPEAU_SI_INHERIT_TYPE@@PEAK@Z
+?GetInitError@CWSManCriticalSection@@QEBAKXZ
+?GetInstance@?$LoaderSerializer@VAdminSid@CSecurity@@$00@@QEAAPEAVAdminSid@CSecurity@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VEventHandler@WSMan@@$00@@QEAAPEAVEventHandler@WSMan@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VInteractiveSid@CSecurity@@$00@@QEAAPEAVInteractiveSid@CSecurity@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VIpHlpApiDllLoader@@$00@@QEAAPEAVIpHlpApiDllLoader@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VMachineName@@$00@@QEAAPEAVMachineName@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VNetworkServiceSid@CSecurity@@$00@@QEAAPEAVNetworkServiceSid@CSecurity@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VNtDsApiDllLoader@@$00@@QEAAPEAVNtDsApiDllLoader@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VResources@Locale@@$0A@@@QEAAPEAVResources@Locale@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VShell32DllLoader@@$00@@QEAAPEAVShell32DllLoader@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VShlWApiDllLoader@@$00@@QEAAPEAVShlWApiDllLoader@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VSubscriptionManager@@$01@@QEAAPEAVSubscriptionManager@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VUser32DllLoader@@$00@@QEAAPEAVUser32DllLoader@@AEAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VWSManMemCryptManager@@$00@@QEAAPEAVWSManMemCryptManager@@AEAVIRequestContext@@@Z
+?GetInt@CConfigManager@@QEAAHPEAVIRequestContext@@W4ConfigSetting@@PEAKPEAW4WSManConfigSource@@@Z
+?GetInt@CWSManGroupPolicyManager@@QEAAHPEAVIRequestContext@@W4WSManGroupPolicySetting@@PEAKPEAW4WSManGroupPolicySettingState@@@Z
+?GetKey@UserRecord@@QEBA?AUUserKey@@XZ
+?GetKeyCount@CWSManResourceNoResourceUri@@QEAAKXZ
+?GetKeyValue@CWSManResourceNoResourceUri@@QEAAPEBGPEBG@Z
+?GetKeys@CWSManResourceNoResourceUri@@QEAAPEAU_WSMAN_KEY@@XZ
+?GetLCID@Locale@@QEAAKXZ
+?GetLength@XmlReader@@QEAA_KXZ
+?GetLocale@CRequestContext@@QEAAAEAVLocale@@XZ
+?GetLocale@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetLocaleHelper@PacketParser@@QEAAAEAVLocale@@XZ
+?GetLocaleString@CRequestContext@@QEAAPEBGXZ
+?GetLocator@CWSManResource@@QEAAPEAU_WSMAN_RESOURCE_LOCATOR@@XZ
+?GetMachineId@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetMap@?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEBAAEAV?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@QEBAAEAV?$SafeMap@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEBAAEAV?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@QEBAAEAV?$SafeMap@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@QEBAAEAV?$SafeMap@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@QEBAAEAV?$SafeMap@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEBAAEAV?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@QEBAAEAV?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@QEBAAEAV?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@QEBAAEAV?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@QEBAAEAV?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@QEBAAEAV?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PEAXUEmpty@@@@QEBAAEAV?$SafeMap@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@UPluginKey@@K@@QEBAAEAV?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@XZ
+?GetMap@?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@QEBAAEAV?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEBAAEAV?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@QEBAAEAV?$SafeMap@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VKey@Locale@@K@@QEBAAEAV?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyCI@@K@@QEBAAEAV?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@QEBAAEAV?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QEBAAEAV?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEBAAEAV?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@QEBAAEAV?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEBAAEAV?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@QEBAAEAV?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@QEBAAEBV?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@QEBAAEBV?$SafeMap@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@QEBAAEBV?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@QEBAAEBV?$SafeMap@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@QEBAAEBV?$SafeMap@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@QEBAAEBV?$SafeMap@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@QEBAAEBV?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@QEBAAEBV?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@QEBAAEBV?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@QEBAAEBV?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@QEBAAEBV?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@QEBAAEBV?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@QEBAAEBV?$SafeMap@PEAXUEmpty@@V?$SafeMap_Iterator@PEAXUEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEBAAEBV?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@XZ
+?GetMap@?$SafeMap_Lock@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEBAAEBV?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEBAAEBV?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@QEBAAEBV?$SafeMap@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QEBAAEBV?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEBAAEBV?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@QEBAAEBV?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEBAAEBV?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEBAAEBV?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEBAAEBV?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@XZ
+?GetMap@?$SafeMap_Lock@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEBAAEBV?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@XZ
+?GetMap@?$SafeMap_Lock@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEBAAEBV?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@XZ
+?GetMaxBatchItems@CCommonConfigSettings@@UEAAKXZ
+?GetMaxBatchSize@CCommonConfigSettings@@UEAAKXZ
+?GetMaxEnvelopeSize@CCommonConfigSettings@@UEAAKXZ
+?GetMaxEnvelopeSize@PacketParser@@QEBAAEBV?$PacketElement@K@1@XZ
+?GetMaxTimeOut@CCommonConfigSettings@@UEAAKXZ
+?GetMessageAlloc@Locale@@QEBAPEBGAEAVAutoLocalFree@@KZZ
+?GetMessageEmpty@Locale@@QEBAPEBGAEAVAutoLocalFree@@K@Z
+?GetMessageId@CErrorContext@@UEBAKXZ
+?GetMessageId@CRequestContext@@UEBAKXZ
+?GetMessageId@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetMessageW@Locale@@QEBA_NKPEAPEAD0PEAGK@Z
+?GetMinBatchItems@CCommonConfigSettings@@UEAAKXZ
+?GetMinBatchSize@CCommonConfigSettings@@UEAAKXZ
+?GetMinBatchTimeout@CCommonConfigSettings@@UEAAKXZ
+?GetMinEnvelopeSize@CCommonConfigSettings@@UEAAKXZ
+?GetMinTimeOut@CCommonConfigSettings@@UEAAKXZ
+?GetNamespacePrefix@NotUnderstandSoapHeader@PacketParser@@QEBAPEBGXZ
+?GetNamespaceUrl@NotUnderstandSoapHeader@PacketParser@@QEBAPEBGXZ
+?GetNewStorage@RBUFFER@@IEAAHI@Z
+?GetNotUnderstandHeader@PacketParser@@QEBAAEBVNotUnderstandSoapHeader@1@XZ
+?GetObjectInformation@CWSManSecurityUI@@UEAAJPEAU_SI_OBJECT_INFO@@@Z
+?GetObjectW@?$ILoader@VAdminSid@CSecurity@@@@IEBAPEAVAdminSid@CSecurity@@XZ
+?GetObjectW@?$ILoader@VEventHandler@WSMan@@@@IEBAPEAVEventHandler@WSMan@@XZ
+?GetObjectW@?$ILoader@VInteractiveSid@CSecurity@@@@IEBAPEAVInteractiveSid@CSecurity@@XZ
+?GetObjectW@?$ILoader@VIpHlpApiDllLoader@@@@IEBAPEAVIpHlpApiDllLoader@@XZ
+?GetObjectW@?$ILoader@VMachineName@@@@IEBAPEAVMachineName@@XZ
+?GetObjectW@?$ILoader@VNetworkServiceSid@CSecurity@@@@IEBAPEAVNetworkServiceSid@CSecurity@@XZ
+?GetObjectW@?$ILoader@VNtDsApiDllLoader@@@@IEBAPEAVNtDsApiDllLoader@@XZ
+?GetObjectW@?$ILoader@VResources@Locale@@@@IEBAPEAVResources@Locale@@XZ
+?GetObjectW@?$ILoader@VShell32DllLoader@@@@IEBAPEAVShell32DllLoader@@XZ
+?GetObjectW@?$ILoader@VShlWApiDllLoader@@@@IEBAPEAVShlWApiDllLoader@@XZ
+?GetObjectW@?$ILoader@VSubscriptionManager@@@@IEBAPEAVSubscriptionManager@@XZ
+?GetObjectW@?$ILoader@VUser32DllLoader@@@@IEBAPEAVUser32DllLoader@@XZ
+?GetObjectW@?$ILoader@VWSManMemCryptManager@@@@IEBAPEAVWSManMemCryptManager@@XZ
+?GetOperationId@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetOptionCount@CWSManResourceNoResourceUri@@QEAAKXZ
+?GetOptionTypes@CWSManResourceNoResourceUri@@QEAAPEAPEBGXZ
+?GetOptionValue@CWSManResourceNoResourceUri@@QEAAPEBGPEBG@Z
+?GetOptions@CWSManResourceNoResourceUri@@QEAAPEAU_WSMAN_OPTION@@XZ
+?GetOptionsMustUnderstandValue@CWSManResourceNoResourceUri@@QEAAHXZ
+?GetOptionsSetXml@PacketParser@@QEAAAEBV?$PacketElement@PEAU_FWXML_ELEMENT@@@1@XZ
+?GetOriginalUri@CWSManResource@@QEAAPEBGXZ
+?GetPacket@PacketParser@@QEAAPEAVPacket@@XZ
+?GetPacketPool@PacketParser@@QEAAAEAVPacketPool@@XZ
+?GetParser@XmlReader@@QEAAPEAXXZ
+?GetPath@Fragment@PacketParser@@QEBAPEBGXZ
+?GetPolicyLocation@CWSManGroupPolicyManager@@AEAAPEBGPEBU_WSMAN_POLICY_INFO@@@Z
+?GetPolicyValueForConfigSetting@CConfigManager@@AEAAJW4ConfigSetting@@KPEAGPEAKPEAW4WSManGroupPolicySettingState@@PEAVIRequestContext@@@Z
+?GetPolicyValueForConfigSetting@CConfigManager@@AEAAJW4ConfigSetting@@PEAKPEAW4WSManGroupPolicySettingState@@PEAVIRequestContext@@@Z
+?GetProfileCount@UserRecord@@QEAAJXZ
+?GetProfileHandle@UserRecord@@QEAA_JXZ
+?GetPromptType@SoapSemanticConverter@@AEAA_NPEBGPEAW4_MI_PromptType@@PEAVIRequestContext@@@Z
+?GetQuotaRecord@UserRecord@@QEBAPEBVQuotaRecord@@XZ
+?GetRefCount@ILifeTimeMgmt@@QEAAJXZ
+?GetReferenceParameters@ReferenceParameters@PacketParser@@QEBAPEBGXZ
+?GetReferenceProperties@ReferenceParameters@PacketParser@@QEBAPEBGXZ
+?GetRemainderPacket@PacketParser@@QEAAPEAVPacket@@PEAVIRequestContext@@@Z
+?GetReplyToXml@PacketParser@@QEBAAEBVReferenceParameters@1@XZ
+?GetRequestedDataLocale@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetRequestedLocale@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetResourceUri@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetRoot@XmlReader@@QEAAPEAU_FWXML_ELEMENT@@XZ
+?GetSecurity@CWSManSecurityUI@@UEAAJKPEAPEAXH@Z
+?GetSecurityDescriptor@CConfigManager@@QEAAHPEAVIRequestContext@@W4ConfigSetting@@PEAPEAXPEAW4WSManConfigSource@@@Z
+?GetSelectorSetXml@PacketParser@@QEAAAEBV?$PacketElement@PEAU_FWXML_ELEMENT@@@1@XZ
+?GetSequenceId@PacketParser@@QEBAAEBV?$PacketElement@_K@1@XZ
+?GetServiceCatalog@@YAPEAVCatalog@@XZ
+?GetSessionId@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetSessionIdGuid@PacketParser@@QEAAAEAU_GUID@@XZ
+?GetSessionIdGuid@SessionId@PacketParser@@QEAAAEAU_GUID@@XZ
+?GetSetting@CConfigManager@@QEAAHPEAVIRequestContext@@W4ConfigSetting@@KPEAGPEAKPEAW4WSManConfigSource@@@Z
+?GetShellCompressionType@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetSid@CSecurity@@SAPEAXXZ
+?GetSizeInUse@SBUFFER@@QEBAIXZ
+?GetSoapBody@PacketParser@@QEAAPEAU_FWXML_ELEMENT@@XZ
+?GetSoapHeaders@PacketParser@@QEAAPEAU_FWXML_ELEMENT@@XZ
+?GetSourceSubscriptionId@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetSpaceUsed@BufferFormatter@@UEBAK_N@Z
+?GetSpaceUsed@CircularBufferFormatter@@UEBAK_N@Z
+?GetStrPtr@TSTRBUFFER@@QEAAPEAGXZ
+?GetString@CConfigManager@@QEAAHPEAVIRequestContext@@W4ConfigSetting@@KPEAGPEAKPEAW4WSManConfigSource@@@Z
+?GetString@CWSManGroupPolicyManager@@QEAAHPEAVIRequestContext@@W4WSManGroupPolicySetting@@KPEAGPEAKPEAW4WSManGroupPolicySettingState@@@Z
+?GetString@Locale@@QEAAPEBGXZ
+?GetStringInternal@CConfigManager@@AEAAHPEAVIRequestContext@@W4ConfigSetting@@KKPEAGPEAKPEAW4WSManConfigSource@@@Z
+?GetStringInternal@CWSManGroupPolicyManager@@AEAAHPEAVIRequestContext@@W4WSManGroupPolicySetting@@KKPEAGPEAKPEAW4WSManGroupPolicySettingState@@@Z
+?GetSubscriptionId@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetSuccessCode@OnHTTPInitialize@@QEBAKXZ
+?GetTimeout@PacketParser@@QEBAAEBV?$PacketElement@K@1@XZ
+?GetTo@PacketParser@@QEBAAEBV?$PacketElement@PEBG@1@XZ
+?GetToken@CSecurity@@SAPEAXXZ
+?GetToken@UserRecord@@QEAAPEAXXZ
+?GetUpdatedSDDL@CWSManSecurityUI@@QEAAPEAGPEAVIRequestContext@@@Z
+?GetUri@CWSManResource@@QEAAPEBGXZ
+?GetUserAdministratorType@UserRecord@@QEBA?AW4AdministratorType@UserAuthzRecord@@XZ
+?GetUserNameW@UserRecord@@QEAAPEBGXZ
+?GetValue@?$PacketElement@K@PacketParser@@QEBAKXZ
+?GetValue@?$PacketElement@PEAU_FWXML_ELEMENT@@@PacketParser@@QEBAPEAU_FWXML_ELEMENT@@XZ
+?GetValue@?$PacketElement@PEBG@PacketParser@@QEBAPEBGXZ
+?GetValue@?$PacketElement@_K@PacketParser@@QEBA_KXZ
+?GetWsmanData@TSTRBUFFER@@QEAAXPEAU_WSMAN_DATA@@@Z
+?GetXmlDoc@PacketParser@@QEAAPEAUFWXML_DOCUMENT@@XZ
+?GrowBuffer@BufferFormatter@@UEAAKK@Z
+?GrowBuffer@BufferFormatter@@UEAAKXZ
+?GrowBuffer@CircularBufferFormatter@@UEAAKK@Z
+?GrowBuffer@CircularBufferFormatter@@UEAAKXZ
+?HandleAutoConfiguredListener@CConfigManager@@QEAAHPEAVIRequestContext@@PEAVLISTENER_IDENTITY@@@Z
+?HandleMigration@@YAHPEAVWSManMigrationContext@@@Z
+?HasFaultXML@CRequestContext@@QEBAHXZ
+?HasHtmlError@CRequestContext@@AEBAHXZ
+?HasOption@CWSManResourceNoResourceUri@@QEAAHPEBG@Z
+?ImpersonateUserOrSelf@CSecurity@@SAHW4CallSiteId@@PEAX@Z
+?IncreaseProfileCount@UserRecord@@QEAAXXZ
+?Info@EventLog@@SAXK@Z
+?Info@EventLog@@SAXKGPEAPEBG@Z
+?Info@EventLog@@SAXKPEBG@Z
+?Init@CBaseConfigCache@@IEAAHPEAVIRequestContext@@H@Z
+?Init@CWSManSecurityUI@@QEAAHPEAG0PEAVIRequestContext@@@Z
+?Init@ConfigRegistry@@IEAAHXZ
+?Init@XmlReader@@QEAAHPEAVIRequestContext@@PEAUWSMAN_OBJECT@@@Z
+?Init@XmlReader@@QEAAHPEAVIRequestContext@@PEBG@Z
+?InitCfgMgr@CConfigManager@@AEAAHPEAVWSMANCONFIGTABLE_IDENTITY@@@Z
+?InitCfgMgr@CConfigManager@@AEAAHPEAVWSMANCONFIGTABLE_IDENTITY@@PEAUHKEY__@@1@Z
+?InitMap@CBaseConfigCache@@CAHPEAVIRequestContext@@AEAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@@Z
+?Initialize@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeSet_Iterator@PEAVCollector@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVIOperation@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVPushSubscription@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VKey@CWmiPtrCache@@VMapping@2@V?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKey@@PEAVListenerEvents@@V?$SafeMap_Iterator@VStringKey@@PEAVListenerEvents@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKey@@PEAVListenerSourceSubscription@@V?$SafeMap_Iterator@VStringKey@@PEAVListenerSourceSubscription@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKey@@UOption@WinRM_OperationOptions@@V?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@PEAVIISEndpoint@@V?$SafeMap_Iterator@VStringKeyCI@@PEAVIISEndpoint@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@V?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@UEAA_NAEAVIRequestContext@@@Z
+?Initialize@?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEAAAEAV1@XZ
+?Initialize@?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEAAAEAV1@XZ
+?Initialize@?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEAAAEAV1@XZ
+?Initialize@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEAAAEAV1@XZ
+?Initialize@?$SafeMap_Iterator@VStringKeyCI@@K@@QEAAAEAV1@XZ
+?Initialize@?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEAAAEAV1@XZ
+?Initialize@?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAAAEAV1@XZ
+?Initialize@CWSManGroupPolicyManager@@AEAAHPEAVIRequestContext@@PEBG@Z
+?Initialize@EventHandler@WSMan@@QEAA_NAEAVIRequestContext@@@Z
+?Initialize@UserRecord@@SAXAEAV1@AEBUInitializer@1@@Z
+?InitializeSources@CBaseConfigCache@@IEAAHPEAVIRequestContext@@HH@Z
+?InitializeSourcesHelper@CBaseConfigCache@@MEAAHPEAVIRequestContext@@H@Z
+?InitializeSourcesHelper@CClientConfigCache@@EEAAHPEAVIRequestContext@@H@Z
+?InsertAtPosition@TSTRBUFFER@@QEAAJPEBGI@Z
+?InternalFailure@CErrorContext@@UEAAXKZZ
+?InternalFailure@CRequestContext@@UEAAXKZZ
+?InternalHResult@CErrorContext@@UEAAXKKZZ
+?InternalHResult@CRequestContext@@UEAAXKKZZ
+?InternalParse@CWSManEPR@@MEAAHPEAVIRequestContext@@@Z
+?InternalParse@CWSManResource@@MEAAHPEAVIRequestContext@@@Z
+?IsActive@ChildLifeTimeManager@@QEAA_NXZ
+?IsAdmin@UserRecord@@QEBA_NXZ
+?IsAutoListenerConfigurationOn@CConfigManager@@SAHPEAVIRequestContext@@PEAH@Z
+?IsCIM_Error@CRequestContext@@QEAAHXZ
+?IsCurrentListenerAutoConfigured@CConfigManager@@QEAAHPEAVIRequestContext@@PEAH@Z
+?IsCurrentListenerCompat@CConfigManager@@QEBA_NXZ
+?IsDynAlloced@RBUFFER@@IEBAHXZ
+?IsEPR@CWSManEPR@@UEAAHXZ
+?IsEPR@CWSManResourceNoResourceUri@@UEAAHXZ
+?IsEmpty@?$ILoader@VAdminSid@CSecurity@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VEventHandler@WSMan@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VInteractiveSid@CSecurity@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VIpHlpApiDllLoader@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VMachineName@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VNetworkServiceSid@CSecurity@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VNtDsApiDllLoader@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VResources@Locale@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VShell32DllLoader@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VShlWApiDllLoader@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VSubscriptionManager@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VUser32DllLoader@@@@QEBA_NXZ
+?IsEmpty@?$ILoader@VWSManMemCryptManager@@@@QEBA_NXZ
+?IsEmpty@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEBA_NXZ
+?IsEmpty@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEBA_NXZ
+?IsEmpty@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QEBA_NXZ
+?IsEvent@SoapSemanticConverter@@QEAA_NPEAU_FWXML_ELEMENT@@@Z
+?IsEventEnabled@EventHandler@WSMan@@SA_NAEBU_EVENT_DESCRIPTOR@@@Z
+?IsEventProviderEnabled@EventHandler@WSMan@@SA_NXZ
+?IsFound@?$PacketElement@K@PacketParser@@QEBAHXZ
+?IsFound@?$PacketElement@PEAU_FWXML_ELEMENT@@@PacketParser@@QEBAHXZ
+?IsFound@?$PacketElement@PEBG@PacketParser@@QEBAHXZ
+?IsFound@?$PacketElement@_K@PacketParser@@QEBAHXZ
+?IsGeneratingError@CErrorContext@@UEBA_NXZ
+?IsIdentifyPacket@PacketParser@@QEBAHXZ
+?IsInCommitMode@BufferFormatter@@QEAA_NXZ
+?IsInteractive@UserRecord@@QEBA_NXZ
+?IsLocalSystemSid@CSecurity@@SAHPEAX@Z
+?IsMustUnderstand@?$PacketElement@PEBG@PacketParser@@QEBAHXZ
+?IsNonOperativePacket@PacketParser@@QEBAHXZ
+?IsPolicyControlledSetting@CConfigManager@@QEAAHPEAVIRequestContext@@W4ConfigSetting@@PEAH@Z
+?IsRobustConnectionPacket@PacketParser@@QEBAHXZ
+?IsStreamingEvent@SoapSemanticConverter@@QEAA_NPEAU_FWXML_ELEMENT@@PEAVIRequestContext@@@Z
+?IsStringNullOrEmpty@@YAHPEBG@Z
+?IsValid@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEBA_NXZ
+?IsValid@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QEBA_NXZ
+?IsValid@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEBA_NXZ
+?IsValid@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEBA_NXZ
+?IsValid@?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEBA_NXZ
+?IsValid@?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@PEAXUEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@UPluginKey@@K@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VKey@Locale@@K@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKey@@PEAVListenerEvents@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKey@@PEAVListenerSourceSubscription@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyCI@@K@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyCI@@PEAVIISEndpoint@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEBA_NXZ
+?IsValid@?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@QEBA_NXZ
+?IsValid@CWSManCriticalSection@@QEBAHXZ
+?IsValid@RBUFFER@@IEBAHXZ
+?Key@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEBAPEBVStringKeyCI@@AEBV2@@Z
+?Key@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEBAPEBVStringKeyCI@@AEBV2@@Z
+?Key@?$SafeMap_Iterator@VKey@Locale@@K@@QEBAAEBV0Locale@@XZ
+?Key@?$SafeMap_Iterator@VStringKeyCI@@K@@QEBAAEBVStringKeyCI@@XZ
+?Key@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QEBAAEBVStringKeyCI@@XZ
+?LogError@CBaseConfigCache@@UEAAXKK@Z
+?LogErrorCode@CErrorContext@@QEAAXXZ
+?LogErrorCode@CRequestContext@@QEAAXXZ
+?LogErrorMessage@CRequestContext@@QEAAXXZ
+?LogNotificationEvent@CWSManGroupPolicyManager@@CAXK@Z
+?LogReadErrors@CBaseConfigCache@@IEAA?AW4ErrorLogging@@W4ConfigChangeSources@@@Z
+?LowerBound@?$SafeMap_Iterator@VKey@Locale@@K@@QEAAXAEBVKey@Locale@@@Z
+?MakeUrlBinding@@YAHKPEAGPEAKPEBG222@Z
+?MakeUrlBinding@@YAPEAGPEAVIRequestContext@@PEBG111@Z
+?MapGeneric@CWSManSecurityUI@@UEAAJPEBU_GUID@@PEAEPEAK@Z
+?Me@?$AutoCleanup@V?$AutoDelete@D@@PEAD@@AEAAAEAV?$AutoDelete@D@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@G@@PEAG@@AEAAAEAV?$AutoDelete@G@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PEAUIPRange@CWSManIPFilter@@@@AEAAAEAV?$AutoDelete@UIPRange@CWSManIPFilter@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@U_SID@@@@PEAU_SID@@@@AEAAAEAV?$AutoDelete@U_SID@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PEAU_WSMAN_STREAM_ID_SET@@@@AEAAAEAV?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PEAV?$Handle@VISubscription@@@@@@AEAAAEAV?$AutoDelete@V?$Handle@VISubscription@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@AEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@AEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@AEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@AEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@PEAV?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@AEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@AEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@AEAAAEAV?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@AEAAAEAV?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@AEAAAEAV?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@AEAAAEAV?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCollector@@@@@@PEAV?$SafeSet_Iterator@PEAVCollector@@@@@@AEAAAEAV?$AutoDelete@V?$SafeSet_Iterator@PEAVCollector@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVHostOperation@@@@@@AEAAAEAV?$AutoDelete@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@PEAV?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@AEAAAEAV?$AutoDelete@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@PEAV?$SimpleStack@VCListenerOperation@@@@@@AEAAAEAV?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@PEAV?$SimpleStack@VShellHostEntry@@@@@@AEAAAEAV?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$queue@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@PEAV?$queue@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@AEAAAEAV?$AutoDelete@V?$queue@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@AEAAAEAV?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@AEAAAEAV?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVCWSManRequest@@V?$transport_allocator@PEAVCWSManRequest@@@@@std@@@@PEAV?$vector@PEAVCWSManRequest@@V?$transport_allocator@PEAVCWSManRequest@@@@@std@@@@AEAAAEAV?$AutoDelete@V?$vector@PEAVCWSManRequest@@V?$transport_allocator@PEAVCWSManRequest@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@AEAAAEAV?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@AEAAAEAV?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVWSManHttpSenderConnection@@V?$transport_allocator@PEAVWSManHttpSenderConnection@@@@@std@@@@PEAV?$vector@PEAVWSManHttpSenderConnection@@V?$transport_allocator@PEAVWSManHttpSenderConnection@@@@@std@@@@AEAAAEAV?$AutoDelete@V?$vector@PEAVWSManHttpSenderConnection@@V?$transport_allocator@PEAVWSManHttpSenderConnection@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PEAVAdminSid@CSecurity@@@@AEAAAEAV?$AutoDelete@VAdminSid@CSecurity@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@@AEAAAEAV?$AutoDelete@VBlockedRecord@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@AEAAAEAV?$AutoDelete@VCBaseConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PEAVCCertMapping@@@@AEAAAEAV?$AutoDelete@VCCertMapping@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PEAVCConfigChangeSource@@@@AEAAAEAV?$AutoDelete@VCConfigChangeSource@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PEAVCListenerSettings@@@@AEAAAEAV?$AutoDelete@VCListenerSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PEAVCObserverConfigChangeErrors@@@@AEAAAEAV?$AutoDelete@VCObserverConfigChangeErrors@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@@AEAAAEAV?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PEAVCShellUriSettings@@@@AEAAAEAV?$AutoDelete@VCShellUriSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PEAVCWSManEPR@@@@AEAAAEAV?$AutoDelete@VCWSManEPR@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@@AEAAAEAV?$AutoDelete@VCWSManResource@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PEAVCertHash@@@@AEAAAEAV?$AutoDelete@VCertHash@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@AEAAAEAV?$AutoDelete@VConfigUpdate@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@AEAAAEAV?$AutoDelete@VEnumSinkEx@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PEAVEventHandler@WSMan@@@@AEAAAEAV?$AutoDelete@VEventHandler@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PEAVExpiredOperationIdRecord@@@@AEAAAEAV?$AutoDelete@VExpiredOperationIdRecord@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PEAVGPApiManager@@@@AEAAAEAV?$AutoDelete@VGPApiManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@AEAAAEAV?$AutoDelete@VGeneralSinkEx@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PEAVIChannelObserverFactory@@@@AEAAAEAV?$AutoDelete@VIChannelObserverFactory@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@AEAAAEAV?$AutoDelete@VIQueryDASHSMASHInterface@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@AEAAAEAV?$AutoDelete@VISpecification@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PEAVInteractiveSid@CSecurity@@@@AEAAAEAV?$AutoDelete@VInteractiveSid@CSecurity@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PEAVIpHlpApiDllLoader@@@@AEAAAEAV?$AutoDelete@VIpHlpApiDllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PEAVMachineName@@@@AEAAAEAV?$AutoDelete@VMachineName@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@PEAVMasterReceiveData@CListenerReceive@@@@AEAAAEAV?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PEAVNetworkServiceSid@CSecurity@@@@AEAAAEAV?$AutoDelete@VNetworkServiceSid@CSecurity@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PEAVNtDsApiDllLoader@@@@AEAAAEAV?$AutoDelete@VNtDsApiDllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@AEAAAEAV?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@@AEAAAEAV?$AutoDelete@VPacketCreator@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PEAVPacketParser@@@@AEAAAEAV?$AutoDelete@VPacketParser@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PEAVResources@Locale@@@@AEAAAEAV?$AutoDelete@VResources@Locale@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PEAVRunAsConfiguration@@@@AEAAAEAV?$AutoDelete@VRunAsConfiguration@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@@AEAAAEAV?$AutoDelete@VSecurityEntry@Catalog@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PEAVSendPacketArgs@RobustConnectionBuffer@@@@AEAAAEAV?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@@AEAAAEAV?$AutoDelete@VServiceSoapProcessor@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PEAVShell32DllLoader@@@@AEAAAEAV?$AutoDelete@VShell32DllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PEAVShlWApiDllLoader@@@@AEAAAEAV?$AutoDelete@VShlWApiDllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PEAVSubscriptionEnumerator@@@@AEAAAEAV?$AutoDelete@VSubscriptionEnumerator@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PEAVSubscriptionManager@@@@AEAAAEAV?$AutoDelete@VSubscriptionManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@AEAAAEAV?$AutoDelete@VTSTRBUFFER@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PEAVUniqueStringOverflow@@@@AEAAAEAV?$AutoDelete@VUniqueStringOverflow@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PEAVUser32DllLoader@@@@AEAAAEAV?$AutoDelete@VUser32DllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PEAVWSMANCONFIGTABLE_IDENTITY@@@@AEAAAEAV?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PEAVWSManMemCryptManager@@@@AEAAAEAV?$AutoDelete@VWSManMemCryptManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@AEAAAEAV?$AutoDelete@VWmiEnumContext@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@AEAAAEAV?$AutoDelete@VXmlReader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PEBG@@AEAAAEAV?$AutoDeleteVector@$$CBG@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@D@@PEAD@@AEAAAEAV?$AutoDeleteVector@D@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@AEAAAEAV?$AutoDeleteVector@E@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@AEAAAEAV?$AutoDeleteVector@G@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@H@@PEAH@@AEAAAEAV?$AutoDeleteVector@H@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@AEAAAEAV?$AutoDeleteVector@PEAG@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@AEAAAEAV?$AutoDeleteVector@PEBG@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PEAU_CONFIG_UPDATE@@@@AEAAAEAV?$AutoDeleteVector@U_CONFIG_UPDATE@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@AEAAAEAV?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@AEAAAEAV?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PEAU_WSMAN_OPTION@@@@AEAAAEAV?$AutoDeleteVector@U_WSMAN_OPTION@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@X@@PEAX@@AEAAAEAV?$AutoDeleteVector@X@@XZ
+?Me@?$AutoCleanup@V?$AutoFree@E@@PEAE@@AEAAAEAV?$AutoFree@E@@XZ
+?Me@?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@@AEAAAEAV?$AutoLocklessItemRecycle@VPacket@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PEAUIAppHostAdminManager@@@@AEAAAEAV?$AutoRelease@UIAppHostAdminManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PEAUIAppHostChildElementCollection@@@@AEAAAEAV?$AutoRelease@UIAppHostChildElementCollection@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PEAUIAppHostConfigException@@@@AEAAAEAV?$AutoRelease@UIAppHostConfigException@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PEAUIAppHostElement@@@@AEAAAEAV?$AutoRelease@UIAppHostElement@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PEAUIAppHostElementCollection@@@@AEAAAEAV?$AutoRelease@UIAppHostElementCollection@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PEAUIAppHostProperty@@@@AEAAAEAV?$AutoRelease@UIAppHostProperty@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PEAUIAppHostPropertyCollection@@@@AEAAAEAV?$AutoRelease@UIAppHostPropertyCollection@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@AEAAAEAV?$AutoRelease@UIClientSecurity@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@AEAAAEAV?$AutoRelease@UIEnumWbemClassObject@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@AEAAAEAV?$AutoRelease@UIErrorInfo@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@AEAAAEAV?$AutoRelease@UIUnknown@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@AEAAAEAV?$AutoRelease@UIWbemClassObject@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@AEAAAEAV?$AutoRelease@UIWbemContext@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@AEAAAEAV?$AutoRelease@UIWbemLocator@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@AEAAAEAV?$AutoRelease@UIWbemObjectTextSrc@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@AEAAAEAV?$AutoRelease@UIWbemPath@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@AEAAAEAV?$AutoRelease@UIWbemPathKeyList@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@AEAAAEAV?$AutoRelease@UIWbemQualifierSet@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@AEAAAEAV?$AutoRelease@UIWbemQuery@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@AEAAAEAV?$AutoRelease@UIWbemServices@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PEAVApplication@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VApplication@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@AEAAAEAV?$AutoRelease@VCBaseConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCClientConfigCache@@@@PEAVCClientConfigCache@@@@AEAAAEAV?$AutoRelease@VCClientConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@AEAAAEAV?$AutoRelease@VCClientConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PEAVCCommonConfigSettings@@@@AEAAAEAV?$AutoRelease@VCCommonConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PEAVCConfigCacheMap@CBaseConfigCache@@@@AEAAAEAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@AEAAAEAV?$AutoRelease@VCConfigManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCListenerCommand@@@@PEAVCListenerCommand@@@@AEAAAEAV?$AutoRelease@VCListenerCommand@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCListenerMasterOperation@@@@PEAVCListenerMasterOperation@@@@AEAAAEAV?$AutoRelease@VCListenerMasterOperation@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCListenerReceive@@@@PEAVCListenerReceive@@@@AEAAAEAV?$AutoRelease@VCListenerReceive@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCListenerShell@@@@PEAVCListenerShell@@@@AEAAAEAV?$AutoRelease@VCListenerShell@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PEAVCRemoteOperation@@@@AEAAAEAV?$AutoRelease@VCRemoteOperation@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@AEAAAEAV?$AutoRelease@VCRemoteSession@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@AEAAAEAV?$AutoRelease@VCRequestContext@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PEAVCServiceCommonConfigSettings@@@@AEAAAEAV?$AutoRelease@VCServiceCommonConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PEAVCServiceConfigCache@@@@AEAAAEAV?$AutoRelease@VCServiceConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@@AEAAAEAV?$AutoRelease@VCServiceConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@AEAAAEAV?$AutoRelease@VCWSManEPR@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PEAVCWSManGroupPolicyCache@@@@AEAAAEAV?$AutoRelease@VCWSManGroupPolicyCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@@AEAAAEAV?$AutoRelease@VCWSManGroupPolicyManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PEAVCWSManObject@@@@AEAAAEAV?$AutoRelease@VCWSManObject@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@AEAAAEAV?$AutoRelease@VCWSManResource@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManSession@@@@PEAVCWSManSession@@@@AEAAAEAV?$AutoRelease@VCWSManSession@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@AEAAAEAV?$AutoRelease@VCWinRSPluginConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@@AEAAAEAV?$AutoRelease@VCWinRSPluginConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PEAVCommand@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VCommand@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PEAVConfigNotification@@@@AEAAAEAV?$AutoRelease@VConfigNotification@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PEAVConnectShellOperation@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PEAVCreateShellOperation@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PEAVDeleteShellOperation@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PEAVDisconnectOperation@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@AEAAAEAV?$AutoRelease@VEnumSinkEx@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@AEAAAEAV?$AutoRelease@VGeneralSinkEx@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VHostMappingTable@@@@PEAVHostMappingTable@@@@AEAAAEAV?$AutoRelease@VHostMappingTable@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PEAVIISConfigSettings@@@@AEAAAEAV?$AutoRelease@VIISConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PEAVIPCSoapProcessor@@@@AEAAAEAV?$AutoRelease@VIPCSoapProcessor@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@AEAAAEAV?$AutoRelease@VIRequestContext@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PEAVISubscription@@@@AEAAAEAV?$AutoRelease@VISubscription@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@AEAAAEAV?$AutoRelease@VInboundRequestDetails@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VProxyManager@Client@WSMan@@@@PEAVProxyManager@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VProxyManager@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VProxySelection@Client@WSMan@@@@PEAVProxySelection@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VProxySelection@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VPushSubscribeOperation@@@@PEAVPushSubscribeOperation@@@@AEAAAEAV?$AutoRelease@VPushSubscribeOperation@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VPushSubscription@@@@PEAVPushSubscription@@@@AEAAAEAV?$AutoRelease@VPushSubscription@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PEAVReceiveOperation@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VReceiveOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PEAVReconnectOperation@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VReconnectOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PEAVSendOperation@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VSendOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VShell@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VShellInfo@@@@PEAVShellInfo@@@@AEAAAEAV?$AutoRelease@VShellInfo@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PEAVSignalOperation@Client@WSMan@@@@AEAAAEAV?$AutoRelease@VSignalOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@@AEAAAEAV?$AutoRelease@VUserRecord@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PEAVWSManHttpListener@@@@AEAAAEAV?$AutoRelease@VWSManHttpListener@@@@XZ
+?Me@?$AutoCleanup@V?$AutoReleaseEx@VHostMappingTableEntry@@@@PEAVHostMappingTableEntry@@@@AEAAAEAV?$AutoReleaseEx@VHostMappingTableEntry@@@@XZ
+?Me@?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@AEAAAEAV?$AutoReleaseEx@VShell@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@VAutoBstr@@PEAG@@AEAAAEAVAutoBstr@@XZ
+?Me@?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@AEAAAEAVAutoBstrNoAlloc@@XZ
+?Me@?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@AEAAAEAVAutoCertContext@@XZ
+?Me@?$AutoCleanup@VAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@@AEAAAEAVAutoChainContext@@XZ
+?Me@?$AutoCleanup@VAutoCoTaskMemFree@@PEAX@@AEAAAEAVAutoCoTaskMemFree@@XZ
+?Me@?$AutoCleanup@VAutoFwXmlCloseParser@@PEAX@@AEAAAEAVAutoFwXmlCloseParser@@XZ
+?Me@?$AutoCleanup@VAutoHandle@@PEAX@@AEAAAEAVAutoHandle@@XZ
+?Me@?$AutoCleanup@VAutoImpersonateUser@@PEAX@@AEAAAEAVAutoImpersonateUser@@XZ
+?Me@?$AutoCleanup@VAutoLibrary@@PEAUHINSTANCE__@@@@AEAAAEAVAutoLibrary@@XZ
+?Me@?$AutoCleanup@VAutoLocalFree@@PEAX@@AEAAAEAVAutoLocalFree@@XZ
+?Me@?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@AEAAAEAVAutoMIClass@@XZ
+?Me@?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@AEAAAEAVAutoMIInstance@@XZ
+?Me@?$AutoCleanup@VAutoObject@@PEAUWSMAN_OBJECT@@@@AEAAAEAVAutoObject@@XZ
+?Me@?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@AEAAAEAVAutoRegKey@@XZ
+?Me@?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@AEAAAEAVAutoSecurityDescriptor@@XZ
+?Me@?$AutoCleanup@VAutoWaitHandle@@PEAX@@AEAAAEAVAutoWaitHandle@@XZ
+?MoveSettingsToMigrationKey@@YAHPEAVIRequestContext@@_N@Z
+?NUM_BOMS@PacketFormatter@@0HB DATA
+?NUM_CHARSETS@PacketFormatter@@0HB DATA
+?Next@TSTRBUFFER@@QEBAPEBGPEBG@Z
+?NextCertMapping@CConfigManager@@QEAAHXZ
+?NextListener@CConfigManager@@QEAAHXZ
+?NextRow@CConfigManager@@QEAAHXZ
+?NextShellUri@CConfigManager@@QEAAHXZ
+?NoSemantics@ExtendedSemantic@@2KB DATA
+?NotifyObservers@CWSManGroupPolicyManager@@UEAAHPEAVIRequestContext@@PEAVIWSManGroupPolicyCacheDataProvider@@@Z
+?OnChange@CBaseConfigCache@@UEAAXW4ConfigChangeSources@@KW4ConfigChangeSeverityType@@@Z
+?OpenRegKey@ConfigRegistry@@IEAAJPEAU_CONFIG_INFO@@KPEAVWSMANCONFIGTABLE_IDENTITY@@PEAVAutoRegKey@@PEAUHKEY__@@@Z
+?OverrideMaxEnvelopeSize@PacketParser@@QEAAXK@Z
+?OverrideTimeout@PacketParser@@QEAAXK@Z
+?Parse@CWSManResource@@SAPEAV1@PEAVIRequestContext@@PEBG11PEAU_WSMAN_SELECTOR_SET@@PEAU_WSMAN_OPTION_SET@@H@Z
+?Parse@CWSManResource@@SAPEAV1@PEAVIRequestContext@@PEBGH@Z
+?Parse@XmlReader@@AEAAHPEAVIRequestContext@@@Z
+?ParseAction@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@_N@Z
+?ParseActivityId@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseBookmark@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseDataLocale@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseEprElement@CWSManEPR@@SAPEAV1@PEAVIRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?ParseEvent@SoapSemanticConverter@@QEAAPEAVSemanticMessage@@PEAU_FWXML_ELEMENT@@PEAKPEAVIRequestContext@@@Z
+?ParseFaultTo@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseFragment@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseHeader@PacketParser@@AEAAHPEAVCRequestContext@@PEAU_FWXML_ELEMENT@@HPEAVCServiceCommonConfigSettings@@@Z
+?ParseHeaders@CWSManResourceNoResourceUri@@QEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@11@Z
+?ParseHeaders@PacketParser@@AEAAHPEAVCRequestContext@@PEAVCServiceCommonConfigSettings@@@Z
+?ParseLocale@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseMachineID@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?ParseMaxEnvelopeSize@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@HPEAVCServiceCommonConfigSettings@@@Z
+?ParseMessageId@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@_N@Z
+?ParseOperationId@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseOptionSet@CWSManResourceNoResourceUri@@QEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?ParseOptions@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParsePacket@PacketParser@@QEAAHPEAVCRequestContext@@PEAVPacket@@PEAVCServiceCommonConfigSettings@@@Z
+?ParsePacketInternal@PacketParser@@AEAAHPEAVCRequestContext@@PEAU_FWXML_ELEMENT@@PEAVCServiceCommonConfigSettings@@@Z
+?ParseReplyTo@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?ParseResourceLocator@CWSManResource@@SAPEAV1@PEAVIRequestContext@@PEAU_WSMAN_RESOURCE_LOCATOR@@@Z
+?ParseResourceUri@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseResponse@SoapSemanticConverter@@QEAA_NPEAU_FWXML_ELEMENT@@PEAKPEA_NPEAVIRequestContext@@@Z
+?ParseRobustConnectionAckSequenceId@PacketParser@@AEAAKPEA_K@Z
+?ParseRobustConnectionMessages@PacketParser@@QEAAKPEAW4PacketType@1@PEA_NPEA_K2@Z
+?ParseSelectors@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseSequenceId@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?ParseSessionId@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseShellCompression@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseStream@PacketParser@@QEAAXPEAVCRequestContext@@PEAVITransportReceiver@@PEAVPacket@@PEAVCServiceCommonConfigSettings@@@Z
+?ParseSubscriptionAgentPacket@PacketParser@@QEAAHPEAVCRequestContext@@PEAVPacket@@PEAVCServiceConfigSettings@@@Z
+?ParseSubscriptionID@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@H@Z
+?ParseTimeout@PacketParser@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@HPEAVCServiceCommonConfigSettings@@@Z
+?ParseToAddress@PacketParser@@AEAAHPEAVCRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?Passed@CErrorContext@@UEBAHXZ
+?PolicyChanged@CWSManGroupPolicyManager@@AEAAXE@Z
+?PostChange@CBaseConfigCache@@MEAAHPEAVIRequestContext@@PEAVCCommonConfigSettings@@1@Z
+?PostChange@CServiceConfigCache@@EEAAHPEAVIRequestContext@@PEAVCCommonConfigSettings@@1@Z
+?PostError@CBaseConfigCache@@MEAAXK@Z
+?PostError@CServiceConfigCache@@EEAAXK@Z
+?PrepareToCommitWithSize@BufferFormatter@@UEAAKK@Z
+?PrepareToCommitWithSize@CircularBufferFormatter@@UEAAKK@Z
+?PrintHandleTrace@@YAXPEAX@Z
+?PrintReleaseTrace@@YAXPEAXJ@Z
+?PrintUnregisterWaitTrace@@YAXPEAX@Z
+?ProcessContext@CErrorContext@@UEAAHHPEAKPEAU_WSMAN_FAULT_OBJECT@@@Z
+?ProcessContext@CErrorContext@@UEAAHHPEAU_WSMAN_ERROR@@@Z
+?ProcessContext@CRequestContext@@QEAAHHPEAU_WSMAN_ENUMERATOR_RESULT@@@Z
+?ProcessContext@CRequestContext@@QEAAHHPEAU_WSMAN_EVENTS_RESULT@@@Z
+?ProcessContext@CRequestContext@@QEAAHHPEAU_WSMAN_RESULT@@@Z
+?ProcessContext@CRequestContext@@QEAAHHPEAU_WSMAN_STATUS@@@Z
+?ProcessContext@CRequestContext@@UEAAHHPEAKPEAU_WSMAN_FAULT_OBJECT@@@Z
+?ProcessContext@CRequestContext@@UEAAHHPEAU_WSMAN_ERROR@@@Z
+?ProcessEPR@CWSManEPR@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?ProcessFragmentDialect@CWSManResourceNoResourceUri@@IEAAHPEAVIRequestContext@@PEBGK@Z
+?ProcessFragmentPath@CWSManResourceNoResourceUri@@IEAAHPEAVIRequestContext@@PEBGK@Z
+?ProcessKey@CWSManResourceNoResourceUri@@IEAAHPEAVIRequestContext@@PEBG1@Z
+?ProcessNestedEPR@CWSManResourceNoResourceUri@@IEAAHPEAVIRequestContext@@PEBGPEAU_FWXML_ELEMENT@@@Z
+?ProcessOption@CWSManResourceNoResourceUri@@IEAAHPEAVIRequestContext@@PEBG11H@Z
+?ProcessRefParameters@CWSManEPR@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?ProcessRefProperties@CWSManEPR@@AEAAHPEAVIRequestContext@@PEAU_FWXML_ELEMENT@@@Z
+?ProcessUri@CWSManResource@@QEAAHPEAVIRequestContext@@PEBGK@Z
+?Progress@ExtendedSemantic@@2KB DATA
+?PropertySheetPageCallback@CWSManSecurityUI@@UEAAJPEAUHWND__@@IW4_SI_PAGE_TYPE@@@Z
+?ProviderFailure@CErrorContext@@UEBAHXZ
+?ProviderShutdownCleanup@CWinRSPluginConfigCache@@SAXXZ
+?PutOverrideValue@?$PacketElement@K@PacketParser@@QEAAXK@Z
+?PutOverrideValue@?$PacketElement@PEBG@PacketParser@@QEAAXPEBG@Z
+?PutValue@?$PacketElement@K@PacketParser@@QEAAXKH@Z
+?PutValue@?$PacketElement@PEAU_FWXML_ELEMENT@@@PacketParser@@QEAAXPEAU_FWXML_ELEMENT@@H@Z
+?PutValue@?$PacketElement@PEBG@PacketParser@@QEAAXPEBGH@Z
+?PutValue@?$PacketElement@_K@PacketParser@@QEAAX_KH@Z
+?PutValue@Fragment@PacketParser@@QEAAXPEBG0H@Z
+?PutValue@NotUnderstandSoapHeader@PacketParser@@QEAAXPEBG00@Z
+?PutValue@ReferenceParameters@PacketParser@@QEAAKPEAU_FWXML_ELEMENT@@H@Z
+?QueryInterface@CWSManSecurityUI@@UEAAJAEBU_GUID@@PEAPEAX@Z
+?QueryPtr@RBUFFER@@QEBAPEAXXZ
+?QueryRegValue@CConfigManager@@AEAAJPEAU_CONFIG_INFO@@PEAKKPEAE1@Z
+?QueryRegValue@CWSManGroupPolicyManager@@AEAAJPEAVIRequestContext@@PEBU_WSMAN_POLICY_INFO@@PEAKKPEAE2@Z
+?QuerySize@RBUFFER@@QEBAIXZ
+?QueryStr@TSTRBUFFER@@QEBAPEBGXZ
+?QuotaComplete@UserRecord@@UEAAXPEAU_WSMAN_AUTHZ_QUOTA@@KPEBG@Z
+?ReAlloc@WSManMemory@@SAPEAXPEAX_KHW4_NitsFaultMode@@@Z
+?ReadCertMappingRegistryKey@CConfigManager@@SAHPEAVIRequestContext@@PEAVCERTMAPPING_IDENTITY@@PEAG@Z
+?ReadCredentialsFromCredmanStore@CConfigManager@@SAHPEAVIRequestContext@@PEAG1@Z
+?ReadCurrentSettings@CClientConfigCache@@EEAAPEAVCCommonConfigSettings@@PEAVIRequestContext@@W4ErrorLogging@@@Z
+?ReadCurrentSettings@CServiceConfigCache@@EEAAPEAVCCommonConfigSettings@@PEAVIRequestContext@@W4ErrorLogging@@@Z
+?ReadCurrentSettings@CWinRSPluginConfigCache@@EEAAPEAVCCommonConfigSettings@@PEAVIRequestContext@@W4ErrorLogging@@@Z
+?ReadDefaultSettings@CClientConfigCache@@EEAAPEAVCCommonConfigSettings@@PEAVIRequestContext@@@Z
+?ReadDefaultSettings@CServiceConfigCache@@EEAAPEAVCCommonConfigSettings@@PEAVIRequestContext@@@Z
+?ReadDefaultSettings@CWinRSPluginConfigCache@@EEAAPEAVCCommonConfigSettings@@PEAVIRequestContext@@@Z
+?ReadShellUriRegistryKey@CConfigManager@@SAHPEAVIRequestContext@@PEAVSHELLURI_IDENTITY@@PEAG@Z
+?ReadTableRegistryKey@CConfigManager@@SAHPEAVIRequestContext@@PEAVWSMANCONFIGTABLE_IDENTITY@@PEAG@Z
+?ReallocStorage@RBUFFER@@IEAAHI@Z
+?RecordAccessDenied@CErrorContext@@UEAAXXZ
+?RecordAccessDenied@CRequestContext@@UEAAXXZ
+?RecordAccessDeniedWithDetail@CErrorContext@@UEAAXKZZ
+?RecordAccessDeniedWithDetail@CRequestContext@@UEAAXKZZ
+?RecordFailure@CErrorContext@@UEAAXK@Z
+?RecordFailure@CErrorContext@@UEAAXKKZZ
+?RecordFailure@CErrorContext@@UEAAXPEAU_WSMAN_FAULT_OBJECT@@@Z
+?RecordFailure@CErrorContext@@UEAAXW4_MI_Result@@KKZZ
+?RecordFailure@CRequestContext@@AEAAXKKPEAPEAD0@Z
+?RecordFailure@CRequestContext@@UEAAXK@Z
+?RecordFailure@CRequestContext@@UEAAXKKZZ
+?RecordFailure@CRequestContext@@UEAAXPEAU_WSMAN_FAULT_OBJECT@@@Z
+?RecordFailure@CRequestContext@@UEAAXW4_MI_Result@@KKZZ
+?RecordHresult@CErrorContext@@UEAAXKKZZ
+?RecordHresult@CRequestContext@@UEAAXKKZZ
+?RecordHtmlError@CRequestContext@@QEAAHKPEAU_FWXML_ELEMENT@@@Z
+?RecordHtmlError@CRequestContext@@QEAAHKPEBGK@Z
+?RecordMIFailure@IRequestContext@@QEAAXW4_MI_Result@@K@Z
+?RecordOutOfMemory@CErrorContext@@UEAAXXZ
+?RecordOutOfMemory@CRequestContext@@UEAAXXZ
+?RecordProviderFailure@CErrorContext@@UEAAXPEAU_WSMAN_FAULT_OBJECT@@PEBG1@Z
+?RecordProviderFailure@CRequestContext@@QEAAXKHPEBG00@Z
+?RecordProviderFailure@CRequestContext@@UEAAXPEAU_WSMAN_FAULT_OBJECT@@PEBG1@Z
+?RecordSoapError@CErrorContext@@UEAAHKPEBG@Z
+?RecordSoapError@CRequestContext@@QEAAHKPEAU_FWXML_ELEMENT@@@Z
+?RecordSoapError@CRequestContext@@UEAAHKPEBG@Z
+?RecordText@CRequestContext@@AEAAHKPEBG_KK@Z
+?RecordXml@CRequestContext@@AEAAHKPEAU_FWXML_ELEMENT@@K@Z
+?Refresh@UserRecord@@QEAAXXZ
+?RegisterChild@ChildLifeTimeManager@@QEAA_NXZ
+?RegisterChunkBoundary@CircularBufferFormatter@@QEAAKXZ
+?RegisterConfigChangeNotification@CConfigManager@@QEAAPEAVConfigNotification@@PEAX@Z
+?RegisterForPolicyNotification@CWSManGroupPolicyManager@@AEAAHPEAVIRequestContext@@H@Z
+?RegisterModule@@YAJKPEAVIHttpModuleRegistrationInfo@@PEAVIHttpServer@@@Z
+?Release@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PEAVCCertMapping@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCListenerConnect@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCListenerReceive@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCListenerSend@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCListenerSignal@@PEAV1@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PEAVCShellUriSettings@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeMap_Iterator@PEAVCollector@@UEmpty@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVCollector@@UEmpty@@V?$SafeSet_Iterator@PEAVCollector@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVHostOperation@@UEmpty@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVIOperation@@UEmpty@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVIOperation@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVListenerSourceSubscription@@UEmpty@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PEAVPushSubscription@@UEmpty@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PEAVPushSubscription@@@@@@UEBAXXZ
+?Release@?$SafeMap@PEAXUEmpty@@V?$SafeSet_Iterator@PEAX@@@@UEBAXXZ
+?Release@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@UEBAXXZ
+?Release@?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@UEBAXXZ
+?Release@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@UEBAXXZ
+?Release@?$SafeMap@VGuidKey@@PEAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@UEBAXXZ
+?Release@?$SafeMap@VKey@CWmiPtrCache@@VMapping@2@V?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@@@UEBAXXZ
+?Release@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKey@@PEAVListenerEvents@@V?$SafeMap_Iterator@VStringKey@@PEAVListenerEvents@@@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKey@@PEAVListenerSourceSubscription@@V?$SafeMap_Iterator@VStringKey@@PEAVListenerSourceSubscription@@@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKey@@UOption@WinRM_OperationOptions@@V?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKeyCI@@PEAVIISEndpoint@@V?$SafeMap_Iterator@VStringKeyCI@@PEAVIISEndpoint@@@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@UEBAXXZ
+?Release@?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@UEBAXXZ
+?Release@?$SafeMap@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@V?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@@@UEBAXXZ
+?Release@?$SafeMap@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@UEBAXXZ
+?Release@?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@UEBAXXZ
+?Release@?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEAAXXZ
+?Release@?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEAAXXZ
+?Release@?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEAAXXZ
+?Release@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEAAXXZ
+?Release@?$SafeMap_Iterator@VStringKeyCI@@K@@QEAAXXZ
+?Release@?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEAAXXZ
+?Release@?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAAXXZ
+?Release@?$SafeMap_Lock@PEAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@@@QEAAXXZ
+?Release@?$SafeMap_Lock@PEAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@@@QEAAXXZ
+?Release@?$SafeMap_Lock@PEAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@@@QEAAXXZ
+?Release@?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEAAXXZ
+?Release@?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAAXXZ
+?Release@?$SafeMap_Lock@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAAXXZ
+?Release@?$SafeMap_Lock@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@QEAAXXZ
+?Release@CBaseConfigCache@@UEAAJP6AXPEAX@Z0@Z
+?Release@CWSManCriticalSection@@QEAAXXZ
+?Release@CWSManSecurityUI@@UEAAKXZ
+?Release@ILifeTimeMgmt@@UEAAJP6AXPEAX@Z0@Z
+?Release@UserRecord@@QEAAJXZ
+?ReleaseExclusive@FastLock@@QEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@D@@PEAD@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@G@@PEAG@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PEAUIPRange@CWSManIPFilter@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@U_SID@@@@PEAU_SID@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PEAU_WSMAN_STREAM_ID_SET@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PEAV?$Handle@VISubscription@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerConnect@@PEAV1@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerReceive@@PEAV1@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerSend@@PEAV1@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@PEAV?$SafeMap_Iterator@PEAVCListenerSignal@@PEAV1@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@PEAV?$SafeMap_Iterator@VGuidKey@@PEAVCListenerCommand@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PEAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@PEAV?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCCertMapping@@@@@@PEAV?$SafeSet@PEAVCCertMapping@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PEAVCShellUriSettings@@@@@@PEAV?$SafeSet@PEAVCShellUriSettings@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVCollector@@@@@@PEAV?$SafeSet_Iterator@PEAVCollector@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVHostOperation@@@@@@PEAV?$SafeSet_Iterator@PEAVHostOperation@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@PEAV?$SafeSet_Iterator@PEAVListenerSourceSubscription@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@PEAV?$SimpleStack@VCListenerOperation@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@PEAV?$SimpleStack@VShellHostEntry@@@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$queue@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@PEAV?$queue@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PEAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@PEAV?$set@PEAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PEAVCListenerSettings@@@@@std@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PEAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVCWSManRequest@@V?$transport_allocator@PEAVCWSManRequest@@@@@std@@@@PEAV?$vector@PEAVCWSManRequest@@V?$transport_allocator@PEAVCWSManRequest@@@@@std@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@PEAV?$vector@PEAVHandleImpl@Client@WSMan@@V?$transport_allocator@PEAVHandleImpl@Client@WSMan@@@@@std@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@PEAV?$vector@PEAVIServiceConfigObserver@@V?$transport_allocator@PEAVIServiceConfigObserver@@@@@std@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$vector@PEAVWSManHttpSenderConnection@@V?$transport_allocator@PEAVWSManHttpSenderConnection@@@@@std@@@@PEAV?$vector@PEAVWSManHttpSenderConnection@@V?$transport_allocator@PEAVWSManHttpSenderConnection@@@@@std@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PEAVAdminSid@CSecurity@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PEAVBlockedRecord@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PEAVCCertMapping@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PEAVCConfigChangeSource@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PEAVCListenerSettings@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PEAVCObserverConfigChangeErrors@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PEAVCServiceWatcher@CServiceConfigCache@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PEAVCShellUriSettings@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PEAVCWSManEPR@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PEAVCWSManResource@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PEAVCertHash@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PEAVConfigUpdate@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PEAVEventHandler@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PEAVExpiredOperationIdRecord@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PEAVGPApiManager@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PEAVIChannelObserverFactory@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PEAVInteractiveSid@CSecurity@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PEAVIpHlpApiDllLoader@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PEAVMachineName@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@PEAVMasterReceiveData@CListenerReceive@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PEAVNetworkServiceSid@CSecurity@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PEAVNtDsApiDllLoader@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PEAVPacketParser@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PEAVResources@Locale@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PEAVRunAsConfiguration@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PEAVSecurityEntry@Catalog@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PEAVSendPacketArgs@RobustConnectionBuffer@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PEAVServiceSoapProcessor@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PEAVShell32DllLoader@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PEAVShlWApiDllLoader@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PEAVSubscriptionEnumerator@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PEAVSubscriptionManager@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PEAVUniqueStringOverflow@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PEAVUser32DllLoader@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PEAVWSMANCONFIGTABLE_IDENTITY@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PEAVWSManMemCryptManager@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PEBG@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@D@@PEAD@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@H@@PEAH@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PEAU_CONFIG_UPDATE@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PEAU_WSMAN_OPTION@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@X@@PEAX@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoFree@E@@PEAE@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PEAUIAppHostAdminManager@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PEAUIAppHostChildElementCollection@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PEAUIAppHostConfigException@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PEAUIAppHostElement@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PEAUIAppHostElementCollection@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PEAUIAppHostProperty@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PEAUIAppHostPropertyCollection@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PEAVApplication@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PEAVCBaseConfigCache@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCClientConfigCache@@@@PEAVCClientConfigCache@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PEAVCClientConfigSettings@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PEAVCCommonConfigSettings@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PEAVCConfigCacheMap@CBaseConfigCache@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PEAVCConfigManager@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCListenerCommand@@@@PEAVCListenerCommand@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCListenerMasterOperation@@@@PEAVCListenerMasterOperation@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCListenerReceive@@@@PEAVCListenerReceive@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCListenerShell@@@@PEAVCListenerShell@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PEAVCRemoteOperation@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PEAVCRemoteSession@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PEAVCRequestContext@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PEAVCServiceCommonConfigSettings@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PEAVCServiceConfigCache@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PEAVCServiceConfigSettings@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PEAVCWSManGroupPolicyCache@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PEAVCWSManGroupPolicyManager@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PEAVCWSManObject@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PEAVCWSManResource@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManSession@@@@PEAVCWSManSession@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PEAVCWinRSPluginConfigSettings@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PEAVCommand@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PEAVConfigNotification@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PEAVConnectShellOperation@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PEAVCreateShellOperation@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PEAVDeleteShellOperation@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PEAVDisconnectOperation@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VHostMappingTable@@@@PEAVHostMappingTable@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PEAVIISConfigSettings@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PEAVIPCSoapProcessor@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PEAVISubscription@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PEAVInboundRequestDetails@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VProxyManager@Client@WSMan@@@@PEAVProxyManager@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VProxySelection@Client@WSMan@@@@PEAVProxySelection@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VPushSubscribeOperation@@@@PEAVPushSubscribeOperation@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VPushSubscription@@@@PEAVPushSubscription@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PEAVReceiveOperation@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PEAVReconnectOperation@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PEAVSendOperation@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VShellInfo@@@@PEAVShellInfo@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PEAVSignalOperation@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PEAVUserRecord@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PEAVWSManHttpListener@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoReleaseEx@VHostMappingTableEntry@@@@PEAVHostMappingTableEntry@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoBstr@@PEAG@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoCoTaskMemFree@@PEAX@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoFwXmlCloseParser@@PEAX@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoHandle@@PEAX@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoImpersonateUser@@PEAX@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoLibrary@@PEAUHINSTANCE__@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoLocalFree@@PEAX@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoObject@@PEAUWSMAN_OBJECT@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@AEAAXXZ
+?ReleasePtr@?$AutoCleanup@VAutoWaitHandle@@PEAX@@AEAAXXZ
+?ReleaseQuota@UserRecord@@QEAAXW4OperationType@@PEBVProvider@Catalog@@@Z
+?ReleaseShared@FastLock@@QEAAXXZ
+?Remove@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEAA_NAEBQEAVCListenerOperation@@@Z
+?Remove@?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEAA_NAEBUUserKey@@@Z
+?Remove@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEAA_NAEBVStringKeyCI@@@Z
+?Remove@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QEAA_NAEBVStringKeyCI@@@Z
+?Remove@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEAA_NAEBVStringKeyStore@@@Z
+?Remove@?$SafeMap@VStringKeyStore@@PEAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@@@QEAA_NAEBVStringKeyStore@@@Z
+?Remove@?$SafeMap@_KPEAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@@@QEAA_NAEB_K@Z
+?RemoveAll@CBaseConfigCache@@KAXPEAVFastLock@@AEAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@@Z
+?RemoveFromMap@CBaseConfigCache@@AEAAHXZ
+?RemoveHttpsBinding@@YAXPEBG@Z
+?RemoveHttpsCertificate@@YAXPEBG0@Z
+?RemoveObserver@CServiceConfigCache@@AEAAHPEAVIServiceConfigObserver@@@Z
+?RemovePluginXmlNewAttrForThresholdOrGreater@@YAHPEAVIRequestContext@@@Z
+?ReportEventW@EventLog@@SAXGKGPEAPEBG@Z
+?Reset@?$PacketElement@K@PacketParser@@QEAAX_N@Z
+?Reset@?$PacketElement@PEAU_FWXML_ELEMENT@@@PacketParser@@QEAAX_N@Z
+?Reset@?$PacketElement@PEBG@PacketParser@@QEAAX_N@Z
+?Reset@?$PacketElement@_K@PacketParser@@QEAAX_N@Z
+?Reset@?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@PEAXUEmpty@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@UPluginKey@@K@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@VKey@Locale@@K@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@VStringKeyCI@@K@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@QEAAXXZ
+?Reset@?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@QEAAXXZ
+?Reset@BufferFormatter@@UEAAXXZ
+?Reset@CErrorContext@@UEAAXH@Z
+?Reset@CRequestContext@@UEAAXH@Z
+?Reset@CircularBufferFormatter@@UEAAXXZ
+?Reset@Locale@@QEAAXXZ
+?Reset@TSTRBUFFER@@QEAAXXZ
+?Reset@UserRecord@@QEAAXXZ
+?ResetProfileCount@UserRecord@@QEAAXXZ
+?ResetRobustConnectionHeaders@PacketParser@@AEAAXXZ
+?Resize@RBUFFER@@QEAAHI@Z
+?Resize@RBUFFER@@QEAAHII@Z
+?ResizeOptionList@CWSManResourceNoResourceUri@@IEAA_NIAEAVIRequestContext@@@Z
+?RestoreAllPrivileges@@YAHPEAU_TOKEN_PRIVILEGES@@@Z
+?RetrieveCertMappingIdentity@CConfigManager@@AEAAHPEAUHKEY__@@PEAVCERTMAPPING_IDENTITY@@@Z
+?RetrieveListenerIdentity@CConfigManager@@AEAAHPEAUHKEY__@@PEAGPEAPEAGPEAVLISTENER_IDENTITY@@@Z
+?RetrieveShellUriIdentity@CConfigManager@@AEAAHPEAUHKEY__@@PEAVSHELLURI_IDENTITY@@@Z
+?RetrieveTableIdentity@CConfigManager@@AEAAHPEAUHKEY__@@PEAVWSMANCONFIGTABLE_IDENTITY@@@Z
+?RevertToSelf@CSecurity@@SAHXZ
+?RtlSecureZeroMemory@XmlReader@@QEAAXXZ
+?SafeStringToUI64@@YAJPEBGEHPEA_KPEAVIRequestContext@@K@Z
+?SetBOM@PacketFormatter@@QEAA_NPEAVPacket@@@Z
+?SetBOM@PacketFormatter@@QEAA_NPEBEK@Z
+?SetCIM_Error@CErrorContext@@UEAAXXZ
+?SetCIM_Error@CRequestContext@@UEAAXXZ
+?SetCharset@PacketFormatter@@QEAAXW4Charset@1@@Z
+?SetCharset@PacketFormatter@@QEAA_NPEBDK_NPEA_N@Z
+?SetCharsetAndBom@PacketFormatter@@QEAAXW4Charset@1@0@Z
+?SetConfigToUseDefaults@CErrorContext@@UEAAXH@Z
+?SetErrorAction@ExtendedSemantic@@QEAAXW4_MI_OperationCallback_ResponseType@@W4_MI_CallbackMode@@@Z
+?SetErrorState@CBaseConfigCache@@AEAAXPEAVCRequestContext@@K@Z
+?SetExactCharSize@TSTRBUFFER@@QEAAJI@Z
+?SetExtendedErrorString@CErrorContext@@UEAAXPEAG@Z
+?SetExtendedErrorString@CRequestContext@@UEAAXPEAG@Z
+?SetExtraLogInfo@CErrorContext@@QEAAXPEBG000@Z
+?SetFault@CErrorContext@@UEAAXKKKPEBG@Z
+?SetFault@CRequestContext@@EEAAXKKKPEBG@Z
+?SetFinishValue@ConfigRegistry@@IEAAHPEAVIRequestContext@@@Z
+?SetFormatterMode@BufferFormatter@@QEAAXW4Charset@PacketFormatter@@0@Z
+?SetFragmentDialect@CWSManResourceNoResourceUri@@QEAAHPEBGPEAVIRequestContext@@@Z
+?SetFragmentPath@CWSManResourceNoResourceUri@@QEAAHPEBGPEAVIRequestContext@@@Z
+?SetGeneratingError@CErrorContext@@UEAAXXZ
+?SetLocale@CRequestContext@@QEAA_NPEBGK@Z
+?SetLocale@Locale@@QEAA_NKPEBGPEAVIRequestContext@@@Z
+?SetMachineName@CRequestContext@@QEAAKPEBG@Z
+?SetMachineName@CRequestContext@@QEAAKPEBG_K@Z
+?SetMachineName@CRequestContext@@QEAAKXZ
+?SetMaxEnvelopeSize@CircularBufferFormatter@@QEAAXK@Z
+?SetOptionsMustUnderstandValue@CWSManResourceNoResourceUri@@QEAAXH@Z
+?SetProfileHandle@UserRecord@@QEAAX_J@Z
+?SetProviderFailure@CErrorContext@@UEAAXH@Z
+?SetSecurity@CWSManSecurityUI@@UEAAJKPEAX@Z
+?SetSize@TSTRBUFFER@@QEAAJII@Z
+?SetSizeInUse@SBUFFER@@QEAAXI@Z
+?SetThreadUILanguage@Locale@@QEAA_NPEAVIRequestContext@@@Z
+?SetUpdateMode@BufferFormatter@@UEAAXW4Mode@1@@Z
+?SetUpdateMode@CircularBufferFormatter@@UEAAXW4Mode@BufferFormatter@@@Z
+?SetUri@CWSManResource@@QEAAHPEBGPEAVIRequestContext@@@Z
+?SetValid@RBUFFER@@IEAAXH@Z
+?SetXml@ReferenceParameters@PacketParser@@AEAAKAEAVBufferFormatter@@PEAU_FWXML_ELEMENT@@@Z
+?Shutdown@CBaseConfigCache@@IEAAXXZ
+?Shutdown@CConfigManager@@SAHXZ
+?Shutdown@CWSManGroupPolicyManager@@SAHXZ
+?Shutdown@ChildLifeTimeManager@@QEAAXXZ
+?ShutdownLocaleMap@Locale@@SAXXZ
+?Size@?$SafeMap@PEAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PEAVCListenerOperation@@@@@@QEBAHXZ
+?Size@?$SafeMap@UUserKey@@PEAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@@@QEBAHXZ
+?Size@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QEBAHXZ
+?Size@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QEBAHXZ
+?Size@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QEBAHXZ
+?Size@?$SafeMap@VStringKeyStore@@PEAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@@@QEBAHXZ
+?SkipOrphans@?$SafeMap_Iterator@PEAVCCertMapping@@UEmpty@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@PEAVCListenerOperation@@UEmpty@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@PEAVCShellUriSettings@@UEmpty@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@PEAXUEmpty@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@UPluginKey@@K@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@UUserKey@@PEAVBlockedRecord@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@VKey@Locale@@K@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@VStringKeyCI@@K@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@VStringKeyStore@@PEAVExpiredOperationIdRecord@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@VStringKeyStore@@PEAVServerFullDuplexChannel@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@W4WSManSessionOption@@PEAVOptionValue@SessionOptions@Client@WSMan@@@@IEAAXXZ
+?SkipOrphans@?$SafeMap_Iterator@_KPEAVSendPacketArgs@RobustConnectionBuffer@@@@IEAAXXZ
+?StartSoapProcessor@@YAHXZ
+?StopSoapProcessor@@YAHXZ
+?Storage@?$AutoCleanup@V?$AutoDelete@G@@PEAG@@QEAAPEAPEAGXZ
+?Storage@?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PEAUIPRange@CWSManIPFilter@@@@QEAAPEAPEAUIPRange@CWSManIPFilter@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAPEAPEAVEnumSinkEx@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAPEAPEAVGeneralSinkEx@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PEAVIQueryDASHSMASHInterface@@@@QEAAPEAPEAVIQueryDASHSMASHInterface@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PEAVISpecification@@@@QEAAPEAPEAVISpecification@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PEAVPacketCreator@@@@QEAAPEAPEAVPacketCreator@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PEAVTSTRBUFFER@@@@QEAAPEAPEAVTSTRBUFFER@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PEAVWmiEnumContext@@@@QEAAPEAPEAVWmiEnumContext@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PEAVXmlReader@@@@QEAAPEAPEAVXmlReader@@XZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PEBG@@QEAAPEAPEBGXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@E@@PEAE@@QEAAPEAPEAEXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@G@@PEAG@@QEAAPEAPEAGXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@PEAG@@PEAPEAG@@QEAAPEAPEAPEAGXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@PEBG@@PEAPEBG@@QEAAPEAPEAPEBGXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QEAAPEAPEAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PEAU_WINRS_RUN_COMMAND_ARG@@@@QEAAPEAPEAU_WINRS_RUN_COMMAND_ARG@@XZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@X@@PEAX@@QEAAPEAPEAXXZ
+?Storage@?$AutoCleanup@V?$AutoFree@E@@PEAE@@QEAAPEAPEAEXZ
+?Storage@?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PEAVPacket@@@@QEAAPEAPEAVPacket@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PEAUIAppHostAdminManager@@@@QEAAPEAPEAUIAppHostAdminManager@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PEAUIAppHostChildElementCollection@@@@QEAAPEAPEAUIAppHostChildElementCollection@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PEAUIAppHostConfigException@@@@QEAAPEAPEAUIAppHostConfigException@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PEAUIAppHostElement@@@@QEAAPEAPEAUIAppHostElement@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PEAUIAppHostElementCollection@@@@QEAAPEAPEAUIAppHostElementCollection@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PEAUIAppHostProperty@@@@QEAAPEAPEAUIAppHostProperty@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PEAUIAppHostPropertyCollection@@@@QEAAPEAPEAUIAppHostPropertyCollection@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PEAUIClientSecurity@@@@QEAAPEAPEAUIClientSecurity@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PEAUIEnumWbemClassObject@@@@QEAAPEAPEAUIEnumWbemClassObject@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PEAUIErrorInfo@@@@QEAAPEAPEAUIErrorInfo@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PEAUIUnknown@@@@QEAAPEAPEAUIUnknown@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PEAUIWbemClassObject@@@@QEAAPEAPEAUIWbemClassObject@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PEAUIWbemContext@@@@QEAAPEAPEAUIWbemContext@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PEAUIWbemLocator@@@@QEAAPEAPEAUIWbemLocator@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PEAUIWbemObjectTextSrc@@@@QEAAPEAPEAUIWbemObjectTextSrc@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PEAUIWbemPath@@@@QEAAPEAPEAUIWbemPath@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PEAUIWbemPathKeyList@@@@QEAAPEAPEAUIWbemPathKeyList@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PEAUIWbemQualifierSet@@@@QEAAPEAPEAUIWbemQualifierSet@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PEAUIWbemQuery@@@@QEAAPEAPEAUIWbemQuery@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PEAUIWbemServices@@@@QEAAPEAPEAUIWbemServices@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PEAVCWSManEPR@@@@QEAAPEAPEAVCWSManEPR@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PEAVCWinRSPluginConfigCache@@@@QEAAPEAPEAVCWinRSPluginConfigCache@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PEAVCommand@Client@WSMan@@@@QEAAPEAPEAVCommand@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PEAVEnumSinkEx@@@@QEAAPEAPEAVEnumSinkEx@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PEAVGeneralSinkEx@@@@QEAAPEAPEAVGeneralSinkEx@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PEAVIRequestContext@@@@QEAAPEAPEAVIRequestContext@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PEAVReceiveOperation@Client@WSMan@@@@QEAAPEAPEAVReceiveOperation@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PEAVSendOperation@Client@WSMan@@@@QEAAPEAPEAVSendOperation@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PEAVShell@Client@WSMan@@@@QEAAPEAPEAVShell@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PEAVSignalOperation@Client@WSMan@@@@QEAAPEAPEAVSignalOperation@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@VAutoBstr@@PEAG@@QEAAPEAPEAGXZ
+?Storage@?$AutoCleanup@VAutoBstrNoAlloc@@PEAG@@QEAAPEAPEAGXZ
+?Storage@?$AutoCleanup@VAutoCertContext@@PEBU_CERT_CONTEXT@@@@QEAAPEAPEBU_CERT_CONTEXT@@XZ
+?Storage@?$AutoCleanup@VAutoChainContext@@PEBU_CERT_CHAIN_CONTEXT@@@@QEAAPEAPEBU_CERT_CHAIN_CONTEXT@@XZ
+?Storage@?$AutoCleanup@VAutoHandle@@PEAX@@QEAAPEAPEAXXZ
+?Storage@?$AutoCleanup@VAutoImpersonateUser@@PEAX@@QEAAPEAPEAXXZ
+?Storage@?$AutoCleanup@VAutoLocalFree@@PEAX@@QEAAPEAPEAXXZ
+?Storage@?$AutoCleanup@VAutoMIClass@@PEAU_MI_Class@@@@QEAAPEAPEAU_MI_Class@@XZ
+?Storage@?$AutoCleanup@VAutoMIInstance@@PEAU_MI_Instance@@@@QEAAPEAPEAU_MI_Instance@@XZ
+?Storage@?$AutoCleanup@VAutoRegKey@@PEAUHKEY__@@@@QEAAPEAPEAUHKEY__@@XZ
+?Storage@?$AutoCleanup@VAutoSecurityDescriptor@@PEAX@@QEAAPEAPEAXXZ
+?Storage@?$AutoCleanup@VAutoWaitHandle@@PEAX@@QEAAPEAPEAXXZ
+?StoreData@CWSManResource@@AEAAHPEAVIRequestContext@@PEBG11PEAU_WSMAN_SELECTOR_SET@@PEAU_WSMAN_OPTION_SET@@@Z
+?StoreData@CWSManResource@@QEAAHPEAVIRequestContext@@PEBG@Z
+?StoreDataFromResourceLocator@CWSManResource@@AEAAHPEAVIRequestContext@@PEAU_WSMAN_RESOURCE_LOCATOR@@@Z
+?StoreExpansion@CResourceAlias@@AEAAXPEBGPEAU_ALIAS_INFORMATION@@@Z
+?StreamingOutput@ExtendedSemantic@@2KB DATA
+?StringCchEndsWithCI@@YAHPEBG0@Z
+?StringCchEquals@@YAHPEBG0@Z
+?StringCchEqualsCI@@YAHPEBG0@Z
+?StringCchStartsWith@@YAHPEBG0@Z
+?StringCchStartsWithCI@@YAHPEBG0@Z
+?StringConcatenate@CWSManResourceNoResourceUri@@IEAAHAEAPEAGAEAKKPEAG@Z
+?StringIsBlank@@YAHPEBG@Z
+?StringToDword@@YAHPEBDPEAK@Z
+?StringToDword@@YAHPEBGPEAK@Z
+?StringTrimWhitespace@@YAPEAGPEAG@Z
+?Subscribe@CWSManGroupPolicyManager@@UEAAHPEAVIRequestContext@@PEAVIWSManGroupPolicyObserver@@H@Z
+?TruncateAt@TSTRBUFFER@@QEAAXI@Z
+?TryAcquire@CWSManCriticalSection@@QEAAHXZ
+?UnSubscribe@CWSManGroupPolicyManager@@UEAAHPEAVIRequestContext@@PEAVIWSManGroupPolicyObserver@@@Z
+?UninstallMigration@@YAHPEAVIRequestContext@@@Z
+?UnregisterChild@ChildLifeTimeManager@@QEAAXXZ
+?UnregisterPolicyNotification@CWSManGroupPolicyManager@@AEAAHXZ
+?Up@?$LoaderSerializer@VSubscriptionManager@@$01@@AEAAJXZ
+?UpdateCredentialsInCredmanStore@CConfigManager@@SAHPEAVIRequestContext@@PEAG1@Z
+?UpdateHttpsBinding@@YAHPEAVIRequestContext@@PEBG1PEAHHH@Z
+?UpdateHttpsCertificate@@YAHPEAVIRequestContext@@PEBG11PEAHHU_GUID@@@Z
+?UpdateKey@CWSManResourceNoResourceUri@@QEAAHPEAVIRequestContext@@PEBG1@Z
+?Uri@CResourceAlias@@QEAAPEBGXZ
+?UseClientToken@UserRecord@@QEAA_NXZ
+?UseDefaultConfig@CErrorContext@@UEBAHXZ
+?UsingDefaultLCID@Locale@@QEAA_NXZ
+?Validate@Locale@@SA_NPEAU_WSMAN_DATA@@@Z
+?Validate@Locale@@SA_NPEBG@Z
+?ValidateCBTHardeningLevel@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEBG@Z
+?ValidateCertificateHash@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEBG111@Z
+?ValidateHeaders@PacketParser@@QEAAHPEAVIRequestContext@@K@Z
+?ValidateHostnameAndCertificateCN@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEBG1@Z
+?ValidateIPFilter@ConfigRegistry@@IEAAHPEAVIRequestContext@@W4ConfigSetting@@PEBG@Z
+?ValidateInt@CWSManGroupPolicyManager@@AEAAHPEAVIRequestContext@@PEBU_WSMAN_POLICY_INFO@@K@Z
+?ValidateInt@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEAU_CONFIG_INFO@@KPEBG@Z
+?ValidateString@CWSManGroupPolicyManager@@AEAAHPEAVIRequestContext@@PEBU_WSMAN_POLICY_INFO@@PEBG@Z
+?ValidateString@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEAU_CONFIG_INFO@@PEBG@Z
+?ValidateTrustedHosts@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEBG@Z
+?ValidateUrlPrefix@ConfigRegistry@@IEAAHPEAVIRequestContext@@PEBG@Z
+?Verbose@ExtendedSemantic@@2KB DATA
+?VerifyState@RBUFFER@@IEBAXXZ
+?WSManError@@YAXPEBGK0KPEAVIRequestContext@@@Z
+?WSManMemoryOperation@@YAHW4WSMANMEMOPERATION@@PEAXKK@Z
+?WSManPostThreadMessageW@@YAHKI_K_J@Z
+?WaitForAllChildrenToUnregister@ChildLifeTimeManager@@QEAAXK@Z
+?WaitForConditionVar@CWSManCriticalSectionWithConditionVar@@QEAAKK@Z
+?WaitForMore@PacketParser@@UEAA_NXZ
+?WakeAllWaitingForConditionVar@CWSManCriticalSectionWithConditionVar@@QEAAXXZ
+?WakeAllWaitingOnNoOfChildren@ChildLifeTimeManager@@AEAAXXZ
+?Warning@EventLog@@SAXK@Z
+?Warning@EventLog@@SAXKGPEAPEBG@Z
+?Warning@EventLog@@SAXKPEBG@Z
+?Warning@ExtendedSemantic@@2KB DATA
+?WatchForChanges@CServiceConfigCache@@QEAAPEAVCServiceWatcher@1@PEAVIRequestContext@@PEAVIServiceConfigObserver@@@Z
+?WrapperCoSetProxyBlanket@@YAJPEAUIUnknown@@KKPEAGKKPEAXKW4BehaviourForNoInterfaceError@@@Z
+?Write@EventHandler@WSMan@@SAXAEBU_EVENT_DESCRIPTOR@@KPEAU_EVENT_DATA_DESCRIPTOR@@@Z
+?WriteCredentialsToCredmanStore@CConfigManager@@SAHPEAVIRequestContext@@PEAG1H@Z
+?WriteSoapA@EventHandler@WSMan@@SAXAEBU_EVENT_DESCRIPTOR@@PEBDK@Z
+?WriteSoapMessageA@EventHandler@WSMan@@AEAAXAEBU_EVENT_DESCRIPTOR@@PEBDK@Z
+?WriteSoapMessageW@EventHandler@WSMan@@AEAAXAEBU_EVENT_DESCRIPTOR@@PEBGK@Z
+?WriteSoapMessageW_BE@EventHandler@WSMan@@AEAAXAEBU_EVENT_DESCRIPTOR@@PEBGK@Z
+?WriteSoapW@EventHandler@WSMan@@SAXAEBU_EVENT_DESCRIPTOR@@PEBGK@Z
+?WriteSoapW_BE@EventHandler@WSMan@@SAXAEBU_EVENT_DESCRIPTOR@@PEBGK@Z
+?_PolicyChangedCallback@CWSManGroupPolicyManager@@CAXPEAXE@Z
+?back@?$SimpleQueue@T_LARGE_INTEGER@@@@QEBA?BT_LARGE_INTEGER@@XZ
+?empty@?$SimpleQueue@T_LARGE_INTEGER@@@@QEBA_NXZ
+?front@?$SimpleQueue@T_LARGE_INTEGER@@@@QEBA?BT_LARGE_INTEGER@@XZ
+?g_Resources@Locale@@0V?$Loader@VResources@Locale@@$0A@@@A DATA
+?isValid@?$SafeSet@PEAVCListenerOperation@@@@QEBA_NXZ
+?m_migContext@ConfigRegistry@@2PEAVWSManMigrationContext@@EA DATA
+?pop@?$SimpleQueue@T_LARGE_INTEGER@@@@QEAAXXZ
+?push@?$SimpleQueue@T_LARGE_INTEGER@@@@QEAAKT_LARGE_INTEGER@@@Z
+?s_cacheMap@CClientConfigCache@@0V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@A DATA
+?s_cacheMap@CServiceConfigCache@@0V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@A DATA
+?s_cacheMap@CWinRSPluginConfigCache@@0V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@A DATA
+?s_config@CConfigManager@@0V?$AutoRelease@VCConfigManager@@@@A DATA
+?s_lock@CConfigManager@@0VFastLock@@A DATA
+?s_lock@CWSManGroupPolicyManager@@0VFastLock@@A DATA
+?s_mapLock@CClientConfigCache@@0VFastLock@@A DATA
+?s_mapLock@CServiceConfigCache@@0VFastLock@@A DATA
+?s_mapLock@CWinRSPluginConfigCache@@0VFastLock@@A DATA
+?s_policyManager@CWSManGroupPolicyManager@@0V?$AutoRelease@VCWSManGroupPolicyManager@@@@A DATA
+EnumServiceUserResources
+FwGetParsedDocument
+FwGetRootElement
+FwIsXmlEscapedProperly
+FwXmlAddAttributeToAttributeList
+FwXmlCloseParser
+FwXmlCompareAttributeName
+FwXmlCompareAttributeNameEx
+FwXmlCompareElementName
+FwXmlCompareElementNameEx
+FwXmlCompareElementNameLen
+FwXmlCompareElementNameSpace
+FwXmlCompareName
+FwXmlCreateXmlFromElement
+FwXmlDecodeXmlEscapes
+FwXmlEncodeXmlEscapes
+FwXmlFindAttribute
+FwXmlFindAttributeEx
+FwXmlFindChildElement
+FwXmlFindChildElementEx
+FwXmlGetAttribute
+FwXmlGetAttributeNameEx
+FwXmlGetAttributeNamespacePrefix
+FwXmlGetAttributeValue
+FwXmlGetAttributeValueDWord
+FwXmlGetBooleanValue
+FwXmlGetBuffer
+FwXmlGetChild
+FwXmlGetElementName
+FwXmlGetElementNameEx
+FwXmlGetElementNamespacePrefix
+FwXmlGetElementNamespaceUrl
+FwXmlGetEntryNameEx
+FwXmlGetNamespaceForPrefix
+FwXmlGetNormalizedString
+FwXmlGetReferenceXmlFromElement
+FwXmlGetRemainder
+FwXmlGetSimpleContent
+FwXmlGetSimpleContentEx
+FwXmlGetSimpleContentEx2
+FwXmlHasText
+FwXmlIsEmpty
+FwXmlIsMustUnderstand
+FwXmlIsNull
+FwXmlIsSimpleContent
+FwXmlIsSimpleContentOrEmpty
+FwXmlIsTrueValue
+FwXmlNumAttributes
+FwXmlNumChildren
+FwXmlNumChildrenWithName
+FwXmlNumConsecutiveChildrenWithName
+FwXmlParsePrefixedXML
+FwXmlParseStream
+FwXmlParseText
+FwXmlParserCreate
+FwXmlUpdatePrefixes
+GetServiceSecurity
+MI_Application_InitializeV1
+SetServiceSecurity
+SubscriptionsProvEnumerate
+WSManAckEvents
+WSManAddSubscriptionManagerInternal
+WSManCloseCommand
+WSManCloseEnumerationHandle
+WSManCloseEnumeratorHandle
+WSManCloseObjectHandle
+WSManCloseOperation
+WSManClosePublisherHandle
+WSManCloseSession
+WSManCloseSessionHandle
+WSManCloseShell
+WSManCloseSubscriptionHandle
+WSManConnectShell
+WSManConnectShellCommand
+WSManConstructError
+WSManCreateEnumeratorInternal
+WSManCreateInternal
+WSManCreateInternalEx
+WSManCreatePullSubscription
+WSManCreatePushSubscription
+WSManCreateSession
+WSManCreateSessionInternal
+WSManCreateShell
+WSManCreateShellEx
+WSManDecodeObject
+WSManDeinitialize
+WSManDeleteInternal
+WSManDeleteInternalEx
+WSManDeliverEndSubscriptionNotification
+WSManDeliverEvent
+WSManDisconnectShell
+WSManEncodeObject
+WSManEncodeObjectEx
+WSManEncodeObjectInternal
+WSManEnumerateInternal
+WSManEnumerateInternalEx
+WSManEnumeratorAddEvent
+WSManEnumeratorAddObject
+WSManEnumeratorBatchPolicyViolated
+WSManEnumeratorNextObject
+WSManEnumeratorObjectCount
+WSManGetErrorMessage
+WSManGetInternal
+WSManGetInternalEx
+WSManGetSessionOptionAsDword
+WSManGetSessionOptionAsString
+WSManIdentifyInternal
+WSManInitialize
+WSManInvokeInternal
+WSManInvokeInternalEx
+WSManPluginAuthzOperationComplete
+WSManPluginAuthzQueryQuotaComplete
+WSManPluginAuthzUserComplete
+WSManPluginFreeRequestDetails
+WSManPluginGetConfiguration
+WSManPluginGetOperationParameters
+WSManPluginInteractiveCallback
+WSManPluginObjectAndBookmarkResult
+WSManPluginObjectAndEprResult
+WSManPluginObjectResult
+WSManPluginOperationComplete
+WSManPluginReceiveResult
+WSManPluginReportCompletion
+WSManPluginReportContext
+WSManPluginShutdown
+WSManPluginStartup
+WSManProvCreate
+WSManProvDelete
+WSManProvEnumerate
+WSManProvGet
+WSManProvInvoke
+WSManProvPut
+WSManPull
+WSManPullEvents
+WSManPutInternal
+WSManPutInternalEx
+WSManReceiveShellOutput
+WSManReconnectShell
+WSManReconnectShellCommand
+WSManRemoveSubscriptionManagerInternal
+WSManRunShellCommand
+WSManRunShellCommandEx
+WSManSendShellInput
+WSManSetSessionOption
+WSManSignalShell
+mi_clientFT_V1 DATA
diff --git a/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-0.def
new file mode 100644
index 0000000000..c2daa031bc
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-0.def
@@ -0,0 +1,37 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-0
+
+EXPORTS
+
+ClosePackageInfo@4
+CreateDeviceAccessInstance@12
+GetApplicationUserModelId@12
+GetCurrentApplicationUserModelId@8
+GetCurrentPackageFamilyName@8
+GetCurrentPackageFullName@8
+GetCurrentPackageId@8
+GetCurrentPackageInfo@16
+GetCurrentPackagePath@8
+GetPackageFamilyName@12
+GetPackageFullName@12
+GetPackageId@12
+GetPackageInfo@20
+GetPackagePath@16
+GetPackagesByPackageFamily@20
+OpenPackageInfoByFullName@12
+PackageFamilyNameFromFullName@12
+PackageFamilyNameFromId@12
+PackageFullNameFromId@12
+PackageIdFromFullName@16
+PackageNameAndPublisherIdFromFamilyName@20
+ProcessTrackerInsertOrWait@8
+ProcessTrackerRemove@4
+TokenBindingDeleteAllBindings@0
+TokenBindingDeleteBinding@4
+TokenBindingGenerateBinding@40
+TokenBindingGenerateID@16
+TokenBindingGenerateIDForUri@12
+TokenBindingGenerateMessage@20
+TokenBindingGetHighestSupportedVersion@8
+TokenBindingGetKeyTypesClient@4
+TokenBindingGetKeyTypesServer@4
+TokenBindingVerifyMessage@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..a7e4da52b6
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-0_windowsapp.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-0
+
+EXPORTS
+
+ClosePackageInfo@4
+CreateDeviceAccessInstance@12
+GetApplicationUserModelId@12
+GetCurrentApplicationUserModelId@8
+GetCurrentPackageFamilyName@8
+GetCurrentPackageFullName@8
+GetCurrentPackageId@8
+GetCurrentPackageInfo@16
+GetCurrentPackagePath@8
+GetPackageFamilyName@12
+GetPackageFullName@12
+GetPackageId@12
+GetPackageInfo@20
+GetPackagePath@16
+GetPackagesByPackageFamily@20
+OpenPackageInfoByFullName@12
+PackageFamilyNameFromFullName@12
+PackageFamilyNameFromId@12
+PackageFullNameFromId@12
+PackageIdFromFullName@16
+PackageNameAndPublisherIdFromFamilyName@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-1.def
new file mode 100644
index 0000000000..b414a8bea0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-1.def
@@ -0,0 +1,20 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-1
+
+EXPORTS
+
+FindPackagesByPackageFamily@28
+FormatApplicationUserModelId@16
+GetApplicationUserModelIdFromToken@12
+GetPackageApplicationIds@16
+GetPackageFamilyNameFromToken@12
+GetPackageFullNameFromToken@12
+GetPackagePathByFullName@12
+GetStagedPackageOrigin@8
+GetStagedPackagePathByFullName@12
+OpenPackageInfoByFullNameForUser@16
+ParseApplicationUserModelId@20
+VerifyApplicationUserModelId@4
+VerifyPackageFamilyName@4
+VerifyPackageFullName@4
+VerifyPackageId@4
+VerifyPackageRelativeApplicationId@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..df1110f143
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-1_windowsapp.def
@@ -0,0 +1,19 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-1
+
+EXPORTS
+
+FindPackagesByPackageFamily@28
+FormatApplicationUserModelId@16
+GetApplicationUserModelIdFromToken@12
+GetPackageApplicationIds@16
+GetPackageFamilyNameFromToken@12
+GetPackageFullNameFromToken@12
+GetPackagePathByFullName@12
+GetStagedPackagePathByFullName@12
+OpenPackageInfoByFullNameForUser@16
+ParseApplicationUserModelId@20
+VerifyApplicationUserModelId@4
+VerifyPackageFamilyName@4
+VerifyPackageFullName@4
+VerifyPackageId@4
+VerifyPackageRelativeApplicationId@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-2.def
new file mode 100644
index 0000000000..48af82548e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-2.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-2
+
+EXPORTS
+
+AppPolicyGetClrCompat@8
+AppPolicyGetCreateFileAccess@8
+AppPolicyGetLifecycleManagement@8
+AppPolicyGetMediaFoundationCodecLoading@8
+AppPolicyGetProcessTerminationMethod@8
+AppPolicyGetShowDeveloperDiagnostic@8
+AppPolicyGetThreadInitializationType@8
+AppPolicyGetWindowingModel@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-3.def
new file mode 100644
index 0000000000..8159bcfb0f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-appmodel-runtime-l1-1-3.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-appmodel-runtime-l1-1-3
+
+EXPORTS
+
+GetCurrentPackageInfo2@20
+GetCurrentPackagePath2@12
+GetPackageInfo2@24
+GetPackagePathByFullName2@16
+GetStagedPackagePathByFullName2@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-apiquery-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-apiquery-l2-1-0.def
new file mode 100644
index 0000000000..dde95908ea
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-apiquery-l2-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-apiquery-l2-1-0
+
+EXPORTS
+
+IsApiSetImplemented@4
+TokenBindingDeleteAllBindings@0
+TokenBindingDeleteBinding@4
+TokenBindingGenerateBinding@40
+TokenBindingGenerateID@16
+TokenBindingGenerateIDForUri@12
+TokenBindingGenerateMessage@20
+TokenBindingGetHighestSupportedVersion@8
+TokenBindingGetKeyTypesClient@4
+TokenBindingGetKeyTypesServer@4
+TokenBindingVerifyMessage@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-atoms-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-atoms-l1-1-0.def
new file mode 100644
index 0000000000..d382f0541f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-atoms-l1-1-0.def
@@ -0,0 +1,21 @@
+LIBRARY api-ms-win-core-atoms-l1-1-0
+
+EXPORTS
+
+AddAtomA@4
+AddAtomW@4
+DeleteAtom@4
+FindAtomA@4
+FindAtomW@4
+GetAtomNameA@12
+GetAtomNameW@12
+GlobalAddAtomA@4
+GlobalAddAtomExA@8
+GlobalAddAtomExW@8
+GlobalAddAtomW@4
+GlobalDeleteAtom@4
+GlobalFindAtomA@4
+GlobalFindAtomW@4
+GlobalGetAtomNameA@12
+GlobalGetAtomNameW@12
+InitAtomTable@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-atoms-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-atoms-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..829170dc07
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-atoms-l1-1-0_windowsapp.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-atoms-l1-1-0
+
+EXPORTS
+
+AddAtomA@4
+AddAtomW@4
+DeleteAtom@4
+FindAtomA@4
+FindAtomW@4
+GetAtomNameA@12
+GetAtomNameW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-backgroundtask-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-backgroundtask-l1-1-0.def
new file mode 100644
index 0000000000..45c872386c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-backgroundtask-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-backgroundtask-l1-1-0
+
+EXPORTS
+
+RaiseCustomSystemEventTrigger@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-calendar-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-calendar-l1-1-0.def
new file mode 100644
index 0000000000..42bf0096c0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-calendar-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-calendar-l1-1-0
+
+EXPORTS
+
+AdjustCalendarDate@12
+ConvertCalDateTimeToSystemTime@8
+ConvertSystemTimeToCalDateTime@12
+GetCalendarDateFormatEx@24
+GetCalendarSupportedDateRange@12
+IsCalendarLeapYear@12
+UpdateCalendarDayOfWeek@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-0.def
new file mode 100644
index 0000000000..4538a1eb02
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-0.def
@@ -0,0 +1,84 @@
+LIBRARY api-ms-win-core-com-l1-1-0
+
+EXPORTS
+
+CLSIDFromProgID@8
+CLSIDFromString@8
+CoAddRefServerProcess@0
+CoAllowUnmarshalerCLSID@4
+CoCancelCall@8
+CoCopyProxy@8
+CoCreateFreeThreadedMarshaler@8
+CoCreateGuid@4
+CoCreateInstance@20
+CoCreateInstanceEx@24
+CoCreateInstanceFromApp@24
+CoDecodeProxy@16
+CoDecrementMTAUsage@4
+CoDisableCallCancellation@4
+CoDisconnectContext@4
+CoDisconnectObject@8
+CoEnableCallCancellation@4
+CoFreeUnusedLibraries@0
+CoFreeUnusedLibrariesEx@8
+CoGetApartmentType@8
+CoGetCallContext@8
+CoGetCallerTID@4
+CoGetCancelObject@12
+CoGetClassObject@20
+CoGetContextToken@4
+CoGetCurrentLogicalThreadId@4
+CoGetCurrentProcess@0
+CoGetDefaultContext@12
+CoGetInterfaceAndReleaseStream@12
+CoGetMalloc@8
+CoGetMarshalSizeMax@24
+CoGetObjectContext@8
+CoGetPSClsid@8
+CoGetStandardMarshal@24
+CoGetStdMarshalEx@12
+CoGetTreatAsClass@8
+CoImpersonateClient@0
+CoIncrementMTAUsage@4
+CoInitializeEx@8
+CoInitializeSecurity@36
+CoInvalidateRemoteMachineBindings@4
+CoIsHandlerConnected@4
+CoLockObjectExternal@12
+CoMarshalHresult@8
+CoMarshalInterface@24
+CoMarshalInterThreadInterfaceInStream@12
+CoQueryAuthenticationServices@8
+CoQueryClientBlanket@28
+CoQueryProxyBlanket@32
+CoRegisterClassObject@20
+CoRegisterPSClsid@8
+CoRegisterSurrogate@4
+CoReleaseMarshalData@4
+CoReleaseServerProcess@0
+CoResumeClassObjects@0
+CoRevertToSelf@0
+CoRevokeClassObject@4
+CoSetCancelObject@4
+CoSetProxyBlanket@32
+CoSuspendClassObjects@0
+CoSwitchCallContext@8
+CoTaskMemAlloc@4
+CoTaskMemFree@4
+CoTaskMemRealloc@8
+CoTestCancel@0
+CoUninitialize@0
+CoUnmarshalHresult@8
+CoUnmarshalInterface@12
+CoWaitForMultipleHandles@20
+CoWaitForMultipleObjects@20
+CreateStreamOnHGlobal@12
+FreePropVariantArray@8
+GetHGlobalFromStream@8
+IIDFromString@8
+ProgIDFromCLSID@8
+PropVariantClear@4
+PropVariantCopy@8
+StringFromCLSID@8
+StringFromGUID2@12
+StringFromIID@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..f694582ac1
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-0_windowsapp.def
@@ -0,0 +1,57 @@
+LIBRARY api-ms-win-core-com-l1-1-0
+
+EXPORTS
+
+CLSIDFromProgID@8
+CLSIDFromString@8
+CoAddRefServerProcess@0
+CoCreateFreeThreadedMarshaler@8
+CoCreateGuid@4
+CoCreateInstance@20
+CoCreateInstanceEx@24
+CoCreateInstanceFromApp@24
+CoDecrementMTAUsage@4
+CoDisconnectObject@8
+CoFreeUnusedLibraries@0
+CoFreeUnusedLibrariesEx@8
+CoGetApartmentType@8
+CoGetClassObject@20
+CoGetContextToken@4
+CoGetCurrentLogicalThreadId@4
+CoGetInterfaceAndReleaseStream@12
+CoGetMalloc@8
+CoGetMarshalSizeMax@24
+CoGetObjectContext@8
+CoGetStandardMarshal@24
+CoIncrementMTAUsage@4
+CoInitializeEx@8
+CoInitializeSecurity@36
+CoLockObjectExternal@12
+CoMarshalInterface@24
+CoMarshalInterThreadInterfaceInStream@12
+CoRegisterClassObject@20
+CoRegisterPSClsid@8
+CoReleaseMarshalData@4
+CoReleaseServerProcess@0
+CoResumeClassObjects@0
+CoRevokeClassObject@4
+CoSetProxyBlanket@32
+CoSuspendClassObjects@0
+CoSwitchCallContext@8
+CoTaskMemAlloc@4
+CoTaskMemFree@4
+CoTaskMemRealloc@8
+CoUninitialize@0
+CoUnmarshalInterface@12
+CoWaitForMultipleHandles@20
+CoWaitForMultipleObjects@20
+CreateStreamOnHGlobal@12
+FreePropVariantArray@8
+GetHGlobalFromStream@8
+IIDFromString@8
+ProgIDFromCLSID@8
+PropVariantClear@4
+PropVariantCopy@8
+StringFromCLSID@8
+StringFromGUID2@12
+StringFromIID@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-1.def
new file mode 100644
index 0000000000..15bd76222f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-com-l1-1-1
+
+EXPORTS
+
+CoRegisterActivationFilter@4
+RoGetAgileReference@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..a34f2c3ed8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-com-l1-1-1
+
+EXPORTS
+
+RoGetAgileReference@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-2.def
new file mode 100644
index 0000000000..39eed651fd
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-com-l1-1-2
+
+EXPORTS
+
+CLSIDFromProgIDEx@8
+CoFileTimeNow@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-3.def
new file mode 100644
index 0000000000..52d865fa6b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-com-l1-1-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-com-l1-1-3
+
+EXPORTS
+
+CoRegisterDeviceCatalog@8
+CoRevokeDeviceCatalog@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-com-l2-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-com-l2-1-1.def
new file mode 100644
index 0000000000..81b907bec1
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-com-l2-1-1.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-core-com-l2-1-1
+
+EXPORTS
+
+CreateILockBytesOnHGlobal@12
+FmtIdToPropStgName@8
+GetConvertStg@4
+GetHGlobalFromILockBytes@8
+PropStgNameToFmtId@8
+ReadClassStg@8
+ReadClassStm@8
+StgCreateDocfile@16
+StgCreateDocfileOnILockBytes@16
+StgCreatePropSetStg@12
+StgCreatePropStg@24
+StgCreateStorageEx@32
+StgIsStorageFile@4
+StgIsStorageILockBytes@4
+StgOpenPropStg@20
+StgOpenStorage@24
+StgOpenStorageEx@32
+StgOpenStorageOnILockBytes@24
+StgSetTimes@16
+WriteClassStg@8
+WriteClassStm@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-com-midlproxystub-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-com-midlproxystub-l1-1-0.def
new file mode 100644
index 0000000000..5614f71ef2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-com-midlproxystub-l1-1-0.def
@@ -0,0 +1,77 @@
+LIBRARY api-ms-win-core-com-midlproxystub-l1-1-0
+
+EXPORTS
+
+CStdAsyncStubBuffer_AddRef@4
+CStdAsyncStubBuffer_Connect@8
+CStdAsyncStubBuffer_Disconnect@4
+CStdAsyncStubBuffer_Invoke@12
+CStdAsyncStubBuffer_QueryInterface@12
+CStdAsyncStubBuffer_Release@4
+CStdAsyncStubBuffer2_Connect@8
+CStdAsyncStubBuffer2_Disconnect@4
+CStdAsyncStubBuffer2_Release@4
+CStdStubBuffer2_Connect@8
+CStdStubBuffer2_CountRefs@4
+CStdStubBuffer2_Disconnect@4
+CStdStubBuffer2_QueryInterface@12
+NdrProxyForwardingFunction10@0
+NdrProxyForwardingFunction11@0
+NdrProxyForwardingFunction12@0
+NdrProxyForwardingFunction13@0
+NdrProxyForwardingFunction14@0
+NdrProxyForwardingFunction15@0
+NdrProxyForwardingFunction16@0
+NdrProxyForwardingFunction17@0
+NdrProxyForwardingFunction18@0
+NdrProxyForwardingFunction19@0
+NdrProxyForwardingFunction20@0
+NdrProxyForwardingFunction21@0
+NdrProxyForwardingFunction22@0
+NdrProxyForwardingFunction23@0
+NdrProxyForwardingFunction24@0
+NdrProxyForwardingFunction25@0
+NdrProxyForwardingFunction26@0
+NdrProxyForwardingFunction27@0
+NdrProxyForwardingFunction28@0
+NdrProxyForwardingFunction29@0
+NdrProxyForwardingFunction3@0
+NdrProxyForwardingFunction30@0
+NdrProxyForwardingFunction31@0
+NdrProxyForwardingFunction32@0
+NdrProxyForwardingFunction4@0
+NdrProxyForwardingFunction5@0
+NdrProxyForwardingFunction6@0
+NdrProxyForwardingFunction7@0
+NdrProxyForwardingFunction8@0
+NdrProxyForwardingFunction9@0
+ObjectStublessClient10@0
+ObjectStublessClient11@0
+ObjectStublessClient12@0
+ObjectStublessClient13@0
+ObjectStublessClient14@0
+ObjectStublessClient15@0
+ObjectStublessClient16@0
+ObjectStublessClient17@0
+ObjectStublessClient18@0
+ObjectStublessClient19@0
+ObjectStublessClient20@0
+ObjectStublessClient21@0
+ObjectStublessClient22@0
+ObjectStublessClient23@0
+ObjectStublessClient24@0
+ObjectStublessClient25@0
+ObjectStublessClient26@0
+ObjectStublessClient27@0
+ObjectStublessClient28@0
+ObjectStublessClient29@0
+ObjectStublessClient3@0
+ObjectStublessClient30@0
+ObjectStublessClient31@0
+ObjectStublessClient32@0
+ObjectStublessClient4@0
+ObjectStublessClient5@0
+ObjectStublessClient6@0
+ObjectStublessClient7@0
+ObjectStublessClient8@0
+ObjectStublessClient9@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-0.def
new file mode 100644
index 0000000000..b1577137ee
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-0.def
@@ -0,0 +1,22 @@
+LIBRARY api-ms-win-core-comm-l1-1-0
+
+EXPORTS
+
+ClearCommBreak@4
+ClearCommError@12
+EscapeCommFunction@8
+GetCommConfig@12
+GetCommMask@8
+GetCommModemStatus@8
+GetCommProperties@8
+GetCommState@8
+GetCommTimeouts@8
+PurgeComm@8
+SetCommBreak@4
+SetCommConfig@12
+SetCommMask@8
+SetCommState@8
+SetCommTimeouts@8
+SetupComm@12
+TransmitCommChar@8
+WaitCommEvent@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-1.def
new file mode 100644
index 0000000000..e974896f74
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-comm-l1-1-1
+
+EXPORTS
+
+OpenCommPort@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-2.def
new file mode 100644
index 0000000000..4fa237f735
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-comm-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-comm-l1-1-2
+
+EXPORTS
+
+GetCommPorts@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-console-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-console-l1-1-0.def
new file mode 100644
index 0000000000..9ab4723ef7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-console-l1-1-0.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-core-console-l1-1-0
+
+EXPORTS
+
+AllocConsole@0
+GetConsoleCP@0
+GetConsoleMode@8
+GetConsoleOutputCP@0
+GetNumberOfConsoleInputEvents@8
+ReadConsoleA@20
+ReadConsoleInputA@16
+ReadConsoleInputW@16
+ReadConsoleW@20
+SetConsoleCtrlHandler@8
+SetConsoleMode@8
+WriteConsoleA@20
+WriteConsoleW@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-console-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-console-l1-2-0.def
new file mode 100644
index 0000000000..c7389ce94c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-console-l1-2-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-console-l1-2-0
+
+EXPORTS
+
+AttachConsole@4
+FreeConsole@0
+PeekConsoleInputA@16
+PeekConsoleInputW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-console-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-core-console-l1-2-1.def
new file mode 100644
index 0000000000..668c2da64a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-console-l1-2-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-console-l1-2-1
+
+EXPORTS
+
+ClosePseudoConsole@4
+CreatePseudoConsole@20
+ResizePseudoConsole@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-console-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-console-l2-1-0.def
new file mode 100644
index 0000000000..13e1cadb3f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-console-l2-1-0.def
@@ -0,0 +1,37 @@
+LIBRARY api-ms-win-core-console-l2-1-0
+
+EXPORTS
+
+CreateConsoleScreenBuffer@20
+FillConsoleOutputAttribute@20
+FillConsoleOutputCharacterA@20
+FillConsoleOutputCharacterW@20
+FlushConsoleInputBuffer@4
+GenerateConsoleCtrlEvent@8
+GetConsoleCursorInfo@8
+GetConsoleScreenBufferInfo@8
+GetConsoleScreenBufferInfoEx@8
+GetLargestConsoleWindowSize@4
+ReadConsoleOutputA@20
+ReadConsoleOutputAttribute@20
+ReadConsoleOutputCharacterA@20
+ReadConsoleOutputCharacterW@20
+ReadConsoleOutputW@20
+ScrollConsoleScreenBufferA@20
+ScrollConsoleScreenBufferW@20
+SetConsoleActiveScreenBuffer@4
+SetConsoleCP@4
+SetConsoleCursorInfo@8
+SetConsoleCursorPosition@8
+SetConsoleOutputCP@4
+SetConsoleScreenBufferInfoEx@8
+SetConsoleScreenBufferSize@8
+SetConsoleTextAttribute@8
+SetConsoleWindowInfo@12
+WriteConsoleInputA@16
+WriteConsoleInputW@16
+WriteConsoleOutputA@20
+WriteConsoleOutputAttribute@20
+WriteConsoleOutputCharacterA@20
+WriteConsoleOutputCharacterW@20
+WriteConsoleOutputW@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-console-l2-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-console-l2-2-0.def
new file mode 100644
index 0000000000..6a5c564a5b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-console-l2-2-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-console-l2-2-0
+
+EXPORTS
+
+GetConsoleOriginalTitleA@8
+GetConsoleOriginalTitleW@8
+GetConsoleTitleA@8
+GetConsoleTitleW@8
+SetConsoleTitleA@4
+SetConsoleTitleW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-console-l3-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-console-l3-2-0.def
new file mode 100644
index 0000000000..15cab2821e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-console-l3-2-0.def
@@ -0,0 +1,36 @@
+LIBRARY api-ms-win-core-console-l3-2-0
+
+EXPORTS
+
+AddConsoleAliasA@12
+AddConsoleAliasW@12
+ExpungeConsoleCommandHistoryA@4
+ExpungeConsoleCommandHistoryW@4
+GetConsoleAliasA@16
+GetConsoleAliasesA@12
+GetConsoleAliasesLengthA@4
+GetConsoleAliasesLengthW@4
+GetConsoleAliasesW@12
+GetConsoleAliasExesA@8
+GetConsoleAliasExesLengthA@0
+GetConsoleAliasExesLengthW@0
+GetConsoleAliasExesW@8
+GetConsoleAliasW@16
+GetConsoleCommandHistoryA@12
+GetConsoleCommandHistoryLengthA@4
+GetConsoleCommandHistoryLengthW@4
+GetConsoleCommandHistoryW@12
+GetConsoleDisplayMode@4
+GetConsoleFontSize@8
+GetConsoleHistoryInfo@4
+GetConsoleProcessList@8
+GetConsoleSelectionInfo@4
+GetConsoleWindow@0
+GetCurrentConsoleFont@12
+GetCurrentConsoleFontEx@12
+GetNumberOfConsoleMouseButtons@4
+SetConsoleDisplayMode@12
+SetConsoleHistoryInfo@4
+SetConsoleNumberOfCommandsA@8
+SetConsoleNumberOfCommandsW@8
+SetCurrentConsoleFontEx@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-0.def
new file mode 100644
index 0000000000..3c65999444
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-datetime-l1-1-0
+
+EXPORTS
+
+GetDateFormatA@24
+GetDateFormatW@24
+GetTimeFormatA@24
+GetTimeFormatW@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-1.def
new file mode 100644
index 0000000000..9eb8b163c5
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-datetime-l1-1-1
+
+EXPORTS
+
+GetDateFormatEx@28
+GetTimeFormatEx@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-2.def
new file mode 100644
index 0000000000..c103f09216
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-datetime-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-datetime-l1-1-2
+
+EXPORTS
+
+GetDurationFormatEx@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-0.def
new file mode 100644
index 0000000000..5928b3f574
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-debug-l1-1-0
+
+EXPORTS
+
+DebugBreak@0
+IsDebuggerPresent@0
+OutputDebugStringA@4
+OutputDebugStringW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-1.def
new file mode 100644
index 0000000000..02ad9c01a8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-debug-l1-1-1
+
+EXPORTS
+
+CheckRemoteDebuggerPresent@8
+ContinueDebugEvent@12
+DebugActiveProcess@4
+DebugActiveProcessStop@4
+WaitForDebugEvent@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-2.def
new file mode 100644
index 0000000000..e1b380938e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-debug-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-debug-l1-1-2
+
+EXPORTS
+
+WaitForDebugEventEx@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-debug-minidump-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-debug-minidump-l1-1-0.def
new file mode 100644
index 0000000000..164fcadd1d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-debug-minidump-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-debug-minidump-l1-1-0
+
+EXPORTS
+
+MiniDumpReadDumpStream@20
+MiniDumpWriteDump@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-delayload-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-delayload-l1-1-0.def
new file mode 100644
index 0000000000..4ef7b0823a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-delayload-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-delayload-l1-1-0
+
+EXPORTS
+
+DelayLoadFailureHook@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-delayload-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-delayload-l1-1-1.def
new file mode 100644
index 0000000000..e24edbf4cd
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-delayload-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-delayload-l1-1-1
+
+EXPORTS
+
+ResolveDelayLoadedAPI@24
+ResolveDelayLoadsFromDll@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-enclave-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-enclave-l1-1-0.def
new file mode 100644
index 0000000000..3bb05d9cab
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-enclave-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-enclave-l1-1-0
+
+EXPORTS
+
+CreateEnclave@32
+InitializeEnclave@20
+IsEnclaveTypeSupported@4
+LoadEnclaveData@36
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-enclave-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-enclave-l1-1-1.def
new file mode 100644
index 0000000000..5e56d7cf30
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-enclave-l1-1-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-enclave-l1-1-1
+
+EXPORTS
+
+CallEnclave@16
+DeleteEnclave@4
+LoadEnclaveImageA@8
+LoadEnclaveImageW@8
+TerminateEnclave@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-0.def
new file mode 100644
index 0000000000..07c07aa4ae
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-0
+
+EXPORTS
+
+GetErrorMode@0
+GetLastError@0
+RaiseException@16
+SetErrorMode@4
+SetLastError@4
+SetUnhandledExceptionFilter@4
+UnhandledExceptionFilter@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-1.def
new file mode 100644
index 0000000000..c3a7c8e431
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-1
+
+EXPORTS
+
+AddVectoredContinueHandler@8
+AddVectoredExceptionHandler@8
+RemoveVectoredContinueHandler@4
+RemoveVectoredExceptionHandler@4
+RestoreLastError@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..0d0a2060f5
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-1_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-1
+
+EXPORTS
+
+AddVectoredExceptionHandler@8
+RemoveVectoredExceptionHandler@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-2.def
new file mode 100644
index 0000000000..0f9c47ec35
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-2
+
+EXPORTS
+
+RaiseFailFastException@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-3.def
new file mode 100644
index 0000000000..eea77e56e5
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-3.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-3
+
+EXPORTS
+
+FatalAppExitA@8
+FatalAppExitW@8
+GetThreadErrorMode@0
+SetThreadErrorMode@8
+TerminateProcessOnMemoryExhaustion@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-3_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-3_windowsapp.def
new file mode 100644
index 0000000000..75d9db5c01
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-errorhandling-l1-1-3_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-errorhandling-l1-1-3
+
+EXPORTS
+
+FatalAppExitA@8
+FatalAppExitW@8
+GetThreadErrorMode@0
+SetThreadErrorMode@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-featurestaging-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-featurestaging-l1-1-0.def
new file mode 100644
index 0000000000..5cede3d02a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-featurestaging-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-featurestaging-l1-1-0
+
+EXPORTS
+
+GetFeatureEnabledState@8
+RecordFeatureError@8
+RecordFeatureUsage@16
+SubscribeFeatureStateChangeNotification@12
+UnsubscribeFeatureStateChangeNotification@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-featurestaging-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-featurestaging-l1-1-1.def
new file mode 100644
index 0000000000..463d4afeb8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-featurestaging-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-featurestaging-l1-1-1
+
+EXPORTS
+
+GetFeatureVariant@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-fibers-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l1-1-0.def
new file mode 100644
index 0000000000..5673f32884
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-fibers-l1-1-0
+
+EXPORTS
+
+FlsAlloc@4
+FlsFree@4
+FlsGetValue@4
+FlsSetValue@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-fibers-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l1-1-1.def
new file mode 100644
index 0000000000..88e19fde3e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-fibers-l1-1-1
+
+EXPORTS
+
+IsThreadAFiber@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-0.def
new file mode 100644
index 0000000000..f401c6e80b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-fibers-l2-1-0
+
+EXPORTS
+
+ConvertFiberToThread@0
+ConvertThreadToFiber@4
+CreateFiber@12
+DeleteFiber@4
+SwitchToFiber@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..d0dfd4cb6a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-fibers-l2-1-0
+
+EXPORTS
+
+ConvertFiberToThread@0
+DeleteFiber@4
+SwitchToFiber@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-1.def
new file mode 100644
index 0000000000..feda2af1aa
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-fibers-l2-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-fibers-l2-1-1
+
+EXPORTS
+
+ConvertThreadToFiberEx@8
+CreateFiberEx@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l1-1-0.def
new file mode 100644
index 0000000000..8baddb16fe
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l1-1-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-file-ansi-l1-1-0
+
+EXPORTS
+
+DefineDosDeviceA@12
+DeleteVolumeMountPointA@4
+FindFirstVolumeA@8
+FindNextVolumeA@12
+GetLogicalDriveStringsA@8
+GetVolumeNameForVolumeMountPointA@12
+GetVolumePathNameA@12
+GetVolumePathNamesForVolumeNameA@16
+QueryDosDeviceA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..2abf01ffc8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-file-ansi-l1-1-0
+
+EXPORTS
+
+DeleteVolumeMountPointA@4
+FindFirstVolumeA@8
+FindNextVolumeA@12
+GetLogicalDriveStringsA@8
+GetVolumePathNameA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l2-1-0.def
new file mode 100644
index 0000000000..e165dec6bb
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l2-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-file-ansi-l2-1-0
+
+EXPORTS
+
+CopyFileExA@24
+CreateDirectoryExA@12
+CreateSymbolicLinkA@12
+MoveFileWithProgressA@20
+ReplaceFileA@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l2-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..ed7165f255
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-ansi-l2-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-file-ansi-l2-1-0
+
+EXPORTS
+
+CopyFileExA@24
+CreateDirectoryExA@12
+MoveFileWithProgressA@20
+ReplaceFileA@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-fromapp-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-file-fromapp-l1-1-0.def
new file mode 100644
index 0000000000..d303123871
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-fromapp-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-file-fromapp-l1-1-0
+
+EXPORTS
+
+CopyFileFromAppW@12
+CreateDirectoryFromAppW@8
+CreateFile2FromAppW@20
+CreateFileFromAppW@28
+DeleteFileFromAppW@4
+FindFirstFileExFromAppW@24
+GetFileAttributesExFromAppW@12
+MoveFileFromAppW@8
+RemoveDirectoryFromAppW@4
+ReplaceFileFromAppW@24
+SetFileAttributesFromAppW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-1-0.def
new file mode 100644
index 0000000000..f41acf9588
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-1-0.def
@@ -0,0 +1,79 @@
+LIBRARY api-ms-win-core-file-l1-1-0
+
+EXPORTS
+
+CompareFileTime@8
+CreateDirectoryA@8
+CreateDirectoryW@8
+CreateFileA@28
+CreateFileW@28
+DefineDosDeviceW@12
+DeleteFileA@4
+DeleteFileW@4
+DeleteVolumeMountPointW@4
+FileTimeToLocalFileTime@8
+FindClose@4
+FindCloseChangeNotification@4
+FindFirstChangeNotificationA@12
+FindFirstChangeNotificationW@12
+FindFirstFileA@8
+FindFirstFileExA@24
+FindFirstFileExW@24
+FindFirstFileW@8
+FindFirstVolumeW@8
+FindNextChangeNotification@4
+FindNextFileA@8
+FindNextFileW@8
+FindNextVolumeW@12
+FindVolumeClose@4
+FlushFileBuffers@4
+GetDiskFreeSpaceA@20
+GetDiskFreeSpaceExA@16
+GetDiskFreeSpaceExW@16
+GetDiskFreeSpaceW@20
+GetDriveTypeA@4
+GetDriveTypeW@4
+GetFileAttributesA@4
+GetFileAttributesExA@12
+GetFileAttributesExW@12
+GetFileAttributesW@4
+GetFileInformationByHandle@8
+GetFileSize@8
+GetFileSizeEx@8
+GetFileTime@16
+GetFileType@4
+GetFinalPathNameByHandleA@16
+GetFinalPathNameByHandleW@16
+GetFullPathNameA@16
+GetFullPathNameW@16
+GetLogicalDrives@0
+GetLogicalDriveStringsW@8
+GetLongPathNameA@12
+GetLongPathNameW@12
+GetShortPathNameW@12
+GetTempFileNameW@16
+GetVolumeInformationByHandleW@32
+GetVolumeInformationW@32
+GetVolumePathNameW@12
+LocalFileTimeToFileTime@8
+LockFile@20
+LockFileEx@24
+QueryDosDeviceW@12
+ReadFile@20
+ReadFileEx@20
+ReadFileScatter@20
+RemoveDirectoryA@4
+RemoveDirectoryW@4
+SetEndOfFile@4
+SetFileAttributesA@8
+SetFileAttributesW@8
+SetFileInformationByHandle@16
+SetFilePointer@16
+SetFilePointerEx@20
+SetFileTime@16
+SetFileValidData@12
+UnlockFile@20
+UnlockFileEx@20
+WriteFile@20
+WriteFileEx@20
+WriteFileGather@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..3100d67c1e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-1-0_windowsapp.def
@@ -0,0 +1,77 @@
+LIBRARY api-ms-win-core-file-l1-1-0
+
+EXPORTS
+
+CompareFileTime@8
+CreateDirectoryA@8
+CreateDirectoryW@8
+CreateFileA@28
+CreateFileW@28
+DeleteFileA@4
+DeleteFileW@4
+DeleteVolumeMountPointW@4
+FileTimeToLocalFileTime@8
+FindClose@4
+FindCloseChangeNotification@4
+FindFirstChangeNotificationA@12
+FindFirstChangeNotificationW@12
+FindFirstFileA@8
+FindFirstFileExA@24
+FindFirstFileExW@24
+FindFirstFileW@8
+FindFirstVolumeW@8
+FindNextChangeNotification@4
+FindNextFileA@8
+FindNextFileW@8
+FindNextVolumeW@12
+FindVolumeClose@4
+FlushFileBuffers@4
+GetDiskFreeSpaceA@20
+GetDiskFreeSpaceExA@16
+GetDiskFreeSpaceExW@16
+GetDiskFreeSpaceW@20
+GetDriveTypeA@4
+GetDriveTypeW@4
+GetFileAttributesA@4
+GetFileAttributesExA@12
+GetFileAttributesExW@12
+GetFileAttributesW@4
+GetFileInformationByHandle@8
+GetFileSize@8
+GetFileSizeEx@8
+GetFileTime@16
+GetFileType@4
+GetFinalPathNameByHandleA@16
+GetFinalPathNameByHandleW@16
+GetFullPathNameA@16
+GetFullPathNameW@16
+GetLogicalDrives@0
+GetLogicalDriveStringsW@8
+GetLongPathNameA@12
+GetLongPathNameW@12
+GetShortPathNameW@12
+GetTempFileNameW@16
+GetVolumeInformationByHandleW@32
+GetVolumeInformationW@32
+GetVolumePathNameW@12
+LocalFileTimeToFileTime@8
+LockFile@20
+LockFileEx@24
+ReadFile@20
+ReadFileEx@20
+ReadFileScatter@20
+RemoveDirectoryA@4
+RemoveDirectoryW@4
+SetEndOfFile@4
+SetFileAttributesA@8
+SetFileAttributesW@8
+SetFileInformationByHandle@16
+SetFilePointer@16
+SetFilePointerEx@20
+SetFileTime@16
+SetFileValidData@12
+UnlockFile@20
+UnlockFileEx@20
+WriteFile@20
+WriteFileEx@20
+WriteFileGather@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-0.def
new file mode 100644
index 0000000000..ecea74cf5c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-file-l1-2-0
+
+EXPORTS
+
+CreateFile2@20
+GetTempPathW@8
+GetVolumeNameForVolumeMountPointW@12
+GetVolumePathNamesForVolumeNameW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-1.def
new file mode 100644
index 0000000000..7c989a3ef0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-file-l1-2-1
+
+EXPORTS
+
+GetCompressedFileSizeA@8
+GetCompressedFileSizeW@8
+SetFileIoOverlappedRange@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-2.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-2.def
new file mode 100644
index 0000000000..f429b43a33
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-2.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-file-l1-2-2
+
+EXPORTS
+
+AreFileApisANSI@0
+FindFirstFileNameW@16
+FindFirstStreamW@16
+FindNextFileNameW@12
+FindNextStreamW@8
+GetTempFileNameA@16
+GetTempPathA@8
+GetVolumeInformationA@32
+SetFileApisToANSI@0
+SetFileApisToOEM@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-2_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-2_windowsapp.def
new file mode 100644
index 0000000000..3697e58028
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-2_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-file-l1-2-2
+
+EXPORTS
+
+AreFileApisANSI@0
+GetTempFileNameA@16
+GetTempPathA@8
+GetVolumeInformationA@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-3.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-3.def
new file mode 100644
index 0000000000..1e7a40ce7b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l1-2-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-file-l1-2-3
+
+EXPORTS
+
+GetDiskSpaceInformationA@8
+GetDiskSpaceInformationW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-0.def
new file mode 100644
index 0000000000..e5f271788a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-file-l2-1-0
+
+EXPORTS
+
+CopyFile2@12
+CopyFileExW@24
+CreateDirectoryExW@12
+CreateHardLinkW@12
+CreateSymbolicLinkW@12
+GetFileInformationByHandleEx@16
+MoveFileExW@12
+MoveFileWithProgressW@20
+ReadDirectoryChangesW@32
+ReOpenFile@16
+ReplaceFileW@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-1.def
new file mode 100644
index 0000000000..d0cf934c34
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-file-l2-1-1
+
+EXPORTS
+
+OpenFileById@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-2.def
new file mode 100644
index 0000000000..6408ffe22f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-file-l2-1-2
+
+EXPORTS
+
+CopyFileW@12
+CreateHardLinkA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-2_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-2_windowsapp.def
new file mode 100644
index 0000000000..c8d59202a0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-2_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-file-l2-1-2
+
+EXPORTS
+
+CopyFileW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-3.def
new file mode 100644
index 0000000000..9b6030d752
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-file-l2-1-3.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-file-l2-1-3
+
+EXPORTS
+
+ReadDirectoryChangesExW@36
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-firmware-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-firmware-l1-1-0.def
new file mode 100644
index 0000000000..9e2174a458
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-firmware-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-firmware-l1-1-0
+
+EXPORTS
+
+GetFirmwareEnvironmentVariableA@16
+GetFirmwareEnvironmentVariableExA@20
+GetFirmwareEnvironmentVariableExW@20
+GetFirmwareEnvironmentVariableW@16
+SetFirmwareEnvironmentVariableA@16
+SetFirmwareEnvironmentVariableExA@20
+SetFirmwareEnvironmentVariableExW@20
+SetFirmwareEnvironmentVariableW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-handle-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-handle-l1-1-0.def
new file mode 100644
index 0000000000..7d71381a51
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-handle-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-handle-l1-1-0
+
+EXPORTS
+
+CloseHandle@4
+CompareObjectHandles@8
+DuplicateHandle@28
+GetHandleInformation@8
+SetHandleInformation@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-heap-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-heap-l1-1-0.def
new file mode 100644
index 0000000000..bbb9ff8829
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-heap-l1-1-0.def
@@ -0,0 +1,19 @@
+LIBRARY api-ms-win-core-heap-l1-1-0
+
+EXPORTS
+
+GetProcessHeap@0
+GetProcessHeaps@8
+HeapAlloc@12
+HeapCompact@8
+HeapCreate@12
+HeapDestroy@4
+HeapFree@12
+HeapLock@4
+HeapQueryInformation@20
+HeapReAlloc@16
+HeapSetInformation@16
+HeapSize@12
+HeapUnlock@4
+HeapValidate@12
+HeapWalk@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-heap-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-heap-l2-1-0.def
new file mode 100644
index 0000000000..18418e8473
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-heap-l2-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-heap-l2-1-0
+
+EXPORTS
+
+GlobalAlloc@8
+GlobalFree@4
+LocalAlloc@8
+LocalFree@4
+LocalLock@4
+LocalReAlloc@12
+LocalUnlock@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-heap-l2-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-heap-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..3607917d36
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-heap-l2-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-heap-l2-1-0
+
+EXPORTS
+
+GlobalAlloc@8
+GlobalFree@4
+LocalAlloc@8
+LocalFree@4
+LocalReAlloc@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-heap-obsolete-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-heap-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..c776a09dcb
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-heap-obsolete-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-heap-obsolete-l1-1-0
+
+EXPORTS
+
+GlobalFlags@4
+GlobalHandle@4
+GlobalLock@4
+GlobalReAlloc@12
+GlobalSize@4
+GlobalUnlock@4
+LocalFlags@4
+LocalSize@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-heap-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-heap-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..88a8a862d1
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-heap-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-heap-obsolete-l1-1-0
+
+EXPORTS
+
+GlobalLock@4
+GlobalReAlloc@12
+GlobalSize@4
+GlobalUnlock@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-interlocked-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-interlocked-l1-1-0.def
new file mode 100644
index 0000000000..9eb401e6ee
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-interlocked-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-interlocked-l1-1-0
+
+EXPORTS
+
+InitializeSListHead@4
+InterlockedCompareExchange@12
+InterlockedCompareExchange64@20
+InterlockedDecrement@4
+InterlockedExchange@8
+InterlockedExchangeAdd@8
+InterlockedFlushSList@4
+InterlockedIncrement@4
+InterlockedPopEntrySList@4
+InterlockedPushEntrySList@8
+QueryDepthSList@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-interlocked-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-interlocked-l1-2-0.def
new file mode 100644
index 0000000000..46ecbae71f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-interlocked-l1-2-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-interlocked-l1-2-0
+
+EXPORTS
+
+InterlockedPushListSListEx@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-0.def
new file mode 100644
index 0000000000..3f78516494
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-io-l1-1-0
+
+EXPORTS
+
+CancelIoEx@8
+CreateIoCompletionPort@16
+DeviceIoControl@32
+GetOverlappedResult@16
+GetQueuedCompletionStatus@20
+GetQueuedCompletionStatusEx@24
+PostQueuedCompletionStatus@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-1.def
new file mode 100644
index 0000000000..58798dd67c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-io-l1-1-1
+
+EXPORTS
+
+CancelIo@4
+CancelSynchronousIo@4
+GetOverlappedResultEx@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..c4a4336c41
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-io-l1-1-1_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-io-l1-1-1
+
+EXPORTS
+
+CancelIo@4
+GetOverlappedResultEx@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-job-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-job-l1-1-0.def
new file mode 100644
index 0000000000..5117342163
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-job-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-job-l1-1-0
+
+EXPORTS
+
+IsProcessInJob@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-0.def
new file mode 100644
index 0000000000..048a466c00
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-job-l2-1-0
+
+EXPORTS
+
+AssignProcessToJobObject@8
+CreateJobObjectW@8
+OpenJobObjectW@12
+QueryInformationJobObject@20
+SetInformationJobObject@16
+TerminateJobObject@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..b6c9991c4d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-job-l2-1-0
+
+EXPORTS
+
+AssignProcessToJobObject@8
+CreateJobObjectW@8
+SetInformationJobObject@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-1.def
new file mode 100644
index 0000000000..fddcc55fef
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-job-l2-1-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-job-l2-1-1
+
+EXPORTS
+
+FreeMemoryJobObject@4
+QueryIoRateControlInformationJobObject@16
+SetIoRateControlInformationJobObject@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-ansi-l1-1-0.def
new file mode 100644
index 0000000000..5fb2e836c8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-ansi-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-kernel32-legacy-ansi-l1-1-0
+
+EXPORTS
+
+AddLocalAlternateComputerNameA@8
+CreateFileMappingNumaA@28
+CreateFileTransactedA@40
+CreateJobObjectA@8
+FindFirstVolumeMountPointA@12
+FindNextVolumeMountPointA@12
+GetFileAttributesTransactedA@16
+OpenJobObjectA@12
+SetDllDirectoryA@4
+SetVolumeLabelA@8
+SetVolumeMountPointA@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..e1639243f8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-kernel32-legacy-ansi-l1-1-0
+
+EXPORTS
+
+SetDllDirectoryA@4
+SetVolumeLabelA@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-0.def
new file mode 100644
index 0000000000..dc683253d6
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-0.def
@@ -0,0 +1,41 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-0
+
+EXPORTS
+
+AddLocalAlternateComputerNameW@8
+BackupRead@28
+BackupWrite@28
+BindIoCompletionCallback@12
+CopyFileA@12
+CreateFileMappingA@24
+CreateFileTransactedW@40
+CreateMailslotA@16
+CreateNamedPipeA@32
+DnsHostnameToComputerNameW@12
+DosDateTimeToFileTime@12
+FileTimeToDosDateTime@12
+FindResourceA@12
+FindResourceExA@16
+GetComputerNameA@8
+GetComputerNameW@8
+GetMaximumProcessorGroupCount@0
+GetNamedPipeClientProcessId@8
+GetNamedPipeServerProcessId@8
+GetShortPathNameA@12
+GetStartupInfoA@4
+GetSystemPowerStatus@4
+GetTapeParameters@16
+GetThreadSelectorEntry@12
+GlobalMemoryStatus@4
+MoveFileA@8
+MoveFileExA@12
+MoveFileW@8
+OpenFile@12
+PulseEvent@4
+RegisterWaitForSingleObject@24
+SetFileCompletionNotificationModes@8
+SetHandleCount@4
+SetMailslotInfo@8
+SetVolumeLabelW@8
+UnregisterWait@4
+WTSGetActiveConsoleSessionId@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..eea52ec467
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-0_windowsapp.def
@@ -0,0 +1,23 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-0
+
+EXPORTS
+
+CopyFileA@12
+CreateFileMappingA@24
+CreateNamedPipeA@32
+DosDateTimeToFileTime@12
+FileTimeToDosDateTime@12
+FindResourceA@12
+GetComputerNameA@8
+GetComputerNameW@8
+GetShortPathNameA@12
+GetStartupInfoA@4
+GetSystemPowerStatus@4
+GlobalMemoryStatus@4
+MoveFileA@8
+MoveFileExA@12
+MoveFileW@8
+RegisterWaitForSingleObject@24
+SetFileCompletionNotificationModes@8
+SetVolumeLabelW@8
+UnregisterWait@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-1.def
new file mode 100644
index 0000000000..da7566d729
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-1.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-1
+
+EXPORTS
+
+FindFirstVolumeMountPointW@12
+FindNextVolumeMountPointW@12
+FindVolumeMountPointClose@4
+GetFileAttributesTransactedW@16
+GetFirmwareType@4
+GetNumaAvailableMemoryNodeEx@8
+GetNumaNodeProcessorMask@8
+GetNumaProcessorNodeEx@8
+PowerClearRequest@8
+PowerCreateRequest@4
+PowerSetRequest@8
+SetDllDirectoryW@4
+SetVolumeMountPointW@8
+VerifyVersionInfoW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..2bb59d5331
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-1_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-1
+
+EXPORTS
+
+SetDllDirectoryW@4
+VerifyVersionInfoW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-2.def
new file mode 100644
index 0000000000..7d5230122c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-2.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-2
+
+EXPORTS
+
+GetBinaryTypeW@8
+Module32First@8
+Module32Next@8
+OpenFileMappingA@12
+Process32First@8
+Process32Next@8
+SetTermsrvAppInstallMode@4
+VerifyVersionInfoA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-2_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-2_windowsapp.def
new file mode 100644
index 0000000000..5a1ad7335f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-2_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-2
+
+EXPORTS
+
+OpenFileMappingA@12
+Process32First@8
+Process32Next@8
+VerifyVersionInfoA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-3.def
new file mode 100644
index 0000000000..9c7ed4ef63
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-3.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-3
+
+EXPORTS
+
+CopyFileTransactedW@28
+CreateDirectoryTransactedW@16
+CreateHardLinkTransactedW@16
+CreateMailslotW@16
+CreateSymbolicLinkTransactedW@16
+DeleteFileTransactedW@8
+FindFirstFileTransactedW@28
+GetBinaryTypeA@8
+GetCompressedFileSizeTransactedW@12
+GetFullPathNameTransactedW@20
+GetLongPathNameTransactedW@16
+MoveFileTransactedW@24
+RemoveDirectoryTransactedW@8
+SetFileAttributesTransactedW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-4.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-4.def
new file mode 100644
index 0000000000..15dcf80753
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-4.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-4
+
+EXPORTS
+
+GetMailslotInfo@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-5.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-5.def
new file mode 100644
index 0000000000..6b2b66c19b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-5.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-5
+
+EXPORTS
+
+GetDllDirectoryW@8
+SetThreadExecutionState@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-5_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-5_windowsapp.def
new file mode 100644
index 0000000000..238793d3de
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-5_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-5
+
+EXPORTS
+
+SetThreadExecutionState@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-6.def b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-6.def
new file mode 100644
index 0000000000..5be51afb6f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-kernel32-legacy-l1-1-6.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-kernel32-legacy-l1-1-6
+
+EXPORTS
+
+GetDevicePowerState@8
+GetMaximumProcessorCount@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-largeinteger-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-largeinteger-l1-1-0.def
new file mode 100644
index 0000000000..09eb50117b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-largeinteger-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-largeinteger-l1-1-0
+
+EXPORTS
+
+MulDiv@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-0.def
new file mode 100644
index 0000000000..b440b6b877
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-0.def
@@ -0,0 +1,33 @@
+LIBRARY api-ms-win-core-libraryloader-l1-2-0
+
+EXPORTS
+
+AddDllDirectory@4
+DisableThreadLibraryCalls@4
+EnumResourceLanguagesExA@28
+EnumResourceLanguagesExW@28
+EnumResourceNamesExA@24
+EnumResourceNamesExW@24
+EnumResourceTypesExA@20
+EnumResourceTypesExW@20
+FindResourceExW@16
+FindStringOrdinal@24
+FreeLibrary@4
+FreeLibraryAndExitThread@8
+FreeResource@4
+GetModuleFileNameA@12
+GetModuleFileNameW@12
+GetModuleHandleA@4
+GetModuleHandleExA@12
+GetModuleHandleExW@12
+GetModuleHandleW@4
+GetProcAddress@8
+LoadLibraryExA@12
+LoadLibraryExW@12
+LoadResource@8
+LoadStringA@16
+LoadStringW@16
+LockResource@4
+RemoveDllDirectory@4
+SetDefaultDllDirectories@4
+SizeofResource@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..2a2d1c6b6c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-0_windowsapp.def
@@ -0,0 +1,27 @@
+LIBRARY api-ms-win-core-libraryloader-l1-2-0
+
+EXPORTS
+
+AddDllDirectory@4
+DisableThreadLibraryCalls@4
+FindResourceExW@16
+FindStringOrdinal@24
+FreeLibrary@4
+FreeLibraryAndExitThread@8
+FreeResource@4
+GetModuleFileNameA@12
+GetModuleFileNameW@12
+GetModuleHandleA@4
+GetModuleHandleExA@12
+GetModuleHandleExW@12
+GetModuleHandleW@4
+GetProcAddress@8
+LoadLibraryExA@12
+LoadLibraryExW@12
+LoadResource@8
+LoadStringA@16
+LoadStringW@16
+LockResource@4
+RemoveDllDirectory@4
+SetDefaultDllDirectories@4
+SizeofResource@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-1.def
new file mode 100644
index 0000000000..336d6be94b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-libraryloader-l1-2-1
+
+EXPORTS
+
+FindResourceW@12
+LoadLibraryA@4
+LoadLibraryW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-2.def b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-2.def
new file mode 100644
index 0000000000..4331d1ec6a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-libraryloader-l1-2-2
+
+EXPORTS
+
+EnumResourceNamesW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l2-1-0.def
new file mode 100644
index 0000000000..92382c0fb3
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-libraryloader-l2-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-libraryloader-l2-1-0
+
+EXPORTS
+
+LoadPackagedLibrary@8
+QueryOptionalDelayLoadedAPI@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-ansi-l1-1-0.def
new file mode 100644
index 0000000000..c95d8b98da
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-ansi-l1-1-0.def
@@ -0,0 +1,22 @@
+LIBRARY api-ms-win-core-localization-ansi-l1-1-0
+
+EXPORTS
+
+EnumCalendarInfoA@16
+EnumCalendarInfoExA@16
+EnumDateFormatsA@12
+EnumDateFormatsExA@12
+EnumLanguageGroupLocalesA@16
+EnumSystemCodePagesA@8
+EnumSystemLanguageGroupsA@12
+EnumTimeFormatsA@12
+EnumUILanguagesA@12
+FoldStringA@20
+GetCalendarInfoA@24
+GetCPInfoExA@12
+GetCurrencyFormatA@24
+GetGeoInfoA@20
+GetNumberFormatA@24
+GetStringTypeExA@20
+SetCalendarInfoA@16
+SetLocaleInfoA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..bbadce429f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-localization-ansi-l1-1-0
+
+EXPORTS
+
+EnumUILanguagesA@12
+FoldStringA@20
+GetCalendarInfoA@24
+GetStringTypeExA@20
+SetCalendarInfoA@16
+SetLocaleInfoA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-0.def
new file mode 100644
index 0000000000..79411b380a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-0.def
@@ -0,0 +1,63 @@
+LIBRARY api-ms-win-core-localization-l1-2-0
+
+EXPORTS
+
+ConvertDefaultLocale@4
+EnumSystemGeoID@12
+EnumSystemLocalesA@8
+EnumSystemLocalesW@8
+FindNLSString@28
+FindNLSStringEx@40
+FormatMessageA@28
+FormatMessageW@28
+GetACP@0
+GetCalendarInfoEx@28
+GetCalendarInfoW@24
+GetCPInfo@8
+GetCPInfoExW@12
+GetFileMUIInfo@16
+GetFileMUIPath@28
+GetGeoInfoW@20
+GetLocaleInfoA@16
+GetLocaleInfoEx@16
+GetLocaleInfoW@16
+GetNLSVersion@12
+GetNLSVersionEx@12
+GetOEMCP@0
+GetProcessPreferredUILanguages@16
+GetSystemDefaultLangID@0
+GetSystemDefaultLCID@0
+GetSystemPreferredUILanguages@16
+GetThreadLocale@0
+GetThreadPreferredUILanguages@16
+GetThreadUILanguage@0
+GetUILanguageInfo@20
+GetUserDefaultLangID@0
+GetUserDefaultLCID@0
+GetUserDefaultLocaleName@8
+GetUserGeoID@4
+GetUserPreferredUILanguages@16
+IdnToAscii@20
+IdnToUnicode@20
+IsDBCSLeadByte@4
+IsDBCSLeadByteEx@8
+IsNLSDefinedString@20
+IsValidCodePage@4
+IsValidLanguageGroup@8
+IsValidLocale@8
+IsValidLocaleName@4
+IsValidNLSVersion@12
+LCMapStringA@24
+LCMapStringEx@36
+LCMapStringW@24
+LocaleNameToLCID@8
+ResolveLocaleName@12
+SetCalendarInfoW@16
+SetLocaleInfoW@12
+SetProcessPreferredUILanguages@12
+SetThreadLocale@4
+SetThreadPreferredUILanguages@12
+SetThreadUILanguage@4
+SetUserGeoID@4
+VerLanguageNameA@12
+VerLanguageNameW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..72496da293
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-0_windowsapp.def
@@ -0,0 +1,62 @@
+LIBRARY api-ms-win-core-localization-l1-2-0
+
+EXPORTS
+
+ConvertDefaultLocale@4
+EnumSystemGeoID@12
+EnumSystemLocalesA@8
+EnumSystemLocalesW@8
+FindNLSString@28
+FindNLSStringEx@40
+FormatMessageA@28
+FormatMessageW@28
+GetACP@0
+GetCalendarInfoEx@28
+GetCalendarInfoW@24
+GetCPInfo@8
+GetCPInfoExW@12
+GetFileMUIInfo@16
+GetFileMUIPath@28
+GetGeoInfoW@20
+GetLocaleInfoA@16
+GetLocaleInfoEx@16
+GetLocaleInfoW@16
+GetNLSVersion@12
+GetNLSVersionEx@12
+GetOEMCP@0
+GetProcessPreferredUILanguages@16
+GetSystemDefaultLangID@0
+GetSystemDefaultLCID@0
+GetSystemPreferredUILanguages@16
+GetThreadLocale@0
+GetThreadPreferredUILanguages@16
+GetThreadUILanguage@0
+GetUILanguageInfo@20
+GetUserDefaultLangID@0
+GetUserDefaultLCID@0
+GetUserDefaultLocaleName@8
+GetUserGeoID@4
+GetUserPreferredUILanguages@16
+IdnToAscii@20
+IdnToUnicode@20
+IsDBCSLeadByte@4
+IsDBCSLeadByteEx@8
+IsNLSDefinedString@20
+IsValidCodePage@4
+IsValidLanguageGroup@8
+IsValidLocale@8
+IsValidLocaleName@4
+IsValidNLSVersion@12
+LCMapStringA@24
+LCMapStringEx@36
+LCMapStringW@24
+LocaleNameToLCID@8
+ResolveLocaleName@12
+SetCalendarInfoW@16
+SetLocaleInfoW@12
+SetProcessPreferredUILanguages@12
+SetThreadLocale@4
+SetThreadPreferredUILanguages@12
+SetThreadUILanguage@4
+VerLanguageNameA@12
+VerLanguageNameW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-1.def
new file mode 100644
index 0000000000..1c8683189a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-localization-l1-2-1
+
+EXPORTS
+
+EnumSystemLocalesEx@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-2.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-2.def
new file mode 100644
index 0000000000..1e07375624
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-localization-l1-2-2
+
+EXPORTS
+
+GetSystemDefaultLocaleName@8
+LCIDToLocaleName@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-3.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-3.def
new file mode 100644
index 0000000000..1b157a44b0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-3.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-localization-l1-2-3
+
+EXPORTS
+
+EnumSystemGeoNames@12
+GetGeoInfoEx@16
+GetUserDefaultGeoName@8
+SetUserGeoName@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-4.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-4.def
new file mode 100644
index 0000000000..63adeb11cd
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-l1-2-4.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-localization-l1-2-4
+
+EXPORTS
+
+RestoreThreadPreferredUILanguages@4
+SetThreadPreferredUILanguages2@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-l2-1-0.def
new file mode 100644
index 0000000000..20265cc7e3
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-l2-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-core-localization-l2-1-0
+
+EXPORTS
+
+EnumCalendarInfoExEx@24
+EnumCalendarInfoExW@16
+EnumCalendarInfoW@16
+EnumDateFormatsExEx@16
+EnumDateFormatsExW@12
+EnumDateFormatsW@12
+EnumSystemCodePagesW@8
+EnumTimeFormatsEx@16
+EnumTimeFormatsW@12
+GetCurrencyFormatEx@24
+GetCurrencyFormatW@24
+GetNumberFormatEx@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-l2-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..263e4ec5ac
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-l2-1-0_windowsapp.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-localization-l2-1-0
+
+EXPORTS
+
+EnumCalendarInfoExEx@24
+EnumCalendarInfoW@16
+EnumDateFormatsExEx@16
+EnumSystemCodePagesW@8
+EnumTimeFormatsEx@16
+GetCurrencyFormatEx@24
+GetCurrencyFormatW@24
+GetNumberFormatEx@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-obsolete-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-obsolete-l1-2-0.def
new file mode 100644
index 0000000000..c20fb48c87
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-obsolete-l1-2-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-localization-obsolete-l1-2-0
+
+EXPORTS
+
+CompareStringA@24
+EnumLanguageGroupLocalesW@16
+EnumSystemLanguageGroupsW@12
+EnumUILanguagesW@12
+GetNumberFormatW@24
+GetStringTypeA@20
+GetSystemDefaultUILanguage@0
+GetUserDefaultUILanguage@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-localization-obsolete-l1-2-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-localization-obsolete-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..2c25969632
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-localization-obsolete-l1-2-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-localization-obsolete-l1-2-0
+
+EXPORTS
+
+CompareStringA@24
+EnumUILanguagesW@12
+GetStringTypeA@20
+GetSystemDefaultUILanguage@0
+GetUserDefaultUILanguage@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-0.def
new file mode 100644
index 0000000000..0173618faa
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-0.def
@@ -0,0 +1,20 @@
+LIBRARY api-ms-win-core-memory-l1-1-0
+
+EXPORTS
+
+CreateFileMappingW@24
+FlushViewOfFile@8
+MapViewOfFile@20
+MapViewOfFileEx@24
+OpenFileMappingW@12
+ReadProcessMemory@20
+UnmapViewOfFile@4
+VirtualAlloc@16
+VirtualAllocEx@20
+VirtualFree@12
+VirtualFreeEx@16
+VirtualProtect@16
+VirtualProtectEx@20
+VirtualQuery@12
+VirtualQueryEx@16
+WriteProcessMemory@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-1.def
new file mode 100644
index 0000000000..9497d9151b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-1.def
@@ -0,0 +1,20 @@
+LIBRARY api-ms-win-core-memory-l1-1-1
+
+EXPORTS
+
+CreateFileMappingFromApp@24
+CreateFileMappingNumaW@28
+CreateMemoryResourceNotification@4
+GetLargePageMinimum@0
+GetProcessWorkingSetSizeEx@16
+GetSystemFileCacheSize@12
+GetWriteWatch@24
+MapViewOfFileFromApp@20
+PrefetchVirtualMemory@16
+QueryMemoryResourceNotification@8
+ResetWriteWatch@8
+SetProcessWorkingSetSizeEx@16
+SetSystemFileCacheSize@12
+UnmapViewOfFileEx@8
+VirtualLock@8
+VirtualUnlock@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..f30008d031
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-1_windowsapp.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-memory-l1-1-1
+
+EXPORTS
+
+CreateFileMappingFromApp@24
+GetLargePageMinimum@0
+GetProcessWorkingSetSizeEx@16
+GetWriteWatch@24
+MapViewOfFileFromApp@20
+ResetWriteWatch@8
+SetProcessWorkingSetSizeEx@16
+UnmapViewOfFileEx@8
+VirtualLock@8
+VirtualUnlock@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-2.def
new file mode 100644
index 0000000000..a50173024c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-2.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-memory-l1-1-2
+
+EXPORTS
+
+AllocateUserPhysicalPages@12
+AllocateUserPhysicalPagesNuma@16
+DiscardVirtualMemory@8
+FreeUserPhysicalPages@12
+GetMemoryErrorHandlingCapabilities@4
+MapUserPhysicalPages@12
+OfferVirtualMemory@12
+ReclaimVirtualMemory@8
+RegisterBadMemoryNotification@4
+UnregisterBadMemoryNotification@4
+VirtualAllocExNuma@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-2_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-2_windowsapp.def
new file mode 100644
index 0000000000..743bdc7c57
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-2_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-memory-l1-1-2
+
+EXPORTS
+
+DiscardVirtualMemory@8
+OfferVirtualMemory@12
+ReclaimVirtualMemory@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-3.def
new file mode 100644
index 0000000000..e0ac7a8970
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-3.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-memory-l1-1-3
+
+EXPORTS
+
+OpenFileMappingFromApp@12
+SetProcessValidCallTargets@20
+VirtualAllocFromApp@16
+VirtualProtectFromApp@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-4.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-4.def
new file mode 100644
index 0000000000..1e56b7975e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-4.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-memory-l1-1-4
+
+EXPORTS
+
+QueryVirtualMemoryInformation@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-5.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-5.def
new file mode 100644
index 0000000000..f776c682ad
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-5.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-memory-l1-1-5
+
+EXPORTS
+
+MapViewOfFileNuma2@36
+UnmapViewOfFile2@12
+VirtualUnlockEx@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-5_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-5_windowsapp.def
new file mode 100644
index 0000000000..3258dd5bf2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-5_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-memory-l1-1-5
+
+EXPORTS
+
+UnmapViewOfFile2@12
+VirtualUnlockEx@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-6.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-6.def
new file mode 100644
index 0000000000..58502ec13a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-6.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-memory-l1-1-6
+
+EXPORTS
+
+MapViewOfFile3@40
+MapViewOfFile3FromApp@40
+VirtualAlloc2@28
+VirtualAlloc2FromApp@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-6_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-6_windowsapp.def
new file mode 100644
index 0000000000..7c49d70d3c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-6_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-memory-l1-1-6
+
+EXPORTS
+
+MapViewOfFile3FromApp@40
+VirtualAlloc2FromApp@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-7.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-7.def
new file mode 100644
index 0000000000..25d4dbdb28
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-7.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-memory-l1-1-7
+
+EXPORTS
+
+CreateFileMapping2@40
+SetProcessValidCallTargetsForMappedView@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-7_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-7_windowsapp.def
new file mode 100644
index 0000000000..eaf81b5e74
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-memory-l1-1-7_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-memory-l1-1-7
+
+EXPORTS
+
+SetProcessValidCallTargetsForMappedView@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-ansi-l1-1-0.def
new file mode 100644
index 0000000000..0c231f99bf
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-namedpipe-ansi-l1-1-0
+
+EXPORTS
+
+GetNamedPipeClientComputerNameA@12
+GetNamedPipeHandleStateA@28
+WaitNamedPipeA@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-ansi-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-ansi-l1-1-1.def
new file mode 100644
index 0000000000..cfb9f0a3e0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-ansi-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-namedpipe-ansi-l1-1-1
+
+EXPORTS
+
+CallNamedPipeA@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-1-0.def
new file mode 100644
index 0000000000..8d0ce8c410
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-namedpipe-l1-1-0
+
+EXPORTS
+
+ConnectNamedPipe@8
+CreateNamedPipeW@32
+CreatePipe@16
+DisconnectNamedPipe@4
+GetNamedPipeClientComputerNameW@12
+ImpersonateNamedPipeClient@4
+PeekNamedPipe@24
+SetNamedPipeHandleState@16
+TransactNamedPipe@28
+WaitNamedPipeW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-2-1.def
new file mode 100644
index 0000000000..f34e3d46aa
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-2-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-namedpipe-l1-2-1
+
+EXPORTS
+
+GetNamedPipeHandleStateW@28
+GetNamedPipeInfo@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-2-2.def b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-2-2.def
new file mode 100644
index 0000000000..2a5d489a64
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-namedpipe-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-namedpipe-l1-2-2
+
+EXPORTS
+
+CallNamedPipeW@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-namespace-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-namespace-ansi-l1-1-0.def
new file mode 100644
index 0000000000..20962d33f1
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-namespace-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-namespace-ansi-l1-1-0
+
+EXPORTS
+
+CreateBoundaryDescriptorA@8
+CreatePrivateNamespaceA@12
+OpenPrivateNamespaceA@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-namespace-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-namespace-l1-1-0.def
new file mode 100644
index 0000000000..e132a8b0b7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-namespace-l1-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-namespace-l1-1-0
+
+EXPORTS
+
+AddSIDToBoundaryDescriptor@8
+ClosePrivateNamespace@8
+CreateBoundaryDescriptorW@8
+CreatePrivateNamespaceW@12
+DeleteBoundaryDescriptor@4
+OpenPrivateNamespaceW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-normalization-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-normalization-l1-1-0.def
new file mode 100644
index 0000000000..9b45689268
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-normalization-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-normalization-l1-1-0
+
+EXPORTS
+
+GetStringScripts@20
+IdnToNameprepUnicode@20
+IsNormalizedString@12
+NormalizeString@20
+VerifyScripts@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-path-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-path-l1-1-0.def
new file mode 100644
index 0000000000..de0cf201d0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-path-l1-1-0.def
@@ -0,0 +1,26 @@
+LIBRARY api-ms-win-core-path-l1-1-0
+
+EXPORTS
+
+PathAllocCanonicalize@12
+PathAllocCombine@16
+PathCchAddBackslash@8
+PathCchAddBackslashEx@16
+PathCchAddExtension@12
+PathCchAppend@12
+PathCchAppendEx@16
+PathCchCanonicalize@12
+PathCchCanonicalizeEx@16
+PathCchCombine@16
+PathCchCombineEx@20
+PathCchFindExtension@12
+PathCchIsRoot@4
+PathCchRemoveBackslash@8
+PathCchRemoveBackslashEx@16
+PathCchRemoveExtension@8
+PathCchRemoveFileSpec@8
+PathCchRenameExtension@12
+PathCchSkipRoot@8
+PathCchStripPrefix@8
+PathCchStripToRoot@8
+PathIsUNCEx@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-perfcounters-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-perfcounters-l1-1-0.def
new file mode 100644
index 0000000000..5dd5aa6c0a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-perfcounters-l1-1-0.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-perfcounters-l1-1-0
+
+EXPORTS
+
+PerfCreateInstance@16
+PerfDecrementULongCounterValue@16
+PerfDecrementULongLongCounterValue@20
+PerfDeleteInstance@8
+PerfIncrementULongCounterValue@16
+PerfIncrementULongLongCounterValue@20
+PerfQueryInstance@16
+PerfSetCounterRefValue@16
+PerfSetCounterSetInfo@12
+PerfSetULongCounterValue@16
+PerfSetULongLongCounterValue@20
+PerfStartProvider@12
+PerfStartProviderEx@12
+PerfStopProvider@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-0.def
new file mode 100644
index 0000000000..a82ec6fd1a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-0.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-privateprofile-l1-1-0
+
+EXPORTS
+
+GetPrivateProfileIntA@16
+GetPrivateProfileIntW@16
+GetPrivateProfileSectionW@16
+GetPrivateProfileStringA@24
+GetPrivateProfileStringW@24
+GetProfileIntA@12
+GetProfileIntW@12
+GetProfileSectionA@12
+GetProfileSectionW@12
+GetProfileStringA@20
+GetProfileStringW@20
+WritePrivateProfileSectionA@12
+WritePrivateProfileStringA@16
+WritePrivateProfileStringW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..8a7633f6b7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-privateprofile-l1-1-0
+
+EXPORTS
+
+GetPrivateProfileIntA@16
+GetPrivateProfileStringA@24
+GetPrivateProfileStringW@24
+WritePrivateProfileStringA@16
+WritePrivateProfileStringW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-1.def
new file mode 100644
index 0000000000..d6cc2eb17e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-privateprofile-l1-1-1
+
+EXPORTS
+
+GetPrivateProfileSectionA@16
+WritePrivateProfileSectionW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..21a304223f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-privateprofile-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-privateprofile-l1-1-1
+
+EXPORTS
+
+GetPrivateProfileSectionA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-ansi-l1-1-0.def
new file mode 100644
index 0000000000..cedcde7ab7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-ansi-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-processenvironment-ansi-l1-1-0
+
+EXPORTS
+
+SetEnvironmentStringsA@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-1-0.def
new file mode 100644
index 0000000000..e983b380ce
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-1-0.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-core-processenvironment-l1-1-0
+
+EXPORTS
+
+ExpandEnvironmentStringsA@12
+ExpandEnvironmentStringsW@12
+FreeEnvironmentStringsA@4
+FreeEnvironmentStringsW@4
+GetCommandLineA@0
+GetCommandLineW@0
+GetCurrentDirectoryA@8
+GetCurrentDirectoryW@8
+GetEnvironmentStrings@0
+GetEnvironmentStringsW@0
+GetEnvironmentVariableA@12
+GetEnvironmentVariableW@12
+GetStdHandle@4
+SearchPathW@24
+SetCurrentDirectoryA@4
+SetCurrentDirectoryW@4
+SetEnvironmentStringsW@4
+SetEnvironmentVariableA@8
+SetEnvironmentVariableW@8
+SetStdHandle@8
+SetStdHandleEx@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-2-0.def
new file mode 100644
index 0000000000..18fd96eaf1
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-2-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-processenvironment-l1-2-0
+
+EXPORTS
+
+NeedCurrentDirectoryForExePathA@4
+NeedCurrentDirectoryForExePathW@4
+SearchPathA@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-2-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..360ce5b3ce
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processenvironment-l1-2-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-processenvironment-l1-2-0
+
+EXPORTS
+
+SearchPathA@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processsnapshot-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-processsnapshot-l1-1-0.def
new file mode 100644
index 0000000000..9200efcab9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processsnapshot-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-processsnapshot-l1-1-0
+
+EXPORTS
+
+PssCaptureSnapshot@16
+PssDuplicateSnapshot@20
+PssFreeSnapshot@8
+PssQuerySnapshot@16
+PssWalkMarkerCreate@8
+PssWalkMarkerFree@4
+PssWalkMarkerGetPosition@8
+PssWalkMarkerSeekToBeginning@4
+PssWalkMarkerSetPosition@8
+PssWalkSnapshot@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-0.def
new file mode 100644
index 0000000000..e4e49d9a7e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-0.def
@@ -0,0 +1,53 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-0
+
+EXPORTS
+
+CreateProcessA@40
+CreateProcessAsUserW@44
+CreateProcessW@40
+CreateRemoteThread@28
+CreateRemoteThreadEx@32
+CreateThread@24
+DeleteProcThreadAttributeList@4
+ExitProcess@4
+ExitThread@4
+FlushProcessWriteBuffers@0
+GetCurrentProcess@0
+GetCurrentProcessId@0
+GetCurrentThread@0
+GetCurrentThreadId@0
+GetExitCodeProcess@8
+GetExitCodeThread@8
+GetPriorityClass@4
+GetProcessId@4
+GetProcessIdOfThread@4
+GetProcessTimes@20
+GetProcessVersion@4
+GetStartupInfoW@4
+GetThreadId@4
+GetThreadPriority@4
+GetThreadPriorityBoost@8
+InitializeProcThreadAttributeList@16
+OpenProcessToken@12
+OpenThread@12
+OpenThreadToken@16
+ProcessIdToSessionId@8
+QueryProcessAffinityUpdateMode@8
+QueueUserAPC@12
+ResumeThread@4
+SetPriorityClass@8
+SetProcessAffinityUpdateMode@8
+SetProcessShutdownParameters@8
+SetThreadPriority@8
+SetThreadPriorityBoost@8
+SetThreadStackGuarantee@4
+SetThreadToken@8
+SuspendThread@4
+SwitchToThread@0
+TerminateProcess@8
+TerminateThread@8
+TlsAlloc@0
+TlsFree@4
+TlsGetValue@4
+TlsSetValue@8
+UpdateProcThreadAttribute@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-1.def
new file mode 100644
index 0000000000..ce7ca42a9d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-1.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-1
+
+EXPORTS
+
+FlushInstructionCache@12
+GetCurrentProcessorNumber@0
+GetCurrentProcessorNumberEx@4
+GetCurrentThreadStackLimits@8
+GetProcessHandleCount@8
+GetProcessMitigationPolicy@16
+GetThreadContext@8
+GetThreadIdealProcessorEx@8
+GetThreadTimes@20
+IsProcessorFeaturePresent@4
+OpenProcess@12
+SetProcessMitigationPolicy@12
+SetThreadContext@8
+SetThreadIdealProcessorEx@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-2.def
new file mode 100644
index 0000000000..13c16bdc39
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-2.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-2
+
+EXPORTS
+
+GetProcessPriorityBoost@8
+GetSystemTimes@12
+GetThreadInformation@16
+GetThreadIOPendingFlag@8
+IsProcessCritical@8
+QueryProtectedPolicy@8
+SetProcessPriorityBoost@8
+SetProtectedPolicy@12
+SetThreadInformation@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-2_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-2_windowsapp.def
new file mode 100644
index 0000000000..8c2c86e8cc
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-2_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-2
+
+EXPORTS
+
+GetProcessPriorityBoost@8
+GetSystemTimes@12
+SetProcessPriorityBoost@8
+SetThreadInformation@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-3.def
new file mode 100644
index 0000000000..0906021cbe
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-3.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-3
+
+EXPORTS
+
+CreateProcessAsUserA@44
+GetProcessDefaultCpuSets@16
+GetProcessInformation@16
+GetProcessShutdownParameters@8
+GetSystemCpuSetInformation@20
+GetThreadDescription@8
+GetThreadSelectedCpuSets@16
+SetProcessDefaultCpuSets@12
+SetProcessInformation@16
+SetThreadDescription@8
+SetThreadIdealProcessor@8
+SetThreadSelectedCpuSets@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-3_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-3_windowsapp.def
new file mode 100644
index 0000000000..6733ced72a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-3_windowsapp.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-3
+
+EXPORTS
+
+CreateProcessAsUserA@44
+GetProcessDefaultCpuSets@16
+GetProcessInformation@16
+GetSystemCpuSetInformation@20
+GetThreadDescription@8
+GetThreadSelectedCpuSets@16
+SetProcessDefaultCpuSets@12
+SetProcessInformation@16
+SetThreadDescription@8
+SetThreadIdealProcessor@8
+SetThreadSelectedCpuSets@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-4.def b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-4.def
new file mode 100644
index 0000000000..a73af0e324
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processthreads-l1-1-4.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-processthreads-l1-1-4
+
+EXPORTS
+
+SetProcessDynamicEHContinuationTargets@12
+SetProcessDynamicEnforcedCetCompatibleRanges@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processtopology-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-l1-1-0.def
new file mode 100644
index 0000000000..2d46cf15b0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-processtopology-l1-1-0
+
+EXPORTS
+
+GetProcessGroupAffinity@12
+GetThreadGroupAffinity@8
+SetThreadGroupAffinity@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processtopology-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..040fbcdde2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-processtopology-l1-1-0
+
+EXPORTS
+
+GetThreadGroupAffinity@8
+SetThreadGroupAffinity@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..c995351e4a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-processtopology-obsolete-l1-1-0
+
+EXPORTS
+
+GetActiveProcessorCount@4
+GetProcessAffinityMask@12
+GetProcessIoCounters@8
+SetProcessAffinityMask@8
+SetThreadAffinityMask@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..7b60bf7047
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-processtopology-obsolete-l1-1-0
+
+EXPORTS
+
+GetProcessAffinityMask@12
+GetProcessIoCounters@8
+SetProcessAffinityMask@8
+SetThreadAffinityMask@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-1.def
new file mode 100644
index 0000000000..876c5e451e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-processtopology-obsolete-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-processtopology-obsolete-l1-1-1
+
+EXPORTS
+
+GetActiveProcessorGroupCount@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-profile-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-profile-l1-1-0.def
new file mode 100644
index 0000000000..020eef9785
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-profile-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-profile-l1-1-0
+
+EXPORTS
+
+QueryPerformanceCounter@4
+QueryPerformanceFrequency@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-psapi-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-psapi-ansi-l1-1-0.def
new file mode 100644
index 0000000000..a4ae77af74
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-psapi-ansi-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-psapi-ansi-l1-1-0
+
+EXPORTS
+
+K32EnumPageFilesA@8
+K32GetDeviceDriverBaseNameA@12
+K32GetDeviceDriverFileNameA@12
+K32GetMappedFileNameA@16
+K32GetModuleBaseNameA@16
+K32GetModuleFileNameExA@16
+K32GetProcessImageFileNameA@12
+QueryFullProcessImageNameA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-psapi-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-psapi-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..30fc209dc2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-psapi-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-psapi-ansi-l1-1-0
+
+EXPORTS
+
+K32GetModuleBaseNameA@16
+K32GetModuleFileNameExA@16
+QueryFullProcessImageNameA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-psapi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-psapi-l1-1-0.def
new file mode 100644
index 0000000000..7500446b0e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-psapi-l1-1-0.def
@@ -0,0 +1,25 @@
+LIBRARY api-ms-win-core-psapi-l1-1-0
+
+EXPORTS
+
+K32EmptyWorkingSet@4
+K32EnumDeviceDrivers@12
+K32EnumPageFilesW@8
+K32EnumProcesses@12
+K32EnumProcessModules@16
+K32EnumProcessModulesEx@20
+K32GetDeviceDriverBaseNameW@12
+K32GetDeviceDriverFileNameW@12
+K32GetMappedFileNameW@16
+K32GetModuleBaseNameW@16
+K32GetModuleFileNameExW@16
+K32GetModuleInformation@16
+K32GetPerformanceInfo@8
+K32GetProcessImageFileNameW@12
+K32GetProcessMemoryInfo@12
+K32GetWsChanges@12
+K32GetWsChangesEx@12
+K32InitializeProcessForWsWatch@4
+K32QueryWorkingSet@12
+K32QueryWorkingSetEx@12
+QueryFullProcessImageNameW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-psapi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-psapi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..377ddd588c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-psapi-l1-1-0_windowsapp.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-psapi-l1-1-0
+
+EXPORTS
+
+K32EnumProcesses@12
+K32GetModuleBaseNameW@16
+K32GetModuleFileNameExW@16
+K32GetModuleInformation@16
+K32GetProcessMemoryInfo@12
+K32QueryWorkingSet@12
+K32QueryWorkingSetEx@12
+QueryFullProcessImageNameW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-psm-appnotify-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-psm-appnotify-l1-1-0.def
new file mode 100644
index 0000000000..a5655c65f7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-psm-appnotify-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-psm-appnotify-l1-1-0
+
+EXPORTS
+
+RegisterAppStateChangeNotification@12
+UnregisterAppStateChangeNotification@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-quirks-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-quirks-l1-1-0.def
new file mode 100644
index 0000000000..b41354d227
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-quirks-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-quirks-l1-1-0
+
+EXPORTS
+
+QuirkGetData@8
+QuirkGetData2@8
+QuirkIsEnabled@4
+QuirkIsEnabled2@12
+QuirkIsEnabled3@8
+QuirkIsEnabledForPackage@16
+QuirkIsEnabledForPackage2@24
+QuirkIsEnabledForProcess@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-quirks-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-quirks-l1-1-1.def
new file mode 100644
index 0000000000..b31cbf4e2c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-quirks-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-quirks-l1-1-1
+
+EXPORTS
+
+QuirkIsEnabledForPackage3@20
+QuirkIsEnabledForPackage4@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-0.def
new file mode 100644
index 0000000000..dd06582736
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-realtime-l1-1-0
+
+EXPORTS
+
+QueryIdleProcessorCycleTime@8
+QueryIdleProcessorCycleTimeEx@12
+QueryProcessCycleTime@8
+QueryThreadCycleTime@8
+QueryUnbiasedInterruptTime@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..3765bbd229
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-realtime-l1-1-0
+
+EXPORTS
+
+QueryThreadCycleTime@8
+QueryUnbiasedInterruptTime@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-1.def
new file mode 100644
index 0000000000..2ca64c0ca8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-realtime-l1-1-1
+
+EXPORTS
+
+QueryInterruptTime@4
+QueryInterruptTimePrecise@4
+QueryUnbiasedInterruptTimePrecise@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-2.def
new file mode 100644
index 0000000000..39a88fa99a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-realtime-l1-1-2.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-realtime-l1-1-2
+
+EXPORTS
+
+ConvertAuxiliaryCounterToPerformanceCounter@16
+ConvertPerformanceCounterToAuxiliaryCounter@16
+QueryAuxiliaryCounterFrequency@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-0.def
new file mode 100644
index 0000000000..95a972a7c1
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-0.def
@@ -0,0 +1,47 @@
+LIBRARY api-ms-win-core-registry-l1-1-0
+
+EXPORTS
+
+RegCloseKey@4
+RegCopyTreeW@12
+RegCreateKeyExA@36
+RegCreateKeyExW@36
+RegDeleteKeyExA@16
+RegDeleteKeyExW@16
+RegDeleteTreeA@8
+RegDeleteTreeW@8
+RegDeleteValueA@8
+RegDeleteValueW@8
+RegDisablePredefinedCacheEx@0
+RegEnumKeyExA@32
+RegEnumKeyExW@32
+RegEnumValueA@32
+RegEnumValueW@32
+RegFlushKey@4
+RegGetKeySecurity@16
+RegGetValueA@28
+RegGetValueW@28
+RegLoadAppKeyA@20
+RegLoadAppKeyW@20
+RegLoadKeyA@12
+RegLoadKeyW@12
+RegLoadMUIStringA@28
+RegLoadMUIStringW@28
+RegNotifyChangeKeyValue@20
+RegOpenCurrentUser@8
+RegOpenKeyExA@20
+RegOpenKeyExW@20
+RegOpenUserClassesRoot@16
+RegQueryInfoKeyA@48
+RegQueryInfoKeyW@48
+RegQueryValueExA@24
+RegQueryValueExW@24
+RegRestoreKeyA@12
+RegRestoreKeyW@12
+RegSaveKeyExA@16
+RegSaveKeyExW@16
+RegSetKeySecurity@12
+RegSetValueExA@24
+RegSetValueExW@24
+RegUnLoadKeyA@8
+RegUnLoadKeyW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-1.def
new file mode 100644
index 0000000000..00e5fba8ef
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-1.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-registry-l1-1-1
+
+EXPORTS
+
+RegDeleteKeyValueA@12
+RegDeleteKeyValueW@12
+RegSetKeyValueA@24
+RegSetKeyValueW@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-2.def
new file mode 100644
index 0000000000..1f7da12abf
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-registry-l1-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-registry-l1-1-2
+
+EXPORTS
+
+RegQueryMultipleValuesA@20
+RegQueryMultipleValuesW@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-registry-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-registry-l2-1-0.def
new file mode 100644
index 0000000000..55e73c1a22
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-registry-l2-1-0.def
@@ -0,0 +1,31 @@
+LIBRARY api-ms-win-core-registry-l2-1-0
+
+EXPORTS
+
+RegConnectRegistryA@12
+RegConnectRegistryW@12
+RegCopyTreeA@12
+RegCreateKeyA@12
+RegCreateKeyTransactedA@44
+RegCreateKeyTransactedW@44
+RegCreateKeyW@12
+RegDeleteKeyA@8
+RegDeleteKeyTransactedA@24
+RegDeleteKeyTransactedW@24
+RegDeleteKeyW@8
+RegDisablePredefinedCache@0
+RegEnumKeyA@16
+RegEnumKeyW@16
+RegOpenKeyA@12
+RegOpenKeyTransactedA@28
+RegOpenKeyTransactedW@28
+RegOpenKeyW@12
+RegOverridePredefKey@8
+RegQueryValueA@16
+RegQueryValueW@16
+RegReplaceKeyA@16
+RegReplaceKeyW@16
+RegSaveKeyA@12
+RegSaveKeyW@12
+RegSetValueA@20
+RegSetValueW@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-1-0.def
new file mode 100644
index 0000000000..5c681cb0c8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-rtlsupport-l1-1-0
+
+EXPORTS
+
+RtlCaptureContext@4
+RtlCaptureStackBackTrace@16
+RtlUnwind@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-0.def
new file mode 100644
index 0000000000..50532e91c2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-rtlsupport-l1-2-0
+
+EXPORTS
+
+RtlCompareMemory@12
+RtlPcToFileHeader@8
+RtlRaiseException@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..50532e91c2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-rtlsupport-l1-2-0
+
+EXPORTS
+
+RtlCompareMemory@12
+RtlPcToFileHeader@8
+RtlRaiseException@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-1.def
new file mode 100644
index 0000000000..fd34c543a9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-rtlsupport-l1-2-1.def
@@ -0,0 +1,3 @@
+LIBRARY api-ms-win-core-rtlsupport-l1-2-1
+
+EXPORTS
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-shutdown-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-shutdown-ansi-l1-1-0.def
new file mode 100644
index 0000000000..728ab9a588
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-shutdown-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-shutdown-ansi-l1-1-0
+
+EXPORTS
+
+AbortSystemShutdownA@4
+InitiateSystemShutdownA@20
+InitiateSystemShutdownExA@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-0.def
new file mode 100644
index 0000000000..1ae330f1bd
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-shutdown-l1-1-0
+
+EXPORTS
+
+AbortSystemShutdownW@4
+InitiateSystemShutdownExW@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..2f4db29156
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-shutdown-l1-1-0
+
+EXPORTS
+
+InitiateSystemShutdownExW@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-1.def
new file mode 100644
index 0000000000..cb8dbabf8f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-shutdown-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-shutdown-l1-1-1
+
+EXPORTS
+
+InitiateShutdownW@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sidebyside-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-sidebyside-ansi-l1-1-0.def
new file mode 100644
index 0000000000..1113f0dd65
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sidebyside-ansi-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-sidebyside-ansi-l1-1-0
+
+EXPORTS
+
+CreateActCtxA@4
+FindActCtxSectionStringA@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sidebyside-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-sidebyside-l1-1-0.def
new file mode 100644
index 0000000000..1bc289520a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sidebyside-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-sidebyside-l1-1-0
+
+EXPORTS
+
+ActivateActCtx@8
+AddRefActCtx@4
+CreateActCtxW@4
+DeactivateActCtx@8
+FindActCtxSectionGuid@20
+FindActCtxSectionStringW@20
+GetCurrentActCtx@4
+QueryActCtxSettingsW@28
+QueryActCtxW@28
+ReleaseActCtx@4
+ZombifyActCtx@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-slapi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-slapi-l1-1-0.def
new file mode 100644
index 0000000000..0d46898305
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-slapi-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-slapi-l1-1-0
+
+EXPORTS
+
+SLQueryLicenseValueFromApp@20
+SLQueryLicenseValueFromApp2@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-state-helpers-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-state-helpers-l1-1-0.def
new file mode 100644
index 0000000000..8450b10ca9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-state-helpers-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-state-helpers-l1-1-0
+
+EXPORTS
+
+GetRegistryValueWithFallbackW@40
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-string-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-string-l1-1-0.def
new file mode 100644
index 0000000000..876238025d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-string-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-string-l1-1-0
+
+EXPORTS
+
+CompareStringEx@36
+CompareStringOrdinal@20
+CompareStringW@24
+FoldStringW@20
+GetStringTypeExW@20
+GetStringTypeW@16
+MultiByteToWideChar@24
+WideCharToMultiByte@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-0.def
new file mode 100644
index 0000000000..d7ee7e21cb
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-string-l2-1-0
+
+EXPORTS
+
+CharLowerBuffW@8
+CharLowerW@4
+CharNextW@4
+CharPrevW@8
+CharUpperBuffW@8
+CharUpperW@4
+IsCharAlphaNumericW@4
+IsCharAlphaW@4
+IsCharLowerW@4
+IsCharUpperW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..898a1a66fa
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-string-l2-1-0
+
+EXPORTS
+
+CharLowerBuffW@8
+CharLowerW@4
+CharNextW@4
+CharUpperW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-1.def
new file mode 100644
index 0000000000..fef7f0d66c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-string-l2-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-string-l2-1-1
+
+EXPORTS
+
+SHLoadIndirectString@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..957120ac1c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-string-obsolete-l1-1-0
+
+EXPORTS
+
+lstrcatW@8
+lstrcmpA@8
+lstrcmpiA@8
+lstrcmpiW@8
+lstrcmpW@8
+lstrcpynA@12
+lstrcpynW@12
+lstrcpyW@8
+lstrlenA@4
+lstrlenW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..9b7b05b293
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-string-obsolete-l1-1-0
+
+EXPORTS
+
+lstrcatW@8
+lstrcmpA@8
+lstrcmpiA@8
+lstrcmpiW@8
+lstrcmpW@8
+lstrcpynW@12
+lstrcpyW@8
+lstrlenA@4
+lstrlenW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-1.def
new file mode 100644
index 0000000000..d6fe73f1a3
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-string-obsolete-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-string-obsolete-l1-1-1
+
+EXPORTS
+
+lstrcatA@8
+lstrcpyA@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-stringansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-stringansi-l1-1-0.def
new file mode 100644
index 0000000000..45985119f8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-stringansi-l1-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-core-stringansi-l1-1-0
+
+EXPORTS
+
+CharLowerA@4
+CharLowerBuffA@8
+CharNextA@4
+CharNextExA@12
+CharPrevA@8
+CharPrevExA@16
+CharUpperA@4
+CharUpperBuffA@8
+IsCharAlphaA@4
+IsCharAlphaNumericA@4
+IsCharLowerA@4
+IsCharUpperA@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-stringansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-stringansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..6ef9e8a13b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-stringansi-l1-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-stringansi-l1-1-0
+
+EXPORTS
+
+CharLowerA@4
+CharNextA@4
+CharNextExA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-synch-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-synch-ansi-l1-1-0.def
new file mode 100644
index 0000000000..5317db3e66
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-synch-ansi-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-synch-ansi-l1-1-0
+
+EXPORTS
+
+CreateSemaphoreA@16
+CreateSemaphoreExA@24
+CreateWaitableTimerA@12
+CreateWaitableTimerExA@16
+OpenMutexA@12
+OpenSemaphoreA@12
+OpenWaitableTimerA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-synch-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-synch-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..1b82dd82ad
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-synch-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-synch-ansi-l1-1-0
+
+EXPORTS
+
+CreateSemaphoreA@16
+CreateSemaphoreExA@24
+CreateWaitableTimerA@12
+CreateWaitableTimerExA@16
+OpenMutexA@12
+OpenWaitableTimerA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-1-0.def
new file mode 100644
index 0000000000..3dac6406f6
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-1-0.def
@@ -0,0 +1,45 @@
+LIBRARY api-ms-win-core-synch-l1-1-0
+
+EXPORTS
+
+AcquireSRWLockExclusive@4
+AcquireSRWLockShared@4
+CancelWaitableTimer@4
+CreateEventA@16
+CreateEventExA@16
+CreateEventExW@16
+CreateEventW@16
+CreateMutexA@12
+CreateMutexExA@16
+CreateMutexExW@16
+CreateMutexW@12
+CreateSemaphoreExW@24
+CreateWaitableTimerExW@16
+DeleteCriticalSection@4
+EnterCriticalSection@4
+InitializeCriticalSection@4
+InitializeCriticalSectionAndSpinCount@8
+InitializeCriticalSectionEx@12
+InitializeSRWLock@4
+LeaveCriticalSection@4
+OpenEventA@12
+OpenEventW@12
+OpenMutexW@12
+OpenSemaphoreW@12
+OpenWaitableTimerW@12
+ReleaseMutex@4
+ReleaseSemaphore@12
+ReleaseSRWLockExclusive@4
+ReleaseSRWLockShared@4
+ResetEvent@4
+SetCriticalSectionSpinCount@8
+SetEvent@4
+SetWaitableTimer@24
+SetWaitableTimerEx@28
+SleepEx@8
+TryAcquireSRWLockExclusive@4
+TryAcquireSRWLockShared@4
+TryEnterCriticalSection@4
+WaitForMultipleObjectsEx@20
+WaitForSingleObject@8
+WaitForSingleObjectEx@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-2-0.def
new file mode 100644
index 0000000000..d83325c4e9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-2-0.def
@@ -0,0 +1,21 @@
+LIBRARY api-ms-win-core-synch-l1-2-0
+
+EXPORTS
+
+DeleteSynchronizationBarrier@4
+EnterSynchronizationBarrier@8
+InitializeConditionVariable@4
+InitializeSynchronizationBarrier@12
+InitOnceBeginInitialize@16
+InitOnceComplete@12
+InitOnceExecuteOnce@16
+InitOnceInitialize@4
+SignalObjectAndWait@16
+Sleep@4
+SleepConditionVariableCS@12
+SleepConditionVariableSRW@16
+WaitOnAddress@16
+WakeAllConditionVariable@4
+WakeByAddressAll@4
+WakeByAddressSingle@4
+WakeConditionVariable@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-2-1.def
new file mode 100644
index 0000000000..ad6ce299ce
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-synch-l1-2-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-synch-l1-2-1
+
+EXPORTS
+
+CreateSemaphoreW@16
+CreateWaitableTimerW@12
+WaitForMultipleObjects@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-1-0.def
new file mode 100644
index 0000000000..b88f4adbd2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-1-0.def
@@ -0,0 +1,26 @@
+LIBRARY api-ms-win-core-sysinfo-l1-1-0
+
+EXPORTS
+
+GetComputerNameExA@12
+GetComputerNameExW@12
+GetLocalTime@4
+GetLogicalProcessorInformation@8
+GetLogicalProcessorInformationEx@12
+GetSystemDirectoryA@8
+GetSystemDirectoryW@8
+GetSystemInfo@4
+GetSystemTime@4
+GetSystemTimeAdjustment@12
+GetSystemTimeAsFileTime@4
+GetSystemWindowsDirectoryA@8
+GetSystemWindowsDirectoryW@8
+GetTickCount@0
+GetTickCount64@0
+GetVersion@0
+GetVersionExA@4
+GetVersionExW@4
+GetWindowsDirectoryA@8
+GetWindowsDirectoryW@8
+GlobalMemoryStatusEx@4
+SetLocalTime@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-0.def
new file mode 100644
index 0000000000..3ffb5bd816
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-0
+
+EXPORTS
+
+EnumSystemFirmwareTables@12
+GetNativeSystemInfo@4
+GetOsSafeBootMode@4
+GetProductInfo@20
+GetSystemFirmwareTable@16
+GetSystemTimePreciseAsFileTime@4
+SetComputerNameExW@8
+SetSystemTime@4
+VerSetConditionMask@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..c643e8add4
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-0_windowsapp.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-0
+
+EXPORTS
+
+EnumSystemFirmwareTables@12
+GetNativeSystemInfo@4
+GetProductInfo@20
+GetSystemFirmwareTable@16
+GetSystemTimePreciseAsFileTime@4
+SetSystemTime@4
+VerSetConditionMask@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-1.def
new file mode 100644
index 0000000000..e562fba94f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-1
+
+EXPORTS
+
+DnsHostnameToComputerNameExW@12
+GetPhysicallyInstalledSystemMemory@4
+InstallELAMCertificateInfo@4
+SetComputerNameEx2W@12
+SetSystemTimeAdjustment@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-1_windowsapp.def
new file mode 100644
index 0000000000..bd0a32dac6
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-1
+
+EXPORTS
+
+GetPhysicallyInstalledSystemMemory@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-2.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-2.def
new file mode 100644
index 0000000000..b582686ae6
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-2
+
+EXPORTS
+
+GetProcessorSystemCycleTime@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-3.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-3.def
new file mode 100644
index 0000000000..dae94b6178
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-3.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-3
+
+EXPORTS
+
+GetIntegratedDisplaySize@4
+GetOsManufacturingMode@4
+SetComputerNameA@4
+SetComputerNameExA@8
+SetComputerNameW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-3_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-3_windowsapp.def
new file mode 100644
index 0000000000..e4d591fdde
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-3_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-3
+
+EXPORTS
+
+GetIntegratedDisplaySize@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-4.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-4.def
new file mode 100644
index 0000000000..a0592911ac
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-4.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-4
+
+EXPORTS
+
+GetSystemTimeAdjustmentPrecise@12
+SetSystemTimeAdjustmentPrecise@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-5.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-5.def
new file mode 100644
index 0000000000..a52085fd67
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-5.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-5
+
+EXPORTS
+
+GetSystemLeapSecondInformation@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-6.def b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-6.def
new file mode 100644
index 0000000000..c557c61320
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-sysinfo-l1-2-6.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-sysinfo-l1-2-6
+
+EXPORTS
+
+IsUserCetAvailableInEnvironment@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-0.def
new file mode 100644
index 0000000000..0ac36c84f3
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-systemtopology-l1-1-0
+
+EXPORTS
+
+GetNumaHighestNodeNumber@4
+GetNumaNodeProcessorMaskEx@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..e7b05a0575
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-systemtopology-l1-1-0
+
+EXPORTS
+
+GetNumaHighestNodeNumber@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-1.def
new file mode 100644
index 0000000000..1dd7495a1f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-systemtopology-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-systemtopology-l1-1-1
+
+EXPORTS
+
+GetNumaProximityNodeEx@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-threadpool-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-core-threadpool-l1-2-0.def
new file mode 100644
index 0000000000..eefee0a521
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-threadpool-l1-2-0.def
@@ -0,0 +1,41 @@
+LIBRARY api-ms-win-core-threadpool-l1-2-0
+
+EXPORTS
+
+CallbackMayRunLong@4
+CancelThreadpoolIo@4
+CloseThreadpool@4
+CloseThreadpoolCleanupGroup@4
+CloseThreadpoolCleanupGroupMembers@12
+CloseThreadpoolIo@4
+CloseThreadpoolTimer@4
+CloseThreadpoolWait@4
+CloseThreadpoolWork@4
+CreateThreadpool@4
+CreateThreadpoolCleanupGroup@0
+CreateThreadpoolIo@16
+CreateThreadpoolTimer@12
+CreateThreadpoolWait@12
+CreateThreadpoolWork@12
+DisassociateCurrentThreadFromCallback@4
+FreeLibraryWhenCallbackReturns@8
+IsThreadpoolTimerSet@4
+LeaveCriticalSectionWhenCallbackReturns@8
+QueryThreadpoolStackInformation@8
+ReleaseMutexWhenCallbackReturns@8
+ReleaseSemaphoreWhenCallbackReturns@12
+SetEventWhenCallbackReturns@8
+SetThreadpoolStackInformation@8
+SetThreadpoolThreadMaximum@8
+SetThreadpoolThreadMinimum@8
+SetThreadpoolTimer@16
+SetThreadpoolTimerEx@16
+SetThreadpoolWait@12
+SetThreadpoolWaitEx@16
+StartThreadpoolIo@4
+SubmitThreadpoolWork@4
+TrySubmitThreadpoolCallback@12
+WaitForThreadpoolIoCallbacks@8
+WaitForThreadpoolTimerCallbacks@8
+WaitForThreadpoolWaitCallbacks@8
+WaitForThreadpoolWorkCallbacks@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-threadpool-legacy-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-threadpool-legacy-l1-1-0.def
new file mode 100644
index 0000000000..790b49a27e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-threadpool-legacy-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-threadpool-legacy-l1-1-0
+
+EXPORTS
+
+ChangeTimerQueueTimer@16
+CreateTimerQueue@0
+CreateTimerQueueTimer@28
+DeleteTimerQueueEx@8
+DeleteTimerQueueTimer@12
+QueueUserWorkItem@12
+UnregisterWaitEx@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-timezone-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-timezone-l1-1-0.def
new file mode 100644
index 0000000000..dd6232bc04
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-timezone-l1-1-0.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-core-timezone-l1-1-0
+
+EXPORTS
+
+EnumDynamicTimeZoneInformation@8
+FileTimeToSystemTime@8
+GetDynamicTimeZoneInformation@4
+GetDynamicTimeZoneInformationEffectiveYears@12
+GetTimeZoneInformation@4
+GetTimeZoneInformationForYear@12
+SetDynamicTimeZoneInformation@4
+SetTimeZoneInformation@4
+SystemTimeToFileTime@8
+SystemTimeToTzSpecificLocalTime@12
+SystemTimeToTzSpecificLocalTimeEx@12
+TzSpecificLocalTimeToSystemTime@12
+TzSpecificLocalTimeToSystemTimeEx@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-timezone-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-timezone-l1-1-1.def
new file mode 100644
index 0000000000..852fc7ea21
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-timezone-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-timezone-l1-1-1
+
+EXPORTS
+
+LocalFileTimeToLocalSystemTime@12
+LocalSystemTimeToLocalFileTime@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-0.def
new file mode 100644
index 0000000000..d8b4e914e0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-core-toolhelp-l1-1-0
+
+EXPORTS
+
+CreateToolhelp32Snapshot@8
+Module32FirstW@8
+Module32NextW@8
+Process32FirstW@8
+Process32NextW@8
+Thread32First@8
+Thread32Next@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..f517d9c881
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-toolhelp-l1-1-0
+
+EXPORTS
+
+CreateToolhelp32Snapshot@8
+Process32FirstW@8
+Process32NextW@8
+Thread32First@8
+Thread32Next@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-1.def
new file mode 100644
index 0000000000..b099e3746c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-toolhelp-l1-1-1.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-toolhelp-l1-1-1
+
+EXPORTS
+
+Heap32First@12
+Heap32ListFirst@8
+Heap32ListNext@8
+Heap32Next@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-url-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-url-l1-1-0.def
new file mode 100644
index 0000000000..db7a5fab5c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-url-l1-1-0.def
@@ -0,0 +1,42 @@
+LIBRARY api-ms-win-core-url-l1-1-0
+
+EXPORTS
+
+GetAcceptLanguagesA@8
+GetAcceptLanguagesW@8
+HashData@16
+IsInternetESCEnabled@0
+ParseURLA@8
+ParseURLW@8
+PathCreateFromUrlA@16
+PathCreateFromUrlAlloc@12
+PathCreateFromUrlW@16
+PathIsURLA@4
+PathIsURLW@4
+UrlApplySchemeA@16
+UrlApplySchemeW@16
+UrlCanonicalizeA@16
+UrlCanonicalizeW@16
+UrlCombineA@20
+UrlCombineW@20
+UrlCompareA@12
+UrlCompareW@12
+UrlCreateFromPathA@16
+UrlCreateFromPathW@16
+UrlEscapeA@16
+UrlEscapeW@16
+UrlFixupW@12
+UrlGetLocationA@4
+UrlGetLocationW@4
+UrlGetPartA@20
+UrlGetPartW@20
+UrlHashA@12
+UrlHashW@12
+UrlIsA@8
+UrlIsNoHistoryA@4
+UrlIsNoHistoryW@4
+UrlIsOpaqueA@4
+UrlIsOpaqueW@4
+UrlIsW@8
+UrlUnescapeA@16
+UrlUnescapeW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-url-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-url-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..499f85aa51
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-url-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-url-l1-1-0
+
+EXPORTS
+
+GetAcceptLanguagesA@8
+GetAcceptLanguagesW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-util-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-util-l1-1-0.def
new file mode 100644
index 0000000000..3273cb5382
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-util-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-core-util-l1-1-0
+
+EXPORTS
+
+Beep@8
+DecodePointer@4
+DecodeSystemPointer@4
+EncodePointer@4
+EncodeSystemPointer@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-util-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-util-l1-1-1.def
new file mode 100644
index 0000000000..1be3bbb93b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-util-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-util-l1-1-1
+
+EXPORTS
+
+DecodeRemotePointer@12
+EncodeRemotePointer@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-0.def
new file mode 100644
index 0000000000..f587fa2784
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-version-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExW@20
+GetFileVersionInfoSizeExW@12
+VerFindFileW@32
+VerQueryValueW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..25da2beac2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-version-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExW@20
+GetFileVersionInfoSizeExW@12
+VerQueryValueW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-1.def
new file mode 100644
index 0000000000..b27ef28201
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-version-l1-1-1
+
+EXPORTS
+
+GetFileVersionInfoSizeW@8
+GetFileVersionInfoW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..ecb7dee976
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-version-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-version-l1-1-1
+
+EXPORTS
+
+GetFileVersionInfoW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-0.def
new file mode 100644
index 0000000000..4fef09a10e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-versionansi-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExA@20
+GetFileVersionInfoSizeExA@12
+VerFindFileA@32
+VerQueryValueA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..03c7ec7b3b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-0_windowsapp.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-versionansi-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExA@20
+GetFileVersionInfoSizeExA@12
+VerQueryValueA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-1.def
new file mode 100644
index 0000000000..f44a4efd0f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-versionansi-l1-1-1
+
+EXPORTS
+
+GetFileVersionInfoA@16
+GetFileVersionInfoSizeA@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..cc51a4f69e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-versionansi-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-versionansi-l1-1-1
+
+EXPORTS
+
+GetFileVersionInfoA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-windowsceip-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-windowsceip-l1-1-0.def
new file mode 100644
index 0000000000..305e9c0919
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-windowsceip-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-windowsceip-l1-1-0
+
+EXPORTS
+
+CeipIsOptedIn@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-0.def
new file mode 100644
index 0000000000..ea9ad8b534
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-0
+
+EXPORTS
+
+GetApplicationRecoveryCallback@20
+GetApplicationRestartSettings@16
+WerGetFlags@8
+WerpNotifyLoadStringResource@16
+WerpNotifyUseStringResource@4
+WerRegisterFile@12
+WerRegisterMemoryBlock@8
+WerRegisterRuntimeExceptionModule@8
+WerSetFlags@4
+WerUnregisterFile@4
+WerUnregisterMemoryBlock@4
+WerUnregisterRuntimeExceptionModule@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..539c540755
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-0
+
+EXPORTS
+
+WerRegisterFile@12
+WerRegisterMemoryBlock@8
+WerUnregisterFile@4
+WerUnregisterMemoryBlock@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-1.def
new file mode 100644
index 0000000000..f5360a5e22
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-1.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-1
+
+EXPORTS
+
+WerRegisterAdditionalProcess@8
+WerRegisterCustomMetadata@8
+WerRegisterExcludedMemoryBlock@8
+WerUnregisterAdditionalProcess@4
+WerUnregisterCustomMetadata@4
+WerUnregisterExcludedMemoryBlock@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-2.def
new file mode 100644
index 0000000000..d2fb7c096d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-2
+
+EXPORTS
+
+WerRegisterAppLocalDump@4
+WerUnregisterAppLocalDump@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-3.def
new file mode 100644
index 0000000000..32fcc923e7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-windowserrorreporting-l1-1-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-windowserrorreporting-l1-1-3
+
+EXPORTS
+
+RegisterApplicationRestart@8
+UnregisterApplicationRestart@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-0.def
new file mode 100644
index 0000000000..a5a341d225
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-core-winrt-error-l1-1-0
+
+EXPORTS
+
+GetRestrictedErrorInfo@4
+RoCaptureErrorContext@4
+RoFailFastWithErrorContext@4
+RoGetErrorReportingFlags@4
+RoOriginateError@8
+RoOriginateErrorW@12
+RoResolveRestrictedErrorInfoReference@8
+RoSetErrorReportingFlags@4
+RoTransformError@12
+RoTransformErrorW@16
+SetRestrictedErrorInfo@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..2a52414c2a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-0_windowsapp.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-core-winrt-error-l1-1-0
+
+EXPORTS
+
+GetRestrictedErrorInfo@4
+RoCaptureErrorContext@4
+RoFailFastWithErrorContext@4
+RoGetErrorReportingFlags@4
+RoOriginateError@8
+RoOriginateErrorW@12
+RoSetErrorReportingFlags@4
+RoTransformError@12
+RoTransformErrorW@16
+SetRestrictedErrorInfo@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-1.def
new file mode 100644
index 0000000000..a28ad3bf9a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-1.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-winrt-error-l1-1-1
+
+EXPORTS
+
+IsErrorPropagationEnabled@0
+RoClearError@0
+RoGetMatchingRestrictedErrorInfo@8
+RoInspectCapturedStackBackTrace@24
+RoInspectThreadErrorInfo@20
+RoOriginateLanguageException@12
+RoReportFailedDelegate@8
+RoReportUnhandledError@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..e7dd08c7c6
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-error-l1-1-1_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-winrt-error-l1-1-1
+
+EXPORTS
+
+IsErrorPropagationEnabled@0
+RoClearError@0
+RoGetMatchingRestrictedErrorInfo@8
+RoOriginateLanguageException@12
+RoReportFailedDelegate@8
+RoReportUnhandledError@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-l1-1-0.def
new file mode 100644
index 0000000000..5cafea3384
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-l1-1-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-core-winrt-l1-1-0
+
+EXPORTS
+
+RoActivateInstance@8
+RoGetActivationFactory@12
+RoGetApartmentIdentifier@4
+RoInitialize@4
+RoRegisterActivationFactories@16
+RoRegisterForApartmentShutdown@12
+RoRevokeActivationFactories@4
+RoUninitialize@0
+RoUnregisterForApartmentShutdown@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-registration-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-registration-l1-1-0.def
new file mode 100644
index 0000000000..7e9cbf3921
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-registration-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-winrt-registration-l1-1-0
+
+EXPORTS
+
+RoGetActivatableClassRegistration@8
+RoGetServerActivatableClasses@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-robuffer-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-robuffer-l1-1-0.def
new file mode 100644
index 0000000000..c0a4a12043
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-robuffer-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-winrt-robuffer-l1-1-0
+
+EXPORTS
+
+RoGetBufferMarshaler@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-roparameterizediid-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-roparameterizediid-l1-1-0.def
new file mode 100644
index 0000000000..bf1217cd75
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-roparameterizediid-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-winrt-roparameterizediid-l1-1-0
+
+EXPORTS
+
+RoFreeParameterizedTypeExtra@4
+RoGetParameterizedTypeInstanceIID@20
+RoParameterizedTypeExtraGetTypeSignature@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-0.def
new file mode 100644
index 0000000000..f12ed49474
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-0.def
@@ -0,0 +1,27 @@
+LIBRARY api-ms-win-core-winrt-string-l1-1-0
+
+EXPORTS
+
+HSTRING_UserFree@8
+HSTRING_UserMarshal@12
+HSTRING_UserSize@12
+HSTRING_UserUnmarshal@12
+WindowsCompareStringOrdinal@12
+WindowsConcatString@12
+WindowsCreateString@12
+WindowsCreateStringReference@16
+WindowsDeleteString@4
+WindowsDeleteStringBuffer@4
+WindowsDuplicateString@8
+WindowsGetStringLen@4
+WindowsGetStringRawBuffer@8
+WindowsInspectString@24
+WindowsIsStringEmpty@4
+WindowsPreallocateStringBuffer@12
+WindowsPromoteStringBuffer@8
+WindowsReplaceString@16
+WindowsStringHasEmbeddedNull@8
+WindowsSubstring@12
+WindowsSubstringWithSpecifiedLength@16
+WindowsTrimStringEnd@12
+WindowsTrimStringStart@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..ed2748f446
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-0_windowsapp.def
@@ -0,0 +1,26 @@
+LIBRARY api-ms-win-core-winrt-string-l1-1-0
+
+EXPORTS
+
+HSTRING_UserFree@8
+HSTRING_UserMarshal@12
+HSTRING_UserSize@12
+HSTRING_UserUnmarshal@12
+WindowsCompareStringOrdinal@12
+WindowsConcatString@12
+WindowsCreateString@12
+WindowsCreateStringReference@16
+WindowsDeleteString@4
+WindowsDeleteStringBuffer@4
+WindowsDuplicateString@8
+WindowsGetStringLen@4
+WindowsGetStringRawBuffer@8
+WindowsIsStringEmpty@4
+WindowsPreallocateStringBuffer@12
+WindowsPromoteStringBuffer@8
+WindowsReplaceString@16
+WindowsStringHasEmbeddedNull@8
+WindowsSubstring@12
+WindowsSubstringWithSpecifiedLength@16
+WindowsTrimStringEnd@12
+WindowsTrimStringStart@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-1.def
new file mode 100644
index 0000000000..221dbc1fd5
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-winrt-string-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-winrt-string-l1-1-1
+
+EXPORTS
+
+WindowsInspectString2@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-0.def
new file mode 100644
index 0000000000..f5093b8f8b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-wow64-l1-1-0
+
+EXPORTS
+
+IsWow64Process@8
+Wow64DisableWow64FsRedirection@4
+Wow64RevertWow64FsRedirection@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..ffa5fd3d84
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-wow64-l1-1-0
+
+EXPORTS
+
+IsWow64Process@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-1.def
new file mode 100644
index 0000000000..1ded20bc72
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-1.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-wow64-l1-1-1
+
+EXPORTS
+
+GetSystemWow64Directory2A@12
+GetSystemWow64Directory2W@12
+GetSystemWow64DirectoryA@8
+GetSystemWow64DirectoryW@8
+IsWow64Process2@12
+Wow64SetThreadDefaultGuestMachine@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..e15181734b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-1_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-wow64-l1-1-1
+
+EXPORTS
+
+IsWow64Process2@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-2.def
new file mode 100644
index 0000000000..bf720d058a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-wow64-l1-1-2
+
+EXPORTS
+
+IsWow64GuestMachineSupported@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-3.def
new file mode 100644
index 0000000000..8f3937ec4a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-wow64-l1-1-3.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-core-wow64-l1-1-3
+
+EXPORTS
+
+Wow64GetThreadContext@8
+Wow64SetThreadContext@8
+Wow64SuspendThread@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-0.def
new file mode 100644
index 0000000000..3155a9ac90
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-core-xstate-l1-1-0
+
+EXPORTS
+
+RtlCopyExtendedContext@12
+RtlGetEnabledExtendedFeatures@8
+RtlGetExtendedContextLength@8
+RtlGetExtendedFeaturesMask@4
+RtlInitializeExtendedContext@12
+RtlLocateExtendedFeature@12
+RtlLocateLegacyContext@8
+RtlSetExtendedFeaturesMask@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-1.def
new file mode 100644
index 0000000000..e6d6f05ba6
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-xstate-l1-1-1
+
+EXPORTS
+
+RtlCopyContext@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-2.def
new file mode 100644
index 0000000000..c8f1bfd5e8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-xstate-l1-1-2
+
+EXPORTS
+
+RtlLocateExtendedFeature2@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-3.def
new file mode 100644
index 0000000000..c40f671292
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l1-1-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-core-xstate-l1-1-3
+
+EXPORTS
+
+RtlGetExtendedContextLength2@16
+RtlInitializeExtendedContext2@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-0.def
new file mode 100644
index 0000000000..9e092fe233
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-core-xstate-l2-1-0
+
+EXPORTS
+
+CopyContext@12
+GetEnabledXStateFeatures@0
+GetXStateFeaturesMask@8
+InitializeContext@16
+LocateXStateFeature@12
+SetXStateFeaturesMask@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..e961c9e9e3
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-core-xstate-l2-1-0
+
+EXPORTS
+
+GetEnabledXStateFeatures@0
+GetXStateFeaturesMask@8
+InitializeContext@16
+LocateXStateFeature@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-1.def b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-1.def
new file mode 100644
index 0000000000..da303a52e0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-core-xstate-l2-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-core-xstate-l2-1-1
+
+EXPORTS
+
+InitializeContext2@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-1.def
new file mode 100644
index 0000000000..577e27e6f8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-1.def
@@ -0,0 +1,43 @@
+LIBRARY api-ms-win-devices-config-l1-1-1
+
+EXPORTS
+
+CM_Delete_Class_Key@8
+CM_Delete_Device_Interface_KeyW@8
+CM_Delete_DevNode_Key@12
+CM_Disable_DevNode@8
+CM_Enable_DevNode@8
+CM_Get_Child@12
+CM_Get_Class_Property_Keys@16
+CM_Get_Class_PropertyW@24
+CM_Get_Class_Registry_PropertyW@28
+CM_Get_Depth@12
+CM_Get_Device_ID_List_SizeW@12
+CM_Get_Device_ID_ListW@16
+CM_Get_Device_ID_Size@12
+CM_Get_Device_IDW@16
+CM_Get_Device_Interface_List_SizeW@16
+CM_Get_Device_Interface_ListW@20
+CM_Get_Device_Interface_Property_KeysW@16
+CM_Get_Device_Interface_PropertyW@24
+CM_Get_DevNode_Property_Keys@16
+CM_Get_DevNode_PropertyW@24
+CM_Get_DevNode_Registry_PropertyW@24
+CM_Get_DevNode_Status@16
+CM_Get_Parent@12
+CM_Get_Sibling@12
+CM_Locate_DevNodeW@12
+CM_MapCrToWin32Err@8
+CM_Open_Class_KeyW@24
+CM_Open_Device_Interface_KeyW@20
+CM_Open_DevNode_Key@24
+CM_Query_And_Remove_SubTreeW@20
+CM_Register_Notification@16
+CM_Set_Class_PropertyW@24
+CM_Set_Class_Registry_PropertyW@24
+CM_Set_Device_Interface_PropertyW@24
+CM_Set_DevNode_PropertyW@24
+CM_Set_DevNode_Registry_PropertyW@20
+CM_Setup_DevNode@8
+CM_Uninstall_DevNode@8
+CM_Unregister_Notification@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-1_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-1_windowsapp.def
new file mode 100644
index 0000000000..27ce5557de
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-1_windowsapp.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-devices-config-l1-1-1
+
+EXPORTS
+
+CM_Get_Device_ID_List_SizeW@12
+CM_Get_Device_ID_ListW@16
+CM_Get_Device_IDW@16
+CM_Get_Device_Interface_List_SizeW@16
+CM_Get_Device_Interface_ListW@20
+CM_Get_Device_Interface_PropertyW@24
+CM_Get_DevNode_PropertyW@24
+CM_Get_DevNode_Status@16
+CM_Get_Parent@12
+CM_Locate_DevNodeW@12
+CM_MapCrToWin32Err@8
+CM_Register_Notification@16
+CM_Unregister_Notification@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-2.def
new file mode 100644
index 0000000000..2865f49b40
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-2.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-devices-config-l1-1-2
+
+EXPORTS
+
+CM_Delete_Device_Interface_KeyA@8
+CM_Get_Class_Registry_PropertyA@28
+CM_Get_Device_ID_List_SizeA@12
+CM_Get_Device_ID_ListA@16
+CM_Get_Device_IDA@16
+CM_Get_Device_Interface_List_SizeA@16
+CM_Get_Device_Interface_ListA@20
+CM_Get_DevNode_Registry_PropertyA@24
+CM_Locate_DevNodeA@12
+CM_Open_Class_KeyA@24
+CM_Open_Device_Interface_KeyA@20
+CM_Query_And_Remove_SubTreeA@20
+CM_Set_Class_Registry_PropertyA@24
+CM_Set_DevNode_Registry_PropertyA@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-2_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-2_windowsapp.def
new file mode 100644
index 0000000000..e6b1c86294
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-config-l1-1-2_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-devices-config-l1-1-2
+
+EXPORTS
+
+CM_Get_Device_Interface_List_SizeA@16
+CM_Get_Device_Interface_ListA@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-0.def
new file mode 100644
index 0000000000..e5fb3e5b22
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-devices-query-l1-1-0
+
+EXPORTS
+
+DevCloseObjectQuery@4
+DevCreateObjectQuery@36
+DevCreateObjectQueryFromId@40
+DevCreateObjectQueryFromIds@40
+DevFindProperty@20
+DevFreeObjectProperties@8
+DevFreeObjects@8
+DevGetObjectProperties@28
+DevGetObjects@32
+DevSetObjectProperties@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..96f92c79c9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-0_windowsapp.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-devices-query-l1-1-0
+
+EXPORTS
+
+DevCloseObjectQuery@4
+DevCreateObjectQuery@36
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-1.def
new file mode 100644
index 0000000000..b8c745d60c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-query-l1-1-1.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-devices-query-l1-1-1
+
+EXPORTS
+
+DevCreateObjectQueryEx@44
+DevCreateObjectQueryFromIdEx@48
+DevCreateObjectQueryFromIdsEx@48
+DevGetObjectPropertiesEx@36
+DevGetObjectsEx@40
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-swdevice-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-devices-swdevice-l1-1-0.def
new file mode 100644
index 0000000000..cf618b6788
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-swdevice-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-devices-swdevice-l1-1-0
+
+EXPORTS
+
+SwDeviceClose@4
+SwDeviceCreate@32
+SwDeviceInterfacePropertySet@16
+SwDeviceInterfaceRegister@28
+SwDeviceInterfaceSetState@12
+SwDevicePropertySet@12
+SwMemFree@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-devices-swdevice-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-devices-swdevice-l1-1-1.def
new file mode 100644
index 0000000000..68a2a69433
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-devices-swdevice-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-devices-swdevice-l1-1-1
+
+EXPORTS
+
+SwDeviceGetLifetime@8
+SwDeviceSetLifetime@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-advapi32-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-advapi32-l1-1-0.def
new file mode 100644
index 0000000000..1937c1bb53
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-advapi32-l1-1-0.def
@@ -0,0 +1,164 @@
+LIBRARY api-ms-win-downlevel-advapi32-l1-1-0
+
+EXPORTS
+
+AccessCheck@32
+AccessCheckAndAuditAlarmW@44
+AccessCheckByType@44
+AccessCheckByTypeAndAuditAlarmW@64
+AccessCheckByTypeResultList@44
+AccessCheckByTypeResultListAndAuditAlarmByHandleW@68
+AccessCheckByTypeResultListAndAuditAlarmW@64
+AddAccessAllowedAce@16
+AddAccessAllowedAceEx@20
+AddAccessAllowedObjectAce@28
+AddAccessDeniedAce@16
+AddAccessDeniedAceEx@20
+AddAccessDeniedObjectAce@28
+AddAce@20
+AddAuditAccessAce@24
+AddAuditAccessAceEx@28
+AddAuditAccessObjectAce@36
+AddMandatoryAce@20
+AdjustTokenGroups@24
+AdjustTokenPrivileges@24
+AllocateAndInitializeSid@44
+AllocateLocallyUniqueId@4
+AreAllAccessesGranted@8
+AreAnyAccessesGranted@8
+CheckTokenMembership@12
+ConvertToAutoInheritPrivateObjectSecurity@24
+CopySid@12
+CreatePrivateObjectSecurity@24
+CreatePrivateObjectSecurityEx@32
+CreatePrivateObjectSecurityWithMultipleInheritance@36
+CreateProcessAsUserW@44
+CreateRestrictedToken@36
+CreateWellKnownSid@16
+DeleteAce@8
+DestroyPrivateObjectSecurity@4
+DuplicateToken@12
+DuplicateTokenEx@24
+EqualDomainSid@12
+EqualPrefixSid@8
+EqualSid@8
+EventActivityIdControl@8
+EventEnabled@12
+EventProviderEnabled@20
+EventRegister@16
+EventUnregister@8
+EventWrite@20
+EventWriteEx@40
+EventWriteString@24
+EventWriteTransfer@28
+FindFirstFreeAce@8
+FreeSid@4
+GetAce@12
+GetAclInformation@16
+GetFileSecurityW@20
+GetKernelObjectSecurity@20
+GetLengthSid@4
+GetPrivateObjectSecurity@20
+GetSecurityDescriptorControl@12
+GetSecurityDescriptorDacl@16
+GetSecurityDescriptorGroup@12
+GetSecurityDescriptorLength@4
+GetSecurityDescriptorOwner@12
+GetSecurityDescriptorRMControl@8
+GetSecurityDescriptorSacl@16
+GetSidIdentifierAuthority@4
+GetSidLengthRequired@4
+GetSidSubAuthority@8
+GetSidSubAuthorityCount@4
+GetTokenInformation@20
+GetTraceEnableFlags@8
+GetTraceEnableLevel@8
+GetTraceLoggerHandle@4
+GetWindowsAccountDomainSid@12
+ImpersonateAnonymousToken@4
+ImpersonateLoggedOnUser@4
+ImpersonateNamedPipeClient@4
+ImpersonateSelf@4
+InitializeAcl@12
+InitializeSecurityDescriptor@8
+InitializeSid@12
+IsTokenRestricted@4
+IsValidAcl@4
+IsValidSecurityDescriptor@4
+IsValidSid@4
+IsWellKnownSid@8
+MakeAbsoluteSD@44
+MakeSelfRelativeSD@12
+MapGenericMask@8
+ObjectCloseAuditAlarmW@12
+ObjectDeleteAuditAlarmW@12
+ObjectOpenAuditAlarmW@48
+ObjectPrivilegeAuditAlarmW@24
+OpenProcessToken@12
+OpenThreadToken@16
+PrivilegeCheck@12
+PrivilegedServiceAuditAlarmW@20
+QuerySecurityAccessMask@8
+RegCloseKey@4
+RegCopyTreeW@12
+RegCreateKeyExA@36
+RegCreateKeyExW@36
+RegDeleteKeyExA@16
+RegDeleteKeyExW@16
+RegDeleteTreeA@8
+RegDeleteTreeW@8
+RegDeleteValueA@8
+RegDeleteValueW@8
+RegDisablePredefinedCacheEx@0
+RegEnumKeyExA@32
+RegEnumKeyExW@32
+RegEnumValueA@32
+RegEnumValueW@32
+RegFlushKey@4
+RegGetKeySecurity@16
+RegGetValueA@28
+RegGetValueW@28
+RegLoadAppKeyA@20
+RegLoadAppKeyW@20
+RegLoadKeyA@12
+RegLoadKeyW@12
+RegLoadMUIStringA@28
+RegLoadMUIStringW@28
+RegNotifyChangeKeyValue@20
+RegOpenCurrentUser@8
+RegOpenKeyExA@20
+RegOpenKeyExW@20
+RegOpenUserClassesRoot@16
+RegQueryInfoKeyA@48
+RegQueryInfoKeyW@48
+RegQueryValueExA@24
+RegQueryValueExW@24
+RegRestoreKeyA@12
+RegRestoreKeyW@12
+RegSaveKeyExA@16
+RegSaveKeyExW@16
+RegSetKeySecurity@12
+RegSetValueExA@24
+RegSetValueExW@24
+RegUnLoadKeyA@8
+RegUnLoadKeyW@8
+RegisterTraceGuidsW@32
+RevertToSelf@0
+SetAclInformation@16
+SetFileSecurityW@12
+SetKernelObjectSecurity@12
+SetPrivateObjectSecurity@20
+SetPrivateObjectSecurityEx@24
+SetSecurityAccessMask@8
+SetSecurityDescriptorControl@12
+SetSecurityDescriptorDacl@16
+SetSecurityDescriptorGroup@12
+SetSecurityDescriptorOwner@12
+SetSecurityDescriptorRMControl@8
+SetSecurityDescriptorSacl@16
+SetThreadToken@8
+SetTokenInformation@16
+TraceEvent@12
+TraceMessage
+TraceMessageVa@24
+UnregisterTraceGuids@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-advapi32-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-advapi32-l2-1-0.def
new file mode 100644
index 0000000000..6c142ce38c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-advapi32-l2-1-0.def
@@ -0,0 +1,92 @@
+LIBRARY api-ms-win-downlevel-advapi32-l2-1-0
+
+EXPORTS
+
+ChangeServiceConfig2A@12
+ChangeServiceConfig2W@12
+ChangeServiceConfigA@44
+ChangeServiceConfigW@44
+CloseServiceHandle@4
+CloseTrace@8
+ControlService@12
+ControlServiceExA@16
+ControlServiceExW@16
+ControlTraceA@20
+ControlTraceW@20
+ConvertSecurityDescriptorToStringSecurityDescriptorW@20
+ConvertSidToStringSidW@8
+ConvertStringSecurityDescriptorToSecurityDescriptorW@16
+ConvertStringSidToSidW@8
+CreateServiceA@52
+CreateServiceW@52
+CredDeleteA@12
+CredDeleteW@12
+CredEnumerateA@16
+CredEnumerateW@16
+CredFindBestCredentialA@16
+CredFindBestCredentialW@16
+CredFree@4
+CredGetSessionTypes@8
+CredGetTargetInfoA@12
+CredGetTargetInfoW@12
+CredIsMarshaledCredentialW@4
+CredIsProtectedA@8
+CredIsProtectedW@8
+CredMarshalCredentialA@12
+CredMarshalCredentialW@12
+CredProtectA@24
+CredProtectW@24
+CredReadA@16
+CredReadDomainCredentialsA@16
+CredReadDomainCredentialsW@16
+CredReadW@16
+CredUnmarshalCredentialA@12
+CredUnmarshalCredentialW@12
+CredUnprotectA@20
+CredUnprotectW@20
+CredWriteA@8
+CredWriteDomainCredentialsA@12
+CredWriteDomainCredentialsW@12
+CredWriteW@8
+DeleteService@4
+EnableTraceEx2@44
+EnumDependentServicesW@24
+EnumServicesStatusExW@40
+EnumerateTraceGuidsEx@24
+EventAccessControl@20
+EventAccessQuery@12
+EventAccessRemove@4
+NotifyServiceStatusChangeA@12
+NotifyServiceStatusChangeW@12
+OpenSCManagerA@12
+OpenSCManagerW@12
+OpenServiceA@12
+OpenServiceW@12
+OpenTraceW@4
+ProcessTrace@16
+QueryAllTracesA@12
+QueryAllTracesW@12
+QueryServiceConfig2A@20
+QueryServiceConfig2W@20
+QueryServiceConfigA@16
+QueryServiceConfigW@16
+QueryServiceObjectSecurity@20
+QueryServiceStatus@8
+QueryServiceStatusEx@20
+RegisterServiceCtrlHandlerA@8
+RegisterServiceCtrlHandlerExA@12
+RegisterServiceCtrlHandlerExW@12
+RegisterServiceCtrlHandlerW@8
+RegisterTraceGuidsA@32
+RemoveTraceCallback@4
+SetServiceObjectSecurity@12
+SetServiceStatus@8
+SetTraceCallback@8
+StartServiceA@12
+StartServiceCtrlDispatcherA@4
+StartServiceCtrlDispatcherW@4
+StartServiceW@12
+StartTraceA@12
+StartTraceW@12
+StopTraceW@16
+TraceSetInformation@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-normaliz-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-normaliz-l1-1-0.def
new file mode 100644
index 0000000000..044357a907
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-normaliz-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-downlevel-normaliz-l1-1-0
+
+EXPORTS
+
+IdnToAscii@20
+IdnToUnicode@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-ole32-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-ole32-l1-1-0.def
new file mode 100644
index 0000000000..73715a4ce9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-ole32-l1-1-0.def
@@ -0,0 +1,84 @@
+LIBRARY api-ms-win-downlevel-ole32-l1-1-0
+
+EXPORTS
+
+CLSIDFromProgID@8
+CLSIDFromString@8
+CoAddRefServerProcess@0
+CoCancelCall@8
+CoCopyProxy@8
+CoCreateFreeThreadedMarshaler@8
+CoCreateGuid@4
+CoCreateInstance@20
+CoCreateInstanceEx@24
+CoDisableCallCancellation@4
+CoDisconnectContext@4
+CoDisconnectObject@8
+CoEnableCallCancellation@4
+CoFreeUnusedLibraries@0
+CoFreeUnusedLibrariesEx@8
+CoGetApartmentType@8
+CoGetCallContext@8
+CoGetCallerTID@4
+CoGetCancelObject@12
+CoGetClassObject@20
+CoGetContextToken@4
+CoGetCurrentLogicalThreadId@4
+CoGetCurrentProcess@0
+CoGetDefaultContext@12
+CoGetInterfaceAndReleaseStream@12
+CoGetMalloc@8
+CoGetMarshalSizeMax@24
+CoGetObjectContext@8
+CoGetPSClsid@8
+CoGetStandardMarshal@24
+CoGetStdMarshalEx@12
+CoGetTreatAsClass@8
+CoImpersonateClient@0
+CoInitializeEx@8
+CoInitializeSecurity@36
+CoInvalidateRemoteMachineBindings@4
+CoIsHandlerConnected@4
+CoLockObjectExternal@12
+CoMarshalHresult@8
+CoMarshalInterThreadInterfaceInStream@12
+CoMarshalInterface@24
+CoQueryAuthenticationServices@8
+CoQueryClientBlanket@28
+CoQueryProxyBlanket@32
+CoRegisterClassObject@20
+CoRegisterInitializeSpy@8
+CoRegisterMessageFilter@8
+CoRegisterPSClsid@8
+CoRegisterSurrogate@4
+CoReleaseMarshalData@4
+CoReleaseServerProcess@0
+CoResumeClassObjects@0
+CoRevertToSelf@0
+CoRevokeClassObject@4
+CoRevokeInitializeSpy@8
+CoSetCancelObject@4
+CoSetProxyBlanket@32
+CoSuspendClassObjects@0
+CoSwitchCallContext@8
+CoTaskMemAlloc@4
+CoTaskMemFree@4
+CoTaskMemRealloc@8
+CoTestCancel@0
+CoUninitialize@0
+CoUnmarshalHresult@8
+CoUnmarshalInterface@12
+CoWaitForMultipleHandles@20
+CreateErrorInfo@4
+CreateStreamOnHGlobal@12
+FreePropVariantArray@8
+GetErrorInfo@8
+GetHGlobalFromStream@8
+IIDFromString@8
+ProgIDFromCLSID@8
+PropVariantClear@4
+PropVariantCopy@8
+SetErrorInfo@8
+StringFromCLSID@8
+StringFromGUID2@12
+StringFromIID@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-shell32-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-shell32-l1-1-0.def
new file mode 100644
index 0000000000..4fa14a3383
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-shell32-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-downlevel-shell32-l1-1-0
+
+EXPORTS
+
+CommandLineToArgvW@8
+GetCurrentProcessExplicitAppUserModelID@4
+SetCurrentProcessExplicitAppUserModelID@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-shlwapi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-shlwapi-l1-1-0.def
new file mode 100644
index 0000000000..12cbb0ad7c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-shlwapi-l1-1-0.def
@@ -0,0 +1,175 @@
+LIBRARY api-ms-win-downlevel-shlwapi-l1-1-0
+
+EXPORTS
+
+GetAcceptLanguagesW@8
+HashData@16
+IsCharSpaceA@4
+IsCharSpaceW@4
+IsInternetESCEnabled@0
+ParseURLW@8
+PathAddBackslashA@4
+PathAddBackslashW@4
+PathAddExtensionA@8
+PathAddExtensionW@8
+PathAppendA@8
+PathAppendW@8
+PathCanonicalizeA@8
+PathCanonicalizeW@8
+PathCombineA@12
+PathCombineW@12
+PathCommonPrefixA@12
+PathCommonPrefixW@12
+PathCreateFromUrlAlloc@12
+PathCreateFromUrlW@16
+PathFileExistsA@4
+PathFileExistsW@4
+PathFindExtensionA@4
+PathFindExtensionW@4
+PathFindFileNameA@4
+PathFindFileNameW@4
+PathFindNextComponentA@4
+PathFindNextComponentW@4
+PathGetArgsA@4
+PathGetArgsW@4
+PathGetCharTypeA@4
+PathGetCharTypeW@4
+PathGetDriveNumberA@4
+PathGetDriveNumberW@4
+PathIsFileSpecA@4
+PathIsFileSpecW@4
+PathIsLFNFileSpecA@4
+PathIsLFNFileSpecW@4
+PathIsPrefixA@8
+PathIsPrefixW@8
+PathIsRelativeA@4
+PathIsRelativeW@4
+PathIsRootA@4
+PathIsRootW@4
+PathIsSameRootA@8
+PathIsSameRootW@8
+PathIsUNCA@4
+PathIsUNCServerA@4
+PathIsUNCServerShareA@4
+PathIsUNCServerShareW@4
+PathIsUNCServerW@4
+PathIsUNCW@4
+PathIsURLW@4
+PathMatchSpecA@8
+PathMatchSpecExA@12
+PathMatchSpecExW@12
+PathMatchSpecW@8
+PathParseIconLocationA@4
+PathParseIconLocationW@4
+PathQuoteSpacesA@4
+PathQuoteSpacesW@4
+PathRelativePathToA@20
+PathRelativePathToW@20
+PathRemoveBackslashA@4
+PathRemoveBackslashW@4
+PathRemoveBlanksA@4
+PathRemoveBlanksW@4
+PathRemoveExtensionA@4
+PathRemoveExtensionW@4
+PathRemoveFileSpecA@4
+PathRemoveFileSpecW@4
+PathRenameExtensionA@8
+PathRenameExtensionW@8
+PathSearchAndQualifyA@12
+PathSearchAndQualifyW@12
+PathSkipRootA@4
+PathSkipRootW@4
+PathStripPathA@4
+PathStripPathW@4
+PathStripToRootA@4
+PathStripToRootW@4
+PathUnExpandEnvStringsA@12
+PathUnExpandEnvStringsW@12
+PathUnquoteSpacesA@4
+PathUnquoteSpacesW@4
+QISearch@16
+SHLoadIndirectString@16
+SHRegCloseUSKey@4
+SHRegDeleteUSValueA@12
+SHRegDeleteUSValueW@12
+SHRegEnumUSKeyA@20
+SHRegEnumUSKeyW@20
+SHRegGetBoolUSValueA@16
+SHRegGetBoolUSValueW@16
+SHRegGetUSValueA@32
+SHRegGetUSValueW@32
+SHRegOpenUSKeyA@20
+SHRegOpenUSKeyW@20
+SHRegQueryUSValueA@32
+SHRegQueryUSValueW@32
+SHRegSetUSValueA@24
+SHRegSetUSValueW@24
+StrCSpnA@8
+StrCSpnIA@8
+StrCSpnIW@8
+StrCSpnW@8
+StrCatBuffA@12
+StrCatBuffW@12
+StrCatChainW@16
+StrChrA@8
+StrChrIA@8
+StrChrIW@8
+StrChrNIW@12
+StrChrNW@12
+StrChrW@8
+StrCmpCA@8
+StrCmpCW@8
+StrCmpICA@8
+StrCmpICW@8
+StrCmpIW@8
+StrCmpLogicalW@8
+StrCmpNA@12
+StrCmpNCA@12
+StrCmpNCW@12
+StrCmpNIA@12
+StrCmpNICA@12
+StrCmpNICW@12
+StrCmpNIW@12
+StrCmpNW@12
+StrCmpW@8
+StrCpyNW@12
+StrDupA@4
+StrDupW@4
+StrIsIntlEqualA@16
+StrIsIntlEqualW@16
+StrPBrkA@8
+StrPBrkW@8
+StrRChrA@12
+StrRChrIA@12
+StrRChrIW@12
+StrRChrW@12
+StrRStrIA@12
+StrRStrIW@12
+StrSpnA@8
+StrSpnW@8
+StrStrA@8
+StrStrIA@8
+StrStrIW@8
+StrStrNIW@12
+StrStrNW@12
+StrStrW@8
+StrToInt64ExA@12
+StrToInt64ExW@12
+StrToIntA@4
+StrToIntExA@12
+StrToIntExW@12
+StrToIntW@4
+StrTrimA@8
+StrTrimW@8
+UrlApplySchemeW@16
+UrlCanonicalizeW@16
+UrlCombineA@20
+UrlCombineW@20
+UrlCreateFromPathW@16
+UrlEscapeW@16
+UrlFixupW@12
+UrlGetLocationW@4
+UrlGetPartW@20
+UrlIsW@8
+UrlUnescapeA@16
+UrlUnescapeW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-shlwapi-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-shlwapi-l2-1-0.def
new file mode 100644
index 0000000000..a16be65f19
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-shlwapi-l2-1-0.def
@@ -0,0 +1,65 @@
+LIBRARY api-ms-win-downlevel-shlwapi-l2-1-0
+
+EXPORTS
+
+IStream_Copy@12
+IStream_Read@12
+IStream_ReadStr@8
+IStream_Reset@4
+IStream_Size@8
+IStream_Write@12
+IStream_WriteStr@8
+IUnknown_AtomicRelease@4
+IUnknown_GetSite@12
+IUnknown_QueryService@16
+IUnknown_Set@8
+IUnknown_SetSite@8
+IsOS@4
+SHAnsiToAnsi@12
+SHAnsiToUnicode@12
+SHCopyKeyA@16
+SHCopyKeyW@16
+SHCreateMemStream@8
+SHCreateStreamOnFileA@12
+SHCreateStreamOnFileEx@24
+SHCreateStreamOnFileW@12
+SHCreateThread@16
+SHCreateThreadRef@8
+SHCreateThreadWithHandle@20
+SHDeleteEmptyKeyA@8
+SHDeleteEmptyKeyW@8
+SHDeleteKeyA@8
+SHDeleteKeyW@8
+SHDeleteValueA@12
+SHDeleteValueW@12
+SHEnumKeyExA@16
+SHEnumKeyExW@16
+SHEnumValueA@28
+SHEnumValueW@28
+SHGetThreadRef@4
+SHGetValueA@24
+SHGetValueW@24
+SHOpenRegStream2A@16
+SHOpenRegStream2W@16
+SHOpenRegStreamA@16
+SHOpenRegStreamW@16
+SHQueryInfoKeyA@20
+SHQueryInfoKeyW@20
+SHQueryValueExA@24
+SHQueryValueExW@24
+SHRegDuplicateHKey@4
+SHRegGetIntW@12
+SHRegGetPathA@20
+SHRegGetPathW@20
+SHRegGetValueA@28
+SHRegGetValueW@28
+SHRegSetPathA@20
+SHRegSetPathW@20
+SHReleaseThreadRef@0
+SHSetThreadRef@4
+SHSetValueA@24
+SHSetValueW@24
+SHStrDupA@8
+SHStrDupW@8
+SHUnicodeToAnsi@12
+SHUnicodeToUnicode@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-user32-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-user32-l1-1-0.def
new file mode 100644
index 0000000000..ced28b30bf
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-user32-l1-1-0.def
@@ -0,0 +1,28 @@
+LIBRARY api-ms-win-downlevel-user32-l1-1-0
+
+EXPORTS
+
+CharLowerA@4
+CharLowerBuffA@8
+CharLowerBuffW@8
+CharLowerW@4
+CharNextA@4
+CharNextExA@12
+CharNextW@4
+CharPrevA@8
+CharPrevExA@16
+CharPrevW@8
+CharUpperA@4
+CharUpperBuffA@8
+CharUpperBuffW@8
+CharUpperW@4
+IsCharAlphaA@4
+IsCharAlphaNumericA@4
+IsCharAlphaNumericW@4
+IsCharAlphaW@4
+IsCharLowerA@4
+IsCharLowerW@4
+IsCharUpperA@4
+IsCharUpperW@4
+LoadStringA@16
+LoadStringW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-downlevel-version-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-downlevel-version-l1-1-0.def
new file mode 100644
index 0000000000..964eec49d4
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-downlevel-version-l1-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-downlevel-version-l1-1-0
+
+EXPORTS
+
+GetFileVersionInfoExW@20
+GetFileVersionInfoSizeExW@12
+VerFindFileA@32
+VerFindFileW@32
+VerQueryValueA@16
+VerQueryValueW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-classicprovider-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-eventing-classicprovider-l1-1-0.def
new file mode 100644
index 0000000000..9b9e7f5080
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-classicprovider-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-eventing-classicprovider-l1-1-0
+
+EXPORTS
+
+GetTraceEnableFlags@8
+GetTraceEnableLevel@8
+GetTraceLoggerHandle@4
+RegisterTraceGuidsW@32
+TraceEvent@12
+TraceMessage
+TraceMessageVa@24
+UnregisterTraceGuids@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-classicprovider-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-eventing-classicprovider-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..181a8ff2fe
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-classicprovider-l1-1-0_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-eventing-classicprovider-l1-1-0
+
+EXPORTS
+
+GetTraceEnableFlags@8
+GetTraceEnableLevel@8
+GetTraceLoggerHandle@4
+RegisterTraceGuidsW@32
+TraceMessage
+UnregisterTraceGuids@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-consumer-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-eventing-consumer-l1-1-0.def
new file mode 100644
index 0000000000..4cc6170ed3
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-consumer-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-eventing-consumer-l1-1-0
+
+EXPORTS
+
+CloseTrace@8
+OpenTraceW@4
+ProcessTrace@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-consumer-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-eventing-consumer-l1-1-1.def
new file mode 100644
index 0000000000..1294aaf212
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-consumer-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-eventing-consumer-l1-1-1
+
+EXPORTS
+
+QueryTraceProcessingHandle@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-controller-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-eventing-controller-l1-1-0.def
new file mode 100644
index 0000000000..e44c8db8c3
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-controller-l1-1-0.def
@@ -0,0 +1,15 @@
+LIBRARY api-ms-win-eventing-controller-l1-1-0
+
+EXPORTS
+
+ControlTraceW@20
+EnableTraceEx2@44
+EnumerateTraceGuidsEx@24
+EventAccessControl@20
+EventAccessQuery@12
+EventAccessRemove@4
+QueryAllTracesW@12
+StartTraceW@12
+StopTraceW@16
+TraceQueryInformation@24
+TraceSetInformation@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-controller-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-eventing-controller-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..01de00abb7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-controller-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-eventing-controller-l1-1-0
+
+EXPORTS
+
+ControlTraceW@20
+EnableTraceEx2@44
+EnumerateTraceGuidsEx@24
+StartTraceW@12
+StopTraceW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-legacy-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-eventing-legacy-l1-1-0.def
new file mode 100644
index 0000000000..64bcd73ebc
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-legacy-l1-1-0.def
@@ -0,0 +1,18 @@
+LIBRARY api-ms-win-eventing-legacy-l1-1-0
+
+EXPORTS
+
+ControlTraceA@20
+EnableTrace@24
+EnableTraceEx@48
+EnumerateTraceGuids@12
+FlushTraceA@16
+FlushTraceW@16
+OpenTraceA@4
+QueryAllTracesA@12
+QueryTraceA@16
+QueryTraceW@16
+StartTraceA@12
+StopTraceA@16
+UpdateTraceA@16
+UpdateTraceW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-legacy-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-eventing-legacy-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..c9533cf86c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-legacy-l1-1-0_windowsapp.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-eventing-legacy-l1-1-0
+
+EXPORTS
+
+ControlTraceA@20
+EnableTrace@24
+EnableTraceEx@48
+FlushTraceW@16
+OpenTraceA@4
+QueryTraceW@16
+StartTraceA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-obsolete-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-eventing-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..08d1f07460
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-obsolete-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-eventing-obsolete-l1-1-0
+
+EXPORTS
+
+RegisterTraceGuidsA@32
+RemoveTraceCallback@4
+SetTraceCallback@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-eventing-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..2041a5f332
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-eventing-obsolete-l1-1-0
+
+EXPORTS
+
+RegisterTraceGuidsA@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-provider-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-eventing-provider-l1-1-0.def
new file mode 100644
index 0000000000..6213ce74d0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-provider-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-eventing-provider-l1-1-0
+
+EXPORTS
+
+EventActivityIdControl@8
+EventEnabled@12
+EventProviderEnabled@20
+EventRegister@16
+EventSetInformation@20
+EventUnregister@8
+EventWrite@20
+EventWriteEx@40
+EventWriteString@24
+EventWriteTransfer@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-tdh-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-eventing-tdh-l1-1-0.def
new file mode 100644
index 0000000000..f9807bbd79
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-tdh-l1-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-eventing-tdh-l1-1-0
+
+EXPORTS
+
+TdhEnumerateManifestProviderEvents@12
+TdhEnumerateProviderFieldInformation@16
+TdhEnumerateProviders@8
+TdhFormatProperty@44
+TdhGetEventInformation@20
+TdhGetEventMapInformation@16
+TdhGetManifestEventInformation@16
+TdhGetProperty@28
+TdhGetPropertySize@24
+TdhLoadManifest@4
+TdhQueryProviderFieldInformation@24
+TdhUnloadManifest@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventing-tdh-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-eventing-tdh-l1-1-1.def
new file mode 100644
index 0000000000..c9768d3847
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventing-tdh-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-eventing-tdh-l1-1-1
+
+EXPORTS
+
+TdhLoadManifestFromMemory@8
+TdhUnloadManifestFromMemory@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-eventlog-legacy-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-eventlog-legacy-l1-1-0.def
new file mode 100644
index 0000000000..ff4265dad9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-eventlog-legacy-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-eventlog-legacy-l1-1-0
+
+EXPORTS
+
+DeregisterEventSource@4
+RegisterEventSourceW@8
+ReportEventW@36
diff --git a/lib/libc/mingw/lib32/api-ms-win-gaming-deviceinformation-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-gaming-deviceinformation-l1-1-0.def
new file mode 100644
index 0000000000..61b62dc5c9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-gaming-deviceinformation-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-gaming-deviceinformation-l1-1-0
+
+EXPORTS
+
+GetGamingDeviceModelInformation@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-gaming-expandedresources-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-gaming-expandedresources-l1-1-0.def
new file mode 100644
index 0000000000..b0cbea3d32
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-gaming-expandedresources-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-gaming-expandedresources-l1-1-0
+
+EXPORTS
+
+GetExpandedResourceExclusiveCpuCount@4
+HasExpandedResources@4
+ReleaseExclusiveCpuSets@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-0.def
new file mode 100644
index 0000000000..ba5e6d4065
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-0
+
+EXPORTS
+
+ProcessPendingGameUI@4
+ShowChangeFriendRelationshipUI@12
+ShowGameInviteUI@24
+ShowPlayerPickerUI@36
+ShowProfileCardUI@12
+ShowTitleAchievementsUI@12
+TryCancelPendingGameUI@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-1.def
new file mode 100644
index 0000000000..ccf305ff1c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-1
+
+EXPORTS
+
+CheckGamingPrivilegeSilently@16
+CheckGamingPrivilegeWithUI@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-2.def
new file mode 100644
index 0000000000..94e37da59b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-2.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-2
+
+EXPORTS
+
+CheckGamingPrivilegeSilentlyForUser@20
+CheckGamingPrivilegeWithUIForUser@28
+ShowChangeFriendRelationshipUIForUser@16
+ShowGameInviteUIForUser@28
+ShowPlayerPickerUIForUser@40
+ShowProfileCardUIForUser@16
+ShowTitleAchievementsUIForUser@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-3.def
new file mode 100644
index 0000000000..99e6856673
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-3.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-3
+
+EXPORTS
+
+ShowGameInviteUIWithContext@28
+ShowGameInviteUIWithContextForUser@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-4.def b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-4.def
new file mode 100644
index 0000000000..57c9104657
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-gaming-tcui-l1-1-4.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-gaming-tcui-l1-1-4
+
+EXPORTS
+
+ShowCustomizeUserProfileUI@8
+ShowCustomizeUserProfileUIForUser@12
+ShowFindFriendsUI@8
+ShowFindFriendsUIForUser@12
+ShowGameInfoUI@12
+ShowGameInfoUIForUser@16
+ShowUserSettingsUI@8
+ShowUserSettingsUIForUser@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-mm-time-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-mm-time-l1-1-0.def
new file mode 100644
index 0000000000..d6ade97e4e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-mm-time-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-mm-time-l1-1-0
+
+EXPORTS
+
+timeBeginPeriod@4
+timeEndPeriod@4
+timeGetDevCaps@8
+timeGetSystemTime@8
+timeGetTime@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-mm-time-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-mm-time-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..dab45e618f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-mm-time-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-mm-time-l1-1-0
+
+EXPORTS
+
+timeBeginPeriod@4
+timeEndPeriod@4
+timeGetDevCaps@8
+timeGetTime@0
diff --git a/lib/libc/mingw/lib32/api-ms-win-net-isolation-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-net-isolation-l1-1-0.def
new file mode 100644
index 0000000000..ff19fa3dc5
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-net-isolation-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-net-isolation-l1-1-0
+
+EXPORTS
+
+NetworkIsolationDiagnoseConnectFailureAndGetInfo@8
+NetworkIsolationEnumAppContainers@12
+NetworkIsolationFreeAppContainers@4
+NetworkIsolationGetAppContainerConfig@8
+NetworkIsolationRegisterForAppContainerChanges@16
+NetworkIsolationSetAppContainerConfig@8
+NetworkIsolationSetupAppContainerBinaries@28
+NetworkIsolationUnregisterForAppContainerChanges@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-net-isolation-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-net-isolation-l1-1-1.def
new file mode 100644
index 0000000000..dbe9e17554
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-net-isolation-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-net-isolation-l1-1-1
+
+EXPORTS
+
+NetworkIsolationDiagnoseConnectFailure@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-ntuser-sysparams-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-ntuser-sysparams-l1-1-0.def
new file mode 100644
index 0000000000..faccb5ca01
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-ntuser-sysparams-l1-1-0.def
@@ -0,0 +1,16 @@
+LIBRARY api-ms-win-ntuser-sysparams-l1-1-0
+
+EXPORTS
+
+ChangeDisplaySettingsExW@20
+DisplayConfigGetDeviceInfo@4
+DisplayConfigSetDeviceInfo@4
+EnumDisplayDevicesW@16
+EnumDisplayMonitors@16
+EnumDisplaySettingsExW@16
+EnumDisplaySettingsW@12
+GetDisplayConfigBufferSizes@12
+GetMonitorInfoW@8
+GetSystemMetrics@4
+QueryDisplayConfig@24
+SystemParametersInfoW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-ntuser-sysparams-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-ntuser-sysparams-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..993d30db53
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-ntuser-sysparams-l1-1-0_windowsapp.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-ntuser-sysparams-l1-1-0
+
+EXPORTS
+
+EnumDisplayDevicesW@16
+EnumDisplayMonitors@16
+EnumDisplaySettingsExW@16
+GetMonitorInfoW@8
+GetSystemMetrics@4
+SystemParametersInfoW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-oobe-notification-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-oobe-notification-l1-1-0.def
new file mode 100644
index 0000000000..ba5b512a38
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-oobe-notification-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-oobe-notification-l1-1-0
+
+EXPORTS
+
+OOBEComplete@4
+RegisterWaitUntilOOBECompleted@12
+UnregisterWaitUntilOOBECompleted@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-perf-legacy-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-perf-legacy-l1-1-0.def
new file mode 100644
index 0000000000..4048f0145b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-perf-legacy-l1-1-0.def
@@ -0,0 +1,13 @@
+LIBRARY api-ms-win-perf-legacy-l1-1-0
+
+EXPORTS
+
+PerfAddCounters@12
+PerfCloseQueryHandle@4
+PerfDeleteCounters@12
+PerfEnumerateCounterSet@16
+PerfEnumerateCounterSetInstances@20
+PerfOpenQueryHandle@8
+PerfQueryCounterData@16
+PerfQueryCounterInfo@16
+PerfQueryCounterSetRegistrationInfo@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-power-base-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-power-base-l1-1-0.def
new file mode 100644
index 0000000000..766e1b03f2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-power-base-l1-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-power-base-l1-1-0
+
+EXPORTS
+
+CallNtPowerInformation@20
+GetPwrCapabilities@4
+PowerDeterminePlatformRoleEx@4
+PowerRegisterSuspendResumeNotification@12
+PowerUnregisterSuspendResumeNotification@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-power-base-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-power-base-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..6116ed84e3
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-power-base-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-power-base-l1-1-0
+
+EXPORTS
+
+CallNtPowerInformation@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-power-limitsmanagement-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-power-limitsmanagement-l1-1-0.def
new file mode 100644
index 0000000000..4490a01927
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-power-limitsmanagement-l1-1-0.def
@@ -0,0 +1,14 @@
+LIBRARY api-ms-win-power-limitsmanagement-l1-1-0
+
+EXPORTS
+
+PowerCloseEnvironmentalMonitor@4
+PowerCloseLimitsMitigation@4
+PowerCloseLimitsPolicy@4
+PowerRegisterEnvironmentalMonitor@8
+PowerRegisterLimitsMitigation@8
+PowerRegisterLimitsPolicy@8
+PowerReportLimitsEvent@4
+PowerUpdateEnvironmentalMonitorState@12
+PowerUpdateEnvironmentalMonitorThresholds@12
+PowerUpdateLimitsMitigation@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-0.def
new file mode 100644
index 0000000000..192d5e9d3f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-power-setting-l1-1-0
+
+EXPORTS
+
+PowerGetActiveScheme@8
+PowerReadACValue@28
+PowerReadDCValue@28
+PowerSetActiveScheme@8
+PowerSettingRegisterNotification@16
+PowerSettingUnregisterNotification@4
+PowerWriteACValueIndex@20
+PowerWriteDCValueIndex@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..3dd3181adc
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-power-setting-l1-1-0
+
+EXPORTS
+
+PowerGetActiveScheme@8
+PowerReadACValue@28
+PowerSettingRegisterNotification@16
+PowerSettingUnregisterNotification@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-1.def
new file mode 100644
index 0000000000..46da766881
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-power-setting-l1-1-1.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-power-setting-l1-1-1
+
+EXPORTS
+
+PowerRegisterForEffectivePowerModeNotifications@16
+PowerUnregisterFromEffectivePowerModeNotifications@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-ro-typeresolution-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-ro-typeresolution-l1-1-0.def
new file mode 100644
index 0000000000..e22dd423e0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-ro-typeresolution-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-ro-typeresolution-l1-1-0
+
+EXPORTS
+
+RoGetMetaDataFile@20
+RoParseTypeName@12
+RoResolveNamespace@32
diff --git a/lib/libc/mingw/lib32/api-ms-win-ro-typeresolution-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-ro-typeresolution-l1-1-1.def
new file mode 100644
index 0000000000..075cc4cb70
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-ro-typeresolution-l1-1-1.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-ro-typeresolution-l1-1-1
+
+EXPORTS
+
+RoCreateNonAgilePropertySet@4
+RoCreatePropertySetSerializer@4
+RoIsApiContractMajorVersionPresent@12
+RoIsApiContractPresent@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-appcontainer-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-appcontainer-l1-1-0.def
new file mode 100644
index 0000000000..f317d9805d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-appcontainer-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-appcontainer-l1-1-0
+
+EXPORTS
+
+GetAppContainerNamedObjectPath@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-base-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-base-ansi-l1-1-0.def
new file mode 100644
index 0000000000..9b0b7549dd
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-base-ansi-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-security-base-ansi-l1-1-0
+
+EXPORTS
+
+GetFileSecurityA@20
+SetFileSecurityA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-base-ansi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-security-base-ansi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..204807e9c2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-base-ansi-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-base-ansi-l1-1-0
+
+EXPORTS
+
+SetFileSecurityA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-base-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-1-0.def
new file mode 100644
index 0000000000..52d268f306
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-1-0.def
@@ -0,0 +1,99 @@
+LIBRARY api-ms-win-security-base-l1-1-0
+
+EXPORTS
+
+AccessCheck@32
+AccessCheckAndAuditAlarmW@44
+AccessCheckByType@44
+AccessCheckByTypeAndAuditAlarmW@64
+AccessCheckByTypeResultList@44
+AccessCheckByTypeResultListAndAuditAlarmByHandleW@68
+AccessCheckByTypeResultListAndAuditAlarmW@64
+AddAccessAllowedAce@16
+AddAccessAllowedAceEx@20
+AddAccessAllowedObjectAce@28
+AddAccessDeniedAce@16
+AddAccessDeniedAceEx@20
+AddAccessDeniedObjectAce@28
+AddAce@20
+AddAuditAccessAce@24
+AddAuditAccessAceEx@28
+AddAuditAccessObjectAce@36
+AddMandatoryAce@20
+AdjustTokenGroups@24
+AdjustTokenPrivileges@24
+AllocateAndInitializeSid@44
+AllocateLocallyUniqueId@4
+AreAllAccessesGranted@8
+AreAnyAccessesGranted@8
+CheckTokenMembership@12
+ConvertToAutoInheritPrivateObjectSecurity@24
+CopySid@12
+CreatePrivateObjectSecurity@24
+CreatePrivateObjectSecurityEx@32
+CreatePrivateObjectSecurityWithMultipleInheritance@36
+CreateRestrictedToken@36
+CreateWellKnownSid@16
+DeleteAce@8
+DestroyPrivateObjectSecurity@4
+DuplicateToken@12
+DuplicateTokenEx@24
+EqualDomainSid@12
+EqualPrefixSid@8
+EqualSid@8
+FindFirstFreeAce@8
+FreeSid@4
+GetAce@12
+GetAclInformation@16
+GetFileSecurityW@20
+GetKernelObjectSecurity@20
+GetLengthSid@4
+GetPrivateObjectSecurity@20
+GetSecurityDescriptorControl@12
+GetSecurityDescriptorDacl@16
+GetSecurityDescriptorGroup@12
+GetSecurityDescriptorLength@4
+GetSecurityDescriptorOwner@12
+GetSecurityDescriptorRMControl@8
+GetSecurityDescriptorSacl@16
+GetSidIdentifierAuthority@4
+GetSidLengthRequired@4
+GetSidSubAuthority@8
+GetSidSubAuthorityCount@4
+GetTokenInformation@20
+GetWindowsAccountDomainSid@12
+ImpersonateAnonymousToken@4
+ImpersonateLoggedOnUser@4
+ImpersonateSelf@4
+InitializeAcl@12
+InitializeSecurityDescriptor@8
+InitializeSid@12
+IsTokenRestricted@4
+IsValidAcl@4
+IsValidSecurityDescriptor@4
+IsValidSid@4
+IsWellKnownSid@8
+MakeAbsoluteSD@44
+MakeSelfRelativeSD@12
+MapGenericMask@8
+ObjectCloseAuditAlarmW@12
+ObjectDeleteAuditAlarmW@12
+ObjectOpenAuditAlarmW@48
+ObjectPrivilegeAuditAlarmW@24
+PrivilegeCheck@12
+PrivilegedServiceAuditAlarmW@20
+QuerySecurityAccessMask@8
+RevertToSelf@0
+SetAclInformation@16
+SetFileSecurityW@12
+SetKernelObjectSecurity@12
+SetPrivateObjectSecurity@20
+SetPrivateObjectSecurityEx@24
+SetSecurityAccessMask@8
+SetSecurityDescriptorControl@12
+SetSecurityDescriptorDacl@16
+SetSecurityDescriptorGroup@12
+SetSecurityDescriptorOwner@12
+SetSecurityDescriptorRMControl@8
+SetSecurityDescriptorSacl@16
+SetTokenInformation@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-base-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..96dd70710e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-1-0_windowsapp.def
@@ -0,0 +1,59 @@
+LIBRARY api-ms-win-security-base-l1-1-0
+
+EXPORTS
+
+AddAccessAllowedAce@16
+AddAccessAllowedAceEx@20
+AddAce@20
+AddMandatoryAce@20
+AdjustTokenGroups@24
+AdjustTokenPrivileges@24
+AllocateAndInitializeSid@44
+AllocateLocallyUniqueId@4
+CheckTokenMembership@12
+CopySid@12
+CreateWellKnownSid@16
+DeleteAce@8
+DuplicateToken@12
+DuplicateTokenEx@24
+EqualDomainSid@12
+EqualSid@8
+FreeSid@4
+GetAce@12
+GetAclInformation@16
+GetFileSecurityW@20
+GetKernelObjectSecurity@20
+GetLengthSid@4
+GetSecurityDescriptorControl@12
+GetSecurityDescriptorDacl@16
+GetSecurityDescriptorGroup@12
+GetSecurityDescriptorLength@4
+GetSecurityDescriptorOwner@12
+GetSecurityDescriptorRMControl@8
+GetSecurityDescriptorSacl@16
+GetSidIdentifierAuthority@4
+GetSidLengthRequired@4
+GetSidSubAuthority@8
+GetSidSubAuthorityCount@4
+GetTokenInformation@20
+GetWindowsAccountDomainSid@12
+ImpersonateLoggedOnUser@4
+InitializeAcl@12
+InitializeSecurityDescriptor@8
+InitializeSid@12
+IsValidAcl@4
+IsValidSecurityDescriptor@4
+IsValidSid@4
+IsWellKnownSid@8
+MakeAbsoluteSD@44
+MakeSelfRelativeSD@12
+RevertToSelf@0
+SetFileSecurityW@12
+SetKernelObjectSecurity@12
+SetSecurityDescriptorControl@12
+SetSecurityDescriptorDacl@16
+SetSecurityDescriptorGroup@12
+SetSecurityDescriptorOwner@12
+SetSecurityDescriptorRMControl@8
+SetSecurityDescriptorSacl@16
+SetTokenInformation@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-0.def b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-0.def
new file mode 100644
index 0000000000..8b1dc38f24
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-security-base-l1-2-0
+
+EXPORTS
+
+AddResourceAttributeAce@28
+AddScopedPolicyIDAce@20
+CheckTokenCapability@12
+CheckTokenMembershipEx@16
+GetAppContainerAce@16
+GetCachedSigningLevel@24
+SetCachedSigningLevel@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-0_windowsapp.def
new file mode 100644
index 0000000000..384b15359f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-base-l1-2-0
+
+EXPORTS
+
+CheckTokenMembershipEx@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-1.def b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-1.def
new file mode 100644
index 0000000000..bc0480ad50
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-base-l1-2-1
+
+EXPORTS
+
+CveEventWrite@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-2.def b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-2.def
new file mode 100644
index 0000000000..da50e22029
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-base-l1-2-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-base-l1-2-2
+
+EXPORTS
+
+DeriveCapabilitySidsFromName@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-cpwl-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-cpwl-l1-1-0.def
new file mode 100644
index 0000000000..f3c787977e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-cpwl-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-security-cpwl-l1-1-0
+
+EXPORTS
+
+CreateProcessWithLogonW@44
+CreateProcessWithTokenW@36
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-cpwl-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-security-cpwl-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..ea02e080a8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-cpwl-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-cpwl-l1-1-0
+
+EXPORTS
+
+CreateProcessWithLogonW@44
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-credentials-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-credentials-l1-1-0.def
new file mode 100644
index 0000000000..76e763453f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-credentials-l1-1-0.def
@@ -0,0 +1,33 @@
+LIBRARY api-ms-win-security-credentials-l1-1-0
+
+EXPORTS
+
+CredDeleteA@12
+CredDeleteW@12
+CredEnumerateA@16
+CredEnumerateW@16
+CredFindBestCredentialA@16
+CredFindBestCredentialW@16
+CredFree@4
+CredGetSessionTypes@8
+CredGetTargetInfoA@12
+CredGetTargetInfoW@12
+CredIsMarshaledCredentialW@4
+CredIsProtectedA@8
+CredIsProtectedW@8
+CredMarshalCredentialA@12
+CredMarshalCredentialW@12
+CredProtectA@24
+CredProtectW@24
+CredReadA@16
+CredReadDomainCredentialsA@16
+CredReadDomainCredentialsW@16
+CredReadW@16
+CredUnmarshalCredentialA@12
+CredUnmarshalCredentialW@12
+CredUnprotectA@20
+CredUnprotectW@20
+CredWriteA@8
+CredWriteDomainCredentialsA@12
+CredWriteDomainCredentialsW@12
+CredWriteW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-cryptoapi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-cryptoapi-l1-1-0.def
new file mode 100644
index 0000000000..9a0c76c78b
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-cryptoapi-l1-1-0.def
@@ -0,0 +1,43 @@
+LIBRARY api-ms-win-security-cryptoapi-l1-1-0
+
+EXPORTS
+
+CryptAcquireContextA@20
+CryptAcquireContextW@20
+CryptContextAddRef@12
+CryptCreateHash@20
+CryptDecrypt@24
+CryptDeriveKey@20
+CryptDestroyHash@4
+CryptDestroyKey@4
+CryptDuplicateHash@16
+CryptDuplicateKey@16
+CryptEncrypt@28
+CryptEnumProvidersA@24
+CryptEnumProvidersW@24
+CryptEnumProviderTypesA@24
+CryptEnumProviderTypesW@24
+CryptExportKey@24
+CryptGenKey@16
+CryptGenRandom@12
+CryptGetDefaultProviderA@20
+CryptGetDefaultProviderW@20
+CryptGetHashParam@20
+CryptGetKeyParam@20
+CryptGetProvParam@20
+CryptGetUserKey@12
+CryptHashData@16
+CryptHashSessionKey@12
+CryptImportKey@24
+CryptReleaseContext@8
+CryptSetHashParam@16
+CryptSetKeyParam@16
+CryptSetProviderA@8
+CryptSetProviderExA@16
+CryptSetProviderExW@16
+CryptSetProviderW@8
+CryptSetProvParam@16
+CryptSignHashA@24
+CryptSignHashW@24
+CryptVerifySignatureA@24
+CryptVerifySignatureW@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-cryptoapi-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-security-cryptoapi-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..2590c143c7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-cryptoapi-l1-1-0_windowsapp.def
@@ -0,0 +1,35 @@
+LIBRARY api-ms-win-security-cryptoapi-l1-1-0
+
+EXPORTS
+
+CryptAcquireContextA@20
+CryptAcquireContextW@20
+CryptCreateHash@20
+CryptDecrypt@24
+CryptDeriveKey@20
+CryptDestroyHash@4
+CryptDestroyKey@4
+CryptDuplicateKey@16
+CryptEncrypt@28
+CryptEnumProvidersA@24
+CryptEnumProvidersW@24
+CryptExportKey@24
+CryptGenKey@16
+CryptGenRandom@12
+CryptGetDefaultProviderA@20
+CryptGetDefaultProviderW@20
+CryptGetHashParam@20
+CryptGetKeyParam@20
+CryptGetProvParam@20
+CryptGetUserKey@12
+CryptHashData@16
+CryptImportKey@24
+CryptReleaseContext@8
+CryptSetHashParam@16
+CryptSetKeyParam@16
+CryptSetProviderW@8
+CryptSetProvParam@16
+CryptSignHashA@24
+CryptSignHashW@24
+CryptVerifySignatureA@24
+CryptVerifySignatureW@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-isolatedcontainer-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-isolatedcontainer-l1-1-0.def
new file mode 100644
index 0000000000..741499b16d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-isolatedcontainer-l1-1-0.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-isolatedcontainer-l1-1-0
+
+EXPORTS
+
+IsProcessInIsolatedContainer@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-isolatedcontainer-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-security-isolatedcontainer-l1-1-1.def
new file mode 100644
index 0000000000..9f1cc87ea5
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-isolatedcontainer-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-isolatedcontainer-l1-1-1
+
+EXPORTS
+
+IsProcessInWDAGContainer@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-ansi-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-ansi-l2-1-0.def
new file mode 100644
index 0000000000..b3f8285b2c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-ansi-l2-1-0.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-security-lsalookup-ansi-l2-1-0
+
+EXPORTS
+
+LookupAccountNameA@28
+LookupAccountSidA@28
+LookupPrivilegeDisplayNameA@20
+LookupPrivilegeNameA@16
+LookupPrivilegeValueA@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-0.def
new file mode 100644
index 0000000000..d633be6a0e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-security-lsalookup-l2-1-0
+
+EXPORTS
+
+LookupAccountNameW@28
+LookupAccountSidW@28
+LookupPrivilegeDisplayNameW@20
+LookupPrivilegeNameW@16
+LookupPrivilegeValueW@12
+LsaEnumerateTrustedDomains@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-0_windowsapp.def
new file mode 100644
index 0000000000..6211588442
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-security-lsalookup-l2-1-0
+
+EXPORTS
+
+LookupAccountNameW@28
+LookupAccountSidW@28
+LookupPrivilegeDisplayNameW@20
+LookupPrivilegeNameW@16
+LookupPrivilegeValueW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-1.def b/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-1.def
new file mode 100644
index 0000000000..99d455839e
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-lsalookup-l2-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-lsalookup-l2-1-1
+
+EXPORTS
+
+LsaManageSidNameMapping@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-lsapolicy-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-lsapolicy-l1-1-0.def
new file mode 100644
index 0000000000..bf0e1aaed8
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-lsapolicy-l1-1-0.def
@@ -0,0 +1,17 @@
+LIBRARY api-ms-win-security-lsapolicy-l1-1-0
+
+EXPORTS
+
+LsaAddAccountRights@16
+LsaClose@4
+LsaEnumerateAccountRights@16
+LsaEnumerateAccountsWithUserRight@16
+LsaFreeMemory@4
+LsaLookupNames2@24
+LsaLookupSids@20
+LsaLookupSids2@24
+LsaOpenPolicy@16
+LsaQueryInformationPolicy@12
+LsaRemoveAccountRights@20
+LsaRetrievePrivateData@12
+LsaSetInformationPolicy@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-lsapolicy-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-security-lsapolicy-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..e624ec3d88
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-lsapolicy-l1-1-0_windowsapp.def
@@ -0,0 +1,9 @@
+LIBRARY api-ms-win-security-lsapolicy-l1-1-0
+
+EXPORTS
+
+LsaClose@4
+LsaFreeMemory@4
+LsaLookupNames2@24
+LsaLookupSids@20
+LsaOpenPolicy@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-provider-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-provider-ansi-l1-1-0.def
new file mode 100644
index 0000000000..f5ac5de431
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-provider-ansi-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-security-provider-ansi-l1-1-0
+
+EXPORTS
+
+GetExplicitEntriesFromAclA@12
+GetNamedSecurityInfoA@32
+SetEntriesInAclA@16
+SetNamedSecurityInfoA@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-provider-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-provider-l1-1-0.def
new file mode 100644
index 0000000000..980011f2a7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-provider-l1-1-0.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-security-provider-l1-1-0
+
+EXPORTS
+
+GetExplicitEntriesFromAclW@12
+GetNamedSecurityInfoW@32
+GetSecurityInfo@32
+SetEntriesInAclW@16
+SetNamedSecurityInfoW@28
+SetSecurityInfo@28
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-sddl-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-sddl-ansi-l1-1-0.def
new file mode 100644
index 0000000000..27a36ef958
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-sddl-ansi-l1-1-0.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-security-sddl-ansi-l1-1-0
+
+EXPORTS
+
+ConvertSidToStringSidA@8
+ConvertStringSidToSidA@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-sddl-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-sddl-l1-1-0.def
new file mode 100644
index 0000000000..9f376c5f8f
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-sddl-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-security-sddl-l1-1-0
+
+EXPORTS
+
+ConvertSecurityDescriptorToStringSecurityDescriptorW@20
+ConvertSidToStringSidW@8
+ConvertStringSecurityDescriptorToSecurityDescriptorW@16
+ConvertStringSidToSidW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-systemfunctions-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-security-systemfunctions-l1-1-0.def
new file mode 100644
index 0000000000..ccd0780935
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-systemfunctions-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-security-systemfunctions-l1-1-0
+
+EXPORTS
+
+SystemFunction036@8
+SystemFunction040@12
+SystemFunction041@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-security-systemfunctions-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-security-systemfunctions-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..0e5e6e715d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-security-systemfunctions-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-security-systemfunctions-l1-1-0
+
+EXPORTS
+
+SystemFunction036@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-core-ansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-service-core-ansi-l1-1-0.def
new file mode 100644
index 0000000000..56af17d765
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-core-ansi-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-service-core-ansi-l1-1-0
+
+EXPORTS
+
+EnumServicesStatusExA@40
+GetServiceDisplayNameA@16
+GetServiceKeyNameA@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-core-ansi-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-service-core-ansi-l1-1-1.def
new file mode 100644
index 0000000000..c613c915e9
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-core-ansi-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-core-ansi-l1-1-1
+
+EXPORTS
+
+EnumDependentServicesA@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-0.def
new file mode 100644
index 0000000000..2f26f67a38
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-service-core-l1-1-0
+
+EXPORTS
+
+RegisterServiceCtrlHandlerExW@12
+SetServiceStatus@8
+StartServiceCtrlDispatcherW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..b8e530ce75
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-core-l1-1-0
+
+EXPORTS
+
+RegisterServiceCtrlHandlerExW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-1.def
new file mode 100644
index 0000000000..888f96b5a0
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-1.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-service-core-l1-1-1
+
+EXPORTS
+
+EnumDependentServicesW@24
+EnumServicesStatusExW@40
+QueryServiceDynamicInformation@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-2.def
new file mode 100644
index 0000000000..8a6abdb244
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-2.def
@@ -0,0 +1,6 @@
+LIBRARY api-ms-win-service-core-l1-1-2
+
+EXPORTS
+
+GetServiceDisplayNameW@16
+GetServiceKeyNameW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-3.def b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-3.def
new file mode 100644
index 0000000000..2da0d3ec06
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-3.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-core-l1-1-3
+
+EXPORTS
+
+GetServiceRegistryStateKey@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-4.def b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-4.def
new file mode 100644
index 0000000000..409b0c7374
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-core-l1-1-4.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-core-l1-1-4
+
+EXPORTS
+
+GetServiceDirectory@20
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-management-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-service-management-l1-1-0.def
new file mode 100644
index 0000000000..d19c2b466c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-management-l1-1-0.def
@@ -0,0 +1,11 @@
+LIBRARY api-ms-win-service-management-l1-1-0
+
+EXPORTS
+
+CloseServiceHandle@4
+ControlServiceExW@16
+CreateServiceW@52
+DeleteService@4
+OpenSCManagerW@12
+OpenServiceW@12
+StartServiceW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-management-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-service-management-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..37dcd625d7
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-management-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-service-management-l1-1-0
+
+EXPORTS
+
+OpenSCManagerW@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-management-l2-1-0.def b/lib/libc/mingw/lib32/api-ms-win-service-management-l2-1-0.def
new file mode 100644
index 0000000000..94967e0a6c
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-management-l2-1-0.def
@@ -0,0 +1,12 @@
+LIBRARY api-ms-win-service-management-l2-1-0
+
+EXPORTS
+
+ChangeServiceConfig2W@12
+ChangeServiceConfigW@44
+NotifyServiceStatusChangeW@12
+QueryServiceConfig2W@20
+QueryServiceConfigW@16
+QueryServiceObjectSecurity@20
+QueryServiceStatusEx@20
+SetServiceObjectSecurity@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-winsvc-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-service-winsvc-l1-1-0.def
new file mode 100644
index 0000000000..3f736bcc41
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-winsvc-l1-1-0.def
@@ -0,0 +1,20 @@
+LIBRARY api-ms-win-service-winsvc-l1-1-0
+
+EXPORTS
+
+ChangeServiceConfig2A@12
+ChangeServiceConfigA@44
+ControlService@12
+ControlServiceExA@16
+CreateServiceA@52
+NotifyServiceStatusChangeA@12
+OpenSCManagerA@12
+OpenServiceA@12
+QueryServiceConfig2A@20
+QueryServiceConfigA@16
+QueryServiceStatus@8
+RegisterServiceCtrlHandlerA@8
+RegisterServiceCtrlHandlerExA@12
+RegisterServiceCtrlHandlerW@8
+StartServiceA@12
+StartServiceCtrlDispatcherA@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-service-winsvc-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-service-winsvc-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..4561778c81
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-service-winsvc-l1-1-0_windowsapp.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-service-winsvc-l1-1-0
+
+EXPORTS
+
+OpenSCManagerA@12
+RegisterServiceCtrlHandlerA@8
+RegisterServiceCtrlHandlerExA@12
+RegisterServiceCtrlHandlerW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-obsolete-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shcore-obsolete-l1-1-0.def
new file mode 100644
index 0000000000..f25bacd142
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-obsolete-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shcore-obsolete-l1-1-0
+
+EXPORTS
+
+CommandLineToArgvW@8
+SHStrDupA@8
+SHStrDupW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-obsolete-l1-1-0_windowsapp.def b/lib/libc/mingw/lib32/api-ms-win-shcore-obsolete-l1-1-0_windowsapp.def
new file mode 100644
index 0000000000..42a937d736
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-obsolete-l1-1-0_windowsapp.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-shcore-obsolete-l1-1-0
+
+EXPORTS
+
+CommandLineToArgvW@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-path-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shcore-path-l1-1-0.def
new file mode 100644
index 0000000000..e9debf888d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-path-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-shcore-path-l1-1-0
+
+EXPORTS
+
+PathBuildRootA@8
+PathBuildRootW@8
+PathIsNetworkPathA@4
+PathIsNetworkPathW@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-registry-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shcore-registry-l1-1-0.def
new file mode 100644
index 0000000000..17bbb1fdc2
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-registry-l1-1-0.def
@@ -0,0 +1,32 @@
+LIBRARY api-ms-win-shcore-registry-l1-1-0
+
+EXPORTS
+
+SHCopyKeyA@16
+SHCopyKeyW@16
+SHDeleteEmptyKeyA@8
+SHDeleteEmptyKeyW@8
+SHDeleteKeyA@8
+SHDeleteKeyW@8
+SHDeleteValueA@12
+SHDeleteValueW@12
+SHEnumKeyExA@16
+SHEnumKeyExW@16
+SHEnumValueA@28
+SHEnumValueW@28
+SHGetValueA@24
+SHGetValueW@24
+SHQueryInfoKeyA@20
+SHQueryInfoKeyW@20
+SHQueryValueExA@24
+SHQueryValueExW@24
+SHRegDuplicateHKey@4
+SHRegGetIntW@12
+SHRegGetPathA@20
+SHRegGetPathW@20
+SHRegGetValueA@28
+SHRegGetValueW@28
+SHRegSetPathA@20
+SHRegSetPathW@20
+SHSetValueA@24
+SHSetValueW@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-registry-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-shcore-registry-l1-1-1.def
new file mode 100644
index 0000000000..617e8704cc
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-registry-l1-1-1.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-shcore-registry-l1-1-1
+
+EXPORTS
+
+SHRegGetValueFromHKCUHKLM@24
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-0.def
new file mode 100644
index 0000000000..f121e648c1
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shcore-scaling-l1-1-0
+
+EXPORTS
+
+GetScaleFactorForDevice@4
+RegisterScaleChangeNotifications@16
+RevokeScaleChangeNotifications@8
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-1.def b/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-1.def
new file mode 100644
index 0000000000..2f5355e43d
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-1.def
@@ -0,0 +1,10 @@
+LIBRARY api-ms-win-shcore-scaling-l1-1-1
+
+EXPORTS
+
+GetDpiForMonitor@16
+GetProcessDpiAwareness@8
+GetScaleFactorForMonitor@8
+RegisterScaleChangeEvent@8
+SetProcessDpiAwareness@4
+UnregisterScaleChangeEvent@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-2.def b/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-2.def
new file mode 100644
index 0000000000..94de5076e1
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-scaling-l1-1-2.def
@@ -0,0 +1,5 @@
+LIBRARY api-ms-win-shcore-scaling-l1-1-2
+
+EXPORTS
+
+GetDpiForShellUIComponent@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-stream-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shcore-stream-l1-1-0.def
new file mode 100644
index 0000000000..8fb0d0eacd
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-stream-l1-1-0.def
@@ -0,0 +1,19 @@
+LIBRARY api-ms-win-shcore-stream-l1-1-0
+
+EXPORTS
+
+IStream_Copy@12
+IStream_Read@12
+IStream_ReadStr@8
+IStream_Reset@4
+IStream_Size@8
+IStream_Write@12
+IStream_WriteStr@8
+SHCreateMemStream@8
+SHCreateStreamOnFileA@12
+SHCreateStreamOnFileEx@24
+SHCreateStreamOnFileW@12
+SHOpenRegStream2A@16
+SHOpenRegStream2W@16
+SHOpenRegStreamA@16
+SHOpenRegStreamW@16
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-stream-winrt-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shcore-stream-winrt-l1-1-0.def
new file mode 100644
index 0000000000..5dafc212e5
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-stream-winrt-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shcore-stream-winrt-l1-1-0
+
+EXPORTS
+
+CreateRandomAccessStreamOnFile@16
+CreateRandomAccessStreamOverStream@16
+CreateStreamOverRandomAccessStream@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-sysinfo-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shcore-sysinfo-l1-1-0.def
new file mode 100644
index 0000000000..6510396e2a
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-sysinfo-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shcore-sysinfo-l1-1-0
+
+EXPORTS
+
+GetCurrentProcessExplicitAppUserModelID@4
+IsOS@4
+SetCurrentProcessExplicitAppUserModelID@4
diff --git a/lib/libc/mingw/lib32/api-ms-win-shcore-unicodeansi-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shcore-unicodeansi-l1-1-0.def
new file mode 100644
index 0000000000..aaae6d1b81
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shcore-unicodeansi-l1-1-0.def
@@ -0,0 +1,8 @@
+LIBRARY api-ms-win-shcore-unicodeansi-l1-1-0
+
+EXPORTS
+
+SHAnsiToAnsi@12
+SHAnsiToUnicode@12
+SHUnicodeToAnsi@12
+SHUnicodeToUnicode@12
diff --git a/lib/libc/mingw/lib32/api-ms-win-shell-shdirectory-l1-1-0.def b/lib/libc/mingw/lib32/api-ms-win-shell-shdirectory-l1-1-0.def
new file mode 100644
index 0000000000..ae1dfd1744
--- /dev/null
+++ b/lib/libc/mingw/lib32/api-ms-win-shell-shdirectory-l1-1-0.def
@@ -0,0 +1,7 @@
+LIBRARY api-ms-win-shell-shdirectory-l1-1-0
+
+EXPORTS
+
+SHCreateDirectory@8
+SHCreateDirectoryExA@12
+SHCreateDirectoryExW@12
diff --git a/lib/libc/mingw/lib32/davclnt.def b/lib/libc/mingw/lib32/davclnt.def
index 5dcc9f8e6a..1c4a516e26 100644
--- a/lib/libc/mingw/lib32/davclnt.def
+++ b/lib/libc/mingw/lib32/davclnt.def
@@ -14,7 +14,6 @@ DavRegisterAuthCallback@8
DavUnregisterAuthCallback@4
DllCanUnloadNow@0
DllGetClassObject@12
-DllMain@12
NPAddConnection3@20
NPAddConnection@12
NPCancelConnection@8
diff --git a/lib/libc/mingw/lib32/msoledbsql.def b/lib/libc/mingw/lib32/msoledbsql.def
index fbea877100..89fc4cb458 100644
--- a/lib/libc/mingw/lib32/msoledbsql.def
+++ b/lib/libc/mingw/lib32/msoledbsql.def
@@ -7,7 +7,6 @@ LIBRARY "msoledbsql.dll"
EXPORTS
DllCanUnloadNow@0
DllGetClassObject@12
-DllMain@12
DllRegisterServer@0
DllUnregisterServer@0
OpenSqlFilestream@24
diff --git a/lib/libc/mingw/lib32/p2p.def b/lib/libc/mingw/lib32/p2p.def
index ee8c00b6e7..0960a75730 100644
--- a/lib/libc/mingw/lib32/p2p.def
+++ b/lib/libc/mingw/lib32/p2p.def
@@ -5,7 +5,6 @@
;
LIBRARY "P2P.dll"
EXPORTS
-DllMain@12
PeerCollabAddContact@8
PeerCollabAsyncInviteContact@20
PeerCollabAsyncInviteEndpoint@16
diff --git a/lib/libc/mingw/lib32/p2pcollab.def b/lib/libc/mingw/lib32/p2pcollab.def
index d0de1d5e0a..d768cc6efb 100644
--- a/lib/libc/mingw/lib32/p2pcollab.def
+++ b/lib/libc/mingw/lib32/p2pcollab.def
@@ -87,6 +87,5 @@ SPUpdateUserPicture@0
SPUpdateUserSettings@4
SSPAddCredentials@12
SSPRemoveCredentials@4
-DllMain@12
InitSecurityInterfaceW@0
QuerySecurityPackageInfoW@8
diff --git a/lib/libc/mingw/lib32/prntvpt.def b/lib/libc/mingw/lib32/prntvpt.def
index c93f48ea18..f6c5608f67 100644
--- a/lib/libc/mingw/lib32/prntvpt.def
+++ b/lib/libc/mingw/lib32/prntvpt.def
@@ -18,7 +18,6 @@ ConvertPrintTicketToDevModeThunk2@32
ConvertPrintTicketToDevModeThunk@28
DllCanUnloadNow@0
DllGetClassObject@12
-DllMain@12
DllRegisterServer@0
DllUnregisterServer@0
GetDeviceDefaultPrintTicketThunk@12
diff --git a/lib/libc/mingw/lib32/shlwapi.def b/lib/libc/mingw/lib32/shlwapi.def
index 4978994c5d..8dfff0be26 100644
--- a/lib/libc/mingw/lib32/shlwapi.def
+++ b/lib/libc/mingw/lib32/shlwapi.def
@@ -5,94 +5,83 @@
;
LIBRARY "SHLWAPI.dll"
EXPORTS
-ParseURLA@8
-ParseURLW@8
-SHAllocShared@12
-SHLockShared@8
-SHUnlockShared@4
-SHFreeShared@8
-SHCreateMemStream@8
-GetAcceptLanguagesA@8
-GetAcceptLanguagesW@8
-SHCreateThread@16
-IsCharSpaceW@4
-StrCmpNCA@12
-StrCmpNCW@12
-StrCmpNICA@12
-StrCmpNICW@12
-StrCmpCA@8
-StrCmpCW@8
-StrCmpICA@8
-StrCmpICW@8
-ConnectToConnectionPoint@24
-IUnknown_AtomicRelease@4
-IUnknown_GetWindow@8
-IUnknown_SetSite@8
-IUnknown_QueryService@16
-IStream_Read@12
-SHMessageBoxCheckA@24
-SHMessageBoxCheckW@24
-IUnknown_Set@8
-SHStripMneumonicA@4
-SHIsChildOrSelf@8
-IStream_Write@12
-IStream_Reset@4
-IStream_Size@8
-SHAnsiToUnicode@12
-SHUnicodeToAnsi@12
-QISearch@16
-SHStripMneumonicW@4
-IUnknown_GetSite@12
-WhichPlatform@0
-SHRegGetIntW@12
-SHAnsiToAnsi@12
-SHUnicodeToUnicode@12
-SHFormatDateTimeA@16
-SHFormatDateTimeW@16
-MLLoadLibraryA@12
-MLLoadLibraryW@12
-ShellMessageBoxW@0
-MLFreeLibrary@0
-SHSendMessageBroadcastA@12
-SHSendMessageBroadcastW@12
-IsOS@4
-UrlFixupW@12
-SHRunIndirectRegClientCommand@8
-SHLoadIndirectString@16
+AssocCopyVerbs@8
AssocCreate@24
AssocGetPerceivedType@16
AssocIsDangerous@4
+AssocMakeApplicationByKeyW@12
+AssocMakeProgid@16
AssocQueryKeyA@20
AssocQueryKeyW@20
-IStream_ReadPidl@8
-IStream_WritePidl@8
-SHGetViewStatePropertyBag@20
-IsInternetESCEnabled@0
-SHPropertyBag_ReadStrAlloc@12
-IStream_Copy@12
-DelayLoadFailureHook@8
-SHPropertyBag_WriteBSTR@12
AssocQueryStringA@24
AssocQueryStringByKeyA@24
AssocQueryStringByKeyW@24
AssocQueryStringW@24
+CalculateAspectRatio@12
+CharUpperNoDBCSW@4
ChrCmpIA@8
ChrCmpIW@8
ColorAdjustLuma@12
ColorHLSToRGB@12
ColorRGBToHLS@16
+ConnectToConnectionPoint@24
+DelayLoadFailureHook@8
DllGetVersion@4
+DoesStringRoundTripW@12
+DupWideToAnsi@8
+FDSA_DeleteItem@8
+FDSA_Initialize@20
+FDSA_InsertItem@12
+FixSlashesAndColonW@4
+GetAcceptLanguagesA@8
+GetAcceptLanguagesW@8
GetMenuPosFromID@8
HashData@16
IntlStrEqWorkerA@16
-IStream_ReadStr@8
-IStream_WriteStr@8
IntlStrEqWorkerW@16
IsCharSpaceA@4
+IsCharSpaceW@4
+IShellFolder_GetDisplayNameOf@20
+IShellFolder_ParseDisplayName@28
+IsInternetESCEnabled@0
+IsOS@4
+IStream_Copy@12
+IStream_Read@12
+IStream_ReadPidl@8
+IStream_ReadStr@8
+IStream_Reset@4
+IStream_Size@8
+IStream_Write@12
+IStream_WritePidl@8
+IStream_WriteStr@8
+IUnknown_AtomicRelease@4
+IUnknown_CPContainerInvokeIndirect@12
+IUnknown_EnableModeless@8
+IUnknown_Exec@24
+IUnknown_GetSite@12
+IUnknown_GetWindow@8
+IUnknown_HasFocusIO@4
+IUnknown_OnFocusChangeIS@12
+IUnknown_QueryService@16
+IUnknown_QueryServiceExec@28
+IUnknown_QueryServiceForWebBrowserApp@12
+IUnknown_QueryServicePropertyBag@16
+IUnknown_Set@8
+IUnknown_SetOwner@8
+IUnknown_SetSite@8
+IUnknown_TranslateAcceleratorIO@8
+IUnknown_UIActivateIO@12
+MayExecForward@28
+MayQSForward@24
+MIME_GetExtensionW@12
+MLFreeLibrary@0
+MLLoadLibraryA@12
+MLLoadLibraryW@12
+ParseURLA@8
+ParseURLW@8
PathAddBackslashA@4
PathAddBackslashW@4
PathAddExtensionA@8
-SHCreateThreadWithHandle@20
PathAddExtensionW@8
PathAppendA@8
PathAppendW@8
@@ -112,6 +101,9 @@ PathCreateFromUrlA@16
PathCreateFromUrlAlloc@12
PathCreateFromUrlW@16
PathFileExistsA@4
+PathFileExistsAndAttributesA@8
+PathFileExistsDefExtAndAttributesW@12
+PathFileExistsDefExtW@8
PathFileExistsW@4
PathFindExtensionA@4
PathFindExtensionW@4
@@ -120,6 +112,7 @@ PathFindFileNameW@4
PathFindNextComponentA@4
PathFindNextComponentW@4
PathFindOnPathA@8
+PathFindOnPathExW@12
PathFindOnPathW@8
PathFindSuffixArrayA@12
PathFindSuffixArrayW@12
@@ -195,23 +188,38 @@ PathStripPathA@4
PathStripPathW@4
PathStripToRootA@4
PathStripToRootW@4
-PathUnExpandEnvStringsA@12
-PathUnExpandEnvStringsW@12
PathUndecorateA@4
PathUndecorateW@4
+PathUnExpandEnvStringsA@12
+PathUnExpandEnvStringsForUserW@16
+PathUnExpandEnvStringsW@12
PathUnmakeSystemFolderA@4
PathUnmakeSystemFolderW@4
PathUnquoteSpacesA@4
PathUnquoteSpacesW@4
+QISearch@16
+QuerySourceCreateFromKey@20
+SHAddDataBlock@8
+SHAllocShared@12
+SHAnsiToAnsi@12
+SHAnsiToUnicode@12
SHAutoComplete@8
+SHClearViewStatePropertyBag@12
SHCopyKeyA@16
SHCopyKeyW@16
+SHCreateMemStream@8
+SHCreatePropertyBagOnProfileSection@20
+SHCreatePropertyBagOnRegKey@20
+SHCreatePropertyStoreOnXML@20
SHCreateShellPalette@4
SHCreateStreamOnFileA@12
SHCreateStreamOnFileEx@24
SHCreateStreamOnFileW@12
SHCreateStreamWrapper@16
+SHCreateThread@16
SHCreateThreadRef@8
+SHCreateThreadWithHandle@20
+SHCreateWorkerWindowW@24
SHDeleteEmptyKeyA@8
SHDeleteEmptyKeyW@8
SHDeleteKeyA@8
@@ -220,23 +228,64 @@ SHDeleteOrphanKeyA@8
SHDeleteOrphanKeyW@8
SHDeleteValueA@12
SHDeleteValueW@12
+ShellMessageBoxA
+ShellMessageBoxA@0
+ShellMessageBoxW
+ShellMessageBoxW@0
SHEnumKeyExA@16
SHEnumKeyExW@16
SHEnumValueA@28
SHEnumValueW@28
+SHExpandEnvironmentStringsAlloc@8
+SHExpandEnvironmentStringsForUserW@16
+SHFillRectClr@12
+SHFindDataBlock@8
+SHFormatDateTimeA@16
+SHFormatDateTimeW@16
+SHForwardContextMenuMsg@24
+SHFreeDataBlockList@4
+SHFreeShared@8
+SHGetCurColorRes@0
+SHGetFileDescriptionW@20
+SHGetIniStringW@20
SHGetInverseCMAP@8
+SHGetMenuFromID@8
+SHGetPerScreenResName@12
+SHGetRestriction@12
+SHGetShellKeyEx@16
SHGetThreadRef@4
SHGetValueA@24
SHGetValueW@24
+SHGetViewStatePropertyBag@20
+SHInvokeCommand@16
+SHInvokeCommandOnContextMenu@20
+SHInvokeCommandOnContextMenuEx@28
+SHInvokeCommandWithFlagsAndSite@28
+SHInvokeDefaultCommand@12
+SHIsChildOrSelf@8
+SHIsExpandableFolder@8
SHIsLowMemoryMachine@4
+SHLoadFromPropertyBag@8
+SHLoadIndirectString@16
+SHLoadMenuPopup@8
+SHLockShared@8
+SHMenuIndexFromID@8
+SHMessageBoxCheckA@24
+SHMessageBoxCheckExW@28
+SHMessageBoxCheckW@24
SHOpenRegStream2A@16
SHOpenRegStream2W@16
SHOpenRegStreamA@16
SHOpenRegStreamW@16
+SHPinDllOfCLSID@4
+SHPropertyBag_ReadStrAlloc@12
+SHPropertyBag_WriteBSTR@12
SHQueryInfoKeyA@20
SHQueryInfoKeyW@20
SHQueryValueExA@24
SHQueryValueExW@24
+SHQueueUserWorkItem@28
+SHReadDataBlockList@8
SHRegCloseUSKey@4
SHRegCreateUSKeyA@20
SHRegCreateUSKeyW@20
@@ -251,12 +300,16 @@ SHRegEnumUSValueA@32
SHRegEnumUSValueW@32
SHRegGetBoolUSValueA@16
SHRegGetBoolUSValueW@16
+SHRegGetIntW@12
SHRegGetPathA@20
SHRegGetPathW@20
SHRegGetUSValueA@32
SHRegGetUSValueW@32
SHRegGetValueA@28
+SHRegGetValueFromHKCUHKLM@24
SHRegGetValueW@28
+SHRegisterClassW@4
+SHRegisterValidateTemplate@8
SHRegOpenUSKeyA@20
SHRegOpenUSKeyW@20
SHRegQueryInfoUSKeyA@24
@@ -269,19 +322,36 @@ SHRegSetUSValueA@24
SHRegSetUSValueW@24
SHRegWriteUSValueA@24
SHRegWriteUSValueW@24
-SHRegisterValidateTemplate@8
SHReleaseThreadRef@0
+SHRemoveDataBlock@8
+SHRemoveDefaultDialogFont@4
+SHRestrictionLookup@24
+SHRunIndirectRegClientCommand@8
+SHSendMessageBroadcastA@12
+SHSendMessageBroadcastW@12
+SHSetDefaultDialogFont@8
+SHSetIniStringW@16
SHSetThreadRef@4
SHSetValueA@24
SHSetValueW@24
+SHSetWindowBits@16
+SHSimulateDrop@20
SHSkipJunction@8
SHStrDupA@8
SHStrDupW@8
-ShellMessageBoxA@0
-StrCSpnA@8
-StrCSpnIA@8
-StrCSpnIW@8
-StrCSpnW@8
+SHStringFromGUIDW@12
+SHStripMneumonicA@4
+SHStripMneumonicW@4
+SHUnicodeToAnsi@12
+SHUnicodeToAnsiCP@16
+SHUnicodeToUnicode@12
+SHUnlockShared@4
+SHWeakQueryInterface@16
+SHWeakReleaseInterface@8
+SHWriteDataBlockList@8
+SKAllocValueW@24
+SKGetValueW@24
+SKSetValueW@24
StrCatBuffA@12
StrCatBuffW@12
StrCatChainW@16
@@ -292,15 +362,27 @@ StrChrIW@8
StrChrNIW@12
StrChrNW@12
StrChrW@8
+StrCmpCA@8
+StrCmpCW@8
+StrCmpICA@8
+StrCmpICW@8
StrCmpIW@8
StrCmpLogicalW@8
StrCmpNA@12
+StrCmpNCA@12
+StrCmpNCW@12
StrCmpNIA@12
+StrCmpNICA@12
+StrCmpNICW@12
StrCmpNIW@12
StrCmpNW@12
StrCmpW@8
StrCpyNW@12
StrCpyW@8
+StrCSpnA@8
+StrCSpnIA@8
+StrCSpnIW@8
+StrCSpnW@8
StrDupA@4
StrDupW@4
StrFormatByteSize64A@16
@@ -321,13 +403,13 @@ StrRChrA@12
StrRChrIA@12
StrRChrIW@12
StrRChrW@12
-StrRStrIA@12
-StrRStrIW@12
StrRetToBSTR@12
StrRetToBufA@16
StrRetToBufW@16
StrRetToStrA@12
StrRetToStrW@12
+StrRStrIA@12
+StrRStrIW@12
StrSpnA@8
StrSpnW@8
StrStrA@8
@@ -356,6 +438,7 @@ UrlCreateFromPathA@16
UrlCreateFromPathW@16
UrlEscapeA@16
UrlEscapeW@16
+UrlFixupW@12
UrlGetLocationA@4
UrlGetLocationW@4
UrlGetPartA@20
@@ -370,7 +453,9 @@ UrlIsOpaqueW@4
UrlIsW@8
UrlUnescapeA@16
UrlUnescapeW@16
+WhichPlatform@0
wnsprintfA
wnsprintfW
wvnsprintfA@16
wvnsprintfW@16
+ZoneCheckUrlExW@32
diff --git a/lib/libc/mingw/lib32/spoolss.def b/lib/libc/mingw/lib32/spoolss.def
index 3d9c081257..fa807bfde7 100644
--- a/lib/libc/mingw/lib32/spoolss.def
+++ b/lib/libc/mingw/lib32/spoolss.def
@@ -73,7 +73,6 @@ DllCanUnloadNow@0
DllFreeSplMem@4
DllFreeSplStr@4
DllGetClassObject@12
-DllMain@12
DllReallocSplMem@12
DllReallocSplStr@8
DllRegisterServer@0
diff --git a/lib/libc/mingw/lib32/wsmsvc.def b/lib/libc/mingw/lib32/wsmsvc.def
new file mode 100644
index 0000000000..b5853200cc
--- /dev/null
+++ b/lib/libc/mingw/lib32/wsmsvc.def
@@ -0,0 +1,3673 @@
+LIBRARY "WsmSvc.DLL"
+EXPORTS
+??0?$AutoCleanup@V?$AutoDelete@D@@PAD@@QAE@PAD@Z
+??0?$AutoCleanup@V?$AutoDelete@G@@PAG@@QAE@PAG@Z
+??0?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PAUIPRange@CWSManIPFilter@@@@QAE@PAUIPRange@CWSManIPFilter@@@Z
+??0?$AutoCleanup@V?$AutoDelete@U_SID@@@@PAU_SID@@@@QAE@PAU_SID@@@Z
+??0?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PAU_WSMAN_STREAM_ID_SET@@@@QAE@PAU_WSMAN_STREAM_ID_SET@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PAV?$Handle@VISubscription@@@@@@QAE@PAV?$Handle@VISubscription@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@QAE@PAV?$SafeSet@PAVCCertMapping@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@QAE@PAV?$SafeSet@PAVCShellUriSettings@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@PAV?$SimpleStack@VCListenerOperation@@@@@@QAE@PAV?$SimpleStack@VCListenerOperation@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@PAV?$SimpleStack@VShellHostEntry@@@@@@QAE@PAV?$SimpleStack@VShellHostEntry@@@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAE@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QAE@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QAE@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@Z
+??0?$AutoCleanup@V?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@QAE@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PAVAdminSid@CSecurity@@@@QAE@PAVAdminSid@CSecurity@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@@QAE@PAVBlockedRecord@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAE@PAVCBaseConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PAVCCertMapping@@@@QAE@PAVCCertMapping@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PAVCConfigChangeSource@@@@QAE@PAVCConfigChangeSource@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PAVCListenerSettings@@@@QAE@PAVCListenerSettings@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PAVCObserverConfigChangeErrors@@@@QAE@PAVCObserverConfigChangeErrors@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@@QAE@PAVCServiceWatcher@CServiceConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PAVCShellUriSettings@@@@QAE@PAVCShellUriSettings@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PAVCWSManEPR@@@@QAE@PAVCWSManEPR@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@@QAE@PAVCWSManResource@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PAVCertHash@@@@QAE@PAVCertHash@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@QAE@PAVConfigUpdate@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAE@PAVEnumSinkEx@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PAVEventHandler@WSMan@@@@QAE@PAVEventHandler@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PAVExpiredOperationIdRecord@@@@QAE@PAVExpiredOperationIdRecord@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PAVGPApiManager@@@@QAE@PAVGPApiManager@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAE@PAVGeneralSinkEx@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PAVIChannelObserverFactory@@@@QAE@PAVIChannelObserverFactory@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QAE@PAVIQueryDASHSMASHInterface@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QAE@PAVISpecification@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PAVInteractiveSid@CSecurity@@@@QAE@PAVInteractiveSid@CSecurity@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PAVIpHlpApiDllLoader@@@@QAE@PAVIpHlpApiDllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PAVMachineName@@@@QAE@PAVMachineName@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PAVNetworkServiceSid@CSecurity@@@@QAE@PAVNetworkServiceSid@CSecurity@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PAVNtDsApiDllLoader@@@@QAE@PAVNtDsApiDllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAE@PAVOptionValue@SessionOptions@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@@QAE@PAVPacketCreator@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PAVPacketParser@@@@QAE@PAVPacketParser@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PAVResources@Locale@@@@QAE@PAVResources@Locale@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PAVRunAsConfiguration@@@@QAE@PAVRunAsConfiguration@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@@QAE@PAVSecurityEntry@Catalog@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PAVSendPacketArgs@RobustConnectionBuffer@@@@QAE@PAVSendPacketArgs@RobustConnectionBuffer@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@@QAE@PAVServiceSoapProcessor@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PAVShell32DllLoader@@@@QAE@PAVShell32DllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PAVShlWApiDllLoader@@@@QAE@PAVShlWApiDllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PAVSubscriptionEnumerator@@@@QAE@PAVSubscriptionEnumerator@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PAVSubscriptionManager@@@@QAE@PAVSubscriptionManager@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QAE@PAVTSTRBUFFER@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PAVUniqueStringOverflow@@@@QAE@PAVUniqueStringOverflow@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PAVUser32DllLoader@@@@QAE@PAVUser32DllLoader@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PAVWSMANCONFIGTABLE_IDENTITY@@@@QAE@PAVWSMANCONFIGTABLE_IDENTITY@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PAVWSManMemCryptManager@@@@QAE@PAVWSManMemCryptManager@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QAE@PAVWmiEnumContext@@@Z
+??0?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@QAE@PAVXmlReader@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PBG@@QAE@PBG@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@D@@PAD@@QAE@PAD@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QAE@PAE@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QAE@PAG@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@H@@PAH@@QAE@PAH@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QAE@PAPAG@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QAE@PAPBG@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PAU_CONFIG_UPDATE@@@@QAE@PAU_CONFIG_UPDATE@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAE@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QAE@PAU_WINRS_RUN_COMMAND_ARG@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PAU_WSMAN_OPTION@@@@QAE@PAU_WSMAN_OPTION@@@Z
+??0?$AutoCleanup@V?$AutoDeleteVector@X@@PAX@@QAE@PAX@Z
+??0?$AutoCleanup@V?$AutoFree@E@@PAE@@QAE@PAE@Z
+??0?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@@QAE@PAVPacket@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PAUIAppHostAdminManager@@@@QAE@PAUIAppHostAdminManager@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PAUIAppHostChildElementCollection@@@@QAE@PAUIAppHostChildElementCollection@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PAUIAppHostConfigException@@@@QAE@PAUIAppHostConfigException@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PAUIAppHostElement@@@@QAE@PAUIAppHostElement@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PAUIAppHostElementCollection@@@@QAE@PAUIAppHostElementCollection@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PAUIAppHostProperty@@@@QAE@PAUIAppHostProperty@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PAUIAppHostPropertyCollection@@@@QAE@PAUIAppHostPropertyCollection@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QAE@PAUIClientSecurity@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QAE@PAUIEnumWbemClassObject@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QAE@PAUIErrorInfo@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QAE@PAUIUnknown@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QAE@PAUIWbemClassObject@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QAE@PAUIWbemContext@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QAE@PAUIWbemLocator@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QAE@PAUIWbemObjectTextSrc@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QAE@PAUIWbemPath@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QAE@PAUIWbemPathKeyList@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QAE@PAUIWbemQualifierSet@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QAE@PAUIWbemQuery@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QAE@PAUIWbemServices@@@Z
+??0?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PAVApplication@Client@WSMan@@@@QAE@PAVApplication@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAE@PAVCBaseConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@QAE@PAVCClientConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PAVCCommonConfigSettings@@@@QAE@PAVCCommonConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PAVCConfigCacheMap@CBaseConfigCache@@@@QAE@PAVCConfigCacheMap@CBaseConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@QAE@PAVCConfigManager@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PAVCRemoteOperation@@@@QAE@PAVCRemoteOperation@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@QAE@PAVCRemoteSession@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@QAE@PAVCRequestContext@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PAVCServiceCommonConfigSettings@@@@QAE@PAVCServiceCommonConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PAVCServiceConfigCache@@@@QAE@PAVCServiceConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@@QAE@PAVCServiceConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QAE@PAVCWSManEPR@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PAVCWSManGroupPolicyCache@@@@QAE@PAVCWSManGroupPolicyCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@@QAE@PAVCWSManGroupPolicyManager@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PAVCWSManObject@@@@QAE@PAVCWSManObject@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@QAE@PAVCWSManResource@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QAE@PAVCWinRSPluginConfigCache@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@@QAE@PAVCWinRSPluginConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PAVCommand@Client@WSMan@@@@QAE@PAVCommand@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PAVConfigNotification@@@@QAE@PAVConfigNotification@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PAVConnectShellOperation@Client@WSMan@@@@QAE@PAVConnectShellOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PAVCreateShellOperation@Client@WSMan@@@@QAE@PAVCreateShellOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PAVDeleteShellOperation@Client@WSMan@@@@QAE@PAVDeleteShellOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PAVDisconnectOperation@Client@WSMan@@@@QAE@PAVDisconnectOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAE@PAVEnumSinkEx@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAE@PAVGeneralSinkEx@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PAVIISConfigSettings@@@@QAE@PAVIISConfigSettings@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PAVIPCSoapProcessor@@@@QAE@PAVIPCSoapProcessor@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QAE@PAVIRequestContext@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QAE@XZ
+??0?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PAVISubscription@@@@QAE@PAVISubscription@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@QAE@PAVInboundRequestDetails@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PAVReceiveOperation@Client@WSMan@@@@QAE@PAVReceiveOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PAVReconnectOperation@Client@WSMan@@@@QAE@PAVReconnectOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PAVSendOperation@Client@WSMan@@@@QAE@PAVSendOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAE@PAVShell@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VShellInfo@@@@PAVShellInfo@@@@QAE@PAVShellInfo@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PAVSignalOperation@Client@WSMan@@@@QAE@PAVSignalOperation@Client@WSMan@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@@QAE@PAVUserRecord@@@Z
+??0?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PAVWSManHttpListener@@@@QAE@PAVWSManHttpListener@@@Z
+??0?$AutoCleanup@V?$AutoReleaseEx@VHostMappingTableEntry@@@@PAVHostMappingTableEntry@@@@QAE@PAVHostMappingTableEntry@@@Z
+??0?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAE@PAVShell@Client@WSMan@@@Z
+??0?$AutoCleanup@VAutoBstr@@PAG@@QAE@PAG@Z
+??0?$AutoCleanup@VAutoBstr@@PAG@@QAE@XZ
+??0?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QAE@PAG@Z
+??0?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QAE@XZ
+??0?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@QAE@PBU_CERT_CONTEXT@@@Z
+??0?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@QAE@XZ
+??0?$AutoCleanup@VAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@@QAE@PBU_CERT_CHAIN_CONTEXT@@@Z
+??0?$AutoCleanup@VAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@@QAE@XZ
+??0?$AutoCleanup@VAutoCoTaskMemFree@@PAX@@QAE@PAX@Z
+??0?$AutoCleanup@VAutoCoTaskMemFree@@PAX@@QAE@XZ
+??0?$AutoCleanup@VAutoFwXmlCloseParser@@PAX@@QAE@PAX@Z
+??0?$AutoCleanup@VAutoFwXmlCloseParser@@PAX@@QAE@XZ
+??0?$AutoCleanup@VAutoHandle@@PAX@@QAE@PAX@Z
+??0?$AutoCleanup@VAutoHandle@@PAX@@QAE@XZ
+??0?$AutoCleanup@VAutoImpersonateUser@@PAX@@QAE@PAX@Z
+??0?$AutoCleanup@VAutoImpersonateUser@@PAX@@QAE@XZ
+??0?$AutoCleanup@VAutoLibrary@@PAUHINSTANCE__@@@@QAE@PAUHINSTANCE__@@@Z
+??0?$AutoCleanup@VAutoLibrary@@PAUHINSTANCE__@@@@QAE@XZ
+??0?$AutoCleanup@VAutoLocalFree@@PAX@@QAE@PAX@Z
+??0?$AutoCleanup@VAutoLocalFree@@PAX@@QAE@XZ
+??0?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QAE@PAU_MI_Class@@@Z
+??0?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QAE@XZ
+??0?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@QAE@PAU_MI_Instance@@@Z
+??0?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@QAE@XZ
+??0?$AutoCleanup@VAutoObject@@PAUWSMAN_OBJECT@@@@QAE@PAUWSMAN_OBJECT@@@Z
+??0?$AutoCleanup@VAutoObject@@PAUWSMAN_OBJECT@@@@QAE@XZ
+??0?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@QAE@PAUHKEY__@@@Z
+??0?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@QAE@XZ
+??0?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@QAE@PAX@Z
+??0?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@QAE@XZ
+??0?$AutoCleanup@VAutoWaitHandle@@PAX@@QAE@PAX@Z
+??0?$AutoCleanup@VAutoWaitHandle@@PAX@@QAE@XZ
+??0?$AutoDelete@D@@QAE@XZ
+??0?$AutoDelete@G@@QAE@PAG@Z
+??0?$AutoDelete@G@@QAE@XZ
+??0?$AutoDelete@UIPRange@CWSManIPFilter@@@@QAE@XZ
+??0?$AutoDelete@U_SID@@@@QAE@PAU_SID@@@Z
+??0?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@QAE@PAU_WSMAN_STREAM_ID_SET@@@Z
+??0?$AutoDelete@V?$Handle@VISubscription@@@@@@QAE@PAV?$Handle@VISubscription@@@@@Z
+??0?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE@XZ
+??0?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE@XZ
+??0?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@QAE@PAV?$SafeSet@PAVCCertMapping@@@@@Z
+??0?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@QAE@XZ
+??0?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@QAE@PAV?$SafeSet@PAVCShellUriSettings@@@@@Z
+??0?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@QAE@XZ
+??0?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE@XZ
+??0?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@QAE@XZ
+??0?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@QAE@XZ
+??0?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAE@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@Z
+??0?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAE@XZ
+??0?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QAE@XZ
+??0?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QAE@XZ
+??0?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@QAE@XZ
+??0?$AutoDelete@VAdminSid@CSecurity@@@@QAE@PAVAdminSid@CSecurity@@@Z
+??0?$AutoDelete@VBlockedRecord@@@@QAE@XZ
+??0?$AutoDelete@VCBaseConfigCache@@@@QAE@PAVCBaseConfigCache@@@Z
+??0?$AutoDelete@VCCertMapping@@@@QAE@PAVCCertMapping@@@Z
+??0?$AutoDelete@VCConfigChangeSource@@@@QAE@XZ
+??0?$AutoDelete@VCListenerSettings@@@@QAE@PAVCListenerSettings@@@Z
+??0?$AutoDelete@VCObserverConfigChangeErrors@@@@QAE@XZ
+??0?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@QAE@PAVCServiceWatcher@CServiceConfigCache@@@Z
+??0?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@QAE@XZ
+??0?$AutoDelete@VCShellUriSettings@@@@QAE@PAVCShellUriSettings@@@Z
+??0?$AutoDelete@VCWSManEPR@@@@QAE@PAVCWSManEPR@@@Z
+??0?$AutoDelete@VCWSManResource@@@@QAE@PAVCWSManResource@@@Z
+??0?$AutoDelete@VCWSManResource@@@@QAE@XZ
+??0?$AutoDelete@VCertHash@@@@QAE@PAVCertHash@@@Z
+??0?$AutoDelete@VCertHash@@@@QAE@XZ
+??0?$AutoDelete@VConfigUpdate@@@@QAE@PAVConfigUpdate@@@Z
+??0?$AutoDelete@VConfigUpdate@@@@QAE@XZ
+??0?$AutoDelete@VEnumSinkEx@@@@QAE@PAVEnumSinkEx@@@Z
+??0?$AutoDelete@VEnumSinkEx@@@@QAE@XZ
+??0?$AutoDelete@VEventHandler@WSMan@@@@QAE@PAVEventHandler@WSMan@@@Z
+??0?$AutoDelete@VExpiredOperationIdRecord@@@@QAE@PAVExpiredOperationIdRecord@@@Z
+??0?$AutoDelete@VGPApiManager@@@@QAE@XZ
+??0?$AutoDelete@VGeneralSinkEx@@@@QAE@PAVGeneralSinkEx@@@Z
+??0?$AutoDelete@VGeneralSinkEx@@@@QAE@XZ
+??0?$AutoDelete@VIChannelObserverFactory@@@@QAE@PAVIChannelObserverFactory@@@Z
+??0?$AutoDelete@VIChannelObserverFactory@@@@QAE@XZ
+??0?$AutoDelete@VIQueryDASHSMASHInterface@@@@QAE@PAVIQueryDASHSMASHInterface@@@Z
+??0?$AutoDelete@VIQueryDASHSMASHInterface@@@@QAE@XZ
+??0?$AutoDelete@VISpecification@@@@QAE@PAVISpecification@@@Z
+??0?$AutoDelete@VISpecification@@@@QAE@XZ
+??0?$AutoDelete@VInteractiveSid@CSecurity@@@@QAE@PAVInteractiveSid@CSecurity@@@Z
+??0?$AutoDelete@VIpHlpApiDllLoader@@@@QAE@PAVIpHlpApiDllLoader@@@Z
+??0?$AutoDelete@VMachineName@@@@QAE@PAVMachineName@@@Z
+??0?$AutoDelete@VNetworkServiceSid@CSecurity@@@@QAE@PAVNetworkServiceSid@CSecurity@@@Z
+??0?$AutoDelete@VNtDsApiDllLoader@@@@QAE@PAVNtDsApiDllLoader@@@Z
+??0?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@QAE@PAVOptionValue@SessionOptions@Client@WSMan@@@Z
+??0?$AutoDelete@VPacketCreator@@@@QAE@PAVPacketCreator@@@Z
+??0?$AutoDelete@VPacketCreator@@@@QAE@XZ
+??0?$AutoDelete@VPacketParser@@@@QAE@XZ
+??0?$AutoDelete@VResources@Locale@@@@QAE@PAVResources@Locale@@@Z
+??0?$AutoDelete@VRunAsConfiguration@@@@QAE@PAVRunAsConfiguration@@@Z
+??0?$AutoDelete@VSecurityEntry@Catalog@@@@QAE@PAVSecurityEntry@Catalog@@@Z
+??0?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@QAE@PAVSendPacketArgs@RobustConnectionBuffer@@@Z
+??0?$AutoDelete@VServiceSoapProcessor@@@@QAE@XZ
+??0?$AutoDelete@VShell32DllLoader@@@@QAE@PAVShell32DllLoader@@@Z
+??0?$AutoDelete@VShlWApiDllLoader@@@@QAE@PAVShlWApiDllLoader@@@Z
+??0?$AutoDelete@VSubscriptionEnumerator@@@@QAE@XZ
+??0?$AutoDelete@VSubscriptionManager@@@@QAE@PAVSubscriptionManager@@@Z
+??0?$AutoDelete@VTSTRBUFFER@@@@QAE@PAVTSTRBUFFER@@@Z
+??0?$AutoDelete@VTSTRBUFFER@@@@QAE@XZ
+??0?$AutoDelete@VUniqueStringOverflow@@@@QAE@XZ
+??0?$AutoDelete@VUser32DllLoader@@@@QAE@PAVUser32DllLoader@@@Z
+??0?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@QAE@PAVWSMANCONFIGTABLE_IDENTITY@@@Z
+??0?$AutoDelete@VWSManMemCryptManager@@@@QAE@PAVWSManMemCryptManager@@@Z
+??0?$AutoDelete@VWmiEnumContext@@@@QAE@PAVWmiEnumContext@@@Z
+??0?$AutoDelete@VWmiEnumContext@@@@QAE@XZ
+??0?$AutoDelete@VXmlReader@@@@QAE@PAVXmlReader@@@Z
+??0?$AutoDelete@VXmlReader@@@@QAE@XZ
+??0?$AutoDeleteVector@$$CBG@@QAE@XZ
+??0?$AutoDeleteVector@D@@QAE@PAD@Z
+??0?$AutoDeleteVector@D@@QAE@XZ
+??0?$AutoDeleteVector@E@@QAE@PAE@Z
+??0?$AutoDeleteVector@E@@QAE@XZ
+??0?$AutoDeleteVector@G@@QAE@PAG@Z
+??0?$AutoDeleteVector@G@@QAE@XZ
+??0?$AutoDeleteVector@H@@QAE@PAH@Z
+??0?$AutoDeleteVector@PAG@@QAE@PAPAG@Z
+??0?$AutoDeleteVector@PAG@@QAE@XZ
+??0?$AutoDeleteVector@PBG@@QAE@PAPBG@Z
+??0?$AutoDeleteVector@PBG@@QAE@XZ
+??0?$AutoDeleteVector@U_CONFIG_UPDATE@@@@QAE@XZ
+??0?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAE@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@Z
+??0?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAE@XZ
+??0?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@QAE@PAU_WINRS_RUN_COMMAND_ARG@@@Z
+??0?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@QAE@XZ
+??0?$AutoDeleteVector@U_WSMAN_OPTION@@@@QAE@PAU_WSMAN_OPTION@@@Z
+??0?$AutoDeleteVector@U_WSMAN_OPTION@@@@QAE@XZ
+??0?$AutoDeleteVector@X@@QAE@PAX@Z
+??0?$AutoDeleteVector@X@@QAE@XZ
+??0?$AutoFree@E@@QAE@PAE@Z
+??0?$AutoFree@E@@QAE@XZ
+??0?$AutoLocklessItemRecycle@VPacket@@@@QAE@PAVPacket@@@Z
+??0?$AutoLocklessItemRecycle@VPacket@@@@QAE@XZ
+??0?$AutoRelease@UIAppHostAdminManager@@@@QAE@PAUIAppHostAdminManager@@@Z
+??0?$AutoRelease@UIAppHostChildElementCollection@@@@QAE@XZ
+??0?$AutoRelease@UIAppHostConfigException@@@@QAE@PAUIAppHostConfigException@@@Z
+??0?$AutoRelease@UIAppHostElement@@@@QAE@PAUIAppHostElement@@@Z
+??0?$AutoRelease@UIAppHostElement@@@@QAE@XZ
+??0?$AutoRelease@UIAppHostElementCollection@@@@QAE@XZ
+??0?$AutoRelease@UIAppHostProperty@@@@QAE@XZ
+??0?$AutoRelease@UIAppHostPropertyCollection@@@@QAE@XZ
+??0?$AutoRelease@UIClientSecurity@@@@QAE@PAUIClientSecurity@@@Z
+??0?$AutoRelease@UIClientSecurity@@@@QAE@XZ
+??0?$AutoRelease@UIEnumWbemClassObject@@@@QAE@PAUIEnumWbemClassObject@@@Z
+??0?$AutoRelease@UIEnumWbemClassObject@@@@QAE@XZ
+??0?$AutoRelease@UIErrorInfo@@@@QAE@PAUIErrorInfo@@@Z
+??0?$AutoRelease@UIErrorInfo@@@@QAE@XZ
+??0?$AutoRelease@UIUnknown@@@@QAE@PAUIUnknown@@@Z
+??0?$AutoRelease@UIUnknown@@@@QAE@XZ
+??0?$AutoRelease@UIWbemClassObject@@@@QAE@PAUIWbemClassObject@@@Z
+??0?$AutoRelease@UIWbemClassObject@@@@QAE@XZ
+??0?$AutoRelease@UIWbemContext@@@@QAE@PAUIWbemContext@@@Z
+??0?$AutoRelease@UIWbemContext@@@@QAE@XZ
+??0?$AutoRelease@UIWbemLocator@@@@QAE@PAUIWbemLocator@@@Z
+??0?$AutoRelease@UIWbemLocator@@@@QAE@XZ
+??0?$AutoRelease@UIWbemObjectTextSrc@@@@QAE@PAUIWbemObjectTextSrc@@@Z
+??0?$AutoRelease@UIWbemObjectTextSrc@@@@QAE@XZ
+??0?$AutoRelease@UIWbemPath@@@@QAE@PAUIWbemPath@@@Z
+??0?$AutoRelease@UIWbemPath@@@@QAE@XZ
+??0?$AutoRelease@UIWbemPathKeyList@@@@QAE@PAUIWbemPathKeyList@@@Z
+??0?$AutoRelease@UIWbemPathKeyList@@@@QAE@XZ
+??0?$AutoRelease@UIWbemQualifierSet@@@@QAE@PAUIWbemQualifierSet@@@Z
+??0?$AutoRelease@UIWbemQualifierSet@@@@QAE@XZ
+??0?$AutoRelease@UIWbemQuery@@@@QAE@PAUIWbemQuery@@@Z
+??0?$AutoRelease@UIWbemQuery@@@@QAE@XZ
+??0?$AutoRelease@UIWbemServices@@@@QAE@PAUIWbemServices@@@Z
+??0?$AutoRelease@UIWbemServices@@@@QAE@XZ
+??0?$AutoRelease@VApplication@Client@WSMan@@@@QAE@XZ
+??0?$AutoRelease@VCBaseConfigCache@@@@QAE@PAVCBaseConfigCache@@@Z
+??0?$AutoRelease@VCClientConfigSettings@@@@QAE@PAVCClientConfigSettings@@@Z
+??0?$AutoRelease@VCClientConfigSettings@@@@QAE@XZ
+??0?$AutoRelease@VCCommonConfigSettings@@@@QAE@PAVCCommonConfigSettings@@@Z
+??0?$AutoRelease@VCCommonConfigSettings@@@@QAE@XZ
+??0?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@QAE@PAVCConfigCacheMap@CBaseConfigCache@@@Z
+??0?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@QAE@XZ
+??0?$AutoRelease@VCConfigManager@@@@QAE@PAVCConfigManager@@@Z
+??0?$AutoRelease@VCConfigManager@@@@QAE@XZ
+??0?$AutoRelease@VCRemoteOperation@@@@QAE@PAVCRemoteOperation@@@Z
+??0?$AutoRelease@VCRemoteSession@@@@QAE@PAVCRemoteSession@@@Z
+??0?$AutoRelease@VCRemoteSession@@@@QAE@XZ
+??0?$AutoRelease@VCRequestContext@@@@QAE@PAVCRequestContext@@@Z
+??0?$AutoRelease@VCRequestContext@@@@QAE@XZ
+??0?$AutoRelease@VCServiceCommonConfigSettings@@@@QAE@PAVCServiceCommonConfigSettings@@@Z
+??0?$AutoRelease@VCServiceCommonConfigSettings@@@@QAE@XZ
+??0?$AutoRelease@VCServiceConfigCache@@@@QAE@PAVCServiceConfigCache@@@Z
+??0?$AutoRelease@VCServiceConfigCache@@@@QAE@XZ
+??0?$AutoRelease@VCServiceConfigSettings@@@@QAE@PAVCServiceConfigSettings@@@Z
+??0?$AutoRelease@VCServiceConfigSettings@@@@QAE@XZ
+??0?$AutoRelease@VCWSManEPR@@@@QAE@PAVCWSManEPR@@@Z
+??0?$AutoRelease@VCWSManEPR@@@@QAE@XZ
+??0?$AutoRelease@VCWSManGroupPolicyCache@@@@QAE@PAVCWSManGroupPolicyCache@@@Z
+??0?$AutoRelease@VCWSManGroupPolicyManager@@@@QAE@PAVCWSManGroupPolicyManager@@@Z
+??0?$AutoRelease@VCWSManObject@@@@QAE@PAVCWSManObject@@@Z
+??0?$AutoRelease@VCWSManResource@@@@QAE@PAVCWSManResource@@@Z
+??0?$AutoRelease@VCWSManResource@@@@QAE@XZ
+??0?$AutoRelease@VCWinRSPluginConfigCache@@@@QAE@PAVCWinRSPluginConfigCache@@@Z
+??0?$AutoRelease@VCWinRSPluginConfigCache@@@@QAE@XZ
+??0?$AutoRelease@VCWinRSPluginConfigSettings@@@@QAE@PAVCWinRSPluginConfigSettings@@@Z
+??0?$AutoRelease@VCommand@Client@WSMan@@@@QAE@PAVCommand@Client@WSMan@@@Z
+??0?$AutoRelease@VConfigNotification@@@@QAE@PAVConfigNotification@@@Z
+??0?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@QAE@PAVConnectShellOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@QAE@PAVCreateShellOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@QAE@PAVDeleteShellOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@QAE@PAVDisconnectOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VEnumSinkEx@@@@QAE@PAVEnumSinkEx@@@Z
+??0?$AutoRelease@VEnumSinkEx@@@@QAE@XZ
+??0?$AutoRelease@VGeneralSinkEx@@@@QAE@PAVGeneralSinkEx@@@Z
+??0?$AutoRelease@VGeneralSinkEx@@@@QAE@XZ
+??0?$AutoRelease@VIISConfigSettings@@@@QAE@XZ
+??0?$AutoRelease@VIPCSoapProcessor@@@@QAE@PAVIPCSoapProcessor@@@Z
+??0?$AutoRelease@VIRequestContext@@@@QAE@PAVIRequestContext@@@Z
+??0?$AutoRelease@VIRequestContext@@@@QAE@XZ
+??0?$AutoRelease@VISubscription@@@@QAE@PAVISubscription@@@Z
+??0?$AutoRelease@VInboundRequestDetails@@@@QAE@XZ
+??0?$AutoRelease@VReceiveOperation@Client@WSMan@@@@QAE@PAVReceiveOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VReconnectOperation@Client@WSMan@@@@QAE@PAVReconnectOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VSendOperation@Client@WSMan@@@@QAE@PAVSendOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VShell@Client@WSMan@@@@QAE@PAVShell@Client@WSMan@@@Z
+??0?$AutoRelease@VShellInfo@@@@QAE@XZ
+??0?$AutoRelease@VSignalOperation@Client@WSMan@@@@QAE@PAVSignalOperation@Client@WSMan@@@Z
+??0?$AutoRelease@VUserRecord@@@@QAE@XZ
+??0?$AutoRelease@VWSManHttpListener@@@@QAE@PAVWSManHttpListener@@@Z
+??0?$AutoReleaseEx@VHostMappingTableEntry@@@@QAE@XZ
+??0?$AutoReleaseEx@VShell@Client@WSMan@@@@QAE@PAVShell@Client@WSMan@@@Z
+??0?$ILoader@VAdminSid@CSecurity@@@@QAE@P8AdminSid@CSecurity@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VEventHandler@WSMan@@@@QAE@P8EventHandler@WSMan@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VInteractiveSid@CSecurity@@@@QAE@P8InteractiveSid@CSecurity@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VIpHlpApiDllLoader@@@@QAE@P8IpHlpApiDllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VMachineName@@@@QAE@P8MachineName@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VNetworkServiceSid@CSecurity@@@@QAE@P8NetworkServiceSid@CSecurity@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VNtDsApiDllLoader@@@@QAE@P8NtDsApiDllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VResources@Locale@@@@QAE@P8Resources@Locale@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VShell32DllLoader@@@@QAE@P8Shell32DllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VShlWApiDllLoader@@@@QAE@P8ShlWApiDllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VSubscriptionManager@@@@QAE@P8SubscriptionManager@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VUser32DllLoader@@@@QAE@P8User32DllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$ILoader@VWSManMemCryptManager@@@@QAE@P8WSManMemCryptManager@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$Loader@VAdminSid@CSecurity@@$00@@QAE@XZ
+??0?$Loader@VEventHandler@WSMan@@$00@@QAE@XZ
+??0?$Loader@VInteractiveSid@CSecurity@@$00@@QAE@XZ
+??0?$Loader@VIpHlpApiDllLoader@@$00@@QAE@XZ
+??0?$Loader@VMachineName@@$00@@QAE@XZ
+??0?$Loader@VNetworkServiceSid@CSecurity@@$00@@QAE@XZ
+??0?$Loader@VNtDsApiDllLoader@@$00@@QAE@XZ
+??0?$Loader@VResources@Locale@@$0A@@@QAE@XZ
+??0?$Loader@VShell32DllLoader@@$00@@QAE@XZ
+??0?$Loader@VShlWApiDllLoader@@$00@@QAE@XZ
+??0?$Loader@VUser32DllLoader@@$00@@QAE@XZ
+??0?$Loader@VWSManMemCryptManager@@$00@@QAE@XZ
+??0?$LoaderSerializer@VAdminSid@CSecurity@@$00@@QAE@P8AdminSid@CSecurity@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VEventHandler@WSMan@@$00@@QAE@P8EventHandler@WSMan@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VInteractiveSid@CSecurity@@$00@@QAE@P8InteractiveSid@CSecurity@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VIpHlpApiDllLoader@@$00@@QAE@P8IpHlpApiDllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VMachineName@@$00@@QAE@P8MachineName@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VNetworkServiceSid@CSecurity@@$00@@QAE@P8NetworkServiceSid@CSecurity@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VNtDsApiDllLoader@@$00@@QAE@P8NtDsApiDllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VResources@Locale@@$0A@@@QAE@P8Resources@Locale@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VShell32DllLoader@@$00@@QAE@P8Shell32DllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VShlWApiDllLoader@@$00@@QAE@P8ShlWApiDllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VSubscriptionManager@@$01@@QAE@P8SubscriptionManager@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VUser32DllLoader@@$00@@QAE@P8User32DllLoader@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$LoaderSerializer@VWSManMemCryptManager@@$00@@QAE@P8WSManMemCryptManager@@AE_NAAVIRequestContext@@@Z1@Z
+??0?$PacketElement@K@PacketParser@@QAE@XZ
+??0?$PacketElement@PAU_FWXML_ELEMENT@@@PacketParser@@QAE@XZ
+??0?$PacketElement@PBG@PacketParser@@QAE@XZ
+??0?$PacketElement@_K@PacketParser@@QAE@XZ
+??0?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@QAE@XZ
+??0?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE@XZ
+??0?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@QAE@XZ
+??0?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@QAE@XZ
+??0?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAE@XZ
+??0?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAE@XZ
+??0?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAE@XZ
+??0?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QAE@XZ
+??0?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE@XZ
+??0?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAE@XZ
+??0?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAE@XZ
+??0?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAE@XZ
+??0?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE@XZ
+??0?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAE@XZ
+??0?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QAE@AAV?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QAE@AAV?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QAE@AAV?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Iterator@PAXUEmpty@@@@QAE@AAV?$SafeMap@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@_N@Z
+??0?$SafeMap_Iterator@UPluginKey@@K@@QAE@AAV?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@_N@Z
+??0?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@QAE@AAV?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@_N@Z
+??0?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QAE@AAV?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@_N@Z
+??0?$SafeMap_Iterator@VKey@Locale@@K@@QAE@AAV?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@_N@Z
+??0?$SafeMap_Iterator@VStringKeyCI@@K@@QAE@AAV?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@_N@Z
+??0?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QAE@AAV?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@_N@Z
+??0?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QAE@AAV?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@_N@Z
+??0?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@QAE@AAV?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@_N@Z
+??0?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAE@AAV?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@_N@Z
+??0?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@QAE@AAV?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@_N@Z
+??0?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@QAE@ABV?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@QAE@ABV?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@_N@Z
+??0?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@QAE@ABV?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE@ABV?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@_N@Z
+??0?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@QAE@ABV?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@_N@Z
+??0?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@QAE@ABV?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@_N@Z
+??0?$SafeMap_Lock@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@QAE@ABV?$SafeMap@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@_N@Z
+??0?$SafeMap_Lock@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@QAE@ABV?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@_N@Z
+??0?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAE@ABV?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@_N@Z
+??0?$SafeMap_Lock@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAE@ABV?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@_N@Z
+??0?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAE@ABV?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@_N@Z
+??0?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QAE@ABV?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE@ABV?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QAE@ABV?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAE@ABV?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAE@ABV?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@_N@Z
+??0?$SafeMap_Lock@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAE@ABV?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@_N@Z
+??0?$SafeMap_Lock@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE@ABV?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@_N@Z
+??0?$SafeMap_Lock@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAE@ABV?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@_N@Z
+??0?$SafeSet@PAVCCertMapping@@@@QAE@XZ
+??0?$SafeSet@PAVCListenerOperation@@@@QAE@XZ
+??0?$SafeSet@PAVCShellUriSettings@@@@QAE@XZ
+??0?$SafeSet@PAX@@QAE@XZ
+??0?$SafeSet_Iterator@PAVCCertMapping@@@@QAE@AAV?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@_N@Z
+??0?$SafeSet_Iterator@PAVCCertMapping@@@@QAE@AAV?$SafeSet@PAVCCertMapping@@@@@Z
+??0?$SafeSet_Iterator@PAVCListenerOperation@@@@QAE@AAV?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@_N@Z
+??0?$SafeSet_Iterator@PAVCListenerOperation@@@@QAE@AAV?$SafeSet@PAVCListenerOperation@@@@@Z
+??0?$SafeSet_Iterator@PAVCShellUriSettings@@@@QAE@AAV?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@_N@Z
+??0?$SafeSet_Iterator@PAX@@QAE@AAV?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@_N@Z
+??0?$SimpleQueue@T_LARGE_INTEGER@@@@QAE@XZ
+??0AutoBstr@@QAE@PAG@Z
+??0AutoBstr@@QAE@XZ
+??0AutoBstrNoAlloc@@QAE@PAG@Z
+??0AutoBstrNoAlloc@@QAE@XZ
+??0AutoCertContext@@QAE@PBU_CERT_CONTEXT@@@Z
+??0AutoCertContext@@QAE@XZ
+??0AutoChainContext@@QAE@PBU_CERT_CHAIN_CONTEXT@@@Z
+??0AutoChainContext@@QAE@XZ
+??0AutoCoTaskMemFree@@QAE@PAX@Z
+??0AutoCoTaskMemFree@@QAE@XZ
+??0AutoFwXmlCloseParser@@QAE@PAX@Z
+??0AutoFwXmlCloseParser@@QAE@XZ
+??0AutoHandle@@QAE@PAX@Z
+??0AutoHandle@@QAE@XZ
+??0AutoImpersonateUser@@QAE@PAX@Z
+??0AutoImpersonateUser@@QAE@XZ
+??0AutoLibrary@@QAE@PAUHINSTANCE__@@@Z
+??0AutoLibrary@@QAE@XZ
+??0AutoLocalFree@@QAE@PAX@Z
+??0AutoLocalFree@@QAE@XZ
+??0AutoMIClass@@QAE@PAU_MI_Class@@@Z
+??0AutoMIClass@@QAE@XZ
+??0AutoMIInstance@@QAE@PAU_MI_Instance@@@Z
+??0AutoMIInstance@@QAE@XZ
+??0AutoObject@@QAE@PAUWSMAN_OBJECT@@@Z
+??0AutoObject@@QAE@XZ
+??0AutoRegKey@@QAE@PAUHKEY__@@@Z
+??0AutoRegKey@@QAE@XZ
+??0AutoSecurityDescriptor@@QAE@PAX@Z
+??0AutoSecurityDescriptor@@QAE@XZ
+??0AutoWaitHandle@@QAE@PAX@Z
+??0AutoWaitHandle@@QAE@XZ
+??0BufferFormatter@@QAE@PAEK@Z
+??0BufferFormatter@@QAE@XZ
+??0CBaseConfigCache@@IAE@W4ConfigLocation@CConfigChangeSource@@PAVFastLock@@PAVCConfigCacheMap@0@@Z
+??0CClientConfigCache@@AAE@XZ
+??0CConfigManager@@AAE@XZ
+??0CErrorContext@@QAE@_N@Z
+??0CRequestContext@@QAE@PBG@Z
+??0CRequestContext@@QAE@XZ
+??0CResourceAlias@@QAE@PBG@Z
+??0CServiceConfigCache@@AAE@XZ
+??0CServiceWatcher@CServiceConfigCache@@AAE@PAV1@PAVIServiceConfigObserver@@@Z
+??0CWSManCriticalSection@@QAE@XZ
+??0CWSManCriticalSectionWithConditionVar@@QAE@XZ
+??0CWSManEPR@@QAE@H@Z
+??0CWSManGroupPolicyManager@@AAE@XZ
+??0CWSManResource@@QAE@H@Z
+??0CWSManResourceNoResourceUri@@QAE@H@Z
+??0CWSManSecurityUI@@QAE@XZ
+??0CWinRSPluginConfigCache@@AAE@XZ
+??0ChildLifeTimeManager@@QAE@ABV0@@Z
+??0ChildLifeTimeManager@@QAE@XZ
+??0CircularBufferFormatter@@QAE@XZ
+??0ConfigRegistry@@IAE@XZ
+??0EtwCorrelationHelper@@QAE@ABV0@@Z
+??0EventHandler@WSMan@@QAE@XZ
+??0ExtendedSemantic@@QAE@K@Z
+??0FastLock@@QAE@XZ
+??0Fragment@PacketParser@@QAE@XZ
+??0IConfigChangeObserver@@QAE@ABV0@@Z
+??0IConfigChangeObserver@@QAE@XZ
+??0ILifeTimeMgmt@@QAE@ABV0@@Z
+??0ILifeTimeMgmt@@QAE@XZ
+??0IRequestContext@@IAE@XZ
+??0IWSManGroupPolicyObserver@@QAE@ABV0@@Z
+??0IWSManGroupPolicyObserver@@QAE@XZ
+??0IWSManGroupPolicyPublisher@@QAE@ABV0@@Z
+??0IWSManGroupPolicyPublisher@@QAE@XZ
+??0Locale@@QAE@ABV0@@Z
+??0Locale@@QAE@PAVIRequestContext@@@Z
+??0Locale@@QAE@XZ
+??0MessageId@PacketParser@@QAE@XZ
+??0NotUnderstandSoapHeader@PacketParser@@QAE@XZ
+??0OnHTTPInitialize@@QAE@XZ
+??0OperationId@PacketParser@@QAE@XZ
+??0OwnLock@@QAE@AAVFastLock@@@Z
+??0PacketFormatter@@QAE@XZ
+??0PacketParser@@QAE@XZ
+??0RBUFFER@@QAE@I@Z
+??0RBUFFER@@QAE@PAEI@Z
+??0ReferenceParameters@PacketParser@@QAE@XZ
+??0SBUFFER@@QAE@XZ
+??0SessionId@PacketParser@@QAE@XZ
+??0ShareLock@@QAE@AAVFastLock@@@Z
+??0SoapSemanticConverter@@QAE@XZ
+??0TSTRBUFFER@@QAE@XZ
+??0UserAuthzRecord@@QAE@$$QAV0@@Z
+??0UserAuthzRecord@@QAE@ABV0@@Z
+??0UserAuthzRecord@@QAE@XZ
+??0UserRecord@@QAE@XZ
+??0XmlReader@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@D@@PAD@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@G@@PAG@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PAUIPRange@CWSManIPFilter@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@U_SID@@@@PAU_SID@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PAU_WSMAN_STREAM_ID_SET@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PAV?$Handle@VISubscription@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@PAV?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCollector@@@@@@PAV?$SafeSet_Iterator@PAVCollector@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVHostOperation@@@@@@PAV?$SafeSet_Iterator@PAVHostOperation@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@PAV?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@PAV?$SimpleStack@VCListenerOperation@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@PAV?$SimpleStack@VShellHostEntry@@@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$queue@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@PAV?$queue@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$vector@PAVCWSManRequest@@V?$transport_allocator@PAVCWSManRequest@@@@@std@@@@PAV?$vector@PAVCWSManRequest@@V?$transport_allocator@PAVCWSManRequest@@@@@std@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@V?$vector@PAVWSManHttpSenderConnection@@V?$transport_allocator@PAVWSManHttpSenderConnection@@@@@std@@@@PAV?$vector@PAVWSManHttpSenderConnection@@V?$transport_allocator@PAVWSManHttpSenderConnection@@@@@std@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PAVAdminSid@CSecurity@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PAVCCertMapping@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PAVCConfigChangeSource@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PAVCListenerSettings@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PAVCObserverConfigChangeErrors@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PAVCShellUriSettings@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PAVCWSManEPR@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PAVCertHash@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PAVEventHandler@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PAVExpiredOperationIdRecord@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PAVGPApiManager@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PAVIChannelObserverFactory@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PAVInteractiveSid@CSecurity@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PAVIpHlpApiDllLoader@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PAVMachineName@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@PAVMasterReceiveData@CListenerReceive@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PAVNetworkServiceSid@CSecurity@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PAVNtDsApiDllLoader@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PAVPacketParser@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PAVResources@Locale@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PAVRunAsConfiguration@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PAVSendPacketArgs@RobustConnectionBuffer@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PAVShell32DllLoader@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PAVShlWApiDllLoader@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PAVSubscriptionEnumerator@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PAVSubscriptionManager@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PAVUniqueStringOverflow@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PAVUser32DllLoader@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PAVWSMANCONFIGTABLE_IDENTITY@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PAVWSManMemCryptManager@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PBG@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@D@@PAD@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@H@@PAH@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PAU_CONFIG_UPDATE@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PAU_WSMAN_OPTION@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoDeleteVector@X@@PAX@@QAE@XZ
+??1?$AutoCleanup@V?$AutoFree@E@@PAE@@QAE@XZ
+??1?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PAUIAppHostAdminManager@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PAUIAppHostChildElementCollection@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PAUIAppHostConfigException@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PAUIAppHostElement@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PAUIAppHostElementCollection@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PAUIAppHostProperty@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PAUIAppHostPropertyCollection@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PAVApplication@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCClientConfigCache@@@@PAVCClientConfigCache@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PAVCCommonConfigSettings@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PAVCConfigCacheMap@CBaseConfigCache@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCListenerCommand@@@@PAVCListenerCommand@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCListenerMasterOperation@@@@PAVCListenerMasterOperation@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCListenerReceive@@@@PAVCListenerReceive@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCListenerShell@@@@PAVCListenerShell@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PAVCRemoteOperation@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PAVCServiceCommonConfigSettings@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PAVCServiceConfigCache@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PAVCWSManGroupPolicyCache@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PAVCWSManObject@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWSManSession@@@@PAVCWSManSession@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PAVCommand@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PAVConfigNotification@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PAVConnectShellOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PAVCreateShellOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PAVDeleteShellOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PAVDisconnectOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VHostMappingTable@@@@PAVHostMappingTable@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PAVIISConfigSettings@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PAVIPCSoapProcessor@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PAVISubscription@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VProxyManager@Client@WSMan@@@@PAVProxyManager@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VProxySelection@Client@WSMan@@@@PAVProxySelection@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VPushSubscribeOperation@@@@PAVPushSubscribeOperation@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VPushSubscription@@@@PAVPushSubscription@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PAVReceiveOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PAVReconnectOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PAVSendOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VShellInfo@@@@PAVShellInfo@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PAVSignalOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PAVWSManHttpListener@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoReleaseEx@VHostMappingTableEntry@@@@PAVHostMappingTableEntry@@@@QAE@XZ
+??1?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAE@XZ
+??1?$AutoCleanup@VAutoBstr@@PAG@@QAE@XZ
+??1?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QAE@XZ
+??1?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@QAE@XZ
+??1?$AutoCleanup@VAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@@QAE@XZ
+??1?$AutoCleanup@VAutoCoTaskMemFree@@PAX@@QAE@XZ
+??1?$AutoCleanup@VAutoFwXmlCloseParser@@PAX@@QAE@XZ
+??1?$AutoCleanup@VAutoHandle@@PAX@@QAE@XZ
+??1?$AutoCleanup@VAutoImpersonateUser@@PAX@@QAE@XZ
+??1?$AutoCleanup@VAutoLibrary@@PAUHINSTANCE__@@@@QAE@XZ
+??1?$AutoCleanup@VAutoLocalFree@@PAX@@QAE@XZ
+??1?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QAE@XZ
+??1?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@QAE@XZ
+??1?$AutoCleanup@VAutoObject@@PAUWSMAN_OBJECT@@@@QAE@XZ
+??1?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@QAE@XZ
+??1?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@QAE@XZ
+??1?$AutoCleanup@VAutoWaitHandle@@PAX@@QAE@XZ
+??1?$AutoDelete@D@@QAE@XZ
+??1?$AutoDelete@G@@QAE@XZ
+??1?$AutoDelete@UIPRange@CWSManIPFilter@@@@QAE@XZ
+??1?$AutoDelete@U_SID@@@@QAE@XZ
+??1?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@QAE@XZ
+??1?$AutoDelete@V?$Handle@VISubscription@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeSet_Iterator@PAVCollector@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeSet_Iterator@PAVHostOperation@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@QAE@XZ
+??1?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@QAE@XZ
+??1?$AutoDelete@V?$queue@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@QAE@XZ
+??1?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAE@XZ
+??1?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QAE@XZ
+??1?$AutoDelete@V?$vector@PAVCWSManRequest@@V?$transport_allocator@PAVCWSManRequest@@@@@std@@@@QAE@XZ
+??1?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QAE@XZ
+??1?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@QAE@XZ
+??1?$AutoDelete@V?$vector@PAVWSManHttpSenderConnection@@V?$transport_allocator@PAVWSManHttpSenderConnection@@@@@std@@@@QAE@XZ
+??1?$AutoDelete@VAdminSid@CSecurity@@@@QAE@XZ
+??1?$AutoDelete@VBlockedRecord@@@@QAE@XZ
+??1?$AutoDelete@VCBaseConfigCache@@@@QAE@XZ
+??1?$AutoDelete@VCCertMapping@@@@QAE@XZ
+??1?$AutoDelete@VCConfigChangeSource@@@@QAE@XZ
+??1?$AutoDelete@VCListenerSettings@@@@QAE@XZ
+??1?$AutoDelete@VCObserverConfigChangeErrors@@@@QAE@XZ
+??1?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@QAE@XZ
+??1?$AutoDelete@VCShellUriSettings@@@@QAE@XZ
+??1?$AutoDelete@VCWSManEPR@@@@QAE@XZ
+??1?$AutoDelete@VCWSManResource@@@@QAE@XZ
+??1?$AutoDelete@VCertHash@@@@QAE@XZ
+??1?$AutoDelete@VConfigUpdate@@@@QAE@XZ
+??1?$AutoDelete@VEnumSinkEx@@@@QAE@XZ
+??1?$AutoDelete@VEventHandler@WSMan@@@@QAE@XZ
+??1?$AutoDelete@VExpiredOperationIdRecord@@@@QAE@XZ
+??1?$AutoDelete@VGPApiManager@@@@QAE@XZ
+??1?$AutoDelete@VGeneralSinkEx@@@@QAE@XZ
+??1?$AutoDelete@VIChannelObserverFactory@@@@QAE@XZ
+??1?$AutoDelete@VIQueryDASHSMASHInterface@@@@QAE@XZ
+??1?$AutoDelete@VISpecification@@@@QAE@XZ
+??1?$AutoDelete@VInteractiveSid@CSecurity@@@@QAE@XZ
+??1?$AutoDelete@VIpHlpApiDllLoader@@@@QAE@XZ
+??1?$AutoDelete@VMachineName@@@@QAE@XZ
+??1?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@QAE@XZ
+??1?$AutoDelete@VNetworkServiceSid@CSecurity@@@@QAE@XZ
+??1?$AutoDelete@VNtDsApiDllLoader@@@@QAE@XZ
+??1?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@QAE@XZ
+??1?$AutoDelete@VPacketCreator@@@@QAE@XZ
+??1?$AutoDelete@VPacketParser@@@@QAE@XZ
+??1?$AutoDelete@VResources@Locale@@@@QAE@XZ
+??1?$AutoDelete@VRunAsConfiguration@@@@QAE@XZ
+??1?$AutoDelete@VSecurityEntry@Catalog@@@@QAE@XZ
+??1?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@QAE@XZ
+??1?$AutoDelete@VServiceSoapProcessor@@@@QAE@XZ
+??1?$AutoDelete@VShell32DllLoader@@@@QAE@XZ
+??1?$AutoDelete@VShlWApiDllLoader@@@@QAE@XZ
+??1?$AutoDelete@VSubscriptionEnumerator@@@@QAE@XZ
+??1?$AutoDelete@VSubscriptionManager@@@@QAE@XZ
+??1?$AutoDelete@VTSTRBUFFER@@@@QAE@XZ
+??1?$AutoDelete@VUniqueStringOverflow@@@@QAE@XZ
+??1?$AutoDelete@VUser32DllLoader@@@@QAE@XZ
+??1?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@QAE@XZ
+??1?$AutoDelete@VWSManMemCryptManager@@@@QAE@XZ
+??1?$AutoDelete@VWmiEnumContext@@@@QAE@XZ
+??1?$AutoDelete@VXmlReader@@@@QAE@XZ
+??1?$AutoDeleteVector@$$CBG@@QAE@XZ
+??1?$AutoDeleteVector@D@@QAE@XZ
+??1?$AutoDeleteVector@E@@QAE@XZ
+??1?$AutoDeleteVector@G@@QAE@XZ
+??1?$AutoDeleteVector@H@@QAE@XZ
+??1?$AutoDeleteVector@PAG@@QAE@XZ
+??1?$AutoDeleteVector@PBG@@QAE@XZ
+??1?$AutoDeleteVector@U_CONFIG_UPDATE@@@@QAE@XZ
+??1?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAE@XZ
+??1?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@QAE@XZ
+??1?$AutoDeleteVector@U_WSMAN_OPTION@@@@QAE@XZ
+??1?$AutoDeleteVector@X@@QAE@XZ
+??1?$AutoFree@E@@QAE@XZ
+??1?$AutoLocklessItemRecycle@VPacket@@@@QAE@XZ
+??1?$AutoRelease@UIAppHostAdminManager@@@@QAE@XZ
+??1?$AutoRelease@UIAppHostChildElementCollection@@@@QAE@XZ
+??1?$AutoRelease@UIAppHostConfigException@@@@QAE@XZ
+??1?$AutoRelease@UIAppHostElement@@@@QAE@XZ
+??1?$AutoRelease@UIAppHostElementCollection@@@@QAE@XZ
+??1?$AutoRelease@UIAppHostProperty@@@@QAE@XZ
+??1?$AutoRelease@UIAppHostPropertyCollection@@@@QAE@XZ
+??1?$AutoRelease@UIClientSecurity@@@@QAE@XZ
+??1?$AutoRelease@UIEnumWbemClassObject@@@@QAE@XZ
+??1?$AutoRelease@UIErrorInfo@@@@QAE@XZ
+??1?$AutoRelease@UIUnknown@@@@QAE@XZ
+??1?$AutoRelease@UIWbemClassObject@@@@QAE@XZ
+??1?$AutoRelease@UIWbemContext@@@@QAE@XZ
+??1?$AutoRelease@UIWbemLocator@@@@QAE@XZ
+??1?$AutoRelease@UIWbemObjectTextSrc@@@@QAE@XZ
+??1?$AutoRelease@UIWbemPath@@@@QAE@XZ
+??1?$AutoRelease@UIWbemPathKeyList@@@@QAE@XZ
+??1?$AutoRelease@UIWbemQualifierSet@@@@QAE@XZ
+??1?$AutoRelease@UIWbemQuery@@@@QAE@XZ
+??1?$AutoRelease@UIWbemServices@@@@QAE@XZ
+??1?$AutoRelease@VApplication@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VCBaseConfigCache@@@@QAE@XZ
+??1?$AutoRelease@VCClientConfigCache@@@@QAE@XZ
+??1?$AutoRelease@VCClientConfigSettings@@@@QAE@XZ
+??1?$AutoRelease@VCCommonConfigSettings@@@@QAE@XZ
+??1?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@QAE@XZ
+??1?$AutoRelease@VCConfigManager@@@@QAE@XZ
+??1?$AutoRelease@VCListenerCommand@@@@QAE@XZ
+??1?$AutoRelease@VCListenerMasterOperation@@@@QAE@XZ
+??1?$AutoRelease@VCListenerReceive@@@@QAE@XZ
+??1?$AutoRelease@VCListenerShell@@@@QAE@XZ
+??1?$AutoRelease@VCRemoteOperation@@@@QAE@XZ
+??1?$AutoRelease@VCRemoteSession@@@@QAE@XZ
+??1?$AutoRelease@VCRequestContext@@@@QAE@XZ
+??1?$AutoRelease@VCServiceCommonConfigSettings@@@@QAE@XZ
+??1?$AutoRelease@VCServiceConfigCache@@@@QAE@XZ
+??1?$AutoRelease@VCServiceConfigSettings@@@@QAE@XZ
+??1?$AutoRelease@VCWSManEPR@@@@QAE@XZ
+??1?$AutoRelease@VCWSManGroupPolicyCache@@@@QAE@XZ
+??1?$AutoRelease@VCWSManGroupPolicyManager@@@@QAE@XZ
+??1?$AutoRelease@VCWSManObject@@@@QAE@XZ
+??1?$AutoRelease@VCWSManResource@@@@QAE@XZ
+??1?$AutoRelease@VCWSManSession@@@@QAE@XZ
+??1?$AutoRelease@VCWinRSPluginConfigCache@@@@QAE@XZ
+??1?$AutoRelease@VCWinRSPluginConfigSettings@@@@QAE@XZ
+??1?$AutoRelease@VCommand@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VConfigNotification@@@@QAE@XZ
+??1?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VEnumSinkEx@@@@QAE@XZ
+??1?$AutoRelease@VGeneralSinkEx@@@@QAE@XZ
+??1?$AutoRelease@VHostMappingTable@@@@QAE@XZ
+??1?$AutoRelease@VIISConfigSettings@@@@QAE@XZ
+??1?$AutoRelease@VIPCSoapProcessor@@@@QAE@XZ
+??1?$AutoRelease@VIRequestContext@@@@QAE@XZ
+??1?$AutoRelease@VISubscription@@@@QAE@XZ
+??1?$AutoRelease@VInboundRequestDetails@@@@QAE@XZ
+??1?$AutoRelease@VProxyManager@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VProxySelection@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VPushSubscribeOperation@@@@QAE@XZ
+??1?$AutoRelease@VPushSubscription@@@@QAE@XZ
+??1?$AutoRelease@VReceiveOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VReconnectOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VSendOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VShell@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VShellInfo@@@@QAE@XZ
+??1?$AutoRelease@VSignalOperation@Client@WSMan@@@@QAE@XZ
+??1?$AutoRelease@VUserRecord@@@@QAE@XZ
+??1?$AutoRelease@VWSManHttpListener@@@@QAE@XZ
+??1?$AutoReleaseEx@VHostMappingTableEntry@@@@QAE@XZ
+??1?$AutoReleaseEx@VShell@Client@WSMan@@@@QAE@XZ
+??1?$ILoader@VAdminSid@CSecurity@@@@QAE@XZ
+??1?$ILoader@VEventHandler@WSMan@@@@QAE@XZ
+??1?$ILoader@VInteractiveSid@CSecurity@@@@QAE@XZ
+??1?$ILoader@VIpHlpApiDllLoader@@@@QAE@XZ
+??1?$ILoader@VMachineName@@@@QAE@XZ
+??1?$ILoader@VNetworkServiceSid@CSecurity@@@@QAE@XZ
+??1?$ILoader@VNtDsApiDllLoader@@@@QAE@XZ
+??1?$ILoader@VResources@Locale@@@@QAE@XZ
+??1?$ILoader@VShell32DllLoader@@@@QAE@XZ
+??1?$ILoader@VShlWApiDllLoader@@@@QAE@XZ
+??1?$ILoader@VSubscriptionManager@@@@QAE@XZ
+??1?$ILoader@VUser32DllLoader@@@@QAE@XZ
+??1?$ILoader@VWSManMemCryptManager@@@@QAE@XZ
+??1?$Loader@VAdminSid@CSecurity@@$00@@QAE@XZ
+??1?$Loader@VEventHandler@WSMan@@$00@@QAE@XZ
+??1?$Loader@VInteractiveSid@CSecurity@@$00@@QAE@XZ
+??1?$Loader@VIpHlpApiDllLoader@@$00@@QAE@XZ
+??1?$Loader@VMachineName@@$00@@QAE@XZ
+??1?$Loader@VNetworkServiceSid@CSecurity@@$00@@QAE@XZ
+??1?$Loader@VNtDsApiDllLoader@@$00@@QAE@XZ
+??1?$Loader@VResources@Locale@@$0A@@@QAE@XZ
+??1?$Loader@VShell32DllLoader@@$00@@QAE@XZ
+??1?$Loader@VShlWApiDllLoader@@$00@@QAE@XZ
+??1?$Loader@VSubscriptionManager@@$01@@QAE@XZ
+??1?$Loader@VUser32DllLoader@@$00@@QAE@XZ
+??1?$Loader@VWSManMemCryptManager@@$00@@QAE@XZ
+??1?$LoaderSerializer@VAdminSid@CSecurity@@$00@@QAE@XZ
+??1?$LoaderSerializer@VEventHandler@WSMan@@$00@@QAE@XZ
+??1?$LoaderSerializer@VInteractiveSid@CSecurity@@$00@@QAE@XZ
+??1?$LoaderSerializer@VIpHlpApiDllLoader@@$00@@QAE@XZ
+??1?$LoaderSerializer@VMachineName@@$00@@QAE@XZ
+??1?$LoaderSerializer@VNetworkServiceSid@CSecurity@@$00@@QAE@XZ
+??1?$LoaderSerializer@VNtDsApiDllLoader@@$00@@QAE@XZ
+??1?$LoaderSerializer@VResources@Locale@@$0A@@@QAE@XZ
+??1?$LoaderSerializer@VShell32DllLoader@@$00@@QAE@XZ
+??1?$LoaderSerializer@VShlWApiDllLoader@@$00@@QAE@XZ
+??1?$LoaderSerializer@VSubscriptionManager@@$01@@QAE@XZ
+??1?$LoaderSerializer@VUser32DllLoader@@$00@@QAE@XZ
+??1?$LoaderSerializer@VWSManMemCryptManager@@$00@@QAE@XZ
+??1?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@QAE@XZ
+??1?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE@XZ
+??1?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@QAE@XZ
+??1?$SafeMap@PAVCollector@@UEmpty@@V?$SafeSet_Iterator@PAVCollector@@@@@@QAE@XZ
+??1?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PAVHostOperation@@@@@@QAE@XZ
+??1?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PAVIOperation@@@@@@QAE@XZ
+??1?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@QAE@XZ
+??1?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVPushSubscription@@@@@@QAE@XZ
+??1?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@QAE@XZ
+??1?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAE@XZ
+??1?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAE@XZ
+??1?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAE@XZ
+??1?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QAE@XZ
+??1?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE@XZ
+??1?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QAE@XZ
+??1?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAE@XZ
+??1?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAE@XZ
+??1?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAE@XZ
+??1?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE@XZ
+??1?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@PAXUEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@UPluginKey@@K@@QAE@XZ
+??1?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@QAE@XZ
+??1?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QAE@XZ
+??1?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@QAE@XZ
+??1?$SafeMap_Iterator@VKey@Locale@@K@@QAE@XZ
+??1?$SafeMap_Iterator@VStringKeyCI@@K@@QAE@XZ
+??1?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@QAE@XZ
+??1?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QAE@XZ
+??1?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QAE@XZ
+??1?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@QAE@XZ
+??1?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAE@XZ
+??1?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@QAE@XZ
+??1?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAE@XZ
+??1?$SafeMap_Lock@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAE@XZ
+??1?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAE@XZ
+??1?$SafeMap_Lock@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@QAE@XZ
+??1?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QAE@XZ
+??1?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE@XZ
+??1?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@QAE@XZ
+??1?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QAE@XZ
+??1?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAE@XZ
+??1?$SafeMap_Lock@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAE@XZ
+??1?$SafeMap_Lock@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAE@XZ
+??1?$SafeMap_Lock@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE@XZ
+??1?$SafeMap_Lock@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAE@XZ
+??1?$SafeSet@PAVCCertMapping@@@@QAE@XZ
+??1?$SafeSet@PAVCListenerOperation@@@@QAE@XZ
+??1?$SafeSet@PAVCShellUriSettings@@@@QAE@XZ
+??1?$SafeSet@PAVCollector@@@@QAE@XZ
+??1?$SafeSet@PAVHostOperation@@@@QAE@XZ
+??1?$SafeSet@PAVIOperation@@@@QAE@XZ
+??1?$SafeSet@PAVListenerSourceSubscription@@@@QAE@XZ
+??1?$SafeSet@PAVPushSubscription@@@@QAE@XZ
+??1?$SafeSet@PAX@@QAE@XZ
+??1?$SafeSet@VStringKeyCI@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAVCCertMapping@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAVCListenerOperation@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAVCShellUriSettings@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAVCollector@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAVHostOperation@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAVIOperation@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAVPushSubscription@@@@QAE@XZ
+??1?$SafeSet_Iterator@PAX@@QAE@XZ
+??1?$SafeSet_Iterator@VStringKeyCI@@@@QAE@XZ
+??1?$SimpleQueue@T_LARGE_INTEGER@@@@QAE@XZ
+??1AutoBstr@@QAE@XZ
+??1AutoBstrNoAlloc@@QAE@XZ
+??1AutoCertContext@@QAE@XZ
+??1AutoChainContext@@QAE@XZ
+??1AutoCoTaskMemFree@@QAE@XZ
+??1AutoFwXmlCloseParser@@QAE@XZ
+??1AutoHandle@@QAE@XZ
+??1AutoImpersonateUser@@QAE@XZ
+??1AutoLibrary@@QAE@XZ
+??1AutoLocalFree@@QAE@XZ
+??1AutoMIClass@@QAE@XZ
+??1AutoMIInstance@@QAE@XZ
+??1AutoObject@@QAE@XZ
+??1AutoRegKey@@QAE@XZ
+??1AutoSecurityDescriptor@@QAE@XZ
+??1AutoWaitHandle@@QAE@XZ
+??1BufferFormatter@@UAE@XZ
+??1CBaseConfigCache@@UAE@XZ
+??1CClientConfigCache@@UAE@XZ
+??1CCommonConfigSettings@@UAE@XZ
+??1CConfigManager@@UAE@XZ
+??1CErrorContext@@UAE@XZ
+??1CRequestContext@@UAE@XZ
+??1CResourceAlias@@QAE@XZ
+??1CServiceConfigCache@@EAE@XZ
+??1CServiceWatcher@CServiceConfigCache@@QAE@XZ
+??1CWSManCriticalSection@@QAE@XZ
+??1CWSManCriticalSectionWithConditionVar@@QAE@XZ
+??1CWSManEPR@@UAE@XZ
+??1CWSManGroupPolicyManager@@EAE@XZ
+??1CWSManResource@@UAE@XZ
+??1CWSManResourceNoResourceUri@@UAE@XZ
+??1CWSManSecurityUI@@QAE@XZ
+??1CWinRSPluginConfigCache@@EAE@XZ
+??1ChildLifeTimeManager@@QAE@XZ
+??1CircularBufferFormatter@@UAE@XZ
+??1ConfigRegistry@@IAE@XZ
+??1EtwCorrelationHelper@@UAE@XZ
+??1EventHandler@WSMan@@QAE@XZ
+??1IConfigChangeObserver@@UAE@XZ
+??1ILifeTimeMgmt@@UAE@XZ
+??1IRequestContext@@UAE@XZ
+??1IWSManGroupPolicyObserver@@UAE@XZ
+??1IWSManGroupPolicyPublisher@@UAE@XZ
+??1MessageId@PacketParser@@QAE@XZ
+??1OnHTTPInitialize@@QAE@XZ
+??1OperationId@PacketParser@@QAE@XZ
+??1OwnLock@@QAE@XZ
+??1PacketParser@@QAE@XZ
+??1RBUFFER@@QAE@XZ
+??1ReferenceParameters@PacketParser@@QAE@XZ
+??1SBUFFER@@QAE@XZ
+??1ShareLock@@QAE@XZ
+??1SoapSemanticConverter@@QAE@XZ
+??1TSTRBUFFER@@QAE@XZ
+??1UserRecord@@QAE@XZ
+??1XmlReader@@QAE@XZ
+??4?$AutoCleanup@V?$AutoDelete@D@@PAD@@QAEAAV?$AutoDelete@D@@PAD@Z
+??4?$AutoCleanup@V?$AutoDelete@G@@PAG@@QAEAAV?$AutoDelete@G@@PAG@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEAAV?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEAAV?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@QAEAAV?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@QAEAAV?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAEAAV?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAEAAV?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QAEAAV?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QAEAAV?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@Z
+??4?$AutoCleanup@V?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@QAEAAV?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@@QAEAAV?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PAVCConfigChangeSource@@@@QAEAAV?$AutoDelete@VCConfigChangeSource@@@@PAVCConfigChangeSource@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PAVCObserverConfigChangeErrors@@@@QAEAAV?$AutoDelete@VCObserverConfigChangeErrors@@@@PAVCObserverConfigChangeErrors@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@@QAEAAV?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@@QAEAAV?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PAVCertHash@@@@QAEAAV?$AutoDelete@VCertHash@@@@PAVCertHash@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@QAEAAV?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEAAV?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PAVGPApiManager@@@@QAEAAV?$AutoDelete@VGPApiManager@@@@PAVGPApiManager@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEAAV?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PAVIChannelObserverFactory@@@@QAEAAV?$AutoDelete@VIChannelObserverFactory@@@@PAVIChannelObserverFactory@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QAEAAV?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QAEAAV?$AutoDelete@VISpecification@@@@PAVISpecification@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@@QAEAAV?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PAVPacketParser@@@@QAEAAV?$AutoDelete@VPacketParser@@@@PAVPacketParser@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PAVRunAsConfiguration@@@@QAEAAV?$AutoDelete@VRunAsConfiguration@@@@PAVRunAsConfiguration@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@@QAEAAV?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@@QAEAAV?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PAVSubscriptionEnumerator@@@@QAEAAV?$AutoDelete@VSubscriptionEnumerator@@@@PAVSubscriptionEnumerator@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QAEAAV?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PAVUniqueStringOverflow@@@@QAEAAV?$AutoDelete@VUniqueStringOverflow@@@@PAVUniqueStringOverflow@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PAVWSMANCONFIGTABLE_IDENTITY@@@@QAEAAV?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PAVWSMANCONFIGTABLE_IDENTITY@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QAEAAV?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@Z
+??4?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@QAEAAV?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PBG@@QAEAAV?$AutoDeleteVector@$$CBG@@PBG@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@D@@PAD@@QAEAAV?$AutoDeleteVector@D@@PAD@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QAEAAV?$AutoDeleteVector@E@@PAE@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QAEAAV?$AutoDeleteVector@G@@PAG@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QAEAAV?$AutoDeleteVector@PAG@@PAPAG@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QAEAAV?$AutoDeleteVector@PBG@@PAPBG@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PAU_CONFIG_UPDATE@@@@QAEAAV?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PAU_CONFIG_UPDATE@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAEAAV?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QAEAAV?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PAU_WSMAN_OPTION@@@@QAEAAV?$AutoDeleteVector@U_WSMAN_OPTION@@@@PAU_WSMAN_OPTION@@@Z
+??4?$AutoCleanup@V?$AutoDeleteVector@X@@PAX@@QAEAAV?$AutoDeleteVector@X@@PAX@Z
+??4?$AutoCleanup@V?$AutoFree@E@@PAE@@QAEAAV?$AutoFree@E@@PAE@Z
+??4?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@@QAEAAV?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QAEAAV?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QAEAAV?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QAEAAV?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QAEAAV?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QAEAAV?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QAEAAV?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QAEAAV?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QAEAAV?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QAEAAV?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QAEAAV?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QAEAAV?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QAEAAV?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@Z
+??4?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QAEAAV?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PAVApplication@Client@WSMan@@@@QAEAAV?$AutoRelease@VApplication@Client@WSMan@@@@PAVApplication@Client@WSMan@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAEAAV?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@QAEAAV?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PAVCCommonConfigSettings@@@@QAEAAV?$AutoRelease@VCCommonConfigSettings@@@@PAVCCommonConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PAVCConfigCacheMap@CBaseConfigCache@@@@QAEAAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PAVCConfigCacheMap@CBaseConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@QAEAAV?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PAVCRemoteOperation@@@@QAEAAV?$AutoRelease@VCRemoteOperation@@@@PAVCRemoteOperation@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@QAEAAV?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@QAEAAV?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PAVCServiceCommonConfigSettings@@@@QAEAAV?$AutoRelease@VCServiceCommonConfigSettings@@@@PAVCServiceCommonConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PAVCServiceConfigCache@@@@QAEAAV?$AutoRelease@VCServiceConfigCache@@@@PAVCServiceConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@@QAEAAV?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QAEAAV?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@@QAEAAV?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@QAEAAV?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QAEAAV?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@@QAEAAV?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEAAV?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEAAV?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QAEAAV?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PAVISubscription@@@@QAEAAV?$AutoRelease@VISubscription@@@@PAVISubscription@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@QAEAAV?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@@QAEAAV?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@Z
+??4?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PAVWSManHttpListener@@@@QAEAAV?$AutoRelease@VWSManHttpListener@@@@PAVWSManHttpListener@@@Z
+??4?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAEAAV?$AutoReleaseEx@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@Z
+??4?$AutoCleanup@VAutoBstr@@PAG@@QAEAAVAutoBstr@@PAG@Z
+??4?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QAEAAVAutoBstrNoAlloc@@PAG@Z
+??4?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@QAEAAVAutoCertContext@@PBU_CERT_CONTEXT@@@Z
+??4?$AutoCleanup@VAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@@QAEAAVAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@Z
+??4?$AutoCleanup@VAutoCoTaskMemFree@@PAX@@QAEAAVAutoCoTaskMemFree@@PAX@Z
+??4?$AutoCleanup@VAutoFwXmlCloseParser@@PAX@@QAEAAVAutoFwXmlCloseParser@@PAX@Z
+??4?$AutoCleanup@VAutoHandle@@PAX@@QAEAAVAutoHandle@@PAX@Z
+??4?$AutoCleanup@VAutoImpersonateUser@@PAX@@QAEAAVAutoImpersonateUser@@PAX@Z
+??4?$AutoCleanup@VAutoLibrary@@PAUHINSTANCE__@@@@QAEAAVAutoLibrary@@PAUHINSTANCE__@@@Z
+??4?$AutoCleanup@VAutoLocalFree@@PAX@@QAEAAVAutoLocalFree@@PAX@Z
+??4?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QAEAAVAutoMIClass@@PAU_MI_Class@@@Z
+??4?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@QAEAAVAutoMIInstance@@PAU_MI_Instance@@@Z
+??4?$AutoCleanup@VAutoObject@@PAUWSMAN_OBJECT@@@@QAEAAVAutoObject@@PAUWSMAN_OBJECT@@@Z
+??4?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@QAEAAVAutoRegKey@@PAUHKEY__@@@Z
+??4?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@QAEAAVAutoSecurityDescriptor@@PAX@Z
+??4?$AutoCleanup@VAutoWaitHandle@@PAX@@QAEAAVAutoWaitHandle@@PAX@Z
+??4?$AutoDelete@D@@QAEAAV0@PAD@Z
+??4?$AutoDelete@G@@QAEAAV0@PAG@Z
+??4?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEAAV0@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@Z
+??4?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEAAV0@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@Z
+??4?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@QAEAAV0@PAV?$SafeSet@PAVCCertMapping@@@@@Z
+??4?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@QAEAAV0@PAV?$SafeSet@PAVCShellUriSettings@@@@@Z
+??4?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAEAAV0@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@Z
+??4?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAEAAV0@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@Z
+??4?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QAEAAV0@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@Z
+??4?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QAEAAV0@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@Z
+??4?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@QAEAAV0@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@Z
+??4?$AutoDelete@VBlockedRecord@@@@QAEAAV0@PAVBlockedRecord@@@Z
+??4?$AutoDelete@VCConfigChangeSource@@@@QAEAAV0@PAVCConfigChangeSource@@@Z
+??4?$AutoDelete@VCObserverConfigChangeErrors@@@@QAEAAV0@PAVCObserverConfigChangeErrors@@@Z
+??4?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@QAEAAV0@PAVCServiceWatcher@CServiceConfigCache@@@Z
+??4?$AutoDelete@VCWSManResource@@@@QAEAAV0@PAVCWSManResource@@@Z
+??4?$AutoDelete@VCertHash@@@@QAEAAV0@PAVCertHash@@@Z
+??4?$AutoDelete@VConfigUpdate@@@@QAEAAV0@PAVConfigUpdate@@@Z
+??4?$AutoDelete@VEnumSinkEx@@@@QAEAAV0@PAVEnumSinkEx@@@Z
+??4?$AutoDelete@VGPApiManager@@@@QAEAAV0@PAVGPApiManager@@@Z
+??4?$AutoDelete@VGeneralSinkEx@@@@QAEAAV0@PAVGeneralSinkEx@@@Z
+??4?$AutoDelete@VIChannelObserverFactory@@@@QAEAAV0@PAVIChannelObserverFactory@@@Z
+??4?$AutoDelete@VIQueryDASHSMASHInterface@@@@QAEAAV0@PAVIQueryDASHSMASHInterface@@@Z
+??4?$AutoDelete@VISpecification@@@@QAEAAV0@PAVISpecification@@@Z
+??4?$AutoDelete@VPacketCreator@@@@QAEAAV0@PAVPacketCreator@@@Z
+??4?$AutoDelete@VPacketParser@@@@QAEAAV0@PAVPacketParser@@@Z
+??4?$AutoDelete@VRunAsConfiguration@@@@QAEAAV0@PAVRunAsConfiguration@@@Z
+??4?$AutoDelete@VSecurityEntry@Catalog@@@@QAEAAV0@PAVSecurityEntry@Catalog@@@Z
+??4?$AutoDelete@VServiceSoapProcessor@@@@QAEAAV0@PAVServiceSoapProcessor@@@Z
+??4?$AutoDelete@VSubscriptionEnumerator@@@@QAEAAV0@PAVSubscriptionEnumerator@@@Z
+??4?$AutoDelete@VTSTRBUFFER@@@@QAEAAV0@PAVTSTRBUFFER@@@Z
+??4?$AutoDelete@VUniqueStringOverflow@@@@QAEAAV0@PAVUniqueStringOverflow@@@Z
+??4?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@QAEAAV0@PAVWSMANCONFIGTABLE_IDENTITY@@@Z
+??4?$AutoDelete@VWmiEnumContext@@@@QAEAAV0@PAVWmiEnumContext@@@Z
+??4?$AutoDelete@VXmlReader@@@@QAEAAV0@PAVXmlReader@@@Z
+??4?$AutoDeleteVector@$$CBG@@QAEAAV0@PBG@Z
+??4?$AutoDeleteVector@D@@QAEAAV0@PAD@Z
+??4?$AutoDeleteVector@E@@QAEAAV0@PAE@Z
+??4?$AutoDeleteVector@G@@QAEAAV0@PAG@Z
+??4?$AutoDeleteVector@PAG@@QAEAAV0@PAPAG@Z
+??4?$AutoDeleteVector@PBG@@QAEAAV0@PAPBG@Z
+??4?$AutoDeleteVector@U_CONFIG_UPDATE@@@@QAEAAV0@PAU_CONFIG_UPDATE@@@Z
+??4?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAEAAV0@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@Z
+??4?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@QAEAAV0@PAU_WINRS_RUN_COMMAND_ARG@@@Z
+??4?$AutoDeleteVector@U_WSMAN_OPTION@@@@QAEAAV0@PAU_WSMAN_OPTION@@@Z
+??4?$AutoDeleteVector@X@@QAEAAV0@PAX@Z
+??4?$AutoFree@E@@QAEAAV0@PAE@Z
+??4?$AutoLocklessItemRecycle@VPacket@@@@QAEAAV0@PAVPacket@@@Z
+??4?$AutoRelease@UIClientSecurity@@@@QAEAAV0@PAUIClientSecurity@@@Z
+??4?$AutoRelease@UIEnumWbemClassObject@@@@QAEAAV0@PAUIEnumWbemClassObject@@@Z
+??4?$AutoRelease@UIErrorInfo@@@@QAEAAV0@PAUIErrorInfo@@@Z
+??4?$AutoRelease@UIUnknown@@@@QAEAAV0@PAUIUnknown@@@Z
+??4?$AutoRelease@UIWbemClassObject@@@@QAEAAV0@PAUIWbemClassObject@@@Z
+??4?$AutoRelease@UIWbemContext@@@@QAEAAV0@PAUIWbemContext@@@Z
+??4?$AutoRelease@UIWbemLocator@@@@QAEAAV0@PAUIWbemLocator@@@Z
+??4?$AutoRelease@UIWbemObjectTextSrc@@@@QAEAAV0@PAUIWbemObjectTextSrc@@@Z
+??4?$AutoRelease@UIWbemPath@@@@QAEAAV0@PAUIWbemPath@@@Z
+??4?$AutoRelease@UIWbemPathKeyList@@@@QAEAAV0@PAUIWbemPathKeyList@@@Z
+??4?$AutoRelease@UIWbemQualifierSet@@@@QAEAAV0@PAUIWbemQualifierSet@@@Z
+??4?$AutoRelease@UIWbemQuery@@@@QAEAAV0@PAUIWbemQuery@@@Z
+??4?$AutoRelease@UIWbemServices@@@@QAEAAV0@PAUIWbemServices@@@Z
+??4?$AutoRelease@VApplication@Client@WSMan@@@@QAEAAV0@PAVApplication@Client@WSMan@@@Z
+??4?$AutoRelease@VCBaseConfigCache@@@@QAEAAV0@PAVCBaseConfigCache@@@Z
+??4?$AutoRelease@VCClientConfigSettings@@@@QAEAAV0@PAVCClientConfigSettings@@@Z
+??4?$AutoRelease@VCCommonConfigSettings@@@@QAEAAV0@PAVCCommonConfigSettings@@@Z
+??4?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@QAEAAV0@PAVCConfigCacheMap@CBaseConfigCache@@@Z
+??4?$AutoRelease@VCConfigManager@@@@QAEAAV0@PAVCConfigManager@@@Z
+??4?$AutoRelease@VCRemoteOperation@@@@QAEAAV0@PAVCRemoteOperation@@@Z
+??4?$AutoRelease@VCRemoteSession@@@@QAEAAV0@PAVCRemoteSession@@@Z
+??4?$AutoRelease@VCRequestContext@@@@QAEAAV0@PAVCRequestContext@@@Z
+??4?$AutoRelease@VCServiceCommonConfigSettings@@@@QAEAAV0@PAVCServiceCommonConfigSettings@@@Z
+??4?$AutoRelease@VCServiceConfigCache@@@@QAEAAV0@PAVCServiceConfigCache@@@Z
+??4?$AutoRelease@VCServiceConfigSettings@@@@QAEAAV0@PAVCServiceConfigSettings@@@Z
+??4?$AutoRelease@VCWSManEPR@@@@QAEAAV0@PAVCWSManEPR@@@Z
+??4?$AutoRelease@VCWSManGroupPolicyManager@@@@QAEAAV0@PAVCWSManGroupPolicyManager@@@Z
+??4?$AutoRelease@VCWSManResource@@@@QAEAAV0@PAVCWSManResource@@@Z
+??4?$AutoRelease@VCWinRSPluginConfigCache@@@@QAEAAV0@PAVCWinRSPluginConfigCache@@@Z
+??4?$AutoRelease@VCWinRSPluginConfigSettings@@@@QAEAAV0@PAVCWinRSPluginConfigSettings@@@Z
+??4?$AutoRelease@VEnumSinkEx@@@@QAEAAV0@PAVEnumSinkEx@@@Z
+??4?$AutoRelease@VGeneralSinkEx@@@@QAEAAV0@PAVGeneralSinkEx@@@Z
+??4?$AutoRelease@VIRequestContext@@@@QAEAAV0@PAVIRequestContext@@@Z
+??4?$AutoRelease@VISubscription@@@@QAEAAV0@PAVISubscription@@@Z
+??4?$AutoRelease@VInboundRequestDetails@@@@QAEAAV0@PAVInboundRequestDetails@@@Z
+??4?$AutoRelease@VUserRecord@@@@QAEAAV0@PAVUserRecord@@@Z
+??4?$AutoRelease@VWSManHttpListener@@@@QAEAAV0@PAVWSManHttpListener@@@Z
+??4?$AutoReleaseEx@VShell@Client@WSMan@@@@QAEAAV0@PAVShell@Client@WSMan@@@Z
+??4?$PacketElement@K@PacketParser@@QAEAAV01@$$QAV01@@Z
+??4?$PacketElement@K@PacketParser@@QAEAAV01@ABV01@@Z
+??4?$PacketElement@PAU_FWXML_ELEMENT@@@PacketParser@@QAEAAV01@$$QAV01@@Z
+??4?$PacketElement@PAU_FWXML_ELEMENT@@@PacketParser@@QAEAAV01@ABV01@@Z
+??4?$PacketElement@PBG@PacketParser@@QAEAAV01@$$QAV01@@Z
+??4?$PacketElement@PBG@PacketParser@@QAEAAV01@ABV01@@Z
+??4?$PacketElement@_K@PacketParser@@QAEAAV01@$$QAV01@@Z
+??4?$PacketElement@_K@PacketParser@@QAEAAV01@ABV01@@Z
+??4?$SimpleQueue@T_LARGE_INTEGER@@@@QAEAAV0@ABV0@@Z
+??4AutoBstr@@QAEAAV0@PAG@Z
+??4AutoBstrNoAlloc@@QAEAAV0@PAG@Z
+??4AutoCertContext@@QAEAAV0@PBU_CERT_CONTEXT@@@Z
+??4AutoChainContext@@QAEAAV0@PBU_CERT_CHAIN_CONTEXT@@@Z
+??4AutoCoTaskMemFree@@QAEAAV0@PAX@Z
+??4AutoFwXmlCloseParser@@QAEAAV0@PAX@Z
+??4AutoHandle@@QAEAAV0@PAX@Z
+??4AutoImpersonateUser@@QAEAAV0@PAX@Z
+??4AutoLibrary@@QAEAAV0@PAUHINSTANCE__@@@Z
+??4AutoLocalFree@@QAEAAV0@PAX@Z
+??4AutoMIClass@@QAEAAV0@PAU_MI_Class@@@Z
+??4AutoMIInstance@@QAEAAV0@PAU_MI_Instance@@@Z
+??4AutoObject@@QAEAAV0@PAUWSMAN_OBJECT@@@Z
+??4AutoRegKey@@QAEAAV0@PAUHKEY__@@@Z
+??4AutoSecurityDescriptor@@QAEAAV0@PAX@Z
+??4AutoWaitHandle@@QAEAAV0@PAX@Z
+??4ChildLifeTimeManager@@QAEAAV0@ABV0@@Z
+??4ConfigRegistry@@QAEAAV0@ABV0@@Z
+??4EtwCorrelationHelper@@QAEAAV0@ABV0@@Z
+??4EventLog@@QAEAAV0@$$QAV0@@Z
+??4EventLog@@QAEAAV0@ABV0@@Z
+??4ExtendedSemantic@@QAEAAV0@$$QAV0@@Z
+??4ExtendedSemantic@@QAEAAV0@ABV0@@Z
+??4FastLock@@QAEAAV0@$$QAV0@@Z
+??4FastLock@@QAEAAV0@ABV0@@Z
+??4Fragment@PacketParser@@QAEAAV01@$$QAV01@@Z
+??4Fragment@PacketParser@@QAEAAV01@ABV01@@Z
+??4IConfigChangeObserver@@QAEAAV0@ABV0@@Z
+??4ILifeTimeMgmt@@QAEAAV0@ABV0@@Z
+??4IWSManGroupPolicyObserver@@QAEAAV0@ABV0@@Z
+??4IWSManGroupPolicyPublisher@@QAEAAV0@ABV0@@Z
+??4Locale@@QAEAAV0@ABV0@@Z
+??4NotUnderstandSoapHeader@PacketParser@@QAEAAV01@$$QAV01@@Z
+??4NotUnderstandSoapHeader@PacketParser@@QAEAAV01@ABV01@@Z
+??4PacketFormatter@@QAEAAV0@$$QAV0@@Z
+??4PacketFormatter@@QAEAAV0@ABV0@@Z
+??4RBUFFER@@QAEAAV0@ABV0@@Z
+??4SBUFFER@@QAEAAV0@$$QAV0@@Z
+??4SBUFFER@@QAEAAV0@ABV0@@Z
+??4SessionId@PacketParser@@QAEAAV01@$$QAV01@@Z
+??4SessionId@PacketParser@@QAEAAV01@ABV01@@Z
+??4SoapSemanticConverter@@QAEAAV0@ABV0@@Z
+??4UserAuthzRecord@@QAEAAV0@$$QAV0@@Z
+??4UserAuthzRecord@@QAEAAV0@ABV0@@Z
+??6BufferFormatter@@UAEAAV0@AAVBufferFormatterDataFormatDWORD@@@Z
+??6BufferFormatter@@UAEAAV0@AAVBufferFormatterDataFormatULONGLONG@@@Z
+??6BufferFormatter@@UAEAAV0@AAVBufferFormatterDataPCWSTR@@@Z
+??6BufferFormatter@@UAEAAV0@AAVBufferFormatterDataPUCHAR@@@Z
+??6BufferFormatter@@UAEAAV0@AAVBufferFormatterDataXmlEscape@@@Z
+??6BufferFormatter@@UAEAAV0@K@Z
+??6BufferFormatter@@UAEAAV0@PAU_FWXML_ELEMENT@@@Z
+??7?$AutoCleanup@V?$AutoDelete@G@@PAG@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PAVRunAsConfiguration@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PAVSubscriptionEnumerator@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@D@@PAD@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoDeleteVector@X@@PAX@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QBE_NXZ
+??7?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@QBE_NXZ
+??7?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QBE_NXZ
+??7?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@QBE_NXZ
+??7?$AutoCleanup@VAutoHandle@@PAX@@QBE_NXZ
+??7?$AutoCleanup@VAutoImpersonateUser@@PAX@@QBE_NXZ
+??7?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QBE_NXZ
+??7?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@QBE_NXZ
+??7?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@QBE_NXZ
+??A?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAEPAKABUPluginKey@@@Z
+??A?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAEPAPAVBlockedRecord@@ABUUserKey@@@Z
+??A?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAEPAVCertThumbprintMappedSet@CServiceConfigSettings@@ABVCertThumbprintKey@@@Z
+??A?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEPAKABVStringKeyCI@@@Z
+??A?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAEPAUUSER_CONTEXT_INFO@WSManHttpListener@@ABVStringKeyCI@@@Z
+??A?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAEPAPAVExpiredOperationIdRecord@@ABVStringKeyStore@@@Z
+??A?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAEPAPAVServerFullDuplexChannel@@ABVStringKeyStore@@@Z
+??A?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEPAPAVOptionValue@SessionOptions@Client@WSMan@@ABW4WSManSessionOption@@@Z
+??A?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAEPAPAVSendPacketArgs@RobustConnectionBuffer@@AB_K@Z
+??A?$SafeSet@PAX@@QBEPBQAXABQAX@Z
+??B?$AutoCleanup@V?$AutoDelete@D@@PAD@@QAEPADXZ
+??B?$AutoCleanup@V?$AutoDelete@G@@PAG@@QAEPAGXZ
+??B?$AutoCleanup@V?$AutoDelete@G@@PAG@@QBEQAGXZ
+??B?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PAUIPRange@CWSManIPFilter@@@@QAEPAUIPRange@CWSManIPFilter@@XZ
+??B?$AutoCleanup@V?$AutoDelete@U_SID@@@@PAU_SID@@@@QAEPAU_SID@@XZ
+??B?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PAU_WSMAN_STREAM_ID_SET@@@@QAEPAU_WSMAN_STREAM_ID_SET@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PAV?$Handle@VISubscription@@@@@@QAEPAV?$Handle@VISubscription@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEPAV?$SafeMap_Iterator@VStringKeyCI@@K@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEPAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@QAEPAV?$SafeSet@PAVCCertMapping@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@QAEPAV?$SafeSet@PAVCShellUriSettings@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAEPAV?$SafeSet_Iterator@PAVCListenerOperation@@@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAEPAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QAEPAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QAEPAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QBEQAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@QAEPAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PAVAdminSid@CSecurity@@@@QAEPAVAdminSid@CSecurity@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@@QAEPAVBlockedRecord@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAEPAVCBaseConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PAVCCertMapping@@@@QAEPAVCCertMapping@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PAVCConfigChangeSource@@@@QAEPAVCConfigChangeSource@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PAVCListenerSettings@@@@QAEPAVCListenerSettings@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PAVCObserverConfigChangeErrors@@@@QAEPAVCObserverConfigChangeErrors@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@@QAEPAVCServiceWatcher@CServiceConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PAVCShellUriSettings@@@@QAEPAVCShellUriSettings@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PAVCWSManEPR@@@@QAEPAVCWSManEPR@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@@QAEPAVCWSManResource@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PAVCertHash@@@@QAEPAVCertHash@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@QAEPAVConfigUpdate@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEPAVEnumSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QBEQAVEnumSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PAVEventHandler@WSMan@@@@QAEPAVEventHandler@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PAVExpiredOperationIdRecord@@@@QAEPAVExpiredOperationIdRecord@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PAVGPApiManager@@@@QAEPAVGPApiManager@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEPAVGeneralSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QBEQAVGeneralSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PAVIChannelObserverFactory@@@@QAEPAVIChannelObserverFactory@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QAEPAVIQueryDASHSMASHInterface@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QBEQAVIQueryDASHSMASHInterface@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QAEPAVISpecification@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QBEQAVISpecification@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PAVInteractiveSid@CSecurity@@@@QAEPAVInteractiveSid@CSecurity@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PAVIpHlpApiDllLoader@@@@QAEPAVIpHlpApiDllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PAVMachineName@@@@QAEPAVMachineName@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PAVNetworkServiceSid@CSecurity@@@@QAEPAVNetworkServiceSid@CSecurity@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PAVNtDsApiDllLoader@@@@QAEPAVNtDsApiDllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAEPAVOptionValue@SessionOptions@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@@QAEPAVPacketCreator@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PAVPacketParser@@@@QAEPAVPacketParser@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PAVResources@Locale@@@@QAEPAVResources@Locale@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@@QAEPAVSecurityEntry@Catalog@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@@QAEPAVServiceSoapProcessor@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PAVShell32DllLoader@@@@QAEPAVShell32DllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PAVShlWApiDllLoader@@@@QAEPAVShlWApiDllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PAVSubscriptionManager@@@@QAEPAVSubscriptionManager@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QAEPAVTSTRBUFFER@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QBEQAVTSTRBUFFER@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PAVUniqueStringOverflow@@@@QAEPAVUniqueStringOverflow@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PAVUser32DllLoader@@@@QAEPAVUser32DllLoader@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PAVWSMANCONFIGTABLE_IDENTITY@@@@QAEPAVWSMANCONFIGTABLE_IDENTITY@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PAVWSManMemCryptManager@@@@QAEPAVWSManMemCryptManager@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QAEPAVWmiEnumContext@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QBEQAVWmiEnumContext@@XZ
+??B?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@QAEPAVXmlReader@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PBG@@QAEPBGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@D@@PAD@@QAEPADXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QAEPAEXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QBEQAEXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QAEPAGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QBEQAGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@H@@PAH@@QAEPAHXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QAEPAPAGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QBEQAPAGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QAEPAPBGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QBEQAPBGXZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PAU_CONFIG_UPDATE@@@@QAEPAU_CONFIG_UPDATE@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAEPAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QBEQAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QAEPAU_WINRS_RUN_COMMAND_ARG@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QBEQAU_WINRS_RUN_COMMAND_ARG@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PAU_WSMAN_OPTION@@@@QAEPAU_WSMAN_OPTION@@XZ
+??B?$AutoCleanup@V?$AutoDeleteVector@X@@PAX@@QAEPAXXZ
+??B?$AutoCleanup@V?$AutoFree@E@@PAE@@QAEPAEXZ
+??B?$AutoCleanup@V?$AutoFree@E@@PAE@@QBEQAEXZ
+??B?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@@QAEPAVPacket@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PAUIAppHostChildElementCollection@@@@QAEPAUIAppHostChildElementCollection@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PAUIAppHostElement@@@@QAEPAUIAppHostElement@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PAUIAppHostElementCollection@@@@QAEPAUIAppHostElementCollection@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QAEPAUIClientSecurity@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QBEQAUIClientSecurity@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QAEPAUIEnumWbemClassObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QBEQAUIEnumWbemClassObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QAEPAUIErrorInfo@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QBEQAUIErrorInfo@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QAEPAUIUnknown@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QBEQAUIUnknown@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QAEPAUIWbemClassObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QBEQAUIWbemClassObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QAEPAUIWbemContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QBEQAUIWbemContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QAEPAUIWbemLocator@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QBEQAUIWbemLocator@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QAEPAUIWbemObjectTextSrc@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QBEQAUIWbemObjectTextSrc@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QAEPAUIWbemPath@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QBEQAUIWbemPath@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QAEPAUIWbemPathKeyList@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QBEQAUIWbemPathKeyList@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QAEPAUIWbemQualifierSet@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QBEQAUIWbemQualifierSet@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QAEPAUIWbemQuery@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QBEQAUIWbemQuery@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QAEPAUIWbemServices@@XZ
+??B?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QBEQAUIWbemServices@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAEPAVCBaseConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@QAEPAVCClientConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PAVCCommonConfigSettings@@@@QAEPAVCCommonConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PAVCConfigCacheMap@CBaseConfigCache@@@@QAEPAVCConfigCacheMap@CBaseConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@QAEPAVCConfigManager@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@QAEPAVCRemoteSession@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@QAEPAVCRequestContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PAVCServiceCommonConfigSettings@@@@QAEPAVCServiceCommonConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PAVCServiceConfigCache@@@@QAEPAVCServiceConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@@QAEPAVCServiceConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QAEPAVCWSManEPR@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QBEQAVCWSManEPR@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PAVCWSManGroupPolicyCache@@@@QAEPAVCWSManGroupPolicyCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@@QAEPAVCWSManGroupPolicyManager@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PAVCWSManObject@@@@QAEPAVCWSManObject@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@QAEPAVCWSManResource@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@QBEQAVCWSManResource@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QAEPAVCWinRSPluginConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QBEQAVCWinRSPluginConfigCache@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@@QAEPAVCWinRSPluginConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PAVCommand@Client@WSMan@@@@QAEPAVCommand@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PAVConfigNotification@@@@QAEPAVConfigNotification@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PAVConnectShellOperation@Client@WSMan@@@@QAEPAVConnectShellOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PAVCreateShellOperation@Client@WSMan@@@@QAEPAVCreateShellOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PAVDeleteShellOperation@Client@WSMan@@@@QAEPAVDeleteShellOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PAVDisconnectOperation@Client@WSMan@@@@QAEPAVDisconnectOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEPAVEnumSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QBEQAVEnumSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEPAVGeneralSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QBEQAVGeneralSinkEx@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PAVIISConfigSettings@@@@QAEPAVIISConfigSettings@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PAVIPCSoapProcessor@@@@QAEPAVIPCSoapProcessor@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QAEPAVIRequestContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QBEQAVIRequestContext@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PAVISubscription@@@@QAEPAVISubscription@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@QAEPAVInboundRequestDetails@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@QBEQAVInboundRequestDetails@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PAVReceiveOperation@Client@WSMan@@@@QAEPAVReceiveOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PAVReconnectOperation@Client@WSMan@@@@QAEPAVReconnectOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PAVSendOperation@Client@WSMan@@@@QAEPAVSendOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAEPAVShell@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QBEQAVShell@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PAVSignalOperation@Client@WSMan@@@@QAEPAVSignalOperation@Client@WSMan@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@@QAEPAVUserRecord@@XZ
+??B?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@@QBEQAVUserRecord@@XZ
+??B?$AutoCleanup@VAutoBstr@@PAG@@QAEPAGXZ
+??B?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QAEPAGXZ
+??B?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QBEQAGXZ
+??B?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@QAEPBU_CERT_CONTEXT@@XZ
+??B?$AutoCleanup@VAutoHandle@@PAX@@QAEPAXXZ
+??B?$AutoCleanup@VAutoHandle@@PAX@@QBEQAXXZ
+??B?$AutoCleanup@VAutoImpersonateUser@@PAX@@QAEPAXXZ
+??B?$AutoCleanup@VAutoImpersonateUser@@PAX@@QBEQAXXZ
+??B?$AutoCleanup@VAutoLibrary@@PAUHINSTANCE__@@@@QAEPAUHINSTANCE__@@XZ
+??B?$AutoCleanup@VAutoLocalFree@@PAX@@QAEPAXXZ
+??B?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QAEPAU_MI_Class@@XZ
+??B?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@QAEPAU_MI_Instance@@XZ
+??B?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@QAEPAUHKEY__@@XZ
+??B?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@QAEPAXXZ
+??B?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QBE_NXZ
+??B?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QBE_NXZ
+??B?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QBE_NXZ
+??B?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QBE_NXZ
+??B?$SafeMap_Iterator@VKey@Locale@@K@@QBE_NXZ
+??B?$SafeMap_Iterator@VStringKeyCI@@K@@QBE_NXZ
+??B?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QBE_NXZ
+??B?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QBE_NXZ
+??B?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QBE_NXZ
+??C?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PAU_WSMAN_STREAM_ID_SET@@@@QAEPAU_WSMAN_STREAM_ID_SET@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PAV?$Handle@VISubscription@@@@@@QAEPAV?$Handle@VISubscription@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEPAV?$SafeMap_Iterator@VStringKeyCI@@K@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEPAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@QAEPAV?$SafeSet@PAVCCertMapping@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@QAEPAV?$SafeSet@PAVCShellUriSettings@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAEPAV?$SafeSet_Iterator@PAVCListenerOperation@@@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAEPAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@QAEPAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@QAEPAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@XZ
+??C?$AutoCleanup@V?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@QAEPAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@@QAEPAVBlockedRecord@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAEPAVCBaseConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PAVCCertMapping@@@@QAEPAVCCertMapping@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PAVCConfigChangeSource@@@@QAEPAVCConfigChangeSource@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PAVCListenerSettings@@@@QAEPAVCListenerSettings@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@@QAEPAVCServiceWatcher@CServiceConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PAVCShellUriSettings@@@@QAEPAVCShellUriSettings@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PAVCWSManEPR@@@@QAEPAVCWSManEPR@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@@QAEPAVCWSManResource@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PAVCertHash@@@@QAEPAVCertHash@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@QAEPAVConfigUpdate@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEPAVEnumSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QBEQAVEnumSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PAVExpiredOperationIdRecord@@@@QAEPAVExpiredOperationIdRecord@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PAVGPApiManager@@@@QAEPAVGPApiManager@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEPAVGeneralSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QBEQAVGeneralSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PAVIChannelObserverFactory@@@@QAEPAVIChannelObserverFactory@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QAEPAVIQueryDASHSMASHInterface@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QBEQAVIQueryDASHSMASHInterface@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QAEPAVISpecification@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QBEQAVISpecification@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@PAVMasterReceiveData@CListenerReceive@@@@QAEPAVMasterReceiveData@CListenerReceive@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAEPAVOptionValue@SessionOptions@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@@QAEPAVPacketCreator@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PAVPacketParser@@@@QAEPAVPacketParser@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PAVRunAsConfiguration@@@@QAEPAVRunAsConfiguration@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@@QAEPAVSecurityEntry@Catalog@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PAVSendPacketArgs@RobustConnectionBuffer@@@@QAEPAVSendPacketArgs@RobustConnectionBuffer@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@@QAEPAVServiceSoapProcessor@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PAVSubscriptionEnumerator@@@@QAEPAVSubscriptionEnumerator@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QAEPAVTSTRBUFFER@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QBEQAVTSTRBUFFER@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PAVUniqueStringOverflow@@@@QAEPAVUniqueStringOverflow@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PAVWSMANCONFIGTABLE_IDENTITY@@@@QAEPAVWSMANCONFIGTABLE_IDENTITY@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QAEPAVWmiEnumContext@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QBEQAVWmiEnumContext@@XZ
+??C?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@QAEPAVXmlReader@@XZ
+??C?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QAEPAEXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QBEQAEXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QAEPAGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QBEQAGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QAEPAPAGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QBEQAPAGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QAEPAPBGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QBEQAPBGXZ
+??C?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAEPAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+??C?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QBEQAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+??C?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QAEPAU_WINRS_RUN_COMMAND_ARG@@XZ
+??C?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QBEQAU_WINRS_RUN_COMMAND_ARG@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PAUIAppHostAdminManager@@@@QAEPAUIAppHostAdminManager@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PAUIAppHostChildElementCollection@@@@QAEPAUIAppHostChildElementCollection@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PAUIAppHostConfigException@@@@QAEPAUIAppHostConfigException@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PAUIAppHostElementCollection@@@@QAEPAUIAppHostElementCollection@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PAUIAppHostProperty@@@@QAEPAUIAppHostProperty@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PAUIAppHostPropertyCollection@@@@QAEPAUIAppHostPropertyCollection@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QAEPAUIClientSecurity@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QBEQAUIClientSecurity@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QAEPAUIEnumWbemClassObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QBEQAUIEnumWbemClassObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QAEPAUIErrorInfo@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QBEQAUIErrorInfo@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QAEPAUIUnknown@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QBEQAUIUnknown@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QAEPAUIWbemClassObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QBEQAUIWbemClassObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QAEPAUIWbemContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QBEQAUIWbemContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QAEPAUIWbemLocator@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QBEQAUIWbemLocator@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QAEPAUIWbemObjectTextSrc@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QBEQAUIWbemObjectTextSrc@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QAEPAUIWbemPath@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QBEQAUIWbemPath@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QAEPAUIWbemPathKeyList@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QBEQAUIWbemPathKeyList@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QAEPAUIWbemQualifierSet@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QBEQAUIWbemQualifierSet@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QAEPAUIWbemQuery@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QBEQAUIWbemQuery@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QAEPAUIWbemServices@@XZ
+??C?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QBEQAUIWbemServices@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAEPAVCBaseConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@QAEPAVCClientConfigSettings@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PAVCConfigCacheMap@CBaseConfigCache@@@@QAEPAVCConfigCacheMap@CBaseConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@QAEPAVCConfigManager@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCListenerReceive@@@@PAVCListenerReceive@@@@QAEPAVCListenerReceive@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@QAEPAVCRemoteSession@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@QBEQAVCRemoteSession@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@QAEPAVCRequestContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PAVCServiceCommonConfigSettings@@@@QAEPAVCServiceCommonConfigSettings@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PAVCServiceConfigCache@@@@QAEPAVCServiceConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@@QAEPAVCServiceConfigSettings@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QAEPAVCWSManEPR@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QBEQAVCWSManEPR@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PAVCWSManGroupPolicyCache@@@@QAEPAVCWSManGroupPolicyCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@@QAEPAVCWSManGroupPolicyManager@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PAVCWSManObject@@@@QAEPAVCWSManObject@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@QAEPAVCWSManResource@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QAEPAVCWinRSPluginConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QBEQAVCWinRSPluginConfigCache@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@@QAEPAVCWinRSPluginConfigSettings@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PAVCommand@Client@WSMan@@@@QAEPAVCommand@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PAVConfigNotification@@@@QAEPAVConfigNotification@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PAVConnectShellOperation@Client@WSMan@@@@QAEPAVConnectShellOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PAVCreateShellOperation@Client@WSMan@@@@QAEPAVCreateShellOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PAVDeleteShellOperation@Client@WSMan@@@@QAEPAVDeleteShellOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PAVDisconnectOperation@Client@WSMan@@@@QAEPAVDisconnectOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEPAVEnumSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QBEQAVEnumSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEPAVGeneralSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QBEQAVGeneralSinkEx@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PAVIPCSoapProcessor@@@@QAEPAVIPCSoapProcessor@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QAEPAVIRequestContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QBEQAVIRequestContext@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@QAEPAVInboundRequestDetails@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@QBEQAVInboundRequestDetails@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PAVReceiveOperation@Client@WSMan@@@@QAEPAVReceiveOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PAVReconnectOperation@Client@WSMan@@@@QAEPAVReconnectOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PAVSendOperation@Client@WSMan@@@@QAEPAVSendOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAEPAVShell@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QBEQAVShell@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PAVSignalOperation@Client@WSMan@@@@QAEPAVSignalOperation@Client@WSMan@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@@QAEPAVUserRecord@@XZ
+??C?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PAVWSManHttpListener@@@@QAEPAVWSManHttpListener@@XZ
+??C?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QAEPAGXZ
+??C?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QBEQAGXZ
+??C?$AutoCleanup@VAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@@QAEPBU_CERT_CHAIN_CONTEXT@@XZ
+??C?$AutoCleanup@VAutoImpersonateUser@@PAX@@QAEPAXXZ
+??C?$AutoCleanup@VAutoImpersonateUser@@PAX@@QBEQAXXZ
+??C?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QAEPAU_MI_Class@@XZ
+??C?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QBEAAPAVExpiredOperationIdRecord@@XZ
+??C?$SafeSet_Iterator@PAVCListenerOperation@@@@QBEABQAVCListenerOperation@@XZ
+??D?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QBEAAVCertThumbprintMappedSet@CServiceConfigSettings@@XZ
+??D?$SafeMap_Iterator@VKey@Locale@@K@@QBEAAKXZ
+??D?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QBEAAPAVExpiredOperationIdRecord@@XZ
+??D?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QBEAAPAVOptionValue@SessionOptions@Client@WSMan@@XZ
+??D?$SafeSet_Iterator@PAVCCertMapping@@@@QBEABQAVCCertMapping@@XZ
+??D?$SafeSet_Iterator@PAVCListenerOperation@@@@QBEABQAVCListenerOperation@@XZ
+??D?$SafeSet_Iterator@PAVCShellUriSettings@@@@QBEABQAVCShellUriSettings@@XZ
+??E?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QAEXH@Z
+??E?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QAEXH@Z
+??E?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QAEXH@Z
+??E?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QAEXH@Z
+??E?$SafeMap_Iterator@VStringKeyCI@@K@@QAEXH@Z
+??E?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QAEXH@Z
+??E?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QAEXH@Z
+??E?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAEXH@Z
+??_7?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@6B@ DATA
+??_7?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@6B@ DATA
+??_7?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@6B@ DATA
+??_7?$SafeMap@PAVCollector@@UEmpty@@V?$SafeSet_Iterator@PAVCollector@@@@@@6B@ DATA
+??_7?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PAVHostOperation@@@@@@6B@ DATA
+??_7?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PAVIOperation@@@@@@6B@ DATA
+??_7?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@6B@ DATA
+??_7?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVPushSubscription@@@@@@6B@ DATA
+??_7?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@6B@ DATA
+??_7?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@6B@ DATA
+??_7?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@6B@ DATA
+??_7?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@6B@ DATA
+??_7?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@6B@ DATA
+??_7?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@6B@ DATA
+??_7?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@6B@ DATA
+??_7?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@6B@ DATA
+??_7?$SafeSet@PAVCCertMapping@@@@6B@ DATA
+??_7?$SafeSet@PAVCListenerOperation@@@@6B@ DATA
+??_7?$SafeSet@PAVCShellUriSettings@@@@6B@ DATA
+??_7?$SafeSet@PAX@@6B@ DATA
+??_7BufferFormatter@@6B@ DATA
+??_7CBaseConfigCache@@6BIConfigChangeObserver@@@ DATA
+??_7CBaseConfigCache@@6BILifeTimeMgmt@@@ DATA
+??_7CClientConfigCache@@6BIConfigChangeObserver@@@ DATA
+??_7CClientConfigCache@@6BILifeTimeMgmt@@@ DATA
+??_7CConfigManager@@6B@ DATA
+??_7CErrorContext@@6B@ DATA
+??_7CRequestContext@@6BCErrorContext@@@ DATA
+??_7CRequestContext@@6BEtwCorrelationHelper@@@ DATA
+??_7CServiceConfigCache@@6BIConfigChangeObserver@@@ DATA
+??_7CServiceConfigCache@@6BILifeTimeMgmt@@@ DATA
+??_7CWSManEPR@@6B@ DATA
+??_7CWSManGroupPolicyManager@@6B@ DATA
+??_7CWSManResource@@6B@ DATA
+??_7CWSManResourceNoResourceUri@@6B@ DATA
+??_7CWSManSecurityUI@@6B@ DATA
+??_7CWinRSPluginConfigCache@@6BIConfigChangeObserver@@@ DATA
+??_7CWinRSPluginConfigCache@@6BILifeTimeMgmt@@@ DATA
+??_7CircularBufferFormatter@@6B@ DATA
+??_7EtwCorrelationHelper@@6B@ DATA
+??_7IConfigChangeObserver@@6B@ DATA
+??_7ILifeTimeMgmt@@6B@ DATA
+??_7IRequestContext@@6B@ DATA
+??_7IWSManGroupPolicyObserver@@6B@ DATA
+??_7IWSManGroupPolicyPublisher@@6B@ DATA
+??_7PacketParser@@6B@ DATA
+??_7UserAuthzRecord@@6B@ DATA
+??_7UserRecord@@6B@ DATA
+??_FCErrorContext@@QAEXXZ
+??_FRBUFFER@@QAEXXZ
+?Acquire@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVCollector@@UEmpty@@V?$SafeSet_Iterator@PAVCollector@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PAVHostOperation@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PAVIOperation@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVPushSubscription@@@@@@UBEXXZ
+?Acquire@?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@UBEXXZ
+?Acquire@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@UBEXXZ
+?Acquire@?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VKey@CWmiPtrCache@@VMapping@2@V?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@@@UBEXXZ
+?Acquire@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKey@@PAVListenerEvents@@V?$SafeMap_Iterator@VStringKey@@PAVListenerEvents@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKey@@PAVListenerSourceSubscription@@V?$SafeMap_Iterator@VStringKey@@PAVListenerSourceSubscription@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKey@@UOption@WinRM_OperationOptions@@V?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@PAVIISEndpoint@@V?$SafeMap_Iterator@VStringKeyCI@@PAVIISEndpoint@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@UBEXXZ
+?Acquire@?$SafeMap@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@V?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@@@UBEXXZ
+?Acquire@?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@UBEXXZ
+?Acquire@?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@UBEXXZ
+?Acquire@?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEXXZ
+?Acquire@?$SafeMap_Lock@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAEXXZ
+?Acquire@CWSManCriticalSection@@QAEXXZ
+?AcquireExclusive@FastLock@@QAEXXZ
+?AcquireShared@FastLock@@QAEXXZ
+?Acquired@?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE_NXZ
+?Acquired@?$SafeMap_Lock@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAE_NXZ
+?Add@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@QAE_NABQAVCCertMapping@@ABUEmpty@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE_NABQAVCListenerOperation@@ABUEmpty@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@QAE_NABQAVCShellUriSettings@@ABUEmpty@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@QAE_NABQAXABUEmpty@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAE_NABUPluginKey@@ABKAAVIRequestContext@@@Z
+?Add@?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAE_NABUUserKey@@ABQAVBlockedRecord@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAE_NABVCertThumbprintKey@@ABVCertThumbprintMappedSet@CServiceConfigSettings@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QAE_NABVKey@Locale@@ABKAAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE_NABVStringKeyCI@@ABKAAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QAE_NABVStringKeyCI@@ABUEmpty@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAE_NABVStringKeyCI@@ABUUSER_CONTEXT_INFO@WSManHttpListener@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAE_NABVStringKeyStore@@ABQAVExpiredOperationIdRecord@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAE_NABVStringKeyStore@@ABQAVServerFullDuplexChannel@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAE_NABW4WSManSessionOption@@ABQAVOptionValue@SessionOptions@Client@WSMan@@AAVIRequestContext@@@Z
+?Add@?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAE_NAB_KABQAVSendPacketArgs@RobustConnectionBuffer@@AAVIRequestContext@@@Z
+?Add@?$SafeSet@PAVCCertMapping@@@@QAE_NABQAVCCertMapping@@AAVIRequestContext@@@Z
+?Add@?$SafeSet@PAVCListenerOperation@@@@QAE_NABQAVCListenerOperation@@AAVIRequestContext@@@Z
+?Add@?$SafeSet@PAVCShellUriSettings@@@@QAE_NABQAVCShellUriSettings@@AAVIRequestContext@@@Z
+?Add@?$SafeSet@PAX@@QAE_NABQAXAAVIRequestContext@@@Z
+?Add@?$SafeSet@VStringKeyCI@@@@QAE_NABVStringKeyCI@@AAVIRequestContext@@@Z
+?AddDefaultPlugins@ConfigUpdate@@SGHPAVIRequestContext@@H@Z
+?AddKey@CWSManResourceNoResourceUri@@QAEHPBG0PAVIRequestContext@@@Z
+?AddMessage@CRequestContext@@AAEHPBGPAPAD1@Z
+?AddOption@CWSManResourceNoResourceUri@@QAEHPBG0HPAVIRequestContext@@@Z
+?AddOptionSet@CWSManResourceNoResourceUri@@QAEHPAU_WSMAN_OPTION_SET@@PAVIRequestContext@@@Z
+?AddPacket@PacketParser@@QAE_NPAVPacket@@_N11@Z
+?AddRef@CWSManSecurityUI@@UAGKXZ
+?AddRef@ILifeTimeMgmt@@UAEJXZ
+?AddRef@UserRecord@@QAE_NAAVIRequestContext@@@Z
+?AddSource@CBaseConfigCache@@IAEHPAVIRequestContext@@PAVCConfigChangeSource@@@Z
+?AddToMap@CBaseConfigCache@@AAEHPAVIRequestContext@@AAVAutoLocalFree@@@Z
+?Alloc@WSManMemory@@SGPAXIHW4_NitsFaultMode@@@Z
+?AllocBstr@WSManMemory@@SGPAGPBGHH@Z
+?AllocBstrLen@WSManMemory@@SGPAGPBGIHH@Z
+?AllocCache@CClientConfigCache@@CGPAVCBaseConfigCache@@XZ
+?AllocCache@CServiceConfigCache@@CGPAVCBaseConfigCache@@XZ
+?AllocCache@CWinRSPluginConfigCache@@CGPAVCBaseConfigCache@@XZ
+?AllocSysString@TSTRBUFFER@@QBEJPAPAG@Z
+?AllowBasic@CCommonConfigSettings@@UBEHXZ
+?AllowClientCertificate@CCommonConfigSettings@@UBEHXZ
+?AllowCredSsp@CCommonConfigSettings@@UBEHXZ
+?AllowKerberos@CCommonConfigSettings@@UBEHXZ
+?AllowNegotiate@CCommonConfigSettings@@UBEHXZ
+?AllowUnencrypted@CCommonConfigSettings@@UBEHXZ
+?Append@SBUFFER@@QAEJPAEI@Z
+?Append@SBUFFER@@QAEJPAV1@@Z
+?Append@TSTRBUFFER@@QAEJPBG@Z
+?Append@TSTRBUFFER@@QAEJPBGII@Z
+?AppendChar@TSTRBUFFER@@QAEJG@Z
+?AppendEscapeXmlAttribute@TSTRBUFFER@@QAEJPBGG@Z
+?AppendEscapeXmlContent@TSTRBUFFER@@QAEJPBG_N@Z
+?AppendXmlElem@TSTRBUFFER@@QAEJPBG0HKPAU_XML_ATTRIB@@@Z
+?AppendXmlElemWithNamespace@TSTRBUFFER@@QAEJPBG00HKPAU_XML_ATTRIB@@@Z
+?AppendXmlElemWithNamespaceAndPrefix@TSTRBUFFER@@QAEJPBG000HKPAU_XML_ATTRIB@@@Z
+?AppendXmlElemWithPrefix@TSTRBUFFER@@QAEJPBG00HKPAU_XML_ATTRIB@@@Z
+?AppendXmlEndElem@TSTRBUFFER@@QAEJPBG@Z
+?AppendXmlEndElemWithPrefix@TSTRBUFFER@@QAEJPBG0@Z
+?AppendXmlEndFragment@TSTRBUFFER@@QAEJXZ
+?AppendXmlEndItem@TSTRBUFFER@@QAEJXZ
+?AppendXmlStartElem@TSTRBUFFER@@QAEJPBGHKPAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithNamespace@TSTRBUFFER@@QAEJPBG0HKPAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithNamespaceAndPrefix@TSTRBUFFER@@QAEJPBG00HKPAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithNamespaces@TSTRBUFFER@@QAEJPBGKPAU_XML_NAMESPACE_PREFIX@@HKPAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithNamespacesAndPrefixes@TSTRBUFFER@@QAEJPBG0KPAU_XML_NAMESPACE_PREFIX@@HKPAU_XML_ATTRIB@@@Z
+?AppendXmlStartElemWithPrefix@TSTRBUFFER@@QAEJPBG0HKPAU_XML_ATTRIB@@@Z
+?AppendXmlStartFragment@TSTRBUFFER@@QAEJXZ
+?AppendXmlStartItem@TSTRBUFFER@@QAEJXZ
+?ApplyQuota@UserRecord@@QAE_NW4OperationType@@AAVIRequestContext@@PBVProvider@Catalog@@PAVCServiceConfigSettings@@@Z
+?ApplySecurity@ConfigRegistry@@IAEHPAVIRequestContext@@PAUHKEY__@@PBG2@Z
+?AsReference@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEAAV1@XZ
+?AsReference@?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAEAAV1@XZ
+?AuthzComplete@UserRecord@@UAEKPAX0W4AdministratorType@UserAuthzRecord@@KPBG@Z
+?BOMS@PacketFormatter@@0QBUBOMInfo@1@B DATA
+?BeginRevertToSelf@CSecurity@@SGHPAPAXK@Z
+?BuildFragmentTransfer@CWSManResourceNoResourceUri@@UAEHAAVBufferFormatter@@@Z
+?BuildOptionSet@CWSManResourceNoResourceUri@@QAEHAAVBufferFormatter@@@Z
+?BuildSelectorSet@CWSManEPR@@UAEHAAVBufferFormatter@@@Z
+?BuildSelectorSet@CWSManResourceNoResourceUri@@UAEHAAVBufferFormatter@@@Z
+?CHARSETS@PacketFormatter@@0QBUCharsetInfo@1@B DATA
+?ChangeLogging@CServiceConfigCache@@QAEXW4ErrorLogging@@@Z
+?CheckSharedSSLConfiguration@ConfigRegistry@@IAEHPAVIRequestContext@@PBG1HPAH@Z
+?Clear@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QAEXXZ
+?Clear@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEXXZ
+?Clear@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAEXXZ
+?Clear@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAEXXZ
+?ClearKeys@CWSManResourceNoResourceUri@@QAEHXZ
+?ClearOptions@CWSManResourceNoResourceUri@@QAEHXZ
+?ClearRegistryKeys@ConfigRegistry@@IAEHPAVIRequestContext@@@Z
+?ClearSubKeys@@YGHPAUHKEY__@@PAVIRequestContext@@@Z
+?CompleteWithErrorContext@CRequestContext@@QAEXPAU_WSMAN_PLUGIN_REQUEST@@@Z
+?Confirm@ExtendedSemantic@@2KB DATA
+?Copy@TSTRBUFFER@@QAEJPBG@Z
+?CopyString@@YGPAGPAVIRequestContext@@W4CallSiteId@@PBG@Z
+?CopyString@@YGPAGPBGABHAAVIRequestContext@@@Z
+?CopyString@MessageId@PacketParser@@QAEKPBGH@Z
+?CopyTo@CErrorContext@@UBEXPAVIRequestContext@@@Z
+?CopyTo@CRequestContext@@UBEXPAVIRequestContext@@@Z
+?CreateActivityId@EventHandler@WSMan@@SGXAAU_GUID@@@Z
+?CreateAnEvent@SoapSemanticConverter@@QAEKKPAVSemanticMessage@@AAVBufferFormatter@@PAVIRequestContext@@@Z
+?CreateAutoConfiguredListener@CConfigManager@@AAEHPAVIRequestContext@@PAVLISTENER_IDENTITY@@@Z
+?CreateInstance@?$ILoader@VAdminSid@CSecurity@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VEventHandler@WSMan@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VInteractiveSid@CSecurity@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VIpHlpApiDllLoader@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VMachineName@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VNetworkServiceSid@CSecurity@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VNtDsApiDllLoader@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VResources@Locale@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VShell32DllLoader@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VShlWApiDllLoader@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VSubscriptionManager@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VUser32DllLoader@@@@IAE_NAAVIRequestContext@@@Z
+?CreateInstance@?$ILoader@VWSManMemCryptManager@@@@IAE_NAAVIRequestContext@@@Z
+?CreateKey@ConfigRegistry@@IAEHPAVIRequestContext@@PBGPAPAUHKEY__@@1KPAK@Z
+?CreateNew@CBaseConfigCache@@CGPAV1@PAVIRequestContext@@PAVCConfigCacheMap@1@P6GPAV1@XZW4ErrorLogging@@H@Z
+?CreateProvHost@@YGPAXPAUHWND__@@PAK1PAJ@Z
+?CreateRenderingInformation@CWSManSecurityUI@@AAEHPAVIRequestContext@@@Z
+?CreateResponse@SoapSemanticConverter@@QAEKKW4_MI_OperationCallback_ResponseType@@AAVBufferFormatter@@PAVIRequestContext@@@Z
+?CreateSessionGuid@SessionId@PacketParser@@QAEKPBGH@Z
+?Data@?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@IBEAAV?$STLMap@PAVCCertMapping@@UEmpty@@@@XZ
+?Data@?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@IBEAAV?$STLMap@PAVCListenerOperation@@UEmpty@@@@XZ
+?Data@?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@IBEAAV?$STLMap@PAVCShellUriSettings@@UEmpty@@@@XZ
+?Data@?$SafeMap_Iterator@PAXUEmpty@@@@IBEAAV?$STLMap@PAXUEmpty@@@@XZ
+?Data@?$SafeMap_Iterator@UPluginKey@@K@@IBEAAV?$STLMap@UPluginKey@@K@@XZ
+?Data@?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@IBEAAV?$STLMap@UUserKey@@PAVBlockedRecord@@@@XZ
+?Data@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@IBEAAV?$STLMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@XZ
+?Data@?$SafeMap_Iterator@VKey@Locale@@K@@IBEAAV?$STLMap@VKey@Locale@@K@@XZ
+?Data@?$SafeMap_Iterator@VStringKeyCI@@K@@IBEAAV?$STLMap@VStringKeyCI@@K@@XZ
+?Data@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@IBEAAV?$STLMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@XZ
+?Data@?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@IBEAAV?$STLMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@XZ
+?Data@?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@IBEAAV?$STLMap@VStringKeyStore@@PAVServerFullDuplexChannel@@@@XZ
+?Data@?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@IBEAAV?$STLMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@XZ
+?Data@?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@IBEAAV?$STLMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@XZ
+?DeInitialize@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVCollector@@UEmpty@@V?$SafeSet_Iterator@PAVCollector@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PAVHostOperation@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PAVIOperation@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVPushSubscription@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VKey@CWmiPtrCache@@VMapping@2@V?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKey@@PAVListenerEvents@@V?$SafeMap_Iterator@VStringKey@@PAVListenerEvents@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKey@@PAVListenerSourceSubscription@@V?$SafeMap_Iterator@VStringKey@@PAVListenerSourceSubscription@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKey@@UOption@WinRM_OperationOptions@@V?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@PAVIISEndpoint@@V?$SafeMap_Iterator@VStringKeyCI@@PAVIISEndpoint@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@V?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@UAE_NAAVIRequestContext@@@Z
+?DeInitialize@CWSManGroupPolicyManager@@AAEHXZ
+?DeInitialize@EventHandler@WSMan@@QAE_NAAVIRequestContext@@@Z
+?Debug@ExtendedSemantic@@2KB DATA
+?Decode@PacketFormatter@@QBEKPAPAVPacket@@_N@Z
+?DecodeFaultObject@CRequestContext@@AAEKPAU_FWXML_ELEMENT@@AAPBG11@Z
+?DecodeFaultObject@CRequestContext@@AAEKPBGKAAPBG11@Z
+?DecodeFaultObjectProvider@CRequestContext@@AAEKPAU_FWXML_ELEMENT@@AAPBG1@Z
+?DecodeFaultObjectProviderMessage@CRequestContext@@AAEKPAU_FWXML_ELEMENT@@AAPBG@Z
+?DecodeFaultReason@CRequestContext@@AAEKPAU_FWXML_ELEMENT@@AAPBG@Z
+?DecreaseProfileCount@UserRecord@@QAEXXZ
+?DeleteConfigKey@ConfigRegistry@@KGHPAVIRequestContext@@PBG1H@Z
+?DeleteCredentialsFromCredmanStore@CConfigManager@@SGHPAVIRequestContext@@PAG@Z
+?DeleteKey@@YGHPAVIRequestContext@@PBG1@Z
+?DeleteKey@ConfigRegistry@@KGHPAVIRequestContext@@PBGH@Z
+?DeleteSubkeys@ConfigRegistry@@KGHPAVIRequestContext@@PAUHKEY__@@PBGHH@Z
+?DeleteValues@ConfigRegistry@@KGHPAVIRequestContext@@PAUHKEY__@@@Z
+?Detach@?$AutoCleanup@V?$AutoDelete@G@@PAG@@QAEPAGXZ
+?Detach@?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PAUIPRange@CWSManIPFilter@@@@QAEPAUIPRange@CWSManIPFilter@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PAU_WSMAN_STREAM_ID_SET@@@@QAEPAU_WSMAN_STREAM_ID_SET@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PAV?$Handle@VISubscription@@@@@@QAEPAV?$Handle@VISubscription@@@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@QAEPAV?$SafeSet@PAVCCertMapping@@@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@QAEPAV?$SafeSet@PAVCShellUriSettings@@@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@QAEPAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PAVAdminSid@CSecurity@@@@QAEPAVAdminSid@CSecurity@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@@QAEPAVBlockedRecord@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAEPAVCBaseConfigCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PAVCCertMapping@@@@QAEPAVCCertMapping@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PAVCListenerSettings@@@@QAEPAVCListenerSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@@QAEPAVCServiceWatcher@CServiceConfigCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PAVCShellUriSettings@@@@QAEPAVCShellUriSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PAVCWSManEPR@@@@QAEPAVCWSManEPR@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@@QAEPAVCWSManResource@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PAVCertHash@@@@QAEPAVCertHash@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@QAEPAVConfigUpdate@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEPAVEnumSinkEx@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PAVEventHandler@WSMan@@@@QAEPAVEventHandler@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PAVExpiredOperationIdRecord@@@@QAEPAVExpiredOperationIdRecord@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEPAVGeneralSinkEx@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QAEPAVIQueryDASHSMASHInterface@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QAEPAVISpecification@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PAVInteractiveSid@CSecurity@@@@QAEPAVInteractiveSid@CSecurity@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PAVIpHlpApiDllLoader@@@@QAEPAVIpHlpApiDllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PAVMachineName@@@@QAEPAVMachineName@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PAVNetworkServiceSid@CSecurity@@@@QAEPAVNetworkServiceSid@CSecurity@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PAVNtDsApiDllLoader@@@@QAEPAVNtDsApiDllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAEPAVOptionValue@SessionOptions@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PAVResources@Locale@@@@QAEPAVResources@Locale@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@@QAEPAVSecurityEntry@Catalog@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@@QAEPAVServiceSoapProcessor@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PAVShell32DllLoader@@@@QAEPAVShell32DllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PAVShlWApiDllLoader@@@@QAEPAVShlWApiDllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PAVSubscriptionManager@@@@QAEPAVSubscriptionManager@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QAEPAVTSTRBUFFER@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PAVUser32DllLoader@@@@QAEPAVUser32DllLoader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PAVWSManMemCryptManager@@@@QAEPAVWSManMemCryptManager@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QAEPAVWmiEnumContext@@XZ
+?Detach@?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@QAEPAVXmlReader@@XZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PBG@@QAEPBGXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@D@@PAD@@QAEPADXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QAEPAEXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QAEPAGXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QAEPAPAGXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QAEPAPBGXZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAEPAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QAEPAU_WINRS_RUN_COMMAND_ARG@@XZ
+?Detach@?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PAU_WSMAN_OPTION@@@@QAEPAU_WSMAN_OPTION@@XZ
+?Detach@?$AutoCleanup@V?$AutoFree@E@@PAE@@QAEPAEXZ
+?Detach@?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@@QAEPAVPacket@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QAEPAUIClientSecurity@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QAEPAUIEnumWbemClassObject@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QAEPAUIErrorInfo@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QAEPAUIUnknown@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QAEPAUIWbemClassObject@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QAEPAUIWbemContext@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QAEPAUIWbemLocator@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QAEPAUIWbemObjectTextSrc@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QAEPAUIWbemPath@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QAEPAUIWbemPathKeyList@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QAEPAUIWbemQualifierSet@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QAEPAUIWbemQuery@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QAEPAUIWbemServices@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PAVApplication@Client@WSMan@@@@QAEPAVApplication@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@QAEPAVCBaseConfigCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@QAEPAVCClientConfigSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PAVCCommonConfigSettings@@@@QAEPAVCCommonConfigSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@QAEPAVCConfigManager@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@QAEPAVCRemoteSession@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@QAEPAVCRequestContext@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@@QAEPAVCServiceConfigSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QAEPAVCWSManEPR@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PAVCWSManGroupPolicyCache@@@@QAEPAVCWSManGroupPolicyCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@@QAEPAVCWSManGroupPolicyManager@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PAVCWSManObject@@@@QAEPAVCWSManObject@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QAEPAVCWinRSPluginConfigCache@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@@QAEPAVCWinRSPluginConfigSettings@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PAVCommand@Client@WSMan@@@@QAEPAVCommand@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEPAVEnumSinkEx@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEPAVGeneralSinkEx@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PAVIPCSoapProcessor@@@@QAEPAVIPCSoapProcessor@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QAEPAVIRequestContext@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PAVReceiveOperation@Client@WSMan@@@@QAEPAVReceiveOperation@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PAVSendOperation@Client@WSMan@@@@QAEPAVSendOperation@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAEPAVShell@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PAVSignalOperation@Client@WSMan@@@@QAEPAVSignalOperation@Client@WSMan@@XZ
+?Detach@?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QAEPAGXZ
+?Detach@?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@QAEPBU_CERT_CONTEXT@@XZ
+?Detach@?$AutoCleanup@VAutoHandle@@PAX@@QAEPAXXZ
+?Detach@?$AutoCleanup@VAutoImpersonateUser@@PAX@@QAEPAXXZ
+?Detach@?$AutoCleanup@VAutoLocalFree@@PAX@@QAEPAXXZ
+?Detach@?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QAEPAU_MI_Class@@XZ
+?Detach@?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@QAEPAU_MI_Instance@@XZ
+?Detach@?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@QAEPAUHKEY__@@XZ
+?Detach@?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@QAEPAXXZ
+?Detach@?$AutoCleanup@VAutoWaitHandle@@PAX@@QAEPAXXZ
+?Detach@BufferFormatter@@QAEPAEXZ
+?Discard@CServiceWatcher@CServiceConfigCache@@QAEXXZ
+?DoOnChange@CBaseConfigCache@@IAEXW4ConfigChangeSources@@KW4ConfigChangeSeverityType@@@Z
+?DoesThreadOwnLock@CWSManCriticalSection@@QAEHXZ
+?Down@?$LoaderSerializer@VSubscriptionManager@@$01@@AAEJXZ
+?DropData@CircularBufferFormatter@@QAEXK@Z
+?DuplicateCurrentToken@CSecurity@@SGHPAPAXKPAU_SECURITY_ATTRIBUTES@@W4_SECURITY_IMPERSONATION_LEVEL@@W4_TOKEN_TYPE@@H@Z
+?EnableAllPrivileges@@YGHPAPAE@Z
+?Encode@PacketFormatter@@QBEKPAPAVPacket@@@Z
+?Encode@PacketFormatter@@QBEKPBGKPAEKPAPAEPAK_N@Z
+?EndOfStream@PacketParser@@QAEXK@Z
+?EndRevertToSelf@CSecurity@@SGHPAX@Z
+?EnsureActivityIdOnThread@EventHandler@WSMan@@SGXXZ
+?EnsureNoActiveCaches@CClientConfigCache@@SGXXZ
+?EnsureNoActiveCaches@CServiceConfigCache@@SGXXZ
+?Error@EventLog@@SGXK@Z
+?Error@EventLog@@SGXKGPAPBG@Z
+?Error@EventLog@@SGXKPBG@Z
+?ErrorAction@ExtendedSemantic@@2KB DATA
+?EventEnabled@EventHandler@WSMan@@AAE_NABU_EVENT_DESCRIPTOR@@@Z
+?EventProviderEnabled@EventHandler@WSMan@@AAE_NXZ
+?EventWrite@EventHandler@WSMan@@AAEXABU_EVENT_DESCRIPTOR@@KPAU_EVENT_DATA_DESCRIPTOR@@@Z
+?ExtractContextId@PacketParser@@QAEHPAPBGKPBG@Z
+?ExtractShellId@PacketParser@@QAEHPAVCRequestContext@@PAGK@Z
+?ExtractSidFromToken@CSecurity@@SGHPAVIRequestContext@@PAXAAVAutoLocalFree@@@Z
+?FindExisting@CBaseConfigCache@@CGPAV1@PAVCConfigCacheMap@1@PBGW4ErrorLogging@@@Z
+?FindMatch@CResourceAlias@@AAEPAU_ALIAS_INFORMATION@@PBG@Z
+?First@TSTRBUFFER@@QBEPBGXZ
+?Format@Locale@@ABE_NKPAPADPAPAXPAGKGW4CallSiteId@@@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SGXAAU_EVENT_DATA_DESCRIPTOR@@AAG@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SGXAAU_EVENT_DATA_DESCRIPTOR@@AAJ@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SGXAAU_EVENT_DATA_DESCRIPTOR@@AAK@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SGXAAU_EVENT_DATA_DESCRIPTOR@@PBD@Z
+?FormatDataDescriptor@EventHandler@WSMan@@SGXAAU_EVENT_DATA_DESCRIPTOR@@PBG@Z
+?FormatWithFallback@Locale@@ABE_NKPAPAD0PAPAXPAGK@Z
+?Free@WSManMemory@@SGXPAXH@Z
+?FreeBstr@WSManMemory@@SGXPAGHH@Z
+?FreeInstance@?$ILoader@VAdminSid@CSecurity@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VEventHandler@WSMan@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VInteractiveSid@CSecurity@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VIpHlpApiDllLoader@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VMachineName@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VNetworkServiceSid@CSecurity@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VNtDsApiDllLoader@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VResources@Locale@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VShell32DllLoader@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VShlWApiDllLoader@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VSubscriptionManager@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VUser32DllLoader@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$ILoader@VWSManMemCryptManager@@@@QAE_NAAVIRequestContext@@_N@Z
+?FreeInstance@?$LoaderSerializer@VSubscriptionManager@@$01@@QAE_NAAVIRequestContext@@_N@Z
+?FreeMemory@RBUFFER@@QAEXXZ
+?FreeMemory@SBUFFER@@QAEXXZ
+?FreePacket@PacketParser@@QAEXXZ
+?FreeXmlStructure@PacketParser@@QAEXXZ
+?GenerateTransferId@EventHandler@WSMan@@SGXABU_EVENT_DESCRIPTOR@@PBU_GUID@@1@Z
+?GenerateTransferIdImp@EventHandler@WSMan@@AAEXABU_EVENT_DESCRIPTOR@@PBU_GUID@@1@Z
+?GetAccessRights@CWSManSecurityUI@@UAGJPBU_GUID@@KPAPAU_SI_ACCESS@@PAK2@Z
+?GetAction@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetActionType@SoapSemanticConverter@@AAE_NPBGPAW4_MI_OperationCallback_ResponseType@@PAW4_MI_CallbackMode@@PAVIRequestContext@@@Z
+?GetActivityIdOnCurrentThread@EventHandler@WSMan@@SGXAAU_GUID@@@Z
+?GetBaseUri@CWSManResource@@QAEPBGXZ
+?GetBomIndex@PacketFormatter@@QBE?AW4Charset@1@XZ
+?GetBookmarkXml@PacketParser@@QAEABV?$PacketElement@PAU_FWXML_ELEMENT@@@1@XZ
+?GetBool@CConfigManager@@QAEHPAVIRequestContext@@W4ConfigSetting@@PAHPAW4WSManConfigSource@@@Z
+?GetBool@CWSManGroupPolicyManager@@QAEHPAVIRequestContext@@W4WSManGroupPolicySetting@@PAHPAW4WSManGroupPolicySettingState@@@Z
+?GetBuffer@BufferFormatter@@UAEPAEXZ
+?GetBuffer@BufferFormatter@@UBEPBEXZ
+?GetBuffer@CircularBufferFormatter@@UAEPAEXZ
+?GetBuffer@CircularBufferFormatter@@UBEPBEXZ
+?GetBuffer@XmlReader@@QAEPBGXZ
+?GetBufferLength@PacketParser@@UAEKXZ
+?GetBufferPtr@PacketParser@@UAEPAPAGXZ
+?GetBufferSize@BufferFormatter@@QBEKXZ
+?GetCacheCount@CClientConfigCache@@SGKXZ
+?GetCacheCount@CServiceConfigCache@@SGKXZ
+?GetCalculationSize@BufferFormatter@@UBEK_N@Z
+?GetCalculationSize@CircularBufferFormatter@@UBEK_N@Z
+?GetCharInUse@TSTRBUFFER@@QBEIXZ
+?GetCharset@PacketFormatter@@QBE?AW4Charset@1@XZ
+?GetCharsetLen@PacketFormatter@@QBEKXZ
+?GetCharsetName@PacketFormatter@@QBEPBDXZ
+?GetChildCount@ChildLifeTimeManager@@QBEJXZ
+?GetConfigCache@CBaseConfigCache@@KGPAV1@PAVIRequestContext@@W4ErrorLogging@@P6GPAV1@XZPAVFastLock@@AAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@H@Z
+?GetConfigCache@CClientConfigCache@@SGPAV1@PAVIRequestContext@@H@Z
+?GetConfigCache@CServiceConfigCache@@SGPAV1@PAVIRequestContext@@W4ErrorLogging@@H@Z
+?GetConfigCache@CWinRSPluginConfigCache@@SGPAV1@PAVIRequestContext@@W4ErrorLogging@@H@Z
+?GetConfigManager@CConfigManager@@SGPAV1@XZ
+?GetConfigManagerForCertMapping@CConfigManager@@SGPAV1@PAVCERTMAPPING_IDENTITY@@PAVIRequestContext@@@Z
+?GetConfigManagerForListener@CConfigManager@@SGPAV1@PAVLISTENER_IDENTITY@@PAVIRequestContext@@@Z
+?GetConfigManagerForShellUri@CConfigManager@@SGPAV1@PAVSHELLURI_IDENTITY@@PAVIRequestContext@@@Z
+?GetConfigManagerForTable@CConfigManager@@SGPAV1@PAVWSMANCONFIGTABLE_IDENTITY@@PAVIRequestContext@@@Z
+?GetConfigXml@CConfigManager@@QAEHPAVIRequestContext@@PAPBGPAPAVXmlReader@@PAH@Z
+?GetCorrelationId@PacketParser@@QAEAAU_GUID@@XZ
+?GetCurrentCertMappingIdentity@CConfigManager@@QAEHPAVCERTMAPPING_IDENTITY@@PAVIRequestContext@@@Z
+?GetCurrentListenerIdentity@CConfigManager@@QAEHPAVLISTENER_IDENTITY@@PAVIRequestContext@@@Z
+?GetCurrentSettings@CBaseConfigCache@@IAEPAVCCommonConfigSettings@@PAVIRequestContext@@@Z
+?GetCurrentSettings@CClientConfigCache@@QAEPAVCClientConfigSettings@@PAVIRequestContext@@@Z
+?GetCurrentSettings@CServiceConfigCache@@QAEPAVCServiceConfigSettings@@PAVIRequestContext@@@Z
+?GetCurrentSettings@CWinRSPluginConfigCache@@QAEPAVCWinRSPluginConfigSettings@@PAVIRequestContext@@@Z
+?GetCurrentShellUriIdentity@CConfigManager@@QAEHPAVSHELLURI_IDENTITY@@PAVIRequestContext@@@Z
+?GetCurrentTableIdentity@CConfigManager@@QAEHPAVWSMANCONFIGTABLE_IDENTITY@@PAVIRequestContext@@@Z
+?GetDataLocale@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetDataLocaleHelper@PacketParser@@QAEAAVLocale@@XZ
+?GetDescriptionElement@SoapSemanticConverter@@QAEPAU_FWXML_ELEMENT@@PAU2@PAVIRequestContext@@@Z
+?GetDestructorIter@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@QAEAAV?$SafeSet_Iterator@PAVCCertMapping@@@@XZ
+?GetDestructorIter@?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@QAEAAV?$SafeSet_Iterator@PAVCShellUriSettings@@@@XZ
+?GetDestructorIter@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAEAAV?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@XZ
+?GetDestructorIter@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAEAAV?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@XZ
+?GetDestructorIter@?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEAAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@XZ
+?GetDialect@Fragment@PacketParser@@QBEPBGXZ
+?GetError@BufferFormatter@@QBEKXZ
+?GetErrorCode@CErrorContext@@UBEKXZ
+?GetEventType@SoapSemanticConverter@@AAEKPBGPAVIRequestContext@@@Z
+?GetEventTypeAndResponseElement@SoapSemanticConverter@@AAEPAU_FWXML_ELEMENT@@PAU2@PAKPAVIRequestContext@@@Z
+?GetExtendedErrorString@CErrorContext@@UAEPAGXZ
+?GetExtendedErrorString@CRequestContext@@UAEPAGXZ
+?GetFaultToXml@PacketParser@@QBEABVReferenceParameters@1@XZ
+?GetFaultXML@CErrorContext@@UBEPBGXZ
+?GetFaultXML@CRequestContext@@UBEPBGXZ
+?GetFaultXMLPrivate@CRequestContext@@AAEXPAPAD0KHKKPBG11@Z
+?GetFirstConfigManagerForCertMapping@CConfigManager@@SGPAV1@PBG@Z
+?GetFirstConfigManagerForListener@CConfigManager@@SGPAV1@PBG@Z
+?GetFirstConfigManagerForShellUri@CConfigManager@@SGPAV1@PBG@Z
+?GetFirstConfigManagerForTable@CConfigManager@@SGPAV1@W4WSMANTableConfigType@@PBG@Z
+?GetFormat@PacketFormatter@@QBE?AW4Charset@1@XZ
+?GetFormatterMode@BufferFormatter@@QAE?AW4Charset@PacketFormatter@@XZ
+?GetFragment@PacketParser@@QBEABVFragment@1@XZ
+?GetFragmentDialect@CWSManResourceNoResourceUri@@QAEPBGXZ
+?GetFragmentPath@CWSManResourceNoResourceUri@@QAEPBGXZ
+?GetGroupPolicyManager@CWSManGroupPolicyManager@@SGPAV1@PAVIRequestContext@@PBG@Z
+?GetHeap@WSManMemory@@SGPAXXZ
+?GetIISConfiguration@CConfigManager@@SGHPAVIRequestContext@@PBGPAPAVXmlReader@@@Z
+?GetImpersonationToken@UserRecord@@QAEPAXXZ
+?GetInheritTypes@CWSManSecurityUI@@UAGJPAPAU_SI_INHERIT_TYPE@@PAK@Z
+?GetInitError@CWSManCriticalSection@@QBEKXZ
+?GetInstance@?$LoaderSerializer@VAdminSid@CSecurity@@$00@@QAEPAVAdminSid@CSecurity@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VEventHandler@WSMan@@$00@@QAEPAVEventHandler@WSMan@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VInteractiveSid@CSecurity@@$00@@QAEPAVInteractiveSid@CSecurity@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VIpHlpApiDllLoader@@$00@@QAEPAVIpHlpApiDllLoader@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VMachineName@@$00@@QAEPAVMachineName@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VNetworkServiceSid@CSecurity@@$00@@QAEPAVNetworkServiceSid@CSecurity@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VNtDsApiDllLoader@@$00@@QAEPAVNtDsApiDllLoader@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VResources@Locale@@$0A@@@QAEPAVResources@Locale@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VShell32DllLoader@@$00@@QAEPAVShell32DllLoader@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VShlWApiDllLoader@@$00@@QAEPAVShlWApiDllLoader@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VSubscriptionManager@@$01@@QAEPAVSubscriptionManager@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VUser32DllLoader@@$00@@QAEPAVUser32DllLoader@@AAVIRequestContext@@@Z
+?GetInstance@?$LoaderSerializer@VWSManMemCryptManager@@$00@@QAEPAVWSManMemCryptManager@@AAVIRequestContext@@@Z
+?GetInt@CConfigManager@@QAEHPAVIRequestContext@@W4ConfigSetting@@PAKPAW4WSManConfigSource@@@Z
+?GetInt@CWSManGroupPolicyManager@@QAEHPAVIRequestContext@@W4WSManGroupPolicySetting@@PAKPAW4WSManGroupPolicySettingState@@@Z
+?GetKey@UserRecord@@QBE?AUUserKey@@XZ
+?GetKeyCount@CWSManResourceNoResourceUri@@QAEKXZ
+?GetKeyValue@CWSManResourceNoResourceUri@@QAEPBGPBG@Z
+?GetKeys@CWSManResourceNoResourceUri@@QAEPAU_WSMAN_KEY@@XZ
+?GetLCID@Locale@@QAEKXZ
+?GetLength@XmlReader@@QAEIXZ
+?GetLocale@CRequestContext@@QAEAAVLocale@@XZ
+?GetLocale@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetLocaleHelper@PacketParser@@QAEAAVLocale@@XZ
+?GetLocaleString@CRequestContext@@QAEPBGXZ
+?GetLocator@CWSManResource@@QAEPAU_WSMAN_RESOURCE_LOCATOR@@XZ
+?GetMachineId@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetMap@?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QBEAAV?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@QBEAAV?$SafeMap@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QBEAAV?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@QBEAAV?$SafeMap@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@QBEAAV?$SafeMap@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@QBEAAV?$SafeMap@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QBEAAV?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@QBEAAV?$SafeMap@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@QBEAAV?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@QBEAAV?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@QBEAAV?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@QBEAAV?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@PAXUEmpty@@@@QBEAAV?$SafeMap@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@UPluginKey@@K@@QBEAAV?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@XZ
+?GetMap@?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@QBEAAV?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QBEAAV?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@QBEAAV?$SafeMap@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VKey@Locale@@K@@QBEAAV?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyCI@@K@@QBEAAV?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@QBEAAV?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QBEAAV?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QBEAAV?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@QBEAAV?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QBEAAV?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@XZ
+?GetMap@?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@QBEAAV?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@QBEABV?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@QBEABV?$SafeMap@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@QBEABV?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@QBEABV?$SafeMap@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@QBEABV?$SafeMap@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@QBEABV?$SafeMap@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@QBEABV?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@QBEABV?$SafeMap@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@QBEABV?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@QBEABV?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@QBEABV?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@QBEABV?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@QBEABV?$SafeMap@PAXUEmpty@@V?$SafeMap_Iterator@PAXUEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QBEABV?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@XZ
+?GetMap@?$SafeMap_Lock@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QBEABV?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QBEABV?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@QBEABV?$SafeMap@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@QBEABV?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QBEABV?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@QBEABV?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QBEABV?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QBEABV?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@XZ
+?GetMap@?$SafeMap_Lock@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QBEABV?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@XZ
+?GetMap@?$SafeMap_Lock@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QBEABV?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@XZ
+?GetMap@?$SafeMap_Lock@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QBEABV?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@XZ
+?GetMaxBatchItems@CCommonConfigSettings@@UAEKXZ
+?GetMaxBatchSize@CCommonConfigSettings@@UAEKXZ
+?GetMaxEnvelopeSize@CCommonConfigSettings@@UAEKXZ
+?GetMaxEnvelopeSize@PacketParser@@QBEABV?$PacketElement@K@1@XZ
+?GetMaxTimeOut@CCommonConfigSettings@@UAEKXZ
+?GetMessageAlloc@Locale@@QBAPBGAAVAutoLocalFree@@KZZ
+?GetMessageEmpty@Locale@@QBEPBGAAVAutoLocalFree@@K@Z
+?GetMessageId@CErrorContext@@UBEKXZ
+?GetMessageId@CRequestContext@@UBEKXZ
+?GetMessageId@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetMessageW@Locale@@QBE_NKPAPAD0PAGK@Z
+?GetMinBatchItems@CCommonConfigSettings@@UAEKXZ
+?GetMinBatchSize@CCommonConfigSettings@@UAEKXZ
+?GetMinBatchTimeout@CCommonConfigSettings@@UAEKXZ
+?GetMinEnvelopeSize@CCommonConfigSettings@@UAEKXZ
+?GetMinTimeOut@CCommonConfigSettings@@UAEKXZ
+?GetNamespacePrefix@NotUnderstandSoapHeader@PacketParser@@QBEPBGXZ
+?GetNamespaceUrl@NotUnderstandSoapHeader@PacketParser@@QBEPBGXZ
+?GetNewStorage@RBUFFER@@IAEHI@Z
+?GetNotUnderstandHeader@PacketParser@@QBEABVNotUnderstandSoapHeader@1@XZ
+?GetObjectInformation@CWSManSecurityUI@@UAGJPAU_SI_OBJECT_INFO@@@Z
+?GetObjectW@?$ILoader@VAdminSid@CSecurity@@@@IBEPAVAdminSid@CSecurity@@XZ
+?GetObjectW@?$ILoader@VEventHandler@WSMan@@@@IBEPAVEventHandler@WSMan@@XZ
+?GetObjectW@?$ILoader@VInteractiveSid@CSecurity@@@@IBEPAVInteractiveSid@CSecurity@@XZ
+?GetObjectW@?$ILoader@VIpHlpApiDllLoader@@@@IBEPAVIpHlpApiDllLoader@@XZ
+?GetObjectW@?$ILoader@VMachineName@@@@IBEPAVMachineName@@XZ
+?GetObjectW@?$ILoader@VNetworkServiceSid@CSecurity@@@@IBEPAVNetworkServiceSid@CSecurity@@XZ
+?GetObjectW@?$ILoader@VNtDsApiDllLoader@@@@IBEPAVNtDsApiDllLoader@@XZ
+?GetObjectW@?$ILoader@VResources@Locale@@@@IBEPAVResources@Locale@@XZ
+?GetObjectW@?$ILoader@VShell32DllLoader@@@@IBEPAVShell32DllLoader@@XZ
+?GetObjectW@?$ILoader@VShlWApiDllLoader@@@@IBEPAVShlWApiDllLoader@@XZ
+?GetObjectW@?$ILoader@VSubscriptionManager@@@@IBEPAVSubscriptionManager@@XZ
+?GetObjectW@?$ILoader@VUser32DllLoader@@@@IBEPAVUser32DllLoader@@XZ
+?GetObjectW@?$ILoader@VWSManMemCryptManager@@@@IBEPAVWSManMemCryptManager@@XZ
+?GetOperationId@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetOptionCount@CWSManResourceNoResourceUri@@QAEKXZ
+?GetOptionTypes@CWSManResourceNoResourceUri@@QAEPAPBGXZ
+?GetOptionValue@CWSManResourceNoResourceUri@@QAEPBGPBG@Z
+?GetOptions@CWSManResourceNoResourceUri@@QAEPAU_WSMAN_OPTION@@XZ
+?GetOptionsMustUnderstandValue@CWSManResourceNoResourceUri@@QAEHXZ
+?GetOptionsSetXml@PacketParser@@QAEABV?$PacketElement@PAU_FWXML_ELEMENT@@@1@XZ
+?GetOriginalUri@CWSManResource@@QAEPBGXZ
+?GetPacket@PacketParser@@QAEPAVPacket@@XZ
+?GetPacketPool@PacketParser@@QAEAAVPacketPool@@XZ
+?GetParser@XmlReader@@QAEPAXXZ
+?GetPath@Fragment@PacketParser@@QBEPBGXZ
+?GetPolicyLocation@CWSManGroupPolicyManager@@AAEPBGPBU_WSMAN_POLICY_INFO@@@Z
+?GetPolicyValueForConfigSetting@CConfigManager@@AAEJW4ConfigSetting@@KPAGPAKPAW4WSManGroupPolicySettingState@@PAVIRequestContext@@@Z
+?GetPolicyValueForConfigSetting@CConfigManager@@AAEJW4ConfigSetting@@PAKPAW4WSManGroupPolicySettingState@@PAVIRequestContext@@@Z
+?GetProfileCount@UserRecord@@QAEJXZ
+?GetProfileHandle@UserRecord@@QAE_JXZ
+?GetPromptType@SoapSemanticConverter@@AAE_NPBGPAW4_MI_PromptType@@PAVIRequestContext@@@Z
+?GetQuotaRecord@UserRecord@@QBEPBVQuotaRecord@@XZ
+?GetRefCount@ILifeTimeMgmt@@QAEJXZ
+?GetReferenceParameters@ReferenceParameters@PacketParser@@QBEPBGXZ
+?GetReferenceProperties@ReferenceParameters@PacketParser@@QBEPBGXZ
+?GetRemainderPacket@PacketParser@@QAEPAVPacket@@PAVIRequestContext@@@Z
+?GetReplyToXml@PacketParser@@QBEABVReferenceParameters@1@XZ
+?GetRequestedDataLocale@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetRequestedLocale@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetResourceUri@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetRoot@XmlReader@@QAEPAU_FWXML_ELEMENT@@XZ
+?GetSecurity@CWSManSecurityUI@@UAGJKPAPAXH@Z
+?GetSecurityDescriptor@CConfigManager@@QAEHPAVIRequestContext@@W4ConfigSetting@@PAPAXPAW4WSManConfigSource@@@Z
+?GetSelectorSetXml@PacketParser@@QAEABV?$PacketElement@PAU_FWXML_ELEMENT@@@1@XZ
+?GetSequenceId@PacketParser@@QBEABV?$PacketElement@_K@1@XZ
+?GetServiceCatalog@@YGPAVCatalog@@XZ
+?GetSessionId@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetSessionIdGuid@PacketParser@@QAEAAU_GUID@@XZ
+?GetSessionIdGuid@SessionId@PacketParser@@QAEAAU_GUID@@XZ
+?GetSetting@CConfigManager@@QAEHPAVIRequestContext@@W4ConfigSetting@@KPAGPAKPAW4WSManConfigSource@@@Z
+?GetShellCompressionType@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetSid@CSecurity@@SGPAXXZ
+?GetSizeInUse@SBUFFER@@QBEIXZ
+?GetSoapBody@PacketParser@@QAEPAU_FWXML_ELEMENT@@XZ
+?GetSoapHeaders@PacketParser@@QAEPAU_FWXML_ELEMENT@@XZ
+?GetSourceSubscriptionId@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetSpaceUsed@BufferFormatter@@UBEK_N@Z
+?GetSpaceUsed@CircularBufferFormatter@@UBEK_N@Z
+?GetStrPtr@TSTRBUFFER@@QAEPAGXZ
+?GetString@CConfigManager@@QAEHPAVIRequestContext@@W4ConfigSetting@@KPAGPAKPAW4WSManConfigSource@@@Z
+?GetString@CWSManGroupPolicyManager@@QAEHPAVIRequestContext@@W4WSManGroupPolicySetting@@KPAGPAKPAW4WSManGroupPolicySettingState@@@Z
+?GetString@Locale@@QAEPBGXZ
+?GetStringInternal@CConfigManager@@AAEHPAVIRequestContext@@W4ConfigSetting@@KKPAGPAKPAW4WSManConfigSource@@@Z
+?GetStringInternal@CWSManGroupPolicyManager@@AAEHPAVIRequestContext@@W4WSManGroupPolicySetting@@KKPAGPAKPAW4WSManGroupPolicySettingState@@@Z
+?GetSubscriptionId@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetSuccessCode@OnHTTPInitialize@@QBEKXZ
+?GetTimeout@PacketParser@@QBEABV?$PacketElement@K@1@XZ
+?GetTo@PacketParser@@QBEABV?$PacketElement@PBG@1@XZ
+?GetToken@CSecurity@@SGPAXXZ
+?GetToken@UserRecord@@QAEPAXXZ
+?GetUpdatedSDDL@CWSManSecurityUI@@QAEPAGPAVIRequestContext@@@Z
+?GetUri@CWSManResource@@QAEPBGXZ
+?GetUserAdministratorType@UserRecord@@QBE?AW4AdministratorType@UserAuthzRecord@@XZ
+?GetUserNameW@UserRecord@@QAEPBGXZ
+?GetValue@?$PacketElement@K@PacketParser@@QBEKXZ
+?GetValue@?$PacketElement@PAU_FWXML_ELEMENT@@@PacketParser@@QBEPAU_FWXML_ELEMENT@@XZ
+?GetValue@?$PacketElement@PBG@PacketParser@@QBEPBGXZ
+?GetValue@?$PacketElement@_K@PacketParser@@QBE_KXZ
+?GetWsmanData@TSTRBUFFER@@QAEXPAU_WSMAN_DATA@@@Z
+?GetXmlDoc@PacketParser@@QAEPAUFWXML_DOCUMENT@@XZ
+?GrowBuffer@BufferFormatter@@UAEKK@Z
+?GrowBuffer@BufferFormatter@@UAEKXZ
+?GrowBuffer@CircularBufferFormatter@@UAEKK@Z
+?GrowBuffer@CircularBufferFormatter@@UAEKXZ
+?HandleAutoConfiguredListener@CConfigManager@@QAEHPAVIRequestContext@@PAVLISTENER_IDENTITY@@@Z
+?HandleMigration@@YGHPAVWSManMigrationContext@@@Z
+?HasFaultXML@CRequestContext@@QBEHXZ
+?HasHtmlError@CRequestContext@@ABEHXZ
+?HasOption@CWSManResourceNoResourceUri@@QAEHPBG@Z
+?ImpersonateUserOrSelf@CSecurity@@SGHW4CallSiteId@@PAX@Z
+?IncreaseProfileCount@UserRecord@@QAEXXZ
+?Info@EventLog@@SGXK@Z
+?Info@EventLog@@SGXKGPAPBG@Z
+?Info@EventLog@@SGXKPBG@Z
+?Init@CBaseConfigCache@@IAEHPAVIRequestContext@@H@Z
+?Init@CWSManSecurityUI@@QAEHPAG0PAVIRequestContext@@@Z
+?Init@ConfigRegistry@@IAEHXZ
+?Init@XmlReader@@QAEHPAVIRequestContext@@PAUWSMAN_OBJECT@@@Z
+?Init@XmlReader@@QAEHPAVIRequestContext@@PBG@Z
+?InitCfgMgr@CConfigManager@@AAEHPAVWSMANCONFIGTABLE_IDENTITY@@@Z
+?InitCfgMgr@CConfigManager@@AAEHPAVWSMANCONFIGTABLE_IDENTITY@@PAUHKEY__@@1@Z
+?InitMap@CBaseConfigCache@@CGHPAVIRequestContext@@AAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@@Z
+?Initialize@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVCollector@@UEmpty@@V?$SafeSet_Iterator@PAVCollector@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PAVHostOperation@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PAVIOperation@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVPushSubscription@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VKey@CWmiPtrCache@@VMapping@2@V?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKey@@PAVListenerEvents@@V?$SafeMap_Iterator@VStringKey@@PAVListenerEvents@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKey@@PAVListenerSourceSubscription@@V?$SafeMap_Iterator@VStringKey@@PAVListenerSourceSubscription@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKey@@UOption@WinRM_OperationOptions@@V?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@PAVIISEndpoint@@V?$SafeMap_Iterator@VStringKeyCI@@PAVIISEndpoint@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@V?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@UAE_NAAVIRequestContext@@@Z
+?Initialize@?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QAEAAV1@XZ
+?Initialize@?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QAEAAV1@XZ
+?Initialize@?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QAEAAV1@XZ
+?Initialize@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QAEAAV1@XZ
+?Initialize@?$SafeMap_Iterator@VStringKeyCI@@K@@QAEAAV1@XZ
+?Initialize@?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QAEAAV1@XZ
+?Initialize@?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAEAAV1@XZ
+?Initialize@CWSManGroupPolicyManager@@AAEHPAVIRequestContext@@PBG@Z
+?Initialize@EventHandler@WSMan@@QAE_NAAVIRequestContext@@@Z
+?Initialize@UserRecord@@SGXAAV1@ABUInitializer@1@@Z
+?InitializeSources@CBaseConfigCache@@IAEHPAVIRequestContext@@HH@Z
+?InitializeSourcesHelper@CBaseConfigCache@@MAEHPAVIRequestContext@@H@Z
+?InitializeSourcesHelper@CClientConfigCache@@EAEHPAVIRequestContext@@H@Z
+?InsertAtPosition@TSTRBUFFER@@QAEJPBGI@Z
+?InternalFailure@CErrorContext@@UAAXKZZ
+?InternalFailure@CRequestContext@@UAAXKZZ
+?InternalHResult@CErrorContext@@UAAXKKZZ
+?InternalHResult@CRequestContext@@UAAXKKZZ
+?InternalParse@CWSManEPR@@MAEHPAVIRequestContext@@@Z
+?InternalParse@CWSManResource@@MAEHPAVIRequestContext@@@Z
+?IsActive@ChildLifeTimeManager@@QAE_NXZ
+?IsAdmin@UserRecord@@QBE_NXZ
+?IsAutoListenerConfigurationOn@CConfigManager@@SGHPAVIRequestContext@@PAH@Z
+?IsCIM_Error@CRequestContext@@QAEHXZ
+?IsCurrentListenerAutoConfigured@CConfigManager@@QAEHPAVIRequestContext@@PAH@Z
+?IsCurrentListenerCompat@CConfigManager@@QBE_NXZ
+?IsDynAlloced@RBUFFER@@IBEHXZ
+?IsEPR@CWSManEPR@@UAEHXZ
+?IsEPR@CWSManResourceNoResourceUri@@UAEHXZ
+?IsEmpty@?$ILoader@VAdminSid@CSecurity@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VEventHandler@WSMan@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VInteractiveSid@CSecurity@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VIpHlpApiDllLoader@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VMachineName@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VNetworkServiceSid@CSecurity@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VNtDsApiDllLoader@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VResources@Locale@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VShell32DllLoader@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VShlWApiDllLoader@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VSubscriptionManager@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VUser32DllLoader@@@@QBE_NXZ
+?IsEmpty@?$ILoader@VWSManMemCryptManager@@@@QBE_NXZ
+?IsEmpty@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QBE_NXZ
+?IsEmpty@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QBE_NXZ
+?IsEmpty@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QBE_NXZ
+?IsEvent@SoapSemanticConverter@@QAE_NPAU_FWXML_ELEMENT@@@Z
+?IsEventEnabled@EventHandler@WSMan@@SG_NABU_EVENT_DESCRIPTOR@@@Z
+?IsEventProviderEnabled@EventHandler@WSMan@@SG_NXZ
+?IsFound@?$PacketElement@K@PacketParser@@QBEHXZ
+?IsFound@?$PacketElement@PAU_FWXML_ELEMENT@@@PacketParser@@QBEHXZ
+?IsFound@?$PacketElement@PBG@PacketParser@@QBEHXZ
+?IsFound@?$PacketElement@_K@PacketParser@@QBEHXZ
+?IsGeneratingError@CErrorContext@@UBE_NXZ
+?IsIdentifyPacket@PacketParser@@QBEHXZ
+?IsInCommitMode@BufferFormatter@@QAE_NXZ
+?IsInteractive@UserRecord@@QBE_NXZ
+?IsLocalSystemSid@CSecurity@@SGHPAX@Z
+?IsMustUnderstand@?$PacketElement@PBG@PacketParser@@QBEHXZ
+?IsNonOperativePacket@PacketParser@@QBEHXZ
+?IsPolicyControlledSetting@CConfigManager@@QAEHPAVIRequestContext@@W4ConfigSetting@@PAH@Z
+?IsRobustConnectionPacket@PacketParser@@QBEHXZ
+?IsStreamingEvent@SoapSemanticConverter@@QAE_NPAU_FWXML_ELEMENT@@PAVIRequestContext@@@Z
+?IsStringNullOrEmpty@@YGHPBG@Z
+?IsValid@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QBE_NXZ
+?IsValid@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@QBE_NXZ
+?IsValid@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QBE_NXZ
+?IsValid@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QBE_NXZ
+?IsValid@?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QBE_NXZ
+?IsValid@?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@PAXUEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@UPluginKey@@K@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VKey@Locale@@K@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKey@@PAVListenerEvents@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKey@@PAVListenerSourceSubscription@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyCI@@K@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyCI@@PAVIISEndpoint@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QBE_NXZ
+?IsValid@?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@QBE_NXZ
+?IsValid@CWSManCriticalSection@@QBEHXZ
+?IsValid@RBUFFER@@IBEHXZ
+?Key@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QBEPBVStringKeyCI@@ABV2@@Z
+?Key@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QBEPBVStringKeyCI@@ABV2@@Z
+?Key@?$SafeMap_Iterator@VKey@Locale@@K@@QBEABV0Locale@@XZ
+?Key@?$SafeMap_Iterator@VStringKeyCI@@K@@QBEABVStringKeyCI@@XZ
+?Key@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QBEABVStringKeyCI@@XZ
+?LogError@CBaseConfigCache@@UAEXKK@Z
+?LogErrorCode@CErrorContext@@QAEXXZ
+?LogErrorCode@CRequestContext@@QAEXXZ
+?LogErrorMessage@CRequestContext@@QAEXXZ
+?LogNotificationEvent@CWSManGroupPolicyManager@@CGXK@Z
+?LogReadErrors@CBaseConfigCache@@IAE?AW4ErrorLogging@@W4ConfigChangeSources@@@Z
+?LowerBound@?$SafeMap_Iterator@VKey@Locale@@K@@QAEXABVKey@Locale@@@Z
+?MakeUrlBinding@@YGHKPAGPAKPBG222@Z
+?MakeUrlBinding@@YGPAGPAVIRequestContext@@PBG111@Z
+?MapGeneric@CWSManSecurityUI@@UAGJPBU_GUID@@PAEPAK@Z
+?Me@?$AutoCleanup@V?$AutoDelete@D@@PAD@@AAEAAV?$AutoDelete@D@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@G@@PAG@@AAEAAV?$AutoDelete@G@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PAUIPRange@CWSManIPFilter@@@@AAEAAV?$AutoDelete@UIPRange@CWSManIPFilter@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@U_SID@@@@PAU_SID@@@@AAEAAV?$AutoDelete@U_SID@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PAU_WSMAN_STREAM_ID_SET@@@@AAEAAV?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PAV?$Handle@VISubscription@@@@@@AAEAAV?$AutoDelete@V?$Handle@VISubscription@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@AAEAAV?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@AAEAAV?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@AAEAAV?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@AAEAAV?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@PAV?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@AAEAAV?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@AAEAAV?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@AAEAAV?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@AAEAAV?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@AAEAAV?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@@AAEAAV?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCollector@@@@@@PAV?$SafeSet_Iterator@PAVCollector@@@@@@AAEAAV?$AutoDelete@V?$SafeSet_Iterator@PAVCollector@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVHostOperation@@@@@@PAV?$SafeSet_Iterator@PAVHostOperation@@@@@@AAEAAV?$AutoDelete@V?$SafeSet_Iterator@PAVHostOperation@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@PAV?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@AAEAAV?$AutoDelete@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@PAV?$SimpleStack@VCListenerOperation@@@@@@AAEAAV?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@PAV?$SimpleStack@VShellHostEntry@@@@@@AAEAAV?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$queue@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@PAV?$queue@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@AAEAAV?$AutoDelete@V?$queue@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@AAEAAV?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@AAEAAV?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$vector@PAVCWSManRequest@@V?$transport_allocator@PAVCWSManRequest@@@@@std@@@@PAV?$vector@PAVCWSManRequest@@V?$transport_allocator@PAVCWSManRequest@@@@@std@@@@AAEAAV?$AutoDelete@V?$vector@PAVCWSManRequest@@V?$transport_allocator@PAVCWSManRequest@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@AAEAAV?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@AAEAAV?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@V?$vector@PAVWSManHttpSenderConnection@@V?$transport_allocator@PAVWSManHttpSenderConnection@@@@@std@@@@PAV?$vector@PAVWSManHttpSenderConnection@@V?$transport_allocator@PAVWSManHttpSenderConnection@@@@@std@@@@AAEAAV?$AutoDelete@V?$vector@PAVWSManHttpSenderConnection@@V?$transport_allocator@PAVWSManHttpSenderConnection@@@@@std@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PAVAdminSid@CSecurity@@@@AAEAAV?$AutoDelete@VAdminSid@CSecurity@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@@AAEAAV?$AutoDelete@VBlockedRecord@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@AAEAAV?$AutoDelete@VCBaseConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PAVCCertMapping@@@@AAEAAV?$AutoDelete@VCCertMapping@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PAVCConfigChangeSource@@@@AAEAAV?$AutoDelete@VCConfigChangeSource@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PAVCListenerSettings@@@@AAEAAV?$AutoDelete@VCListenerSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PAVCObserverConfigChangeErrors@@@@AAEAAV?$AutoDelete@VCObserverConfigChangeErrors@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@@AAEAAV?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PAVCShellUriSettings@@@@AAEAAV?$AutoDelete@VCShellUriSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PAVCWSManEPR@@@@AAEAAV?$AutoDelete@VCWSManEPR@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@@AAEAAV?$AutoDelete@VCWSManResource@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PAVCertHash@@@@AAEAAV?$AutoDelete@VCertHash@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@AAEAAV?$AutoDelete@VConfigUpdate@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@AAEAAV?$AutoDelete@VEnumSinkEx@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PAVEventHandler@WSMan@@@@AAEAAV?$AutoDelete@VEventHandler@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PAVExpiredOperationIdRecord@@@@AAEAAV?$AutoDelete@VExpiredOperationIdRecord@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PAVGPApiManager@@@@AAEAAV?$AutoDelete@VGPApiManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@AAEAAV?$AutoDelete@VGeneralSinkEx@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PAVIChannelObserverFactory@@@@AAEAAV?$AutoDelete@VIChannelObserverFactory@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@AAEAAV?$AutoDelete@VIQueryDASHSMASHInterface@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@AAEAAV?$AutoDelete@VISpecification@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PAVInteractiveSid@CSecurity@@@@AAEAAV?$AutoDelete@VInteractiveSid@CSecurity@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PAVIpHlpApiDllLoader@@@@AAEAAV?$AutoDelete@VIpHlpApiDllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PAVMachineName@@@@AAEAAV?$AutoDelete@VMachineName@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@PAVMasterReceiveData@CListenerReceive@@@@AAEAAV?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PAVNetworkServiceSid@CSecurity@@@@AAEAAV?$AutoDelete@VNetworkServiceSid@CSecurity@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PAVNtDsApiDllLoader@@@@AAEAAV?$AutoDelete@VNtDsApiDllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PAVOptionValue@SessionOptions@Client@WSMan@@@@AAEAAV?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@@AAEAAV?$AutoDelete@VPacketCreator@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PAVPacketParser@@@@AAEAAV?$AutoDelete@VPacketParser@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PAVResources@Locale@@@@AAEAAV?$AutoDelete@VResources@Locale@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PAVRunAsConfiguration@@@@AAEAAV?$AutoDelete@VRunAsConfiguration@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@@AAEAAV?$AutoDelete@VSecurityEntry@Catalog@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PAVSendPacketArgs@RobustConnectionBuffer@@@@AAEAAV?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@@AAEAAV?$AutoDelete@VServiceSoapProcessor@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PAVShell32DllLoader@@@@AAEAAV?$AutoDelete@VShell32DllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PAVShlWApiDllLoader@@@@AAEAAV?$AutoDelete@VShlWApiDllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PAVSubscriptionEnumerator@@@@AAEAAV?$AutoDelete@VSubscriptionEnumerator@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PAVSubscriptionManager@@@@AAEAAV?$AutoDelete@VSubscriptionManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@AAEAAV?$AutoDelete@VTSTRBUFFER@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PAVUniqueStringOverflow@@@@AAEAAV?$AutoDelete@VUniqueStringOverflow@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PAVUser32DllLoader@@@@AAEAAV?$AutoDelete@VUser32DllLoader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PAVWSMANCONFIGTABLE_IDENTITY@@@@AAEAAV?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PAVWSManMemCryptManager@@@@AAEAAV?$AutoDelete@VWSManMemCryptManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@AAEAAV?$AutoDelete@VWmiEnumContext@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@AAEAAV?$AutoDelete@VXmlReader@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PBG@@AAEAAV?$AutoDeleteVector@$$CBG@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@D@@PAD@@AAEAAV?$AutoDeleteVector@D@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@AAEAAV?$AutoDeleteVector@E@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@AAEAAV?$AutoDeleteVector@G@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@H@@PAH@@AAEAAV?$AutoDeleteVector@H@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@AAEAAV?$AutoDeleteVector@PAG@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@AAEAAV?$AutoDeleteVector@PBG@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PAU_CONFIG_UPDATE@@@@AAEAAV?$AutoDeleteVector@U_CONFIG_UPDATE@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@AAEAAV?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@AAEAAV?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PAU_WSMAN_OPTION@@@@AAEAAV?$AutoDeleteVector@U_WSMAN_OPTION@@@@XZ
+?Me@?$AutoCleanup@V?$AutoDeleteVector@X@@PAX@@AAEAAV?$AutoDeleteVector@X@@XZ
+?Me@?$AutoCleanup@V?$AutoFree@E@@PAE@@AAEAAV?$AutoFree@E@@XZ
+?Me@?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@@AAEAAV?$AutoLocklessItemRecycle@VPacket@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PAUIAppHostAdminManager@@@@AAEAAV?$AutoRelease@UIAppHostAdminManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PAUIAppHostChildElementCollection@@@@AAEAAV?$AutoRelease@UIAppHostChildElementCollection@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PAUIAppHostConfigException@@@@AAEAAV?$AutoRelease@UIAppHostConfigException@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PAUIAppHostElement@@@@AAEAAV?$AutoRelease@UIAppHostElement@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PAUIAppHostElementCollection@@@@AAEAAV?$AutoRelease@UIAppHostElementCollection@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PAUIAppHostProperty@@@@AAEAAV?$AutoRelease@UIAppHostProperty@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PAUIAppHostPropertyCollection@@@@AAEAAV?$AutoRelease@UIAppHostPropertyCollection@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@AAEAAV?$AutoRelease@UIClientSecurity@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@AAEAAV?$AutoRelease@UIEnumWbemClassObject@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@AAEAAV?$AutoRelease@UIErrorInfo@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@AAEAAV?$AutoRelease@UIUnknown@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@AAEAAV?$AutoRelease@UIWbemClassObject@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@AAEAAV?$AutoRelease@UIWbemContext@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@AAEAAV?$AutoRelease@UIWbemLocator@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@AAEAAV?$AutoRelease@UIWbemObjectTextSrc@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@AAEAAV?$AutoRelease@UIWbemPath@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@AAEAAV?$AutoRelease@UIWbemPathKeyList@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@AAEAAV?$AutoRelease@UIWbemQualifierSet@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@AAEAAV?$AutoRelease@UIWbemQuery@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@AAEAAV?$AutoRelease@UIWbemServices@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PAVApplication@Client@WSMan@@@@AAEAAV?$AutoRelease@VApplication@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@AAEAAV?$AutoRelease@VCBaseConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCClientConfigCache@@@@PAVCClientConfigCache@@@@AAEAAV?$AutoRelease@VCClientConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@AAEAAV?$AutoRelease@VCClientConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PAVCCommonConfigSettings@@@@AAEAAV?$AutoRelease@VCCommonConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PAVCConfigCacheMap@CBaseConfigCache@@@@AAEAAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@AAEAAV?$AutoRelease@VCConfigManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCListenerCommand@@@@PAVCListenerCommand@@@@AAEAAV?$AutoRelease@VCListenerCommand@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCListenerMasterOperation@@@@PAVCListenerMasterOperation@@@@AAEAAV?$AutoRelease@VCListenerMasterOperation@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCListenerReceive@@@@PAVCListenerReceive@@@@AAEAAV?$AutoRelease@VCListenerReceive@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCListenerShell@@@@PAVCListenerShell@@@@AAEAAV?$AutoRelease@VCListenerShell@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PAVCRemoteOperation@@@@AAEAAV?$AutoRelease@VCRemoteOperation@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@AAEAAV?$AutoRelease@VCRemoteSession@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@AAEAAV?$AutoRelease@VCRequestContext@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PAVCServiceCommonConfigSettings@@@@AAEAAV?$AutoRelease@VCServiceCommonConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PAVCServiceConfigCache@@@@AAEAAV?$AutoRelease@VCServiceConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@@AAEAAV?$AutoRelease@VCServiceConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@AAEAAV?$AutoRelease@VCWSManEPR@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PAVCWSManGroupPolicyCache@@@@AAEAAV?$AutoRelease@VCWSManGroupPolicyCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@@AAEAAV?$AutoRelease@VCWSManGroupPolicyManager@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PAVCWSManObject@@@@AAEAAV?$AutoRelease@VCWSManObject@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@AAEAAV?$AutoRelease@VCWSManResource@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWSManSession@@@@PAVCWSManSession@@@@AAEAAV?$AutoRelease@VCWSManSession@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@AAEAAV?$AutoRelease@VCWinRSPluginConfigCache@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@@AAEAAV?$AutoRelease@VCWinRSPluginConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PAVCommand@Client@WSMan@@@@AAEAAV?$AutoRelease@VCommand@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PAVConfigNotification@@@@AAEAAV?$AutoRelease@VConfigNotification@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PAVConnectShellOperation@Client@WSMan@@@@AAEAAV?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PAVCreateShellOperation@Client@WSMan@@@@AAEAAV?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PAVDeleteShellOperation@Client@WSMan@@@@AAEAAV?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PAVDisconnectOperation@Client@WSMan@@@@AAEAAV?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@AAEAAV?$AutoRelease@VEnumSinkEx@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@AAEAAV?$AutoRelease@VGeneralSinkEx@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VHostMappingTable@@@@PAVHostMappingTable@@@@AAEAAV?$AutoRelease@VHostMappingTable@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PAVIISConfigSettings@@@@AAEAAV?$AutoRelease@VIISConfigSettings@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PAVIPCSoapProcessor@@@@AAEAAV?$AutoRelease@VIPCSoapProcessor@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@AAEAAV?$AutoRelease@VIRequestContext@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PAVISubscription@@@@AAEAAV?$AutoRelease@VISubscription@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@AAEAAV?$AutoRelease@VInboundRequestDetails@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VProxyManager@Client@WSMan@@@@PAVProxyManager@Client@WSMan@@@@AAEAAV?$AutoRelease@VProxyManager@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VProxySelection@Client@WSMan@@@@PAVProxySelection@Client@WSMan@@@@AAEAAV?$AutoRelease@VProxySelection@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VPushSubscribeOperation@@@@PAVPushSubscribeOperation@@@@AAEAAV?$AutoRelease@VPushSubscribeOperation@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VPushSubscription@@@@PAVPushSubscription@@@@AAEAAV?$AutoRelease@VPushSubscription@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PAVReceiveOperation@Client@WSMan@@@@AAEAAV?$AutoRelease@VReceiveOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PAVReconnectOperation@Client@WSMan@@@@AAEAAV?$AutoRelease@VReconnectOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PAVSendOperation@Client@WSMan@@@@AAEAAV?$AutoRelease@VSendOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@AAEAAV?$AutoRelease@VShell@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VShellInfo@@@@PAVShellInfo@@@@AAEAAV?$AutoRelease@VShellInfo@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PAVSignalOperation@Client@WSMan@@@@AAEAAV?$AutoRelease@VSignalOperation@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@@AAEAAV?$AutoRelease@VUserRecord@@@@XZ
+?Me@?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PAVWSManHttpListener@@@@AAEAAV?$AutoRelease@VWSManHttpListener@@@@XZ
+?Me@?$AutoCleanup@V?$AutoReleaseEx@VHostMappingTableEntry@@@@PAVHostMappingTableEntry@@@@AAEAAV?$AutoReleaseEx@VHostMappingTableEntry@@@@XZ
+?Me@?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@AAEAAV?$AutoReleaseEx@VShell@Client@WSMan@@@@XZ
+?Me@?$AutoCleanup@VAutoBstr@@PAG@@AAEAAVAutoBstr@@XZ
+?Me@?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@AAEAAVAutoBstrNoAlloc@@XZ
+?Me@?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@AAEAAVAutoCertContext@@XZ
+?Me@?$AutoCleanup@VAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@@AAEAAVAutoChainContext@@XZ
+?Me@?$AutoCleanup@VAutoCoTaskMemFree@@PAX@@AAEAAVAutoCoTaskMemFree@@XZ
+?Me@?$AutoCleanup@VAutoFwXmlCloseParser@@PAX@@AAEAAVAutoFwXmlCloseParser@@XZ
+?Me@?$AutoCleanup@VAutoHandle@@PAX@@AAEAAVAutoHandle@@XZ
+?Me@?$AutoCleanup@VAutoImpersonateUser@@PAX@@AAEAAVAutoImpersonateUser@@XZ
+?Me@?$AutoCleanup@VAutoLibrary@@PAUHINSTANCE__@@@@AAEAAVAutoLibrary@@XZ
+?Me@?$AutoCleanup@VAutoLocalFree@@PAX@@AAEAAVAutoLocalFree@@XZ
+?Me@?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@AAEAAVAutoMIClass@@XZ
+?Me@?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@AAEAAVAutoMIInstance@@XZ
+?Me@?$AutoCleanup@VAutoObject@@PAUWSMAN_OBJECT@@@@AAEAAVAutoObject@@XZ
+?Me@?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@AAEAAVAutoRegKey@@XZ
+?Me@?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@AAEAAVAutoSecurityDescriptor@@XZ
+?Me@?$AutoCleanup@VAutoWaitHandle@@PAX@@AAEAAVAutoWaitHandle@@XZ
+?MoveSettingsToMigrationKey@@YGHPAVIRequestContext@@_N@Z
+?NUM_BOMS@PacketFormatter@@0HB DATA
+?NUM_CHARSETS@PacketFormatter@@0HB DATA
+?Next@TSTRBUFFER@@QBEPBGPBG@Z
+?NextCertMapping@CConfigManager@@QAEHXZ
+?NextListener@CConfigManager@@QAEHXZ
+?NextRow@CConfigManager@@QAEHXZ
+?NextShellUri@CConfigManager@@QAEHXZ
+?NoSemantics@ExtendedSemantic@@2KB DATA
+?NotifyObservers@CWSManGroupPolicyManager@@UAEHPAVIRequestContext@@PAVIWSManGroupPolicyCacheDataProvider@@@Z
+?OnChange@CBaseConfigCache@@UAEXW4ConfigChangeSources@@KW4ConfigChangeSeverityType@@@Z
+?OpenRegKey@ConfigRegistry@@IAEJPAU_CONFIG_INFO@@KPAVWSMANCONFIGTABLE_IDENTITY@@PAVAutoRegKey@@PAUHKEY__@@@Z
+?OverrideMaxEnvelopeSize@PacketParser@@QAEXK@Z
+?OverrideTimeout@PacketParser@@QAEXK@Z
+?Parse@CWSManResource@@SGPAV1@PAVIRequestContext@@PBG11PAU_WSMAN_SELECTOR_SET@@PAU_WSMAN_OPTION_SET@@H@Z
+?Parse@CWSManResource@@SGPAV1@PAVIRequestContext@@PBGH@Z
+?Parse@XmlReader@@AAEHPAVIRequestContext@@@Z
+?ParseAction@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@_N@Z
+?ParseActivityId@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseBookmark@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseDataLocale@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseEprElement@CWSManEPR@@SGPAV1@PAVIRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?ParseEvent@SoapSemanticConverter@@QAEPAVSemanticMessage@@PAU_FWXML_ELEMENT@@PAKPAVIRequestContext@@@Z
+?ParseFaultTo@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseFragment@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseHeader@PacketParser@@AAEHPAVCRequestContext@@PAU_FWXML_ELEMENT@@HPAVCServiceCommonConfigSettings@@@Z
+?ParseHeaders@CWSManResourceNoResourceUri@@QAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@11@Z
+?ParseHeaders@PacketParser@@AAEHPAVCRequestContext@@PAVCServiceCommonConfigSettings@@@Z
+?ParseLocale@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseMachineID@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?ParseMaxEnvelopeSize@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@HPAVCServiceCommonConfigSettings@@@Z
+?ParseMessageId@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@_N@Z
+?ParseOperationId@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseOptionSet@CWSManResourceNoResourceUri@@QAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?ParseOptions@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParsePacket@PacketParser@@QAEHPAVCRequestContext@@PAVPacket@@PAVCServiceCommonConfigSettings@@@Z
+?ParsePacketInternal@PacketParser@@AAEHPAVCRequestContext@@PAU_FWXML_ELEMENT@@PAVCServiceCommonConfigSettings@@@Z
+?ParseReplyTo@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?ParseResourceLocator@CWSManResource@@SGPAV1@PAVIRequestContext@@PAU_WSMAN_RESOURCE_LOCATOR@@@Z
+?ParseResourceUri@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseResponse@SoapSemanticConverter@@QAE_NPAU_FWXML_ELEMENT@@PAKPA_NPAVIRequestContext@@@Z
+?ParseRobustConnectionAckSequenceId@PacketParser@@AAEKPA_K@Z
+?ParseRobustConnectionMessages@PacketParser@@QAEKPAW4PacketType@1@PA_NPA_K2@Z
+?ParseSelectors@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseSequenceId@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?ParseSessionId@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseShellCompression@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseStream@PacketParser@@QAEXPAVCRequestContext@@PAVITransportReceiver@@PAVPacket@@PAVCServiceCommonConfigSettings@@@Z
+?ParseSubscriptionAgentPacket@PacketParser@@QAEHPAVCRequestContext@@PAVPacket@@PAVCServiceConfigSettings@@@Z
+?ParseSubscriptionID@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@H@Z
+?ParseTimeout@PacketParser@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@HPAVCServiceCommonConfigSettings@@@Z
+?ParseToAddress@PacketParser@@AAEHPAVCRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?Passed@CErrorContext@@UBEHXZ
+?PolicyChanged@CWSManGroupPolicyManager@@AAEXE@Z
+?PostChange@CBaseConfigCache@@MAEHPAVIRequestContext@@PAVCCommonConfigSettings@@1@Z
+?PostChange@CServiceConfigCache@@EAEHPAVIRequestContext@@PAVCCommonConfigSettings@@1@Z
+?PostError@CBaseConfigCache@@MAEXK@Z
+?PostError@CServiceConfigCache@@EAEXK@Z
+?PrepareToCommitWithSize@BufferFormatter@@UAEKK@Z
+?PrepareToCommitWithSize@CircularBufferFormatter@@UAEKK@Z
+?PrintHandleTrace@@YGXPAX@Z
+?PrintReleaseTrace@@YGXPAXJ@Z
+?PrintUnregisterWaitTrace@@YGXPAX@Z
+?ProcessContext@CErrorContext@@UAEHHPAKPAU_WSMAN_FAULT_OBJECT@@@Z
+?ProcessContext@CErrorContext@@UAEHHPAU_WSMAN_ERROR@@@Z
+?ProcessContext@CRequestContext@@QAEHHPAU_WSMAN_ENUMERATOR_RESULT@@@Z
+?ProcessContext@CRequestContext@@QAEHHPAU_WSMAN_EVENTS_RESULT@@@Z
+?ProcessContext@CRequestContext@@QAEHHPAU_WSMAN_RESULT@@@Z
+?ProcessContext@CRequestContext@@QAEHHPAU_WSMAN_STATUS@@@Z
+?ProcessContext@CRequestContext@@UAEHHPAKPAU_WSMAN_FAULT_OBJECT@@@Z
+?ProcessContext@CRequestContext@@UAEHHPAU_WSMAN_ERROR@@@Z
+?ProcessEPR@CWSManEPR@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?ProcessFragmentDialect@CWSManResourceNoResourceUri@@IAEHPAVIRequestContext@@PBGK@Z
+?ProcessFragmentPath@CWSManResourceNoResourceUri@@IAEHPAVIRequestContext@@PBGK@Z
+?ProcessKey@CWSManResourceNoResourceUri@@IAEHPAVIRequestContext@@PBG1@Z
+?ProcessNestedEPR@CWSManResourceNoResourceUri@@IAEHPAVIRequestContext@@PBGPAU_FWXML_ELEMENT@@@Z
+?ProcessOption@CWSManResourceNoResourceUri@@IAEHPAVIRequestContext@@PBG11H@Z
+?ProcessRefParameters@CWSManEPR@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?ProcessRefProperties@CWSManEPR@@AAEHPAVIRequestContext@@PAU_FWXML_ELEMENT@@@Z
+?ProcessUri@CWSManResource@@QAEHPAVIRequestContext@@PBGK@Z
+?Progress@ExtendedSemantic@@2KB DATA
+?PropertySheetPageCallback@CWSManSecurityUI@@UAGJPAUHWND__@@IW4_SI_PAGE_TYPE@@@Z
+?ProviderFailure@CErrorContext@@UBEHXZ
+?ProviderShutdownCleanup@CWinRSPluginConfigCache@@SGXXZ
+?PutOverrideValue@?$PacketElement@K@PacketParser@@QAEXK@Z
+?PutOverrideValue@?$PacketElement@PBG@PacketParser@@QAEXPBG@Z
+?PutValue@?$PacketElement@K@PacketParser@@QAEXKH@Z
+?PutValue@?$PacketElement@PAU_FWXML_ELEMENT@@@PacketParser@@QAEXPAU_FWXML_ELEMENT@@H@Z
+?PutValue@?$PacketElement@PBG@PacketParser@@QAEXPBGH@Z
+?PutValue@?$PacketElement@_K@PacketParser@@QAEX_KH@Z
+?PutValue@Fragment@PacketParser@@QAEXPBG0H@Z
+?PutValue@NotUnderstandSoapHeader@PacketParser@@QAEXPBG00@Z
+?PutValue@ReferenceParameters@PacketParser@@QAEKPAU_FWXML_ELEMENT@@H@Z
+?QueryInterface@CWSManSecurityUI@@UAGJABU_GUID@@PAPAX@Z
+?QueryPtr@RBUFFER@@QBEPAXXZ
+?QueryRegValue@CConfigManager@@AAEJPAU_CONFIG_INFO@@PAKKPAE1@Z
+?QueryRegValue@CWSManGroupPolicyManager@@AAEJPAVIRequestContext@@PBU_WSMAN_POLICY_INFO@@PAKKPAE2@Z
+?QuerySize@RBUFFER@@QBEIXZ
+?QueryStr@TSTRBUFFER@@QBEPBGXZ
+?QuotaComplete@UserRecord@@UAEXPAU_WSMAN_AUTHZ_QUOTA@@KPBG@Z
+?ReAlloc@WSManMemory@@SGPAXPAXIHW4_NitsFaultMode@@@Z
+?ReadCertMappingRegistryKey@CConfigManager@@SGHPAVIRequestContext@@PAVCERTMAPPING_IDENTITY@@PAG@Z
+?ReadCredentialsFromCredmanStore@CConfigManager@@SGHPAVIRequestContext@@PAG1@Z
+?ReadCurrentSettings@CClientConfigCache@@EAEPAVCCommonConfigSettings@@PAVIRequestContext@@W4ErrorLogging@@@Z
+?ReadCurrentSettings@CServiceConfigCache@@EAEPAVCCommonConfigSettings@@PAVIRequestContext@@W4ErrorLogging@@@Z
+?ReadCurrentSettings@CWinRSPluginConfigCache@@EAEPAVCCommonConfigSettings@@PAVIRequestContext@@W4ErrorLogging@@@Z
+?ReadDefaultSettings@CClientConfigCache@@EAEPAVCCommonConfigSettings@@PAVIRequestContext@@@Z
+?ReadDefaultSettings@CServiceConfigCache@@EAEPAVCCommonConfigSettings@@PAVIRequestContext@@@Z
+?ReadDefaultSettings@CWinRSPluginConfigCache@@EAEPAVCCommonConfigSettings@@PAVIRequestContext@@@Z
+?ReadShellUriRegistryKey@CConfigManager@@SGHPAVIRequestContext@@PAVSHELLURI_IDENTITY@@PAG@Z
+?ReadTableRegistryKey@CConfigManager@@SGHPAVIRequestContext@@PAVWSMANCONFIGTABLE_IDENTITY@@PAG@Z
+?ReallocStorage@RBUFFER@@IAEHI@Z
+?RecordAccessDenied@CErrorContext@@UAEXXZ
+?RecordAccessDenied@CRequestContext@@UAEXXZ
+?RecordAccessDeniedWithDetail@CErrorContext@@UAAXKZZ
+?RecordAccessDeniedWithDetail@CRequestContext@@UAAXKZZ
+?RecordFailure@CErrorContext@@UAAXKKZZ
+?RecordFailure@CErrorContext@@UAAXW4_MI_Result@@KKZZ
+?RecordFailure@CErrorContext@@UAEXK@Z
+?RecordFailure@CErrorContext@@UAEXPAU_WSMAN_FAULT_OBJECT@@@Z
+?RecordFailure@CRequestContext@@AAEXKKPAPAD0@Z
+?RecordFailure@CRequestContext@@UAAXKKZZ
+?RecordFailure@CRequestContext@@UAAXW4_MI_Result@@KKZZ
+?RecordFailure@CRequestContext@@UAEXK@Z
+?RecordFailure@CRequestContext@@UAEXPAU_WSMAN_FAULT_OBJECT@@@Z
+?RecordHresult@CErrorContext@@UAAXKKZZ
+?RecordHresult@CRequestContext@@UAAXKKZZ
+?RecordHtmlError@CRequestContext@@QAEHKPAU_FWXML_ELEMENT@@@Z
+?RecordHtmlError@CRequestContext@@QAEHKPBGK@Z
+?RecordMIFailure@IRequestContext@@QAEXW4_MI_Result@@K@Z
+?RecordOutOfMemory@CErrorContext@@UAEXXZ
+?RecordOutOfMemory@CRequestContext@@UAEXXZ
+?RecordProviderFailure@CErrorContext@@UAEXPAU_WSMAN_FAULT_OBJECT@@PBG1@Z
+?RecordProviderFailure@CRequestContext@@QAEXKHPBG00@Z
+?RecordProviderFailure@CRequestContext@@UAEXPAU_WSMAN_FAULT_OBJECT@@PBG1@Z
+?RecordSoapError@CErrorContext@@UAEHKPBG@Z
+?RecordSoapError@CRequestContext@@QAEHKPAU_FWXML_ELEMENT@@@Z
+?RecordSoapError@CRequestContext@@UAEHKPBG@Z
+?RecordText@CRequestContext@@AAEHKPBGIK@Z
+?RecordXml@CRequestContext@@AAEHKPAU_FWXML_ELEMENT@@K@Z
+?Refresh@UserRecord@@QAEXXZ
+?RegisterChild@ChildLifeTimeManager@@QAE_NXZ
+?RegisterChunkBoundary@CircularBufferFormatter@@QAEKXZ
+?RegisterConfigChangeNotification@CConfigManager@@QAEPAVConfigNotification@@PAX@Z
+?RegisterForPolicyNotification@CWSManGroupPolicyManager@@AAEHPAVIRequestContext@@H@Z
+?RegisterModule@@YGJKPAVIHttpModuleRegistrationInfo@@PAVIHttpServer@@@Z
+?Release@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCCertMapping@@UEmpty@@V?$SafeSet_Iterator@PAVCCertMapping@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCListenerConnect@@PAV1@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCListenerReceive@@PAV1@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCListenerSend@@PAV1@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCListenerSignal@@PAV1@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCShellUriSettings@@UEmpty@@V?$SafeSet_Iterator@PAVCShellUriSettings@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCollector@@UEmpty@@V?$SafeMap_Iterator@PAVCollector@@UEmpty@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVCollector@@UEmpty@@V?$SafeSet_Iterator@PAVCollector@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeMap_Iterator@PAVHostOperation@@UEmpty@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVHostOperation@@UEmpty@@V?$SafeSet_Iterator@PAVHostOperation@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeMap_Iterator@PAVIOperation@@UEmpty@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVIOperation@@UEmpty@@V?$SafeSet_Iterator@PAVIOperation@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVListenerSourceSubscription@@UEmpty@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVListenerSourceSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeMap_Iterator@PAVPushSubscription@@UEmpty@@@@@@UBEXXZ
+?Release@?$SafeMap@PAVPushSubscription@@UEmpty@@V?$SafeSet_Iterator@PAVPushSubscription@@@@@@UBEXXZ
+?Release@?$SafeMap@PAXUEmpty@@V?$SafeSet_Iterator@PAX@@@@UBEXXZ
+?Release@?$SafeMap@UPluginKey@@KV?$SafeMap_Iterator@UPluginKey@@K@@@@UBEXXZ
+?Release@?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@UBEXXZ
+?Release@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@UBEXXZ
+?Release@?$SafeMap@VGuidKey@@PAVCListenerCommand@@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@UBEXXZ
+?Release@?$SafeMap@VKey@CWmiPtrCache@@VMapping@2@V?$SafeMap_Iterator@VKey@CWmiPtrCache@@VMapping@2@@@@@UBEXXZ
+?Release@?$SafeMap@VKey@Locale@@KV?$SafeMap_Iterator@VKey@Locale@@K@@@@UBEXXZ
+?Release@?$SafeMap@VStringKey@@PAVListenerEvents@@V?$SafeMap_Iterator@VStringKey@@PAVListenerEvents@@@@@@UBEXXZ
+?Release@?$SafeMap@VStringKey@@PAVListenerSourceSubscription@@V?$SafeMap_Iterator@VStringKey@@PAVListenerSourceSubscription@@@@@@UBEXXZ
+?Release@?$SafeMap@VStringKey@@UOption@WinRM_OperationOptions@@V?$SafeMap_Iterator@VStringKey@@UOption@WinRM_OperationOptions@@@@@@UBEXXZ
+?Release@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@UBEXXZ
+?Release@?$SafeMap@VStringKeyCI@@PAVIISEndpoint@@V?$SafeMap_Iterator@VStringKeyCI@@PAVIISEndpoint@@@@@@UBEXXZ
+?Release@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeMap_Iterator@VStringKeyCI@@UEmpty@@@@@@UBEXXZ
+?Release@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@UBEXXZ
+?Release@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@UBEXXZ
+?Release@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@UBEXXZ
+?Release@?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@UBEXXZ
+?Release@?$SafeMap@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@V?$SafeMap_Iterator@VTokenCacheKey@ServiceSoapProcessor@@VTokenCacheMapping@2@@@@@UBEXXZ
+?Release@?$SafeMap@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@UBEXXZ
+?Release@?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@UBEXXZ
+?Release@?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QAEXXZ
+?Release@?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QAEXXZ
+?Release@?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QAEXXZ
+?Release@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QAEXXZ
+?Release@?$SafeMap_Iterator@VStringKeyCI@@K@@QAEXXZ
+?Release@?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QAEXXZ
+?Release@?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAEXXZ
+?Release@?$SafeMap_Lock@PAVCCertMapping@@UEmpty@@V?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@@@QAEXXZ
+?Release@?$SafeMap_Lock@PAVCListenerOperation@@UEmpty@@V?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@@@QAEXXZ
+?Release@?$SafeMap_Lock@PAVCShellUriSettings@@UEmpty@@V?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@@@QAEXXZ
+?Release@?$SafeMap_Lock@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QAEXXZ
+?Release@?$SafeMap_Lock@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAEXXZ
+?Release@?$SafeMap_Lock@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAEXXZ
+?Release@?$SafeMap_Lock@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@QAEXXZ
+?Release@CBaseConfigCache@@UAEJP6GXPAX@Z0@Z
+?Release@CWSManCriticalSection@@QAEXXZ
+?Release@CWSManSecurityUI@@UAGKXZ
+?Release@ILifeTimeMgmt@@UAEJP6GXPAX@Z0@Z
+?Release@UserRecord@@QAEJXZ
+?ReleaseExclusive@FastLock@@QAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@D@@PAD@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@G@@PAG@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PAUIPRange@CWSManIPFilter@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@U_SID@@@@PAU_SID@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@U_WSMAN_STREAM_ID_SET@@@@PAU_WSMAN_STREAM_ID_SET@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$Handle@VISubscription@@@@@@PAV?$Handle@VISubscription@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerConnect@@PAV1@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerReceive@@PAV1@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerSend@@PAV1@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@PAV?$SafeMap_Iterator@PAVCListenerSignal@@PAV1@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@PAV?$SafeMap_Iterator@VGuidKey@@PAVCListenerCommand@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@VStringKeyCI@@K@@@@PAV?$SafeMap_Iterator@VStringKeyCI@@K@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@PAV?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCCertMapping@@@@@@PAV?$SafeSet@PAVCCertMapping@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet@PAVCShellUriSettings@@@@@@PAV?$SafeSet@PAVCShellUriSettings@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@PAV?$SafeSet_Iterator@PAVCListenerOperation@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVCollector@@@@@@PAV?$SafeSet_Iterator@PAVCollector@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVHostOperation@@@@@@PAV?$SafeSet_Iterator@PAVHostOperation@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@PAV?$SafeSet_Iterator@PAVListenerSourceSubscription@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VCListenerOperation@@@@@@PAV?$SimpleStack@VCListenerOperation@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$SimpleStack@VShellHostEntry@@@@@@PAV?$SimpleStack@VShellHostEntry@@@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$queue@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@PAV?$queue@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$deque@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@V?$transport_allocator@PAU_WSMAN_PUBLISHER_EVENT_STRUCT@@@@@std@@@std@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@PAV?$set@PAVCListenerSettings@@VCListenerSettingsLessFunctor@CServiceConfigSettings@@V?$transport_allocator@PAVCListenerSettings@@@@@std@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@PAV?$set@Usockaddr_storage@@VSockAddrLessFunctor@CListenerSettings@@V?$transport_allocator@Usockaddr_storage@@@@@std@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$vector@PAVCWSManRequest@@V?$transport_allocator@PAVCWSManRequest@@@@@std@@@@PAV?$vector@PAVCWSManRequest@@V?$transport_allocator@PAVCWSManRequest@@@@@std@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@PAV?$vector@PAVHandleImpl@Client@WSMan@@V?$transport_allocator@PAVHandleImpl@Client@WSMan@@@@@std@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@PAV?$vector@PAVIServiceConfigObserver@@V?$transport_allocator@PAVIServiceConfigObserver@@@@@std@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@V?$vector@PAVWSManHttpSenderConnection@@V?$transport_allocator@PAVWSManHttpSenderConnection@@@@@std@@@@PAV?$vector@PAVWSManHttpSenderConnection@@V?$transport_allocator@PAVWSManHttpSenderConnection@@@@@std@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VAdminSid@CSecurity@@@@PAVAdminSid@CSecurity@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VBlockedRecord@@@@PAVBlockedRecord@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCCertMapping@@@@PAVCCertMapping@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCConfigChangeSource@@@@PAVCConfigChangeSource@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCListenerSettings@@@@PAVCListenerSettings@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCObserverConfigChangeErrors@@@@PAVCObserverConfigChangeErrors@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCServiceWatcher@CServiceConfigCache@@@@PAVCServiceWatcher@CServiceConfigCache@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCShellUriSettings@@@@PAVCShellUriSettings@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCWSManEPR@@@@PAVCWSManEPR@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCWSManResource@@@@PAVCWSManResource@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VCertHash@@@@PAVCertHash@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VConfigUpdate@@@@PAVConfigUpdate@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VEventHandler@WSMan@@@@PAVEventHandler@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VExpiredOperationIdRecord@@@@PAVExpiredOperationIdRecord@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VGPApiManager@@@@PAVGPApiManager@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VIChannelObserverFactory@@@@PAVIChannelObserverFactory@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VInteractiveSid@CSecurity@@@@PAVInteractiveSid@CSecurity@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VIpHlpApiDllLoader@@@@PAVIpHlpApiDllLoader@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VMachineName@@@@PAVMachineName@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VMasterReceiveData@CListenerReceive@@@@PAVMasterReceiveData@CListenerReceive@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VNetworkServiceSid@CSecurity@@@@PAVNetworkServiceSid@CSecurity@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VNtDsApiDllLoader@@@@PAVNtDsApiDllLoader@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VOptionValue@SessionOptions@Client@WSMan@@@@PAVOptionValue@SessionOptions@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VPacketParser@@@@PAVPacketParser@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VResources@Locale@@@@PAVResources@Locale@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VRunAsConfiguration@@@@PAVRunAsConfiguration@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VSecurityEntry@Catalog@@@@PAVSecurityEntry@Catalog@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VSendPacketArgs@RobustConnectionBuffer@@@@PAVSendPacketArgs@RobustConnectionBuffer@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VServiceSoapProcessor@@@@PAVServiceSoapProcessor@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VShell32DllLoader@@@@PAVShell32DllLoader@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VShlWApiDllLoader@@@@PAVShlWApiDllLoader@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VSubscriptionEnumerator@@@@PAVSubscriptionEnumerator@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VSubscriptionManager@@@@PAVSubscriptionManager@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VUniqueStringOverflow@@@@PAVUniqueStringOverflow@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VUser32DllLoader@@@@PAVUser32DllLoader@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VWSMANCONFIGTABLE_IDENTITY@@@@PAVWSMANCONFIGTABLE_IDENTITY@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VWSManMemCryptManager@@@@PAVWSManMemCryptManager@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PBG@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@D@@PAD@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@H@@PAH@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@U_CONFIG_UPDATE@@@@PAU_CONFIG_UPDATE@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@U_WSMAN_OPTION@@@@PAU_WSMAN_OPTION@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoDeleteVector@X@@PAX@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoFree@E@@PAE@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PAUIAppHostAdminManager@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PAUIAppHostChildElementCollection@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PAUIAppHostConfigException@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PAUIAppHostElement@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PAUIAppHostElementCollection@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PAUIAppHostProperty@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PAUIAppHostPropertyCollection@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VApplication@Client@WSMan@@@@PAVApplication@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCBaseConfigCache@@@@PAVCBaseConfigCache@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCClientConfigCache@@@@PAVCClientConfigCache@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCClientConfigSettings@@@@PAVCClientConfigSettings@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCCommonConfigSettings@@@@PAVCCommonConfigSettings@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@PAVCConfigCacheMap@CBaseConfigCache@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCConfigManager@@@@PAVCConfigManager@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCListenerCommand@@@@PAVCListenerCommand@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCListenerMasterOperation@@@@PAVCListenerMasterOperation@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCListenerReceive@@@@PAVCListenerReceive@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCListenerShell@@@@PAVCListenerShell@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCRemoteOperation@@@@PAVCRemoteOperation@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCRemoteSession@@@@PAVCRemoteSession@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCRequestContext@@@@PAVCRequestContext@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCServiceCommonConfigSettings@@@@PAVCServiceCommonConfigSettings@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCServiceConfigCache@@@@PAVCServiceConfigCache@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCServiceConfigSettings@@@@PAVCServiceConfigSettings@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyCache@@@@PAVCWSManGroupPolicyCache@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManGroupPolicyManager@@@@PAVCWSManGroupPolicyManager@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManObject@@@@PAVCWSManObject@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManResource@@@@PAVCWSManResource@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWSManSession@@@@PAVCWSManSession@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigSettings@@@@PAVCWinRSPluginConfigSettings@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PAVCommand@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VConfigNotification@@@@PAVConfigNotification@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VConnectShellOperation@Client@WSMan@@@@PAVConnectShellOperation@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VCreateShellOperation@Client@WSMan@@@@PAVCreateShellOperation@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VDeleteShellOperation@Client@WSMan@@@@PAVDeleteShellOperation@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VDisconnectOperation@Client@WSMan@@@@PAVDisconnectOperation@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VHostMappingTable@@@@PAVHostMappingTable@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VIISConfigSettings@@@@PAVIISConfigSettings@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VIPCSoapProcessor@@@@PAVIPCSoapProcessor@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VISubscription@@@@PAVISubscription@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VInboundRequestDetails@@@@PAVInboundRequestDetails@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VProxyManager@Client@WSMan@@@@PAVProxyManager@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VProxySelection@Client@WSMan@@@@PAVProxySelection@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VPushSubscribeOperation@@@@PAVPushSubscribeOperation@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VPushSubscription@@@@PAVPushSubscription@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PAVReceiveOperation@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VReconnectOperation@Client@WSMan@@@@PAVReconnectOperation@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PAVSendOperation@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VShellInfo@@@@PAVShellInfo@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PAVSignalOperation@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VUserRecord@@@@PAVUserRecord@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoRelease@VWSManHttpListener@@@@PAVWSManHttpListener@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoReleaseEx@VHostMappingTableEntry@@@@PAVHostMappingTableEntry@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@V?$AutoReleaseEx@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoBstr@@PAG@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoCoTaskMemFree@@PAX@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoFwXmlCloseParser@@PAX@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoHandle@@PAX@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoImpersonateUser@@PAX@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoLibrary@@PAUHINSTANCE__@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoLocalFree@@PAX@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoObject@@PAUWSMAN_OBJECT@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@AAEXXZ
+?ReleasePtr@?$AutoCleanup@VAutoWaitHandle@@PAX@@AAEXXZ
+?ReleaseQuota@UserRecord@@QAEXW4OperationType@@PBVProvider@Catalog@@@Z
+?ReleaseShared@FastLock@@QAEXXZ
+?Remove@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QAE_NABQAVCListenerOperation@@@Z
+?Remove@?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QAE_NABUUserKey@@@Z
+?Remove@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QAE_NABVStringKeyCI@@@Z
+?Remove@?$SafeMap@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@V?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@@@QAE_NABVStringKeyCI@@@Z
+?Remove@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QAE_NABVStringKeyStore@@@Z
+?Remove@?$SafeMap@VStringKeyStore@@PAVServerFullDuplexChannel@@V?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@@@QAE_NABVStringKeyStore@@@Z
+?Remove@?$SafeMap@_KPAVSendPacketArgs@RobustConnectionBuffer@@V?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@@@QAE_NAB_K@Z
+?RemoveAll@CBaseConfigCache@@KGXPAVFastLock@@AAV?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@@Z
+?RemoveFromMap@CBaseConfigCache@@AAEHXZ
+?RemoveHttpsBinding@@YGXPBG@Z
+?RemoveHttpsCertificate@@YGXPBG0@Z
+?RemoveObserver@CServiceConfigCache@@AAEHPAVIServiceConfigObserver@@@Z
+?RemovePluginXmlNewAttrForThresholdOrGreater@@YGHPAVIRequestContext@@@Z
+?ReportEventW@EventLog@@SGXGKGPAPBG@Z
+?Reset@?$PacketElement@K@PacketParser@@QAEX_N@Z
+?Reset@?$PacketElement@PAU_FWXML_ELEMENT@@@PacketParser@@QAEX_N@Z
+?Reset@?$PacketElement@PBG@PacketParser@@QAEX_N@Z
+?Reset@?$PacketElement@_K@PacketParser@@QAEX_N@Z
+?Reset@?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@PAXUEmpty@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@UPluginKey@@K@@QAEXXZ
+?Reset@?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@VKey@Locale@@K@@QAEXXZ
+?Reset@?$SafeMap_Iterator@VStringKeyCI@@K@@QAEXXZ
+?Reset@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@QAEXXZ
+?Reset@?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@QAEXXZ
+?Reset@BufferFormatter@@UAEXXZ
+?Reset@CErrorContext@@UAEXH@Z
+?Reset@CRequestContext@@UAEXH@Z
+?Reset@CircularBufferFormatter@@UAEXXZ
+?Reset@Locale@@QAEXXZ
+?Reset@TSTRBUFFER@@QAEXXZ
+?Reset@UserRecord@@QAEXXZ
+?ResetProfileCount@UserRecord@@QAEXXZ
+?ResetRobustConnectionHeaders@PacketParser@@AAEXXZ
+?Resize@RBUFFER@@QAEHI@Z
+?Resize@RBUFFER@@QAEHII@Z
+?ResizeOptionList@CWSManResourceNoResourceUri@@IAE_NIAAVIRequestContext@@@Z
+?RestoreAllPrivileges@@YGHPAU_TOKEN_PRIVILEGES@@@Z
+?RetrieveCertMappingIdentity@CConfigManager@@AAEHPAUHKEY__@@PAVCERTMAPPING_IDENTITY@@@Z
+?RetrieveListenerIdentity@CConfigManager@@AAEHPAUHKEY__@@PAGPAPAGPAVLISTENER_IDENTITY@@@Z
+?RetrieveShellUriIdentity@CConfigManager@@AAEHPAUHKEY__@@PAVSHELLURI_IDENTITY@@@Z
+?RetrieveTableIdentity@CConfigManager@@AAEHPAUHKEY__@@PAVWSMANCONFIGTABLE_IDENTITY@@@Z
+?RevertToSelf@CSecurity@@SGHXZ
+?RtlSecureZeroMemory@XmlReader@@QAEXXZ
+?SafeStringToUI64@@YGJPBGEHPA_KPAVIRequestContext@@K@Z
+?SetBOM@PacketFormatter@@QAE_NPAVPacket@@@Z
+?SetBOM@PacketFormatter@@QAE_NPBEK@Z
+?SetCIM_Error@CErrorContext@@UAEXXZ
+?SetCIM_Error@CRequestContext@@UAEXXZ
+?SetCharset@PacketFormatter@@QAEXW4Charset@1@@Z
+?SetCharset@PacketFormatter@@QAE_NPBDK_NPA_N@Z
+?SetCharsetAndBom@PacketFormatter@@QAEXW4Charset@1@0@Z
+?SetConfigToUseDefaults@CErrorContext@@UAEXH@Z
+?SetErrorAction@ExtendedSemantic@@QAEXW4_MI_OperationCallback_ResponseType@@W4_MI_CallbackMode@@@Z
+?SetErrorState@CBaseConfigCache@@AAEXPAVCRequestContext@@K@Z
+?SetExactCharSize@TSTRBUFFER@@QAEJI@Z
+?SetExtendedErrorString@CErrorContext@@UAEXPAG@Z
+?SetExtendedErrorString@CRequestContext@@UAEXPAG@Z
+?SetExtraLogInfo@CErrorContext@@QAEXPBG000@Z
+?SetFault@CErrorContext@@UAEXKKKPBG@Z
+?SetFault@CRequestContext@@EAEXKKKPBG@Z
+?SetFinishValue@ConfigRegistry@@IAEHPAVIRequestContext@@@Z
+?SetFormatterMode@BufferFormatter@@QAEXW4Charset@PacketFormatter@@0@Z
+?SetFragmentDialect@CWSManResourceNoResourceUri@@QAEHPBGPAVIRequestContext@@@Z
+?SetFragmentPath@CWSManResourceNoResourceUri@@QAEHPBGPAVIRequestContext@@@Z
+?SetGeneratingError@CErrorContext@@UAEXXZ
+?SetLocale@CRequestContext@@QAE_NPBGK@Z
+?SetLocale@Locale@@QAE_NKPBGPAVIRequestContext@@@Z
+?SetMachineName@CRequestContext@@QAEKPBG@Z
+?SetMachineName@CRequestContext@@QAEKPBGI@Z
+?SetMachineName@CRequestContext@@QAEKXZ
+?SetMaxEnvelopeSize@CircularBufferFormatter@@QAEXK@Z
+?SetOptionsMustUnderstandValue@CWSManResourceNoResourceUri@@QAEXH@Z
+?SetProfileHandle@UserRecord@@QAEX_J@Z
+?SetProviderFailure@CErrorContext@@UAEXH@Z
+?SetSecurity@CWSManSecurityUI@@UAGJKPAX@Z
+?SetSize@TSTRBUFFER@@QAEJII@Z
+?SetSizeInUse@SBUFFER@@QAEXI@Z
+?SetThreadUILanguage@Locale@@QAE_NPAVIRequestContext@@@Z
+?SetUpdateMode@BufferFormatter@@UAEXW4Mode@1@@Z
+?SetUpdateMode@CircularBufferFormatter@@UAEXW4Mode@BufferFormatter@@@Z
+?SetUri@CWSManResource@@QAEHPBGPAVIRequestContext@@@Z
+?SetValid@RBUFFER@@IAEXH@Z
+?SetXml@ReferenceParameters@PacketParser@@AAEKAAVBufferFormatter@@PAU_FWXML_ELEMENT@@@Z
+?Shutdown@CBaseConfigCache@@IAEXXZ
+?Shutdown@CConfigManager@@SGHXZ
+?Shutdown@CWSManGroupPolicyManager@@SGHXZ
+?Shutdown@ChildLifeTimeManager@@QAEXXZ
+?ShutdownLocaleMap@Locale@@SGXXZ
+?Size@?$SafeMap@PAVCListenerOperation@@UEmpty@@V?$SafeSet_Iterator@PAVCListenerOperation@@@@@@QBEHXZ
+?Size@?$SafeMap@UUserKey@@PAVBlockedRecord@@V?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@@@QBEHXZ
+?Size@?$SafeMap@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@V?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@@@QBEHXZ
+?Size@?$SafeMap@VStringKeyCI@@KV?$SafeMap_Iterator@VStringKeyCI@@K@@@@QBEHXZ
+?Size@?$SafeMap@VStringKeyCI@@UEmpty@@V?$SafeSet_Iterator@VStringKeyCI@@@@@@QBEHXZ
+?Size@?$SafeMap@VStringKeyStore@@PAVExpiredOperationIdRecord@@V?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@@@QBEHXZ
+?SkipOrphans@?$SafeMap_Iterator@PAVCCertMapping@@UEmpty@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@PAVCListenerOperation@@UEmpty@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@PAVCShellUriSettings@@UEmpty@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@PAXUEmpty@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@UPluginKey@@K@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@UUserKey@@PAVBlockedRecord@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@VCertThumbprintKey@@VCertThumbprintMappedSet@CServiceConfigSettings@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@VKey@Locale@@K@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@VStringKeyCI@@K@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@VStringKeyCI@@UUSER_CONTEXT_INFO@WSManHttpListener@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@VStringKeyStore@@PAVExpiredOperationIdRecord@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@VStringKeyStore@@PAVServerFullDuplexChannel@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@W4WSManSessionOption@@PAVOptionValue@SessionOptions@Client@WSMan@@@@IAEXXZ
+?SkipOrphans@?$SafeMap_Iterator@_KPAVSendPacketArgs@RobustConnectionBuffer@@@@IAEXXZ
+?StartSoapProcessor@@YGHXZ
+?StopSoapProcessor@@YGHXZ
+?Storage@?$AutoCleanup@V?$AutoDelete@G@@PAG@@QAEPAPAGXZ
+?Storage@?$AutoCleanup@V?$AutoDelete@UIPRange@CWSManIPFilter@@@@PAUIPRange@CWSManIPFilter@@@@QAEPAPAUIPRange@CWSManIPFilter@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEPAPAVEnumSinkEx@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEPAPAVGeneralSinkEx@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VIQueryDASHSMASHInterface@@@@PAVIQueryDASHSMASHInterface@@@@QAEPAPAVIQueryDASHSMASHInterface@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VISpecification@@@@PAVISpecification@@@@QAEPAPAVISpecification@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VPacketCreator@@@@PAVPacketCreator@@@@QAEPAPAVPacketCreator@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VTSTRBUFFER@@@@PAVTSTRBUFFER@@@@QAEPAPAVTSTRBUFFER@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VWmiEnumContext@@@@PAVWmiEnumContext@@@@QAEPAPAVWmiEnumContext@@XZ
+?Storage@?$AutoCleanup@V?$AutoDelete@VXmlReader@@@@PAVXmlReader@@@@QAEPAPAVXmlReader@@XZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@$$CBG@@PBG@@QAEPAPBGXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@E@@PAE@@QAEPAPAEXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@G@@PAG@@QAEPAPAGXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@PAG@@PAPAG@@QAEPAPAPAGXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@PBG@@PAPBG@@QAEPAPAPBGXZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@PAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@@@QAEPAPAU_WINRS_CREATE_SHELL_ENVIRONMENT_VARIABLE@@XZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@U_WINRS_RUN_COMMAND_ARG@@@@PAU_WINRS_RUN_COMMAND_ARG@@@@QAEPAPAU_WINRS_RUN_COMMAND_ARG@@XZ
+?Storage@?$AutoCleanup@V?$AutoDeleteVector@X@@PAX@@QAEPAPAXXZ
+?Storage@?$AutoCleanup@V?$AutoFree@E@@PAE@@QAEPAPAEXZ
+?Storage@?$AutoCleanup@V?$AutoLocklessItemRecycle@VPacket@@@@PAVPacket@@@@QAEPAPAVPacket@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostAdminManager@@@@PAUIAppHostAdminManager@@@@QAEPAPAUIAppHostAdminManager@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostChildElementCollection@@@@PAUIAppHostChildElementCollection@@@@QAEPAPAUIAppHostChildElementCollection@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostConfigException@@@@PAUIAppHostConfigException@@@@QAEPAPAUIAppHostConfigException@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostElement@@@@PAUIAppHostElement@@@@QAEPAPAUIAppHostElement@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostElementCollection@@@@PAUIAppHostElementCollection@@@@QAEPAPAUIAppHostElementCollection@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostProperty@@@@PAUIAppHostProperty@@@@QAEPAPAUIAppHostProperty@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIAppHostPropertyCollection@@@@PAUIAppHostPropertyCollection@@@@QAEPAPAUIAppHostPropertyCollection@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIClientSecurity@@@@PAUIClientSecurity@@@@QAEPAPAUIClientSecurity@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIEnumWbemClassObject@@@@PAUIEnumWbemClassObject@@@@QAEPAPAUIEnumWbemClassObject@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIErrorInfo@@@@PAUIErrorInfo@@@@QAEPAPAUIErrorInfo@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIUnknown@@@@PAUIUnknown@@@@QAEPAPAUIUnknown@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemClassObject@@@@PAUIWbemClassObject@@@@QAEPAPAUIWbemClassObject@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemContext@@@@PAUIWbemContext@@@@QAEPAPAUIWbemContext@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemLocator@@@@PAUIWbemLocator@@@@QAEPAPAUIWbemLocator@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemObjectTextSrc@@@@PAUIWbemObjectTextSrc@@@@QAEPAPAUIWbemObjectTextSrc@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemPath@@@@PAUIWbemPath@@@@QAEPAPAUIWbemPath@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemPathKeyList@@@@PAUIWbemPathKeyList@@@@QAEPAPAUIWbemPathKeyList@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemQualifierSet@@@@PAUIWbemQualifierSet@@@@QAEPAPAUIWbemQualifierSet@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemQuery@@@@PAUIWbemQuery@@@@QAEPAPAUIWbemQuery@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@UIWbemServices@@@@PAUIWbemServices@@@@QAEPAPAUIWbemServices@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VCWSManEPR@@@@PAVCWSManEPR@@@@QAEPAPAVCWSManEPR@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VCWinRSPluginConfigCache@@@@PAVCWinRSPluginConfigCache@@@@QAEPAPAVCWinRSPluginConfigCache@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VCommand@Client@WSMan@@@@PAVCommand@Client@WSMan@@@@QAEPAPAVCommand@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VEnumSinkEx@@@@PAVEnumSinkEx@@@@QAEPAPAVEnumSinkEx@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VGeneralSinkEx@@@@PAVGeneralSinkEx@@@@QAEPAPAVGeneralSinkEx@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VIRequestContext@@@@PAVIRequestContext@@@@QAEPAPAVIRequestContext@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VReceiveOperation@Client@WSMan@@@@PAVReceiveOperation@Client@WSMan@@@@QAEPAPAVReceiveOperation@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VSendOperation@Client@WSMan@@@@PAVSendOperation@Client@WSMan@@@@QAEPAPAVSendOperation@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VShell@Client@WSMan@@@@PAVShell@Client@WSMan@@@@QAEPAPAVShell@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@V?$AutoRelease@VSignalOperation@Client@WSMan@@@@PAVSignalOperation@Client@WSMan@@@@QAEPAPAVSignalOperation@Client@WSMan@@XZ
+?Storage@?$AutoCleanup@VAutoBstr@@PAG@@QAEPAPAGXZ
+?Storage@?$AutoCleanup@VAutoBstrNoAlloc@@PAG@@QAEPAPAGXZ
+?Storage@?$AutoCleanup@VAutoCertContext@@PBU_CERT_CONTEXT@@@@QAEPAPBU_CERT_CONTEXT@@XZ
+?Storage@?$AutoCleanup@VAutoChainContext@@PBU_CERT_CHAIN_CONTEXT@@@@QAEPAPBU_CERT_CHAIN_CONTEXT@@XZ
+?Storage@?$AutoCleanup@VAutoHandle@@PAX@@QAEPAPAXXZ
+?Storage@?$AutoCleanup@VAutoImpersonateUser@@PAX@@QAEPAPAXXZ
+?Storage@?$AutoCleanup@VAutoLocalFree@@PAX@@QAEPAPAXXZ
+?Storage@?$AutoCleanup@VAutoMIClass@@PAU_MI_Class@@@@QAEPAPAU_MI_Class@@XZ
+?Storage@?$AutoCleanup@VAutoMIInstance@@PAU_MI_Instance@@@@QAEPAPAU_MI_Instance@@XZ
+?Storage@?$AutoCleanup@VAutoRegKey@@PAUHKEY__@@@@QAEPAPAUHKEY__@@XZ
+?Storage@?$AutoCleanup@VAutoSecurityDescriptor@@PAX@@QAEPAPAXXZ
+?Storage@?$AutoCleanup@VAutoWaitHandle@@PAX@@QAEPAPAXXZ
+?StoreData@CWSManResource@@AAEHPAVIRequestContext@@PBG11PAU_WSMAN_SELECTOR_SET@@PAU_WSMAN_OPTION_SET@@@Z
+?StoreData@CWSManResource@@QAEHPAVIRequestContext@@PBG@Z
+?StoreDataFromResourceLocator@CWSManResource@@AAEHPAVIRequestContext@@PAU_WSMAN_RESOURCE_LOCATOR@@@Z
+?StoreExpansion@CResourceAlias@@AAEXPBGPAU_ALIAS_INFORMATION@@@Z
+?StreamingOutput@ExtendedSemantic@@2KB DATA
+?StringCchEndsWithCI@@YGHPBG0@Z
+?StringCchEquals@@YGHPBG0@Z
+?StringCchEqualsCI@@YGHPBG0@Z
+?StringCchStartsWith@@YGHPBG0@Z
+?StringCchStartsWithCI@@YGHPBG0@Z
+?StringConcatenate@CWSManResourceNoResourceUri@@IAEHAAPAGAAKKPAG@Z
+?StringIsBlank@@YGHPBG@Z
+?StringToDword@@YGHPBDPAK@Z
+?StringToDword@@YGHPBGPAK@Z
+?StringTrimWhitespace@@YGPAGPAG@Z
+?Subscribe@CWSManGroupPolicyManager@@UAEHPAVIRequestContext@@PAVIWSManGroupPolicyObserver@@H@Z
+?TruncateAt@TSTRBUFFER@@QAEXI@Z
+?TryAcquire@CWSManCriticalSection@@QAEHXZ
+?UnSubscribe@CWSManGroupPolicyManager@@UAEHPAVIRequestContext@@PAVIWSManGroupPolicyObserver@@@Z
+?UninstallMigration@@YGHPAVIRequestContext@@@Z
+?UnregisterChild@ChildLifeTimeManager@@QAEXXZ
+?UnregisterPolicyNotification@CWSManGroupPolicyManager@@AAEHXZ
+?Up@?$LoaderSerializer@VSubscriptionManager@@$01@@AAEJXZ
+?UpdateCredentialsInCredmanStore@CConfigManager@@SGHPAVIRequestContext@@PAG1@Z
+?UpdateHttpsBinding@@YGHPAVIRequestContext@@PBG1PAHHH@Z
+?UpdateHttpsCertificate@@YGHPAVIRequestContext@@PBG11PAHHU_GUID@@@Z
+?UpdateKey@CWSManResourceNoResourceUri@@QAEHPAVIRequestContext@@PBG1@Z
+?Uri@CResourceAlias@@QAEPBGXZ
+?UseClientToken@UserRecord@@QAE_NXZ
+?UseDefaultConfig@CErrorContext@@UBEHXZ
+?UsingDefaultLCID@Locale@@QAE_NXZ
+?Validate@Locale@@SG_NPAU_WSMAN_DATA@@@Z
+?Validate@Locale@@SG_NPBG@Z
+?ValidateCBTHardeningLevel@ConfigRegistry@@IAEHPAVIRequestContext@@PBG@Z
+?ValidateCertificateHash@ConfigRegistry@@IAEHPAVIRequestContext@@PBG111@Z
+?ValidateHeaders@PacketParser@@QAEHPAVIRequestContext@@K@Z
+?ValidateHostnameAndCertificateCN@ConfigRegistry@@IAEHPAVIRequestContext@@PBG1@Z
+?ValidateIPFilter@ConfigRegistry@@IAEHPAVIRequestContext@@W4ConfigSetting@@PBG@Z
+?ValidateInt@CWSManGroupPolicyManager@@AAEHPAVIRequestContext@@PBU_WSMAN_POLICY_INFO@@K@Z
+?ValidateInt@ConfigRegistry@@IAEHPAVIRequestContext@@PAU_CONFIG_INFO@@KPBG@Z
+?ValidateString@CWSManGroupPolicyManager@@AAEHPAVIRequestContext@@PBU_WSMAN_POLICY_INFO@@PBG@Z
+?ValidateString@ConfigRegistry@@IAEHPAVIRequestContext@@PAU_CONFIG_INFO@@PBG@Z
+?ValidateTrustedHosts@ConfigRegistry@@IAEHPAVIRequestContext@@PBG@Z
+?ValidateUrlPrefix@ConfigRegistry@@IAEHPAVIRequestContext@@PBG@Z
+?Verbose@ExtendedSemantic@@2KB DATA
+?VerifyState@RBUFFER@@IBEXXZ
+?WSManError@@YGXPBGK0KPAVIRequestContext@@@Z
+?WSManMemoryOperation@@YGHW4WSMANMEMOPERATION@@PAXKK@Z
+?WSManPostThreadMessageW@@YGHKIIJ@Z
+?WaitForAllChildrenToUnregister@ChildLifeTimeManager@@QAEXK@Z
+?WaitForConditionVar@CWSManCriticalSectionWithConditionVar@@QAEKK@Z
+?WaitForMore@PacketParser@@UAE_NXZ
+?WakeAllWaitingForConditionVar@CWSManCriticalSectionWithConditionVar@@QAEXXZ
+?WakeAllWaitingOnNoOfChildren@ChildLifeTimeManager@@AAEXXZ
+?Warning@EventLog@@SGXK@Z
+?Warning@EventLog@@SGXKGPAPBG@Z
+?Warning@EventLog@@SGXKPBG@Z
+?Warning@ExtendedSemantic@@2KB DATA
+?WatchForChanges@CServiceConfigCache@@QAEPAVCServiceWatcher@1@PAVIRequestContext@@PAVIServiceConfigObserver@@@Z
+?WrapperCoSetProxyBlanket@@YGJPAUIUnknown@@KKPAGKKPAXKW4BehaviourForNoInterfaceError@@@Z
+?Write@EventHandler@WSMan@@SGXABU_EVENT_DESCRIPTOR@@KPAU_EVENT_DATA_DESCRIPTOR@@@Z
+?WriteCredentialsToCredmanStore@CConfigManager@@SGHPAVIRequestContext@@PAG1H@Z
+?WriteSoapA@EventHandler@WSMan@@SGXABU_EVENT_DESCRIPTOR@@PBDK@Z
+?WriteSoapMessageA@EventHandler@WSMan@@AAEXABU_EVENT_DESCRIPTOR@@PBDK@Z
+?WriteSoapMessageW@EventHandler@WSMan@@AAEXABU_EVENT_DESCRIPTOR@@PBGK@Z
+?WriteSoapMessageW_BE@EventHandler@WSMan@@AAEXABU_EVENT_DESCRIPTOR@@PBGK@Z
+?WriteSoapW@EventHandler@WSMan@@SGXABU_EVENT_DESCRIPTOR@@PBGK@Z
+?WriteSoapW_BE@EventHandler@WSMan@@SGXABU_EVENT_DESCRIPTOR@@PBGK@Z
+?_PolicyChangedCallback@CWSManGroupPolicyManager@@CGXPAXE@Z
+?back@?$SimpleQueue@T_LARGE_INTEGER@@@@QBE?BT_LARGE_INTEGER@@XZ
+?empty@?$SimpleQueue@T_LARGE_INTEGER@@@@QBE_NXZ
+?front@?$SimpleQueue@T_LARGE_INTEGER@@@@QBE?BT_LARGE_INTEGER@@XZ
+?g_Resources@Locale@@0V?$Loader@VResources@Locale@@$0A@@@A DATA
+?isValid@?$SafeSet@PAVCListenerOperation@@@@QBE_NXZ
+?m_migContext@ConfigRegistry@@2PAVWSManMigrationContext@@A DATA
+?pop@?$SimpleQueue@T_LARGE_INTEGER@@@@QAEXXZ
+?push@?$SimpleQueue@T_LARGE_INTEGER@@@@QAEKT_LARGE_INTEGER@@@Z
+?s_cacheMap@CClientConfigCache@@0V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@A DATA
+?s_cacheMap@CServiceConfigCache@@0V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@A DATA
+?s_cacheMap@CWinRSPluginConfigCache@@0V?$AutoRelease@VCConfigCacheMap@CBaseConfigCache@@@@A DATA
+?s_config@CConfigManager@@0V?$AutoRelease@VCConfigManager@@@@A DATA
+?s_lock@CConfigManager@@0VFastLock@@A DATA
+?s_lock@CWSManGroupPolicyManager@@0VFastLock@@A DATA
+?s_mapLock@CClientConfigCache@@0VFastLock@@A DATA
+?s_mapLock@CServiceConfigCache@@0VFastLock@@A DATA
+?s_mapLock@CWinRSPluginConfigCache@@0VFastLock@@A DATA
+?s_policyManager@CWSManGroupPolicyManager@@0V?$AutoRelease@VCWSManGroupPolicyManager@@@@A DATA
+EnumServiceUserResources@12
+FwGetParsedDocument@8
+FwGetRootElement@4
+FwIsXmlEscapedProperly@8
+FwXmlAddAttributeToAttributeList@44
+FwXmlCloseParser@4
+FwXmlCompareAttributeName@16
+FwXmlCompareAttributeNameEx@24
+FwXmlCompareElementName@16
+FwXmlCompareElementNameEx@24
+FwXmlCompareElementNameLen@16
+FwXmlCompareElementNameSpace@16
+FwXmlCompareName@16
+FwXmlCreateXmlFromElement@24
+FwXmlDecodeXmlEscapes@20
+FwXmlEncodeXmlEscapes@12
+FwXmlFindAttribute@28
+FwXmlFindAttributeEx@24
+FwXmlFindChildElement@28
+FwXmlFindChildElementEx@24
+FwXmlGetAttribute@8
+FwXmlGetAttributeNameEx@4
+FwXmlGetAttributeNamespacePrefix@4
+FwXmlGetAttributeValue@4
+FwXmlGetAttributeValueDWord@16
+FwXmlGetBooleanValue@8
+FwXmlGetBuffer@12
+FwXmlGetChild@8
+FwXmlGetElementName@16
+FwXmlGetElementNameEx@4
+FwXmlGetElementNamespacePrefix@4
+FwXmlGetElementNamespaceUrl@4
+FwXmlGetEntryNameEx@4
+FwXmlGetNamespaceForPrefix@20
+FwXmlGetNormalizedString@36
+FwXmlGetReferenceXmlFromElement@8
+FwXmlGetRemainder@8
+FwXmlGetSimpleContent@20
+FwXmlGetSimpleContentEx2@12
+FwXmlGetSimpleContentEx@8
+FwXmlHasText@8
+FwXmlIsEmpty@8
+FwXmlIsMustUnderstand@4
+FwXmlIsNull@4
+FwXmlIsSimpleContent@4
+FwXmlIsSimpleContentOrEmpty@4
+FwXmlIsTrueValue@4
+FwXmlNumAttributes@4
+FwXmlNumChildren@4
+FwXmlNumChildrenWithName@16
+FwXmlNumConsecutiveChildrenWithName@16
+FwXmlParsePrefixedXML@20
+FwXmlParseStream@20
+FwXmlParseText@24
+FwXmlParserCreate@8
+FwXmlUpdatePrefixes@8
+GetServiceSecurity@8
+SetServiceSecurity@20
+SubscriptionsProvEnumerate@20
+WSManAckEvents@4
+WSManAddSubscriptionManagerInternal@12
+WSManCloseCommand@12
+WSManCloseEnumerationHandle@4
+WSManCloseEnumeratorHandle@4
+WSManCloseObjectHandle@4
+WSManCloseOperation@8
+WSManClosePublisherHandle@4
+WSManCloseSession@8
+WSManCloseSessionHandle@4
+WSManCloseShell@12
+WSManCloseSubscriptionHandle@4
+WSManConnectShell@32
+WSManConnectShellCommand@28
+WSManConstructError@12
+WSManCreateEnumeratorInternal@16
+WSManCreateInternal@28
+WSManCreateInternalEx@28
+WSManCreatePullSubscription@32
+WSManCreatePushSubscription@36
+WSManCreateSession@24
+WSManCreateSessionInternal@32
+WSManCreateShell@32
+WSManCreateShellEx@36
+WSManDecodeObject@20
+WSManDeinitialize@8
+WSManDeleteInternal@24
+WSManDeleteInternalEx@24
+WSManDeliverEndSubscriptionNotification@8
+WSManDeliverEvent@24
+WSManDisconnectShell@16
+WSManEncodeObject@16
+WSManEncodeObjectEx@20
+WSManEncodeObjectInternal@16
+WSManEnumerateInternal@40
+WSManEnumerateInternalEx@40
+WSManEnumeratorAddEvent@12
+WSManEnumeratorAddObject@12
+WSManEnumeratorBatchPolicyViolated@4
+WSManEnumeratorNextObject@8
+WSManEnumeratorObjectCount@4
+WSManGetErrorMessage@28
+WSManGetInternal@24
+WSManGetInternalEx@24
+WSManGetSessionOptionAsDword@12
+WSManGetSessionOptionAsString@20
+WSManIdentifyInternal@20
+WSManInitialize@8
+WSManInvokeInternal@32
+WSManInvokeInternalEx@32
+WSManPluginAuthzOperationComplete@20
+WSManPluginAuthzQueryQuotaComplete@20
+WSManPluginAuthzUserComplete@28
+WSManPluginFreeRequestDetails@4
+WSManPluginGetConfiguration@12
+WSManPluginGetOperationParameters@12
+WSManPluginInteractiveCallback@20
+WSManPluginObjectAndBookmarkResult@16
+WSManPluginObjectAndEprResult@20
+WSManPluginObjectResult@12
+WSManPluginOperationComplete@16
+WSManPluginReceiveResult@24
+WSManPluginReportCompletion@8
+WSManPluginReportContext@12
+WSManPluginShutdown@12
+WSManPluginStartup@16
+WSManProvCreate@20
+WSManProvDelete@12
+WSManProvEnumerate@20
+WSManProvGet@12
+WSManProvInvoke@24
+WSManProvPut@20
+WSManPull@20
+WSManPullEvents@16
+WSManPutInternal@28
+WSManPutInternalEx@28
+WSManReceiveShellOutput@24
+WSManReconnectShell@12
+WSManReconnectShellCommand@12
+WSManRemoveSubscriptionManagerInternal@4
+WSManRunShellCommand@28
+WSManRunShellCommandEx@32
+WSManSendShellInput@32
+WSManSetSessionOption@12
+WSManSignalShell@24
diff --git a/lib/libc/mingw/lib64/PS5UI.def b/lib/libc/mingw/lib64/PS5UI.def
index d2530fc4e5..3b7eb77638 100644
--- a/lib/libc/mingw/lib64/PS5UI.def
+++ b/lib/libc/mingw/lib64/PS5UI.def
@@ -8,7 +8,6 @@ LIBRARY ps5ui.dll
EXPORTS
DrvSplDeviceCaps
DevQueryPrintEx
-DllMain
DrvConvertDevMode
DrvDeviceCapabilities
DrvDevicePropertySheets
diff --git a/lib/libc/mingw/lib64/PSCRIPT5.def b/lib/libc/mingw/lib64/PSCRIPT5.def
index 0d20c151fe..9242ecef57 100644
--- a/lib/libc/mingw/lib64/PSCRIPT5.def
+++ b/lib/libc/mingw/lib64/PSCRIPT5.def
@@ -6,7 +6,6 @@
;
LIBRARY pscript5.dll
EXPORTS
-DllMain
DrvDisableDriver
DrvEnableDriver
DrvQueryDriverInfo
diff --git a/lib/libc/mingw/lib64/UNIDRV.def b/lib/libc/mingw/lib64/UNIDRV.def
index 0c75316297..0bc91e3a57 100644
--- a/lib/libc/mingw/lib64/UNIDRV.def
+++ b/lib/libc/mingw/lib64/UNIDRV.def
@@ -6,7 +6,6 @@
;
LIBRARY unidrv.dll
EXPORTS
-DllMain
DrvDisableDriver
DrvEnableDriver
DrvQueryDriverInfo
diff --git a/lib/libc/mingw/lib64/UNIDRVUI.def b/lib/libc/mingw/lib64/UNIDRVUI.def
index 8f9c450bf1..d5504ae746 100644
--- a/lib/libc/mingw/lib64/UNIDRVUI.def
+++ b/lib/libc/mingw/lib64/UNIDRVUI.def
@@ -8,7 +8,6 @@ LIBRARY unidrvui.dll
EXPORTS
DrvSplDeviceCaps
DevQueryPrintEx
-DllMain
DrvConvertDevMode
DrvDeviceCapabilities
DrvDevicePropertySheets
diff --git a/lib/libc/mingw/lib64/admparse.def b/lib/libc/mingw/lib64/admparse.def
index ea0cc845bb..d9b27ae545 100644
--- a/lib/libc/mingw/lib64/admparse.def
+++ b/lib/libc/mingw/lib64/admparse.def
@@ -6,7 +6,6 @@
;
LIBRARY admparse.dll
EXPORTS
-DllMain
IsAdmDirty
ResetAdmDirtyFlag
AdmClose
diff --git a/lib/libc/mingw/lib64/dmconfig.def b/lib/libc/mingw/lib64/dmconfig.def
index 6f5dbc7e7d..88ddb7245a 100644
--- a/lib/libc/mingw/lib64/dmconfig.def
+++ b/lib/libc/mingw/lib64/dmconfig.def
@@ -6,5 +6,4 @@
;
LIBRARY dmconfig.dll
EXPORTS
-DllMain
cs_get_api_calls
diff --git a/lib/libc/mingw/lib64/exstrace.def b/lib/libc/mingw/lib64/exstrace.def
index fddf39f98c..1c72f7c3cc 100644
--- a/lib/libc/mingw/lib64/exstrace.def
+++ b/lib/libc/mingw/lib64/exstrace.def
@@ -9,7 +9,6 @@ EXPORTS
AsyncBinaryTrace
AsyncStringTrace
DebugAssert
-DllMain
FlushAsyncTrace
InitAsyncTrace
SetAsyncTraceParams
diff --git a/lib/libc/mingw/lib64/fldrclnr.def b/lib/libc/mingw/lib64/fldrclnr.def
index 697eb73290..136e0436b8 100644
--- a/lib/libc/mingw/lib64/fldrclnr.def
+++ b/lib/libc/mingw/lib64/fldrclnr.def
@@ -7,6 +7,5 @@
LIBRARY FldrClnr.dll
EXPORTS
DllInstall
-DllMain
DllRegisterServer
Wizard_RunDLL
diff --git a/lib/libc/mingw/lib64/fxsdrv.def b/lib/libc/mingw/lib64/fxsdrv.def
index 23a1e6d826..801bc847a7 100644
--- a/lib/libc/mingw/lib64/fxsdrv.def
+++ b/lib/libc/mingw/lib64/fxsdrv.def
@@ -6,7 +6,6 @@
;
LIBRARY FxsDrv.dll
EXPORTS
-DllEntryPoint
DrvDisableDriver
DrvEnableDriver
DrvQueryDriverInfo
diff --git a/lib/libc/mingw/lib64/fxsst.def b/lib/libc/mingw/lib64/fxsst.def
index 326e236e94..7cb14ef36c 100644
--- a/lib/libc/mingw/lib64/fxsst.def
+++ b/lib/libc/mingw/lib64/fxsst.def
@@ -6,6 +6,5 @@
;
LIBRARY FXSST.dll
EXPORTS
-DllMain
FaxMonitorShutdown
IsFaxMessage
diff --git a/lib/libc/mingw/lib64/gpkcsp.def b/lib/libc/mingw/lib64/gpkcsp.def
index a88245af8b..ec87faaa05 100644
--- a/lib/libc/mingw/lib64/gpkcsp.def
+++ b/lib/libc/mingw/lib64/gpkcsp.def
@@ -29,6 +29,5 @@ CPSetKeyParam
CPSetProvParam
CPSignHash
CPVerifySignature
-DllMain
DllRegisterServer
DllUnregisterServer
diff --git a/lib/libc/mingw/lib64/guitrn.def b/lib/libc/mingw/lib64/guitrn.def
index 5c8a8057b3..d0df158320 100644
--- a/lib/libc/mingw/lib64/guitrn.def
+++ b/lib/libc/mingw/lib64/guitrn.def
@@ -6,7 +6,6 @@
;
LIBRARY GUITRN.dll
EXPORTS
-DllMain
ModuleInitialize
ModuleTerminate
TransportModule
diff --git a/lib/libc/mingw/lib64/hnetwiz.def b/lib/libc/mingw/lib64/hnetwiz.def
index 2af41ec57e..f02ce71cca 100644
--- a/lib/libc/mingw/lib64/hnetwiz.def
+++ b/lib/libc/mingw/lib64/hnetwiz.def
@@ -9,6 +9,5 @@ EXPORTS
HomeNetWizardRunDll
DllCanUnloadNow
DllGetClassObject
-DllMain
DllRegisterServer
DllUnregisterServer
diff --git a/lib/libc/mingw/lib64/ieencode.def b/lib/libc/mingw/lib64/ieencode.def
index 1b2d77d425..bedcad361c 100644
--- a/lib/libc/mingw/lib64/ieencode.def
+++ b/lib/libc/mingw/lib64/ieencode.def
@@ -13,5 +13,4 @@ CceStreamMultiByteToUnicode
CceStreamUnicodeToMultiByte
CceStringMultiByteToUnicode
CceStringUnicodeToMultiByte
-DllMain
FetchMsEncodeDllVersion
diff --git a/lib/libc/mingw/lib64/iisrtl.def b/lib/libc/mingw/lib64/iisrtl.def
index e1fc2f5d19..2bcd0ce03f 100644
--- a/lib/libc/mingw/lib64/iisrtl.def
+++ b/lib/libc/mingw/lib64/iisrtl.def
@@ -1986,7 +1986,6 @@ CreateRefTraceLog
CreateTraceLog
DestroyRefTraceLog
DestroyTraceLog
-DllMain
GetAllocCounters
GetCurrentTimeInMilliseconds
GetCurrentTimeInSeconds
diff --git a/lib/libc/mingw/lib64/imeshare.def b/lib/libc/mingw/lib64/imeshare.def
index a16b088cef..8ed2b8ae69 100644
--- a/lib/libc/mingw/lib64/imeshare.def
+++ b/lib/libc/mingw/lib64/imeshare.def
@@ -6,7 +6,6 @@
;
LIBRARY imeshare.dll
EXPORTS
-DllMain
FInitIMEShare
EndIMEShare
FRefreshStyle
diff --git a/lib/libc/mingw/lib64/imjpcus.def b/lib/libc/mingw/lib64/imjpcus.def
index cf37f7d74e..5abe996e0f 100644
--- a/lib/libc/mingw/lib64/imjpcus.def
+++ b/lib/libc/mingw/lib64/imjpcus.def
@@ -7,4 +7,3 @@
LIBRARY imejpcus.dll
EXPORTS
OpenDetailDialog
-DllMain
diff --git a/lib/libc/mingw/lib64/imjputyc.def b/lib/libc/mingw/lib64/imjputyc.def
index 4393770379..b30eff85ef 100644
--- a/lib/libc/mingw/lib64/imjputyc.def
+++ b/lib/libc/mingw/lib64/imjputyc.def
@@ -7,6 +7,5 @@
LIBRARY imjputyc.dll
EXPORTS
AutoCorrLbSubWndProc
-DllMain
OpenImeTool
OpenUty
diff --git a/lib/libc/mingw/lib64/iyuv_32.def b/lib/libc/mingw/lib64/iyuv_32.def
index 276e0f4701..a95634f124 100644
--- a/lib/libc/mingw/lib64/iyuv_32.def
+++ b/lib/libc/mingw/lib64/iyuv_32.def
@@ -7,6 +7,5 @@
LIBRARY IYUV_32.dll
EXPORTS
AboutDialogProc
-DllMain
DriverDialogProc
DriverProc
diff --git a/lib/libc/mingw/lib64/localspl.def b/lib/libc/mingw/lib64/localspl.def
index 9fb52e677b..3240493bdc 100644
--- a/lib/libc/mingw/lib64/localspl.def
+++ b/lib/libc/mingw/lib64/localspl.def
@@ -8,7 +8,6 @@ LIBRARY LocalSpl.dll
EXPORTS
ClosePrintProcessor
ControlPrintProcessor
-DllMain
EnumPrintProcessorDatatypesW
GetPrintProcessorCapabilities
InitializePrintMonitor
diff --git a/lib/libc/mingw/lib64/log.def b/lib/libc/mingw/lib64/log.def
index 320579e015..8e83f33412 100644
--- a/lib/libc/mingw/lib64/log.def
+++ b/lib/libc/mingw/lib64/log.def
@@ -6,7 +6,6 @@
;
LIBRARY LOG.dll
EXPORTS
-DllMain
LogA
LogBegin
LogDeleteOnNextInit
diff --git a/lib/libc/mingw/lib64/migism.def b/lib/libc/mingw/lib64/migism.def
index 1a08b76ac0..5d20a75454 100644
--- a/lib/libc/mingw/lib64/migism.def
+++ b/lib/libc/mingw/lib64/migism.def
@@ -6,7 +6,6 @@
;
LIBRARY MIGISM.dll
EXPORTS
-DllMain
IsmAbandonObjectIdOnCollision
IsmAbandonObjectOnCollision
IsmAbortApplyObjectEnum
diff --git a/lib/libc/mingw/lib64/msdart.def b/lib/libc/mingw/lib64/msdart.def
index 9292e523a6..ec43fa99af 100644
--- a/lib/libc/mingw/lib64/msdart.def
+++ b/lib/libc/mingw/lib64/msdart.def
@@ -983,7 +983,6 @@ EXPORTS
; protected: static unsigned short CSpinLock::sm_wDefaultSpinCount
?sm_wDefaultSpinCount@CSpinLock@@1GA DATA
DllBidEntryPoint
-DllMain
FXMemAttach
FXMemDetach
GetIUMS
diff --git a/lib/libc/mingw/lib64/msoledbsql.def b/lib/libc/mingw/lib64/msoledbsql.def
index c792aaff25..c2f3b20a91 100644
--- a/lib/libc/mingw/lib64/msoledbsql.def
+++ b/lib/libc/mingw/lib64/msoledbsql.def
@@ -7,7 +7,6 @@ LIBRARY "msoledbsql.dll"
EXPORTS
DllCanUnloadNow
DllGetClassObject
-DllMain
DllRegisterServer
DllUnregisterServer
OpenSqlFilestream
diff --git a/lib/libc/mingw/lib64/mtxclu.def b/lib/libc/mingw/lib64/mtxclu.def
index 0e61a53761..abfe1a4c2d 100644
--- a/lib/libc/mingw/lib64/mtxclu.def
+++ b/lib/libc/mingw/lib64/mtxclu.def
@@ -90,4 +90,3 @@ MtxCluUninitialize
MtxCluUpgradeDtcResourceW
Startup
WasDTCInstalledBySQL
-DllMain
diff --git a/lib/libc/mingw/lib64/netplwiz.def b/lib/libc/mingw/lib64/netplwiz.def
index b1d35d5974..bd133cd6f3 100644
--- a/lib/libc/mingw/lib64/netplwiz.def
+++ b/lib/libc/mingw/lib64/netplwiz.def
@@ -14,7 +14,6 @@ ClearAutoLogon
DllCanUnloadNow
DllGetClassObject
DllInstall
-DllMain
DllRegisterServer
DllUnregisterServer
NetAccessWizard
diff --git a/lib/libc/mingw/lib64/ntlanman.def b/lib/libc/mingw/lib64/ntlanman.def
index ce5d11e992..3812be2e71 100644
--- a/lib/libc/mingw/lib64/ntlanman.def
+++ b/lib/libc/mingw/lib64/ntlanman.def
@@ -8,7 +8,6 @@ LIBRARY NTLANMAN.dll
EXPORTS
NPGetConnection
NPGetCaps
-DllMain
I_SystemFocusDialog
NPGetUser
NPAddConnection
diff --git a/lib/libc/mingw/lib64/ntlanui.def b/lib/libc/mingw/lib64/ntlanui.def
index 8b80f75485..b9ddea4d94 100644
--- a/lib/libc/mingw/lib64/ntlanui.def
+++ b/lib/libc/mingw/lib64/ntlanui.def
@@ -8,7 +8,6 @@ LIBRARY NTLANUI.dll
EXPORTS
ShareAsDialogA0
StopShareDialogA0
-DllMain
I_SystemFocusDialog
NPGetPropertyText
NPPropertyDialog
diff --git a/lib/libc/mingw/lib64/oledb32.def b/lib/libc/mingw/lib64/oledb32.def
index ce742e786f..f4b84adb1a 100644
--- a/lib/libc/mingw/lib64/oledb32.def
+++ b/lib/libc/mingw/lib64/oledb32.def
@@ -6,7 +6,6 @@
;
LIBRARY OLEDB32.dll
EXPORTS
-DllMain
OpenDSLFile
DllCanUnloadNow
DllGetClassObject
diff --git a/lib/libc/mingw/lib64/p2pcollab.def b/lib/libc/mingw/lib64/p2pcollab.def
index 3c41a3f141..489989bd22 100644
--- a/lib/libc/mingw/lib64/p2pcollab.def
+++ b/lib/libc/mingw/lib64/p2pcollab.def
@@ -87,6 +87,5 @@ SPUpdateUserPicture
SPUpdateUserSettings
SSPAddCredentials
SSPRemoveCredentials
-DllMain
InitSecurityInterfaceW
QuerySecurityPackageInfoW
diff --git a/lib/libc/mingw/lib64/printui.def b/lib/libc/mingw/lib64/printui.def
index 1dce008c4a..ce9f1f48e6 100644
--- a/lib/libc/mingw/lib64/printui.def
+++ b/lib/libc/mingw/lib64/printui.def
@@ -15,7 +15,6 @@ ConnectToPrinterDlg
ConnectToPrinterPropertyPage
DllCanUnloadNow
DllGetClassObject
-DllMain
GetLegacyPrintUI
PrintNotifyTray_Exit
PrintNotifyTray_Init
diff --git a/lib/libc/mingw/lib64/profmap.def b/lib/libc/mingw/lib64/profmap.def
index 5f5d9de834..41934d9e8e 100644
--- a/lib/libc/mingw/lib64/profmap.def
+++ b/lib/libc/mingw/lib64/profmap.def
@@ -6,7 +6,6 @@
;
LIBRARY PROFMAP.dll
EXPORTS
-DllMain
InitializeProfileMappingApi
RemapAndMoveUserA
RemapAndMoveUserW
diff --git a/lib/libc/mingw/lib64/script.def b/lib/libc/mingw/lib64/script.def
index 8a2ca681f2..6ddb419700 100644
--- a/lib/libc/mingw/lib64/script.def
+++ b/lib/libc/mingw/lib64/script.def
@@ -7,7 +7,6 @@
LIBRARY SCRIPT.dll
EXPORTS
DestinationModule
-DllMain
ModuleInitialize
ModuleTerminate
SourceModule
diff --git a/lib/libc/mingw/lib64/spoolss.def b/lib/libc/mingw/lib64/spoolss.def
index 73ea12e89f..37edd9e0fc 100644
--- a/lib/libc/mingw/lib64/spoolss.def
+++ b/lib/libc/mingw/lib64/spoolss.def
@@ -75,7 +75,6 @@ DllCanUnloadNow
DllFreeSplMem
DllFreeSplStr
DllGetClassObject
-DllMain
DllReallocSplMem
DllReallocSplStr
DllRegisterServer
diff --git a/lib/libc/mingw/lib64/sqlxmlx.def b/lib/libc/mingw/lib64/sqlxmlx.def
index f3c32f1404..26265f9a0c 100644
--- a/lib/libc/mingw/lib64/sqlxmlx.def
+++ b/lib/libc/mingw/lib64/sqlxmlx.def
@@ -6,7 +6,6 @@
;
LIBRARY SQLXMLX.dll
EXPORTS
-DllMain
ExecuteToStream
DllCanUnloadNow
DllGetClassObject
diff --git a/lib/libc/mingw/lib64/srrstr.def b/lib/libc/mingw/lib64/srrstr.def
index 20b9895aa2..c8b776a011 100644
--- a/lib/libc/mingw/lib64/srrstr.def
+++ b/lib/libc/mingw/lib64/srrstr.def
@@ -6,7 +6,6 @@
;
LIBRARY SRRSTR.dll
EXPORTS
-DllMain
IsSRFrozen
CheckPrivilegesForRestore
SRGetCplPropPage
diff --git a/lib/libc/mingw/lib64/strmfilt.def b/lib/libc/mingw/lib64/strmfilt.def
index fd1a0496e8..2865743ed5 100644
--- a/lib/libc/mingw/lib64/strmfilt.def
+++ b/lib/libc/mingw/lib64/strmfilt.def
@@ -16,4 +16,3 @@ StreamFilterInitialize
StreamFilterStart
StreamFilterStop
StreamFilterTerminate
-DllMain
diff --git a/lib/libc/mingw/lib64/sysmod.def b/lib/libc/mingw/lib64/sysmod.def
index 802ca268a4..cc5d24d454 100644
--- a/lib/libc/mingw/lib64/sysmod.def
+++ b/lib/libc/mingw/lib64/sysmod.def
@@ -7,7 +7,6 @@
LIBRARY SYSMOD.dll
EXPORTS
DestinationModule
-DllMain
ModuleInitialize
ModuleTerminate
SourceModule
diff --git a/lib/libc/mingw/lib64/vdsutil.def b/lib/libc/mingw/lib64/vdsutil.def
index 7a8fdab769..2271d07f6c 100644
--- a/lib/libc/mingw/lib64/vdsutil.def
+++ b/lib/libc/mingw/lib64/vdsutil.def
@@ -262,6 +262,5 @@ EXPORTS
?WindowProcEntry@CVdsPnPNotificationBase@@CA_JPEAUHWND__@@I_K_J@Z
; public: void __cdecl CVdsAsyncObjectBase::ZeroAsyncOut(void) __ptr64
?ZeroAsyncOut@CVdsAsyncObjectBase@@QEAAXXZ
-DllMain
RegisterVdsFabric
UnregisterVdsFabric
diff --git a/lib/libc/mingw/lib64/w3tp.def b/lib/libc/mingw/lib64/w3tp.def
index bb4b520bac..2c6ab7a52b 100644
--- a/lib/libc/mingw/lib64/w3tp.def
+++ b/lib/libc/mingw/lib64/w3tp.def
@@ -28,4 +28,3 @@ ThreadPoolInitialize
ThreadPoolPostCompletion
ThreadPoolSetInfo
ThreadPoolTerminate
-DllMain
diff --git a/lib/libc/mingw/lib64/wiaservc.def b/lib/libc/mingw/lib64/wiaservc.def
index af756087a2..7d3334d824 100644
--- a/lib/libc/mingw/lib64/wiaservc.def
+++ b/lib/libc/mingw/lib64/wiaservc.def
@@ -32,7 +32,6 @@ ServiceMain
; public: void __cdecl BUFFER_CHAIN_ITEM::SetUsed(unsigned long) __ptr64
?SetUsed@BUFFER_CHAIN_ITEM@@QEAAXK@Z
SvchostPushServiceGlobals
-DllEntryPoint
DllRegisterServer
DllUnregisterServer
wiasCreateChildAppItem
diff --git a/lib/libc/mingw/lib64/xinput1_1.def b/lib/libc/mingw/lib64/xinput1_1.def
index 593ad26675..c9b614120a 100644
--- a/lib/libc/mingw/lib64/xinput1_1.def
+++ b/lib/libc/mingw/lib64/xinput1_1.def
@@ -5,7 +5,6 @@
;
LIBRARY "XINPUT1_1.dll"
EXPORTS
-DllMain
XInputEnable
XInputGetCapabilities
XInputGetDSoundAudioDeviceGuids
diff --git a/lib/libc/mingw/lib64/xinput1_2.def b/lib/libc/mingw/lib64/xinput1_2.def
index 2622af14a9..901045a2b8 100644
--- a/lib/libc/mingw/lib64/xinput1_2.def
+++ b/lib/libc/mingw/lib64/xinput1_2.def
@@ -5,7 +5,6 @@
;
LIBRARY "XINPUT1_2.dll"
EXPORTS
-DllMain
XInputEnable
XInputGetCapabilities
XInputGetDSoundAudioDeviceGuids
diff --git a/lib/libc/mingw/lib64/xinput1_3.def b/lib/libc/mingw/lib64/xinput1_3.def
index b99e4af63e..3213ce56b0 100644
--- a/lib/libc/mingw/lib64/xinput1_3.def
+++ b/lib/libc/mingw/lib64/xinput1_3.def
@@ -5,7 +5,6 @@
;
LIBRARY "XINPUT1_3.dll"
EXPORTS
-DllMain
XInputGetState
XInputSetState
XInputGetCapabilities
diff --git a/lib/libc/mingw/libsrc/strmiids.c b/lib/libc/mingw/libsrc/strmiids.c
index 3764eeda7f..e718df0908 100644
--- a/lib/libc/mingw/libsrc/strmiids.c
+++ b/lib/libc/mingw/libsrc/strmiids.c
@@ -308,13 +308,10 @@ DEFINE_GUID(IID_IEnumTuningSpaces,0x8b8eb248,0xfc2b,0x11d2,0x9d,0x8c,0x00,0xc0,0
DEFINE_GUID(IID_IETFilter,0xc4c4c4b1,0x49,0x4e2b,0x98,0xfb,0x95,0x37,0xf6,0xce,0x51,0x6d);
DEFINE_GUID(IID_IETFilterConfig,0xc4c4c4d1,0x49,0x4e2b,0x98,0xfb,0x95,0x37,0xf6,0xce,0x51,0x6d);
DEFINE_GUID(IID_IEvalRat,0xc5c5c5b1,0x3abc,0x11d6,0xb2,0x5b,0,0xc0,0x4f,0xa0,0xc0,0x26);
-DEFINE_GUID(IID_IFilterChain,0xdcfbdcf6,0x0dc2,0x45f5,0x9a,0xb2,0x7c,0x33,0x0e,0xa0,0x9c,0x29);
DEFINE_GUID(IID_IFilterInfo,0x56a868ba,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
DEFINE_GUID(IID_IFindCompressorCB,0xf03fa8de,0x879a,0x4d59,0x9b,0x2c,0x26,0xbb,0x1c,0xf8,0x34,0x61);
DEFINE_GUID(IID_IFrequencyMap,0x6fb45c1,0x693c,0x4ea7,0xb7,0x9f,0x7a,0x6a,0x54,0xd8,0xde,0xf2);
DEFINE_GUID(IID_IGetCapabilitiesKey,0xa8809222,0x7bb,0x48ea,0x95,0x1c,0x33,0x15,0x81,0,0x62,0x5b);
-DEFINE_GUID(IID_IGraphConfig,0x03a1eb8e,0x32bf,0x4245,0x85,0x02,0x11,0x4d,0x08,0xa9,0xcb,0x88);
-DEFINE_GUID(IID_IGraphConfigCallback,0xade0fd60,0xd19d,0x11d2,0xab,0xf6,0x00,0xa0,0xc9,0x05,0xf3,0x75);
DEFINE_GUID(IID_IGrfCache,0xae9472be,0xb0c3,0x11d2,0x8d,0x24,0x00,0xa0,0xc9,0x44,0x1e,0x20);
DEFINE_GUID(IID_IGuideData,0x61571138,0x5b01,0x43cd,0xae,0xaf,0x60,0xb7,0x84,0xa0,0xbf,0x93);
DEFINE_GUID(IID_IGuideDataEvent,0xefda0c80,0xf395,0x42c3,0x9b,0x3c,0x56,0xb3,0x7d,0xec,0x7b,0xb7);
@@ -392,8 +389,6 @@ DEFINE_GUID(IID_IMSVidWebDVD,0xcf45f88b,0xac56,0x4ee2,0xa7,0x3a,0xed,0x04,0xe2,0
DEFINE_GUID(IID_IMSVidWebDVDAdm,0xb8be681a,0xeb2c,0x47f0,0xb4,0x15,0x94,0xd5,0x45,0x2f,0x0e,0x05);
DEFINE_GUID(IID_IMSVidWebDVDEvent,0xb4f7a674,0x9b83,0x49cb,0xa3,0x57,0xc6,0x3b,0x87,0x1b,0xe9,0x58);
DEFINE_GUID(IID_IMSVidXDS,0x11ebc158,0xe712,0x4d1f,0x8b,0xb3,0x1,0xed,0x52,0x74,0xc4,0xce);
-DEFINE_GUID(IID_IPinConnection,0x4a9a62d3,0x27d4,0x403d,0x91,0xe9,0x89,0xf5,0x40,0xe5,0x55,0x34);
-DEFINE_GUID(IID_IPinFlowControl,0xc56e9858,0xdbf3,0x4f6b,0x81,0x19,0x38,0x4a,0xf2,0x06,0x0d,0xeb);
DEFINE_GUID(IID_IPinInfo,0x56a868bd,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
DEFINE_GUID(IID_IQueueCommand,0x56a868b7,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
DEFINE_GUID(IID_IRegFilterInfo,0x56a868bb,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
diff --git a/lib/libc/mingw/misc/mkstemp.c b/lib/libc/mingw/misc/mkstemp.c
index 6b327f2fca..3b6246540c 100644
--- a/lib/libc/mingw/misc/mkstemp.c
+++ b/lib/libc/mingw/misc/mkstemp.c
@@ -1,3 +1,4 @@
+#define _CRT_RAND_S
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -25,6 +26,7 @@
int __cdecl mkstemp (char *template_name)
{
int i, j, fd, len, index;
+ unsigned int r;
/* These are the (62) characters used in temporary filenames. */
static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
@@ -45,7 +47,9 @@ int __cdecl mkstemp (char *template_name)
*/
for (i = 0; i >= 0; i++) {
for(j = index; j < len; j++) {
- template_name[j] = letters[rand () % 62];
+ if (rand_s(&r))
+ r = rand();
+ template_name[j] = letters[r % 62];
}
fd = _sopen(template_name,
_O_RDWR | _O_CREAT | _O_EXCL | _O_BINARY,
diff --git a/lib/libc/mingw/stdio/mingw_pformat.c b/lib/libc/mingw/stdio/mingw_pformat.c
index 87902aea27..fd53ce1a83 100644
--- a/lib/libc/mingw/stdio/mingw_pformat.c
+++ b/lib/libc/mingw/stdio/mingw_pformat.c
@@ -1026,6 +1026,8 @@ void __pformat_xint( int fmt, __pformat_intarg_t value, __pformat_t *stream )
__pformat_putc( '\x20', stream );
}
+#include "../gdtoa/gdtoa.h"
+
typedef union
{
/* A multifaceted representation of an IEEE extended precision,
@@ -1039,15 +1041,9 @@ typedef union
signed short __pformat_fpreg_exponent;
};
unsigned short __pformat_fpreg_bitmap[5];
- unsigned int __pformat_fpreg_bits;
+ ULong __pformat_fpreg_bits;
} __pformat_fpreg_t;
-#ifdef _WIN32
-/* TODO: make this unconditional in final release...
- * (see note at head of associated `#else' block.
- */
-#include "../gdtoa/gdtoa.h"
-
static __pformat_fpreg_t init_fpreg_ldouble( long double val )
{
__pformat_fpreg_t x;
@@ -1167,61 +1163,6 @@ char *__pformat_fcvt( long double x, int precision, int *dp, int *sign )
#define __pformat_ecvt_release( value ) __freedtoa( value )
#define __pformat_fcvt_release( value ) __freedtoa( value )
-#else
-/*
- * TODO: remove this before final release; it is included here as a
- * convenience for testing, without requiring a working `__gdtoa()'.
- */
-static
-char *__pformat_ecvt( long double x, int precision, int *dp, int *sign )
-{
- /* Define in terms of `ecvt()'...
- */
- char *retval = ecvt( (double)(x), precision, dp, sign );
- if( isinf( x ) || isnan( x ) )
- {
- /* emulating `__gdtoa()' reporting for infinities and NaN.
- */
- *dp = PFORMAT_INFNAN;
- if( *retval == '-' )
- {
- /* Need to force the `sign' flag, (particularly for NaN).
- */
- ++retval; *sign = 1;
- }
- }
- return retval;
-}
-
-static
-char *__pformat_fcvt( long double x, int precision, int *dp, int *sign )
-{
- /* Define in terms of `fcvt()'...
- */
- char *retval = fcvt( (double)(x), precision, dp, sign );
- if( isinf( x ) || isnan( x ) )
- {
- /* emulating `__gdtoa()' reporting for infinities and NaN.
- */
- *dp = PFORMAT_INFNAN;
- if( *retval == '-' )
- {
- /* Need to force the `sign' flag, (particularly for NaN).
- */
- ++retval; *sign = 1;
- }
- }
- return retval;
-}
-
-/* No memory pool clean up needed, for these emulated cases...
- */
-#define __pformat_ecvt_release( value ) /* nothing to be done */
-#define __pformat_fcvt_release( value ) /* nothing to be done */
-
-/* TODO: end of conditional to be removed. */
-#endif
-
static
void __pformat_emit_radix_point( __pformat_t *stream )
{
diff --git a/lib/std/Build.zig b/lib/std/Build.zig
index 9ad4d0a69b..f850f73395 100644
--- a/lib/std/Build.zig
+++ b/lib/std/Build.zig
@@ -872,6 +872,14 @@ pub const TestOptions = struct {
zig_lib_dir: ?LazyPath = null,
};
+/// Creates an executable containing unit tests.
+///
+/// Equivalent to running the command `zig test --test-no-exec ...`.
+///
+/// **This step does not run the unit tests**. Typically, the result of this
+/// function will be passed to `addRunArtifact`, creating a `Step.Run`. These
+/// two steps are separated because they are independently configured and
+/// cached.
pub fn addTest(b: *Build, options: TestOptions) *Step.Compile {
return Step.Compile.create(b, .{
.name = options.name,
diff --git a/lib/std/Build/Step/Run.zig b/lib/std/Build/Step/Run.zig
index b0b5602a12..cb1ed7e7dc 100644
--- a/lib/std/Build/Step/Run.zig
+++ b/lib/std/Build/Step/Run.zig
@@ -168,13 +168,32 @@ pub fn addArtifactArg(self: *Run, artifact: *Step.Compile) void {
self.argv.append(Arg{ .artifact = artifact }) catch @panic("OOM");
}
-/// This provides file path as a command line argument to the command being
-/// run, and returns a LazyPath which can be used as inputs to other APIs
+/// Provides a file path as a command line argument to the command being run.
+///
+/// Returns a `std.Build.LazyPath` which can be used as inputs to other APIs
/// throughout the build system.
+///
+/// Related:
+/// * `addPrefixedOutputFileArg` - same thing but prepends a string to the argument
+/// * `addFileArg` - for input files given to the child process
pub fn addOutputFileArg(self: *Run, basename: []const u8) std.Build.LazyPath {
return self.addPrefixedOutputFileArg("", basename);
}
+/// Provides a file path as a command line argument to the command being run.
+///
+/// For example, a prefix of "-o" and basename of "output.txt" will result in
+/// the child process seeing something like this: "-ozig-cache/.../output.txt"
+///
+/// The child process will see a single argument, regardless of whether the
+/// prefix or basename have spaces.
+///
+/// The returned `std.Build.LazyPath` can be used as inputs to other APIs
+/// throughout the build system.
+///
+/// Related:
+/// * `addOutputFileArg` - same thing but without the prefix
+/// * `addFileArg` - for input files given to the child process
pub fn addPrefixedOutputFileArg(
self: *Run,
prefix: []const u8,
@@ -197,10 +216,31 @@ pub fn addPrefixedOutputFileArg(
return .{ .generated = &output.generated_file };
}
+/// Appends an input file to the command line arguments.
+///
+/// The child process will see a file path. Modifications to this file will be
+/// detected as a cache miss in subsequent builds, causing the child process to
+/// be re-executed.
+///
+/// Related:
+/// * `addPrefixedFileArg` - same thing but prepends a string to the argument
+/// * `addOutputFileArg` - for files generated by the child process
pub fn addFileArg(self: *Run, lp: std.Build.LazyPath) void {
self.addPrefixedFileArg("", lp);
}
+/// Appends an input file to the command line arguments prepended with a string.
+///
+/// For example, a prefix of "-F" will result in the child process seeing something
+/// like this: "-Fexample.txt"
+///
+/// The child process will see a single argument, even if the prefix has
+/// spaces. Modifications to this file will be detected as a cache miss in
+/// subsequent builds, causing the child process to be re-executed.
+///
+/// Related:
+/// * `addFileArg` - same thing but without the prefix
+/// * `addOutputFileArg` - for files generated by the child process
pub fn addPrefixedFileArg(self: *Run, prefix: []const u8, lp: std.Build.LazyPath) void {
const b = self.step.owner;
diff --git a/lib/std/Random/benchmark.zig b/lib/std/Random/benchmark.zig
index f3ea468181..ad76742f22 100644
--- a/lib/std/Random/benchmark.zig
+++ b/lib/std/Random/benchmark.zig
@@ -144,7 +144,7 @@ pub fn main() !void {
i += 1;
if (i == args.len) {
usage();
- std.os.exit(1);
+ std.process.exit(1);
}
filter = args[i];
@@ -152,7 +152,7 @@ pub fn main() !void {
i += 1;
if (i == args.len) {
usage();
- std.os.exit(1);
+ std.process.exit(1);
}
const c = try std.fmt.parseUnsigned(usize, args[i], 10);
@@ -170,7 +170,7 @@ pub fn main() !void {
return;
} else {
usage();
- std.os.exit(1);
+ std.process.exit(1);
}
}
diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig
index ec1fef22bb..d1c8a24f0a 100644
--- a/lib/std/Thread.zig
+++ b/lib/std/Thread.zig
@@ -5,9 +5,11 @@
const std = @import("std.zig");
const builtin = @import("builtin");
const math = std.math;
-const os = std.os;
const assert = std.debug.assert;
const target = builtin.target;
+const native_os = builtin.os.tag;
+const posix = std.posix;
+const windows = std.os.windows;
pub const Futex = @import("Thread/Futex.zig");
pub const ResetEvent = @import("Thread/ResetEvent.zig");
@@ -18,23 +20,23 @@ pub const RwLock = @import("Thread/RwLock.zig");
pub const Pool = @import("Thread/Pool.zig");
pub const WaitGroup = @import("Thread/WaitGroup.zig");
-pub const use_pthreads = target.os.tag != .windows and target.os.tag != .wasi and builtin.link_libc;
+pub const use_pthreads = native_os != .windows and native_os != .wasi and builtin.link_libc;
const Thread = @This();
-const Impl = if (target.os.tag == .windows)
+const Impl = if (native_os == .windows)
WindowsThreadImpl
else if (use_pthreads)
PosixThreadImpl
-else if (target.os.tag == .linux)
+else if (native_os == .linux)
LinuxThreadImpl
-else if (target.os.tag == .wasi)
+else if (native_os == .wasi)
WasiThreadImpl
else
UnsupportedImpl;
impl: Impl,
-pub const max_name_len = switch (target.os.tag) {
+pub const max_name_len = switch (native_os) {
.linux => 15,
.windows => 31,
.macos, .ios, .watchos, .tvos => 63,
@@ -50,7 +52,7 @@ pub const SetNameError = error{
NameTooLong,
Unsupported,
Unexpected,
-} || os.PrctlError || os.WriteError || std.fs.File.OpenError || std.fmt.BufPrintError;
+} || posix.PrctlError || posix.WriteError || std.fs.File.OpenError || std.fmt.BufPrintError;
pub fn setName(self: Thread, name: []const u8) SetNameError!void {
if (name.len > max_name_len) return error.NameTooLong;
@@ -62,21 +64,21 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void {
break :blk name_buf[0..name.len :0];
};
- switch (target.os.tag) {
+ switch (native_os) {
.linux => if (use_pthreads) {
if (self.getHandle() == std.c.pthread_self()) {
// Set the name of the calling thread (no thread id required).
- const err = try os.prctl(.SET_NAME, .{@intFromPtr(name_with_terminator.ptr)});
- switch (@as(os.E, @enumFromInt(err))) {
+ const err = try posix.prctl(.SET_NAME, .{@intFromPtr(name_with_terminator.ptr)});
+ switch (@as(posix.E, @enumFromInt(err))) {
.SUCCESS => return,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
} else {
const err = std.c.pthread_setname_np(self.getHandle(), name_with_terminator.ptr);
switch (err) {
.SUCCESS => return,
.RANGE => unreachable,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
}
} else {
@@ -95,21 +97,21 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void {
const byte_len = math.cast(c_ushort, len * 2) orelse return error.NameTooLong;
// Note: NT allocates its own copy, no use-after-free here.
- const unicode_string = os.windows.UNICODE_STRING{
+ const unicode_string = windows.UNICODE_STRING{
.Length = byte_len,
.MaximumLength = byte_len,
.Buffer = &buf,
};
- switch (os.windows.ntdll.NtSetInformationThread(
+ switch (windows.ntdll.NtSetInformationThread(
self.getHandle(),
.ThreadNameInformation,
&unicode_string,
- @sizeOf(os.windows.UNICODE_STRING),
+ @sizeOf(windows.UNICODE_STRING),
)) {
.SUCCESS => return,
.NOT_IMPLEMENTED => return error.Unsupported,
- else => |err| return os.windows.unexpectedStatus(err),
+ else => |err| return windows.unexpectedStatus(err),
}
},
.macos, .ios, .watchos, .tvos => if (use_pthreads) {
@@ -119,7 +121,7 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void {
const err = std.c.pthread_setname_np(name_with_terminator.ptr);
switch (err) {
.SUCCESS => return,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
},
.netbsd, .solaris, .illumos => if (use_pthreads) {
@@ -129,7 +131,7 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void {
.INVAL => unreachable,
.SRCH => unreachable,
.NOMEM => unreachable,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
},
.freebsd, .openbsd => if (use_pthreads) {
@@ -148,7 +150,7 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void {
.FAULT => unreachable,
.NAMETOOLONG => unreachable, // already checked
.SRCH => unreachable,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
},
else => {},
@@ -159,7 +161,7 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void {
pub const GetNameError = error{
Unsupported,
Unexpected,
-} || os.PrctlError || os.ReadError || std.fs.File.OpenError || std.fmt.BufPrintError;
+} || posix.PrctlError || posix.ReadError || std.fs.File.OpenError || std.fmt.BufPrintError;
/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
@@ -167,21 +169,21 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
buffer_ptr[max_name_len] = 0;
var buffer: [:0]u8 = buffer_ptr;
- switch (target.os.tag) {
+ switch (native_os) {
.linux => if (use_pthreads) {
if (self.getHandle() == std.c.pthread_self()) {
// Get the name of the calling thread (no thread id required).
- const err = try os.prctl(.GET_NAME, .{@intFromPtr(buffer.ptr)});
- switch (@as(os.E, @enumFromInt(err))) {
+ const err = try posix.prctl(.GET_NAME, .{@intFromPtr(buffer.ptr)});
+ switch (@as(posix.E, @enumFromInt(err))) {
.SUCCESS => return std.mem.sliceTo(buffer, 0),
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
} else {
const err = std.c.pthread_getname_np(self.getHandle(), buffer.ptr, max_name_len + 1);
switch (err) {
.SUCCESS => return std.mem.sliceTo(buffer, 0),
.RANGE => unreachable,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
}
} else {
@@ -196,10 +198,10 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
return if (data_len >= 1) buffer[0 .. data_len - 1] else null;
},
.windows => {
- const buf_capacity = @sizeOf(os.windows.UNICODE_STRING) + (@sizeOf(u16) * max_name_len);
- var buf: [buf_capacity]u8 align(@alignOf(os.windows.UNICODE_STRING)) = undefined;
+ const buf_capacity = @sizeOf(windows.UNICODE_STRING) + (@sizeOf(u16) * max_name_len);
+ var buf: [buf_capacity]u8 align(@alignOf(windows.UNICODE_STRING)) = undefined;
- switch (os.windows.ntdll.NtQueryInformationThread(
+ switch (windows.ntdll.NtQueryInformationThread(
self.getHandle(),
.ThreadNameInformation,
&buf,
@@ -207,12 +209,12 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
null,
)) {
.SUCCESS => {
- const string = @as(*const os.windows.UNICODE_STRING, @ptrCast(&buf));
+ const string = @as(*const windows.UNICODE_STRING, @ptrCast(&buf));
const len = std.unicode.wtf16LeToWtf8(buffer, string.Buffer.?[0 .. string.Length / 2]);
return if (len > 0) buffer[0..len] else null;
},
.NOT_IMPLEMENTED => return error.Unsupported,
- else => |err| return os.windows.unexpectedStatus(err),
+ else => |err| return windows.unexpectedStatus(err),
}
},
.macos, .ios, .watchos, .tvos => if (use_pthreads) {
@@ -220,7 +222,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
switch (err) {
.SUCCESS => return std.mem.sliceTo(buffer, 0),
.SRCH => unreachable,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
},
.netbsd, .solaris, .illumos => if (use_pthreads) {
@@ -229,7 +231,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
.SUCCESS => return std.mem.sliceTo(buffer, 0),
.INVAL => unreachable,
.SRCH => unreachable,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
},
.freebsd, .openbsd => if (use_pthreads) {
@@ -246,7 +248,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
.INVAL => unreachable,
.FAULT => unreachable,
.SRCH => unreachable,
- else => |e| return os.unexpectedErrno(e),
+ else => |e| return posix.unexpectedErrno(e),
}
},
else => {},
@@ -255,7 +257,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
}
/// Represents an ID per thread guaranteed to be unique only within a process.
-pub const Id = switch (target.os.tag) {
+pub const Id = switch (native_os) {
.linux,
.dragonfly,
.netbsd,
@@ -265,7 +267,7 @@ pub const Id = switch (target.os.tag) {
.wasi,
=> u32,
.macos, .ios, .watchos, .tvos => u64,
- .windows => os.windows.DWORD,
+ .windows => windows.DWORD,
else => usize,
};
@@ -368,13 +370,13 @@ pub const YieldError = error{
/// Yields the current thread potentially allowing other threads to run.
pub fn yield() YieldError!void {
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
// The return value has to do with how many other threads there are; it is not
// an error condition on Windows.
- _ = os.windows.kernel32.SwitchToThread();
+ _ = windows.kernel32.SwitchToThread();
return;
}
- switch (os.errno(os.system.sched_yield())) {
+ switch (posix.errno(posix.system.sched_yield())) {
.SUCCESS => return,
.NOSYS => return error.SystemCannotYield,
else => return error.SystemCannotYield,
@@ -390,7 +392,7 @@ const Completion = std.atomic.Value(enum(u8) {
/// Used by the Thread implementations to call the spawned function with the arguments.
fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
- WindowsThreadImpl => std.os.windows.DWORD,
+ WindowsThreadImpl => windows.DWORD,
LinuxThreadImpl => u8,
PosixThreadImpl => ?*anyopaque,
else => unreachable,
@@ -470,13 +472,11 @@ const UnsupportedImpl = struct {
fn unsupported(unused: anytype) noreturn {
_ = unused;
- @compileError("Unsupported operating system " ++ @tagName(target.os.tag));
+ @compileError("Unsupported operating system " ++ @tagName(native_os));
}
};
const WindowsThreadImpl = struct {
- const windows = os.windows;
-
pub const ThreadHandle = windows.HANDLE;
fn getCurrentId() windows.DWORD {
@@ -584,7 +584,7 @@ const PosixThreadImpl = struct {
pub const ThreadHandle = c.pthread_t;
fn getCurrentId() Id {
- switch (target.os.tag) {
+ switch (native_os) {
.linux => {
return LinuxThreadImpl.getCurrentId();
},
@@ -616,15 +616,15 @@ const PosixThreadImpl = struct {
}
fn getCpuCount() !usize {
- switch (target.os.tag) {
+ switch (native_os) {
.linux => {
return LinuxThreadImpl.getCpuCount();
},
.openbsd => {
var count: c_int = undefined;
var count_size: usize = @sizeOf(c_int);
- const mib = [_]c_int{ os.CTL.HW, os.system.HW.NCPUONLINE };
- os.sysctl(&mib, &count, &count_size, null, 0) catch |err| switch (err) {
+ const mib = [_]c_int{ std.c.CTL.HW, std.c.HW.NCPUONLINE };
+ posix.sysctl(&mib, &count, &count_size, null, 0) catch |err| switch (err) {
error.NameTooLong, error.UnknownName => unreachable,
else => |e| return e,
};
@@ -634,25 +634,25 @@ const PosixThreadImpl = struct {
// The "proper" way to get the cpu count would be to query
// /dev/kstat via ioctls, and traverse a linked list for each
// cpu.
- const rc = c.sysconf(os._SC.NPROCESSORS_ONLN);
- return switch (os.errno(rc)) {
+ const rc = c.sysconf(std.c._SC.NPROCESSORS_ONLN);
+ return switch (posix.errno(rc)) {
.SUCCESS => @as(usize, @intCast(rc)),
- else => |err| os.unexpectedErrno(err),
+ else => |err| posix.unexpectedErrno(err),
};
},
.haiku => {
- var system_info: os.system.system_info = undefined;
- const rc = os.system.get_system_info(&system_info); // always returns B_OK
- return switch (os.errno(rc)) {
+ var system_info: std.c.system_info = undefined;
+ const rc = std.c.get_system_info(&system_info); // always returns B_OK
+ return switch (posix.errno(rc)) {
.SUCCESS => @as(usize, @intCast(system_info.cpu_count)),
- else => |err| os.unexpectedErrno(err),
+ else => |err| posix.unexpectedErrno(err),
};
},
else => {
var count: c_int = undefined;
var count_len: usize = @sizeOf(c_int);
const name = if (comptime target.isDarwin()) "hw.logicalcpu" else "hw.ncpu";
- os.sysctlbynameZ(name, &count, &count_len, null, 0) catch |err| switch (err) {
+ posix.sysctlbynameZ(name, &count, &count_len, null, 0) catch |err| switch (err) {
error.NameTooLong, error.UnknownName => unreachable,
else => |e| return e,
};
@@ -699,7 +699,7 @@ const PosixThreadImpl = struct {
.AGAIN => return error.SystemResources,
.PERM => unreachable,
.INVAL => unreachable,
- else => |err| return os.unexpectedErrno(err),
+ else => |err| return posix.unexpectedErrno(err),
}
}
@@ -1040,7 +1040,7 @@ const WasiThreadImpl = struct {
};
const LinuxThreadImpl = struct {
- const linux = os.linux;
+ const linux = std.os.linux;
pub const ThreadHandle = i32;
@@ -1055,9 +1055,9 @@ const LinuxThreadImpl = struct {
}
fn getCpuCount() !usize {
- const cpu_set = try os.sched_getaffinity(0);
+ const cpu_set = try posix.sched_getaffinity(0);
// TODO: should not need this usize cast
- return @as(usize, os.CPU_COUNT(cpu_set));
+ return @as(usize, posix.CPU_COUNT(cpu_set));
}
thread: *ThreadCompletion,
@@ -1255,10 +1255,10 @@ const LinuxThreadImpl = struct {
// map all memory needed without read/write permissions
// to avoid committing the whole region right away
// anonymous mapping ensures file descriptor limits are not exceeded
- const mapped = os.mmap(
+ const mapped = posix.mmap(
null,
map_bytes,
- os.PROT.NONE,
+ posix.PROT.NONE,
.{ .TYPE = .PRIVATE, .ANONYMOUS = true },
-1,
0,
@@ -1271,24 +1271,24 @@ const LinuxThreadImpl = struct {
else => |e| return e,
};
assert(mapped.len >= map_bytes);
- errdefer os.munmap(mapped);
+ errdefer posix.munmap(mapped);
// map everything but the guard page as read/write
- os.mprotect(
+ posix.mprotect(
@alignCast(mapped[guard_offset..]),
- os.PROT.READ | os.PROT.WRITE,
+ posix.PROT.READ | posix.PROT.WRITE,
) catch |err| switch (err) {
error.AccessDenied => unreachable,
else => |e| return e,
};
// Prepare the TLS segment and prepare a user_desc struct when needed on x86
- var tls_ptr = os.linux.tls.prepareTLS(mapped[tls_offset..]);
- var user_desc: if (target.cpu.arch == .x86) os.linux.user_desc else void = undefined;
+ var tls_ptr = linux.tls.prepareTLS(mapped[tls_offset..]);
+ var user_desc: if (target.cpu.arch == .x86) linux.user_desc else void = undefined;
if (target.cpu.arch == .x86) {
defer tls_ptr = @intFromPtr(&user_desc);
user_desc = .{
- .entry_number = os.linux.tls.tls_image.gdt_entry_number,
+ .entry_number = linux.tls.tls_image.gdt_entry_number,
.base_addr = tls_ptr,
.limit = 0xfffff,
.flags = .{
@@ -1313,7 +1313,7 @@ const LinuxThreadImpl = struct {
linux.CLONE.PARENT_SETTID | linux.CLONE.CHILD_CLEARTID |
linux.CLONE.SIGHAND | linux.CLONE.SYSVSEM | linux.CLONE.SETTLS;
- switch (linux.getErrno(linux.clone(
+ switch (linux.E.init(linux.clone(
Instance.entryFn,
@intFromPtr(&mapped[stack_offset]),
flags,
@@ -1329,7 +1329,7 @@ const LinuxThreadImpl = struct {
.NOSPC => unreachable,
.PERM => unreachable,
.USERS => unreachable,
- else => |err| return os.unexpectedErrno(err),
+ else => |err| return posix.unexpectedErrno(err),
}
}
@@ -1346,7 +1346,7 @@ const LinuxThreadImpl = struct {
}
fn join(self: Impl) void {
- defer os.munmap(self.thread.mapped);
+ defer posix.munmap(self.thread.mapped);
var spin: u8 = 10;
while (true) {
@@ -1361,7 +1361,7 @@ const LinuxThreadImpl = struct {
continue;
}
- switch (linux.getErrno(linux.futex_wait(
+ switch (linux.E.init(linux.futex_wait(
&self.thread.child_tid.raw,
linux.FUTEX.WAIT,
tid,
@@ -1410,7 +1410,7 @@ test "setName, getName" {
// Wait for the main thread to have set the thread field in the context.
ctx.start_wait_event.wait();
- switch (target.os.tag) {
+ switch (native_os) {
.windows => testThreadName(&ctx.thread) catch |err| switch (err) {
error.Unsupported => return error.SkipZigTest,
else => return err,
@@ -1433,7 +1433,7 @@ test "setName, getName" {
context.start_wait_event.set();
context.test_done_event.wait();
- switch (target.os.tag) {
+ switch (native_os) {
.macos, .ios, .watchos, .tvos => {
const res = thread.setName("foobar");
try std.testing.expectError(error.Unsupported, res);
diff --git a/lib/std/Thread/Futex.zig b/lib/std/Thread/Futex.zig
index 764d3f13e1..39afe249d1 100644
--- a/lib/std/Thread/Futex.zig
+++ b/lib/std/Thread/Futex.zig
@@ -1,13 +1,20 @@
-//! Futex is a mechanism used to block (`wait`) and unblock (`wake`) threads using a 32bit memory address as hints.
-//! Blocking a thread is acknowledged only if the 32bit memory address is equal to a given value.
-//! This check helps avoid block/unblock deadlocks which occur if a `wake()` happens before a `wait()`.
-//! Using Futex, other Thread synchronization primitives can be built which efficiently wait for cross-thread events or signals.
+//! A mechanism used to block (`wait`) and unblock (`wake`) threads using a
+//! 32bit memory address as hints.
+//!
+//! Blocking a thread is acknowledged only if the 32bit memory address is equal
+//! to a given value. This check helps avoid block/unblock deadlocks which
+//! occur if a `wake()` happens before a `wait()`.
+//!
+//! Using Futex, other Thread synchronization primitives can be built which
+//! efficiently wait for cross-thread events or signals.
const std = @import("../std.zig");
const builtin = @import("builtin");
const Futex = @This();
+const windows = std.os.windows;
+const linux = std.os.linux;
+const c = std.c;
-const os = std.os;
const assert = std.debug.assert;
const testing = std.testing;
const atomic = std.atomic;
@@ -124,18 +131,18 @@ const SingleThreadedImpl = struct {
// as it's generally already a linked target and is autoloaded into all processes anyway.
const WindowsImpl = struct {
fn wait(ptr: *const atomic.Value(u32), expect: u32, timeout: ?u64) error{Timeout}!void {
- var timeout_value: os.windows.LARGE_INTEGER = undefined;
- var timeout_ptr: ?*const os.windows.LARGE_INTEGER = null;
+ var timeout_value: windows.LARGE_INTEGER = undefined;
+ var timeout_ptr: ?*const windows.LARGE_INTEGER = null;
// NTDLL functions work with time in units of 100 nanoseconds.
// Positive values are absolute deadlines while negative values are relative durations.
if (timeout) |delay| {
- timeout_value = @as(os.windows.LARGE_INTEGER, @intCast(delay / 100));
+ timeout_value = @as(windows.LARGE_INTEGER, @intCast(delay / 100));
timeout_value = -timeout_value;
timeout_ptr = &timeout_value;
}
- const rc = os.windows.ntdll.RtlWaitOnAddress(
+ const rc = windows.ntdll.RtlWaitOnAddress(
ptr,
&expect,
@sizeOf(@TypeOf(expect)),
@@ -157,8 +164,8 @@ const WindowsImpl = struct {
assert(max_waiters != 0);
switch (max_waiters) {
- 1 => os.windows.ntdll.RtlWakeAddressSingle(address),
- else => os.windows.ntdll.RtlWakeAddressAll(address),
+ 1 => windows.ntdll.RtlWakeAddressSingle(address),
+ else => windows.ntdll.RtlWakeAddressAll(address),
}
}
};
@@ -189,10 +196,10 @@ const DarwinImpl = struct {
var timeout_overflowed = false;
const addr: *const anyopaque = ptr;
- const flags = os.darwin.UL_COMPARE_AND_WAIT | os.darwin.ULF_NO_ERRNO;
+ const flags = c.UL_COMPARE_AND_WAIT | c.ULF_NO_ERRNO;
const status = blk: {
if (supports_ulock_wait2) {
- break :blk os.darwin.__ulock_wait2(flags, addr, expect, timeout_ns, 0);
+ break :blk c.__ulock_wait2(flags, addr, expect, timeout_ns, 0);
}
const timeout_us = std.math.cast(u32, timeout_ns / std.time.ns_per_us) orelse overflow: {
@@ -200,11 +207,11 @@ const DarwinImpl = struct {
break :overflow std.math.maxInt(u32);
};
- break :blk os.darwin.__ulock_wait(flags, addr, expect, timeout_us);
+ break :blk c.__ulock_wait(flags, addr, expect, timeout_us);
};
if (status >= 0) return;
- switch (@as(std.os.E, @enumFromInt(-status))) {
+ switch (@as(c.E, @enumFromInt(-status))) {
// Wait was interrupted by the OS or other spurious signalling.
.INTR => {},
// Address of the futex was paged out. This is unlikely, but possible in theory, and
@@ -221,17 +228,17 @@ const DarwinImpl = struct {
}
fn wake(ptr: *const atomic.Value(u32), max_waiters: u32) void {
- var flags: u32 = os.darwin.UL_COMPARE_AND_WAIT | os.darwin.ULF_NO_ERRNO;
+ var flags: u32 = c.UL_COMPARE_AND_WAIT | c.ULF_NO_ERRNO;
if (max_waiters > 1) {
- flags |= os.darwin.ULF_WAKE_ALL;
+ flags |= c.ULF_WAKE_ALL;
}
while (true) {
const addr: *const anyopaque = ptr;
- const status = os.darwin.__ulock_wake(flags, addr, 0);
+ const status = c.__ulock_wake(flags, addr, 0);
if (status >= 0) return;
- switch (@as(std.os.E, @enumFromInt(-status))) {
+ switch (@as(c.E, @enumFromInt(-status))) {
.INTR => continue, // spurious wake()
.FAULT => unreachable, // __ulock_wake doesn't generate EFAULT according to darwin pthread_cond_t
.NOENT => return, // nothing was woken up
@@ -245,20 +252,20 @@ const DarwinImpl = struct {
// https://man7.org/linux/man-pages/man2/futex.2.html
const LinuxImpl = struct {
fn wait(ptr: *const atomic.Value(u32), expect: u32, timeout: ?u64) error{Timeout}!void {
- var ts: os.timespec = undefined;
+ var ts: linux.timespec = undefined;
if (timeout) |timeout_ns| {
ts.tv_sec = @as(@TypeOf(ts.tv_sec), @intCast(timeout_ns / std.time.ns_per_s));
ts.tv_nsec = @as(@TypeOf(ts.tv_nsec), @intCast(timeout_ns % std.time.ns_per_s));
}
- const rc = os.linux.futex_wait(
+ const rc = linux.futex_wait(
@as(*const i32, @ptrCast(&ptr.raw)),
- os.linux.FUTEX.PRIVATE_FLAG | os.linux.FUTEX.WAIT,
+ linux.FUTEX.PRIVATE_FLAG | linux.FUTEX.WAIT,
@as(i32, @bitCast(expect)),
if (timeout != null) &ts else null,
);
- switch (os.linux.getErrno(rc)) {
+ switch (linux.E.init(rc)) {
.SUCCESS => {}, // notified by `wake()`
.INTR => {}, // spurious wakeup
.AGAIN => {}, // ptr.* != expect
@@ -273,13 +280,13 @@ const LinuxImpl = struct {
}
fn wake(ptr: *const atomic.Value(u32), max_waiters: u32) void {
- const rc = os.linux.futex_wake(
+ const rc = linux.futex_wake(
@as(*const i32, @ptrCast(&ptr.raw)),
- os.linux.FUTEX.PRIVATE_FLAG | os.linux.FUTEX.WAKE,
+ linux.FUTEX.PRIVATE_FLAG | linux.FUTEX.WAKE,
std.math.cast(i32, max_waiters) orelse std.math.maxInt(i32),
);
- switch (os.linux.getErrno(rc)) {
+ switch (linux.E.init(rc)) {
.SUCCESS => {}, // successful wake up
.INVAL => {}, // invalid futex_wait() on ptr done elsewhere
.FAULT => {}, // pointer became invalid while doing the wake
@@ -292,28 +299,28 @@ const LinuxImpl = struct {
const FreebsdImpl = struct {
fn wait(ptr: *const atomic.Value(u32), expect: u32, timeout: ?u64) error{Timeout}!void {
var tm_size: usize = 0;
- var tm: os.freebsd._umtx_time = undefined;
- var tm_ptr: ?*const os.freebsd._umtx_time = null;
+ var tm: c._umtx_time = undefined;
+ var tm_ptr: ?*const c._umtx_time = null;
if (timeout) |timeout_ns| {
tm_ptr = &tm;
tm_size = @sizeOf(@TypeOf(tm));
tm._flags = 0; // use relative time not UMTX_ABSTIME
- tm._clockid = os.CLOCK.MONOTONIC;
+ tm._clockid = c.CLOCK.MONOTONIC;
tm._timeout.tv_sec = @as(@TypeOf(tm._timeout.tv_sec), @intCast(timeout_ns / std.time.ns_per_s));
tm._timeout.tv_nsec = @as(@TypeOf(tm._timeout.tv_nsec), @intCast(timeout_ns % std.time.ns_per_s));
}
- const rc = os.freebsd._umtx_op(
+ const rc = c._umtx_op(
@intFromPtr(&ptr.raw),
- @intFromEnum(os.freebsd.UMTX_OP.WAIT_UINT_PRIVATE),
+ @intFromEnum(c.UMTX_OP.WAIT_UINT_PRIVATE),
@as(c_ulong, expect),
tm_size,
@intFromPtr(tm_ptr),
);
- switch (os.errno(rc)) {
+ switch (std.posix.errno(rc)) {
.SUCCESS => {},
.FAULT => unreachable, // one of the args points to invalid memory
.INVAL => unreachable, // arguments should be correct
@@ -327,15 +334,15 @@ const FreebsdImpl = struct {
}
fn wake(ptr: *const atomic.Value(u32), max_waiters: u32) void {
- const rc = os.freebsd._umtx_op(
+ const rc = c._umtx_op(
@intFromPtr(&ptr.raw),
- @intFromEnum(os.freebsd.UMTX_OP.WAKE_PRIVATE),
+ @intFromEnum(c.UMTX_OP.WAKE_PRIVATE),
@as(c_ulong, max_waiters),
0, // there is no timeout struct
0, // there is no timeout struct pointer
);
- switch (os.errno(rc)) {
+ switch (std.posix.errno(rc)) {
.SUCCESS => {},
.FAULT => {}, // it's ok if the ptr doesn't point to valid memory
.INVAL => unreachable, // arguments should be correct
@@ -347,21 +354,21 @@ const FreebsdImpl = struct {
// https://man.openbsd.org/futex.2
const OpenbsdImpl = struct {
fn wait(ptr: *const atomic.Value(u32), expect: u32, timeout: ?u64) error{Timeout}!void {
- var ts: os.timespec = undefined;
+ var ts: c.timespec = undefined;
if (timeout) |timeout_ns| {
ts.tv_sec = @as(@TypeOf(ts.tv_sec), @intCast(timeout_ns / std.time.ns_per_s));
ts.tv_nsec = @as(@TypeOf(ts.tv_nsec), @intCast(timeout_ns % std.time.ns_per_s));
}
- const rc = os.openbsd.futex(
+ const rc = c.futex(
@as(*const volatile u32, @ptrCast(&ptr.raw)),
- os.openbsd.FUTEX_WAIT | os.openbsd.FUTEX_PRIVATE_FLAG,
+ c.FUTEX_WAIT | c.FUTEX_PRIVATE_FLAG,
@as(c_int, @bitCast(expect)),
if (timeout != null) &ts else null,
null, // FUTEX_WAIT takes no requeue address
);
- switch (os.errno(rc)) {
+ switch (std.posix.errno(rc)) {
.SUCCESS => {}, // woken up by wake
.NOSYS => unreachable, // the futex operation shouldn't be invalid
.FAULT => unreachable, // ptr was invalid
@@ -378,9 +385,9 @@ const OpenbsdImpl = struct {
}
fn wake(ptr: *const atomic.Value(u32), max_waiters: u32) void {
- const rc = os.openbsd.futex(
+ const rc = c.futex(
@as(*const volatile u32, @ptrCast(&ptr.raw)),
- os.openbsd.FUTEX_WAKE | os.openbsd.FUTEX_PRIVATE_FLAG,
+ c.FUTEX_WAKE | c.FUTEX_PRIVATE_FLAG,
std.math.cast(c_int, max_waiters) orelse std.math.maxInt(c_int),
null, // FUTEX_WAKE takes no timeout ptr
null, // FUTEX_WAKE takes no requeue address
@@ -415,9 +422,9 @@ const DragonflyImpl = struct {
const value = @as(c_int, @bitCast(expect));
const addr = @as(*const volatile c_int, @ptrCast(&ptr.raw));
- const rc = os.dragonfly.umtx_sleep(addr, value, timeout_us);
+ const rc = c.umtx_sleep(addr, value, timeout_us);
- switch (os.errno(rc)) {
+ switch (std.posix.errno(rc)) {
.SUCCESS => {},
.BUSY => {}, // ptr != expect
.AGAIN => { // maybe timed out, or paged out, or hit 2s kernel refresh
@@ -444,7 +451,7 @@ const DragonflyImpl = struct {
// > umtx_wakeup() will generally return 0 unless the address is bad.
// We are fine with the address being bad (e.g. for Semaphore.post() where Semaphore.wait() frees the Semaphore)
const addr = @as(*const volatile c_int, @ptrCast(&ptr.raw));
- _ = os.dragonfly.umtx_wakeup(addr, to_wake);
+ _ = c.umtx_wakeup(addr, to_wake);
}
};
@@ -496,8 +503,8 @@ const WasmImpl = struct {
/// https://go.dev/src/runtime/sema.go
const PosixImpl = struct {
const Event = struct {
- cond: std.c.pthread_cond_t,
- mutex: std.c.pthread_mutex_t,
+ cond: c.pthread_cond_t,
+ mutex: c.pthread_mutex_t,
state: enum { empty, waiting, notified },
fn init(self: *Event) void {
@@ -509,18 +516,18 @@ const PosixImpl = struct {
fn deinit(self: *Event) void {
// Some platforms reportedly give EINVAL for statically initialized pthread types.
- const rc = std.c.pthread_cond_destroy(&self.cond);
+ const rc = c.pthread_cond_destroy(&self.cond);
assert(rc == .SUCCESS or rc == .INVAL);
- const rm = std.c.pthread_mutex_destroy(&self.mutex);
+ const rm = c.pthread_mutex_destroy(&self.mutex);
assert(rm == .SUCCESS or rm == .INVAL);
self.* = undefined;
}
fn wait(self: *Event, timeout: ?u64) error{Timeout}!void {
- assert(std.c.pthread_mutex_lock(&self.mutex) == .SUCCESS);
- defer assert(std.c.pthread_mutex_unlock(&self.mutex) == .SUCCESS);
+ assert(c.pthread_mutex_lock(&self.mutex) == .SUCCESS);
+ defer assert(c.pthread_mutex_unlock(&self.mutex) == .SUCCESS);
// Early return if the event was already set.
if (self.state == .notified) {
@@ -530,9 +537,9 @@ const PosixImpl = struct {
// Compute the absolute timeout if one was specified.
// POSIX requires that REALTIME is used by default for the pthread timedwait functions.
// This can be changed with pthread_condattr_setclock, but it's an extension and may not be available everywhere.
- var ts: os.timespec = undefined;
+ var ts: c.timespec = undefined;
if (timeout) |timeout_ns| {
- os.clock_gettime(os.CLOCK.REALTIME, &ts) catch unreachable;
+ std.posix.clock_gettime(c.CLOCK.REALTIME, &ts) catch unreachable;
ts.tv_sec +|= @as(@TypeOf(ts.tv_sec), @intCast(timeout_ns / std.time.ns_per_s));
ts.tv_nsec += @as(@TypeOf(ts.tv_nsec), @intCast(timeout_ns % std.time.ns_per_s));
@@ -549,8 +556,8 @@ const PosixImpl = struct {
while (true) {
// Block using either pthread_cond_wait or pthread_cond_timewait if there's an absolute timeout.
const rc = blk: {
- if (timeout == null) break :blk std.c.pthread_cond_wait(&self.cond, &self.mutex);
- break :blk std.c.pthread_cond_timedwait(&self.cond, &self.mutex, &ts);
+ if (timeout == null) break :blk c.pthread_cond_wait(&self.cond, &self.mutex);
+ break :blk c.pthread_cond_timedwait(&self.cond, &self.mutex, &ts);
};
// After waking up, check if the event was set.
@@ -574,8 +581,8 @@ const PosixImpl = struct {
}
fn set(self: *Event) void {
- assert(std.c.pthread_mutex_lock(&self.mutex) == .SUCCESS);
- defer assert(std.c.pthread_mutex_unlock(&self.mutex) == .SUCCESS);
+ assert(c.pthread_mutex_lock(&self.mutex) == .SUCCESS);
+ defer assert(c.pthread_mutex_unlock(&self.mutex) == .SUCCESS);
// Make sure that multiple calls to set() were not done on the same Event.
const old_state = self.state;
@@ -586,7 +593,7 @@ const PosixImpl = struct {
// the condition variable once it observes the new state, potentially causing a UAF if done unlocked.
self.state = .notified;
if (old_state == .waiting) {
- assert(std.c.pthread_cond_signal(&self.cond) == .SUCCESS);
+ assert(c.pthread_cond_signal(&self.cond) == .SUCCESS);
}
}
};
@@ -732,7 +739,7 @@ const PosixImpl = struct {
};
const Bucket = struct {
- mutex: std.c.pthread_mutex_t align(atomic.cache_line) = .{},
+ mutex: c.pthread_mutex_t align(atomic.cache_line) = .{},
pending: atomic.Value(usize) = atomic.Value(usize).init(0),
treap: Treap = .{},
@@ -798,8 +805,8 @@ const PosixImpl = struct {
var waiter: Waiter = undefined;
{
- assert(std.c.pthread_mutex_lock(&bucket.mutex) == .SUCCESS);
- defer assert(std.c.pthread_mutex_unlock(&bucket.mutex) == .SUCCESS);
+ assert(c.pthread_mutex_lock(&bucket.mutex) == .SUCCESS);
+ defer assert(c.pthread_mutex_unlock(&bucket.mutex) == .SUCCESS);
cancelled = ptr.load(.monotonic) != expect;
if (cancelled) {
@@ -821,8 +828,8 @@ const PosixImpl = struct {
// If we return early without waiting, the waiter on the stack would be invalidated and the wake() thread risks a UAF.
defer if (!cancelled) waiter.event.wait(null) catch unreachable;
- assert(std.c.pthread_mutex_lock(&bucket.mutex) == .SUCCESS);
- defer assert(std.c.pthread_mutex_unlock(&bucket.mutex) == .SUCCESS);
+ assert(c.pthread_mutex_lock(&bucket.mutex) == .SUCCESS);
+ defer assert(c.pthread_mutex_unlock(&bucket.mutex) == .SUCCESS);
cancelled = WaitQueue.tryRemove(&bucket.treap, address, &waiter);
if (cancelled) {
@@ -871,8 +878,8 @@ const PosixImpl = struct {
}
};
- assert(std.c.pthread_mutex_lock(&bucket.mutex) == .SUCCESS);
- defer assert(std.c.pthread_mutex_unlock(&bucket.mutex) == .SUCCESS);
+ assert(c.pthread_mutex_lock(&bucket.mutex) == .SUCCESS);
+ defer assert(c.pthread_mutex_unlock(&bucket.mutex) == .SUCCESS);
// Another pending check again to avoid the WaitQueue lookup if not necessary.
if (bucket.pending.load(.monotonic) > 0) {
diff --git a/lib/std/Thread/Mutex.zig b/lib/std/Thread/Mutex.zig
index 67472ffd9c..b6d3d6fb84 100644
--- a/lib/std/Thread/Mutex.zig
+++ b/lib/std/Thread/Mutex.zig
@@ -23,7 +23,6 @@ const std = @import("../std.zig");
const builtin = @import("builtin");
const Mutex = @This();
-const os = std.os;
const assert = std.debug.assert;
const testing = std.testing;
const Thread = std.Thread;
@@ -117,36 +116,40 @@ const SingleThreadedImpl = struct {
// SRWLOCK on windows is almost always faster than Futex solution.
// It also implements an efficient Condition with requeue support for us.
const WindowsImpl = struct {
- srwlock: os.windows.SRWLOCK = .{},
+ srwlock: windows.SRWLOCK = .{},
fn tryLock(self: *@This()) bool {
- return os.windows.kernel32.TryAcquireSRWLockExclusive(&self.srwlock) != os.windows.FALSE;
+ return windows.kernel32.TryAcquireSRWLockExclusive(&self.srwlock) != windows.FALSE;
}
fn lock(self: *@This()) void {
- os.windows.kernel32.AcquireSRWLockExclusive(&self.srwlock);
+ windows.kernel32.AcquireSRWLockExclusive(&self.srwlock);
}
fn unlock(self: *@This()) void {
- os.windows.kernel32.ReleaseSRWLockExclusive(&self.srwlock);
+ windows.kernel32.ReleaseSRWLockExclusive(&self.srwlock);
}
+
+ const windows = std.os.windows;
};
// os_unfair_lock on darwin supports priority inheritance and is generally faster than Futex solutions.
const DarwinImpl = struct {
- oul: os.darwin.os_unfair_lock = .{},
+ oul: c.os_unfair_lock = .{},
fn tryLock(self: *@This()) bool {
- return os.darwin.os_unfair_lock_trylock(&self.oul);
+ return c.os_unfair_lock_trylock(&self.oul);
}
fn lock(self: *@This()) void {
- os.darwin.os_unfair_lock_lock(&self.oul);
+ c.os_unfair_lock_lock(&self.oul);
}
fn unlock(self: *@This()) void {
- os.darwin.os_unfair_lock_unlock(&self.oul);
+ c.os_unfair_lock_unlock(&self.oul);
}
+
+ const c = std.c;
};
const FutexImpl = struct {
diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig
index 0238d35c7d..6f6e0c97fc 100644
--- a/lib/std/builtin.zig
+++ b/lib/std/builtin.zig
@@ -782,7 +782,7 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace, ret_addr
},
.wasi => {
std.debug.print("{s}", .{msg});
- std.os.abort();
+ std.posix.abort();
},
.uefi => {
const uefi = std.os.uefi;
@@ -830,9 +830,9 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace, ret_addr
}
// Didn't have boot_services, just fallback to whatever.
- std.os.abort();
+ std.posix.abort();
},
- .cuda, .amdhsa => std.os.abort(),
+ .cuda, .amdhsa => std.posix.abort(),
.plan9 => {
var status: [std.os.plan9.ERRMAX]u8 = undefined;
const len = @min(msg.len, status.len - 1);
diff --git a/lib/std/c.zig b/lib/std/c.zig
index 7f8f46ce4d..a7468efd7d 100644
--- a/lib/std/c.zig
+++ b/lib/std/c.zig
@@ -2,12 +2,13 @@ const std = @import("std");
const builtin = @import("builtin");
const c = @This();
const page_size = std.mem.page_size;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const wasi = @import("c/wasi.zig");
const native_abi = builtin.abi;
const native_arch = builtin.cpu.arch;
const native_os = builtin.os.tag;
+const linux = std.os.linux;
/// If not linking libc, returns false.
/// If linking musl libc, returns true.
@@ -208,7 +209,7 @@ pub const pthread_rwlock_t = switch (native_os) {
};
pub const AT = switch (native_os) {
- .linux => std.os.linux.AT,
+ .linux => linux.AT,
.windows => struct {
/// Remove directory instead of unlinking file
pub const REMOVEDIR = 0x200;
@@ -326,9 +327,9 @@ pub const AT = switch (native_os) {
};
pub const O = switch (native_os) {
- .linux => std.os.linux.O,
+ .linux => linux.O,
.emscripten => packed struct(u32) {
- ACCMODE: std.os.ACCMODE = .RDONLY,
+ ACCMODE: std.posix.ACCMODE = .RDONLY,
_2: u4 = 0,
CREAT: bool = false,
EXCL: bool = false,
@@ -369,7 +370,7 @@ pub const O = switch (native_os) {
_: u3 = 0,
},
.solaris, .illumos => packed struct(u32) {
- ACCMODE: std.os.ACCMODE = .RDONLY,
+ ACCMODE: std.posix.ACCMODE = .RDONLY,
NDELAY: bool = false,
APPEND: bool = false,
SYNC: bool = false,
@@ -396,7 +397,7 @@ pub const O = switch (native_os) {
_: u6 = 0,
},
.netbsd => packed struct(u32) {
- ACCMODE: std.os.ACCMODE = .RDONLY,
+ ACCMODE: std.posix.ACCMODE = .RDONLY,
NONBLOCK: bool = false,
APPEND: bool = false,
SHLOCK: bool = false,
@@ -420,7 +421,7 @@ pub const O = switch (native_os) {
_: u8 = 0,
},
.openbsd => packed struct(u32) {
- ACCMODE: std.os.ACCMODE = .RDONLY,
+ ACCMODE: std.posix.ACCMODE = .RDONLY,
NONBLOCK: bool = false,
APPEND: bool = false,
SHLOCK: bool = false,
@@ -438,7 +439,7 @@ pub const O = switch (native_os) {
_: u14 = 0,
},
.haiku => packed struct(u32) {
- ACCMODE: std.os.ACCMODE = .RDONLY,
+ ACCMODE: std.posix.ACCMODE = .RDONLY,
_2: u4 = 0,
CLOEXEC: bool = false,
NONBLOCK: bool = false,
@@ -458,7 +459,7 @@ pub const O = switch (native_os) {
_: u10 = 0,
},
.macos, .ios, .tvos, .watchos => packed struct(u32) {
- ACCMODE: std.os.ACCMODE = .RDONLY,
+ ACCMODE: std.posix.ACCMODE = .RDONLY,
NONBLOCK: bool = false,
APPEND: bool = false,
SHLOCK: bool = false,
@@ -485,7 +486,7 @@ pub const O = switch (native_os) {
POPUP: bool = false,
},
.dragonfly => packed struct(u32) {
- ACCMODE: std.os.ACCMODE = .RDONLY,
+ ACCMODE: std.posix.ACCMODE = .RDONLY,
NONBLOCK: bool = false,
APPEND: bool = false,
SHLOCK: bool = false,
@@ -511,7 +512,7 @@ pub const O = switch (native_os) {
_: u4 = 0,
},
.freebsd => packed struct(u32) {
- ACCMODE: std.os.ACCMODE = .RDONLY,
+ ACCMODE: std.posix.ACCMODE = .RDONLY,
NONBLOCK: bool = false,
APPEND: bool = false,
SHLOCK: bool = false,
@@ -538,7 +539,7 @@ pub const O = switch (native_os) {
};
pub const MAP = switch (native_os) {
- .linux => std.os.linux.MAP,
+ .linux => linux.MAP,
.emscripten => packed struct(u32) {
TYPE: enum(u4) {
SHARED = 0x01,
@@ -683,7 +684,7 @@ pub const cc_t = u8;
/// Indices into the `cc` array in the `termios` struct.
pub const V = switch (native_os) {
- .linux => std.os.linux.V,
+ .linux => linux.V,
.macos, .ios, .tvos, .watchos, .netbsd, .openbsd => enum {
EOF,
EOL,
@@ -782,7 +783,7 @@ pub const V = switch (native_os) {
};
pub const NCCS = switch (native_os) {
- .linux => std.os.linux.NCCS,
+ .linux => linux.NCCS,
.macos, .ios, .tvos, .watchos, .freebsd, .kfreebsd, .netbsd, .openbsd, .dragonfly => 20,
.haiku => 11,
.solaris, .illumos => 19,
@@ -791,7 +792,7 @@ pub const NCCS = switch (native_os) {
};
pub const termios = switch (native_os) {
- .linux => std.os.linux.termios,
+ .linux => linux.termios,
.macos, .ios, .tvos, .watchos => extern struct {
iflag: tc_iflag_t,
oflag: tc_oflag_t,
@@ -841,7 +842,7 @@ pub const termios = switch (native_os) {
};
pub const tc_iflag_t = switch (native_os) {
- .linux => std.os.linux.tc_iflag_t,
+ .linux => linux.tc_iflag_t,
.macos, .ios, .tvos, .watchos => packed struct(u64) {
IGNBRK: bool = false,
BRKINT: bool = false,
@@ -951,7 +952,7 @@ pub const tc_iflag_t = switch (native_os) {
};
pub const tc_oflag_t = switch (native_os) {
- .linux => std.os.linux.tc_oflag_t,
+ .linux => linux.tc_oflag_t,
.macos, .ios, .tvos, .watchos => packed struct(u64) {
OPOST: bool = false,
ONLCR: bool = false,
@@ -1042,13 +1043,13 @@ pub const tc_oflag_t = switch (native_os) {
};
pub const CSIZE = switch (native_os) {
- .linux => std.os.linux.CSIZE,
+ .linux => linux.CSIZE,
.haiku => enum(u1) { CS7, CS8 },
else => enum(u2) { CS5, CS6, CS7, CS8 },
};
pub const tc_cflag_t = switch (native_os) {
- .linux => std.os.linux.tc_cflag_t,
+ .linux => linux.tc_cflag_t,
.macos, .ios, .tvos, .watchos => packed struct(u64) {
CIGNORE: bool = false,
_1: u5 = 0,
@@ -1184,7 +1185,7 @@ pub const tc_cflag_t = switch (native_os) {
};
pub const tc_lflag_t = switch (native_os) {
- .linux => std.os.linux.tc_lflag_t,
+ .linux => linux.tc_lflag_t,
.macos, .ios, .tvos, .watchos => packed struct(u64) {
ECHOKE: bool = false,
ECHOE: bool = false,
@@ -1310,7 +1311,7 @@ pub const tc_lflag_t = switch (native_os) {
};
pub const speed_t = switch (native_os) {
- .linux => std.os.linux.speed_t,
+ .linux => linux.speed_t,
.macos, .ios, .tvos, .watchos, .openbsd => enum(u64) {
B0 = 0,
B50 = 50,
@@ -1605,14 +1606,6 @@ pub const stat = switch (native_os) {
else => private.stat,
};
-pub fn getErrno(rc: anytype) c.E {
- if (rc == -1) {
- return @enumFromInt(c._errno().*);
- } else {
- return .SUCCESS;
- }
-}
-
pub extern "c" var environ: [*:null]?[*:0]u8;
pub extern "c" fn fopen(noalias filename: [*:0]const u8, noalias modes: [*:0]const u8) ?*FILE;
@@ -1905,10 +1898,10 @@ pub extern "c" fn if_nametoindex([*:0]const u8) c_int;
pub const getcontext = if (builtin.target.isAndroid())
@compileError("android bionic libc does not implement getcontext")
else if (native_os == .linux and builtin.target.isMusl())
- std.os.linux.getcontext
+ linux.getcontext
else
struct {
- extern fn getcontext(ucp: *std.os.ucontext_t) c_int;
+ extern fn getcontext(ucp: *std.posix.ucontext_t) c_int;
}.getcontext;
pub const max_align_t = if (native_abi == .msvc)
diff --git a/lib/std/c/darwin.zig b/lib/std/c/darwin.zig
index 8442ac9fe0..521aca507e 100644
--- a/lib/std/c/darwin.zig
+++ b/lib/std/c/darwin.zig
@@ -4,7 +4,7 @@ const assert = std.debug.assert;
const macho = std.macho;
const native_arch = builtin.target.cpu.arch;
const maxInt = std.math.maxInt;
-const iovec_const = std.os.iovec_const;
+const iovec_const = std.posix.iovec_const;
pub const aarch64 = @import("darwin/aarch64.zig");
pub const x86_64 = @import("darwin/x86_64.zig");
@@ -2826,237 +2826,12 @@ pub extern "c" fn posix_spawnp(
env: [*:null]?[*:0]const u8,
) c_int;
-pub const PosixSpawn = struct {
- const errno = std.os.errno;
- const unexpectedErrno = std.os.unexpectedErrno;
-
- pub const Error = error{
- SystemResources,
- InvalidFileDescriptor,
- NameTooLong,
- TooBig,
- PermissionDenied,
- InputOutput,
- FileSystem,
- FileNotFound,
- InvalidExe,
- NotDir,
- FileBusy,
- /// Returned when the child fails to execute either in the pre-exec() initialization step, or
- /// when exec(3) is invoked.
- ChildExecFailed,
- } || std.os.UnexpectedError;
-
- pub const Attr = struct {
- attr: posix_spawnattr_t,
-
- pub fn init() Error!Attr {
- var attr: posix_spawnattr_t = undefined;
- switch (errno(posix_spawnattr_init(&attr))) {
- .SUCCESS => return Attr{ .attr = attr },
- .NOMEM => return error.SystemResources,
- .INVAL => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn deinit(self: *Attr) void {
- defer self.* = undefined;
- switch (errno(posix_spawnattr_destroy(&self.attr))) {
- .SUCCESS => return,
- .INVAL => unreachable, // Invalid parameters.
- else => unreachable,
- }
- }
-
- pub fn get(self: Attr) Error!u16 {
- var flags: c_short = undefined;
- switch (errno(posix_spawnattr_getflags(&self.attr, &flags))) {
- .SUCCESS => return @as(u16, @bitCast(flags)),
- .INVAL => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn set(self: *Attr, flags: u16) Error!void {
- switch (errno(posix_spawnattr_setflags(&self.attr, @as(c_short, @bitCast(flags))))) {
- .SUCCESS => return,
- .INVAL => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
- };
-
- pub const Actions = struct {
- actions: posix_spawn_file_actions_t,
-
- pub fn init() Error!Actions {
- var actions: posix_spawn_file_actions_t = undefined;
- switch (errno(posix_spawn_file_actions_init(&actions))) {
- .SUCCESS => return Actions{ .actions = actions },
- .NOMEM => return error.SystemResources,
- .INVAL => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn deinit(self: *Actions) void {
- defer self.* = undefined;
- switch (errno(posix_spawn_file_actions_destroy(&self.actions))) {
- .SUCCESS => return,
- .INVAL => unreachable, // Invalid parameters.
- else => unreachable,
- }
- }
-
- pub fn open(self: *Actions, fd: fd_t, path: []const u8, flags: u32, mode: mode_t) Error!void {
- const posix_path = try std.os.toPosixPath(path);
- return self.openZ(fd, &posix_path, flags, mode);
- }
-
- pub fn openZ(self: *Actions, fd: fd_t, path: [*:0]const u8, flags: u32, mode: mode_t) Error!void {
- switch (errno(posix_spawn_file_actions_addopen(&self.actions, fd, path, @as(c_int, @bitCast(flags)), mode))) {
- .SUCCESS => return,
- .BADF => return error.InvalidFileDescriptor,
- .NOMEM => return error.SystemResources,
- .NAMETOOLONG => return error.NameTooLong,
- .INVAL => unreachable, // the value of file actions is invalid
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn close(self: *Actions, fd: fd_t) Error!void {
- switch (errno(posix_spawn_file_actions_addclose(&self.actions, fd))) {
- .SUCCESS => return,
- .BADF => return error.InvalidFileDescriptor,
- .NOMEM => return error.SystemResources,
- .INVAL => unreachable, // the value of file actions is invalid
- .NAMETOOLONG => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn dup2(self: *Actions, fd: fd_t, newfd: fd_t) Error!void {
- switch (errno(posix_spawn_file_actions_adddup2(&self.actions, fd, newfd))) {
- .SUCCESS => return,
- .BADF => return error.InvalidFileDescriptor,
- .NOMEM => return error.SystemResources,
- .INVAL => unreachable, // the value of file actions is invalid
- .NAMETOOLONG => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn inherit(self: *Actions, fd: fd_t) Error!void {
- switch (errno(posix_spawn_file_actions_addinherit_np(&self.actions, fd))) {
- .SUCCESS => return,
- .BADF => return error.InvalidFileDescriptor,
- .NOMEM => return error.SystemResources,
- .INVAL => unreachable, // the value of file actions is invalid
- .NAMETOOLONG => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn chdir(self: *Actions, path: []const u8) Error!void {
- const posix_path = try std.os.toPosixPath(path);
- return self.chdirZ(&posix_path);
- }
-
- pub fn chdirZ(self: *Actions, path: [*:0]const u8) Error!void {
- switch (errno(posix_spawn_file_actions_addchdir_np(&self.actions, path))) {
- .SUCCESS => return,
- .NOMEM => return error.SystemResources,
- .NAMETOOLONG => return error.NameTooLong,
- .BADF => unreachable,
- .INVAL => unreachable, // the value of file actions is invalid
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn fchdir(self: *Actions, fd: fd_t) Error!void {
- switch (errno(posix_spawn_file_actions_addfchdir_np(&self.actions, fd))) {
- .SUCCESS => return,
- .BADF => return error.InvalidFileDescriptor,
- .NOMEM => return error.SystemResources,
- .INVAL => unreachable, // the value of file actions is invalid
- .NAMETOOLONG => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
- };
-
- pub fn spawn(
- path: []const u8,
- actions: ?Actions,
- attr: ?Attr,
- argv: [*:null]?[*:0]const u8,
- envp: [*:null]?[*:0]const u8,
- ) Error!pid_t {
- const posix_path = try std.os.toPosixPath(path);
- return spawnZ(&posix_path, actions, attr, argv, envp);
- }
-
- pub fn spawnZ(
- path: [*:0]const u8,
- actions: ?Actions,
- attr: ?Attr,
- argv: [*:null]?[*:0]const u8,
- envp: [*:null]?[*:0]const u8,
- ) Error!pid_t {
- var pid: pid_t = undefined;
- switch (errno(posix_spawn(
- &pid,
- path,
- if (actions) |a| &a.actions else null,
- if (attr) |a| &a.attr else null,
- argv,
- envp,
- ))) {
- .SUCCESS => return pid,
- .@"2BIG" => return error.TooBig,
- .NOMEM => return error.SystemResources,
- .BADF => return error.InvalidFileDescriptor,
- .ACCES => return error.PermissionDenied,
- .IO => return error.InputOutput,
- .LOOP => return error.FileSystem,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOEXEC => return error.InvalidExe,
- .NOTDIR => return error.NotDir,
- .TXTBSY => return error.FileBusy,
- .BADARCH => return error.InvalidExe,
- .BADEXEC => return error.InvalidExe,
- .FAULT => unreachable,
- .INVAL => unreachable,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- pub fn waitpid(pid: pid_t, flags: u32) Error!std.os.WaitPidResult {
- var status: c_int = undefined;
- while (true) {
- const rc = waitpid(pid, &status, @as(c_int, @intCast(flags)));
- switch (errno(rc)) {
- .SUCCESS => return std.os.WaitPidResult{
- .pid = @as(pid_t, @intCast(rc)),
- .status = @as(u32, @bitCast(status)),
- },
- .INTR => continue,
- .CHILD => return error.ChildExecFailed,
- .INVAL => unreachable, // Invalid flags.
- else => unreachable,
- }
- }
- }
-};
-
pub fn getKernError(err: kern_return_t) KernE {
return @as(KernE, @enumFromInt(@as(u32, @truncate(@as(usize, @intCast(err))))));
}
-pub fn unexpectedKernError(err: KernE) std.os.UnexpectedError {
- if (std.os.unexpected_error_tracing) {
+pub fn unexpectedKernError(err: KernE) std.posix.UnexpectedError {
+ if (std.posix.unexpected_error_tracing) {
std.debug.print("unexpected error: {d}\n", .{@intFromEnum(err)});
std.debug.dumpCurrentStackTrace(null);
}
@@ -3067,7 +2842,7 @@ pub const MachError = error{
/// Not enough permissions held to perform the requested kernel
/// call.
PermissionDenied,
-} || std.os.UnexpectedError;
+} || std.posix.UnexpectedError;
pub const MachTask = extern struct {
port: mach_port_name_t,
@@ -3076,8 +2851,8 @@ pub const MachTask = extern struct {
return self.port != TASK_NULL;
}
- pub fn pidForTask(self: MachTask) MachError!std.os.pid_t {
- var pid: std.os.pid_t = undefined;
+ pub fn pidForTask(self: MachTask) MachError!std.c.pid_t {
+ var pid: std.c.pid_t = undefined;
switch (getKernError(pid_for_task(self.port, &pid))) {
.SUCCESS => return pid,
.FAILURE => return error.PermissionDenied,
@@ -3517,7 +3292,7 @@ pub const MachThread = extern struct {
}
};
-pub fn machTaskForPid(pid: std.os.pid_t) MachError!MachTask {
+pub fn machTaskForPid(pid: std.c.pid_t) MachError!MachTask {
var port: mach_port_name_t = undefined;
switch (getKernError(task_for_pid(mach_task_self(), pid, &port))) {
.SUCCESS => {},
diff --git a/lib/std/c/dragonfly.zig b/lib/std/c/dragonfly.zig
index 183a81bba2..c265fd0ff2 100644
--- a/lib/std/c/dragonfly.zig
+++ b/lib/std/c/dragonfly.zig
@@ -2,7 +2,7 @@ const builtin = @import("builtin");
const std = @import("../std.zig");
const assert = std.debug.assert;
const maxInt = std.math.maxInt;
-const iovec = std.os.iovec;
+const iovec = std.posix.iovec;
extern "c" threadlocal var errno: c_int;
pub fn _errno() *c_int {
diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig
index a89ca30968..6d0b88e3c3 100644
--- a/lib/std/c/freebsd.zig
+++ b/lib/std/c/freebsd.zig
@@ -2,8 +2,8 @@ const std = @import("../std.zig");
const assert = std.debug.assert;
const builtin = @import("builtin");
const maxInt = std.math.maxInt;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
extern "c" fn __error() *c_int;
pub const _errno = __error;
diff --git a/lib/std/c/haiku.zig b/lib/std/c/haiku.zig
index 12b5201acd..58bd55d17e 100644
--- a/lib/std/c/haiku.zig
+++ b/lib/std/c/haiku.zig
@@ -2,8 +2,8 @@ const std = @import("../std.zig");
const assert = std.debug.assert;
const builtin = @import("builtin");
const maxInt = std.math.maxInt;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
extern "c" fn _errnop() *c_int;
diff --git a/lib/std/c/linux.zig b/lib/std/c/linux.zig
index 03c90e5760..1a3c634515 100644
--- a/lib/std/c/linux.zig
+++ b/lib/std/c/linux.zig
@@ -3,8 +3,8 @@ const builtin = @import("builtin");
const native_abi = builtin.abi;
const native_arch = builtin.cpu.arch;
const linux = std.os.linux;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const FILE = std.c.FILE;
pub const AF = linux.AF;
diff --git a/lib/std/c/netbsd.zig b/lib/std/c/netbsd.zig
index c06857787a..fb2aefdb44 100644
--- a/lib/std/c/netbsd.zig
+++ b/lib/std/c/netbsd.zig
@@ -2,8 +2,8 @@ const std = @import("../std.zig");
const assert = std.debug.assert;
const builtin = @import("builtin");
const maxInt = std.math.maxInt;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const timezone = std.c.timezone;
const rusage = std.c.rusage;
diff --git a/lib/std/c/openbsd.zig b/lib/std/c/openbsd.zig
index 4fd450cd5c..e97798b0e7 100644
--- a/lib/std/c/openbsd.zig
+++ b/lib/std/c/openbsd.zig
@@ -2,8 +2,8 @@ const std = @import("../std.zig");
const assert = std.debug.assert;
const maxInt = std.math.maxInt;
const builtin = @import("builtin");
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
extern "c" fn __errno() *c_int;
pub const _errno = __errno;
diff --git a/lib/std/c/solaris.zig b/lib/std/c/solaris.zig
index 838b6985cc..31900c8372 100644
--- a/lib/std/c/solaris.zig
+++ b/lib/std/c/solaris.zig
@@ -2,8 +2,8 @@ const std = @import("../std.zig");
const assert = std.debug.assert;
const builtin = @import("builtin");
const maxInt = std.math.maxInt;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const timezone = std.c.timezone;
extern "c" fn ___errno() *c_int;
diff --git a/lib/std/c/wasi.zig b/lib/std/c/wasi.zig
index 95558787ae..c7533dce92 100644
--- a/lib/std/c/wasi.zig
+++ b/lib/std/c/wasi.zig
@@ -8,6 +8,8 @@ pub fn _errno() *c_int {
return &errno;
}
+pub const PATH_MAX = 4096;
+
pub const mode_t = u32;
pub const time_t = i64;
diff --git a/lib/std/child_process.zig b/lib/std/child_process.zig
index 85fa3d294e..c9db06d40b 100644
--- a/lib/std/child_process.zig
+++ b/lib/std/child_process.zig
@@ -3,30 +3,31 @@ const builtin = @import("builtin");
const unicode = std.unicode;
const io = std.io;
const fs = std.fs;
-const os = std.os;
const process = std.process;
const File = std.fs.File;
-const windows = os.windows;
-const linux = os.linux;
+const windows = std.os.windows;
+const linux = std.os.linux;
+const posix = std.posix;
const mem = std.mem;
const math = std.math;
const debug = std.debug;
const EnvMap = process.EnvMap;
const maxInt = std.math.maxInt;
const assert = std.debug.assert;
+const native_os = builtin.os.tag;
pub const ChildProcess = struct {
- pub const Id = switch (builtin.os.tag) {
+ pub const Id = switch (native_os) {
.windows => windows.HANDLE,
.wasi => void,
- else => os.pid_t,
+ else => posix.pid_t,
};
/// Available after calling `spawn()`. This becomes `undefined` after calling `wait()`.
/// On Windows this is the hProcess.
/// On POSIX this is the pid.
id: Id,
- thread_handle: if (builtin.os.tag == .windows) windows.HANDLE else void,
+ thread_handle: if (native_os == .windows) windows.HANDLE else void,
allocator: mem.Allocator,
@@ -46,10 +47,10 @@ pub const ChildProcess = struct {
stderr_behavior: StdIo,
/// Set to change the user id when spawning the child process.
- uid: if (builtin.os.tag == .windows or builtin.os.tag == .wasi) void else ?os.uid_t,
+ uid: if (native_os == .windows or native_os == .wasi) void else ?posix.uid_t,
/// Set to change the group id when spawning the child process.
- gid: if (builtin.os.tag == .windows or builtin.os.tag == .wasi) void else ?os.gid_t,
+ gid: if (native_os == .windows or native_os == .wasi) void else ?posix.gid_t,
/// Set to change the current working directory when spawning the child process.
cwd: ?[]const u8,
@@ -58,7 +59,7 @@ pub const ChildProcess = struct {
/// Once that is done, `cwd` will be deprecated in favor of this field.
cwd_dir: ?fs.Dir = null,
- err_pipe: ?if (builtin.os.tag == .windows) void else [2]os.fd_t,
+ err_pipe: ?if (native_os == .windows) void else [2]posix.fd_t,
expand_arg0: Arg0Expand,
@@ -87,7 +88,7 @@ pub const ChildProcess = struct {
/// Returns the peak resident set size of the child process, in bytes,
/// if available.
pub inline fn getMaxRss(rus: ResourceUsageStatistics) ?usize {
- switch (builtin.os.tag) {
+ switch (native_os) {
.linux => {
if (rus.rusage) |ru| {
return @as(usize, @intCast(ru.maxrss)) * 1024;
@@ -114,14 +115,14 @@ pub const ChildProcess = struct {
}
}
- const rusage_init = switch (builtin.os.tag) {
- .linux, .macos, .ios => @as(?std.os.rusage, null),
+ const rusage_init = switch (native_os) {
+ .linux, .macos, .ios => @as(?posix.rusage, null),
.windows => @as(?windows.VM_COUNTERS, null),
else => {},
};
};
- pub const Arg0Expand = os.Arg0Expand;
+ pub const Arg0Expand = posix.Arg0Expand;
pub const SpawnError = error{
OutOfMemory,
@@ -136,9 +137,9 @@ pub const ChildProcess = struct {
/// Windows-only. `cwd` was provided, but the path did not exist when spawning the child process.
CurrentWorkingDirectoryUnlinked,
} ||
- os.ExecveError ||
- os.SetIdError ||
- os.ChangeCurDirError ||
+ posix.ExecveError ||
+ posix.SetIdError ||
+ posix.ChangeCurDirError ||
windows.CreateProcessError ||
windows.GetProcessMemoryInfoError ||
windows.WaitForSingleObjectError;
@@ -168,8 +169,8 @@ pub const ChildProcess = struct {
.term = null,
.env_map = null,
.cwd = null,
- .uid = if (builtin.os.tag == .windows or builtin.os.tag == .wasi) {} else null,
- .gid = if (builtin.os.tag == .windows or builtin.os.tag == .wasi) {} else null,
+ .uid = if (native_os == .windows or native_os == .wasi) {} else null,
+ .gid = if (native_os == .windows or native_os == .wasi) {} else null,
.stdin = null,
.stdout = null,
.stderr = null,
@@ -193,7 +194,7 @@ pub const ChildProcess = struct {
@compileError("the target operating system cannot spawn processes");
}
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
return self.spawnWindows();
} else {
return self.spawnPosix();
@@ -207,7 +208,7 @@ pub const ChildProcess = struct {
/// Forcibly terminates child process and then cleans up all resources.
pub fn kill(self: *ChildProcess) !Term {
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
return self.killWindows(1);
} else {
return self.killPosix();
@@ -241,7 +242,7 @@ pub const ChildProcess = struct {
self.cleanupStreams();
return term;
}
- os.kill(self.id, os.SIG.TERM) catch |err| switch (err) {
+ posix.kill(self.id, posix.SIG.TERM) catch |err| switch (err) {
error.ProcessNotFound => return error.AlreadyTerminated,
else => return err,
};
@@ -251,7 +252,7 @@ pub const ChildProcess = struct {
/// Blocks until child process terminates and then cleans up all resources.
pub fn wait(self: *ChildProcess) !Term {
- const term = if (builtin.os.tag == .windows)
+ const term = if (native_os == .windows)
try self.waitWindows()
else
try self.waitPosix();
@@ -318,7 +319,7 @@ pub const ChildProcess = struct {
stderr.* = fifoToOwnedArrayList(poller.fifo(.stderr));
}
- pub const RunError = os.GetCwdError || os.ReadError || SpawnError || os.PollError || error{
+ pub const RunError = posix.GetCwdError || posix.ReadError || SpawnError || posix.PollError || error{
StdoutStreamTooLong,
StderrStreamTooLong,
};
@@ -396,19 +397,19 @@ pub const ChildProcess = struct {
self.resource_usage_statistics.rusage = try windows.GetProcessMemoryInfo(self.id);
}
- os.close(self.id);
- os.close(self.thread_handle);
+ posix.close(self.id);
+ posix.close(self.thread_handle);
self.cleanupStreams();
return result;
}
fn waitUnwrapped(self: *ChildProcess) !void {
- const res: os.WaitPidResult = res: {
+ const res: posix.WaitPidResult = res: {
if (self.request_resource_usage_statistics) {
- switch (builtin.os.tag) {
+ switch (native_os) {
.linux, .macos, .ios => {
- var ru: std.os.rusage = undefined;
- const res = os.wait4(self.id, 0, &ru);
+ var ru: posix.rusage = undefined;
+ const res = posix.wait4(self.id, 0, &ru);
self.resource_usage_statistics.rusage = ru;
break :res res;
},
@@ -416,7 +417,7 @@ pub const ChildProcess = struct {
}
}
- break :res os.waitpid(self.id, 0);
+ break :res posix.waitpid(self.id, 0);
};
const status = res.status;
self.cleanupStreams();
@@ -446,20 +447,20 @@ pub const ChildProcess = struct {
if (self.err_pipe) |err_pipe| {
defer destroyPipe(err_pipe);
- if (builtin.os.tag == .linux) {
- var fd = [1]std.os.pollfd{std.os.pollfd{
+ if (native_os == .linux) {
+ var fd = [1]posix.pollfd{posix.pollfd{
.fd = err_pipe[0],
- .events = std.os.POLL.IN,
+ .events = posix.POLL.IN,
.revents = undefined,
}};
// Check if the eventfd buffer stores a non-zero value by polling
// it, that's the error code returned by the child process.
- _ = std.os.poll(&fd, 0) catch unreachable;
+ _ = posix.poll(&fd, 0) catch unreachable;
// According to eventfd(2) the descriptor is readable if the counter
// has a value greater than 0
- if ((fd[0].revents & std.os.POLL.IN) != 0) {
+ if ((fd[0].revents & posix.POLL.IN) != 0) {
const err_int = try readIntFd(err_pipe[0]);
return @as(SpawnError, @errorCast(@errorFromInt(err_int)));
}
@@ -483,36 +484,36 @@ pub const ChildProcess = struct {
}
fn statusToTerm(status: u32) Term {
- return if (os.W.IFEXITED(status))
- Term{ .Exited = os.W.EXITSTATUS(status) }
- else if (os.W.IFSIGNALED(status))
- Term{ .Signal = os.W.TERMSIG(status) }
- else if (os.W.IFSTOPPED(status))
- Term{ .Stopped = os.W.STOPSIG(status) }
+ return if (posix.W.IFEXITED(status))
+ Term{ .Exited = posix.W.EXITSTATUS(status) }
+ else if (posix.W.IFSIGNALED(status))
+ Term{ .Signal = posix.W.TERMSIG(status) }
+ else if (posix.W.IFSTOPPED(status))
+ Term{ .Stopped = posix.W.STOPSIG(status) }
else
Term{ .Unknown = status };
}
fn spawnPosix(self: *ChildProcess) SpawnError!void {
- const pipe_flags: os.O = .{};
- const stdin_pipe = if (self.stdin_behavior == StdIo.Pipe) try os.pipe2(pipe_flags) else undefined;
+ const pipe_flags: posix.O = .{};
+ const stdin_pipe = if (self.stdin_behavior == StdIo.Pipe) try posix.pipe2(pipe_flags) else undefined;
errdefer if (self.stdin_behavior == StdIo.Pipe) {
destroyPipe(stdin_pipe);
};
- const stdout_pipe = if (self.stdout_behavior == StdIo.Pipe) try os.pipe2(pipe_flags) else undefined;
+ const stdout_pipe = if (self.stdout_behavior == StdIo.Pipe) try posix.pipe2(pipe_flags) else undefined;
errdefer if (self.stdout_behavior == StdIo.Pipe) {
destroyPipe(stdout_pipe);
};
- const stderr_pipe = if (self.stderr_behavior == StdIo.Pipe) try os.pipe2(pipe_flags) else undefined;
+ const stderr_pipe = if (self.stderr_behavior == StdIo.Pipe) try posix.pipe2(pipe_flags) else undefined;
errdefer if (self.stderr_behavior == StdIo.Pipe) {
destroyPipe(stderr_pipe);
};
const any_ignore = (self.stdin_behavior == StdIo.Ignore or self.stdout_behavior == StdIo.Ignore or self.stderr_behavior == StdIo.Ignore);
const dev_null_fd = if (any_ignore)
- os.openZ("/dev/null", .{ .ACCMODE = .RDWR }, 0) catch |err| switch (err) {
+ posix.openZ("/dev/null", .{ .ACCMODE = .RDWR }, 0) catch |err| switch (err) {
error.PathAlreadyExists => unreachable,
error.NoSpaceLeft => unreachable,
error.FileTooBig => unreachable,
@@ -526,7 +527,7 @@ pub const ChildProcess = struct {
else
undefined;
defer {
- if (any_ignore) os.close(dev_null_fd);
+ if (any_ignore) posix.close(dev_null_fd);
}
var arena_allocator = std.heap.ArenaAllocator.init(self.allocator);
@@ -554,7 +555,7 @@ pub const ChildProcess = struct {
} else if (builtin.output_mode == .Exe) {
// Then we have Zig start code and this works.
// TODO type-safety for null-termination of `os.environ`.
- break :m @as([*:null]const ?[*:0]const u8, @ptrCast(os.environ.ptr));
+ break :m @as([*:null]const ?[*:0]const u8, @ptrCast(std.os.environ.ptr));
} else {
// TODO come up with a solution for this.
@compileError("missing std lib enhancement: ChildProcess implementation has no way to collect the environment variables to forward to the child process");
@@ -564,60 +565,60 @@ pub const ChildProcess = struct {
// This pipe is used to communicate errors between the time of fork
// and execve from the child process to the parent process.
const err_pipe = blk: {
- if (builtin.os.tag == .linux) {
- const fd = try os.eventfd(0, linux.EFD.CLOEXEC);
+ if (native_os == .linux) {
+ const fd = try posix.eventfd(0, linux.EFD.CLOEXEC);
// There's no distinction between the readable and the writeable
// end with eventfd
- break :blk [2]os.fd_t{ fd, fd };
+ break :blk [2]posix.fd_t{ fd, fd };
} else {
- break :blk try os.pipe2(.{ .CLOEXEC = true });
+ break :blk try posix.pipe2(.{ .CLOEXEC = true });
}
};
errdefer destroyPipe(err_pipe);
- const pid_result = try os.fork();
+ const pid_result = try posix.fork();
if (pid_result == 0) {
// we are the child
- setUpChildIo(self.stdin_behavior, stdin_pipe[0], os.STDIN_FILENO, dev_null_fd) catch |err| forkChildErrReport(err_pipe[1], err);
- setUpChildIo(self.stdout_behavior, stdout_pipe[1], os.STDOUT_FILENO, dev_null_fd) catch |err| forkChildErrReport(err_pipe[1], err);
- setUpChildIo(self.stderr_behavior, stderr_pipe[1], os.STDERR_FILENO, dev_null_fd) catch |err| forkChildErrReport(err_pipe[1], err);
+ setUpChildIo(self.stdin_behavior, stdin_pipe[0], posix.STDIN_FILENO, dev_null_fd) catch |err| forkChildErrReport(err_pipe[1], err);
+ setUpChildIo(self.stdout_behavior, stdout_pipe[1], posix.STDOUT_FILENO, dev_null_fd) catch |err| forkChildErrReport(err_pipe[1], err);
+ setUpChildIo(self.stderr_behavior, stderr_pipe[1], posix.STDERR_FILENO, dev_null_fd) catch |err| forkChildErrReport(err_pipe[1], err);
if (self.stdin_behavior == .Pipe) {
- os.close(stdin_pipe[0]);
- os.close(stdin_pipe[1]);
+ posix.close(stdin_pipe[0]);
+ posix.close(stdin_pipe[1]);
}
if (self.stdout_behavior == .Pipe) {
- os.close(stdout_pipe[0]);
- os.close(stdout_pipe[1]);
+ posix.close(stdout_pipe[0]);
+ posix.close(stdout_pipe[1]);
}
if (self.stderr_behavior == .Pipe) {
- os.close(stderr_pipe[0]);
- os.close(stderr_pipe[1]);
+ posix.close(stderr_pipe[0]);
+ posix.close(stderr_pipe[1]);
}
if (self.cwd_dir) |cwd| {
- os.fchdir(cwd.fd) catch |err| forkChildErrReport(err_pipe[1], err);
+ posix.fchdir(cwd.fd) catch |err| forkChildErrReport(err_pipe[1], err);
} else if (self.cwd) |cwd| {
- os.chdir(cwd) catch |err| forkChildErrReport(err_pipe[1], err);
+ posix.chdir(cwd) catch |err| forkChildErrReport(err_pipe[1], err);
}
if (self.gid) |gid| {
- os.setregid(gid, gid) catch |err| forkChildErrReport(err_pipe[1], err);
+ posix.setregid(gid, gid) catch |err| forkChildErrReport(err_pipe[1], err);
}
if (self.uid) |uid| {
- os.setreuid(uid, uid) catch |err| forkChildErrReport(err_pipe[1], err);
+ posix.setreuid(uid, uid) catch |err| forkChildErrReport(err_pipe[1], err);
}
const err = switch (self.expand_arg0) {
- .expand => os.execvpeZ_expandArg0(.expand, argv_buf.ptr[0].?, argv_buf.ptr, envp),
- .no_expand => os.execvpeZ_expandArg0(.no_expand, argv_buf.ptr[0].?, argv_buf.ptr, envp),
+ .expand => posix.execvpeZ_expandArg0(.expand, argv_buf.ptr[0].?, argv_buf.ptr, envp),
+ .no_expand => posix.execvpeZ_expandArg0(.no_expand, argv_buf.ptr[0].?, argv_buf.ptr, envp),
};
forkChildErrReport(err_pipe[1], err);
}
// we are the parent
- const pid = @as(i32, @intCast(pid_result));
+ const pid: i32 = @intCast(pid_result);
if (self.stdin_behavior == StdIo.Pipe) {
self.stdin = File{ .handle = stdin_pipe[1] };
} else {
@@ -639,13 +640,13 @@ pub const ChildProcess = struct {
self.term = null;
if (self.stdin_behavior == StdIo.Pipe) {
- os.close(stdin_pipe[0]);
+ posix.close(stdin_pipe[0]);
}
if (self.stdout_behavior == StdIo.Pipe) {
- os.close(stdout_pipe[1]);
+ posix.close(stdout_pipe[1]);
}
if (self.stderr_behavior == StdIo.Pipe) {
- os.close(stderr_pipe[1]);
+ posix.close(stderr_pipe[1]);
}
}
@@ -679,7 +680,7 @@ pub const ChildProcess = struct {
else
undefined;
defer {
- if (any_ignore) os.close(nul_handle);
+ if (any_ignore) posix.close(nul_handle);
}
var g_hChildStd_IN_Rd: ?windows.HANDLE = null;
@@ -821,8 +822,8 @@ pub const ChildProcess = struct {
defer self.allocator.free(cmd_line_w);
run: {
- const PATH: [:0]const u16 = std.os.getenvW(unicode.utf8ToUtf16LeStringLiteral("PATH")) orelse &[_:0]u16{};
- const PATHEXT: [:0]const u16 = std.os.getenvW(unicode.utf8ToUtf16LeStringLiteral("PATHEXT")) orelse &[_:0]u16{};
+ const PATH: [:0]const u16 = std.process.getenvW(unicode.utf8ToUtf16LeStringLiteral("PATH")) orelse &[_:0]u16{};
+ const PATHEXT: [:0]const u16 = std.process.getenvW(unicode.utf8ToUtf16LeStringLiteral("PATHEXT")) orelse &[_:0]u16{};
var app_buf = std.ArrayListUnmanaged(u16){};
defer app_buf.deinit(self.allocator);
@@ -905,22 +906,22 @@ pub const ChildProcess = struct {
self.term = null;
if (self.stdin_behavior == StdIo.Pipe) {
- os.close(g_hChildStd_IN_Rd.?);
+ posix.close(g_hChildStd_IN_Rd.?);
}
if (self.stderr_behavior == StdIo.Pipe) {
- os.close(g_hChildStd_ERR_Wr.?);
+ posix.close(g_hChildStd_ERR_Wr.?);
}
if (self.stdout_behavior == StdIo.Pipe) {
- os.close(g_hChildStd_OUT_Wr.?);
+ posix.close(g_hChildStd_OUT_Wr.?);
}
}
fn setUpChildIo(stdio: StdIo, pipe_fd: i32, std_fileno: i32, dev_null_fd: i32) !void {
switch (stdio) {
- .Pipe => try os.dup2(pipe_fd, std_fileno),
- .Close => os.close(std_fileno),
+ .Pipe => try posix.dup2(pipe_fd, std_fileno),
+ .Close => posix.close(std_fileno),
.Inherit => {},
- .Ignore => try os.dup2(dev_null_fd, std_fileno),
+ .Ignore => try posix.dup2(dev_null_fd, std_fileno),
}
}
};
@@ -987,7 +988,7 @@ fn windowsCreateProcessPathExt(
// This 2048 is arbitrary, we just want it to be large enough to get multiple FILE_DIRECTORY_INFORMATION entries
// returned per NtQueryDirectoryFile call.
- var file_information_buf: [2048]u8 align(@alignOf(os.windows.FILE_DIRECTORY_INFORMATION)) = undefined;
+ var file_information_buf: [2048]u8 align(@alignOf(windows.FILE_DIRECTORY_INFORMATION)) = undefined;
const file_info_maximum_single_entry_size = @sizeOf(windows.FILE_DIRECTORY_INFORMATION) + (windows.NAME_MAX * 2);
if (file_information_buf.len < file_info_maximum_single_entry_size) {
@compileError("file_information_buf must be large enough to contain at least one maximum size FILE_DIRECTORY_INFORMATION entry");
@@ -1391,8 +1392,8 @@ fn testArgvToCommandLineWindows(argv: []const []const u8, expected_cmd_line: []c
}
fn windowsDestroyPipe(rd: ?windows.HANDLE, wr: ?windows.HANDLE) void {
- if (rd) |h| os.close(h);
- if (wr) |h| os.close(h);
+ if (rd) |h| posix.close(h);
+ if (wr) |h| posix.close(h);
}
fn windowsMakePipeIn(rd: *?windows.HANDLE, wr: *?windows.HANDLE, sattr: *const windows.SECURITY_ATTRIBUTES) !void {
@@ -1443,7 +1444,7 @@ fn windowsMakeAsyncPipe(rd: *?windows.HANDLE, wr: *?windows.HANDLE, sattr: *cons
else => |err| return windows.unexpectedError(err),
}
}
- errdefer os.close(read_handle);
+ errdefer posix.close(read_handle);
var sattr_copy = sattr.*;
const write_handle = windows.kernel32.CreateFileW(
@@ -1460,7 +1461,7 @@ fn windowsMakeAsyncPipe(rd: *?windows.HANDLE, wr: *?windows.HANDLE, sattr: *cons
else => |err| return windows.unexpectedError(err),
}
}
- errdefer os.close(write_handle);
+ errdefer posix.close(write_handle);
try windows.SetHandleInformation(read_handle, windows.HANDLE_FLAG_INHERIT, 0);
@@ -1468,9 +1469,9 @@ fn windowsMakeAsyncPipe(rd: *?windows.HANDLE, wr: *?windows.HANDLE, sattr: *cons
wr.* = write_handle;
}
-fn destroyPipe(pipe: [2]os.fd_t) void {
- os.close(pipe[0]);
- if (pipe[0] != pipe[1]) os.close(pipe[1]);
+fn destroyPipe(pipe: [2]posix.fd_t) void {
+ posix.close(pipe[0]);
+ if (pipe[0] != pipe[1]) posix.close(pipe[1]);
}
// Child of fork calls this to report an error to the fork parent.
@@ -1485,7 +1486,7 @@ fn forkChildErrReport(fd: i32, err: ChildProcess.SpawnError) noreturn {
// The _exit(2) function does nothing but make the exit syscall, unlike exit(3)
std.c._exit(1);
}
- os.exit(1);
+ posix.exit(1);
}
const ErrInt = std.meta.Int(.unsigned, @sizeOf(anyerror) * 8);
diff --git a/lib/std/crypto/Certificate/Bundle.zig b/lib/std/crypto/Certificate/Bundle.zig
index b1c3cfee2f..d1c0a9682c 100644
--- a/lib/std/crypto/Certificate/Bundle.zig
+++ b/lib/std/crypto/Certificate/Bundle.zig
@@ -125,7 +125,7 @@ fn rescanBSD(cb: *Bundle, gpa: Allocator, cert_file_path: []const u8) RescanBSDE
cb.bytes.shrinkAndFree(gpa, cb.bytes.items.len);
}
-const RescanWindowsError = Allocator.Error || ParseCertError || std.os.UnexpectedError || error{FileNotFound};
+const RescanWindowsError = Allocator.Error || ParseCertError || std.posix.UnexpectedError || error{FileNotFound};
fn rescanWindows(cb: *Bundle, gpa: Allocator) RescanWindowsError!void {
cb.bytes.clearRetainingCapacity();
diff --git a/lib/std/crypto/Certificate/Bundle/macos.zig b/lib/std/crypto/Certificate/Bundle/macos.zig
index e4bbfecb7e..61e3339b33 100644
--- a/lib/std/crypto/Certificate/Bundle/macos.zig
+++ b/lib/std/crypto/Certificate/Bundle/macos.zig
@@ -42,7 +42,7 @@ pub fn rescanMac(cb: *Bundle, gpa: Allocator) RescanMacError!void {
const table_header = try reader.readStructEndian(TableHeader, .big);
- if (@as(std.os.darwin.cssm.DB_RECORDTYPE, @enumFromInt(table_header.table_id)) != .X509_CERTIFICATE) {
+ if (@as(std.c.cssm.DB_RECORDTYPE, @enumFromInt(table_header.table_id)) != .X509_CERTIFICATE) {
continue;
}
diff --git a/lib/std/crypto/tlcsprng.zig b/lib/std/crypto/tlcsprng.zig
index 973a0f8bb4..9293887a59 100644
--- a/lib/std/crypto/tlcsprng.zig
+++ b/lib/std/crypto/tlcsprng.zig
@@ -6,7 +6,8 @@
const std = @import("std");
const builtin = @import("builtin");
const mem = std.mem;
-const os = std.os;
+const native_os = builtin.os.tag;
+const posix = std.posix;
/// We use this as a layer of indirection because global const pointers cannot
/// point to thread-local variables.
@@ -15,7 +16,7 @@ pub const interface = std.Random{
.fillFn = tlsCsprngFill,
};
-const os_has_fork = switch (builtin.os.tag) {
+const os_has_fork = switch (native_os) {
.dragonfly,
.freebsd,
.ios,
@@ -41,7 +42,7 @@ const maybe_have_wipe_on_fork = builtin.os.isAtLeast(.linux, .{
.minor = 14,
.patch = 0,
}) orelse true;
-const is_haiku = builtin.os.tag == .haiku;
+const is_haiku = native_os == .haiku;
const Rng = std.Random.DefaultCsprng;
@@ -79,10 +80,10 @@ fn tlsCsprngFill(_: *anyopaque, buffer: []u8) void {
if (want_fork_safety and maybe_have_wipe_on_fork or is_haiku) {
// Allocate a per-process page, madvise operates with page
// granularity.
- wipe_mem = os.mmap(
+ wipe_mem = posix.mmap(
null,
@sizeOf(Context),
- os.PROT.READ | os.PROT.WRITE,
+ posix.PROT.READ | posix.PROT.WRITE,
.{ .TYPE = .PRIVATE, .ANONYMOUS = true },
-1,
0,
@@ -115,11 +116,11 @@ fn tlsCsprngFill(_: *anyopaque, buffer: []u8) void {
// Qemu user-mode emulation ignores any valid/invalid madvise
// hint and returns success. Check if this is the case by
// passing bogus parameters, we expect EINVAL as result.
- if (os.madvise(wipe_mem.ptr, 0, 0xffffffff)) |_| {
+ if (posix.madvise(wipe_mem.ptr, 0, 0xffffffff)) |_| {
break :wof;
} else |_| {}
- if (os.madvise(wipe_mem.ptr, wipe_mem.len, os.MADV.WIPEONFORK)) |_| {
+ if (posix.madvise(wipe_mem.ptr, wipe_mem.len, posix.MADV.WIPEONFORK)) |_| {
return initAndFill(buffer);
} else |_| {}
}
@@ -164,7 +165,7 @@ fn fillWithCsprng(buffer: []u8) void {
}
pub fn defaultRandomSeed(buffer: []u8) void {
- os.getrandom(buffer) catch @panic("getrandom() failed to provide entropy");
+ posix.getrandom(buffer) catch @panic("getrandom() failed to provide entropy");
}
fn initAndFill(buffer: []u8) void {
diff --git a/lib/std/crypto/tls/Client.zig b/lib/std/crypto/tls/Client.zig
index f07cfe7810..682c1ffe0e 100644
--- a/lib/std/crypto/tls/Client.zig
+++ b/lib/std/crypto/tls/Client.zig
@@ -62,7 +62,7 @@ pub const StreamInterface = struct {
/// The `iovecs` parameter is mutable because so that function may to
/// mutate the fields in order to handle partial reads from the underlying
/// stream layer.
- pub fn readv(this: @This(), iovecs: []std.os.iovec) ReadError!usize {
+ pub fn readv(this: @This(), iovecs: []std.posix.iovec) ReadError!usize {
_ = .{ this, iovecs };
@panic("unimplemented");
}
@@ -72,7 +72,7 @@ pub const StreamInterface = struct {
/// Returns the number of bytes read, which may be less than the buffer
/// space provided. A short read does not indicate end-of-stream.
- pub fn writev(this: @This(), iovecs: []const std.os.iovec_const) WriteError!usize {
+ pub fn writev(this: @This(), iovecs: []const std.posix.iovec_const) WriteError!usize {
_ = .{ this, iovecs };
@panic("unimplemented");
}
@@ -81,7 +81,7 @@ pub const StreamInterface = struct {
/// space provided, indicating end-of-stream.
/// The `iovecs` parameter is mutable in case this function needs to mutate
/// the fields in order to handle partial writes from the underlying layer.
- pub fn writevAll(this: @This(), iovecs: []std.os.iovec_const) WriteError!usize {
+ pub fn writevAll(this: @This(), iovecs: []std.posix.iovec_const) WriteError!usize {
// This can be implemented in terms of writev, or specialized if desired.
_ = .{ this, iovecs };
@panic("unimplemented");
@@ -215,7 +215,7 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In
} ++ int2(@intCast(out_handshake.len + host_len)) ++ out_handshake;
{
- var iovecs = [_]std.os.iovec_const{
+ var iovecs = [_]std.posix.iovec_const{
.{
.iov_base = &plaintext_header,
.iov_len = plaintext_header.len,
@@ -677,7 +677,7 @@ pub fn init(stream: anytype, ca_bundle: Certificate.Bundle, host: []const u8) In
P.AEAD.encrypt(ciphertext, auth_tag, &out_cleartext, ad, nonce, p.client_handshake_key);
const both_msgs = client_change_cipher_spec_msg ++ finished_msg;
- var both_msgs_vec = [_]std.os.iovec_const{.{
+ var both_msgs_vec = [_]std.posix.iovec_const{.{
.iov_base = &both_msgs,
.iov_len = both_msgs.len,
}};
@@ -755,7 +755,7 @@ pub fn writeAllEnd(c: *Client, stream: anytype, bytes: []const u8, end: bool) !v
/// TLS session, or a truncation attack.
pub fn writeEnd(c: *Client, stream: anytype, bytes: []const u8, end: bool) !usize {
var ciphertext_buf: [tls.max_ciphertext_record_len * 4]u8 = undefined;
- var iovecs_buf: [6]std.os.iovec_const = undefined;
+ var iovecs_buf: [6]std.posix.iovec_const = undefined;
var prepared = prepareCiphertextRecord(c, &iovecs_buf, &ciphertext_buf, bytes, .application_data);
if (end) {
prepared.iovec_end += prepareCiphertextRecord(
@@ -796,7 +796,7 @@ pub fn writeEnd(c: *Client, stream: anytype, bytes: []const u8, end: bool) !usiz
fn prepareCiphertextRecord(
c: *Client,
- iovecs: []std.os.iovec_const,
+ iovecs: []std.posix.iovec_const,
ciphertext_buf: []u8,
bytes: []const u8,
inner_content_type: tls.ContentType,
@@ -885,7 +885,7 @@ pub fn eof(c: Client) bool {
/// If the number read is less than `len` it means the stream reached the end.
/// Reaching the end of the stream is not an error condition.
pub fn readAtLeast(c: *Client, stream: anytype, buffer: []u8, len: usize) !usize {
- var iovecs = [1]std.os.iovec{.{ .iov_base = buffer.ptr, .iov_len = buffer.len }};
+ var iovecs = [1]std.posix.iovec{.{ .iov_base = buffer.ptr, .iov_len = buffer.len }};
return readvAtLeast(c, stream, &iovecs, len);
}
@@ -908,7 +908,7 @@ pub fn readAll(c: *Client, stream: anytype, buffer: []u8) !usize {
/// stream is not an error condition.
/// The `iovecs` parameter is mutable because this function needs to mutate the fields in
/// order to handle partial reads from the underlying stream layer.
-pub fn readv(c: *Client, stream: anytype, iovecs: []std.os.iovec) !usize {
+pub fn readv(c: *Client, stream: anytype, iovecs: []std.posix.iovec) !usize {
return readvAtLeast(c, stream, iovecs, 1);
}
@@ -919,7 +919,7 @@ pub fn readv(c: *Client, stream: anytype, iovecs: []std.os.iovec) !usize {
/// Reaching the end of the stream is not an error condition.
/// The `iovecs` parameter is mutable because this function needs to mutate the fields in
/// order to handle partial reads from the underlying stream layer.
-pub fn readvAtLeast(c: *Client, stream: anytype, iovecs: []std.os.iovec, len: usize) !usize {
+pub fn readvAtLeast(c: *Client, stream: anytype, iovecs: []std.posix.iovec, len: usize) !usize {
if (c.eof()) return 0;
var off_i: usize = 0;
@@ -945,7 +945,7 @@ pub fn readvAtLeast(c: *Client, stream: anytype, iovecs: []std.os.iovec, len: us
/// function asserts that `eof()` is `false`.
/// See `readv` for a higher level function that has the same, familiar API as
/// other read functions, such as `std.fs.File.read`.
-pub fn readvAdvanced(c: *Client, stream: anytype, iovecs: []const std.os.iovec) !usize {
+pub fn readvAdvanced(c: *Client, stream: anytype, iovecs: []const std.posix.iovec) !usize {
var vp: VecPut = .{ .iovecs = iovecs };
// Give away the buffered cleartext we have, if any.
@@ -998,7 +998,7 @@ pub fn readvAdvanced(c: *Client, stream: anytype, iovecs: []const std.os.iovec)
c.partial_cleartext_idx = 0;
const first_iov = c.partially_read_buffer[c.partial_ciphertext_end..];
- var ask_iovecs_buf: [2]std.os.iovec = .{
+ var ask_iovecs_buf: [2]std.posix.iovec = .{
.{
.iov_base = first_iov.ptr,
.iov_len = first_iov.len,
@@ -1352,7 +1352,7 @@ fn SchemeEddsa(comptime scheme: tls.SignatureScheme) type {
/// Abstraction for sending multiple byte buffers to a slice of iovecs.
const VecPut = struct {
- iovecs: []const std.os.iovec,
+ iovecs: []const std.posix.iovec,
idx: usize = 0,
off: usize = 0,
total: usize = 0,
@@ -1413,7 +1413,7 @@ const VecPut = struct {
};
/// Limit iovecs to a specific byte size.
-fn limitVecs(iovecs: []std.os.iovec, len: usize) []std.os.iovec {
+fn limitVecs(iovecs: []std.posix.iovec, len: usize) []std.posix.iovec {
var bytes_left: usize = len;
for (iovecs, 0..) |*iovec, vec_i| {
if (bytes_left <= iovec.iov_len) {
diff --git a/lib/std/debug.zig b/lib/std/debug.zig
index f190e7fee2..7baa02fe74 100644
--- a/lib/std/debug.zig
+++ b/lib/std/debug.zig
@@ -3,7 +3,7 @@ const builtin = @import("builtin");
const math = std.math;
const mem = std.mem;
const io = std.io;
-const os = std.os;
+const posix = std.posix;
const fs = std.fs;
const testing = std.testing;
const elf = std.elf;
@@ -34,7 +34,7 @@ pub const sys_can_stack_trace = switch (builtin.cpu.arch) {
// "Non-Emscripten WebAssembly hasn't implemented __builtin_return_address".
.wasm32,
.wasm64,
- => builtin.os.tag == .emscripten,
+ => native_os == .emscripten,
// `@returnAddress()` is unsupported in LLVM 13.
.bpfel,
@@ -192,8 +192,8 @@ pub fn dumpCurrentStackTrace(start_addr: ?usize) void {
}
}
-pub const have_ucontext = @hasDecl(os.system, "ucontext_t") and
- (builtin.os.tag != .linux or switch (builtin.cpu.arch) {
+pub const have_ucontext = @hasDecl(posix.system, "ucontext_t") and
+ (native_os != .linux or switch (builtin.cpu.arch) {
.mips, .mipsel, .mips64, .mips64el, .riscv64 => false,
else => true,
});
@@ -203,9 +203,9 @@ pub const have_ucontext = @hasDecl(os.system, "ucontext_t") and
/// use internal pointers within this structure. To make a copy, use `copyContext`.
pub const ThreadContext = blk: {
if (native_os == .windows) {
- break :blk std.os.windows.CONTEXT;
+ break :blk windows.CONTEXT;
} else if (have_ucontext) {
- break :blk os.ucontext_t;
+ break :blk posix.ucontext_t;
} else {
break :blk void;
}
@@ -228,9 +228,9 @@ pub fn relocateContext(context: *ThreadContext) void {
};
}
-pub const have_getcontext = @hasDecl(os.system, "getcontext") and
- builtin.os.tag != .openbsd and
- (builtin.os.tag != .linux or switch (builtin.cpu.arch) {
+pub const have_getcontext = @hasDecl(posix.system, "getcontext") and
+ native_os != .openbsd and
+ (native_os != .linux or switch (builtin.cpu.arch) {
.x86,
.x86_64,
=> true,
@@ -249,7 +249,7 @@ pub inline fn getContext(context: *ThreadContext) bool {
return true;
}
- const result = have_getcontext and os.system.getcontext(context) == 0;
+ const result = have_getcontext and posix.system.getcontext(context) == 0;
if (native_os == .macos) {
assert(context.mcsize == @sizeOf(std.c.mcontext_t));
@@ -470,12 +470,12 @@ pub fn panicImpl(trace: ?*const std.builtin.StackTrace, first_trace_addr: ?usize
const stderr = io.getStdErr().writer();
if (builtin.single_threaded) {
- stderr.print("panic: ", .{}) catch os.abort();
+ stderr.print("panic: ", .{}) catch posix.abort();
} else {
const current_thread_id = std.Thread.getCurrentId();
- stderr.print("thread {} panic: ", .{current_thread_id}) catch os.abort();
+ stderr.print("thread {} panic: ", .{current_thread_id}) catch posix.abort();
}
- stderr.print("{s}\n", .{msg}) catch os.abort();
+ stderr.print("{s}\n", .{msg}) catch posix.abort();
if (trace) |t| {
dumpStackTrace(t.*);
}
@@ -491,14 +491,14 @@ pub fn panicImpl(trace: ?*const std.builtin.StackTrace, first_trace_addr: ?usize
// we're still holding the mutex but that's fine as we're going to
// call abort()
const stderr = io.getStdErr().writer();
- stderr.print("Panicked during a panic. Aborting.\n", .{}) catch os.abort();
+ stderr.print("Panicked during a panic. Aborting.\n", .{}) catch posix.abort();
},
else => {
// Panicked while printing "Panicked during a panic."
},
};
- os.abort();
+ posix.abort();
}
/// Must be called only after adding 1 to `panicking`. There are three callsites.
@@ -584,7 +584,7 @@ pub const StackIterator = struct {
};
}
- pub fn initWithContext(first_address: ?usize, debug_info: *DebugInfo, context: *const os.ucontext_t) !StackIterator {
+ pub fn initWithContext(first_address: ?usize, debug_info: *DebugInfo, context: *const posix.ucontext_t) !StackIterator {
// The implementation of DWARF unwinding on aarch64-macos is not complete. However, Apple mandates that
// the frame pointer register is always used, so on this platform we can safely use the FP-based unwinder.
if (comptime builtin.target.isDarwin() and native_arch == .aarch64) {
@@ -668,12 +668,11 @@ pub const StackIterator = struct {
const aligned_memory = @as([*]align(mem.page_size) u8, @ptrFromInt(aligned_address))[0..mem.page_size];
if (native_os == .windows) {
- const w = os.windows;
- var memory_info: w.MEMORY_BASIC_INFORMATION = undefined;
+ var memory_info: windows.MEMORY_BASIC_INFORMATION = undefined;
// The only error this function can throw is ERROR_INVALID_PARAMETER.
// supply an address that invalid i'll be thrown.
- const rc = w.VirtualQuery(aligned_memory, &memory_info, aligned_memory.len) catch {
+ const rc = windows.VirtualQuery(aligned_memory, &memory_info, aligned_memory.len) catch {
return false;
};
@@ -683,17 +682,15 @@ pub const StackIterator = struct {
}
// Free pages cannot be read, they are unmapped
- if (memory_info.State == w.MEM_FREE) {
+ if (memory_info.State == windows.MEM_FREE) {
return false;
}
return true;
- } else if (@hasDecl(os.system, "msync") and native_os != .wasi and native_os != .emscripten) {
- os.msync(aligned_memory, os.MSF.ASYNC) catch |err| {
+ } else if (@hasDecl(posix.system, "msync") and native_os != .wasi and native_os != .emscripten) {
+ posix.msync(aligned_memory, posix.MSF.ASYNC) catch |err| {
switch (err) {
- os.MSyncError.UnmappedMemory => {
- return false;
- },
+ error.UnmappedMemory => return false,
else => unreachable,
}
};
@@ -1296,7 +1293,7 @@ pub fn readElfDebugInfo(
}
var cwd_buf: [fs.MAX_PATH_BYTES]u8 = undefined;
- const cwd_path = os.realpath(".", &cwd_buf) catch break :blk;
+ const cwd_path = posix.realpath(".", &cwd_buf) catch break :blk;
// <global debug directory>/<absolute folder of current binary>/<gnu_debuglink>
for (global_debug_directories) |global_directory| {
@@ -1651,15 +1648,15 @@ fn mapWholeFile(file: File) ![]align(mem.page_size) const u8 {
defer file.close();
const file_len = math.cast(usize, try file.getEndPos()) orelse math.maxInt(usize);
- const mapped_mem = try os.mmap(
+ const mapped_mem = try posix.mmap(
null,
file_len,
- os.PROT.READ,
+ posix.PROT.READ,
.{ .TYPE = .SHARED },
file.handle,
0,
);
- errdefer os.munmap(mapped_mem);
+ errdefer posix.munmap(mapped_mem);
return mapped_mem;
}
@@ -1997,8 +1994,8 @@ pub const DebugInfo = struct {
} = .{ .address = address };
const CtxTy = @TypeOf(ctx);
- if (os.dl_iterate_phdr(&ctx, error{Found}, struct {
- fn callback(info: *os.dl_phdr_info, size: usize, context: *CtxTy) !void {
+ if (posix.dl_iterate_phdr(&ctx, error{Found}, struct {
+ fn callback(info: *posix.dl_phdr_info, size: usize, context: *CtxTy) !void {
_ = size;
if (context.address < info.dlpi_addr) return;
const phdrs = info.dlpi_phdr[0..info.dlpi_phnum];
@@ -2036,8 +2033,8 @@ pub const DebugInfo = struct {
} = .{ .address = address };
const CtxTy = @TypeOf(ctx);
- if (os.dl_iterate_phdr(&ctx, error{Found}, struct {
- fn callback(info: *os.dl_phdr_info, size: usize, context: *CtxTy) !void {
+ if (posix.dl_iterate_phdr(&ctx, error{Found}, struct {
+ fn callback(info: *posix.dl_phdr_info, size: usize, context: *CtxTy) !void {
_ = size;
// The base address is too high
if (context.address < info.dlpi_addr)
@@ -2159,7 +2156,7 @@ pub const ModuleDebugInfo = switch (native_os) {
}
self.ofiles.deinit();
allocator.free(self.symbols);
- os.munmap(self.mapped_memory);
+ posix.munmap(self.mapped_memory);
}
fn loadOFile(self: *@This(), allocator: mem.Allocator, o_file_path: []const u8) !*OFileInfo {
@@ -2433,8 +2430,8 @@ pub const ModuleDebugInfo = switch (native_os) {
pub fn deinit(self: *@This(), allocator: mem.Allocator) void {
self.dwarf.deinit(allocator);
- os.munmap(self.mapped_memory);
- if (self.external_mapped_memory) |m| os.munmap(m);
+ posix.munmap(self.mapped_memory);
+ if (self.external_mapped_memory) |m| posix.munmap(m);
}
pub fn getSymbolAtAddress(self: *@This(), allocator: mem.Allocator, address: usize) !SymbolInfo {
@@ -2514,7 +2511,7 @@ pub const have_segfault_handling_support = switch (native_os) {
.windows,
=> true,
- .freebsd, .openbsd => @hasDecl(os.system, "ucontext_t"),
+ .freebsd, .openbsd => @hasDecl(std.c, "ucontext_t"),
else => false,
};
@@ -2529,11 +2526,11 @@ pub fn maybeEnableSegfaultHandler() void {
var windows_segfault_handle: ?windows.HANDLE = null;
-pub fn updateSegfaultHandler(act: ?*const os.Sigaction) error{OperationNotSupported}!void {
- try os.sigaction(os.SIG.SEGV, act, null);
- try os.sigaction(os.SIG.ILL, act, null);
- try os.sigaction(os.SIG.BUS, act, null);
- try os.sigaction(os.SIG.FPE, act, null);
+pub fn updateSegfaultHandler(act: ?*const posix.Sigaction) error{OperationNotSupported}!void {
+ try posix.sigaction(posix.SIG.SEGV, act, null);
+ try posix.sigaction(posix.SIG.ILL, act, null);
+ try posix.sigaction(posix.SIG.BUS, act, null);
+ try posix.sigaction(posix.SIG.FPE, act, null);
}
/// Attaches a global SIGSEGV handler which calls `@panic("segmentation fault");`
@@ -2545,10 +2542,10 @@ pub fn attachSegfaultHandler() void {
windows_segfault_handle = windows.kernel32.AddVectoredExceptionHandler(0, handleSegfaultWindows);
return;
}
- var act = os.Sigaction{
+ var act = posix.Sigaction{
.handler = .{ .sigaction = handleSegfaultPosix },
- .mask = os.empty_sigset,
- .flags = (os.SA.SIGINFO | os.SA.RESTART | os.SA.RESETHAND),
+ .mask = posix.empty_sigset,
+ .flags = (posix.SA.SIGINFO | posix.SA.RESTART | posix.SA.RESETHAND),
};
updateSegfaultHandler(&act) catch {
@@ -2564,16 +2561,16 @@ fn resetSegfaultHandler() void {
}
return;
}
- var act = os.Sigaction{
- .handler = .{ .handler = os.SIG.DFL },
- .mask = os.empty_sigset,
+ var act = posix.Sigaction{
+ .handler = .{ .handler = posix.SIG.DFL },
+ .mask = posix.empty_sigset,
.flags = 0,
};
// To avoid a double-panic, do nothing if an error happens here.
updateSegfaultHandler(&act) catch {};
}
-fn handleSegfaultPosix(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const anyopaque) callconv(.C) noreturn {
+fn handleSegfaultPosix(sig: i32, info: *const posix.siginfo_t, ctx_ptr: ?*const anyopaque) callconv(.C) noreturn {
// Reset to the default handler so that if a segfault happens in this handler it will crash
// the process. Also when this handler returns, the original instruction will be repeated
// and the resulting segfault will crash the process rather than continually dump stack traces.
@@ -2612,13 +2609,13 @@ fn handleSegfaultPosix(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const any
// We cannot allow the signal handler to return because when it runs the original instruction
// again, the memory may be mapped and undefined behavior would occur rather than repeating
// the segfault. So we simply abort here.
- os.abort();
+ posix.abort();
}
fn dumpSegfaultInfoPosix(sig: i32, code: i32, addr: usize, ctx_ptr: ?*const anyopaque) void {
const stderr = io.getStdErr().writer();
_ = switch (sig) {
- os.SIG.SEGV => if (native_arch == .x86_64 and native_os == .linux and code == 128) // SI_KERNEL
+ posix.SIG.SEGV => if (native_arch == .x86_64 and native_os == .linux and code == 128) // SI_KERNEL
// x86_64 doesn't have a full 64-bit virtual address space.
// Addresses outside of that address space are non-canonical
// and the CPU won't provide the faulting address to us.
@@ -2629,11 +2626,11 @@ fn dumpSegfaultInfoPosix(sig: i32, code: i32, addr: usize, ctx_ptr: ?*const anyo
stderr.print("General protection exception (no address available)\n", .{})
else
stderr.print("Segmentation fault at address 0x{x}\n", .{addr}),
- os.SIG.ILL => stderr.print("Illegal instruction at address 0x{x}\n", .{addr}),
- os.SIG.BUS => stderr.print("Bus error at address 0x{x}\n", .{addr}),
- os.SIG.FPE => stderr.print("Arithmetic exception at address 0x{x}\n", .{addr}),
+ posix.SIG.ILL => stderr.print("Illegal instruction at address 0x{x}\n", .{addr}),
+ posix.SIG.BUS => stderr.print("Bus error at address 0x{x}\n", .{addr}),
+ posix.SIG.FPE => stderr.print("Arithmetic exception at address 0x{x}\n", .{addr}),
else => unreachable,
- } catch os.abort();
+ } catch posix.abort();
switch (native_arch) {
.x86,
@@ -2641,7 +2638,7 @@ fn dumpSegfaultInfoPosix(sig: i32, code: i32, addr: usize, ctx_ptr: ?*const anyo
.arm,
.aarch64,
=> {
- const ctx: *const os.ucontext_t = @ptrCast(@alignCast(ctx_ptr));
+ const ctx: *const posix.ucontext_t = @ptrCast(@alignCast(ctx_ptr));
dumpStackTraceFromBase(ctx);
},
else => {},
@@ -2684,7 +2681,7 @@ fn handleSegfaultWindowsExtra(
dumpSegfaultInfoWindows(info, msg, label);
},
};
- os.abort();
+ posix.abort();
} else {
switch (msg) {
0 => panicImpl(null, exception_address, "{s}", label.?),
@@ -2707,7 +2704,7 @@ fn dumpSegfaultInfoWindows(info: *windows.EXCEPTION_POINTERS, msg: u8, label: ?[
1 => stderr.print("Segmentation fault at address 0x{x}\n", .{info.ExceptionRecord.ExceptionInformation[1]}),
2 => stderr.print("Illegal instruction at address 0x{x}\n", .{info.ContextRecord.getRegs().ip}),
else => unreachable,
- } catch os.abort();
+ } catch posix.abort();
dumpStackTraceFromBase(info.ContextRecord);
}
@@ -2722,9 +2719,9 @@ pub fn dumpStackPointerAddr(prefix: []const u8) void {
test "manage resources correctly" {
if (builtin.strip_debug_info) return error.SkipZigTest;
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
// https://github.com/ziglang/zig/issues/13963
return error.SkipZigTest;
}
diff --git a/lib/std/dwarf.zig b/lib/std/dwarf.zig
index b59f535691..a0f5a7f0a8 100644
--- a/lib/std/dwarf.zig
+++ b/lib/std/dwarf.zig
@@ -2188,12 +2188,12 @@ pub fn openDwarfDebugInfo(di: *DwarfInfo, allocator: mem.Allocator) !void {
/// This function is to make it handy to comment out the return and make it
/// into a crash when working on this file.
fn badDwarf() error{InvalidDebugInfo} {
- //std.os.abort(); // can be handy to uncomment when working on this file
+ //if (true) @panic("badDwarf"); // can be handy to uncomment when working on this file
return error.InvalidDebugInfo;
}
fn missingDwarf() error{MissingDebugInfo} {
- //std.os.abort(); // can be handy to uncomment when working on this file
+ //if (true) @panic("missingDwarf"); // can be handy to uncomment when working on this file
return error.MissingDebugInfo;
}
diff --git a/lib/std/dwarf/abi.zig b/lib/std/dwarf/abi.zig
index 7130341e8d..75ff3d1e9e 100644
--- a/lib/std/dwarf/abi.zig
+++ b/lib/std/dwarf/abi.zig
@@ -1,7 +1,8 @@
const builtin = @import("builtin");
const std = @import("../std.zig");
-const os = std.os;
const mem = std.mem;
+const native_os = builtin.os.tag;
+const posix = std.posix;
pub fn supportsUnwinding(target: std.Target) bool {
return switch (target.cpu.arch) {
@@ -138,7 +139,7 @@ pub fn regBytes(
reg_number: u8,
reg_context: ?RegisterContext,
) AbiError!RegBytesReturnType(@TypeOf(thread_context_ptr)) {
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
return switch (builtin.cpu.arch) {
.x86 => switch (reg_number) {
0 => mem.asBytes(&thread_context_ptr.Eax),
@@ -193,61 +194,61 @@ pub fn regBytes(
const ucontext_ptr = thread_context_ptr;
return switch (builtin.cpu.arch) {
- .x86 => switch (builtin.os.tag) {
+ .x86 => switch (native_os) {
.linux, .netbsd, .solaris, .illumos => switch (reg_number) {
- 0 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.EAX]),
- 1 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.ECX]),
- 2 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.EDX]),
- 3 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.EBX]),
+ 0 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.EAX]),
+ 1 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.ECX]),
+ 2 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.EDX]),
+ 3 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.EBX]),
4...5 => if (reg_context) |r| bytes: {
if (reg_number == 4) {
break :bytes if (r.eh_frame and r.is_macho)
- mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.EBP])
+ mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.EBP])
else
- mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.ESP]);
+ mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.ESP]);
} else {
break :bytes if (r.eh_frame and r.is_macho)
- mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.ESP])
+ mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.ESP])
else
- mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.EBP]);
+ mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.EBP]);
}
} else error.RegisterContextRequired,
- 6 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.ESI]),
- 7 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.EDI]),
- 8 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.EIP]),
- 9 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.EFL]),
- 10 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.CS]),
- 11 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.SS]),
- 12 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.DS]),
- 13 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.ES]),
- 14 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.FS]),
- 15 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.GS]),
+ 6 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.ESI]),
+ 7 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.EDI]),
+ 8 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.EIP]),
+ 9 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.EFL]),
+ 10 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.CS]),
+ 11 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.SS]),
+ 12 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.DS]),
+ 13 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.ES]),
+ 14 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.FS]),
+ 15 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.GS]),
16...23 => error.InvalidRegister, // TODO: Support loading ST0-ST7 from mcontext.fpregs
32...39 => error.InvalidRegister, // TODO: Support loading XMM0-XMM7 from mcontext.fpregs
else => error.InvalidRegister,
},
else => error.UnimplementedOs,
},
- .x86_64 => switch (builtin.os.tag) {
+ .x86_64 => switch (native_os) {
.linux, .solaris, .illumos => switch (reg_number) {
- 0 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RAX]),
- 1 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RDX]),
- 2 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RCX]),
- 3 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RBX]),
- 4 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RSI]),
- 5 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RDI]),
- 6 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RBP]),
- 7 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RSP]),
- 8 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.R8]),
- 9 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.R9]),
- 10 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.R10]),
- 11 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.R11]),
- 12 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.R12]),
- 13 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.R13]),
- 14 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.R14]),
- 15 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.R15]),
- 16 => mem.asBytes(&ucontext_ptr.mcontext.gregs[os.REG.RIP]),
- 17...32 => |i| if (builtin.os.tag.isSolarish())
+ 0 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RAX]),
+ 1 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RDX]),
+ 2 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RCX]),
+ 3 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RBX]),
+ 4 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RSI]),
+ 5 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RDI]),
+ 6 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RBP]),
+ 7 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RSP]),
+ 8 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.R8]),
+ 9 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.R9]),
+ 10 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.R10]),
+ 11 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.R11]),
+ 12 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.R12]),
+ 13 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.R13]),
+ 14 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.R14]),
+ 15 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.R15]),
+ 16 => mem.asBytes(&ucontext_ptr.mcontext.gregs[posix.REG.RIP]),
+ 17...32 => |i| if (native_os.isSolarish())
mem.asBytes(&ucontext_ptr.mcontext.fpregs.chip_state.xmm[i - 17])
else
mem.asBytes(&ucontext_ptr.mcontext.fpregs.xmm[i - 17]),
@@ -317,7 +318,7 @@ pub fn regBytes(
},
else => error.UnimplementedOs,
},
- .arm => switch (builtin.os.tag) {
+ .arm => switch (native_os) {
.linux => switch (reg_number) {
0 => mem.asBytes(&ucontext_ptr.mcontext.arm_r0),
1 => mem.asBytes(&ucontext_ptr.mcontext.arm_r1),
@@ -340,7 +341,7 @@ pub fn regBytes(
},
else => error.UnimplementedOs,
},
- .aarch64 => switch (builtin.os.tag) {
+ .aarch64 => switch (native_os) {
.macos, .ios => switch (reg_number) {
0...28 => mem.asBytes(&ucontext_ptr.mcontext.ss.regs[reg_number]),
29 => mem.asBytes(&ucontext_ptr.mcontext.ss.fp),
diff --git a/lib/std/dynamic_library.zig b/lib/std/dynamic_library.zig
index 7a31c39f44..a6ef8ac6c7 100644
--- a/lib/std/dynamic_library.zig
+++ b/lib/std/dynamic_library.zig
@@ -1,16 +1,16 @@
const std = @import("std.zig");
const builtin = @import("builtin");
const mem = std.mem;
-const os = std.os;
const testing = std.testing;
const elf = std.elf;
const windows = std.os.windows;
-const system = std.os.system;
+const native_os = builtin.os.tag;
+const posix = std.posix;
/// Cross-platform dynamic library loading and symbol lookup.
/// Platform-specific functionality is available through the `inner` field.
pub const DynLib = struct {
- const InnerType = switch (builtin.os.tag) {
+ const InnerType = switch (native_os) {
.linux => if (!builtin.link_libc or builtin.abi == .musl and builtin.link_mode == .static)
ElfDynLib
else
@@ -125,7 +125,7 @@ pub fn linkmap_iterator(phdrs: []elf.Phdr) error{InvalidExe}!LinkMap.Iterator {
pub const ElfDynLib = struct {
strings: [*:0]u8,
syms: [*]elf.Sym,
- hashtab: [*]os.Elf_Symndx,
+ hashtab: [*]posix.Elf_Symndx,
versym: ?[*]u16,
verdef: ?*elf.Verdef,
memory: []align(mem.page_size) u8,
@@ -138,27 +138,27 @@ pub const ElfDynLib = struct {
ElfStringSectionNotFound,
ElfSymSectionNotFound,
ElfHashTableNotFound,
- } || os.OpenError || os.MMapError;
+ } || posix.OpenError || posix.MMapError;
/// Trusts the file. Malicious file will be able to execute arbitrary code.
pub fn open(path: []const u8) Error!ElfDynLib {
- const fd = try os.open(path, .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
- defer os.close(fd);
+ const fd = try posix.open(path, .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
+ defer posix.close(fd);
- const stat = try os.fstat(fd);
+ const stat = try posix.fstat(fd);
const size = std.math.cast(usize, stat.size) orelse return error.FileTooBig;
// This one is to read the ELF info. We do more mmapping later
// corresponding to the actual LOAD sections.
- const file_bytes = try os.mmap(
+ const file_bytes = try posix.mmap(
null,
mem.alignForward(usize, size, mem.page_size),
- os.PROT.READ,
+ posix.PROT.READ,
.{ .TYPE = .PRIVATE },
fd,
0,
);
- defer os.munmap(file_bytes);
+ defer posix.munmap(file_bytes);
const eh = @as(*elf.Ehdr, @ptrCast(file_bytes.ptr));
if (!mem.eql(u8, eh.e_ident[0..4], elf.MAGIC)) return error.NotElfFile;
@@ -188,15 +188,15 @@ pub const ElfDynLib = struct {
const dynv = maybe_dynv orelse return error.MissingDynamicLinkingInformation;
// Reserve the entire range (with no permissions) so that we can do MAP.FIXED below.
- const all_loaded_mem = try os.mmap(
+ const all_loaded_mem = try posix.mmap(
null,
virt_addr_end,
- os.PROT.NONE,
+ posix.PROT.NONE,
.{ .TYPE = .PRIVATE, .ANONYMOUS = true },
-1,
0,
);
- errdefer os.munmap(all_loaded_mem);
+ errdefer posix.munmap(all_loaded_mem);
const base = @intFromPtr(all_loaded_mem.ptr);
@@ -220,7 +220,7 @@ pub const ElfDynLib = struct {
const prot = elfToMmapProt(ph.p_flags);
if ((ph.p_flags & elf.PF_W) == 0) {
// If it does not need write access, it can be mapped from the fd.
- _ = try os.mmap(
+ _ = try posix.mmap(
ptr,
extended_memsz,
prot,
@@ -229,7 +229,7 @@ pub const ElfDynLib = struct {
ph.p_offset - extra_bytes,
);
} else {
- const sect_mem = try os.mmap(
+ const sect_mem = try posix.mmap(
ptr,
extended_memsz,
prot,
@@ -247,7 +247,7 @@ pub const ElfDynLib = struct {
var maybe_strings: ?[*:0]u8 = null;
var maybe_syms: ?[*]elf.Sym = null;
- var maybe_hashtab: ?[*]os.Elf_Symndx = null;
+ var maybe_hashtab: ?[*]posix.Elf_Symndx = null;
var maybe_versym: ?[*]u16 = null;
var maybe_verdef: ?*elf.Verdef = null;
@@ -258,7 +258,7 @@ pub const ElfDynLib = struct {
switch (dynv[i]) {
elf.DT_STRTAB => maybe_strings = @as([*:0]u8, @ptrFromInt(p)),
elf.DT_SYMTAB => maybe_syms = @as([*]elf.Sym, @ptrFromInt(p)),
- elf.DT_HASH => maybe_hashtab = @as([*]os.Elf_Symndx, @ptrFromInt(p)),
+ elf.DT_HASH => maybe_hashtab = @as([*]posix.Elf_Symndx, @ptrFromInt(p)),
elf.DT_VERSYM => maybe_versym = @as([*]u16, @ptrFromInt(p)),
elf.DT_VERDEF => maybe_verdef = @as(*elf.Verdef, @ptrFromInt(p)),
else => {},
@@ -283,7 +283,7 @@ pub const ElfDynLib = struct {
/// Trusts the file
pub fn close(self: *ElfDynLib) void {
- os.munmap(self.memory);
+ posix.munmap(self.memory);
self.* = undefined;
}
@@ -320,10 +320,10 @@ pub const ElfDynLib = struct {
}
fn elfToMmapProt(elf_prot: u64) u32 {
- var result: u32 = os.PROT.NONE;
- if ((elf_prot & elf.PF_R) != 0) result |= os.PROT.READ;
- if ((elf_prot & elf.PF_W) != 0) result |= os.PROT.WRITE;
- if ((elf_prot & elf.PF_X) != 0) result |= os.PROT.EXEC;
+ var result: u32 = posix.PROT.NONE;
+ if ((elf_prot & elf.PF_R) != 0) result |= posix.PROT.READ;
+ if ((elf_prot & elf.PF_W) != 0) result |= posix.PROT.WRITE;
+ if ((elf_prot & elf.PF_X) != 0) result |= posix.PROT.EXEC;
return result;
}
};
@@ -343,7 +343,7 @@ fn checkver(def_arg: *elf.Verdef, vsym_arg: i32, vername: []const u8, strings: [
}
test "ElfDynLib" {
- if (builtin.os.tag != .linux) {
+ if (native_os != .linux) {
return error.SkipZigTest;
}
@@ -419,20 +419,20 @@ pub const DlDynLib = struct {
handle: *anyopaque,
pub fn open(path: []const u8) Error!DlDynLib {
- const path_c = try os.toPosixPath(path);
+ const path_c = try posix.toPosixPath(path);
return openZ(&path_c);
}
pub fn openZ(path_c: [*:0]const u8) Error!DlDynLib {
return .{
- .handle = system.dlopen(path_c, system.RTLD.LAZY) orelse {
+ .handle = std.c.dlopen(path_c, std.c.RTLD.LAZY) orelse {
return error.FileNotFound;
},
};
}
pub fn close(self: *DlDynLib) void {
- switch (std.os.errno(system.dlclose(self.handle))) {
+ switch (posix.errno(std.c.dlclose(self.handle))) {
.SUCCESS => return,
else => unreachable,
}
@@ -442,7 +442,7 @@ pub const DlDynLib = struct {
pub fn lookup(self: *DlDynLib, comptime T: type, name: [:0]const u8) ?T {
// dlsym (and other dl-functions) secretly take shadow parameter - return address on stack
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66826
- if (@call(.never_tail, system.dlsym, .{ self.handle, name.ptr })) |symbol| {
+ if (@call(.never_tail, std.c.dlsym, .{ self.handle, name.ptr })) |symbol| {
return @as(T, @ptrCast(@alignCast(symbol)));
} else {
return null;
@@ -453,12 +453,12 @@ pub const DlDynLib = struct {
/// Returns human readable string describing most recent error than occurred from `lookup`
/// or `null` if no error has occurred since initialization or when `getError` was last called.
pub fn getError() ?[:0]const u8 {
- return mem.span(system.dlerror());
+ return mem.span(std.c.dlerror());
}
};
test "dynamic_library" {
- const libname = switch (builtin.os.tag) {
+ const libname = switch (native_os) {
.linux, .freebsd, .openbsd, .solaris, .illumos => "invalid_so.so",
.windows => "invalid_dll.dll",
.macos, .tvos, .watchos, .ios => "invalid_dylib.dylib",
diff --git a/lib/std/fmt.zig b/lib/std/fmt.zig
index e1a122510a..e5b359d30f 100644
--- a/lib/std/fmt.zig
+++ b/lib/std/fmt.zig
@@ -9,7 +9,6 @@ const assert = std.debug.assert;
const mem = std.mem;
const unicode = std.unicode;
const meta = std.meta;
-const ryu128 = @import("fmt/ryu128.zig");
const lossyCast = std.math.lossyCast;
const expectFmt = std.testing.expectFmt;
@@ -757,21 +756,25 @@ pub fn formatIntValue(
return formatInt(int_value, base, case, options, writer);
}
+pub const format_float = @import("fmt/format_float.zig");
+pub const formatFloat = format_float.formatFloat;
+pub const FormatFloatError = format_float.FormatError;
+
fn formatFloatValue(
value: anytype,
comptime fmt: []const u8,
options: FormatOptions,
writer: anytype,
) !void {
- var buf: [ryu128.bufferSize(.decimal, f64)]u8 = undefined;
+ var buf: [format_float.bufferSize(.decimal, f64)]u8 = undefined;
if (fmt.len == 0 or comptime std.mem.eql(u8, fmt, "e")) {
- const s = ryu128.format(&buf, value, .{ .mode = .scientific, .precision = options.precision }) catch |err| switch (err) {
+ const s = formatFloat(&buf, value, .{ .mode = .scientific, .precision = options.precision }) catch |err| switch (err) {
error.BufferTooSmall => "(float)",
};
return formatBuf(s, options, writer);
} else if (comptime std.mem.eql(u8, fmt, "d")) {
- const s = ryu128.format(&buf, value, .{ .mode = .decimal, .precision = options.precision }) catch |err| switch (err) {
+ const s = formatFloat(&buf, value, .{ .mode = .decimal, .precision = options.precision }) catch |err| switch (err) {
error.BufferTooSmall => "(float)",
};
return formatBuf(s, options, writer);
@@ -787,7 +790,7 @@ fn formatFloatValue(
}
test {
- _ = &ryu128;
+ _ = &format_float;
}
pub const Case = enum { lower, upper };
@@ -890,7 +893,7 @@ fn formatSizeImpl(comptime base: comptime_int) type {
return formatBuf("0B", options, writer);
}
// The worst case in terms of space needed is 32 bytes + 3 for the suffix.
- var buf: [ryu128.min_buffer_size + 3]u8 = undefined;
+ var buf: [format_float.min_buffer_size + 3]u8 = undefined;
const mags_si = " kMGTPEZY";
const mags_iec = " KMGTPEZY";
@@ -908,7 +911,7 @@ fn formatSizeImpl(comptime base: comptime_int) type {
else => unreachable,
};
- const s = ryu128.format(&buf, new_value, .{ .mode = .decimal, .precision = options.precision }) catch |err| switch (err) {
+ const s = formatFloat(&buf, new_value, .{ .mode = .decimal, .precision = options.precision }) catch |err| switch (err) {
error.BufferTooSmall => unreachable,
};
diff --git a/lib/std/fmt/ryu128.zig b/lib/std/fmt/format_float.zig
index c67311ac36..b2194099bb 100644
--- a/lib/std/fmt/ryu128.zig
+++ b/lib/std/fmt/format_float.zig
@@ -27,7 +27,7 @@ pub fn bufferSize(comptime mode: Format, comptime T: type) comptime_int {
};
}
-pub const RyuError = error{
+pub const FormatError = error{
BufferTooSmall,
};
@@ -52,7 +52,7 @@ pub const FormatOptions = struct {
///
/// When printing full precision decimals, use `bufferSize` to get the required space. It is
/// recommended to bound decimal output with a fixed precision to reduce the required buffer size.
-pub fn format(buf: []u8, v_: anytype, options: FormatOptions) RyuError![]const u8 {
+pub fn formatFloat(buf: []u8, v_: anytype, options: FormatOptions) FormatError![]const u8 {
const v = switch (@TypeOf(v_)) {
// comptime_float internally is a f128; this preserves precision.
comptime_float => @as(f128, v_),
@@ -182,7 +182,7 @@ fn round(f: FloatDecimal128, mode: RoundMode, precision: usize) FloatDecimal128
/// will not fit.
///
/// It is recommended to bound decimal formatting with an exact precision.
-pub fn formatScientific(buf: []u8, f_: FloatDecimal128, precision: ?usize) RyuError![]const u8 {
+pub fn formatScientific(buf: []u8, f_: FloatDecimal128, precision: ?usize) FormatError![]const u8 {
std.debug.assert(buf.len >= min_buffer_size);
var f = f_;
@@ -253,7 +253,7 @@ pub fn formatScientific(buf: []u8, f_: FloatDecimal128, precision: ?usize) RyuEr
/// The buffer provided must be greater than `min_buffer_size` bytes in length. If no precision is
/// specified, this may still return an error. If precision is specified, `2 + precision` bytes will
/// always be written.
-pub fn formatDecimal(buf: []u8, f_: FloatDecimal128, precision: ?usize) RyuError![]const u8 {
+pub fn formatDecimal(buf: []u8, f_: FloatDecimal128, precision: ?usize) FormatError![]const u8 {
std.debug.assert(buf.len >= min_buffer_size);
var f = f_;
@@ -964,7 +964,7 @@ fn check(comptime T: type, value: T, comptime expected: []const u8) !void {
var buf: [6000]u8 = undefined;
const value_bits: I = @bitCast(value);
- const s = try format(&buf, value, .{});
+ const s = try formatFloat(&buf, value, .{});
try std.testing.expectEqualStrings(expected, s);
if (@bitSizeOf(T) != 80) {
diff --git a/lib/std/fs.zig b/lib/std/fs.zig
index 5c6e8c9c3a..109ce7fe23 100644
--- a/lib/std/fs.zig
+++ b/lib/std/fs.zig
@@ -3,21 +3,23 @@
const std = @import("std.zig");
const builtin = @import("builtin");
const root = @import("root");
-const os = std.os;
const mem = std.mem;
const base64 = std.base64;
const crypto = std.crypto;
const Allocator = std.mem.Allocator;
const assert = std.debug.assert;
+const native_os = builtin.os.tag;
+const posix = std.posix;
+const windows = std.os.windows;
-const is_darwin = builtin.os.tag.isDarwin();
+const is_darwin = native_os.isDarwin();
pub const AtomicFile = @import("fs/AtomicFile.zig");
pub const Dir = @import("fs/Dir.zig");
pub const File = @import("fs/File.zig");
pub const path = @import("fs/path.zig");
-pub const has_executable_bit = switch (builtin.os.tag) {
+pub const has_executable_bit = switch (native_os) {
.windows, .wasi => false,
else => true,
};
@@ -26,36 +28,41 @@ pub const wasi = @import("fs/wasi.zig");
// TODO audit these APIs with respect to Dir and absolute paths
-pub const realpath = os.realpath;
-pub const realpathZ = os.realpathZ;
-pub const realpathW = os.realpathW;
+pub const realpath = posix.realpath;
+pub const realpathZ = posix.realpathZ;
+pub const realpathW = posix.realpathW;
pub const getAppDataDir = @import("fs/get_app_data_dir.zig").getAppDataDir;
pub const GetAppDataDirError = @import("fs/get_app_data_dir.zig").GetAppDataDirError;
-/// This represents the maximum size of a `[]u8` file path that the
-/// operating system will accept. Paths, including those returned from file
-/// system operations, may be longer than this length, but such paths cannot
-/// be successfully passed back in other file system operations. However,
-/// all path components returned by file system operations are assumed to
-/// fit into a `u8` array of this length.
+/// Deprecated: use `max_path_bytes`.
+pub const MAX_PATH_BYTES = max_path_bytes;
+
+/// The maximum length of a file path that the operating system will accept.
+///
+/// Paths, including those returned from file system operations, may be longer
+/// than this length, but such paths cannot be successfully passed back in
+/// other file system operations. However, all path components returned by file
+/// system operations are assumed to fit into a `u8` array of this length.
+///
/// The byte count includes room for a null sentinel byte.
-/// On Windows, `[]u8` file paths are encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `[]u8` file paths are encoded as valid UTF-8.
-/// On other platforms, `[]u8` file paths are opaque sequences of bytes with no particular encoding.
-pub const MAX_PATH_BYTES = switch (builtin.os.tag) {
- .linux, .macos, .ios, .freebsd, .openbsd, .netbsd, .dragonfly, .haiku, .solaris, .illumos, .plan9, .emscripten => os.PATH_MAX,
+///
+/// * On Windows, `[]u8` file paths are encoded as
+/// [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// * On WASI, `[]u8` file paths are encoded as valid UTF-8.
+/// * On other platforms, `[]u8` file paths are opaque sequences of bytes with
+/// no particular encoding.
+pub const max_path_bytes = switch (native_os) {
+ .linux, .macos, .ios, .freebsd, .openbsd, .netbsd, .dragonfly, .haiku, .solaris, .illumos, .plan9, .emscripten, .wasi => posix.PATH_MAX,
// Each WTF-16LE code unit may be expanded to 3 WTF-8 bytes.
// If it would require 4 WTF-8 bytes, then there would be a surrogate
// pair in the WTF-16LE, and we (over)account 3 bytes for it that way.
// +1 for the null byte at the end, which can be encoded in 1 byte.
- .windows => os.windows.PATH_MAX_WIDE * 3 + 1,
- // TODO work out what a reasonable value we should use here
- .wasi => 4096,
+ .windows => windows.PATH_MAX_WIDE * 3 + 1,
else => if (@hasDecl(root, "os") and @hasDecl(root.os, "PATH_MAX"))
root.os.PATH_MAX
else
- @compileError("PATH_MAX not implemented for " ++ @tagName(builtin.os.tag)),
+ @compileError("PATH_MAX not implemented for " ++ @tagName(native_os)),
};
/// This represents the maximum size of a `[]u8` file name component that
@@ -66,22 +73,22 @@ pub const MAX_PATH_BYTES = switch (builtin.os.tag) {
/// On Windows, `[]u8` file name components are encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
/// On WASI, file name components are encoded as valid UTF-8.
/// On other platforms, `[]u8` components are an opaque sequence of bytes with no particular encoding.
-pub const MAX_NAME_BYTES = switch (builtin.os.tag) {
- .linux, .macos, .ios, .freebsd, .openbsd, .netbsd, .dragonfly, .solaris, .illumos => os.NAME_MAX,
+pub const MAX_NAME_BYTES = switch (native_os) {
+ .linux, .macos, .ios, .freebsd, .openbsd, .netbsd, .dragonfly, .solaris, .illumos => posix.NAME_MAX,
// Haiku's NAME_MAX includes the null terminator, so subtract one.
- .haiku => os.NAME_MAX - 1,
+ .haiku => posix.NAME_MAX - 1,
// Each WTF-16LE character may be expanded to 3 WTF-8 bytes.
// If it would require 4 WTF-8 bytes, then there would be a surrogate
// pair in the WTF-16LE, and we (over)account 3 bytes for it that way.
- .windows => os.windows.NAME_MAX * 3,
+ .windows => windows.NAME_MAX * 3,
// For WASI, the MAX_NAME will depend on the host OS, so it needs to be
// as large as the largest MAX_NAME_BYTES (Windows) in order to work on any host OS.
// TODO determine if this is a reasonable approach
- .wasi => os.windows.NAME_MAX * 3,
+ .wasi => windows.NAME_MAX * 3,
else => if (@hasDecl(root, "os") and @hasDecl(root.os, "NAME_MAX"))
root.os.NAME_MAX
else
- @compileError("NAME_MAX not implemented for " ++ @tagName(builtin.os.tag)),
+ @compileError("NAME_MAX not implemented for " ++ @tagName(native_os)),
};
pub const base64_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".*;
@@ -167,19 +174,19 @@ pub fn copyFileAbsolute(
/// On other platforms, `absolute_path` is an opaque sequence of bytes with no particular encoding.
pub fn makeDirAbsolute(absolute_path: []const u8) !void {
assert(path.isAbsolute(absolute_path));
- return os.mkdir(absolute_path, Dir.default_mode);
+ return posix.mkdir(absolute_path, Dir.default_mode);
}
/// Same as `makeDirAbsolute` except the parameter is null-terminated.
pub fn makeDirAbsoluteZ(absolute_path_z: [*:0]const u8) !void {
assert(path.isAbsoluteZ(absolute_path_z));
- return os.mkdirZ(absolute_path_z, Dir.default_mode);
+ return posix.mkdirZ(absolute_path_z, Dir.default_mode);
}
/// Same as `makeDirAbsolute` except the parameter is a null-terminated WTF-16 LE-encoded string.
pub fn makeDirAbsoluteW(absolute_path_w: [*:0]const u16) !void {
assert(path.isAbsoluteWindowsW(absolute_path_w));
- return os.mkdirW(absolute_path_w, Dir.default_mode);
+ return posix.mkdirW(absolute_path_w, Dir.default_mode);
}
/// Same as `Dir.deleteDir` except the path is absolute.
@@ -188,19 +195,19 @@ pub fn makeDirAbsoluteW(absolute_path_w: [*:0]const u16) !void {
/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
pub fn deleteDirAbsolute(dir_path: []const u8) !void {
assert(path.isAbsolute(dir_path));
- return os.rmdir(dir_path);
+ return posix.rmdir(dir_path);
}
/// Same as `deleteDirAbsolute` except the path parameter is null-terminated.
pub fn deleteDirAbsoluteZ(dir_path: [*:0]const u8) !void {
assert(path.isAbsoluteZ(dir_path));
- return os.rmdirZ(dir_path);
+ return posix.rmdirZ(dir_path);
}
/// Same as `deleteDirAbsolute` except the path parameter is WTF-16 and target OS is assumed Windows.
pub fn deleteDirAbsoluteW(dir_path: [*:0]const u16) !void {
assert(path.isAbsoluteWindowsW(dir_path));
- return os.rmdirW(dir_path);
+ return posix.rmdirW(dir_path);
}
/// Same as `Dir.rename` except the paths are absolute.
@@ -210,49 +217,49 @@ pub fn deleteDirAbsoluteW(dir_path: [*:0]const u16) !void {
pub fn renameAbsolute(old_path: []const u8, new_path: []const u8) !void {
assert(path.isAbsolute(old_path));
assert(path.isAbsolute(new_path));
- return os.rename(old_path, new_path);
+ return posix.rename(old_path, new_path);
}
/// Same as `renameAbsolute` except the path parameters are null-terminated.
pub fn renameAbsoluteZ(old_path: [*:0]const u8, new_path: [*:0]const u8) !void {
assert(path.isAbsoluteZ(old_path));
assert(path.isAbsoluteZ(new_path));
- return os.renameZ(old_path, new_path);
+ return posix.renameZ(old_path, new_path);
}
/// Same as `renameAbsolute` except the path parameters are WTF-16 and target OS is assumed Windows.
pub fn renameAbsoluteW(old_path: [*:0]const u16, new_path: [*:0]const u16) !void {
assert(path.isAbsoluteWindowsW(old_path));
assert(path.isAbsoluteWindowsW(new_path));
- return os.renameW(old_path, new_path);
+ return posix.renameW(old_path, new_path);
}
/// Same as `Dir.rename`, except `new_sub_path` is relative to `new_dir`
pub fn rename(old_dir: Dir, old_sub_path: []const u8, new_dir: Dir, new_sub_path: []const u8) !void {
- return os.renameat(old_dir.fd, old_sub_path, new_dir.fd, new_sub_path);
+ return posix.renameat(old_dir.fd, old_sub_path, new_dir.fd, new_sub_path);
}
/// Same as `rename` except the parameters are null-terminated.
pub fn renameZ(old_dir: Dir, old_sub_path_z: [*:0]const u8, new_dir: Dir, new_sub_path_z: [*:0]const u8) !void {
- return os.renameatZ(old_dir.fd, old_sub_path_z, new_dir.fd, new_sub_path_z);
+ return posix.renameatZ(old_dir.fd, old_sub_path_z, new_dir.fd, new_sub_path_z);
}
/// Same as `rename` except the parameters are WTF16LE, NT prefixed.
/// This function is Windows-only.
pub fn renameW(old_dir: Dir, old_sub_path_w: []const u16, new_dir: Dir, new_sub_path_w: []const u16) !void {
- return os.renameatW(old_dir.fd, old_sub_path_w, new_dir.fd, new_sub_path_w);
+ return posix.renameatW(old_dir.fd, old_sub_path_w, new_dir.fd, new_sub_path_w);
}
/// Returns a handle to the current working directory. It is not opened with iteration capability.
/// Closing the returned `Dir` is checked illegal behavior. Iterating over the result is illegal behavior.
/// On POSIX targets, this function is comptime-callable.
pub fn cwd() Dir {
- if (builtin.os.tag == .windows) {
- return .{ .fd = os.windows.peb().ProcessParameters.CurrentDirectory.Handle };
- } else if (builtin.os.tag == .wasi) {
+ if (native_os == .windows) {
+ return .{ .fd = windows.peb().ProcessParameters.CurrentDirectory.Handle };
+ } else if (native_os == .wasi) {
return .{ .fd = std.options.wasiCwd() };
} else {
- return .{ .fd = os.AT.FDCWD };
+ return .{ .fd = posix.AT.FDCWD };
}
}
@@ -412,20 +419,20 @@ pub fn deleteTreeAbsolute(absolute_path: []const u8) !void {
/// On other platforms, `pathname` is an opaque sequence of bytes with no particular encoding.
pub fn readLinkAbsolute(pathname: []const u8, buffer: *[MAX_PATH_BYTES]u8) ![]u8 {
assert(path.isAbsolute(pathname));
- return os.readlink(pathname, buffer);
+ return posix.readlink(pathname, buffer);
}
/// Windows-only. Same as `readlinkW`, except the path parameter is null-terminated, WTF16
/// encoded.
pub fn readlinkAbsoluteW(pathname_w: [*:0]const u16, buffer: *[MAX_PATH_BYTES]u8) ![]u8 {
assert(path.isAbsoluteWindowsW(pathname_w));
- return os.readlinkW(pathname_w, buffer);
+ return posix.readlinkW(pathname_w, buffer);
}
/// Same as `readLink`, except the path parameter is null-terminated.
pub fn readLinkAbsoluteZ(pathname_c: [*:0]const u8, buffer: *[MAX_PATH_BYTES]u8) ![]u8 {
assert(path.isAbsoluteZ(pathname_c));
- return os.readlinkZ(pathname_c, buffer);
+ return posix.readlinkZ(pathname_c, buffer);
}
/// Creates a symbolic link named `sym_link_path` which contains the string `target_path`.
@@ -443,12 +450,12 @@ pub fn symLinkAbsolute(
) !void {
assert(path.isAbsolute(target_path));
assert(path.isAbsolute(sym_link_path));
- if (builtin.os.tag == .windows) {
- const target_path_w = try os.windows.sliceToPrefixedFileW(null, target_path);
- const sym_link_path_w = try os.windows.sliceToPrefixedFileW(null, sym_link_path);
- return os.windows.CreateSymbolicLink(null, sym_link_path_w.span(), target_path_w.span(), flags.is_directory);
+ if (native_os == .windows) {
+ const target_path_w = try windows.sliceToPrefixedFileW(null, target_path);
+ const sym_link_path_w = try windows.sliceToPrefixedFileW(null, sym_link_path);
+ return windows.CreateSymbolicLink(null, sym_link_path_w.span(), target_path_w.span(), flags.is_directory);
}
- return os.symlink(target_path, sym_link_path);
+ return posix.symlink(target_path, sym_link_path);
}
/// Windows-only. Same as `symLinkAbsolute` except the parameters are null-terminated, WTF16 LE encoded.
@@ -462,7 +469,7 @@ pub fn symLinkAbsoluteW(
) !void {
assert(path.isAbsoluteWindowsWTF16(target_path_w));
assert(path.isAbsoluteWindowsWTF16(sym_link_path_w));
- return os.windows.CreateSymbolicLink(null, sym_link_path_w, target_path_w, flags.is_directory);
+ return windows.CreateSymbolicLink(null, sym_link_path_w, target_path_w, flags.is_directory);
}
/// Same as `symLinkAbsolute` except the parameters are null-terminated pointers.
@@ -474,27 +481,27 @@ pub fn symLinkAbsoluteZ(
) !void {
assert(path.isAbsoluteZ(target_path_c));
assert(path.isAbsoluteZ(sym_link_path_c));
- if (builtin.os.tag == .windows) {
- const target_path_w = try os.windows.cStrToPrefixedFileW(null, target_path_c);
- const sym_link_path_w = try os.windows.cStrToPrefixedFileW(null, sym_link_path_c);
- return os.windows.CreateSymbolicLink(null, sym_link_path_w.span(), target_path_w.span(), flags.is_directory);
+ if (native_os == .windows) {
+ const target_path_w = try windows.cStrToPrefixedFileW(null, target_path_c);
+ const sym_link_path_w = try windows.cStrToPrefixedFileW(null, sym_link_path_c);
+ return windows.CreateSymbolicLink(null, sym_link_path_w.span(), target_path_w.span(), flags.is_directory);
}
- return os.symlinkZ(target_path_c, sym_link_path_c);
+ return posix.symlinkZ(target_path_c, sym_link_path_c);
}
-pub const OpenSelfExeError = os.OpenError || SelfExePathError || os.FlockError;
+pub const OpenSelfExeError = posix.OpenError || SelfExePathError || posix.FlockError;
pub fn openSelfExe(flags: File.OpenFlags) OpenSelfExeError!File {
- if (builtin.os.tag == .linux) {
+ if (native_os == .linux) {
return openFileAbsoluteZ("/proc/self/exe", flags);
}
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
// If ImagePathName is a symlink, then it will contain the path of the symlink,
// not the path that the symlink points to. However, because we are opening
// the file, we can let the openFileW call follow the symlink for us.
- const image_path_unicode_string = &os.windows.peb().ProcessParameters.ImagePathName;
+ const image_path_unicode_string = &windows.peb().ProcessParameters.ImagePathName;
const image_path_name = image_path_unicode_string.Buffer.?[0 .. image_path_unicode_string.Length / 2 :0];
- const prefixed_path_w = try os.windows.wToPrefixedFileW(null, image_path_name);
+ const prefixed_path_w = try windows.wToPrefixedFileW(null, image_path_name);
return cwd().openFileW(prefixed_path_w.span(), flags);
}
// Use of MAX_PATH_BYTES here is valid as the resulting path is immediately
@@ -505,7 +512,7 @@ pub fn openSelfExe(flags: File.OpenFlags) OpenSelfExeError!File {
return openFileAbsoluteZ(buf[0..self_exe_path.len :0].ptr, flags);
}
-// This is os.ReadLinkError || os.RealPathError with impossible errors excluded
+// This is `posix.ReadLinkError || posix.RealPathError` with impossible errors excluded
pub const SelfExePathError = error{
FileNotFound,
AccessDenied,
@@ -542,7 +549,7 @@ pub const SelfExePathError = error{
/// On Windows, the volume does not contain a recognized file system. File
/// system drivers might not be loaded, or the volume may be corrupt.
UnrecognizedVolume,
-} || os.SysCtlError;
+} || posix.SysCtlError;
/// `selfExePath` except allocates the result on the heap.
/// Caller owns returned memory.
@@ -580,7 +587,7 @@ pub fn selfExePath(out_buffer: []u8) SelfExePathError![]u8 {
if (rc != 0) return error.NameTooLong;
var real_path_buf: [MAX_PATH_BYTES]u8 = undefined;
- const real_path = std.os.realpathZ(&symlink_path_buf, &real_path_buf) catch |err| switch (err) {
+ const real_path = std.posix.realpathZ(&symlink_path_buf, &real_path_buf) catch |err| switch (err) {
error.InvalidWtf8 => unreachable, // Windows-only
error.NetworkNotFound => unreachable, // Windows-only
else => |e| return e,
@@ -590,15 +597,15 @@ pub fn selfExePath(out_buffer: []u8) SelfExePathError![]u8 {
@memcpy(result, real_path);
return result;
}
- switch (builtin.os.tag) {
- .linux => return os.readlinkZ("/proc/self/exe", out_buffer) catch |err| switch (err) {
+ switch (native_os) {
+ .linux => return posix.readlinkZ("/proc/self/exe", out_buffer) catch |err| switch (err) {
error.InvalidUtf8 => unreachable, // WASI-only
error.InvalidWtf8 => unreachable, // Windows-only
error.UnsupportedReparsePointType => unreachable, // Windows-only
error.NetworkNotFound => unreachable, // Windows-only
else => |e| return e,
},
- .solaris, .illumos => return os.readlinkZ("/proc/self/path/a.out", out_buffer) catch |err| switch (err) {
+ .solaris, .illumos => return posix.readlinkZ("/proc/self/path/a.out", out_buffer) catch |err| switch (err) {
error.InvalidUtf8 => unreachable, // WASI-only
error.InvalidWtf8 => unreachable, // Windows-only
error.UnsupportedReparsePointType => unreachable, // Windows-only
@@ -606,29 +613,29 @@ pub fn selfExePath(out_buffer: []u8) SelfExePathError![]u8 {
else => |e| return e,
},
.freebsd, .dragonfly => {
- var mib = [4]c_int{ os.CTL.KERN, os.KERN.PROC, os.KERN.PROC_PATHNAME, -1 };
+ var mib = [4]c_int{ posix.CTL.KERN, posix.KERN.PROC, posix.KERN.PROC_PATHNAME, -1 };
var out_len: usize = out_buffer.len;
- try os.sysctl(&mib, out_buffer.ptr, &out_len, null, 0);
+ try posix.sysctl(&mib, out_buffer.ptr, &out_len, null, 0);
// TODO could this slice from 0 to out_len instead?
return mem.sliceTo(out_buffer, 0);
},
.netbsd => {
- var mib = [4]c_int{ os.CTL.KERN, os.KERN.PROC_ARGS, -1, os.KERN.PROC_PATHNAME };
+ var mib = [4]c_int{ posix.CTL.KERN, posix.KERN.PROC_ARGS, -1, posix.KERN.PROC_PATHNAME };
var out_len: usize = out_buffer.len;
- try os.sysctl(&mib, out_buffer.ptr, &out_len, null, 0);
+ try posix.sysctl(&mib, out_buffer.ptr, &out_len, null, 0);
// TODO could this slice from 0 to out_len instead?
return mem.sliceTo(out_buffer, 0);
},
.openbsd, .haiku => {
// OpenBSD doesn't support getting the path of a running process, so try to guess it
- if (os.argv.len == 0)
+ if (std.os.argv.len == 0)
return error.FileNotFound;
- const argv0 = mem.span(os.argv[0]);
+ const argv0 = mem.span(std.os.argv[0]);
if (mem.indexOf(u8, argv0, "/") != null) {
// argv[0] is a path (relative or absolute): use realpath(3) directly
var real_path_buf: [MAX_PATH_BYTES]u8 = undefined;
- const real_path = os.realpathZ(os.argv[0], &real_path_buf) catch |err| switch (err) {
+ const real_path = posix.realpathZ(std.os.argv[0], &real_path_buf) catch |err| switch (err) {
error.InvalidWtf8 => unreachable, // Windows-only
error.NetworkNotFound => unreachable, // Windows-only
else => |e| return e,
@@ -640,17 +647,17 @@ pub fn selfExePath(out_buffer: []u8) SelfExePathError![]u8 {
return result;
} else if (argv0.len != 0) {
// argv[0] is not empty (and not a path): search it inside PATH
- const PATH = std.os.getenvZ("PATH") orelse return error.FileNotFound;
+ const PATH = posix.getenvZ("PATH") orelse return error.FileNotFound;
var path_it = mem.tokenizeScalar(u8, PATH, path.delimiter);
while (path_it.next()) |a_path| {
var resolved_path_buf: [MAX_PATH_BYTES - 1:0]u8 = undefined;
const resolved_path = std.fmt.bufPrintZ(&resolved_path_buf, "{s}/{s}", .{
a_path,
- os.argv[0],
+ std.os.argv[0],
}) catch continue;
var real_path_buf: [MAX_PATH_BYTES]u8 = undefined;
- if (os.realpathZ(resolved_path, &real_path_buf)) |real_path| {
+ if (posix.realpathZ(resolved_path, &real_path_buf)) |real_path| {
// found a file, and hope it is the right file
if (real_path.len > out_buffer.len)
return error.NameTooLong;
@@ -663,13 +670,13 @@ pub fn selfExePath(out_buffer: []u8) SelfExePathError![]u8 {
return error.FileNotFound;
},
.windows => {
- const image_path_unicode_string = &os.windows.peb().ProcessParameters.ImagePathName;
+ const image_path_unicode_string = &windows.peb().ProcessParameters.ImagePathName;
const image_path_name = image_path_unicode_string.Buffer.?[0 .. image_path_unicode_string.Length / 2 :0];
// If ImagePathName is a symlink, then it will contain the path of the
// symlink, not the path that the symlink points to. We want the path
// that the symlink points to, though, so we need to get the realpath.
- const pathname_w = try os.windows.wToPrefixedFileW(null, image_path_name);
+ const pathname_w = try windows.wToPrefixedFileW(null, image_path_name);
return std.fs.cwd().realpathW(pathname_w.span(), out_buffer) catch |err| switch (err) {
error.InvalidWtf8 => unreachable,
else => |e| return e,
@@ -718,11 +725,11 @@ pub fn realpathAlloc(allocator: Allocator, pathname: []const u8) ![]u8 {
// paths. musl supports passing NULL but restricts the output to PATH_MAX
// anyway.
var buf: [MAX_PATH_BYTES]u8 = undefined;
- return allocator.dupe(u8, try os.realpath(pathname, &buf));
+ return allocator.dupe(u8, try posix.realpath(pathname, &buf));
}
test {
- if (builtin.os.tag != .wasi) {
+ if (native_os != .wasi) {
_ = &makeDirAbsolute;
_ = &makeDirAbsoluteZ;
_ = &copyFileAbsolute;
diff --git a/lib/std/fs/AtomicFile.zig b/lib/std/fs/AtomicFile.zig
index c95ae9bcf2..17a17f8993 100644
--- a/lib/std/fs/AtomicFile.zig
+++ b/lib/std/fs/AtomicFile.zig
@@ -85,5 +85,4 @@ const File = std.fs.File;
const Dir = std.fs.Dir;
const fs = std.fs;
const assert = std.debug.assert;
-// https://github.com/ziglang/zig/issues/5019
-const posix = std.os;
+const posix = std.posix;
diff --git a/lib/std/fs/Dir.zig b/lib/std/fs/Dir.zig
index 11fbc13c41..74d91239f8 100644
--- a/lib/std/fs/Dir.zig
+++ b/lib/std/fs/Dir.zig
@@ -18,7 +18,7 @@ const IteratorError = error{
InvalidUtf8,
} || posix.UnexpectedError;
-pub const Iterator = switch (builtin.os.tag) {
+pub const Iterator = switch (native_os) {
.macos, .ios, .freebsd, .netbsd, .dragonfly, .openbsd, .solaris, .illumos => struct {
dir: Dir,
seek: i64,
@@ -34,7 +34,7 @@ pub const Iterator = switch (builtin.os.tag) {
/// Memory such as file names referenced in this returned entry becomes invalid
/// with subsequent calls to `next`, as well as when this `Dir` is deinitialized.
pub fn next(self: *Self) Error!?Entry {
- switch (builtin.os.tag) {
+ switch (native_os) {
.macos, .ios => return self.nextDarwin(),
.freebsd, .netbsd, .dragonfly, .openbsd => return self.nextBsd(),
.solaris, .illumos => return self.nextSolaris(),
@@ -183,7 +183,7 @@ pub const Iterator = switch (builtin.os.tag) {
const name = @as([*]u8, @ptrCast(&bsd_entry.name))[0..bsd_entry.namlen];
- const skip_zero_fileno = switch (builtin.os.tag) {
+ const skip_zero_fileno = switch (native_os) {
// fileno=0 is used to mark invalid entries or deleted files.
.openbsd, .netbsd => true,
else => false,
@@ -315,7 +315,7 @@ pub const Iterator = switch (builtin.os.tag) {
dir: Dir,
// The if guard is solely there to prevent compile errors from missing `linux.dirent64`
// definition when compiling for other OSes. It doesn't do anything when compiling for Linux.
- buf: [1024]u8 align(if (builtin.os.tag != .linux) 1 else @alignOf(linux.dirent64)),
+ buf: [1024]u8 align(if (native_os != .linux) 1 else @alignOf(linux.dirent64)),
index: usize,
end_index: usize,
first_iter: bool,
@@ -348,7 +348,7 @@ pub const Iterator = switch (builtin.os.tag) {
self.first_iter = false;
}
const rc = linux.getdents64(self.dir.fd, &self.buf, self.buf.len);
- switch (linux.getErrno(rc)) {
+ switch (linux.E.init(rc)) {
.SUCCESS => {},
.BADF => unreachable, // Dir is invalid or was opened without iteration ability
.FAULT => unreachable,
@@ -398,7 +398,7 @@ pub const Iterator = switch (builtin.os.tag) {
},
.windows => struct {
dir: Dir,
- buf: [1024]u8 align(@alignOf(std.os.windows.FILE_BOTH_DIR_INFORMATION)),
+ buf: [1024]u8 align(@alignOf(windows.FILE_BOTH_DIR_INFORMATION)),
index: usize,
end_index: usize,
first_iter: bool,
@@ -411,8 +411,8 @@ pub const Iterator = switch (builtin.os.tag) {
/// Memory such as file names referenced in this returned entry becomes invalid
/// with subsequent calls to `next`, as well as when this `Dir` is deinitialized.
pub fn next(self: *Self) Error!?Entry {
+ const w = windows;
while (true) {
- const w = std.os.windows;
if (self.index >= self.end_index) {
var io: w.IO_STATUS_BLOCK = undefined;
const rc = w.ntdll.NtQueryDirectoryFile(
@@ -582,7 +582,7 @@ pub fn iterateAssumeFirstIteration(self: Dir) Iterator {
}
fn iterateImpl(self: Dir, first_iter_start_value: bool) Iterator {
- switch (builtin.os.tag) {
+ switch (native_os) {
.macos,
.ios,
.freebsd,
@@ -770,11 +770,11 @@ pub fn close(self: *Dir) void {
/// On WASI, `sub_path` should be encoded as valid UTF-8.
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
pub fn openFile(self: Dir, sub_path: []const u8, flags: File.OpenFlags) File.OpenError!File {
- if (builtin.os.tag == .windows) {
- const path_w = try std.os.windows.sliceToPrefixedFileW(self.fd, sub_path);
+ if (native_os == .windows) {
+ const path_w = try windows.sliceToPrefixedFileW(self.fd, sub_path);
return self.openFileW(path_w.span(), flags);
}
- if (builtin.os.tag == .wasi) {
+ if (native_os == .wasi) {
var base: std.os.wasi.rights_t = .{};
if (flags.isRead()) {
base.FD_READ = true;
@@ -803,9 +803,9 @@ pub fn openFile(self: Dir, sub_path: []const u8, flags: File.OpenFlags) File.Ope
/// Same as `openFile` but the path parameter is null-terminated.
pub fn openFileZ(self: Dir, sub_path: [*:0]const u8, flags: File.OpenFlags) File.OpenError!File {
- switch (builtin.os.tag) {
+ switch (native_os) {
.windows => {
- const path_w = try std.os.windows.cStrToPrefixedFileW(self.fd, sub_path);
+ const path_w = try windows.cStrToPrefixedFileW(self.fd, sub_path);
return self.openFileW(path_w.span(), flags);
},
.wasi => {
@@ -884,7 +884,7 @@ pub fn openFileZ(self: Dir, sub_path: [*:0]const u8, flags: File.OpenFlags) File
/// Same as `openFile` but Windows-only and the path parameter is
/// [WTF-16](https://simonsapin.github.io/wtf-8/#potentially-ill-formed-utf-16) encoded.
pub fn openFileW(self: Dir, sub_path_w: []const u16, flags: File.OpenFlags) File.OpenError!File {
- const w = std.os.windows;
+ const w = windows;
const file: File = .{
.handle = try w.OpenFile(sub_path_w, .{
.dir = self.fd,
@@ -925,11 +925,11 @@ pub fn openFileW(self: Dir, sub_path_w: []const u16, flags: File.OpenFlags) File
/// On WASI, `sub_path` should be encoded as valid UTF-8.
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
pub fn createFile(self: Dir, sub_path: []const u8, flags: File.CreateFlags) File.OpenError!File {
- if (builtin.os.tag == .windows) {
- const path_w = try std.os.windows.sliceToPrefixedFileW(self.fd, sub_path);
+ if (native_os == .windows) {
+ const path_w = try windows.sliceToPrefixedFileW(self.fd, sub_path);
return self.createFileW(path_w.span(), flags);
}
- if (builtin.os.tag == .wasi) {
+ if (native_os == .wasi) {
return .{
.handle = try posix.openatWasi(self.fd, sub_path, .{}, .{
.CREAT = true,
@@ -957,9 +957,9 @@ pub fn createFile(self: Dir, sub_path: []const u8, flags: File.CreateFlags) File
/// Same as `createFile` but the path parameter is null-terminated.
pub fn createFileZ(self: Dir, sub_path_c: [*:0]const u8, flags: File.CreateFlags) File.OpenError!File {
- switch (builtin.os.tag) {
+ switch (native_os) {
.windows => {
- const path_w = try std.os.windows.cStrToPrefixedFileW(self.fd, sub_path_c);
+ const path_w = try windows.cStrToPrefixedFileW(self.fd, sub_path_c);
return self.createFileW(path_w.span(), flags);
},
.wasi => {
@@ -968,7 +968,7 @@ pub fn createFileZ(self: Dir, sub_path_c: [*:0]const u8, flags: File.CreateFlags
else => {},
}
- var os_flags: std.os.O = .{
+ var os_flags: posix.O = .{
.ACCMODE = if (flags.read) .RDWR else .WRONLY,
.CREAT = true,
.TRUNC = flags.truncate,
@@ -1032,7 +1032,7 @@ pub fn createFileZ(self: Dir, sub_path_c: [*:0]const u8, flags: File.CreateFlags
/// Same as `createFile` but Windows-only and the path parameter is
/// [WTF-16](https://simonsapin.github.io/wtf-8/#potentially-ill-formed-utf-16) encoded.
pub fn createFileW(self: Dir, sub_path_w: []const u16, flags: File.CreateFlags) File.OpenError!File {
- const w = std.os.windows;
+ const w = windows;
const read_flag = if (flags.read) @as(u32, w.GENERIC_READ) else 0;
const file: File = .{
.handle = try w.OpenFile(sub_path_w, .{
@@ -1145,7 +1145,7 @@ pub fn makePath(self: Dir, sub_path: []const u8) !void {
/// have been modified regardless.
/// `sub_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
fn makeOpenPathAccessMaskW(self: Dir, sub_path: []const u8, access_mask: u32, no_follow: bool) OpenError!Dir {
- const w = std.os.windows;
+ const w = windows;
var it = try fs.path.componentIterator(sub_path);
// If there are no components in the path, then create a dummy component with the full path.
var component = it.last() orelse fs.path.NativeComponentIterator.Component{
@@ -1180,9 +1180,9 @@ fn makeOpenPathAccessMaskW(self: Dir, sub_path: []const u8, access_mask: u32, no
/// On WASI, `sub_path` should be encoded as valid UTF-8.
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
pub fn makeOpenPath(self: Dir, sub_path: []const u8, open_dir_options: OpenDirOptions) !Dir {
- return switch (builtin.os.tag) {
+ return switch (native_os) {
.windows => {
- const w = std.os.windows;
+ const w = windows;
const base_flags = w.STANDARD_RIGHTS_READ | w.FILE_READ_ATTRIBUTES | w.FILE_READ_EA |
w.SYNCHRONIZE | w.FILE_TRAVERSE |
(if (open_dir_options.iterate) w.FILE_LIST_DIRECTORY else @as(u32, 0));
@@ -1215,11 +1215,11 @@ pub const RealPathError = posix.RealPathError;
/// Currently supported hosts are: Linux, macOS, and Windows.
/// See also `Dir.realpathZ`, `Dir.realpathW`, and `Dir.realpathAlloc`.
pub fn realpath(self: Dir, pathname: []const u8, out_buffer: []u8) RealPathError![]u8 {
- if (builtin.os.tag == .wasi) {
+ if (native_os == .wasi) {
@compileError("realpath is not available on WASI");
}
- if (builtin.os.tag == .windows) {
- const pathname_w = try std.os.windows.sliceToPrefixedFileW(self.fd, pathname);
+ if (native_os == .windows) {
+ const pathname_w = try windows.sliceToPrefixedFileW(self.fd, pathname);
return self.realpathW(pathname_w.span(), out_buffer);
}
const pathname_c = try posix.toPosixPath(pathname);
@@ -1229,12 +1229,12 @@ pub fn realpath(self: Dir, pathname: []const u8, out_buffer: []u8) RealPathError
/// Same as `Dir.realpath` except `pathname` is null-terminated.
/// See also `Dir.realpath`, `realpathZ`.
pub fn realpathZ(self: Dir, pathname: [*:0]const u8, out_buffer: []u8) RealPathError![]u8 {
- if (builtin.os.tag == .windows) {
- const pathname_w = try posix.windows.cStrToPrefixedFileW(self.fd, pathname);
+ if (native_os == .windows) {
+ const pathname_w = try windows.cStrToPrefixedFileW(self.fd, pathname);
return self.realpathW(pathname_w.span(), out_buffer);
}
- const flags: posix.O = switch (builtin.os.tag) {
+ const flags: posix.O = switch (native_os) {
.linux => .{
.NONBLOCK = true,
.CLOEXEC = true,
@@ -1255,14 +1255,8 @@ pub fn realpathZ(self: Dir, pathname: [*:0]const u8, out_buffer: []u8) RealPathE
};
defer posix.close(fd);
- // Use of MAX_PATH_BYTES here is valid as the realpath function does not
- // have a variant that takes an arbitrary-size buffer.
- // TODO(#4812): Consider reimplementing realpath or using the POSIX.1-2008
- // NULL out parameter (GNU's canonicalize_file_name) to handle overelong
- // paths. musl supports passing NULL but restricts the output to PATH_MAX
- // anyway.
var buffer: [fs.MAX_PATH_BYTES]u8 = undefined;
- const out_path = try posix.getFdPath(fd, &buffer);
+ const out_path = try std.os.getFdPath(fd, &buffer);
if (out_path.len > out_buffer.len) {
return error.NameTooLong;
@@ -1277,7 +1271,7 @@ pub fn realpathZ(self: Dir, pathname: [*:0]const u8, out_buffer: []u8) RealPathE
/// The result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
/// See also `Dir.realpath`, `realpathW`.
pub fn realpathW(self: Dir, pathname: []const u16, out_buffer: []u8) RealPathError![]u8 {
- const w = std.os.windows;
+ const w = windows;
const access_mask = w.GENERIC_READ | w.SYNCHRONIZE;
const share_access = w.FILE_SHARE_READ;
@@ -1331,16 +1325,16 @@ pub fn realpathAlloc(self: Dir, allocator: Allocator, pathname: []const u8) Real
/// Not all targets support this. For example, WASI does not have the concept
/// of a current working directory.
pub fn setAsCwd(self: Dir) !void {
- if (builtin.os.tag == .wasi) {
+ if (native_os == .wasi) {
@compileError("changing cwd is not currently possible in WASI");
}
- if (builtin.os.tag == .windows) {
- var dir_path_buffer: [std.os.windows.PATH_MAX_WIDE]u16 = undefined;
- const dir_path = try std.os.windows.GetFinalPathNameByHandle(self.fd, .{}, &dir_path_buffer);
+ if (native_os == .windows) {
+ var dir_path_buffer: [windows.PATH_MAX_WIDE]u16 = undefined;
+ const dir_path = try windows.GetFinalPathNameByHandle(self.fd, .{}, &dir_path_buffer);
if (builtin.link_libc) {
return posix.chdirW(dir_path);
}
- return std.os.windows.SetCurrentDirectory(dir_path);
+ return windows.SetCurrentDirectory(dir_path);
}
try posix.fchdir(self.fd);
}
@@ -1368,9 +1362,9 @@ pub const OpenDirOptions = struct {
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
/// Asserts that the path parameter has no null bytes.
pub fn openDir(self: Dir, sub_path: []const u8, args: OpenDirOptions) OpenError!Dir {
- switch (builtin.os.tag) {
+ switch (native_os) {
.windows => {
- const sub_path_w = try posix.windows.sliceToPrefixedFileW(self.fd, sub_path);
+ const sub_path_w = try windows.sliceToPrefixedFileW(self.fd, sub_path);
return self.openDirW(sub_path_w.span().ptr, args);
},
.wasi => {
@@ -1427,9 +1421,9 @@ pub fn openDir(self: Dir, sub_path: []const u8, args: OpenDirOptions) OpenError!
/// Same as `openDir` except the parameter is null-terminated.
pub fn openDirZ(self: Dir, sub_path_c: [*:0]const u8, args: OpenDirOptions) OpenError!Dir {
- switch (builtin.os.tag) {
+ switch (native_os) {
.windows => {
- const sub_path_w = try std.os.windows.cStrToPrefixedFileW(self.fd, sub_path_c);
+ const sub_path_w = try windows.cStrToPrefixedFileW(self.fd, sub_path_c);
return self.openDirW(sub_path_w.span().ptr, args);
},
.wasi => {
@@ -1453,7 +1447,7 @@ pub fn openDirZ(self: Dir, sub_path_c: [*:0]const u8, args: OpenDirOptions) Open
/// Same as `openDir` except the path parameter is WTF-16 LE encoded, NT-prefixed.
/// This function asserts the target OS is Windows.
pub fn openDirW(self: Dir, sub_path_w: [*:0]const u16, args: OpenDirOptions) OpenError!Dir {
- const w = std.os.windows;
+ const w = windows;
// TODO remove some of these flags if args.access_sub_paths is false
const base_flags = w.STANDARD_RIGHTS_READ | w.FILE_READ_ATTRIBUTES | w.FILE_READ_EA |
w.SYNCHRONIZE | w.FILE_TRAVERSE;
@@ -1487,7 +1481,7 @@ const MakeOpenDirAccessMaskWOptions = struct {
};
fn makeOpenDirAccessMaskW(self: Dir, sub_path_w: [*:0]const u16, access_mask: u32, flags: MakeOpenDirAccessMaskWOptions) OpenError!Dir {
- const w = std.os.windows;
+ const w = windows;
var result = Dir{
.fd = undefined,
@@ -1545,10 +1539,10 @@ pub const DeleteFileError = posix.UnlinkError;
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
/// Asserts that the path parameter has no null bytes.
pub fn deleteFile(self: Dir, sub_path: []const u8) DeleteFileError!void {
- if (builtin.os.tag == .windows) {
- const sub_path_w = try std.os.windows.sliceToPrefixedFileW(self.fd, sub_path);
+ if (native_os == .windows) {
+ const sub_path_w = try windows.sliceToPrefixedFileW(self.fd, sub_path);
return self.deleteFileW(sub_path_w.span());
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ } else if (native_os == .wasi and !builtin.link_libc) {
posix.unlinkat(self.fd, sub_path, 0) catch |err| switch (err) {
error.DirNotEmpty => unreachable, // not passing AT.REMOVEDIR
else => |e| return e,
@@ -1563,7 +1557,7 @@ pub fn deleteFile(self: Dir, sub_path: []const u8) DeleteFileError!void {
pub fn deleteFileZ(self: Dir, sub_path_c: [*:0]const u8) DeleteFileError!void {
posix.unlinkatZ(self.fd, sub_path_c, 0) catch |err| switch (err) {
error.DirNotEmpty => unreachable, // not passing AT.REMOVEDIR
- error.AccessDenied => |e| switch (builtin.os.tag) {
+ error.AccessDenied => |e| switch (native_os) {
// non-Linux POSIX systems return EPERM when trying to delete a directory, so
// we need to handle that case specifically and translate the error
.macos, .ios, .freebsd, .netbsd, .dragonfly, .openbsd, .solaris, .illumos => {
@@ -1615,10 +1609,10 @@ pub const DeleteDirError = error{
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
/// Asserts that the path parameter has no null bytes.
pub fn deleteDir(self: Dir, sub_path: []const u8) DeleteDirError!void {
- if (builtin.os.tag == .windows) {
- const sub_path_w = try std.os.windows.sliceToPrefixedFileW(self.fd, sub_path);
+ if (native_os == .windows) {
+ const sub_path_w = try windows.sliceToPrefixedFileW(self.fd, sub_path);
return self.deleteDirW(sub_path_w.span());
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ } else if (native_os == .wasi and !builtin.link_libc) {
posix.unlinkat(self.fd, sub_path, posix.AT.REMOVEDIR) catch |err| switch (err) {
error.IsDir => unreachable, // not possible since we pass AT.REMOVEDIR
else => |e| return e,
@@ -1691,15 +1685,15 @@ pub fn symLink(
sym_link_path: []const u8,
flags: SymLinkFlags,
) !void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ if (native_os == .wasi and !builtin.link_libc) {
return self.symLinkWasi(target_path, sym_link_path, flags);
}
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
// Target path does not use sliceToPrefixedFileW because certain paths
// are handled differently when creating a symlink than they would be
// when converting to an NT namespaced path. CreateSymbolicLink in
// symLinkW will handle the necessary conversion.
- var target_path_w: std.os.windows.PathSpace = undefined;
+ var target_path_w: windows.PathSpace = undefined;
target_path_w.len = try std.unicode.wtf8ToWtf16Le(&target_path_w.data, target_path);
target_path_w.data[target_path_w.len] = 0;
// However, we need to canonicalize any path separators to `\`, since if
@@ -1711,7 +1705,7 @@ pub fn symLink(
mem.nativeToLittle(u16, '\\'),
);
- const sym_link_path_w = try std.os.windows.sliceToPrefixedFileW(self.fd, sym_link_path);
+ const sym_link_path_w = try windows.sliceToPrefixedFileW(self.fd, sym_link_path);
return self.symLinkW(target_path_w.span(), sym_link_path_w.span(), flags);
}
const target_path_c = try posix.toPosixPath(target_path);
@@ -1736,9 +1730,9 @@ pub fn symLinkZ(
sym_link_path_c: [*:0]const u8,
flags: SymLinkFlags,
) !void {
- if (builtin.os.tag == .windows) {
- const target_path_w = try std.os.windows.cStrToPrefixedFileW(self.fd, target_path_c);
- const sym_link_path_w = try std.os.windows.cStrToPrefixedFileW(self.fd, sym_link_path_c);
+ if (native_os == .windows) {
+ const target_path_w = try windows.cStrToPrefixedFileW(self.fd, target_path_c);
+ const sym_link_path_w = try windows.cStrToPrefixedFileW(self.fd, sym_link_path_c);
return self.symLinkW(target_path_w.span(), sym_link_path_w.span(), flags);
}
return posix.symlinkatZ(target_path_c, self.fd, sym_link_path_c);
@@ -1756,7 +1750,7 @@ pub fn symLinkW(
sym_link_path_w: []const u16,
flags: SymLinkFlags,
) !void {
- return std.os.windows.CreateSymbolicLink(self.fd, sym_link_path_w, target_path_w, flags.is_directory);
+ return windows.CreateSymbolicLink(self.fd, sym_link_path_w, target_path_w, flags.is_directory);
}
pub const ReadLinkError = posix.ReadLinkError;
@@ -1768,11 +1762,11 @@ pub const ReadLinkError = posix.ReadLinkError;
/// On WASI, `sub_path` should be encoded as valid UTF-8.
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
pub fn readLink(self: Dir, sub_path: []const u8, buffer: []u8) ReadLinkError![]u8 {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ if (native_os == .wasi and !builtin.link_libc) {
return self.readLinkWasi(sub_path, buffer);
}
- if (builtin.os.tag == .windows) {
- const sub_path_w = try std.os.windows.sliceToPrefixedFileW(self.fd, sub_path);
+ if (native_os == .windows) {
+ const sub_path_w = try windows.sliceToPrefixedFileW(self.fd, sub_path);
return self.readLinkW(sub_path_w.span(), buffer);
}
const sub_path_c = try posix.toPosixPath(sub_path);
@@ -1786,8 +1780,8 @@ pub fn readLinkWasi(self: Dir, sub_path: []const u8, buffer: []u8) ![]u8 {
/// Same as `readLink`, except the `sub_path_c` parameter is null-terminated.
pub fn readLinkZ(self: Dir, sub_path_c: [*:0]const u8, buffer: []u8) ![]u8 {
- if (builtin.os.tag == .windows) {
- const sub_path_w = try std.os.windows.cStrToPrefixedFileW(self.fd, sub_path_c);
+ if (native_os == .windows) {
+ const sub_path_w = try windows.cStrToPrefixedFileW(self.fd, sub_path_c);
return self.readLinkW(sub_path_w.span(), buffer);
}
return posix.readlinkatZ(self.fd, sub_path_c, buffer);
@@ -1796,7 +1790,7 @@ pub fn readLinkZ(self: Dir, sub_path_c: [*:0]const u8, buffer: []u8) ![]u8 {
/// Windows-only. Same as `readLink` except the pathname parameter
/// is WTF16 LE encoded.
pub fn readLinkW(self: Dir, sub_path_w: []const u16, buffer: []u8) ![]u8 {
- return std.os.windows.ReadLink(self.fd, sub_path_w, buffer);
+ return windows.ReadLink(self.fd, sub_path_w, buffer);
}
/// Read all of file contents using a preallocated buffer.
@@ -2319,8 +2313,8 @@ pub const AccessError = posix.AccessError;
/// For example, instead of testing if a file exists and then opening it, just
/// open it and handle the error for file not found.
pub fn access(self: Dir, sub_path: []const u8, flags: File.OpenFlags) AccessError!void {
- if (builtin.os.tag == .windows) {
- const sub_path_w = std.os.windows.sliceToPrefixedFileW(self.fd, sub_path) catch |err| switch (err) {
+ if (native_os == .windows) {
+ const sub_path_w = windows.sliceToPrefixedFileW(self.fd, sub_path) catch |err| switch (err) {
error.AccessDenied => return error.PermissionDenied,
else => |e| return e,
};
@@ -2332,8 +2326,8 @@ pub fn access(self: Dir, sub_path: []const u8, flags: File.OpenFlags) AccessErro
/// Same as `access` except the path parameter is null-terminated.
pub fn accessZ(self: Dir, sub_path: [*:0]const u8, flags: File.OpenFlags) AccessError!void {
- if (builtin.os.tag == .windows) {
- const sub_path_w = std.os.windows.cStrToPrefixedFileW(self.fd, sub_path) catch |err| switch (err) {
+ if (native_os == .windows) {
+ const sub_path_w = windows.cStrToPrefixedFileW(self.fd, sub_path) catch |err| switch (err) {
error.AccessDenied => return error.PermissionDenied,
else => |e| return e,
};
@@ -2355,7 +2349,7 @@ pub fn accessZ(self: Dir, sub_path: [*:0]const u8, flags: File.OpenFlags) Access
/// TODO currently this ignores `flags`.
pub fn accessW(self: Dir, sub_path_w: [*:0]const u16, flags: File.OpenFlags) AccessError!void {
_ = flags;
- return posix.faccessatW(self.fd, sub_path_w, 0, 0);
+ return posix.faccessatW(self.fd, sub_path_w);
}
pub const CopyFileOptions = struct {
@@ -2473,7 +2467,7 @@ fn copy_file(fd_in: posix.fd_t, fd_out: posix.fd_t, maybe_size: ?u64) CopyFileRa
}
}
- if (builtin.os.tag == .linux) {
+ if (native_os == .linux) {
// Try copy_file_range first as that works at the FS level and is the
// most efficient method (if available).
var offset: u64 = 0;
@@ -2555,13 +2549,13 @@ pub const StatFileError = File.OpenError || File.StatError || posix.FStatAtError
/// On WASI, `sub_path` should be encoded as valid UTF-8.
/// On other platforms, `sub_path` is an opaque sequence of bytes with no particular encoding.
pub fn statFile(self: Dir, sub_path: []const u8) StatFileError!Stat {
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
var file = try self.openFile(sub_path, .{});
defer file.close();
return file.stat();
}
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const st = try posix.fstatat_wasi(self.fd, sub_path, .{ .SYMLINK_FOLLOW = true });
+ if (native_os == .wasi and !builtin.link_libc) {
+ const st = try std.os.fstatat_wasi(self.fd, sub_path, .{ .SYMLINK_FOLLOW = true });
return Stat.fromWasi(st);
}
const st = try posix.fstatat(self.fd, sub_path, 0);
@@ -2617,9 +2611,10 @@ const builtin = @import("builtin");
const std = @import("../std.zig");
const File = std.fs.File;
const AtomicFile = std.fs.AtomicFile;
-// https://github.com/ziglang/zig/issues/5019
-const posix = std.os;
+const posix = std.posix;
const mem = std.mem;
const fs = std.fs;
const Allocator = std.mem.Allocator;
const assert = std.debug.assert;
+const windows = std.os.windows;
+const native_os = builtin.os.tag;
diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig
index 669f1b72e3..0b5058c5fe 100644
--- a/lib/std/fs/File.zig
+++ b/lib/std/fs/File.zig
@@ -193,6 +193,58 @@ pub fn isTty(self: File) bool {
return posix.isatty(self.handle);
}
+pub fn isCygwinPty(file: File) bool {
+ if (builtin.os.tag != .windows) return false;
+
+ const handle = file.handle;
+
+ // If this is a MSYS2/cygwin pty, then it will be a named pipe with a name in one of these formats:
+ // msys-[...]-ptyN-[...]
+ // cygwin-[...]-ptyN-[...]
+ //
+ // Example: msys-1888ae32e00d56aa-pty0-to-master
+
+ // First, just check that the handle is a named pipe.
+ // This allows us to avoid the more costly NtQueryInformationFile call
+ // for handles that aren't named pipes.
+ {
+ var io_status: windows.IO_STATUS_BLOCK = undefined;
+ var device_info: windows.FILE_FS_DEVICE_INFORMATION = undefined;
+ const rc = windows.ntdll.NtQueryVolumeInformationFile(handle, &io_status, &device_info, @sizeOf(windows.FILE_FS_DEVICE_INFORMATION), .FileFsDeviceInformation);
+ switch (rc) {
+ .SUCCESS => {},
+ else => return false,
+ }
+ if (device_info.DeviceType != windows.FILE_DEVICE_NAMED_PIPE) return false;
+ }
+
+ const name_bytes_offset = @offsetOf(windows.FILE_NAME_INFO, "FileName");
+ // `NAME_MAX` UTF-16 code units (2 bytes each)
+ // This buffer may not be long enough to handle *all* possible paths
+ // (PATH_MAX_WIDE would be necessary for that), but because we only care
+ // about certain paths and we know they must be within a reasonable length,
+ // we can use this smaller buffer and just return false on any error from
+ // NtQueryInformationFile.
+ const num_name_bytes = windows.MAX_PATH * 2;
+ var name_info_bytes align(@alignOf(windows.FILE_NAME_INFO)) = [_]u8{0} ** (name_bytes_offset + num_name_bytes);
+
+ var io_status_block: windows.IO_STATUS_BLOCK = undefined;
+ const rc = windows.ntdll.NtQueryInformationFile(handle, &io_status_block, &name_info_bytes, @intCast(name_info_bytes.len), .FileNameInformation);
+ switch (rc) {
+ .SUCCESS => {},
+ .INVALID_PARAMETER => unreachable,
+ else => return false,
+ }
+
+ const name_info: *const windows.FILE_NAME_INFO = @ptrCast(&name_info_bytes);
+ const name_bytes = name_info_bytes[name_bytes_offset .. name_bytes_offset + name_info.FileNameLength];
+ const name_wide = std.mem.bytesAsSlice(u16, name_bytes);
+ // The name we get from NtQueryInformationFile will be prefixed with a '\', e.g. \msys-1888ae32e00d56aa-pty0-to-master
+ return (std.mem.startsWith(u16, name_wide, &[_]u16{ '\\', 'm', 's', 'y', 's', '-' }) or
+ std.mem.startsWith(u16, name_wide, &[_]u16{ '\\', 'c', 'y', 'g', 'w', 'i', 'n', '-' })) and
+ std.mem.indexOf(u16, name_wide, &[_]u16{ '-', 'p', 't', 'y' }) != null;
+}
+
/// Test whether ANSI escape codes will be treated as such.
pub fn supportsAnsiEscapeCodes(self: File) bool {
if (builtin.os.tag == .windows) {
@@ -201,7 +253,7 @@ pub fn supportsAnsiEscapeCodes(self: File) bool {
if (console_mode & windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0) return true;
}
- return posix.isCygwinPty(self.handle);
+ return self.isCygwinPty();
}
if (builtin.os.tag == .wasi) {
// WASI sanitizes stdout when fd is a tty so ANSI escape codes
@@ -405,7 +457,7 @@ pub fn stat(self: File) StatError!Stat {
}
if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const st = try posix.fstat_wasi(self.handle);
+ const st = try std.os.fstat_wasi(self.handle);
return Stat.fromWasi(st);
}
@@ -952,7 +1004,7 @@ pub fn metadata(self: File) MetadataError!Metadata {
.statx = stx,
};
},
- .wasi => .{ .stat = try posix.fstat_wasi(self.handle) },
+ .wasi => .{ .stat = try std.os.fstat_wasi(self.handle) },
else => .{ .stat = try posix.fstat(self.handle) },
},
};
@@ -1634,8 +1686,7 @@ const File = @This();
const std = @import("../std.zig");
const builtin = @import("builtin");
const Allocator = std.mem.Allocator;
-// https://github.com/ziglang/zig/issues/5019
-const posix = std.os;
+const posix = std.posix;
const io = std.io;
const math = std.math;
const assert = std.debug.assert;
diff --git a/lib/std/fs/get_app_data_dir.zig b/lib/std/fs/get_app_data_dir.zig
index 4fcd17efe2..9c84291199 100644
--- a/lib/std/fs/get_app_data_dir.zig
+++ b/lib/std/fs/get_app_data_dir.zig
@@ -3,7 +3,8 @@ const builtin = @import("builtin");
const unicode = std.unicode;
const mem = std.mem;
const fs = std.fs;
-const os = std.os;
+const native_os = builtin.os.tag;
+const posix = std.posix;
pub const GetAppDataDirError = error{
OutOfMemory,
@@ -13,7 +14,7 @@ pub const GetAppDataDirError = error{
/// Caller owns returned memory.
/// TODO determine if we can remove the allocator requirement
pub fn getAppDataDir(allocator: mem.Allocator, appname: []const u8) GetAppDataDirError![]u8 {
- switch (builtin.os.tag) {
+ switch (native_os) {
.windows => {
const local_app_data_dir = std.process.getEnvVarOwned(allocator, "LOCALAPPDATA") catch |err| switch (err) {
error.OutOfMemory => |e| return e,
@@ -23,18 +24,18 @@ pub fn getAppDataDir(allocator: mem.Allocator, appname: []const u8) GetAppDataDi
return fs.path.join(allocator, &[_][]const u8{ local_app_data_dir, appname });
},
.macos => {
- const home_dir = os.getenv("HOME") orelse {
+ const home_dir = posix.getenv("HOME") orelse {
// TODO look in /etc/passwd
return error.AppDataDirUnavailable;
};
return fs.path.join(allocator, &[_][]const u8{ home_dir, "Library", "Application Support", appname });
},
.linux, .freebsd, .netbsd, .dragonfly, .openbsd, .solaris, .illumos => {
- if (os.getenv("XDG_DATA_HOME")) |xdg| {
+ if (posix.getenv("XDG_DATA_HOME")) |xdg| {
return fs.path.join(allocator, &[_][]const u8{ xdg, appname });
}
- const home_dir = os.getenv("HOME") orelse {
+ const home_dir = posix.getenv("HOME") orelse {
// TODO look in /etc/passwd
return error.AppDataDirUnavailable;
};
@@ -48,7 +49,7 @@ pub fn getAppDataDir(allocator: mem.Allocator, appname: []const u8) GetAppDataDi
}
// TODO look into directory_which
const be_user_settings = 0xbbe;
- const rc = os.system.find_directory(be_user_settings, -1, true, dir_path_ptr, 1);
+ const rc = std.c.find_directory(be_user_settings, -1, true, dir_path_ptr, 1);
const settings_dir = try allocator.dupeZ(u8, mem.sliceTo(dir_path_ptr, 0));
defer allocator.free(settings_dir);
switch (rc) {
@@ -61,7 +62,7 @@ pub fn getAppDataDir(allocator: mem.Allocator, appname: []const u8) GetAppDataDi
}
test "getAppDataDir" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
// We can't actually validate the result
const dir = getAppDataDir(std.testing.allocator, "zig") catch return;
diff --git a/lib/std/fs/test.zig b/lib/std/fs/test.zig
index 740e0655c5..3aa932cf01 100644
--- a/lib/std/fs/test.zig
+++ b/lib/std/fs/test.zig
@@ -1,10 +1,12 @@
const std = @import("../std.zig");
const builtin = @import("builtin");
const testing = std.testing;
-const os = std.os;
const fs = std.fs;
const mem = std.mem;
const wasi = std.os.wasi;
+const native_os = builtin.os.tag;
+const windows = std.os.windows;
+const posix = std.posix;
const ArenaAllocator = std.heap.ArenaAllocator;
const Dir = std.fs.Dir;
@@ -25,7 +27,7 @@ const PathType = enum {
};
}
- pub const TransformError = std.os.RealPathError || error{OutOfMemory};
+ pub const TransformError = posix.RealPathError || error{OutOfMemory};
pub const TransformFn = fn (allocator: mem.Allocator, dir: Dir, relative_path: [:0]const u8) TransformError![:0]const u8;
pub fn getTransformFn(comptime path_type: PathType) TransformFn {
@@ -42,7 +44,7 @@ const PathType = enum {
// The final path may not actually exist which would cause realpath to fail.
// So instead, we get the path of the dir and join it with the relative path.
var fd_path_buf: [fs.MAX_PATH_BYTES]u8 = undefined;
- const dir_path = try os.getFdPath(dir.fd, &fd_path_buf);
+ const dir_path = try std.os.getFdPath(dir.fd, &fd_path_buf);
return fs.path.joinZ(allocator, &.{ dir_path, relative_path });
}
}.transform,
@@ -51,8 +53,8 @@ const PathType = enum {
// Any drive absolute path (C:\foo) can be converted into a UNC path by
// using '127.0.0.1' as the server name and '<drive letter>$' as the share name.
var fd_path_buf: [fs.MAX_PATH_BYTES]u8 = undefined;
- const dir_path = try os.getFdPath(dir.fd, &fd_path_buf);
- const windows_path_type = std.os.windows.getUnprefixedPathType(u8, dir_path);
+ const dir_path = try std.os.getFdPath(dir.fd, &fd_path_buf);
+ const windows_path_type = windows.getUnprefixedPathType(u8, dir_path);
switch (windows_path_type) {
.unc_absolute => return fs.path.joinZ(allocator, &.{ dir_path, relative_path }),
.drive_absolute => {
@@ -102,7 +104,7 @@ const TestContext = struct {
pub fn transformPath(self: *TestContext, relative_path: [:0]const u8) ![:0]const u8 {
const allocator = self.arena.allocator();
const transformed_path = try self.transform_fn(allocator, self.dir, relative_path);
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
const transformed_sep_path = try allocator.dupeZ(u8, transformed_path);
std.mem.replaceScalar(u8, transformed_sep_path, switch (self.path_sep) {
'/' => '\\',
@@ -119,7 +121,7 @@ const TestContext = struct {
/// If path separators are replaced, then the result is allocated by the
/// TestContext's arena and will be free'd during `TestContext.deinit`.
pub fn toCanonicalPathSep(self: *TestContext, path: [:0]const u8) ![:0]const u8 {
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
const allocator = self.arena.allocator();
const transformed_sep_path = try allocator.dupeZ(u8, path);
std.mem.replaceScalar(u8, transformed_sep_path, '/', '\\');
@@ -157,7 +159,7 @@ fn testWithPathTypeIfSupported(comptime path_type: PathType, comptime path_sep:
fn setupSymlink(dir: Dir, target: []const u8, link: []const u8, flags: SymLinkFlags) !void {
return dir.symLink(target, link, flags) catch |err| switch (err) {
// Symlink requires admin privileges on windows, so this test can legitimately fail.
- error.AccessDenied => if (builtin.os.tag == .windows) return error.SkipZigTest else return err,
+ error.AccessDenied => if (native_os == .windows) return error.SkipZigTest else return err,
else => return err,
};
}
@@ -166,7 +168,7 @@ fn setupSymlink(dir: Dir, target: []const u8, link: []const u8, flags: SymLinkFl
// AccessDenied, then make the test failure silent (it is not a Zig failure).
fn setupSymlinkAbsolute(target: []const u8, link: []const u8, flags: SymLinkFlags) !void {
return fs.symLinkAbsolute(target, link, flags) catch |err| switch (err) {
- error.AccessDenied => if (builtin.os.tag == .windows) return error.SkipZigTest else return err,
+ error.AccessDenied => if (native_os == .windows) return error.SkipZigTest else return err,
else => return err,
};
}
@@ -232,60 +234,58 @@ test "File.stat on a File that is a symlink returns Kind.sym_link" {
var symlink = switch (builtin.target.os.tag) {
.windows => windows_symlink: {
- const w = std.os.windows;
-
- const sub_path_w = try std.os.windows.cStrToPrefixedFileW(ctx.dir.fd, "symlink");
+ const sub_path_w = try windows.cStrToPrefixedFileW(ctx.dir.fd, "symlink");
var result = Dir{
.fd = undefined,
};
const path_len_bytes = @as(u16, @intCast(sub_path_w.span().len * 2));
- var nt_name = w.UNICODE_STRING{
+ var nt_name = windows.UNICODE_STRING{
.Length = path_len_bytes,
.MaximumLength = path_len_bytes,
.Buffer = @constCast(&sub_path_w.data),
};
- var attr = w.OBJECT_ATTRIBUTES{
- .Length = @sizeOf(w.OBJECT_ATTRIBUTES),
+ var attr = windows.OBJECT_ATTRIBUTES{
+ .Length = @sizeOf(windows.OBJECT_ATTRIBUTES),
.RootDirectory = if (fs.path.isAbsoluteWindowsW(sub_path_w.span())) null else ctx.dir.fd,
.Attributes = 0,
.ObjectName = &nt_name,
.SecurityDescriptor = null,
.SecurityQualityOfService = null,
};
- var io: w.IO_STATUS_BLOCK = undefined;
- const rc = w.ntdll.NtCreateFile(
+ var io: windows.IO_STATUS_BLOCK = undefined;
+ const rc = windows.ntdll.NtCreateFile(
&result.fd,
- w.STANDARD_RIGHTS_READ | w.FILE_READ_ATTRIBUTES | w.FILE_READ_EA | w.SYNCHRONIZE | w.FILE_TRAVERSE,
+ windows.STANDARD_RIGHTS_READ | windows.FILE_READ_ATTRIBUTES | windows.FILE_READ_EA | windows.SYNCHRONIZE | windows.FILE_TRAVERSE,
&attr,
&io,
null,
- w.FILE_ATTRIBUTE_NORMAL,
- w.FILE_SHARE_READ | w.FILE_SHARE_WRITE,
- w.FILE_OPEN,
+ windows.FILE_ATTRIBUTE_NORMAL,
+ windows.FILE_SHARE_READ | windows.FILE_SHARE_WRITE,
+ windows.FILE_OPEN,
// FILE_OPEN_REPARSE_POINT is the important thing here
- w.FILE_OPEN_REPARSE_POINT | w.FILE_DIRECTORY_FILE | w.FILE_SYNCHRONOUS_IO_NONALERT | w.FILE_OPEN_FOR_BACKUP_INTENT,
+ windows.FILE_OPEN_REPARSE_POINT | windows.FILE_DIRECTORY_FILE | windows.FILE_SYNCHRONOUS_IO_NONALERT | windows.FILE_OPEN_FOR_BACKUP_INTENT,
null,
0,
);
switch (rc) {
.SUCCESS => break :windows_symlink result,
- else => return w.unexpectedStatus(rc),
+ else => return windows.unexpectedStatus(rc),
}
},
.linux => linux_symlink: {
- const sub_path_c = try os.toPosixPath("symlink");
+ const sub_path_c = try posix.toPosixPath("symlink");
// the O_NOFOLLOW | O_PATH combination can obtain a fd to a symlink
// note that if O_DIRECTORY is set, then this will error with ENOTDIR
- const flags: os.O = .{
+ const flags: posix.O = .{
.NOFOLLOW = true,
.PATH = true,
.ACCMODE = .RDONLY,
.CLOEXEC = true,
};
- const fd = try os.openatZ(ctx.dir.fd, &sub_path_c, flags, 0);
+ const fd = try posix.openatZ(ctx.dir.fd, &sub_path_c, flags, 0);
break :linux_symlink Dir{ .fd = fd };
},
else => unreachable,
@@ -315,7 +315,7 @@ test "openDir" {
}
test "accessAbsolute" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
var tmp = tmpDir(.{});
defer tmp.cleanup();
@@ -333,7 +333,7 @@ test "accessAbsolute" {
}
test "openDirAbsolute" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
var tmp = tmpDir(.{});
defer tmp.cleanup();
@@ -361,14 +361,14 @@ test "openDirAbsolute" {
}
test "openDir cwd parent '..'" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
var dir = try fs.cwd().openDir("..", .{});
defer dir.close();
}
test "openDir non-cwd parent '..'" {
- switch (builtin.os.tag) {
+ switch (native_os) {
.wasi, .netbsd, .openbsd => return error.SkipZigTest,
else => {},
}
@@ -392,7 +392,7 @@ test "openDir non-cwd parent '..'" {
}
test "readLinkAbsolute" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
var tmp = tmpDir(.{});
defer tmp.cleanup();
@@ -587,7 +587,7 @@ test "Dir.Iterator but dir is deleted during iteration" {
try std.testing.expect(entry == null);
// On Linux, we can opt-in to receiving a more specific error by calling `nextLinux`
- if (builtin.os.tag == .linux) {
+ if (native_os == .linux) {
try std.testing.expectError(error.DirNotFound, iterator.nextLinux());
}
}
@@ -744,7 +744,7 @@ test "directory operations on files" {
test "file operations on directories" {
// TODO: fix this test on FreeBSD. https://github.com/ziglang/zig/issues/1759
- if (builtin.os.tag == .freebsd) return error.SkipZigTest;
+ if (native_os == .freebsd) return error.SkipZigTest;
try testWithAllSupportedPathTypes(struct {
fn impl(ctx: *TestContext) !void {
@@ -754,7 +754,7 @@ test "file operations on directories" {
try testing.expectError(error.IsDir, ctx.dir.createFile(test_dir_name, .{}));
try testing.expectError(error.IsDir, ctx.dir.deleteFile(test_dir_name));
- switch (builtin.os.tag) {
+ switch (native_os) {
// no error when reading a directory.
.dragonfly, .netbsd => {},
// Currently, WASI will return error.Unexpected (via ENOTCAPABLE) when attempting fd_read on a directory handle.
@@ -895,7 +895,7 @@ test "Dir.rename directories" {
test "Dir.rename directory onto empty dir" {
// TODO: Fix on Windows, see https://github.com/ziglang/zig/issues/6364
- if (builtin.os.tag == .windows) return error.SkipZigTest;
+ if (native_os == .windows) return error.SkipZigTest;
try testWithAllSupportedPathTypes(struct {
fn impl(ctx: *TestContext) !void {
@@ -916,7 +916,7 @@ test "Dir.rename directory onto empty dir" {
test "Dir.rename directory onto non-empty dir" {
// TODO: Fix on Windows, see https://github.com/ziglang/zig/issues/6364
- if (builtin.os.tag == .windows) return error.SkipZigTest;
+ if (native_os == .windows) return error.SkipZigTest;
try testWithAllSupportedPathTypes(struct {
fn impl(ctx: *TestContext) !void {
@@ -942,7 +942,7 @@ test "Dir.rename directory onto non-empty dir" {
test "Dir.rename file <-> dir" {
// TODO: Fix on Windows, see https://github.com/ziglang/zig/issues/6364
- if (builtin.os.tag == .windows) return error.SkipZigTest;
+ if (native_os == .windows) return error.SkipZigTest;
try testWithAllSupportedPathTypes(struct {
fn impl(ctx: *TestContext) !void {
@@ -979,7 +979,7 @@ test "rename" {
}
test "renameAbsolute" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
var tmp_dir = tmpDir(.{});
defer tmp_dir.cleanup();
@@ -1032,14 +1032,14 @@ test "renameAbsolute" {
}
test "openSelfExe" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
const self_exe_file = try std.fs.openSelfExe(.{});
self_exe_file.close();
}
test "selfExePath" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
var buf: [fs.MAX_PATH_BYTES]u8 = undefined;
const buf_self_exe_path = try std.fs.selfExePath(&buf);
@@ -1120,7 +1120,7 @@ test "makePath, put some files in it, deleteTreeMinStackSize" {
}
test "makePath in a directory that no longer exists" {
- if (builtin.os.tag == .windows) return error.SkipZigTest; // Windows returns FileBusy if attempting to remove an open dir
+ if (native_os == .windows) return error.SkipZigTest; // Windows returns FileBusy if attempting to remove an open dir
var tmp = tmpDir(.{});
defer tmp.cleanup();
@@ -1182,7 +1182,7 @@ test "makepath relative walks" {
try tmp.dir.makePath(relPath);
// How .. is handled is different on Windows than non-Windows
- switch (builtin.os.tag) {
+ switch (native_os) {
.windows => {
// On Windows, .. is resolved before passing the path to NtCreateFile,
// meaning everything except `first/C` drops out.
@@ -1248,12 +1248,12 @@ test "max file name component lengths" {
var tmp = tmpDir(.{ .iterate = true });
defer tmp.cleanup();
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
// U+FFFF is the character with the largest code point that is encoded as a single
// UTF-16 code unit, so Windows allows for NAME_MAX of them.
- const maxed_windows_filename = ("\u{FFFF}".*) ** std.os.windows.NAME_MAX;
+ const maxed_windows_filename = ("\u{FFFF}".*) ** windows.NAME_MAX;
try testFilenameLimits(tmp.dir, &maxed_windows_filename);
- } else if (builtin.os.tag == .wasi) {
+ } else if (native_os == .wasi) {
// On WASI, the maxed filename depends on the host OS, so in order for this test to
// work on any host, we need to use a length that will work for all platforms
// (i.e. the minimum MAX_NAME_BYTES of all supported platforms).
@@ -1274,7 +1274,7 @@ test "writev, readv" {
var buf1: [line1.len]u8 = undefined;
var buf2: [line2.len]u8 = undefined;
- var write_vecs = [_]std.os.iovec_const{
+ var write_vecs = [_]posix.iovec_const{
.{
.iov_base = line1,
.iov_len = line1.len,
@@ -1284,7 +1284,7 @@ test "writev, readv" {
.iov_len = line2.len,
},
};
- var read_vecs = [_]std.os.iovec{
+ var read_vecs = [_]posix.iovec{
.{
.iov_base = &buf2,
.iov_len = buf2.len,
@@ -1316,7 +1316,7 @@ test "pwritev, preadv" {
var buf1: [line1.len]u8 = undefined;
var buf2: [line2.len]u8 = undefined;
- var write_vecs = [_]std.os.iovec_const{
+ var write_vecs = [_]posix.iovec_const{
.{
.iov_base = line1,
.iov_len = line1.len,
@@ -1326,7 +1326,7 @@ test "pwritev, preadv" {
.iov_len = line2.len,
},
};
- var read_vecs = [_]std.os.iovec{
+ var read_vecs = [_]posix.iovec{
.{
.iov_base = &buf2,
.iov_len = buf2.len,
@@ -1376,7 +1376,7 @@ test "sendfile" {
const line1 = "line1\n";
const line2 = "second line\n";
- var vecs = [_]std.os.iovec_const{
+ var vecs = [_]posix.iovec_const{
.{
.iov_base = line1,
.iov_len = line1.len,
@@ -1399,7 +1399,7 @@ test "sendfile" {
const header2 = "second header\n";
const trailer1 = "trailer1\n";
const trailer2 = "second trailer\n";
- var hdtr = [_]std.os.iovec_const{
+ var hdtr = [_]posix.iovec_const{
.{
.iov_base = header1,
.iov_len = header1.len,
@@ -1510,7 +1510,7 @@ test "AtomicFile" {
}
test "open file with exclusive nonblocking lock twice" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
try testWithAllSupportedPathTypes(struct {
fn impl(ctx: *TestContext) !void {
@@ -1526,7 +1526,7 @@ test "open file with exclusive nonblocking lock twice" {
}
test "open file with shared and exclusive nonblocking lock" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
try testWithAllSupportedPathTypes(struct {
fn impl(ctx: *TestContext) !void {
@@ -1542,7 +1542,7 @@ test "open file with shared and exclusive nonblocking lock" {
}
test "open file with exclusive and shared nonblocking lock" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
try testWithAllSupportedPathTypes(struct {
fn impl(ctx: *TestContext) !void {
@@ -1601,7 +1601,7 @@ test "open file with exclusive lock twice, make sure second lock waits" {
}
test "open file with exclusive nonblocking lock twice (absolute paths)" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
var random_bytes: [12]u8 = undefined;
std.crypto.random.bytes(&random_bytes);
@@ -1634,7 +1634,7 @@ test "open file with exclusive nonblocking lock twice (absolute paths)" {
}
test "walker" {
- if (builtin.os.tag == .wasi and builtin.link_libc) return error.SkipZigTest;
+ if (native_os == .wasi and builtin.link_libc) return error.SkipZigTest;
var tmp = tmpDir(.{ .iterate = true });
defer tmp.cleanup();
@@ -1687,7 +1687,7 @@ test "walker" {
}
test "walker without fully iterating" {
- if (builtin.os.tag == .wasi and builtin.link_libc) return error.SkipZigTest;
+ if (native_os == .wasi and builtin.link_libc) return error.SkipZigTest;
var tmp = tmpDir(.{ .iterate = true });
defer tmp.cleanup();
@@ -1710,9 +1710,9 @@ test "walker without fully iterating" {
}
test "'.' and '..' in fs.Dir functions" {
- if (builtin.os.tag == .wasi and builtin.link_libc) return error.SkipZigTest;
+ if (native_os == .wasi and builtin.link_libc) return error.SkipZigTest;
- if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64) {
+ if (native_os == .windows and builtin.cpu.arch == .aarch64) {
// https://github.com/ziglang/zig/issues/17134
return error.SkipZigTest;
}
@@ -1750,7 +1750,7 @@ test "'.' and '..' in fs.Dir functions" {
}
test "'.' and '..' in absolute functions" {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
var tmp = tmpDir(.{});
defer tmp.cleanup();
@@ -1794,7 +1794,7 @@ test "'.' and '..' in absolute functions" {
}
test "chmod" {
- if (builtin.os.tag == .windows or builtin.os.tag == .wasi)
+ if (native_os == .windows or native_os == .wasi)
return error.SkipZigTest;
var tmp = tmpDir(.{});
@@ -1816,7 +1816,7 @@ test "chmod" {
}
test "chown" {
- if (builtin.os.tag == .windows or builtin.os.tag == .wasi)
+ if (native_os == .windows or native_os == .wasi)
return error.SkipZigTest;
var tmp = tmpDir(.{});
@@ -1849,7 +1849,7 @@ test "File.Metadata" {
}
test "File.Permissions" {
- if (builtin.os.tag == .wasi)
+ if (native_os == .wasi)
return error.SkipZigTest;
var tmp = tmpDir(.{});
@@ -1875,7 +1875,7 @@ test "File.Permissions" {
}
test "File.PermissionsUnix" {
- if (builtin.os.tag == .windows or builtin.os.tag == .wasi)
+ if (native_os == .windows or native_os == .wasi)
return error.SkipZigTest;
var tmp = tmpDir(.{});
@@ -1910,7 +1910,7 @@ test "File.PermissionsUnix" {
}
test "delete a read-only file on windows" {
- if (builtin.os.tag != .windows)
+ if (native_os != .windows)
return error.SkipZigTest;
var tmp = testing.tmpDir(.{});
@@ -1941,7 +1941,7 @@ test "delete a read-only file on windows" {
}
test "delete a setAsCwd directory on Windows" {
- if (builtin.os.tag != .windows) return error.SkipZigTest;
+ if (native_os != .windows) return error.SkipZigTest;
var tmp = tmpDir(.{});
// Set tmp dir as current working directory.
@@ -1956,7 +1956,7 @@ test "delete a setAsCwd directory on Windows" {
}
test "invalid UTF-8/WTF-8 paths" {
- const expected_err = switch (builtin.os.tag) {
+ const expected_err = switch (native_os) {
.wasi => error.InvalidUtf8,
.windows => error.InvalidWtf8,
else => return error.SkipZigTest,
@@ -1993,13 +1993,13 @@ test "invalid UTF-8/WTF-8 paths" {
try testing.expectError(expected_err, ctx.dir.symLink(invalid_path, invalid_path, .{}));
try testing.expectError(expected_err, ctx.dir.symLinkZ(invalid_path, invalid_path, .{}));
- if (builtin.os.tag == .wasi) {
+ if (native_os == .wasi) {
try testing.expectError(expected_err, ctx.dir.symLinkWasi(invalid_path, invalid_path, .{}));
}
try testing.expectError(expected_err, ctx.dir.readLink(invalid_path, &[_]u8{}));
try testing.expectError(expected_err, ctx.dir.readLinkZ(invalid_path, &[_]u8{}));
- if (builtin.os.tag == .wasi) {
+ if (native_os == .wasi) {
try testing.expectError(expected_err, ctx.dir.readLinkWasi(invalid_path, &[_]u8{}));
}
@@ -2023,7 +2023,7 @@ test "invalid UTF-8/WTF-8 paths" {
try testing.expectError(expected_err, ctx.dir.statFile(invalid_path));
- if (builtin.os.tag != .wasi) {
+ if (native_os != .wasi) {
try testing.expectError(expected_err, ctx.dir.realpath(invalid_path, &[_]u8{}));
try testing.expectError(expected_err, ctx.dir.realpathZ(invalid_path, &[_]u8{}));
try testing.expectError(expected_err, ctx.dir.realpathAlloc(testing.allocator, invalid_path));
@@ -2032,7 +2032,7 @@ test "invalid UTF-8/WTF-8 paths" {
try testing.expectError(expected_err, fs.rename(ctx.dir, invalid_path, ctx.dir, invalid_path));
try testing.expectError(expected_err, fs.renameZ(ctx.dir, invalid_path, ctx.dir, invalid_path));
- if (builtin.os.tag != .wasi and ctx.path_type != .relative) {
+ if (native_os != .wasi and ctx.path_type != .relative) {
try testing.expectError(expected_err, fs.updateFileAbsolute(invalid_path, invalid_path, .{}));
try testing.expectError(expected_err, fs.copyFileAbsolute(invalid_path, invalid_path, .{}));
try testing.expectError(expected_err, fs.makeDirAbsolute(invalid_path));
diff --git a/lib/std/fs/wasi.zig b/lib/std/fs/wasi.zig
index 7ed7a75ea9..040dd4ca3e 100644
--- a/lib/std/fs/wasi.zig
+++ b/lib/std/fs/wasi.zig
@@ -1,6 +1,5 @@
const std = @import("std");
const builtin = @import("builtin");
-const os = std.os;
const mem = std.mem;
const math = std.math;
const fs = std.fs;
@@ -14,10 +13,10 @@ pub const Preopens = struct {
// Indexed by file descriptor number.
names: []const []const u8,
- pub fn find(p: Preopens, name: []const u8) ?os.fd_t {
+ pub fn find(p: Preopens, name: []const u8) ?std.posix.fd_t {
for (p.names, 0..) |elem_name, i| {
if (mem.eql(u8, elem_name, name)) {
- return @as(os.fd_t, @intCast(i));
+ return @intCast(i);
}
}
return null;
diff --git a/lib/std/hash/benchmark.zig b/lib/std/hash/benchmark.zig
index 35e96a655b..518b4ca99e 100644
--- a/lib/std/hash/benchmark.zig
+++ b/lib/std/hash/benchmark.zig
@@ -367,7 +367,7 @@ pub fn main() !void {
i += 1;
if (i == args.len) {
usage();
- std.os.exit(1);
+ std.process.exit(1);
}
seed = try std.fmt.parseUnsigned(u32, args[i], 10);
@@ -376,7 +376,7 @@ pub fn main() !void {
i += 1;
if (i == args.len) {
usage();
- std.os.exit(1);
+ std.process.exit(1);
}
filter = args[i];
@@ -384,7 +384,7 @@ pub fn main() !void {
i += 1;
if (i == args.len) {
usage();
- std.os.exit(1);
+ std.process.exit(1);
}
const c = try std.fmt.parseUnsigned(usize, args[i], 10);
@@ -393,13 +393,13 @@ pub fn main() !void {
i += 1;
if (i == args.len) {
usage();
- std.os.exit(1);
+ std.process.exit(1);
}
key_size = try std.fmt.parseUnsigned(usize, args[i], 10);
if (key_size.? > block_size) {
try stdout.print("key_size cannot exceed block size of {}\n", .{block_size});
- std.os.exit(1);
+ std.process.exit(1);
}
} else if (std.mem.eql(u8, args[i], "--iterative-only")) {
test_iterative_only = true;
@@ -410,7 +410,7 @@ pub fn main() !void {
return;
} else {
usage();
- std.os.exit(1);
+ std.process.exit(1);
}
}
diff --git a/lib/std/hash_map.zig b/lib/std/hash_map.zig
index f44bf1435d..862d14f452 100644
--- a/lib/std/hash_map.zig
+++ b/lib/std/hash_map.zig
@@ -1559,9 +1559,9 @@ pub fn HashMapUnmanaged(
assert(std.math.isPowerOfTwo(new_cap));
var map: Self = .{};
- defer map.deinit(allocator);
- map.pointer_stability.lock();
try map.allocate(allocator, new_cap);
+ errdefer comptime unreachable;
+ map.pointer_stability.lock();
map.initMetadatas();
map.available = @truncate((new_cap * max_load_percentage) / 100);
@@ -1581,6 +1581,7 @@ pub fn HashMapUnmanaged(
self.size = 0;
self.pointer_stability = .{ .state = .unlocked };
std.mem.swap(Self, self, &map);
+ map.deinit(allocator);
}
fn allocate(self: *Self, allocator: Allocator, new_capacity: Size) Allocator.Error!void {
@@ -2266,3 +2267,8 @@ test "repeat fetchRemove" {
try testing.expect(map.get(2) != null);
try testing.expect(map.get(3) != null);
}
+
+test "getOrPut allocation failure" {
+ var map: std.StringHashMapUnmanaged(void) = .{};
+ try testing.expectError(error.OutOfMemory, map.getOrPut(std.testing.failing_allocator, "hello"));
+}
diff --git a/lib/std/heap.zig b/lib/std/heap.zig
index e49b3c1e5c..9b99f7e1d9 100644
--- a/lib/std/heap.zig
+++ b/lib/std/heap.zig
@@ -4,9 +4,9 @@ const root = @import("root");
const assert = std.debug.assert;
const testing = std.testing;
const mem = std.mem;
-const os = std.os;
const c = std.c;
const Allocator = std.mem.Allocator;
+const windows = std.os.windows;
pub const LoggingAllocator = @import("heap/logging_allocator.zig").LoggingAllocator;
pub const loggingAllocator = @import("heap/logging_allocator.zig").loggingAllocator;
@@ -263,7 +263,7 @@ pub const HeapAllocator = switch (builtin.os.tag) {
.windows => struct {
heap_handle: ?HeapHandle,
- const HeapHandle = os.windows.HANDLE;
+ const HeapHandle = windows.HANDLE;
pub fn init() HeapAllocator {
return HeapAllocator{
@@ -284,7 +284,7 @@ pub const HeapAllocator = switch (builtin.os.tag) {
pub fn deinit(self: *HeapAllocator) void {
if (self.heap_handle) |heap_handle| {
- os.windows.HeapDestroy(heap_handle);
+ windows.HeapDestroy(heap_handle);
}
}
@@ -305,13 +305,13 @@ pub const HeapAllocator = switch (builtin.os.tag) {
const amt = n + ptr_align - 1 + @sizeOf(usize);
const optional_heap_handle = @atomicLoad(?HeapHandle, &self.heap_handle, .seq_cst);
const heap_handle = optional_heap_handle orelse blk: {
- const options = if (builtin.single_threaded) os.windows.HEAP_NO_SERIALIZE else 0;
- const hh = os.windows.kernel32.HeapCreate(options, amt, 0) orelse return null;
+ const options = if (builtin.single_threaded) windows.HEAP_NO_SERIALIZE else 0;
+ const hh = windows.kernel32.HeapCreate(options, amt, 0) orelse return null;
const other_hh = @cmpxchgStrong(?HeapHandle, &self.heap_handle, null, hh, .seq_cst, .seq_cst) orelse break :blk hh;
- os.windows.HeapDestroy(hh);
+ windows.HeapDestroy(hh);
break :blk other_hh.?; // can't be null because of the cmpxchg
};
- const ptr = os.windows.kernel32.HeapAlloc(heap_handle, 0, amt) orelse return null;
+ const ptr = windows.kernel32.HeapAlloc(heap_handle, 0, amt) orelse return null;
const root_addr = @intFromPtr(ptr);
const aligned_addr = mem.alignForward(usize, root_addr, ptr_align);
const buf = @as([*]u8, @ptrFromInt(aligned_addr))[0..n];
@@ -333,9 +333,9 @@ pub const HeapAllocator = switch (builtin.os.tag) {
const root_addr = getRecordPtr(buf).*;
const align_offset = @intFromPtr(buf.ptr) - root_addr;
const amt = align_offset + new_size + @sizeOf(usize);
- const new_ptr = os.windows.kernel32.HeapReAlloc(
+ const new_ptr = windows.kernel32.HeapReAlloc(
self.heap_handle.?,
- os.windows.HEAP_REALLOC_IN_PLACE_ONLY,
+ windows.HEAP_REALLOC_IN_PLACE_ONLY,
@as(*anyopaque, @ptrFromInt(root_addr)),
amt,
) orelse return false;
@@ -353,7 +353,7 @@ pub const HeapAllocator = switch (builtin.os.tag) {
_ = log2_buf_align;
_ = return_address;
const self: *HeapAllocator = @ptrCast(@alignCast(ctx));
- os.windows.HeapFree(self.heap_handle.?, 0, @as(*anyopaque, @ptrFromInt(getRecordPtr(buf).*)));
+ windows.HeapFree(self.heap_handle.?, 0, @as(*anyopaque, @ptrFromInt(getRecordPtr(buf).*)));
}
},
else => @compileError("Unsupported OS"),
diff --git a/lib/std/heap/PageAllocator.zig b/lib/std/heap/PageAllocator.zig
index 5f8c506f24..67cafe48d9 100644
--- a/lib/std/heap/PageAllocator.zig
+++ b/lib/std/heap/PageAllocator.zig
@@ -2,9 +2,11 @@ const std = @import("../std.zig");
const builtin = @import("builtin");
const Allocator = std.mem.Allocator;
const mem = std.mem;
-const os = std.os;
const maxInt = std.math.maxInt;
const assert = std.debug.assert;
+const native_os = builtin.os.tag;
+const windows = std.os.windows;
+const posix = std.posix;
pub const vtable = Allocator.VTable{
.alloc = alloc,
@@ -19,22 +21,21 @@ fn alloc(_: *anyopaque, n: usize, log2_align: u8, ra: usize) ?[*]u8 {
if (n > maxInt(usize) - (mem.page_size - 1)) return null;
const aligned_len = mem.alignForward(usize, n, mem.page_size);
- if (builtin.os.tag == .windows) {
- const w = os.windows;
- const addr = w.VirtualAlloc(
+ if (native_os == .windows) {
+ const addr = windows.VirtualAlloc(
null,
aligned_len,
- w.MEM_COMMIT | w.MEM_RESERVE,
- w.PAGE_READWRITE,
+ windows.MEM_COMMIT | windows.MEM_RESERVE,
+ windows.PAGE_READWRITE,
) catch return null;
return @ptrCast(addr);
}
const hint = @atomicLoad(@TypeOf(std.heap.next_mmap_addr_hint), &std.heap.next_mmap_addr_hint, .unordered);
- const slice = os.mmap(
+ const slice = posix.mmap(
hint,
aligned_len,
- os.PROT.READ | os.PROT.WRITE,
+ posix.PROT.READ | posix.PROT.WRITE,
.{ .TYPE = .PRIVATE, .ANONYMOUS = true },
-1,
0,
@@ -56,8 +57,7 @@ fn resize(
_ = return_address;
const new_size_aligned = mem.alignForward(usize, new_size, mem.page_size);
- if (builtin.os.tag == .windows) {
- const w = os.windows;
+ if (native_os == .windows) {
if (new_size <= buf_unaligned.len) {
const base_addr = @intFromPtr(buf_unaligned.ptr);
const old_addr_end = base_addr + buf_unaligned.len;
@@ -65,10 +65,10 @@ fn resize(
if (old_addr_end > new_addr_end) {
// For shrinking that is not releasing, we will only
// decommit the pages not needed anymore.
- w.VirtualFree(
+ windows.VirtualFree(
@as(*anyopaque, @ptrFromInt(new_addr_end)),
old_addr_end - new_addr_end,
- w.MEM_DECOMMIT,
+ windows.MEM_DECOMMIT,
);
}
return true;
@@ -87,7 +87,7 @@ fn resize(
if (new_size_aligned < buf_aligned_len) {
const ptr = buf_unaligned.ptr + new_size_aligned;
// TODO: if the next_mmap_addr_hint is within the unmapped range, update it
- os.munmap(@alignCast(ptr[0 .. buf_aligned_len - new_size_aligned]));
+ posix.munmap(@alignCast(ptr[0 .. buf_aligned_len - new_size_aligned]));
return true;
}
@@ -100,10 +100,10 @@ fn free(_: *anyopaque, slice: []u8, log2_buf_align: u8, return_address: usize) v
_ = log2_buf_align;
_ = return_address;
- if (builtin.os.tag == .windows) {
- os.windows.VirtualFree(slice.ptr, 0, os.windows.MEM_RELEASE);
+ if (native_os == .windows) {
+ windows.VirtualFree(slice.ptr, 0, windows.MEM_RELEASE);
} else {
const buf_aligned_len = mem.alignForward(usize, slice.len, mem.page_size);
- os.munmap(@alignCast(slice.ptr[0..buf_aligned_len]));
+ posix.munmap(@alignCast(slice.ptr[0..buf_aligned_len]));
}
}
diff --git a/lib/std/http/Client.zig b/lib/std/http/Client.zig
index 339afdb96e..0e70b839b4 100644
--- a/lib/std/http/Client.zig
+++ b/lib/std/http/Client.zig
@@ -220,7 +220,7 @@ pub const Connection = struct {
pub const Protocol = enum { plain, tls };
- pub fn readvDirectTls(conn: *Connection, buffers: []std.os.iovec) ReadError!usize {
+ pub fn readvDirectTls(conn: *Connection, buffers: []std.posix.iovec) ReadError!usize {
return conn.tls_client.readv(conn.stream, buffers) catch |err| {
// https://github.com/ziglang/zig/issues/2473
if (mem.startsWith(u8, @errorName(err), "TlsAlert")) return error.TlsAlert;
@@ -234,7 +234,7 @@ pub const Connection = struct {
};
}
- pub fn readvDirect(conn: *Connection, buffers: []std.os.iovec) ReadError!usize {
+ pub fn readvDirect(conn: *Connection, buffers: []std.posix.iovec) ReadError!usize {
if (conn.protocol == .tls) {
if (disable_tls) unreachable;
@@ -252,7 +252,7 @@ pub const Connection = struct {
pub fn fill(conn: *Connection) ReadError!void {
if (conn.read_end != conn.read_start) return;
- var iovecs = [1]std.os.iovec{
+ var iovecs = [1]std.posix.iovec{
.{ .iov_base = &conn.read_buf, .iov_len = conn.read_buf.len },
};
const nread = try conn.readvDirect(&iovecs);
@@ -288,7 +288,7 @@ pub const Connection = struct {
return available_read;
}
- var iovecs = [2]std.os.iovec{
+ var iovecs = [2]std.posix.iovec{
.{ .iov_base = buffer.ptr, .iov_len = buffer.len },
.{ .iov_base = &conn.read_buf, .iov_len = conn.read_buf.len },
};
@@ -1387,7 +1387,7 @@ pub fn connectTcp(client: *Client, host: []const u8, port: u16, protocol: Connec
return &conn.data;
}
-pub const ConnectUnixError = Allocator.Error || std.os.SocketError || error{NameTooLong} || std.os.ConnectError;
+pub const ConnectUnixError = Allocator.Error || std.posix.SocketError || error{NameTooLong} || std.posix.ConnectError;
/// Connect to `path` as a unix domain socket. This will reuse a connection if one is already open.
///
diff --git a/lib/std/io.zig b/lib/std/io.zig
index df220e2489..58724c582e 100644
--- a/lib/std/io.zig
+++ b/lib/std/io.zig
@@ -2,74 +2,76 @@ const std = @import("std.zig");
const builtin = @import("builtin");
const root = @import("root");
const c = std.c;
+const is_windows = builtin.os.tag == .windows;
+const windows = std.os.windows;
+const posix = std.posix;
const math = std.math;
const assert = std.debug.assert;
-const os = std.os;
const fs = std.fs;
const mem = std.mem;
const meta = std.meta;
const File = std.fs.File;
const Allocator = std.mem.Allocator;
-fn getStdOutHandle() os.fd_t {
- if (builtin.os.tag == .windows) {
+fn getStdOutHandle() posix.fd_t {
+ if (is_windows) {
if (builtin.zig_backend == .stage2_aarch64) {
// TODO: this is just a temporary workaround until we advance aarch64 backend further along.
- return os.windows.GetStdHandle(os.windows.STD_OUTPUT_HANDLE) catch os.windows.INVALID_HANDLE_VALUE;
+ return windows.GetStdHandle(windows.STD_OUTPUT_HANDLE) catch windows.INVALID_HANDLE_VALUE;
}
- return os.windows.peb().ProcessParameters.hStdOutput;
+ return windows.peb().ProcessParameters.hStdOutput;
}
if (@hasDecl(root, "os") and @hasDecl(root.os, "io") and @hasDecl(root.os.io, "getStdOutHandle")) {
return root.os.io.getStdOutHandle();
}
- return os.STDOUT_FILENO;
+ return posix.STDOUT_FILENO;
}
pub fn getStdOut() File {
- return File{ .handle = getStdOutHandle() };
+ return .{ .handle = getStdOutHandle() };
}
-fn getStdErrHandle() os.fd_t {
- if (builtin.os.tag == .windows) {
+fn getStdErrHandle() posix.fd_t {
+ if (is_windows) {
if (builtin.zig_backend == .stage2_aarch64) {
// TODO: this is just a temporary workaround until we advance aarch64 backend further along.
- return os.windows.GetStdHandle(os.windows.STD_ERROR_HANDLE) catch os.windows.INVALID_HANDLE_VALUE;
+ return windows.GetStdHandle(windows.STD_ERROR_HANDLE) catch windows.INVALID_HANDLE_VALUE;
}
- return os.windows.peb().ProcessParameters.hStdError;
+ return windows.peb().ProcessParameters.hStdError;
}
if (@hasDecl(root, "os") and @hasDecl(root.os, "io") and @hasDecl(root.os.io, "getStdErrHandle")) {
return root.os.io.getStdErrHandle();
}
- return os.STDERR_FILENO;
+ return posix.STDERR_FILENO;
}
pub fn getStdErr() File {
- return File{ .handle = getStdErrHandle() };
+ return .{ .handle = getStdErrHandle() };
}
-fn getStdInHandle() os.fd_t {
- if (builtin.os.tag == .windows) {
+fn getStdInHandle() posix.fd_t {
+ if (is_windows) {
if (builtin.zig_backend == .stage2_aarch64) {
// TODO: this is just a temporary workaround until we advance aarch64 backend further along.
- return os.windows.GetStdHandle(os.windows.STD_INPUT_HANDLE) catch os.windows.INVALID_HANDLE_VALUE;
+ return windows.GetStdHandle(windows.STD_INPUT_HANDLE) catch windows.INVALID_HANDLE_VALUE;
}
- return os.windows.peb().ProcessParameters.hStdInput;
+ return windows.peb().ProcessParameters.hStdInput;
}
if (@hasDecl(root, "os") and @hasDecl(root.os, "io") and @hasDecl(root.os.io, "getStdInHandle")) {
return root.os.io.getStdInHandle();
}
- return os.STDIN_FILENO;
+ return posix.STDIN_FILENO;
}
pub fn getStdIn() File {
- return File{ .handle = getStdInHandle() };
+ return .{ .handle = getStdInHandle() };
}
pub fn GenericReader(
@@ -408,9 +410,6 @@ pub const BufferedAtomicFile = @import("io/buffered_atomic_file.zig").BufferedAt
pub const StreamSource = @import("io/stream_source.zig").StreamSource;
-pub const BufferedTee = @import("io/buffered_tee.zig").BufferedTee;
-pub const bufferedTee = @import("io/buffered_tee.zig").bufferedTee;
-
pub const tty = @import("io/tty.zig");
/// A Writer that doesn't write to anything.
@@ -434,10 +433,10 @@ pub fn poll(
const enum_fields = @typeInfo(StreamEnum).Enum.fields;
var result: Poller(StreamEnum) = undefined;
- if (builtin.os.tag == .windows) result.windows = .{
+ if (is_windows) result.windows = .{
.first_read_done = false,
- .overlapped = [1]os.windows.OVERLAPPED{
- mem.zeroes(os.windows.OVERLAPPED),
+ .overlapped = [1]windows.OVERLAPPED{
+ mem.zeroes(windows.OVERLAPPED),
} ** enum_fields.len,
.active = .{
.count = 0,
@@ -453,12 +452,12 @@ pub fn poll(
.head = 0,
.count = 0,
};
- if (builtin.os.tag == .windows) {
+ if (is_windows) {
result.windows.active.handles_buf[i] = @field(files, enum_fields[i].name).handle;
} else {
result.poll_fds[i] = .{
.fd = @field(files, enum_fields[i].name).handle,
- .events = os.POLL.IN,
+ .events = posix.POLL.IN,
.revents = undefined,
};
}
@@ -471,16 +470,16 @@ pub const PollFifo = std.fifo.LinearFifo(u8, .Dynamic);
pub fn Poller(comptime StreamEnum: type) type {
return struct {
const enum_fields = @typeInfo(StreamEnum).Enum.fields;
- const PollFd = if (builtin.os.tag == .windows) void else std.os.pollfd;
+ const PollFd = if (is_windows) void else posix.pollfd;
fifos: [enum_fields.len]PollFifo,
poll_fds: [enum_fields.len]PollFd,
- windows: if (builtin.os.tag == .windows) struct {
+ windows: if (is_windows) struct {
first_read_done: bool,
- overlapped: [enum_fields.len]os.windows.OVERLAPPED,
+ overlapped: [enum_fields.len]windows.OVERLAPPED,
active: struct {
count: math.IntFittingRange(0, enum_fields.len),
- handles_buf: [enum_fields.len]os.windows.HANDLE,
+ handles_buf: [enum_fields.len]windows.HANDLE,
stream_map: [enum_fields.len]StreamEnum,
pub fn removeAt(self: *@This(), index: u32) void {
@@ -497,10 +496,10 @@ pub fn Poller(comptime StreamEnum: type) type {
const Self = @This();
pub fn deinit(self: *Self) void {
- if (builtin.os.tag == .windows) {
+ if (is_windows) {
// cancel any pending IO to prevent clobbering OVERLAPPED value
for (self.windows.active.handles_buf[0..self.windows.active.count]) |h| {
- _ = os.windows.kernel32.CancelIo(h);
+ _ = windows.kernel32.CancelIo(h);
}
}
inline for (&self.fifos) |*q| q.deinit();
@@ -508,7 +507,7 @@ pub fn Poller(comptime StreamEnum: type) type {
}
pub fn poll(self: *Self) !bool {
- if (builtin.os.tag == .windows) {
+ if (is_windows) {
return pollWindows(self, null);
} else {
return pollPosix(self, null);
@@ -516,7 +515,7 @@ pub fn Poller(comptime StreamEnum: type) type {
}
pub fn pollTimeout(self: *Self, nanoseconds: u64) !bool {
- if (builtin.os.tag == .windows) {
+ if (is_windows) {
return pollWindows(self, nanoseconds);
} else {
return pollPosix(self, nanoseconds);
@@ -554,39 +553,39 @@ pub fn Poller(comptime StreamEnum: type) type {
while (true) {
if (self.windows.active.count == 0) return false;
- const status = os.windows.kernel32.WaitForMultipleObjects(
+ const status = windows.kernel32.WaitForMultipleObjects(
self.windows.active.count,
&self.windows.active.handles_buf,
0,
if (nanoseconds) |ns|
- @min(std.math.cast(u32, ns / std.time.ns_per_ms) orelse (os.windows.INFINITE - 1), os.windows.INFINITE - 1)
+ @min(std.math.cast(u32, ns / std.time.ns_per_ms) orelse (windows.INFINITE - 1), windows.INFINITE - 1)
else
- os.windows.INFINITE,
+ windows.INFINITE,
);
- if (status == os.windows.WAIT_FAILED)
- return os.windows.unexpectedError(os.windows.kernel32.GetLastError());
- if (status == os.windows.WAIT_TIMEOUT)
+ if (status == windows.WAIT_FAILED)
+ return windows.unexpectedError(windows.kernel32.GetLastError());
+ if (status == windows.WAIT_TIMEOUT)
return true;
- if (status < os.windows.WAIT_OBJECT_0 or status > os.windows.WAIT_OBJECT_0 + enum_fields.len - 1)
+ if (status < windows.WAIT_OBJECT_0 or status > windows.WAIT_OBJECT_0 + enum_fields.len - 1)
unreachable;
- const active_idx = status - os.windows.WAIT_OBJECT_0;
+ const active_idx = status - windows.WAIT_OBJECT_0;
const handle = self.windows.active.handles_buf[active_idx];
const stream_idx = @intFromEnum(self.windows.active.stream_map[active_idx]);
var read_bytes: u32 = undefined;
- if (0 == os.windows.kernel32.GetOverlappedResult(
+ if (0 == windows.kernel32.GetOverlappedResult(
handle,
&self.windows.overlapped[stream_idx],
&read_bytes,
0,
- )) switch (os.windows.kernel32.GetLastError()) {
+ )) switch (windows.kernel32.GetLastError()) {
.BROKEN_PIPE => {
self.windows.active.removeAt(active_idx);
continue;
},
- else => |err| return os.windows.unexpectedError(err),
+ else => |err| return windows.unexpectedError(err),
};
self.fifos[stream_idx].update(read_bytes);
@@ -611,9 +610,9 @@ pub fn Poller(comptime StreamEnum: type) type {
// allocate grows exponentially.
const bump_amt = 512;
- const err_mask = os.POLL.ERR | os.POLL.NVAL | os.POLL.HUP;
+ const err_mask = posix.POLL.ERR | posix.POLL.NVAL | posix.POLL.HUP;
- const events_len = try os.poll(&self.poll_fds, if (nanoseconds) |ns|
+ const events_len = try posix.poll(&self.poll_fds, if (nanoseconds) |ns|
std.math.cast(i32, ns / std.time.ns_per_ms) orelse std.math.maxInt(i32)
else
-1);
@@ -629,9 +628,9 @@ pub fn Poller(comptime StreamEnum: type) type {
// conditions.
// It's still possible to read after a POLL.HUP is received,
// always check if there's some data waiting to be read first.
- if (poll_fd.revents & os.POLL.IN != 0) {
+ if (poll_fd.revents & posix.POLL.IN != 0) {
const buf = try q.writableWithSize(bump_amt);
- const amt = try os.read(poll_fd.fd, buf);
+ const amt = try posix.read(poll_fd.fd, buf);
q.update(amt);
if (amt == 0) {
// Remove the fd when the EOF condition is met.
@@ -652,19 +651,19 @@ pub fn Poller(comptime StreamEnum: type) type {
}
fn windowsAsyncRead(
- handle: os.windows.HANDLE,
- overlapped: *os.windows.OVERLAPPED,
+ handle: windows.HANDLE,
+ overlapped: *windows.OVERLAPPED,
fifo: *PollFifo,
bump_amt: usize,
) !enum { pending, closed } {
while (true) {
const buf = try fifo.writableWithSize(bump_amt);
var read_bytes: u32 = undefined;
- const read_result = os.windows.kernel32.ReadFile(handle, buf.ptr, math.cast(u32, buf.len) orelse math.maxInt(u32), &read_bytes, overlapped);
- if (read_result == 0) return switch (os.windows.kernel32.GetLastError()) {
+ const read_result = windows.kernel32.ReadFile(handle, buf.ptr, math.cast(u32, buf.len) orelse math.maxInt(u32), &read_bytes, overlapped);
+ if (read_result == 0) return switch (windows.kernel32.GetLastError()) {
.IO_PENDING => .pending,
.BROKEN_PIPE => .closed,
- else => |err| os.windows.unexpectedError(err),
+ else => |err| windows.unexpectedError(err),
};
fifo.update(read_bytes);
}
@@ -707,5 +706,4 @@ test {
_ = @import("io/seekable_stream.zig");
_ = @import("io/stream_source.zig");
_ = @import("io/test.zig");
- _ = @import("io/buffered_tee.zig");
}
diff --git a/lib/std/io/buffered_tee.zig b/lib/std/io/buffered_tee.zig
deleted file mode 100644
index d5748c3a52..0000000000
--- a/lib/std/io/buffered_tee.zig
+++ /dev/null
@@ -1,379 +0,0 @@
-const std = @import("std");
-const io = std.io;
-const assert = std.debug.assert;
-const testing = std.testing;
-
-/// BufferedTee provides reader interface to the consumer. Data read by consumer
-/// is also written to the output. Output is hold lookahead_size bytes behind
-/// consumer. Allowing consumer to put back some bytes to be read again. On flush
-/// all consumed bytes are flushed to the output.
-///
-/// input -> tee -> consumer
-/// |
-/// output
-///
-/// input - underlying unbuffered reader
-/// output - writer, receives data read by consumer
-/// consumer - uses provided reader interface
-///
-/// If lookahead_size is zero output always has same bytes as consumer.
-///
-pub fn BufferedTee(
- comptime buffer_size: usize, // internal buffer size in bytes
- comptime lookahead_size: usize, // lookahead, number of bytes to hold output behind consumer
- comptime InputReaderType: type,
- comptime OutputWriterType: type,
-) type {
- comptime assert(buffer_size > lookahead_size);
-
- return struct {
- input: InputReaderType,
- output: OutputWriterType,
-
- buf: [buffer_size]u8 = undefined, // internal buffer
- tail: usize = 0, // buffer is filled up to this position with bytes from input
- rp: usize = 0, // reader pointer; consumer has read up to this position
- wp: usize = 0, // writer pointer; data is sent to the output up to this position
-
- pub const Error = InputReaderType.Error || OutputWriterType.Error;
- pub const Reader = io.Reader(*Self, Error, read);
-
- const Self = @This();
-
- pub fn read(self: *Self, dest: []u8) Error!usize {
- var dest_index: usize = 0;
-
- while (dest_index < dest.len) {
- const written = @min(dest.len - dest_index, self.tail - self.rp);
- if (written == 0) {
- try self.preserveLookahead();
- // fill upper part of the buf
- const n = try self.input.read(self.buf[self.tail..]);
- if (n == 0) {
- // reading from the unbuffered stream returned nothing
- // so we have nothing left to read.
- return dest_index;
- }
- self.tail += n;
- } else {
- @memcpy(dest[dest_index..][0..written], self.buf[self.rp..][0..written]);
- self.rp += written;
- dest_index += written;
- try self.flush_(lookahead_size);
- }
- }
- return dest.len;
- }
-
- /// Move lookahead_size bytes to the buffer start.
- fn preserveLookahead(self: *Self) !void {
- assert(self.tail == self.rp);
- if (lookahead_size == 0) {
- // Flush is called on each read so wp must follow rp when lookahead_size == 0.
- assert(self.wp == self.rp);
- // Nothing to preserve rewind pointer to the buffer start
- self.rp = 0;
- self.wp = 0;
- self.tail = 0;
- return;
- }
- if (self.tail <= lookahead_size) {
- // There is still palce in the buffer, append to buffer from tail position.
- return;
- }
- try self.flush_(lookahead_size);
- const head = self.tail - lookahead_size;
- // Preserve head..tail at the start of the buffer.
- std.mem.copyForwards(u8, self.buf[0..lookahead_size], self.buf[head..self.tail]);
- self.wp -= head;
- assert(self.wp <= lookahead_size);
- self.rp = lookahead_size;
- self.tail = lookahead_size;
- }
-
- /// Flush to the output all but lookahead size bytes.
- fn flush_(self: *Self, lookahead: usize) !void {
- if (self.rp <= self.wp + lookahead) return;
- const new_wp = self.rp - lookahead;
- try self.output.writeAll(self.buf[self.wp..new_wp]);
- self.wp = new_wp;
- }
-
- /// Flush to the output all consumed bytes.
- pub fn flush(self: *Self) !void {
- try self.flush_(0);
- }
-
- /// Put back some bytes to be consumed again. Usefull when we overshoot
- /// reading and want to return that overshoot bytes. Can return maximum
- /// of lookahead_size number of bytes.
- pub fn putBack(self: *Self, n: usize) void {
- assert(n <= lookahead_size and n <= self.rp);
- self.rp -= n;
- }
-
- pub fn reader(self: *Self) Reader {
- return .{ .context = self };
- }
- };
-}
-
-pub fn bufferedTee(
- comptime buffer_size: usize,
- comptime lookahead_size: usize,
- input: anytype,
- output: anytype,
-) BufferedTee(
- buffer_size,
- lookahead_size,
- @TypeOf(input),
- @TypeOf(output),
-) {
- return .{ .input = input, .output = output };
-}
-
-// Running test from std.io.BufferedReader on BufferedTee
-// It should act as BufferedReader for consumer.
-
-fn BufferedReader(comptime buffer_size: usize, comptime ReaderType: type) type {
- return BufferedTee(buffer_size, 0, ReaderType, @TypeOf(io.null_writer));
-}
-
-fn bufferedReader(reader: anytype) BufferedReader(4096, @TypeOf(reader)) {
- return .{
- .input = reader,
- .output = io.null_writer,
- };
-}
-
-test "OneByte" {
- const OneByteReadReader = struct {
- str: []const u8,
- curr: usize,
-
- const Error = error{NoError};
- const Self = @This();
- const Reader = io.Reader(*Self, Error, read);
-
- fn init(str: []const u8) Self {
- return Self{
- .str = str,
- .curr = 0,
- };
- }
-
- fn read(self: *Self, dest: []u8) Error!usize {
- if (self.str.len <= self.curr or dest.len == 0)
- return 0;
-
- dest[0] = self.str[self.curr];
- self.curr += 1;
- return 1;
- }
-
- fn reader(self: *Self) Reader {
- return .{ .context = self };
- }
- };
-
- const str = "This is a test";
- var one_byte_stream = OneByteReadReader.init(str);
- var buf_reader = bufferedReader(one_byte_stream.reader());
- const stream = buf_reader.reader();
-
- const res = try stream.readAllAlloc(testing.allocator, str.len + 1);
- defer testing.allocator.free(res);
- try testing.expectEqualSlices(u8, str, res);
-}
-
-test "Block" {
- const BlockReader = struct {
- block: []const u8,
- reads_allowed: usize,
- curr_read: usize,
-
- const Error = error{NoError};
- const Self = @This();
- const Reader = io.Reader(*Self, Error, read);
-
- fn init(block: []const u8, reads_allowed: usize) Self {
- return Self{
- .block = block,
- .reads_allowed = reads_allowed,
- .curr_read = 0,
- };
- }
-
- fn read(self: *Self, dest: []u8) Error!usize {
- if (self.curr_read >= self.reads_allowed) return 0;
- @memcpy(dest[0..self.block.len], self.block);
-
- self.curr_read += 1;
- return self.block.len;
- }
-
- fn reader(self: *Self) Reader {
- return .{ .context = self };
- }
- };
-
- const block = "0123";
-
- // len out == block
- {
- var test_buf_reader: BufferedReader(4, BlockReader) = .{
- .input = BlockReader.init(block, 2),
- .output = io.null_writer,
- };
- var out_buf: [4]u8 = undefined;
- _ = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, &out_buf, block);
- _ = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, &out_buf, block);
- try testing.expectEqual(try test_buf_reader.read(&out_buf), 0);
- }
-
- // len out < block
- {
- var test_buf_reader: BufferedReader(4, BlockReader) = .{
- .input = BlockReader.init(block, 2),
- .output = io.null_writer,
- };
- var out_buf: [3]u8 = undefined;
- _ = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, &out_buf, "012");
- _ = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, &out_buf, "301");
- const n = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, out_buf[0..n], "23");
- try testing.expectEqual(try test_buf_reader.read(&out_buf), 0);
- }
-
- // len out > block
- {
- var test_buf_reader: BufferedReader(4, BlockReader) = .{
- .input = BlockReader.init(block, 2),
- .output = io.null_writer,
- };
- var out_buf: [5]u8 = undefined;
- _ = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, &out_buf, "01230");
- const n = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, out_buf[0..n], "123");
- try testing.expectEqual(try test_buf_reader.read(&out_buf), 0);
- }
-
- // len out == 0
- {
- var test_buf_reader: BufferedReader(4, BlockReader) = .{
- .input = BlockReader.init(block, 2),
- .output = io.null_writer,
- };
- var out_buf: [0]u8 = undefined;
- _ = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, &out_buf, "");
- }
-
- // len bufreader buf > block
- {
- var test_buf_reader: BufferedReader(5, BlockReader) = .{
- .input = BlockReader.init(block, 2),
- .output = io.null_writer,
- };
- var out_buf: [4]u8 = undefined;
- _ = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, &out_buf, block);
- _ = try test_buf_reader.read(&out_buf);
- try testing.expectEqualSlices(u8, &out_buf, block);
- try testing.expectEqual(try test_buf_reader.read(&out_buf), 0);
- }
-}
-
-test "with zero lookahead" {
- // output has same bytes as consumer
- const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 12;
- var in = io.fixedBufferStream(&data);
- var out = std.ArrayList(u8).init(testing.allocator);
- defer out.deinit();
-
- var bt = bufferedTee(8, 0, in.reader(), out.writer());
-
- var buf: [16]u8 = undefined;
- var read_len: usize = 0;
- for (0..buf.len) |i| {
- const n = try bt.read(buf[0..i]);
- try testing.expectEqual(i, n);
- read_len += i;
- try testing.expectEqual(read_len, out.items.len);
- }
-}
-
-test "with lookahead" {
- // output is lookahead bytes behind consumer
- inline for (1..8) |lookahead| {
- const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 12;
- var in = io.fixedBufferStream(&data);
- var out = std.ArrayList(u8).init(testing.allocator);
- defer out.deinit();
-
- var bt = bufferedTee(8, lookahead, in.reader(), out.writer());
- var buf: [16]u8 = undefined;
-
- var read_len: usize = 0;
- for (1..buf.len) |i| {
- const n = try bt.read(buf[0..i]);
- try testing.expectEqual(i, n);
- read_len += i;
- const out_len = if (read_len < lookahead) 0 else read_len - lookahead;
- try testing.expectEqual(out_len, out.items.len);
- }
- try testing.expectEqual(read_len, out.items.len + lookahead);
- try bt.flush();
- try testing.expectEqual(read_len, out.items.len);
- }
-}
-
-test "internal state" {
- const data = [_]u8{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ** 2;
- var in = io.fixedBufferStream(&data);
- var out = std.ArrayList(u8).init(testing.allocator);
- defer out.deinit();
-
- var bt = bufferedTee(8, 4, in.reader(), out.writer());
-
- var buf: [16]u8 = undefined;
- var n = try bt.read(buf[0..3]);
- try testing.expectEqual(3, n);
- try testing.expectEqualSlices(u8, data[0..3], buf[0..n]);
- try testing.expectEqual(8, bt.tail);
- try testing.expectEqual(3, bt.rp);
- try testing.expectEqual(0, out.items.len);
-
- n = try bt.read(buf[0..6]);
- try testing.expectEqual(6, n);
- try testing.expectEqualSlices(u8, data[3..9], buf[0..n]);
- try testing.expectEqual(8, bt.tail);
- try testing.expectEqual(5, bt.rp);
- try testing.expectEqualSlices(u8, data[4..12], &bt.buf);
- try testing.expectEqual(5, out.items.len);
-
- n = try bt.read(buf[0..9]);
- try testing.expectEqual(9, n);
- try testing.expectEqualSlices(u8, data[9..18], buf[0..n]);
- try testing.expectEqual(8, bt.tail);
- try testing.expectEqual(6, bt.rp);
- try testing.expectEqualSlices(u8, data[12..20], &bt.buf);
- try testing.expectEqual(14, out.items.len);
-
- try bt.flush();
- try testing.expectEqual(18, out.items.len);
-
- bt.putBack(4);
- n = try bt.read(buf[0..4]);
- try testing.expectEqual(4, n);
- try testing.expectEqualSlices(u8, data[14..18], buf[0..n]);
-
- try testing.expectEqual(18, out.items.len);
- try bt.flush();
- try testing.expectEqual(18, out.items.len);
-}
diff --git a/lib/std/io/c_writer.zig b/lib/std/io/c_writer.zig
index ee87a28dc6..cbe4e7834d 100644
--- a/lib/std/io/c_writer.zig
+++ b/lib/std/io/c_writer.zig
@@ -2,7 +2,6 @@ const std = @import("../std.zig");
const builtin = @import("builtin");
const io = std.io;
const testing = std.testing;
-const os = std.os;
pub const CWriter = io.Writer(*std.c.FILE, std.fs.File.WriteError, cWriterWrite);
@@ -13,7 +12,7 @@ pub fn cWriter(c_file: *std.c.FILE) CWriter {
fn cWriterWrite(c_file: *std.c.FILE, bytes: []const u8) std.fs.File.WriteError!usize {
const amt_written = std.c.fwrite(bytes.ptr, 1, bytes.len, c_file);
if (amt_written >= 0) return amt_written;
- switch (@as(os.E, @enumFromInt(std.c._errno().*))) {
+ switch (@as(std.c.E, @enumFromInt(std.c._errno().*))) {
.SUCCESS => unreachable,
.INVAL => unreachable,
.FAULT => unreachable,
@@ -26,11 +25,11 @@ fn cWriterWrite(c_file: *std.c.FILE, bytes: []const u8) std.fs.File.WriteError!u
.NOSPC => return error.NoSpaceLeft,
.PERM => return error.AccessDenied,
.PIPE => return error.BrokenPipe,
- else => |err| return os.unexpectedErrno(err),
+ else => |err| return std.posix.unexpectedErrno(err),
}
}
-test "C Writer" {
+test cWriter {
if (!builtin.link_libc or builtin.os.tag == .wasi) return error.SkipZigTest;
const filename = "tmp_io_test_file.txt";
diff --git a/lib/std/math/frexp.zig b/lib/std/math/frexp.zig
index f295b959cb..97b578db98 100644
--- a/lib/std/math/frexp.zig
+++ b/lib/std/math/frexp.zig
@@ -1,13 +1,8 @@
-// Ported from musl, which is MIT licensed:
-// https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT
-//
-// https://git.musl-libc.org/cgit/musl/tree/src/math/frexpl.c
-// https://git.musl-libc.org/cgit/musl/tree/src/math/frexpf.c
-// https://git.musl-libc.org/cgit/musl/tree/src/math/frexp.c
-
const std = @import("../std.zig");
const math = std.math;
const expect = std.testing.expect;
+const expectEqual = std.testing.expectEqual;
+const expectApproxEqAbs = std.testing.expectApproxEqAbs;
pub fn Frexp(comptime T: type) type {
return struct {
@@ -24,228 +19,210 @@ pub fn Frexp(comptime T: type) type {
/// - frexp(+-inf) = +-inf, 0
/// - frexp(nan) = nan, undefined
pub fn frexp(x: anytype) Frexp(@TypeOf(x)) {
- const T = @TypeOf(x);
- return switch (T) {
- f32 => frexp32(x),
- f64 => frexp64(x),
- f128 => frexp128(x),
- else => @compileError("frexp not implemented for " ++ @typeName(T)),
- };
-}
-
-// TODO: unify all these implementations using generics
-
-fn frexp32(x: f32) Frexp(f32) {
- var result: Frexp(f32) = undefined;
-
- var y = @as(u32, @bitCast(x));
- const e = @as(i32, @intCast(y >> 23)) & 0xFF;
-
- if (e == 0) {
- if (x != 0) {
- // subnormal
- result = frexp32(x * 0x1.0p64);
- result.exponent -= 64;
- } else {
- // frexp(+-0) = (+-0, 0)
- result.significand = x;
- result.exponent = 0;
- }
- return result;
- } else if (e == 0xFF) {
- // frexp(nan) = (nan, undefined)
- result.significand = x;
- result.exponent = undefined;
-
- // frexp(+-inf) = (+-inf, 0)
- if (math.isInf(x)) {
- result.exponent = 0;
- }
-
- return result;
+ const T: type = @TypeOf(x);
+
+ const bits: comptime_int = @typeInfo(T).Float.bits;
+ const Int: type = std.meta.Int(.unsigned, bits);
+
+ const exp_bits: comptime_int = math.floatExponentBits(T);
+ const mant_bits: comptime_int = math.floatMantissaBits(T);
+ const frac_bits: comptime_int = math.floatFractionalBits(T);
+ const exp_min: comptime_int = math.floatExponentMin(T);
+
+ const ExpInt: type = std.meta.Int(.unsigned, exp_bits);
+ const MantInt: type = std.meta.Int(.unsigned, mant_bits);
+ const FracInt: type = std.meta.Int(.unsigned, frac_bits);
+
+ const unreal_exponent: comptime_int = (1 << exp_bits) - 1;
+ const bias: comptime_int = (1 << (exp_bits - 1)) - 2;
+ const exp_mask: comptime_int = unreal_exponent << mant_bits;
+ const zero_exponent: comptime_int = bias << mant_bits;
+ const sign_mask: comptime_int = 1 << (bits - 1);
+ const not_exp: comptime_int = ~@as(Int, exp_mask);
+ const ones_place: comptime_int = mant_bits - frac_bits;
+ const extra_denorm_shift: comptime_int = 1 - ones_place;
+
+ var result: Frexp(T) = undefined;
+ var v: Int = @bitCast(x);
+
+ const m: MantInt = @truncate(v);
+ const e: ExpInt = @truncate(v >> mant_bits);
+
+ switch (e) {
+ 0 => {
+ if (m != 0) {
+ // subnormal
+ const offset = @clz(m);
+ const shift = offset + extra_denorm_shift;
+
+ v &= sign_mask;
+ v |= zero_exponent;
+ v |= math.shl(MantInt, m, shift);
+
+ result.exponent = exp_min - @as(i32, offset) + ones_place;
+ } else {
+ // +-0 = (+-0, 0)
+ result.exponent = 0;
+ }
+ },
+ unreal_exponent => {
+ // +-nan -> {+-nan, undefined}
+ result.exponent = undefined;
+
+ // +-inf -> {+-inf, 0}
+ if (@as(FracInt, @truncate(v)) == 0)
+ result.exponent = 0;
+ },
+ else => {
+ // normal
+ v &= not_exp;
+ v |= zero_exponent;
+ result.exponent = @as(i32, e) - bias;
+ },
}
- result.exponent = e - 0x7E;
- y &= 0x807FFFFF;
- y |= 0x3F000000;
- result.significand = @as(f32, @bitCast(y));
+ result.significand = @bitCast(v);
return result;
}
-fn frexp64(x: f64) Frexp(f64) {
- var result: Frexp(f64) = undefined;
-
- var y = @as(u64, @bitCast(x));
- const e = @as(i32, @intCast(y >> 52)) & 0x7FF;
-
- if (e == 0) {
- if (x != 0) {
- // subnormal
- result = frexp64(x * 0x1.0p64);
- result.exponent -= 64;
- } else {
- // frexp(+-0) = (+-0, 0)
- result.significand = x;
- result.exponent = 0;
+/// Generate a namespace of tests for frexp on values of the given type
+fn FrexpTests(comptime Float: type) type {
+ return struct {
+ const T = Float;
+ test "normal" {
+ const epsilon = 1e-6;
+ var r: Frexp(T) = undefined;
+
+ r = frexp(@as(T, 1.3));
+ try expectApproxEqAbs(0.65, r.significand, epsilon);
+ try expectEqual(1, r.exponent);
+
+ r = frexp(@as(T, 78.0234));
+ try expectApproxEqAbs(0.609558, r.significand, epsilon);
+ try expectEqual(7, r.exponent);
+
+ r = frexp(@as(T, -1234.5678));
+ try expectEqual(11, r.exponent);
+ try expectApproxEqAbs(-0.602816, r.significand, epsilon);
}
- return result;
- } else if (e == 0x7FF) {
- // frexp(nan) = (nan, undefined)
- result.significand = x;
- result.exponent = undefined;
-
- // frexp(+-inf) = (+-inf, 0)
- if (math.isInf(x)) {
- result.exponent = 0;
+ test "max" {
+ const exponent = math.floatExponentMax(T) + 1;
+ const significand = 1.0 - math.floatEps(T) / 2;
+ const r: Frexp(T) = frexp(math.floatMax(T));
+ try expectEqual(exponent, r.exponent);
+ try expectEqual(significand, r.significand);
}
-
- return result;
- }
-
- result.exponent = e - 0x3FE;
- y &= 0x800FFFFFFFFFFFFF;
- y |= 0x3FE0000000000000;
- result.significand = @as(f64, @bitCast(y));
- return result;
-}
-
-fn frexp128(x: f128) Frexp(f128) {
- var result: Frexp(f128) = undefined;
-
- var y = @as(u128, @bitCast(x));
- const e = @as(i32, @intCast(y >> 112)) & 0x7FFF;
-
- if (e == 0) {
- if (x != 0) {
- // subnormal
- result = frexp128(x * 0x1.0p120);
- result.exponent -= 120;
- } else {
- // frexp(+-0) = (+-0, 0)
- result.significand = x;
- result.exponent = 0;
+ test "min" {
+ const exponent = math.floatExponentMin(T) + 1;
+ const r: Frexp(T) = frexp(math.floatMin(T));
+ try expectEqual(exponent, r.exponent);
+ try expectEqual(0.5, r.significand);
}
- return result;
- } else if (e == 0x7FFF) {
- // frexp(nan) = (nan, undefined)
- result.significand = x;
- result.exponent = undefined;
-
- // frexp(+-inf) = (+-inf, 0)
- if (math.isInf(x)) {
- result.exponent = 0;
+ test "subnormal" {
+ const normal_min_exponent = math.floatExponentMin(T) + 1;
+ const exponent = normal_min_exponent - math.floatFractionalBits(T);
+ const r: Frexp(T) = frexp(math.floatTrueMin(T));
+ try expectEqual(exponent, r.exponent);
+ try expectEqual(0.5, r.significand);
}
+ test "zero" {
+ var r: Frexp(T) = undefined;
- return result;
- }
-
- result.exponent = e - 0x3FFE;
- y &= 0x8000FFFFFFFFFFFFFFFFFFFFFFFFFFFF;
- y |= 0x3FFE0000000000000000000000000000;
- result.significand = @as(f128, @bitCast(y));
- return result;
-}
-
-test "type dispatch" {
- const a = frexp(@as(f32, 1.3));
- const b = frexp32(1.3);
- try expect(a.significand == b.significand and a.exponent == b.exponent);
-
- const c = frexp(@as(f64, 1.3));
- const d = frexp64(1.3);
- try expect(c.significand == d.significand and c.exponent == d.exponent);
-
- const e = frexp(@as(f128, 1.3));
- const f = frexp128(1.3);
- try expect(e.significand == f.significand and e.exponent == f.exponent);
-}
-
-test "32" {
- const epsilon = 0.000001;
- var r: Frexp(f32) = undefined;
-
- r = frexp32(1.3);
- try expect(math.approxEqAbs(f32, r.significand, 0.65, epsilon) and r.exponent == 1);
-
- r = frexp32(78.0234);
- try expect(math.approxEqAbs(f32, r.significand, 0.609558, epsilon) and r.exponent == 7);
-}
-
-test "64" {
- const epsilon = 0.000001;
- var r: Frexp(f64) = undefined;
-
- r = frexp64(1.3);
- try expect(math.approxEqAbs(f64, r.significand, 0.65, epsilon) and r.exponent == 1);
-
- r = frexp64(78.0234);
- try expect(math.approxEqAbs(f64, r.significand, 0.609558, epsilon) and r.exponent == 7);
-}
-
-test "128" {
- const epsilon = 0.000001;
- var r: Frexp(f128) = undefined;
-
- r = frexp128(1.3);
- try expect(math.approxEqAbs(f128, r.significand, 0.65, epsilon) and r.exponent == 1);
+ r = frexp(@as(T, 0.0));
+ try expectEqual(0, r.exponent);
+ try expect(math.isPositiveZero(r.significand));
- r = frexp128(78.0234);
- try expect(math.approxEqAbs(f128, r.significand, 0.609558, epsilon) and r.exponent == 7);
-}
-
-test "32 special" {
- var r: Frexp(f32) = undefined;
-
- r = frexp32(0.0);
- try expect(r.significand == 0.0 and r.exponent == 0);
-
- r = frexp32(-0.0);
- try expect(r.significand == -0.0 and r.exponent == 0);
-
- r = frexp32(math.inf(f32));
- try expect(math.isPositiveInf(r.significand) and r.exponent == 0);
+ r = frexp(@as(T, -0.0));
+ try expectEqual(0, r.exponent);
+ try expect(math.isNegativeZero(r.significand));
+ }
+ test "inf" {
+ var r: Frexp(T) = undefined;
- r = frexp32(-math.inf(f32));
- try expect(math.isNegativeInf(r.significand) and r.exponent == 0);
+ r = frexp(math.inf(T));
+ try expectEqual(0, r.exponent);
+ try expect(math.isPositiveInf(r.significand));
- r = frexp32(math.nan(f32));
- try expect(math.isNan(r.significand));
+ r = frexp(-math.inf(T));
+ try expectEqual(0, r.exponent);
+ try expect(math.isNegativeInf(r.significand));
+ }
+ test "nan" {
+ const r: Frexp(T) = frexp(math.nan(T));
+ try expect(math.isNan(r.significand));
+ }
+ };
}
-test "64 special" {
- var r: Frexp(f64) = undefined;
-
- r = frexp64(0.0);
- try expect(r.significand == 0.0 and r.exponent == 0);
-
- r = frexp64(-0.0);
- try expect(r.significand == -0.0 and r.exponent == 0);
-
- r = frexp64(math.inf(f64));
- try expect(math.isPositiveInf(r.significand) and r.exponent == 0);
-
- r = frexp64(-math.inf(f64));
- try expect(math.isNegativeInf(r.significand) and r.exponent == 0);
-
- r = frexp64(math.nan(f64));
- try expect(math.isNan(r.significand));
+// Generate tests for each floating point type
+comptime {
+ for ([_]type{ f16, f32, f64, f80, f128 }) |T| {
+ _ = FrexpTests(T);
+ }
}
-test "128 special" {
- var r: Frexp(f128) = undefined;
-
- r = frexp128(0.0);
- try expect(r.significand == 0.0 and r.exponent == 0);
-
- r = frexp128(-0.0);
- try expect(r.significand == -0.0 and r.exponent == 0);
-
- r = frexp128(math.inf(f128));
- try expect(math.isPositiveInf(r.significand) and r.exponent == 0);
-
- r = frexp128(-math.inf(f128));
- try expect(math.isNegativeInf(r.significand) and r.exponent == 0);
-
- r = frexp128(math.nan(f128));
- try expect(math.isNan(r.significand));
+test frexp {
+ inline for ([_]type{ f16, f32, f64, f80, f128 }) |T| {
+ const max_exponent = math.floatExponentMax(T) + 1;
+ const min_exponent = math.floatExponentMin(T) + 1;
+ const truemin_exponent = min_exponent - math.floatFractionalBits(T);
+
+ var result: Frexp(T) = undefined;
+ comptime var x: T = undefined;
+
+ // basic usage
+ // value -> {significand, exponent},
+ // value == significand * (2 ^ exponent)
+ x = 1234.5678;
+ result = frexp(x);
+ try expectEqual(11, result.exponent);
+ try expectApproxEqAbs(0.602816, result.significand, 1e-6);
+ try expectEqual(x, math.ldexp(result.significand, result.exponent));
+
+ // float maximum
+ x = math.floatMax(T);
+ result = frexp(x);
+ try expectEqual(max_exponent, result.exponent);
+ try expectEqual(1.0 - math.floatEps(T) / 2, result.significand);
+ try expectEqual(x, math.ldexp(result.significand, result.exponent));
+
+ // float minimum
+ x = math.floatMin(T);
+ result = frexp(x);
+ try expectEqual(min_exponent, result.exponent);
+ try expectEqual(0.5, result.significand);
+ try expectEqual(x, math.ldexp(result.significand, result.exponent));
+
+ // float true minimum
+ // subnormal -> {normal, exponent}
+ x = math.floatTrueMin(T);
+ result = frexp(x);
+ try expectEqual(truemin_exponent, result.exponent);
+ try expectEqual(0.5, result.significand);
+ try expectEqual(x, math.ldexp(result.significand, result.exponent));
+
+ // infinity -> {infinity, zero} (+)
+ result = frexp(math.inf(T));
+ try expectEqual(0, result.exponent);
+ try expect(math.isPositiveInf(result.significand));
+
+ // infinity -> {infinity, zero} (-)
+ result = frexp(-math.inf(T));
+ try expectEqual(0, result.exponent);
+ try expect(math.isNegativeInf(result.significand));
+
+ // zero -> {zero, zero} (+)
+ result = frexp(@as(T, 0.0));
+ try expectEqual(0, result.exponent);
+ try expect(math.isPositiveZero(result.significand));
+
+ // zero -> {zero, zero} (-)
+ result = frexp(@as(T, -0.0));
+ try expectEqual(0, result.exponent);
+ try expect(math.isNegativeZero(result.significand));
+
+ // nan -> {nan, undefined}
+ result = frexp(math.nan(T));
+ try expect(math.isNan(result.significand));
+ }
}
diff --git a/lib/std/net.zig b/lib/std/net.zig
index e68adc4207..b12fb1932d 100644
--- a/lib/std/net.zig
+++ b/lib/std/net.zig
@@ -5,15 +5,16 @@ const builtin = @import("builtin");
const assert = std.debug.assert;
const net = @This();
const mem = std.mem;
-const os = std.os;
const posix = std.posix;
const fs = std.fs;
const io = std.io;
const native_endian = builtin.target.cpu.arch.endian();
+const native_os = builtin.os.tag;
+const windows = std.os.windows;
// Windows 10 added support for unix sockets in build 17063, redstone 4 is the
// first release to support them.
-pub const has_unix_sockets = switch (builtin.os.tag) {
+pub const has_unix_sockets = switch (native_os) {
.windows => builtin.os.version_range.windows.isAtLeast(.win10_rs4) orelse false,
else => true,
};
@@ -28,14 +29,14 @@ pub const IPParseError = error{
pub const IPv4ParseError = IPParseError || error{NonCanonical};
pub const IPv6ParseError = IPParseError || error{InvalidIpv4Mapping};
-pub const IPv6InterfaceError = os.SocketError || os.IoCtl_SIOCGIFINDEX_Error || error{NameTooLong};
+pub const IPv6InterfaceError = posix.SocketError || posix.IoCtl_SIOCGIFINDEX_Error || error{NameTooLong};
pub const IPv6ResolveError = IPv6ParseError || IPv6InterfaceError;
pub const Address = extern union {
- any: os.sockaddr,
+ any: posix.sockaddr,
in: Ip4Address,
in6: Ip6Address,
- un: if (has_unix_sockets) os.sockaddr.un else void,
+ un: if (has_unix_sockets) posix.sockaddr.un else void,
/// Parse the given IP address string into an Address value.
/// It is recommended to use `resolveIp` instead, to handle
@@ -85,38 +86,38 @@ pub const Address = extern union {
return error.InvalidIPAddressFormat;
}
- pub fn parseExpectingFamily(name: []const u8, family: os.sa_family_t, port: u16) !Address {
+ pub fn parseExpectingFamily(name: []const u8, family: posix.sa_family_t, port: u16) !Address {
switch (family) {
- os.AF.INET => return parseIp4(name, port),
- os.AF.INET6 => return parseIp6(name, port),
- os.AF.UNSPEC => return parseIp(name, port),
+ posix.AF.INET => return parseIp4(name, port),
+ posix.AF.INET6 => return parseIp6(name, port),
+ posix.AF.UNSPEC => return parseIp(name, port),
else => unreachable,
}
}
pub fn parseIp6(buf: []const u8, port: u16) IPv6ParseError!Address {
- return Address{ .in6 = try Ip6Address.parse(buf, port) };
+ return .{ .in6 = try Ip6Address.parse(buf, port) };
}
pub fn resolveIp6(buf: []const u8, port: u16) IPv6ResolveError!Address {
- return Address{ .in6 = try Ip6Address.resolve(buf, port) };
+ return .{ .in6 = try Ip6Address.resolve(buf, port) };
}
pub fn parseIp4(buf: []const u8, port: u16) IPv4ParseError!Address {
- return Address{ .in = try Ip4Address.parse(buf, port) };
+ return .{ .in = try Ip4Address.parse(buf, port) };
}
pub fn initIp4(addr: [4]u8, port: u16) Address {
- return Address{ .in = Ip4Address.init(addr, port) };
+ return .{ .in = Ip4Address.init(addr, port) };
}
pub fn initIp6(addr: [16]u8, port: u16, flowinfo: u32, scope_id: u32) Address {
- return Address{ .in6 = Ip6Address.init(addr, port, flowinfo, scope_id) };
+ return .{ .in6 = Ip6Address.init(addr, port, flowinfo, scope_id) };
}
pub fn initUnix(path: []const u8) !Address {
- var sock_addr = os.sockaddr.un{
- .family = os.AF.UNIX,
+ var sock_addr = posix.sockaddr.un{
+ .family = posix.AF.UNIX,
.path = undefined,
};
@@ -133,8 +134,8 @@ pub const Address = extern union {
/// Asserts that the address is ip4 or ip6.
pub fn getPort(self: Address) u16 {
return switch (self.any.family) {
- os.AF.INET => self.in.getPort(),
- os.AF.INET6 => self.in6.getPort(),
+ posix.AF.INET => self.in.getPort(),
+ posix.AF.INET6 => self.in6.getPort(),
else => unreachable,
};
}
@@ -143,8 +144,8 @@ pub const Address = extern union {
/// Asserts that the address is ip4 or ip6.
pub fn setPort(self: *Address, port: u16) void {
switch (self.any.family) {
- os.AF.INET => self.in.setPort(port),
- os.AF.INET6 => self.in6.setPort(port),
+ posix.AF.INET => self.in.setPort(port),
+ posix.AF.INET6 => self.in6.setPort(port),
else => unreachable,
}
}
@@ -152,10 +153,10 @@ pub const Address = extern union {
/// Asserts that `addr` is an IP address.
/// This function will read past the end of the pointer, with a size depending
/// on the address family.
- pub fn initPosix(addr: *align(4) const os.sockaddr) Address {
+ pub fn initPosix(addr: *align(4) const posix.sockaddr) Address {
switch (addr.family) {
- os.AF.INET => return Address{ .in = Ip4Address{ .sa = @as(*const os.sockaddr.in, @ptrCast(addr)).* } },
- os.AF.INET6 => return Address{ .in6 = Ip6Address{ .sa = @as(*const os.sockaddr.in6, @ptrCast(addr)).* } },
+ posix.AF.INET => return Address{ .in = Ip4Address{ .sa = @as(*const posix.sockaddr.in, @ptrCast(addr)).* } },
+ posix.AF.INET6 => return Address{ .in6 = Ip6Address{ .sa = @as(*const posix.sockaddr.in6, @ptrCast(addr)).* } },
else => unreachable,
}
}
@@ -168,9 +169,9 @@ pub const Address = extern union {
) !void {
if (fmt.len != 0) std.fmt.invalidFmtError(fmt, self);
switch (self.any.family) {
- os.AF.INET => try self.in.format(fmt, options, out_stream),
- os.AF.INET6 => try self.in6.format(fmt, options, out_stream),
- os.AF.UNIX => {
+ posix.AF.INET => try self.in.format(fmt, options, out_stream),
+ posix.AF.INET6 => try self.in6.format(fmt, options, out_stream),
+ posix.AF.UNIX => {
if (!has_unix_sockets) {
unreachable;
}
@@ -187,11 +188,11 @@ pub const Address = extern union {
return mem.eql(u8, a_bytes, b_bytes);
}
- pub fn getOsSockLen(self: Address) os.socklen_t {
+ pub fn getOsSockLen(self: Address) posix.socklen_t {
switch (self.any.family) {
- os.AF.INET => return self.in.getOsSockLen(),
- os.AF.INET6 => return self.in6.getOsSockLen(),
- os.AF.UNIX => {
+ posix.AF.INET => return self.in.getOsSockLen(),
+ posix.AF.INET6 => return self.in6.getOsSockLen(),
+ posix.AF.UNIX => {
if (!has_unix_sockets) {
unreachable;
}
@@ -204,7 +205,7 @@ pub const Address = extern union {
// provide the full buffer size (e.g. getsockname, getpeername, recvfrom, accept).
//
// To access the path, std.mem.sliceTo(&address.un.path, 0) should be used.
- return @as(os.socklen_t, @intCast(@sizeOf(os.sockaddr.un)));
+ return @as(posix.socklen_t, @intCast(@sizeOf(posix.sockaddr.un)));
},
else => unreachable,
@@ -247,7 +248,7 @@ pub const Address = extern union {
posix.SO.REUSEADDR,
&mem.toBytes(@as(c_int, 1)),
);
- switch (builtin.os.tag) {
+ switch (native_os) {
.windows => {},
else => try posix.setsockopt(
sockfd,
@@ -267,7 +268,7 @@ pub const Address = extern union {
};
pub const Ip4Address = extern struct {
- sa: os.sockaddr.in,
+ sa: posix.sockaddr.in,
pub fn parse(buf: []const u8, port: u16) IPv4ParseError!Ip4Address {
var result = Ip4Address{
@@ -330,7 +331,7 @@ pub const Ip4Address = extern struct {
pub fn init(addr: [4]u8, port: u16) Ip4Address {
return Ip4Address{
- .sa = os.sockaddr.in{
+ .sa = posix.sockaddr.in{
.port = mem.nativeToBig(u16, port),
.addr = @as(*align(1) const u32, @ptrCast(&addr)).*,
},
@@ -367,21 +368,21 @@ pub const Ip4Address = extern struct {
});
}
- pub fn getOsSockLen(self: Ip4Address) os.socklen_t {
+ pub fn getOsSockLen(self: Ip4Address) posix.socklen_t {
_ = self;
- return @sizeOf(os.sockaddr.in);
+ return @sizeOf(posix.sockaddr.in);
}
};
pub const Ip6Address = extern struct {
- sa: os.sockaddr.in6,
+ sa: posix.sockaddr.in6,
/// Parse a given IPv6 address string into an Address.
/// Assumes the Scope ID of the address is fully numeric.
/// For non-numeric addresses, see `resolveIp6`.
pub fn parse(buf: []const u8, port: u16) IPv6ParseError!Ip6Address {
var result = Ip6Address{
- .sa = os.sockaddr.in6{
+ .sa = posix.sockaddr.in6{
.scope_id = 0,
.port = mem.nativeToBig(u16, port),
.flowinfo = 0,
@@ -499,7 +500,7 @@ pub const Ip6Address = extern struct {
pub fn resolve(buf: []const u8, port: u16) IPv6ResolveError!Ip6Address {
// TODO: Unify the implementations of resolveIp6 and parseIp6.
var result = Ip6Address{
- .sa = os.sockaddr.in6{
+ .sa = posix.sockaddr.in6{
.scope_id = 0,
.port = mem.nativeToBig(u16, port),
.flowinfo = 0,
@@ -516,7 +517,7 @@ pub const Ip6Address = extern struct {
var abbrv = false;
var scope_id = false;
- var scope_id_value: [os.IFNAMESIZE - 1]u8 = undefined;
+ var scope_id_value: [posix.IFNAMESIZE - 1]u8 = undefined;
var scope_id_index: usize = 0;
for (buf, 0..) |c, i| {
@@ -632,7 +633,7 @@ pub const Ip6Address = extern struct {
pub fn init(addr: [16]u8, port: u16, flowinfo: u32, scope_id: u32) Ip6Address {
return Ip6Address{
- .sa = os.sockaddr.in6{
+ .sa = posix.sockaddr.in6{
.addr = addr,
.port = mem.nativeToBig(u16, port),
.flowinfo = flowinfo,
@@ -702,51 +703,51 @@ pub const Ip6Address = extern struct {
try std.fmt.format(out_stream, "]:{}", .{port});
}
- pub fn getOsSockLen(self: Ip6Address) os.socklen_t {
+ pub fn getOsSockLen(self: Ip6Address) posix.socklen_t {
_ = self;
- return @sizeOf(os.sockaddr.in6);
+ return @sizeOf(posix.sockaddr.in6);
}
};
pub fn connectUnixSocket(path: []const u8) !Stream {
const opt_non_block = 0;
- const sockfd = try os.socket(
- os.AF.UNIX,
- os.SOCK.STREAM | os.SOCK.CLOEXEC | opt_non_block,
+ const sockfd = try posix.socket(
+ posix.AF.UNIX,
+ posix.SOCK.STREAM | posix.SOCK.CLOEXEC | opt_non_block,
0,
);
errdefer Stream.close(.{ .handle = sockfd });
var addr = try std.net.Address.initUnix(path);
- try os.connect(sockfd, &addr.any, addr.getOsSockLen());
+ try posix.connect(sockfd, &addr.any, addr.getOsSockLen());
- return Stream{ .handle = sockfd };
+ return .{ .handle = sockfd };
}
fn if_nametoindex(name: []const u8) IPv6InterfaceError!u32 {
- if (builtin.target.os.tag == .linux) {
- var ifr: os.ifreq = undefined;
- const sockfd = try os.socket(os.AF.UNIX, os.SOCK.DGRAM | os.SOCK.CLOEXEC, 0);
+ if (native_os == .linux) {
+ var ifr: posix.ifreq = undefined;
+ const sockfd = try posix.socket(posix.AF.UNIX, posix.SOCK.DGRAM | posix.SOCK.CLOEXEC, 0);
defer Stream.close(.{ .handle = sockfd });
@memcpy(ifr.ifrn.name[0..name.len], name);
ifr.ifrn.name[name.len] = 0;
// TODO investigate if this needs to be integrated with evented I/O.
- try os.ioctl_SIOCGIFINDEX(sockfd, &ifr);
+ try posix.ioctl_SIOCGIFINDEX(sockfd, &ifr);
- return @as(u32, @bitCast(ifr.ifru.ivalue));
+ return @bitCast(ifr.ifru.ivalue);
}
- if (comptime builtin.target.os.tag.isDarwin()) {
- if (name.len >= os.IFNAMESIZE)
+ if (native_os.isDarwin()) {
+ if (name.len >= posix.IFNAMESIZE)
return error.NameTooLong;
- var if_name: [os.IFNAMESIZE:0]u8 = undefined;
+ var if_name: [posix.IFNAMESIZE:0]u8 = undefined;
@memcpy(if_name[0..name.len], name);
if_name[name.len] = 0;
const if_slice = if_name[0..name.len :0];
- const index = os.system.if_nametoindex(if_slice);
+ const index = std.c.if_nametoindex(if_slice);
if (index == 0)
return error.InterfaceNotFound;
return @as(u32, @bitCast(index));
@@ -786,24 +787,24 @@ pub fn tcpConnectToHost(allocator: mem.Allocator, name: []const u8, port: u16) T
else => return err,
};
}
- return std.os.ConnectError.ConnectionRefused;
+ return posix.ConnectError.ConnectionRefused;
}
-pub const TcpConnectToAddressError = std.os.SocketError || std.os.ConnectError;
+pub const TcpConnectToAddressError = posix.SocketError || posix.ConnectError;
pub fn tcpConnectToAddress(address: Address) TcpConnectToAddressError!Stream {
const nonblock = 0;
- const sock_flags = os.SOCK.STREAM | nonblock |
- (if (builtin.target.os.tag == .windows) 0 else os.SOCK.CLOEXEC);
- const sockfd = try os.socket(address.any.family, sock_flags, os.IPPROTO.TCP);
+ const sock_flags = posix.SOCK.STREAM | nonblock |
+ (if (native_os == .windows) 0 else posix.SOCK.CLOEXEC);
+ const sockfd = try posix.socket(address.any.family, sock_flags, posix.IPPROTO.TCP);
errdefer Stream.close(.{ .handle = sockfd });
- try os.connect(sockfd, &address.any, address.getOsSockLen());
+ try posix.connect(sockfd, &address.any, address.getOsSockLen());
return Stream{ .handle = sockfd };
}
-const GetAddressListError = std.mem.Allocator.Error || std.fs.File.OpenError || std.fs.File.ReadError || std.os.SocketError || std.os.BindError || std.os.SetSockOptError || error{
+const GetAddressListError = std.mem.Allocator.Error || std.fs.File.OpenError || std.fs.File.ReadError || posix.SocketError || posix.BindError || posix.SetSockOptError || error{
// TODO: break this up into error sets from the various underlying functions
TemporaryNameServerFailure,
@@ -844,30 +845,30 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) Get
const arena = result.arena.allocator();
errdefer result.deinit();
- if (builtin.target.os.tag == .windows) {
+ if (native_os == .windows) {
const name_c = try allocator.dupeZ(u8, name);
defer allocator.free(name_c);
const port_c = try std.fmt.allocPrintZ(allocator, "{}", .{port});
defer allocator.free(port_c);
- const ws2_32 = os.windows.ws2_32;
- const hints = os.addrinfo{
+ const ws2_32 = windows.ws2_32;
+ const hints = posix.addrinfo{
.flags = ws2_32.AI.NUMERICSERV,
- .family = os.AF.UNSPEC,
- .socktype = os.SOCK.STREAM,
- .protocol = os.IPPROTO.TCP,
+ .family = posix.AF.UNSPEC,
+ .socktype = posix.SOCK.STREAM,
+ .protocol = posix.IPPROTO.TCP,
.canonname = null,
.addr = null,
.addrlen = 0,
.next = null,
};
- var res: ?*os.addrinfo = null;
+ var res: ?*posix.addrinfo = null;
var first = true;
while (true) {
const rc = ws2_32.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res);
- switch (@as(os.windows.ws2_32.WinsockError, @enumFromInt(@as(u16, @intCast(rc))))) {
- @as(os.windows.ws2_32.WinsockError, @enumFromInt(0)) => break,
+ switch (@as(windows.ws2_32.WinsockError, @enumFromInt(@as(u16, @intCast(rc))))) {
+ @as(windows.ws2_32.WinsockError, @enumFromInt(0)) => break,
.WSATRY_AGAIN => return error.TemporaryNameServerFailure,
.WSANO_RECOVERY => return error.NameServerFailure,
.WSAEAFNOSUPPORT => return error.AddressFamilyNotSupported,
@@ -879,10 +880,10 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) Get
.WSANOTINITIALISED => {
if (!first) return error.Unexpected;
first = false;
- try os.windows.callWSAStartup();
+ try windows.callWSAStartup();
continue;
},
- else => |err| return os.windows.unexpectedWSAError(err),
+ else => |err| return windows.unexpectedWSAError(err),
}
}
defer ws2_32.freeaddrinfo(res);
@@ -923,18 +924,18 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) Get
const port_c = try std.fmt.allocPrintZ(allocator, "{}", .{port});
defer allocator.free(port_c);
- const sys = if (builtin.target.os.tag == .windows) os.windows.ws2_32 else os.system;
- const hints = os.addrinfo{
+ const sys = if (native_os == .windows) windows.ws2_32 else posix.system;
+ const hints = posix.addrinfo{
.flags = sys.AI.NUMERICSERV,
- .family = os.AF.UNSPEC,
- .socktype = os.SOCK.STREAM,
- .protocol = os.IPPROTO.TCP,
+ .family = posix.AF.UNSPEC,
+ .socktype = posix.SOCK.STREAM,
+ .protocol = posix.IPPROTO.TCP,
.canonname = null,
.addr = null,
.addrlen = 0,
.next = null,
};
- var res: ?*os.addrinfo = null;
+ var res: ?*posix.addrinfo = null;
switch (sys.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res)) {
@as(sys.EAI, @enumFromInt(0)) => {},
.ADDRFAMILY => return error.HostLacksNetworkAddresses,
@@ -947,8 +948,8 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) Get
.NONAME => return error.UnknownHostName,
.SERVICE => return error.ServiceUnavailable,
.SOCKTYPE => unreachable, // Invalid socket type requested in hints
- .SYSTEM => switch (os.errno(-1)) {
- else => |e| return os.unexpectedErrno(e),
+ .SYSTEM => switch (posix.errno(-1)) {
+ else => |e| return posix.unexpectedErrno(e),
},
else => unreachable,
}
@@ -983,9 +984,9 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) Get
return result;
}
- if (builtin.target.os.tag == .linux) {
+ if (native_os == .linux) {
const flags = std.c.AI.NUMERICSERV;
- const family = os.AF.UNSPEC;
+ const family = posix.AF.UNSPEC;
var lookup_addrs = std.ArrayList(LookupAddr).init(allocator);
defer lookup_addrs.deinit();
@@ -1026,7 +1027,7 @@ fn linuxLookupName(
addrs: *std.ArrayList(LookupAddr),
canon: *std.ArrayList(u8),
opt_name: ?[]const u8,
- family: os.sa_family_t,
+ family: posix.sa_family_t,
flags: u32,
port: u16,
) !void {
@@ -1066,9 +1067,9 @@ fn linuxLookupName(
// No further processing is needed if there are fewer than 2
// results or if there are only IPv4 results.
- if (addrs.items.len == 1 or family == os.AF.INET) return;
+ if (addrs.items.len == 1 or family == posix.AF.INET) return;
const all_ip4 = for (addrs.items) |addr| {
- if (addr.addr.any.family != os.AF.INET) break false;
+ if (addr.addr.any.family != posix.AF.INET) break false;
} else true;
if (all_ip4) return;
@@ -1081,42 +1082,42 @@ fn linuxLookupName(
// A more idiomatic "ziggy" implementation would be welcome.
for (addrs.items, 0..) |*addr, i| {
var key: i32 = 0;
- var sa6: os.sockaddr.in6 = undefined;
- @memset(@as([*]u8, @ptrCast(&sa6))[0..@sizeOf(os.sockaddr.in6)], 0);
- var da6 = os.sockaddr.in6{
- .family = os.AF.INET6,
+ var sa6: posix.sockaddr.in6 = undefined;
+ @memset(@as([*]u8, @ptrCast(&sa6))[0..@sizeOf(posix.sockaddr.in6)], 0);
+ var da6 = posix.sockaddr.in6{
+ .family = posix.AF.INET6,
.scope_id = addr.addr.in6.sa.scope_id,
.port = 65535,
.flowinfo = 0,
.addr = [1]u8{0} ** 16,
};
- var sa4: os.sockaddr.in = undefined;
- @memset(@as([*]u8, @ptrCast(&sa4))[0..@sizeOf(os.sockaddr.in)], 0);
- var da4 = os.sockaddr.in{
- .family = os.AF.INET,
+ var sa4: posix.sockaddr.in = undefined;
+ @memset(@as([*]u8, @ptrCast(&sa4))[0..@sizeOf(posix.sockaddr.in)], 0);
+ var da4 = posix.sockaddr.in{
+ .family = posix.AF.INET,
.port = 65535,
.addr = 0,
.zero = [1]u8{0} ** 8,
};
- var sa: *align(4) os.sockaddr = undefined;
- var da: *align(4) os.sockaddr = undefined;
- var salen: os.socklen_t = undefined;
- var dalen: os.socklen_t = undefined;
- if (addr.addr.any.family == os.AF.INET6) {
+ var sa: *align(4) posix.sockaddr = undefined;
+ var da: *align(4) posix.sockaddr = undefined;
+ var salen: posix.socklen_t = undefined;
+ var dalen: posix.socklen_t = undefined;
+ if (addr.addr.any.family == posix.AF.INET6) {
da6.addr = addr.addr.in6.sa.addr;
da = @ptrCast(&da6);
- dalen = @sizeOf(os.sockaddr.in6);
+ dalen = @sizeOf(posix.sockaddr.in6);
sa = @ptrCast(&sa6);
- salen = @sizeOf(os.sockaddr.in6);
+ salen = @sizeOf(posix.sockaddr.in6);
} else {
sa6.addr[0..12].* = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff".*;
da6.addr[0..12].* = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff".*;
mem.writeInt(u32, da6.addr[12..], addr.addr.in.sa.addr, native_endian);
da4.addr = addr.addr.in.sa.addr;
da = @ptrCast(&da4);
- dalen = @sizeOf(os.sockaddr.in);
+ dalen = @sizeOf(posix.sockaddr.in);
sa = @ptrCast(&sa4);
- salen = @sizeOf(os.sockaddr.in);
+ salen = @sizeOf(posix.sockaddr.in);
}
const dpolicy = policyOf(da6.addr);
const dscope: i32 = scopeOf(da6.addr);
@@ -1124,13 +1125,13 @@ fn linuxLookupName(
const dprec: i32 = dpolicy.prec;
const MAXADDRS = 3;
var prefixlen: i32 = 0;
- const sock_flags = os.SOCK.DGRAM | os.SOCK.CLOEXEC;
- if (os.socket(addr.addr.any.family, sock_flags, os.IPPROTO.UDP)) |fd| syscalls: {
+ const sock_flags = posix.SOCK.DGRAM | posix.SOCK.CLOEXEC;
+ if (posix.socket(addr.addr.any.family, sock_flags, posix.IPPROTO.UDP)) |fd| syscalls: {
defer Stream.close(.{ .handle = fd });
- os.connect(fd, da, dalen) catch break :syscalls;
+ posix.connect(fd, da, dalen) catch break :syscalls;
key |= DAS_USABLE;
- os.getsockname(fd, sa, &salen) catch break :syscalls;
- if (addr.addr.any.family == os.AF.INET) {
+ posix.getsockname(fd, sa, &salen) catch break :syscalls;
+ if (addr.addr.any.family == posix.AF.INET) {
mem.writeInt(u32, sa6.addr[12..16], sa4.addr, native_endian);
}
if (dscope == @as(i32, scopeOf(sa6.addr))) key |= DAS_MATCHINGSCOPE;
@@ -1267,28 +1268,28 @@ fn addrCmpLessThan(context: void, b: LookupAddr, a: LookupAddr) bool {
fn linuxLookupNameFromNull(
addrs: *std.ArrayList(LookupAddr),
- family: os.sa_family_t,
+ family: posix.sa_family_t,
flags: u32,
port: u16,
) !void {
if ((flags & std.c.AI.PASSIVE) != 0) {
- if (family != os.AF.INET6) {
+ if (family != posix.AF.INET6) {
(try addrs.addOne()).* = LookupAddr{
.addr = Address.initIp4([1]u8{0} ** 4, port),
};
}
- if (family != os.AF.INET) {
+ if (family != posix.AF.INET) {
(try addrs.addOne()).* = LookupAddr{
.addr = Address.initIp6([1]u8{0} ** 16, port, 0, 0),
};
}
} else {
- if (family != os.AF.INET6) {
+ if (family != posix.AF.INET6) {
(try addrs.addOne()).* = LookupAddr{
.addr = Address.initIp4([4]u8{ 127, 0, 0, 1 }, port),
};
}
- if (family != os.AF.INET) {
+ if (family != posix.AF.INET) {
(try addrs.addOne()).* = LookupAddr{
.addr = Address.initIp6(([1]u8{0} ** 15) ++ [1]u8{1}, port, 0, 0),
};
@@ -1300,7 +1301,7 @@ fn linuxLookupNameFromHosts(
addrs: *std.ArrayList(LookupAddr),
canon: *std.ArrayList(u8),
name: []const u8,
- family: os.sa_family_t,
+ family: posix.sa_family_t,
port: u16,
) !void {
const file = fs.openFileAbsoluteZ("/etc/hosts", .{}) catch |err| switch (err) {
@@ -1374,7 +1375,7 @@ fn linuxLookupNameFromDnsSearch(
addrs: *std.ArrayList(LookupAddr),
canon: *std.ArrayList(u8),
name: []const u8,
- family: os.sa_family_t,
+ family: posix.sa_family_t,
port: u16,
) !void {
var rc: ResolvConf = undefined;
@@ -1429,7 +1430,7 @@ fn linuxLookupNameFromDns(
addrs: *std.ArrayList(LookupAddr),
canon: *std.ArrayList(u8),
name: []const u8,
- family: os.sa_family_t,
+ family: posix.sa_family_t,
rc: ResolvConf,
port: u16,
) !void {
@@ -1439,12 +1440,12 @@ fn linuxLookupNameFromDns(
.port = port,
};
const AfRr = struct {
- af: os.sa_family_t,
+ af: posix.sa_family_t,
rr: u8,
};
const afrrs = [_]AfRr{
- AfRr{ .af = os.AF.INET6, .rr = os.RR.A },
- AfRr{ .af = os.AF.INET, .rr = os.RR.AAAA },
+ AfRr{ .af = posix.AF.INET6, .rr = posix.RR.A },
+ AfRr{ .af = posix.AF.INET, .rr = posix.RR.AAAA },
};
var qbuf: [2][280]u8 = undefined;
var abuf: [2][512]u8 = undefined;
@@ -1454,7 +1455,7 @@ fn linuxLookupNameFromDns(
for (afrrs) |afrr| {
if (family != afrr.af) {
- const len = os.res_mkquery(0, name, 1, afrr.rr, &[_]u8{}, null, &qbuf[nq]);
+ const len = posix.res_mkquery(0, name, 1, afrr.rr, &[_]u8{}, null, &qbuf[nq]);
qp[nq] = qbuf[nq][0..len];
nq += 1;
}
@@ -1582,8 +1583,8 @@ fn resMSendRc(
const timeout = 1000 * rc.timeout;
const attempts = rc.attempts;
- var sl: os.socklen_t = @sizeOf(os.sockaddr.in);
- var family: os.sa_family_t = os.AF.INET;
+ var sl: posix.socklen_t = @sizeOf(posix.sockaddr.in);
+ var family: posix.sa_family_t = posix.AF.INET;
var ns_list = std.ArrayList(Address).init(rc.ns.allocator);
defer ns_list.deinit();
@@ -1594,18 +1595,18 @@ fn resMSendRc(
for (rc.ns.items, 0..) |iplit, i| {
ns[i] = iplit.addr;
assert(ns[i].getPort() == 53);
- if (iplit.addr.any.family != os.AF.INET) {
- family = os.AF.INET6;
+ if (iplit.addr.any.family != posix.AF.INET) {
+ family = posix.AF.INET6;
}
}
- const flags = os.SOCK.DGRAM | os.SOCK.CLOEXEC | os.SOCK.NONBLOCK;
- const fd = os.socket(family, flags, 0) catch |err| switch (err) {
+ const flags = posix.SOCK.DGRAM | posix.SOCK.CLOEXEC | posix.SOCK.NONBLOCK;
+ const fd = posix.socket(family, flags, 0) catch |err| switch (err) {
error.AddressFamilyNotSupported => blk: {
// Handle case where system lacks IPv6 support
- if (family == os.AF.INET6) {
- family = os.AF.INET;
- break :blk try os.socket(os.AF.INET, flags, 0);
+ if (family == posix.AF.INET6) {
+ family = posix.AF.INET;
+ break :blk try posix.socket(posix.AF.INET, flags, 0);
}
return err;
},
@@ -1618,33 +1619,33 @@ fn resMSendRc(
// packet which is up to the caller to interpret.
// Convert any IPv4 addresses in a mixed environment to v4-mapped
- if (family == os.AF.INET6) {
- try os.setsockopt(
+ if (family == posix.AF.INET6) {
+ try posix.setsockopt(
fd,
- os.SOL.IPV6,
- os.linux.IPV6.V6ONLY,
+ posix.SOL.IPV6,
+ std.os.linux.IPV6.V6ONLY,
&mem.toBytes(@as(c_int, 0)),
);
for (0..ns.len) |i| {
- if (ns[i].any.family != os.AF.INET) continue;
+ if (ns[i].any.family != posix.AF.INET) continue;
mem.writeInt(u32, ns[i].in6.sa.addr[12..], ns[i].in.sa.addr, native_endian);
ns[i].in6.sa.addr[0..12].* = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff".*;
- ns[i].any.family = os.AF.INET6;
+ ns[i].any.family = posix.AF.INET6;
ns[i].in6.sa.flowinfo = 0;
ns[i].in6.sa.scope_id = 0;
}
- sl = @sizeOf(os.sockaddr.in6);
+ sl = @sizeOf(posix.sockaddr.in6);
}
// Get local address and open/bind a socket
var sa: Address = undefined;
@memset(@as([*]u8, @ptrCast(&sa))[0..@sizeOf(Address)], 0);
sa.any.family = family;
- try os.bind(fd, &sa.any, sl);
+ try posix.bind(fd, &sa.any, sl);
- var pfd = [1]os.pollfd{os.pollfd{
+ var pfd = [1]posix.pollfd{posix.pollfd{
.fd = fd,
- .events = os.POLL.IN,
+ .events = posix.POLL.IN,
.revents = undefined,
}};
const retry_interval = timeout / attempts;
@@ -1663,7 +1664,7 @@ fn resMSendRc(
if (answers[i].len == 0) {
var j: usize = 0;
while (j < ns.len) : (j += 1) {
- _ = os.sendto(fd, queries[i], os.MSG.NOSIGNAL, &ns[j].any, sl) catch undefined;
+ _ = posix.sendto(fd, queries[i], posix.MSG.NOSIGNAL, &ns[j].any, sl) catch undefined;
}
}
}
@@ -1673,12 +1674,12 @@ fn resMSendRc(
// Wait for a response, or until time to retry
const clamped_timeout = @min(@as(u31, std.math.maxInt(u31)), t1 + retry_interval - t2);
- const nevents = os.poll(&pfd, clamped_timeout) catch 0;
+ const nevents = posix.poll(&pfd, clamped_timeout) catch 0;
if (nevents == 0) continue;
while (true) {
var sl_copy = sl;
- const rlen = os.recvfrom(fd, answer_bufs[next], 0, &sa.any, &sl_copy) catch break;
+ const rlen = posix.recvfrom(fd, answer_bufs[next], 0, &sa.any, &sl_copy) catch break;
// Ignore non-identifiable packets
if (rlen < 4) continue;
@@ -1704,7 +1705,7 @@ fn resMSendRc(
0, 3 => {},
2 => if (servfail_retry != 0) {
servfail_retry -= 1;
- _ = os.sendto(fd, queries[i], os.MSG.NOSIGNAL, &ns[j].any, sl) catch undefined;
+ _ = posix.sendto(fd, queries[i], posix.MSG.NOSIGNAL, &ns[j].any, sl) catch undefined;
},
else => continue,
}
@@ -1758,24 +1759,24 @@ fn dnsParse(
fn dnsParseCallback(ctx: dpc_ctx, rr: u8, data: []const u8, packet: []const u8) !void {
switch (rr) {
- os.RR.A => {
+ posix.RR.A => {
if (data.len != 4) return error.InvalidDnsARecord;
const new_addr = try ctx.addrs.addOne();
new_addr.* = LookupAddr{
.addr = Address.initIp4(data[0..4].*, ctx.port),
};
},
- os.RR.AAAA => {
+ posix.RR.AAAA => {
if (data.len != 16) return error.InvalidDnsAAAARecord;
const new_addr = try ctx.addrs.addOne();
new_addr.* = LookupAddr{
.addr = Address.initIp6(data[0..16].*, ctx.port, 0, 0),
};
},
- os.RR.CNAME => {
+ posix.RR.CNAME => {
var tmp: [256]u8 = undefined;
// Returns len of compressed name. strlen to get canon name.
- _ = try os.dn_expand(packet, data, &tmp);
+ _ = try posix.dn_expand(packet, data, &tmp);
const canon_name = mem.sliceTo(&tmp, 0);
if (isValidHostName(canon_name)) {
ctx.canon.items.len = 0;
@@ -1792,14 +1793,14 @@ pub const Stream = struct {
handle: posix.socket_t,
pub fn close(s: Stream) void {
- switch (builtin.os.tag) {
- .windows => std.os.windows.closesocket(s.handle) catch unreachable,
+ switch (native_os) {
+ .windows => windows.closesocket(s.handle) catch unreachable,
else => posix.close(s.handle),
}
}
- pub const ReadError = os.ReadError;
- pub const WriteError = os.WriteError;
+ pub const ReadError = posix.ReadError;
+ pub const WriteError = posix.WriteError;
pub const Reader = io.Reader(Stream, ReadError, read);
pub const Writer = io.Writer(Stream, WriteError, write);
@@ -1813,22 +1814,22 @@ pub const Stream = struct {
}
pub fn read(self: Stream, buffer: []u8) ReadError!usize {
- if (builtin.os.tag == .windows) {
- return os.windows.ReadFile(self.handle, buffer, null);
+ if (native_os == .windows) {
+ return windows.ReadFile(self.handle, buffer, null);
}
- return os.read(self.handle, buffer);
+ return posix.read(self.handle, buffer);
}
- pub fn readv(s: Stream, iovecs: []const os.iovec) ReadError!usize {
- if (builtin.os.tag == .windows) {
+ pub fn readv(s: Stream, iovecs: []const posix.iovec) ReadError!usize {
+ if (native_os == .windows) {
// TODO improve this to use ReadFileScatter
if (iovecs.len == 0) return @as(usize, 0);
const first = iovecs[0];
- return os.windows.ReadFile(s.handle, first.iov_base[0..first.iov_len], null);
+ return windows.ReadFile(s.handle, first.iov_base[0..first.iov_len], null);
}
- return os.readv(s.handle, iovecs);
+ return posix.readv(s.handle, iovecs);
}
/// Returns the number of bytes read. If the number read is smaller than
@@ -1858,11 +1859,11 @@ pub const Stream = struct {
/// file system thread instead of non-blocking. It needs to be reworked to properly
/// use non-blocking I/O.
pub fn write(self: Stream, buffer: []const u8) WriteError!usize {
- if (builtin.os.tag == .windows) {
- return os.windows.WriteFile(self.handle, buffer, null);
+ if (native_os == .windows) {
+ return windows.WriteFile(self.handle, buffer, null);
}
- return os.write(self.handle, buffer);
+ return posix.write(self.handle, buffer);
}
pub fn writeAll(self: Stream, bytes: []const u8) WriteError!void {
@@ -1874,15 +1875,15 @@ pub const Stream = struct {
/// See https://github.com/ziglang/zig/issues/7699
/// See equivalent function: `std.fs.File.writev`.
- pub fn writev(self: Stream, iovecs: []const os.iovec_const) WriteError!usize {
- return os.writev(self.handle, iovecs);
+ pub fn writev(self: Stream, iovecs: []const posix.iovec_const) WriteError!usize {
+ return posix.writev(self.handle, iovecs);
}
/// The `iovecs` parameter is mutable because this function needs to mutate the fields in
/// order to handle partial writes from the underlying OS layer.
/// See https://github.com/ziglang/zig/issues/7699
/// See equivalent function: `std.fs.File.writevAll`.
- pub fn writevAll(self: Stream, iovecs: []os.iovec_const) WriteError!void {
+ pub fn writevAll(self: Stream, iovecs: []posix.iovec_const) WriteError!void {
if (iovecs.len == 0) return;
var i: usize = 0;
diff --git a/lib/std/os.zig b/lib/std/os.zig
index 2138f5cd20..53f1bef4fe 100644
--- a/lib/std/os.zig
+++ b/lib/std/os.zig
@@ -11,8 +11,6 @@
//! On Linux libc can be side-stepped by using `std.os.linux` directly.
//! * For Windows, this file represents the API that libc would provide for
//! Windows. For thin wrappers around Windows-specific APIs, see `std.os.windows`.
-//! Note: The Zig standard library does not support POSIX thread cancellation, and
-//! in general EINTR is handled by trying again.
const root = @import("root");
const std = @import("std.zig");
@@ -24,15 +22,8 @@ const elf = std.elf;
const fs = std.fs;
const dl = @import("dynamic_library.zig");
const MAX_PATH_BYTES = std.fs.MAX_PATH_BYTES;
+const posix = std.posix;
-pub const darwin = std.c;
-pub const dragonfly = std.c;
-pub const freebsd = std.c;
-pub const haiku = std.c;
-pub const netbsd = std.c;
-pub const openbsd = std.c;
-pub const solaris = std.c;
-pub const illumos = std.c;
pub const linux = @import("os/linux.zig");
pub const plan9 = @import("os/plan9.zig");
pub const uefi = @import("os/uefi.zig");
@@ -40,214 +31,15 @@ pub const wasi = @import("os/wasi.zig");
pub const emscripten = @import("os/emscripten.zig");
pub const windows = @import("os/windows.zig");
-comptime {
- assert(@import("std") == std); // std lib tests require --zig-lib-dir
-}
-
test {
- _ = darwin;
_ = linux;
if (builtin.os.tag == .uefi) {
_ = uefi;
}
_ = wasi;
_ = windows;
-
- _ = @import("os/test.zig");
}
-/// Applications can override the `system` API layer in their root source file.
-/// Otherwise, when linking libc, this is the C API.
-/// When not linking libc, it is the OS-specific system interface.
-pub const system = if (@hasDecl(root, "os") and @hasDecl(root.os, "system") and root.os != @This())
- root.os.system
-else if (use_libc)
- std.c
-else switch (builtin.os.tag) {
- .linux => linux,
- .plan9 => plan9,
- .uefi => uefi,
- else => struct {},
-};
-
-/// Whether to use libc for the POSIX API layer.
-const use_libc = builtin.link_libc or switch (builtin.os.tag) {
- .windows, .wasi => true,
- else => false,
-};
-
-pub const AF = system.AF;
-pub const AF_SUN = system.AF_SUN;
-pub const ARCH = system.ARCH;
-pub const AT = system.AT;
-pub const AT_SUN = system.AT_SUN;
-pub const CLOCK = system.CLOCK;
-pub const CPU_COUNT = system.CPU_COUNT;
-pub const CTL = system.CTL;
-pub const DT = system.DT;
-pub const E = system.E;
-pub const Elf_Symndx = system.Elf_Symndx;
-pub const F = system.F;
-pub const FD_CLOEXEC = system.FD_CLOEXEC;
-pub const Flock = system.Flock;
-pub const HOST_NAME_MAX = system.HOST_NAME_MAX;
-pub const HW = system.HW;
-pub const IFNAMESIZE = system.IFNAMESIZE;
-pub const IOV_MAX = system.IOV_MAX;
-pub const IPPROTO = system.IPPROTO;
-pub const KERN = system.KERN;
-pub const Kevent = system.Kevent;
-pub const LOCK = system.LOCK;
-pub const MADV = system.MADV;
-pub const MAP = system.MAP;
-pub const MSF = system.MSF;
-pub const MAX_ADDR_LEN = system.MAX_ADDR_LEN;
-pub const MFD = system.MFD;
-pub const MMAP2_UNIT = system.MMAP2_UNIT;
-pub const MSG = system.MSG;
-pub const NAME_MAX = system.NAME_MAX;
-pub const O = system.O;
-pub const PATH_MAX = system.PATH_MAX;
-pub const POLL = system.POLL;
-pub const POSIX_FADV = system.POSIX_FADV;
-pub const PR = system.PR;
-pub const PROT = system.PROT;
-pub const REG = system.REG;
-pub const RLIM = system.RLIM;
-pub const RR = system.RR;
-pub const S = system.S;
-pub const SA = system.SA;
-pub const SC = system.SC;
-pub const _SC = system._SC;
-pub const SEEK = system.SEEK;
-pub const SHUT = system.SHUT;
-pub const SIG = system.SIG;
-pub const SIOCGIFINDEX = system.SIOCGIFINDEX;
-pub const SO = system.SO;
-pub const SOCK = system.SOCK;
-pub const SOL = system.SOL;
-pub const STDERR_FILENO = system.STDERR_FILENO;
-pub const STDIN_FILENO = system.STDIN_FILENO;
-pub const STDOUT_FILENO = system.STDOUT_FILENO;
-pub const SYS = system.SYS;
-pub const Sigaction = system.Sigaction;
-pub const Stat = system.Stat;
-pub const T = system.T;
-pub const TCSA = system.TCSA;
-pub const TCP = system.TCP;
-pub const VDSO = system.VDSO;
-pub const W = system.W;
-pub const addrinfo = system.addrinfo;
-pub const blkcnt_t = system.blkcnt_t;
-pub const blksize_t = system.blksize_t;
-pub const clock_t = system.clock_t;
-pub const cpu_set_t = system.cpu_set_t;
-pub const dev_t = system.dev_t;
-pub const dl_phdr_info = system.dl_phdr_info;
-pub const empty_sigset = system.empty_sigset;
-pub const filled_sigset = system.filled_sigset;
-pub const fd_t = system.fd_t;
-pub const gid_t = system.gid_t;
-pub const ifreq = system.ifreq;
-pub const ino_t = system.ino_t;
-pub const mcontext_t = system.mcontext_t;
-pub const mode_t = system.mode_t;
-pub const msghdr = system.msghdr;
-pub const msghdr_const = system.msghdr_const;
-pub const nfds_t = system.nfds_t;
-pub const nlink_t = system.nlink_t;
-pub const off_t = system.off_t;
-pub const pid_t = system.pid_t;
-pub const pollfd = system.pollfd;
-pub const port_t = system.port_t;
-pub const port_event = system.port_event;
-pub const port_notify = system.port_notify;
-pub const file_obj = system.file_obj;
-pub const rlim_t = system.rlim_t;
-pub const rlimit = system.rlimit;
-pub const rlimit_resource = system.rlimit_resource;
-pub const rusage = system.rusage;
-pub const sa_family_t = system.sa_family_t;
-pub const siginfo_t = system.siginfo_t;
-pub const sigset_t = system.sigset_t;
-pub const sockaddr = system.sockaddr;
-pub const socklen_t = system.socklen_t;
-pub const stack_t = system.stack_t;
-pub const time_t = system.time_t;
-pub const timespec = system.timespec;
-pub const timestamp_t = system.timestamp_t;
-pub const timeval = system.timeval;
-pub const timezone = system.timezone;
-pub const ucontext_t = system.ucontext_t;
-pub const uid_t = system.uid_t;
-pub const user_desc = system.user_desc;
-pub const utsname = system.utsname;
-pub const winsize = system.winsize;
-
-pub const termios = system.termios;
-pub const CSIZE = system.CSIZE;
-pub const NCCS = system.NCCS;
-pub const cc_t = system.cc_t;
-pub const V = system.V;
-pub const speed_t = system.speed_t;
-pub const tc_iflag_t = system.tc_iflag_t;
-pub const tc_oflag_t = system.tc_oflag_t;
-pub const tc_cflag_t = system.tc_cflag_t;
-pub const tc_lflag_t = system.tc_lflag_t;
-
-pub const F_OK = system.F_OK;
-pub const R_OK = system.R_OK;
-pub const W_OK = system.W_OK;
-pub const X_OK = system.X_OK;
-
-pub const iovec = extern struct {
- iov_base: [*]u8,
- iov_len: usize,
-};
-
-pub const iovec_const = extern struct {
- iov_base: [*]const u8,
- iov_len: usize,
-};
-
-pub const ACCMODE = enum(u2) {
- RDONLY = 0,
- WRONLY = 1,
- RDWR = 2,
-};
-
-pub const LOG = struct {
- /// system is unusable
- pub const EMERG = 0;
- /// action must be taken immediately
- pub const ALERT = 1;
- /// critical conditions
- pub const CRIT = 2;
- /// error conditions
- pub const ERR = 3;
- /// warning conditions
- pub const WARNING = 4;
- /// normal but significant condition
- pub const NOTICE = 5;
- /// informational
- pub const INFO = 6;
- /// debug-level messages
- pub const DEBUG = 7;
-};
-
-/// An fd-relative file path
-///
-/// This is currently only used for WASI-specific functionality, but the concept
-/// is the same as the dirfd/pathname pairs in the `*at(...)` POSIX functions.
-pub const RelativePathWasi = struct {
- /// Handle to directory
- dir_fd: fd_t,
- /// Path to resource within `dir_fd`.
- relative_path: []const u8,
-};
-
-pub const socket_t = if (builtin.os.tag == .windows) windows.ws2_32.SOCKET else fd_t;
-
/// See also `getenv`. Populated by startup code before main().
/// TODO this is a footgun because the value will be undefined when using `zig build-lib`.
/// https://github.com/ziglang/zig/issues/4524
@@ -262,4662 +54,9 @@ pub var argv: [][*:0]u8 = if (builtin.link_libc) undefined else switch (builtin.
else => undefined,
};
-pub const have_sigpipe_support = @hasDecl(@This(), "SIG") and @hasDecl(SIG, "PIPE");
-
-fn noopSigHandler(_: c_int) callconv(.C) void {}
-
-/// On default executed by posix startup code before main(), if SIGPIPE is supported.
-pub fn maybeIgnoreSigpipe() void {
- if (have_sigpipe_support and !std.options.keep_sigpipe) {
- const act = Sigaction{
- // We set handler to a noop function instead of SIG.IGN so we don't leak our
- // signal disposition to a child process
- .handler = .{ .handler = noopSigHandler },
- .mask = empty_sigset,
- .flags = 0,
- };
- sigaction(SIG.PIPE, &act, null) catch |err|
- std.debug.panic("failed to install noop SIGPIPE handler with '{s}'", .{@errorName(err)});
- }
-}
-
-/// To obtain errno, call this function with the return value of the
-/// system function call. For some systems this will obtain the value directly
-/// from the return code; for others it will use a thread-local errno variable.
-/// Therefore, this function only returns a well-defined value when it is called
-/// directly after the system function call which one wants to learn the errno
-/// value of.
-pub const errno = system.getErrno;
-
-/// Closes the file descriptor.
-/// This function is not capable of returning any indication of failure. An
-/// application which wants to ensure writes have succeeded before closing
-/// must call `fsync` before `close`.
-/// Note: The Zig standard library does not support POSIX thread cancellation.
-pub fn close(fd: fd_t) void {
- if (builtin.os.tag == .windows) {
- return windows.CloseHandle(fd);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- _ = wasi.fd_close(fd);
- return;
- }
- if (builtin.target.isDarwin()) {
- // This avoids the EINTR problem.
- switch (darwin.getErrno(darwin.@"close$NOCANCEL"(fd))) {
- .BADF => unreachable, // Always a race condition.
- else => return,
- }
- }
- switch (errno(system.close(fd))) {
- .BADF => unreachable, // Always a race condition.
- .INTR => return, // This is still a success. See https://github.com/ziglang/zig/issues/2425
- else => return,
- }
-}
-
-pub const FChmodError = error{
- AccessDenied,
- InputOutput,
- SymLinkLoop,
- FileNotFound,
- SystemResources,
- ReadOnlyFileSystem,
-} || UnexpectedError;
-
-/// Changes the mode of the file referred to by the file descriptor.
-/// The process must have the correct privileges in order to do this
-/// successfully, or must have the effective user ID matching the owner
-/// of the file.
-pub fn fchmod(fd: fd_t, mode: mode_t) FChmodError!void {
- if (!std.fs.has_executable_bit) @compileError("fchmod unsupported by target OS");
-
- while (true) {
- const res = system.fchmod(fd, mode);
-
- switch (system.getErrno(res)) {
- .SUCCESS => return,
- .INTR => continue,
- .BADF => unreachable,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .IO => return error.InputOutput,
- .LOOP => return error.SymLinkLoop,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.FileNotFound,
- .PERM => return error.AccessDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-const FChmodAtError = FChmodError || error{
- /// A component of `path` exceeded `NAME_MAX`, or the entire path exceeded
- /// `PATH_MAX`.
- NameTooLong,
- /// `path` resolves to a symbolic link, and `AT.SYMLINK_NOFOLLOW` was set
- /// in `flags`. This error only occurs on Linux, where changing the mode of
- /// a symbolic link has no meaning and can cause undefined behaviour on
- /// certain filesystems.
- ///
- /// The procfs fallback was used but procfs was not mounted.
- OperationNotSupported,
- /// The procfs fallback was used but the process exceeded its open file
- /// limit.
- ProcessFdQuotaExceeded,
- /// The procfs fallback was used but the system exceeded it open file limit.
- SystemFdQuotaExceeded,
-};
-
-var has_fchmodat2_syscall = std.atomic.Value(bool).init(true);
-
-/// Changes the `mode` of `path` relative to the directory referred to by
-/// `dirfd`. The process must have the correct privileges in order to do this
-/// successfully, or must have the effective user ID matching the owner of the
-/// file.
-///
-/// On Linux the `fchmodat2` syscall will be used if available, otherwise a
-/// workaround using procfs will be employed. Changing the mode of a symbolic
-/// link with `AT.SYMLINK_NOFOLLOW` set will also return
-/// `OperationNotSupported`, as:
-///
-/// 1. Permissions on the link are ignored when resolving its target.
-/// 2. This operation has been known to invoke undefined behaviour across
-/// different filesystems[1].
-///
-/// [1]: https://sourceware.org/legacy-ml/libc-alpha/2020-02/msg00467.html.
-pub inline fn fchmodat(dirfd: fd_t, path: []const u8, mode: mode_t, flags: u32) FChmodAtError!void {
- if (!std.fs.has_executable_bit) @compileError("fchmodat unsupported by target OS");
-
- // No special handling for linux is needed if we can use the libc fallback
- // or `flags` is empty. Glibc only added the fallback in 2.32.
- const skip_fchmodat_fallback = builtin.os.tag != .linux or
- std.c.versionCheck(.{ .major = 2, .minor = 32, .patch = 0 }) or
- flags == 0;
-
- // This function is marked inline so that when flags is comptime-known,
- // skip_fchmodat_fallback will be comptime-known true.
- if (skip_fchmodat_fallback)
- return fchmodat1(dirfd, path, mode, flags);
-
- return fchmodat2(dirfd, path, mode, flags);
-}
-
-fn fchmodat1(dirfd: fd_t, path: []const u8, mode: mode_t, flags: u32) FChmodAtError!void {
- const path_c = try toPosixPath(path);
- while (true) {
- const res = system.fchmodat(dirfd, &path_c, mode, flags);
- switch (system.getErrno(res)) {
- .SUCCESS => return,
- .INTR => continue,
- .BADF => unreachable,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .IO => return error.InputOutput,
- .LOOP => return error.SymLinkLoop,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .OPNOTSUPP => return error.OperationNotSupported,
- .PERM => return error.AccessDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-fn fchmodat2(dirfd: fd_t, path: []const u8, mode: mode_t, flags: u32) FChmodAtError!void {
- const path_c = try toPosixPath(path);
- const use_fchmodat2 = (builtin.os.isAtLeast(.linux, .{ .major = 6, .minor = 6, .patch = 0 }) orelse false) and
- has_fchmodat2_syscall.load(.monotonic);
- while (use_fchmodat2) {
- // Later on this should be changed to `system.fchmodat2`
- // when the musl/glibc add a wrapper.
- const res = linux.fchmodat2(dirfd, &path_c, mode, flags);
- switch (linux.getErrno(res)) {
- .SUCCESS => return,
- .INTR => continue,
- .BADF => unreachable,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .IO => return error.InputOutput,
- .LOOP => return error.SymLinkLoop,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.FileNotFound,
- .OPNOTSUPP => return error.OperationNotSupported,
- .PERM => return error.AccessDenied,
- .ROFS => return error.ReadOnlyFileSystem,
-
- .NOSYS => { // Use fallback.
- has_fchmodat2_syscall.store(false, .monotonic);
- break;
- },
- else => |err| return unexpectedErrno(err),
- }
- }
-
- // Fallback to changing permissions using procfs:
- //
- // 1. Open `path` as a `PATH` descriptor.
- // 2. Stat the fd and check if it isn't a symbolic link.
- // 3. Generate the procfs reference to the fd via `/proc/self/fd/{fd}`.
- // 4. Pass the procfs path to `chmod` with the `mode`.
- var pathfd: fd_t = undefined;
- while (true) {
- const rc = system.openat(dirfd, &path_c, .{ .PATH = true, .NOFOLLOW = true, .CLOEXEC = true }, @as(mode_t, 0));
- switch (system.getErrno(rc)) {
- .SUCCESS => {
- pathfd = @intCast(rc);
- break;
- },
- .INTR => continue,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .LOOP => return error.SymLinkLoop,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- else => |err| return unexpectedErrno(err),
- }
- }
- defer close(pathfd);
-
- const stat = fstatatZ(pathfd, "", AT.EMPTY_PATH) catch |err| switch (err) {
- error.NameTooLong => unreachable,
- error.FileNotFound => unreachable,
- error.InvalidUtf8 => unreachable,
- else => |e| return e,
- };
- if ((stat.mode & S.IFMT) == S.IFLNK)
- return error.OperationNotSupported;
-
- var procfs_buf: ["/proc/self/fd/-2147483648\x00".len]u8 = undefined;
- const proc_path = std.fmt.bufPrintZ(procfs_buf[0..], "/proc/self/fd/{d}", .{pathfd}) catch unreachable;
- while (true) {
- const res = system.chmod(proc_path, mode);
- switch (system.getErrno(res)) {
- // Getting NOENT here means that procfs isn't mounted.
- .NOENT => return error.OperationNotSupported,
-
- .SUCCESS => return,
- .INTR => continue,
- .BADF => unreachable,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .IO => return error.InputOutput,
- .LOOP => return error.SymLinkLoop,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.FileNotFound,
- .PERM => return error.AccessDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const FChownError = error{
- AccessDenied,
- InputOutput,
- SymLinkLoop,
- FileNotFound,
- SystemResources,
- ReadOnlyFileSystem,
-} || UnexpectedError;
-
-/// Changes the owner and group of the file referred to by the file descriptor.
-/// The process must have the correct privileges in order to do this
-/// successfully. The group may be changed by the owner of the directory to
-/// any group of which the owner is a member. If the owner or group is
-/// specified as `null`, the ID is not changed.
-pub fn fchown(fd: fd_t, owner: ?uid_t, group: ?gid_t) FChownError!void {
- switch (builtin.os.tag) {
- .windows, .wasi => @compileError("Unsupported OS"),
- else => {},
- }
-
- while (true) {
- const res = system.fchown(fd, owner orelse ~@as(uid_t, 0), group orelse ~@as(gid_t, 0));
-
- switch (system.getErrno(res)) {
- .SUCCESS => return,
- .INTR => continue,
- .BADF => unreachable, // Can be reached if the fd refers to a directory opened without `OpenDirOptions{ .iterate = true }`
-
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .IO => return error.InputOutput,
- .LOOP => return error.SymLinkLoop,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.FileNotFound,
- .PERM => return error.AccessDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const RebootError = error{
- PermissionDenied,
-} || UnexpectedError;
-
-pub const RebootCommand = switch (builtin.os.tag) {
- .linux => union(linux.LINUX_REBOOT.CMD) {
- RESTART: void,
- HALT: void,
- CAD_ON: void,
- CAD_OFF: void,
- POWER_OFF: void,
- RESTART2: [*:0]const u8,
- SW_SUSPEND: void,
- KEXEC: void,
- },
- else => @compileError("Unsupported OS"),
-};
-
-pub fn reboot(cmd: RebootCommand) RebootError!void {
- switch (builtin.os.tag) {
- .linux => {
- switch (system.getErrno(linux.reboot(
- .MAGIC1,
- .MAGIC2,
- cmd,
- switch (cmd) {
- .RESTART2 => |s| s,
- else => null,
- },
- ))) {
- .SUCCESS => {},
- .PERM => return error.PermissionDenied,
- else => |err| return std.os.unexpectedErrno(err),
- }
- switch (cmd) {
- .CAD_OFF => {},
- .CAD_ON => {},
- .SW_SUSPEND => {},
-
- .HALT => unreachable,
- .KEXEC => unreachable,
- .POWER_OFF => unreachable,
- .RESTART => unreachable,
- .RESTART2 => unreachable,
- }
- },
- else => @compileError("Unsupported OS"),
- }
-}
-
-pub const GetRandomError = OpenError;
-
-/// Obtain a series of random bytes. These bytes can be used to seed user-space
-/// random number generators or for cryptographic purposes.
-/// When linking against libc, this calls the
-/// appropriate OS-specific library call. Otherwise it uses the zig standard
-/// library implementation.
-pub fn getrandom(buffer: []u8) GetRandomError!void {
- if (builtin.os.tag == .windows) {
- return windows.RtlGenRandom(buffer);
- }
- if (builtin.os.tag == .linux or builtin.os.tag == .freebsd) {
- var buf = buffer;
- const use_c = builtin.os.tag != .linux or
- std.c.versionCheck(std.SemanticVersion{ .major = 2, .minor = 25, .patch = 0 });
-
- while (buf.len != 0) {
- const num_read: usize, const err = if (use_c) res: {
- const rc = std.c.getrandom(buf.ptr, buf.len, 0);
- break :res .{
- @bitCast(rc),
- std.c.getErrno(rc),
- };
- } else res: {
- const rc = linux.getrandom(buf.ptr, buf.len, 0);
- break :res .{
- rc,
- linux.getErrno(rc),
- };
- };
-
- switch (err) {
- .SUCCESS => buf = buf[num_read..],
- .INVAL => unreachable,
- .FAULT => unreachable,
- .INTR => continue,
- .NOSYS => return getRandomBytesDevURandom(buf),
- else => return unexpectedErrno(err),
- }
- }
- return;
- }
- if (builtin.os.tag == .emscripten) {
- const err = std.c.getErrno(std.c.getentropy(buffer.ptr, buffer.len));
- switch (err) {
- .SUCCESS => return,
- else => return unexpectedErrno(err),
- }
- }
- switch (builtin.os.tag) {
- .netbsd, .openbsd, .macos, .ios, .tvos, .watchos => {
- system.arc4random_buf(buffer.ptr, buffer.len);
- return;
- },
- .wasi => switch (wasi.random_get(buffer.ptr, buffer.len)) {
- .SUCCESS => return,
- else => |err| return unexpectedErrno(err),
- },
- else => return getRandomBytesDevURandom(buffer),
- }
-}
-
-fn getRandomBytesDevURandom(buf: []u8) !void {
- const fd = try openZ("/dev/urandom", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
- defer close(fd);
-
- const st = try fstat(fd);
- if (!S.ISCHR(st.mode)) {
- return error.NoDevice;
- }
-
- const file = std.fs.File{ .handle = fd };
- const stream = file.reader();
- stream.readNoEof(buf) catch return error.Unexpected;
-}
-
-/// Causes abnormal process termination.
-/// If linking against libc, this calls the abort() libc function. Otherwise
-/// it raises SIGABRT followed by SIGKILL and finally lo
-/// Invokes the current signal handler for SIGABRT, if any.
-pub fn abort() noreturn {
- @setCold(true);
- // MSVCRT abort() sometimes opens a popup window which is undesirable, so
- // even when linking libc on Windows we use our own abort implementation.
- // See https://github.com/ziglang/zig/issues/2071 for more details.
- if (builtin.os.tag == .windows) {
- if (builtin.mode == .Debug) {
- @breakpoint();
- }
- windows.kernel32.ExitProcess(3);
- }
- if (!builtin.link_libc and builtin.os.tag == .linux) {
- // The Linux man page says that the libc abort() function
- // "first unblocks the SIGABRT signal", but this is a footgun
- // for user-defined signal handlers that want to restore some state in
- // some program sections and crash in others.
- // So, the user-installed SIGABRT handler is run, if present.
- raise(SIG.ABRT) catch {};
-
- // Disable all signal handlers.
- sigprocmask(SIG.BLOCK, &linux.all_mask, null);
-
- // Only one thread may proceed to the rest of abort().
- if (!builtin.single_threaded) {
- const global = struct {
- var abort_entered: bool = false;
- };
- while (@cmpxchgWeak(bool, &global.abort_entered, false, true, .seq_cst, .seq_cst)) |_| {}
- }
-
- // Install default handler so that the tkill below will terminate.
- const sigact = Sigaction{
- .handler = .{ .handler = SIG.DFL },
- .mask = empty_sigset,
- .flags = 0,
- };
- sigaction(SIG.ABRT, &sigact, null) catch |err| switch (err) {
- error.OperationNotSupported => unreachable,
- };
-
- _ = linux.tkill(linux.gettid(), SIG.ABRT);
-
- const sigabrtmask: linux.sigset_t = [_]u32{0} ** 31 ++ [_]u32{1 << (SIG.ABRT - 1)};
- sigprocmask(SIG.UNBLOCK, &sigabrtmask, null);
-
- // Beyond this point should be unreachable.
- @as(*allowzero volatile u8, @ptrFromInt(0)).* = 0;
- raise(SIG.KILL) catch {};
- exit(127); // Pid 1 might not be signalled in some containers.
- }
- switch (builtin.os.tag) {
- .uefi, .wasi, .emscripten, .cuda, .amdhsa => @trap(),
- else => system.abort(),
- }
-}
-
-pub const RaiseError = UnexpectedError;
-
-pub fn raise(sig: u8) RaiseError!void {
- if (builtin.link_libc) {
- switch (errno(system.raise(sig))) {
- .SUCCESS => return,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- if (builtin.os.tag == .linux) {
- var set: sigset_t = undefined;
- // block application signals
- sigprocmask(SIG.BLOCK, &linux.app_mask, &set);
-
- const tid = linux.gettid();
- const rc = linux.tkill(tid, sig);
-
- // restore signal mask
- sigprocmask(SIG.SETMASK, &set, null);
-
- switch (errno(rc)) {
- .SUCCESS => return,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- @compileError("std.os.raise unimplemented for this target");
-}
-
-pub const KillError = error{ ProcessNotFound, PermissionDenied } || UnexpectedError;
-
-pub fn kill(pid: pid_t, sig: u8) KillError!void {
- switch (errno(system.kill(pid, sig))) {
- .SUCCESS => return,
- .INVAL => unreachable, // invalid signal
- .PERM => return error.PermissionDenied,
- .SRCH => return error.ProcessNotFound,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Exits the program cleanly with the specified status code.
-pub fn exit(status: u8) noreturn {
- if (builtin.link_libc) {
- system.exit(status);
- }
- if (builtin.os.tag == .windows) {
- windows.kernel32.ExitProcess(status);
- }
- if (builtin.os.tag == .wasi) {
- wasi.proc_exit(status);
- }
- if (builtin.os.tag == .linux and !builtin.single_threaded) {
- linux.exit_group(status);
- }
- if (builtin.os.tag == .uefi) {
- // exit() is only available if exitBootServices() has not been called yet.
- // This call to exit should not fail, so we don't care about its return value.
- if (uefi.system_table.boot_services) |bs| {
- _ = bs.exit(uefi.handle, @enumFromInt(status), 0, null);
- }
- // If we can't exit, reboot the system instead.
- uefi.system_table.runtime_services.resetSystem(.ResetCold, @enumFromInt(status), 0, null);
- }
- system.exit(status);
-}
-
-pub const ReadError = error{
- InputOutput,
- SystemResources,
- IsDir,
- OperationAborted,
- BrokenPipe,
- ConnectionResetByPeer,
- ConnectionTimedOut,
- NotOpenForReading,
- SocketNotConnected,
-
- /// This error occurs when no global event loop is configured,
- /// and reading from the file descriptor would block.
- WouldBlock,
-
- /// In WASI, this error occurs when the file descriptor does
- /// not hold the required rights to read from it.
- AccessDenied,
-} || UnexpectedError;
-
-/// Returns the number of bytes that were read, which can be less than
-/// buf.len. If 0 bytes were read, that means EOF.
-/// If `fd` is opened in non blocking mode, the function will return error.WouldBlock
-/// when EAGAIN is received.
-///
-/// Linux has a limit on how many bytes may be transferred in one `read` call, which is `0x7ffff000`
-/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
-/// well as stuffing the errno codes into the last `4096` values. This is noted on the `read` man page.
-/// The limit on Darwin is `0x7fffffff`, trying to read more than that returns EINVAL.
-/// The corresponding POSIX limit is `math.maxInt(isize)`.
-pub fn read(fd: fd_t, buf: []u8) ReadError!usize {
- if (buf.len == 0) return 0;
- if (builtin.os.tag == .windows) {
- return windows.ReadFile(fd, buf, null);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const iovs = [1]iovec{iovec{
- .iov_base = buf.ptr,
- .iov_len = buf.len,
- }};
-
- var nread: usize = undefined;
- switch (wasi.fd_read(fd, &iovs, iovs.len, &nread)) {
- .SUCCESS => return nread,
- .INTR => unreachable,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => unreachable,
- .BADF => return error.NotOpenForReading, // Can be a race condition.
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTCONN => return error.SocketNotConnected,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- // Prevents EINVAL.
- const max_count = switch (builtin.os.tag) {
- .linux => 0x7ffff000,
- .macos, .ios, .watchos, .tvos => math.maxInt(i32),
- else => math.maxInt(isize),
- };
- while (true) {
- const rc = system.read(fd, buf.ptr, @min(buf.len, max_count));
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => return error.WouldBlock,
- .BADF => return error.NotOpenForReading, // Can be a race condition.
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTCONN => return error.SocketNotConnected,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-/// Number of bytes read is returned. Upon reading end-of-file, zero is returned.
-///
-/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
-/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
-///
-/// This operation is non-atomic on the following systems:
-/// * Windows
-/// On these systems, the read races with concurrent writes to the same file descriptor.
-///
-/// This function assumes that all vectors, including zero-length vectors, have
-/// a pointer within the address space of the application.
-pub fn readv(fd: fd_t, iov: []const iovec) ReadError!usize {
- if (builtin.os.tag == .windows) {
- // TODO improve this to use ReadFileScatter
- if (iov.len == 0) return 0;
- const first = iov[0];
- return read(fd, first.iov_base[0..first.iov_len]);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var nread: usize = undefined;
- switch (wasi.fd_read(fd, iov.ptr, iov.len, &nread)) {
- .SUCCESS => return nread,
- .INTR => unreachable,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => unreachable, // currently not support in WASI
- .BADF => return error.NotOpenForReading, // can be a race condition
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTCONN => return error.SocketNotConnected,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- while (true) {
- const rc = system.readv(fd, iov.ptr, @min(iov.len, IOV_MAX));
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => return error.WouldBlock,
- .BADF => return error.NotOpenForReading, // can be a race condition
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTCONN => return error.SocketNotConnected,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const PReadError = ReadError || error{Unseekable};
-
-/// Number of bytes read is returned. Upon reading end-of-file, zero is returned.
-///
-/// Retries when interrupted by a signal.
-///
-/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
-/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
-///
-/// Linux has a limit on how many bytes may be transferred in one `pread` call, which is `0x7ffff000`
-/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
-/// well as stuffing the errno codes into the last `4096` values. This is noted on the `read` man page.
-/// The limit on Darwin is `0x7fffffff`, trying to read more than that returns EINVAL.
-/// The corresponding POSIX limit is `math.maxInt(isize)`.
-pub fn pread(fd: fd_t, buf: []u8, offset: u64) PReadError!usize {
- if (buf.len == 0) return 0;
- if (builtin.os.tag == .windows) {
- return windows.ReadFile(fd, buf, offset);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const iovs = [1]iovec{iovec{
- .iov_base = buf.ptr,
- .iov_len = buf.len,
- }};
-
- var nread: usize = undefined;
- switch (wasi.fd_pread(fd, &iovs, iovs.len, offset, &nread)) {
- .SUCCESS => return nread,
- .INTR => unreachable,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => unreachable,
- .BADF => return error.NotOpenForReading, // Can be a race condition.
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTCONN => return error.SocketNotConnected,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- // Prevent EINVAL.
- const max_count = switch (builtin.os.tag) {
- .linux => 0x7ffff000,
- .macos, .ios, .watchos, .tvos => math.maxInt(i32),
- else => math.maxInt(isize),
- };
-
- const pread_sym = if (lfs64_abi) system.pread64 else system.pread;
- while (true) {
- const rc = pread_sym(fd, buf.ptr, @min(buf.len, max_count), @bitCast(offset));
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => return error.WouldBlock,
- .BADF => return error.NotOpenForReading, // Can be a race condition.
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTCONN => return error.SocketNotConnected,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const TruncateError = error{
- FileTooBig,
- InputOutput,
- FileBusy,
-
- /// In WASI, this error occurs when the file descriptor does
- /// not hold the required rights to call `ftruncate` on it.
- AccessDenied,
-} || UnexpectedError;
-
-pub fn ftruncate(fd: fd_t, length: u64) TruncateError!void {
- if (builtin.os.tag == .windows) {
- var io_status_block: windows.IO_STATUS_BLOCK = undefined;
- var eof_info = windows.FILE_END_OF_FILE_INFORMATION{
- .EndOfFile = @bitCast(length),
- };
-
- const rc = windows.ntdll.NtSetInformationFile(
- fd,
- &io_status_block,
- &eof_info,
- @sizeOf(windows.FILE_END_OF_FILE_INFORMATION),
- .FileEndOfFileInformation,
- );
-
- switch (rc) {
- .SUCCESS => return,
- .INVALID_HANDLE => unreachable, // Handle not open for writing
- .ACCESS_DENIED => return error.AccessDenied,
- else => return windows.unexpectedStatus(rc),
- }
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- switch (wasi.fd_filestat_set_size(fd, length)) {
- .SUCCESS => return,
- .INTR => unreachable,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .PERM => return error.AccessDenied,
- .TXTBSY => return error.FileBusy,
- .BADF => unreachable, // Handle not open for writing
- .INVAL => unreachable, // Handle not open for writing
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- const ftruncate_sym = if (lfs64_abi) system.ftruncate64 else system.ftruncate;
- while (true) {
- switch (errno(ftruncate_sym(fd, @bitCast(length)))) {
- .SUCCESS => return,
- .INTR => continue,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .PERM => return error.AccessDenied,
- .TXTBSY => return error.FileBusy,
- .BADF => unreachable, // Handle not open for writing
- .INVAL => unreachable, // Handle not open for writing
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-/// Number of bytes read is returned. Upon reading end-of-file, zero is returned.
-///
-/// Retries when interrupted by a signal.
-///
-/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
-/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
-///
-/// This operation is non-atomic on the following systems:
-/// * Darwin
-/// * Windows
-/// On these systems, the read races with concurrent writes to the same file descriptor.
-pub fn preadv(fd: fd_t, iov: []const iovec, offset: u64) PReadError!usize {
- const have_pread_but_not_preadv = switch (builtin.os.tag) {
- .windows, .macos, .ios, .watchos, .tvos, .haiku => true,
- else => false,
- };
- if (have_pread_but_not_preadv) {
- // We could loop here; but proper usage of `preadv` must handle partial reads anyway.
- // So we simply read into the first vector only.
- if (iov.len == 0) return 0;
- const first = iov[0];
- return pread(fd, first.iov_base[0..first.iov_len], offset);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var nread: usize = undefined;
- switch (wasi.fd_pread(fd, iov.ptr, iov.len, offset, &nread)) {
- .SUCCESS => return nread,
- .INTR => unreachable,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => unreachable,
- .BADF => return error.NotOpenForReading, // can be a race condition
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTCONN => return error.SocketNotConnected,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- const preadv_sym = if (lfs64_abi) system.preadv64 else system.preadv;
- while (true) {
- const rc = preadv_sym(fd, iov.ptr, @min(iov.len, IOV_MAX), @bitCast(offset));
- switch (errno(rc)) {
- .SUCCESS => return @bitCast(rc),
- .INTR => continue,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => return error.WouldBlock,
- .BADF => return error.NotOpenForReading, // can be a race condition
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTCONN => return error.SocketNotConnected,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const WriteError = error{
- DiskQuota,
- FileTooBig,
- InputOutput,
- NoSpaceLeft,
- DeviceBusy,
- InvalidArgument,
-
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to write to it.
- AccessDenied,
- BrokenPipe,
- SystemResources,
- OperationAborted,
- NotOpenForWriting,
-
- /// The process cannot access the file because another process has locked
- /// a portion of the file. Windows-only.
- LockViolation,
-
- /// This error occurs when no global event loop is configured,
- /// and reading from the file descriptor would block.
- WouldBlock,
-
- /// Connection reset by peer.
- ConnectionResetByPeer,
-} || UnexpectedError;
-
-/// Write to a file descriptor.
-/// Retries when interrupted by a signal.
-/// Returns the number of bytes written. If nonzero bytes were supplied, this will be nonzero.
-///
-/// Note that a successful write() may transfer fewer than count bytes. Such partial writes can
-/// occur for various reasons; for example, because there was insufficient space on the disk
-/// device to write all of the requested bytes, or because a blocked write() to a socket, pipe, or
-/// similar was interrupted by a signal handler after it had transferred some, but before it had
-/// transferred all of the requested bytes. In the event of a partial write, the caller can make
-/// another write() call to transfer the remaining bytes. The subsequent call will either
-/// transfer further bytes or may result in an error (e.g., if the disk is now full).
-///
-/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
-/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
-///
-/// Linux has a limit on how many bytes may be transferred in one `write` call, which is `0x7ffff000`
-/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
-/// well as stuffing the errno codes into the last `4096` values. This is noted on the `write` man page.
-/// The limit on Darwin is `0x7fffffff`, trying to read more than that returns EINVAL.
-/// The corresponding POSIX limit is `math.maxInt(isize)`.
-pub fn write(fd: fd_t, bytes: []const u8) WriteError!usize {
- if (bytes.len == 0) return 0;
- if (builtin.os.tag == .windows) {
- return windows.WriteFile(fd, bytes, null);
- }
-
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const ciovs = [_]iovec_const{iovec_const{
- .iov_base = bytes.ptr,
- .iov_len = bytes.len,
- }};
- var nwritten: usize = undefined;
- switch (wasi.fd_write(fd, &ciovs, ciovs.len, &nwritten)) {
- .SUCCESS => return nwritten,
- .INTR => unreachable,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => unreachable,
- .BADF => return error.NotOpenForWriting, // can be a race condition.
- .DESTADDRREQ => unreachable, // `connect` was never called.
- .DQUOT => return error.DiskQuota,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .PIPE => return error.BrokenPipe,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- const max_count = switch (builtin.os.tag) {
- .linux => 0x7ffff000,
- .macos, .ios, .watchos, .tvos => math.maxInt(i32),
- else => math.maxInt(isize),
- };
- while (true) {
- const rc = system.write(fd, bytes.ptr, @min(bytes.len, max_count));
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .INVAL => return error.InvalidArgument,
- .FAULT => unreachable,
- .AGAIN => return error.WouldBlock,
- .BADF => return error.NotOpenForWriting, // can be a race condition.
- .DESTADDRREQ => unreachable, // `connect` was never called.
- .DQUOT => return error.DiskQuota,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .PIPE => return error.BrokenPipe,
- .CONNRESET => return error.ConnectionResetByPeer,
- .BUSY => return error.DeviceBusy,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-/// Write multiple buffers to a file descriptor.
-/// Retries when interrupted by a signal.
-/// Returns the number of bytes written. If nonzero bytes were supplied, this will be nonzero.
-///
-/// Note that a successful write() may transfer fewer bytes than supplied. Such partial writes can
-/// occur for various reasons; for example, because there was insufficient space on the disk
-/// device to write all of the requested bytes, or because a blocked write() to a socket, pipe, or
-/// similar was interrupted by a signal handler after it had transferred some, but before it had
-/// transferred all of the requested bytes. In the event of a partial write, the caller can make
-/// another write() call to transfer the remaining bytes. The subsequent call will either
-/// transfer further bytes or may result in an error (e.g., if the disk is now full).
-///
-/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
-/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
-///
-/// If `iov.len` is larger than `IOV_MAX`, a partial write will occur.
-///
-/// This function assumes that all vectors, including zero-length vectors, have
-/// a pointer within the address space of the application.
-pub fn writev(fd: fd_t, iov: []const iovec_const) WriteError!usize {
- if (builtin.os.tag == .windows) {
- // TODO improve this to use WriteFileScatter
- if (iov.len == 0) return 0;
- const first = iov[0];
- return write(fd, first.iov_base[0..first.iov_len]);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var nwritten: usize = undefined;
- switch (wasi.fd_write(fd, iov.ptr, iov.len, &nwritten)) {
- .SUCCESS => return nwritten,
- .INTR => unreachable,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => unreachable,
- .BADF => return error.NotOpenForWriting, // can be a race condition.
- .DESTADDRREQ => unreachable, // `connect` was never called.
- .DQUOT => return error.DiskQuota,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .PIPE => return error.BrokenPipe,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- while (true) {
- const rc = system.writev(fd, iov.ptr, @min(iov.len, IOV_MAX));
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .INVAL => return error.InvalidArgument,
- .FAULT => unreachable,
- .AGAIN => return error.WouldBlock,
- .BADF => return error.NotOpenForWriting, // Can be a race condition.
- .DESTADDRREQ => unreachable, // `connect` was never called.
- .DQUOT => return error.DiskQuota,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .PIPE => return error.BrokenPipe,
- .CONNRESET => return error.ConnectionResetByPeer,
- .BUSY => return error.DeviceBusy,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const PWriteError = WriteError || error{Unseekable};
-
-/// Write to a file descriptor, with a position offset.
-/// Retries when interrupted by a signal.
-/// Returns the number of bytes written. If nonzero bytes were supplied, this will be nonzero.
-///
-/// Note that a successful write() may transfer fewer bytes than supplied. Such partial writes can
-/// occur for various reasons; for example, because there was insufficient space on the disk
-/// device to write all of the requested bytes, or because a blocked write() to a socket, pipe, or
-/// similar was interrupted by a signal handler after it had transferred some, but before it had
-/// transferred all of the requested bytes. In the event of a partial write, the caller can make
-/// another write() call to transfer the remaining bytes. The subsequent call will either
-/// transfer further bytes or may result in an error (e.g., if the disk is now full).
-///
-/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
-/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
-///
-/// Linux has a limit on how many bytes may be transferred in one `pwrite` call, which is `0x7ffff000`
-/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
-/// well as stuffing the errno codes into the last `4096` values. This is noted on the `write` man page.
-/// The limit on Darwin is `0x7fffffff`, trying to write more than that returns EINVAL.
-/// The corresponding POSIX limit is `math.maxInt(isize)`.
-pub fn pwrite(fd: fd_t, bytes: []const u8, offset: u64) PWriteError!usize {
- if (bytes.len == 0) return 0;
- if (builtin.os.tag == .windows) {
- return windows.WriteFile(fd, bytes, offset);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const ciovs = [1]iovec_const{iovec_const{
- .iov_base = bytes.ptr,
- .iov_len = bytes.len,
- }};
-
- var nwritten: usize = undefined;
- switch (wasi.fd_pwrite(fd, &ciovs, ciovs.len, offset, &nwritten)) {
- .SUCCESS => return nwritten,
- .INTR => unreachable,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => unreachable,
- .BADF => return error.NotOpenForWriting, // can be a race condition.
- .DESTADDRREQ => unreachable, // `connect` was never called.
- .DQUOT => return error.DiskQuota,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .PIPE => return error.BrokenPipe,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- // Prevent EINVAL.
- const max_count = switch (builtin.os.tag) {
- .linux => 0x7ffff000,
- .macos, .ios, .watchos, .tvos => math.maxInt(i32),
- else => math.maxInt(isize),
- };
-
- const pwrite_sym = if (lfs64_abi) system.pwrite64 else system.pwrite;
- while (true) {
- const rc = pwrite_sym(fd, bytes.ptr, @min(bytes.len, max_count), @bitCast(offset));
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .INVAL => return error.InvalidArgument,
- .FAULT => unreachable,
- .AGAIN => return error.WouldBlock,
- .BADF => return error.NotOpenForWriting, // Can be a race condition.
- .DESTADDRREQ => unreachable, // `connect` was never called.
- .DQUOT => return error.DiskQuota,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .PIPE => return error.BrokenPipe,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .BUSY => return error.DeviceBusy,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-/// Write multiple buffers to a file descriptor, with a position offset.
-/// Retries when interrupted by a signal.
-/// Returns the number of bytes written. If nonzero bytes were supplied, this will be nonzero.
-///
-/// Note that a successful write() may transfer fewer than count bytes. Such partial writes can
-/// occur for various reasons; for example, because there was insufficient space on the disk
-/// device to write all of the requested bytes, or because a blocked write() to a socket, pipe, or
-/// similar was interrupted by a signal handler after it had transferred some, but before it had
-/// transferred all of the requested bytes. In the event of a partial write, the caller can make
-/// another write() call to transfer the remaining bytes. The subsequent call will either
-/// transfer further bytes or may result in an error (e.g., if the disk is now full).
-///
-/// If `fd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-///
-/// The following systems do not have this syscall, and will return partial writes if more than one
-/// vector is provided:
-/// * Darwin
-/// * Windows
-///
-/// If `iov.len` is larger than `IOV_MAX`, a partial write will occur.
-pub fn pwritev(fd: fd_t, iov: []const iovec_const, offset: u64) PWriteError!usize {
- const have_pwrite_but_not_pwritev = switch (builtin.os.tag) {
- .windows, .macos, .ios, .watchos, .tvos, .haiku => true,
- else => false,
- };
-
- if (have_pwrite_but_not_pwritev) {
- // We could loop here; but proper usage of `pwritev` must handle partial writes anyway.
- // So we simply write the first vector only.
- if (iov.len == 0) return 0;
- const first = iov[0];
- return pwrite(fd, first.iov_base[0..first.iov_len], offset);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var nwritten: usize = undefined;
- switch (wasi.fd_pwrite(fd, iov.ptr, iov.len, offset, &nwritten)) {
- .SUCCESS => return nwritten,
- .INTR => unreachable,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .AGAIN => unreachable,
- .BADF => return error.NotOpenForWriting, // Can be a race condition.
- .DESTADDRREQ => unreachable, // `connect` was never called.
- .DQUOT => return error.DiskQuota,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .PIPE => return error.BrokenPipe,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- const pwritev_sym = if (lfs64_abi) system.pwritev64 else system.pwritev;
- while (true) {
- const rc = pwritev_sym(fd, iov.ptr, @min(iov.len, IOV_MAX), @bitCast(offset));
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .INVAL => return error.InvalidArgument,
- .FAULT => unreachable,
- .AGAIN => return error.WouldBlock,
- .BADF => return error.NotOpenForWriting, // Can be a race condition.
- .DESTADDRREQ => unreachable, // `connect` was never called.
- .DQUOT => return error.DiskQuota,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .PIPE => return error.BrokenPipe,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .BUSY => return error.DeviceBusy,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const OpenError = error{
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to open a new resource relative to it.
- AccessDenied,
- SymLinkLoop,
- ProcessFdQuotaExceeded,
- SystemFdQuotaExceeded,
- NoDevice,
- FileNotFound,
-
- /// The path exceeded `MAX_PATH_BYTES` bytes.
- NameTooLong,
-
- /// Insufficient kernel memory was available, or
- /// the named file is a FIFO and per-user hard limit on
- /// memory allocation for pipes has been reached.
- SystemResources,
-
- /// The file is too large to be opened. This error is unreachable
- /// for 64-bit targets, as well as when opening directories.
- FileTooBig,
-
- /// The path refers to directory but the `DIRECTORY` flag was not provided.
- IsDir,
-
- /// A new path cannot be created because the device has no room for the new file.
- /// This error is only reachable when the `CREAT` flag is provided.
- NoSpaceLeft,
-
- /// A component used as a directory in the path was not, in fact, a directory, or
- /// `DIRECTORY` was specified and the path was not a directory.
- NotDir,
-
- /// The path already exists and the `CREAT` and `EXCL` flags were provided.
- PathAlreadyExists,
- DeviceBusy,
-
- /// The underlying filesystem does not support file locks
- FileLocksNotSupported,
-
- /// Path contains characters that are disallowed by the underlying filesystem.
- BadPathName,
-
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
-
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
-
- /// On Windows, `\\server` or `\\server\share` was not found.
- NetworkNotFound,
-
- /// One of these three things:
- /// * pathname refers to an executable image which is currently being
- /// executed and write access was requested.
- /// * pathname refers to a file that is currently in use as a swap
- /// file, and the O_TRUNC flag was specified.
- /// * pathname refers to a file that is currently being read by the
- /// kernel (e.g., for module/firmware loading), and write access was
- /// requested.
- FileBusy,
-
- WouldBlock,
-} || UnexpectedError;
-
-/// Open and possibly create a file. Keeps trying if it gets interrupted.
-/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `file_path` should be encoded as valid UTF-8.
-/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
-/// See also `openZ`.
-pub fn open(file_path: []const u8, flags: O, perm: mode_t) OpenError!fd_t {
- if (builtin.os.tag == .windows) {
- @compileError("Windows does not support POSIX; use Windows-specific API or cross-platform std.fs API");
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return openat(AT.FDCWD, file_path, flags, perm);
- }
- const file_path_c = try toPosixPath(file_path);
- return openZ(&file_path_c, flags, perm);
-}
-
-/// Open and possibly create a file. Keeps trying if it gets interrupted.
-/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `file_path` should be encoded as valid UTF-8.
-/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
-/// See also `open`.
-pub fn openZ(file_path: [*:0]const u8, flags: O, perm: mode_t) OpenError!fd_t {
- if (builtin.os.tag == .windows) {
- @compileError("Windows does not support POSIX; use Windows-specific API or cross-platform std.fs API");
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return open(mem.sliceTo(file_path, 0), flags, perm);
- }
-
- const open_sym = if (lfs64_abi) system.open64 else system.open;
- while (true) {
- const rc = open_sym(file_path, flags, perm);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
-
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .FBIG => return error.FileTooBig,
- .OVERFLOW => return error.FileTooBig,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NODEV => return error.NoDevice,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .NOTDIR => return error.NotDir,
- .PERM => return error.AccessDenied,
- .EXIST => return error.PathAlreadyExists,
- .BUSY => return error.DeviceBusy,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-/// Open and possibly create a file. Keeps trying if it gets interrupted.
-/// `file_path` is relative to the open directory handle `dir_fd`.
-/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `file_path` should be encoded as valid UTF-8.
-/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
-/// See also `openatZ`.
-pub fn openat(dir_fd: fd_t, file_path: []const u8, flags: O, mode: mode_t) OpenError!fd_t {
- if (builtin.os.tag == .windows) {
- @compileError("Windows does not support POSIX; use Windows-specific API or cross-platform std.fs API");
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- // `mode` is ignored on WASI, which does not support unix-style file permissions
- const opts = try openOptionsFromFlagsWasi(flags);
- const fd = try openatWasi(
- dir_fd,
- file_path,
- opts.lookup_flags,
- opts.oflags,
- opts.fs_flags,
- opts.fs_rights_base,
- opts.fs_rights_inheriting,
- );
- errdefer close(fd);
-
- if (flags.write) {
- const info = try fstat_wasi(fd);
- if (info.filetype == .DIRECTORY)
- return error.IsDir;
- }
-
- return fd;
- }
- const file_path_c = try toPosixPath(file_path);
- return openatZ(dir_fd, &file_path_c, flags, mode);
-}
-
-pub const CommonOpenFlags = packed struct {
- ACCMODE: ACCMODE = .RDONLY,
- CREAT: bool = false,
- EXCL: bool = false,
- LARGEFILE: bool = false,
- DIRECTORY: bool = false,
- CLOEXEC: bool = false,
- NONBLOCK: bool = false,
-
- pub fn lower(cof: CommonOpenFlags) O {
- if (builtin.os.tag == .wasi) return .{
- .read = cof.ACCMODE != .WRONLY,
- .write = cof.ACCMODE != .RDONLY,
- .CREAT = cof.CREAT,
- .EXCL = cof.EXCL,
- .DIRECTORY = cof.DIRECTORY,
- .NONBLOCK = cof.NONBLOCK,
- };
- var result: O = .{
- .ACCMODE = cof.ACCMODE,
- .CREAT = cof.CREAT,
- .EXCL = cof.EXCL,
- .DIRECTORY = cof.DIRECTORY,
- .NONBLOCK = cof.NONBLOCK,
- .CLOEXEC = cof.CLOEXEC,
- };
- if (@hasField(O, "LARGEFILE")) result.LARGEFILE = cof.LARGEFILE;
- return result;
- }
-};
-
-/// A struct to contain all lookup/rights flags accepted by `wasi.path_open`
-const WasiOpenOptions = struct {
- oflags: wasi.oflags_t,
- lookup_flags: wasi.lookupflags_t,
- fs_rights_base: wasi.rights_t,
- fs_rights_inheriting: wasi.rights_t,
- fs_flags: wasi.fdflags_t,
-};
-
-/// Compute rights + flags corresponding to the provided POSIX access mode.
-fn openOptionsFromFlagsWasi(oflag: O) OpenError!WasiOpenOptions {
- const w = std.os.wasi;
-
- // Next, calculate the read/write rights to request, depending on the
- // provided POSIX access mode
- var rights: w.rights_t = .{};
- if (oflag.read) {
- rights.FD_READ = true;
- rights.FD_READDIR = true;
- }
- if (oflag.write) {
- rights.FD_DATASYNC = true;
- rights.FD_WRITE = true;
- rights.FD_ALLOCATE = true;
- rights.FD_FILESTAT_SET_SIZE = true;
- }
-
- // https://github.com/ziglang/zig/issues/18882
- const flag_bits: u32 = @bitCast(oflag);
- const oflags_int: u16 = @as(u12, @truncate(flag_bits >> 12));
- const fs_flags_int: u16 = @as(u12, @truncate(flag_bits));
-
- return .{
- // https://github.com/ziglang/zig/issues/18882
- .oflags = @bitCast(oflags_int),
- .lookup_flags = .{
- .SYMLINK_FOLLOW = !oflag.NOFOLLOW,
- },
- .fs_rights_base = rights,
- .fs_rights_inheriting = rights,
- // https://github.com/ziglang/zig/issues/18882
- .fs_flags = @bitCast(fs_flags_int),
- };
-}
-
-/// Open and possibly create a file in WASI.
-pub fn openatWasi(
- dir_fd: fd_t,
- file_path: []const u8,
- lookup_flags: wasi.lookupflags_t,
- oflags: wasi.oflags_t,
- fdflags: wasi.fdflags_t,
- base: wasi.rights_t,
- inheriting: wasi.rights_t,
-) OpenError!fd_t {
- while (true) {
- var fd: fd_t = undefined;
- switch (wasi.path_open(dir_fd, lookup_flags, file_path.ptr, file_path.len, oflags, base, inheriting, fdflags, &fd)) {
- .SUCCESS => return fd,
- .INTR => continue,
-
- .FAULT => unreachable,
- .INVAL => unreachable,
- .BADF => unreachable,
- .ACCES => return error.AccessDenied,
- .FBIG => return error.FileTooBig,
- .OVERFLOW => return error.FileTooBig,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NODEV => return error.NoDevice,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .NOTDIR => return error.NotDir,
- .PERM => return error.AccessDenied,
- .EXIST => return error.PathAlreadyExists,
- .BUSY => return error.DeviceBusy,
- .NOTCAPABLE => return error.AccessDenied,
- .ILSEQ => return error.InvalidUtf8,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-/// Open and possibly create a file. Keeps trying if it gets interrupted.
-/// `file_path` is relative to the open directory handle `dir_fd`.
-/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `file_path` should be encoded as valid UTF-8.
-/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
-/// See also `openat`.
-pub fn openatZ(dir_fd: fd_t, file_path: [*:0]const u8, flags: O, mode: mode_t) OpenError!fd_t {
- if (builtin.os.tag == .windows) {
- @compileError("Windows does not support POSIX; use Windows-specific API or cross-platform std.fs API");
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return openat(dir_fd, mem.sliceTo(file_path, 0), flags, mode);
- }
-
- const openat_sym = if (lfs64_abi) system.openat64 else system.openat;
- while (true) {
- const rc = openat_sym(dir_fd, file_path, flags, mode);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
-
- .FAULT => unreachable,
- .INVAL => unreachable,
- .BADF => unreachable,
- .ACCES => return error.AccessDenied,
- .FBIG => return error.FileTooBig,
- .OVERFLOW => return error.FileTooBig,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NODEV => return error.NoDevice,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .NOTDIR => return error.NotDir,
- .PERM => return error.AccessDenied,
- .EXIST => return error.PathAlreadyExists,
- .BUSY => return error.DeviceBusy,
- .OPNOTSUPP => return error.FileLocksNotSupported,
- .AGAIN => return error.WouldBlock,
- .TXTBSY => return error.FileBusy,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub fn dup(old_fd: fd_t) !fd_t {
- const rc = system.dup(old_fd);
- return switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .MFILE => error.ProcessFdQuotaExceeded,
- .BADF => unreachable, // invalid file descriptor
- else => |err| return unexpectedErrno(err),
- };
-}
-
-pub fn dup2(old_fd: fd_t, new_fd: fd_t) !void {
- while (true) {
- switch (errno(system.dup2(old_fd, new_fd))) {
- .SUCCESS => return,
- .BUSY, .INTR => continue,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .INVAL => unreachable, // invalid parameters passed to dup2
- .BADF => unreachable, // invalid file descriptor
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const ExecveError = error{
- SystemResources,
- AccessDenied,
- InvalidExe,
- FileSystem,
- IsDir,
- FileNotFound,
- NotDir,
- FileBusy,
- ProcessFdQuotaExceeded,
- SystemFdQuotaExceeded,
- NameTooLong,
-} || UnexpectedError;
-
-/// This function ignores PATH environment variable. See `execvpeZ` for that.
-pub fn execveZ(
- path: [*:0]const u8,
- child_argv: [*:null]const ?[*:0]const u8,
- envp: [*:null]const ?[*:0]const u8,
-) ExecveError {
- switch (errno(system.execve(path, child_argv, envp))) {
- .SUCCESS => unreachable,
- .FAULT => unreachable,
- .@"2BIG" => return error.SystemResources,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOMEM => return error.SystemResources,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .INVAL => return error.InvalidExe,
- .NOEXEC => return error.InvalidExe,
- .IO => return error.FileSystem,
- .LOOP => return error.FileSystem,
- .ISDIR => return error.IsDir,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .TXTBSY => return error.FileBusy,
- else => |err| switch (builtin.os.tag) {
- .macos, .ios, .tvos, .watchos => switch (err) {
- .BADEXEC => return error.InvalidExe,
- .BADARCH => return error.InvalidExe,
- else => return unexpectedErrno(err),
- },
- .linux => switch (err) {
- .LIBBAD => return error.InvalidExe,
- else => return unexpectedErrno(err),
- },
- else => return unexpectedErrno(err),
- },
- }
-}
-
-pub const Arg0Expand = enum {
- expand,
- no_expand,
-};
-
-/// Like `execvpeZ` except if `arg0_expand` is `.expand`, then `argv` is mutable,
-/// and `argv[0]` is expanded to be the same absolute path that is passed to the execve syscall.
-/// If this function returns with an error, `argv[0]` will be restored to the value it was when it was passed in.
-pub fn execvpeZ_expandArg0(
- comptime arg0_expand: Arg0Expand,
- file: [*:0]const u8,
- child_argv: switch (arg0_expand) {
- .expand => [*:null]?[*:0]const u8,
- .no_expand => [*:null]const ?[*:0]const u8,
- },
- envp: [*:null]const ?[*:0]const u8,
-) ExecveError {
- const file_slice = mem.sliceTo(file, 0);
- if (mem.indexOfScalar(u8, file_slice, '/') != null) return execveZ(file, child_argv, envp);
-
- const PATH = getenvZ("PATH") orelse "/usr/local/bin:/bin/:/usr/bin";
- // Use of MAX_PATH_BYTES here is valid as the path_buf will be passed
- // directly to the operating system in execveZ.
- var path_buf: [MAX_PATH_BYTES]u8 = undefined;
- var it = mem.tokenizeScalar(u8, PATH, ':');
- var seen_eacces = false;
- var err: ExecveError = error.FileNotFound;
-
- // In case of expanding arg0 we must put it back if we return with an error.
- const prev_arg0 = child_argv[0];
- defer switch (arg0_expand) {
- .expand => child_argv[0] = prev_arg0,
- .no_expand => {},
- };
-
- while (it.next()) |search_path| {
- const path_len = search_path.len + file_slice.len + 1;
- if (path_buf.len < path_len + 1) return error.NameTooLong;
- @memcpy(path_buf[0..search_path.len], search_path);
- path_buf[search_path.len] = '/';
- @memcpy(path_buf[search_path.len + 1 ..][0..file_slice.len], file_slice);
- path_buf[path_len] = 0;
- const full_path = path_buf[0..path_len :0].ptr;
- switch (arg0_expand) {
- .expand => child_argv[0] = full_path,
- .no_expand => {},
- }
- err = execveZ(full_path, child_argv, envp);
- switch (err) {
- error.AccessDenied => seen_eacces = true,
- error.FileNotFound, error.NotDir => {},
- else => |e| return e,
- }
- }
- if (seen_eacces) return error.AccessDenied;
- return err;
-}
-
-/// This function also uses the PATH environment variable to get the full path to the executable.
-/// If `file` is an absolute path, this is the same as `execveZ`.
-pub fn execvpeZ(
- file: [*:0]const u8,
- argv_ptr: [*:null]const ?[*:0]const u8,
- envp: [*:null]const ?[*:0]const u8,
-) ExecveError {
- return execvpeZ_expandArg0(.no_expand, file, argv_ptr, envp);
-}
-
-/// Get an environment variable.
-/// See also `getenvZ`.
-pub fn getenv(key: []const u8) ?[:0]const u8 {
- if (builtin.os.tag == .windows) {
- @compileError("std.os.getenv is unavailable for Windows because environment strings are in WTF-16 format. See std.process.getEnvVarOwned for a cross-platform API or std.os.getenvW for a Windows-specific API.");
- }
- if (builtin.link_libc) {
- var ptr = std.c.environ;
- while (ptr[0]) |line| : (ptr += 1) {
- var line_i: usize = 0;
- while (line[line_i] != 0 and line[line_i] != '=') : (line_i += 1) {}
- const this_key = line[0..line_i];
-
- if (!mem.eql(u8, this_key, key)) continue;
-
- return mem.sliceTo(line + line_i + 1, 0);
- }
- return null;
- }
- if (builtin.os.tag == .wasi) {
- @compileError("std.os.getenv is unavailable for WASI. See std.process.getEnvMap or std.process.getEnvVarOwned for a cross-platform API.");
- }
- // The simplified start logic doesn't populate environ.
- if (std.start.simplified_logic) return null;
- // TODO see https://github.com/ziglang/zig/issues/4524
- for (environ) |ptr| {
- var line_i: usize = 0;
- while (ptr[line_i] != 0 and ptr[line_i] != '=') : (line_i += 1) {}
- const this_key = ptr[0..line_i];
- if (!mem.eql(u8, key, this_key)) continue;
-
- return mem.sliceTo(ptr + line_i + 1, 0);
- }
- return null;
-}
-
-/// Get an environment variable with a null-terminated name.
-/// See also `getenv`.
-pub fn getenvZ(key: [*:0]const u8) ?[:0]const u8 {
- if (builtin.link_libc) {
- const value = system.getenv(key) orelse return null;
- return mem.sliceTo(value, 0);
- }
- if (builtin.os.tag == .windows) {
- @compileError("std.os.getenvZ is unavailable for Windows because environment string is in WTF-16 format. See std.process.getEnvVarOwned for cross-platform API or std.os.getenvW for Windows-specific API.");
- }
- return getenv(mem.sliceTo(key, 0));
-}
-
-/// Windows-only. Get an environment variable with a null-terminated, WTF-16 encoded name.
-/// See also `getenv`.
-/// This function performs a Unicode-aware case-insensitive lookup using RtlEqualUnicodeString.
-pub fn getenvW(key: [*:0]const u16) ?[:0]const u16 {
- if (builtin.os.tag != .windows) {
- @compileError("std.os.getenvW is a Windows-only API");
- }
- const key_slice = mem.sliceTo(key, 0);
- const ptr = windows.peb().ProcessParameters.Environment;
- var i: usize = 0;
- while (ptr[i] != 0) {
- const key_start = i;
-
- // There are some special environment variables that start with =,
- // so we need a special case to not treat = as a key/value separator
- // if it's the first character.
- // https://devblogs.microsoft.com/oldnewthing/20100506-00/?p=14133
- if (ptr[key_start] == '=') i += 1;
-
- while (ptr[i] != 0 and ptr[i] != '=') : (i += 1) {}
- const this_key = ptr[key_start..i];
-
- if (ptr[i] == '=') i += 1;
-
- const value_start = i;
- while (ptr[i] != 0) : (i += 1) {}
- const this_value = ptr[value_start..i :0];
-
- if (windows.eqlIgnoreCaseWTF16(key_slice, this_key)) {
- return this_value;
- }
-
- i += 1; // skip over null byte
- }
- return null;
-}
-
-pub const GetCwdError = error{
- NameTooLong,
- CurrentWorkingDirectoryUnlinked,
-} || UnexpectedError;
-
-/// The result is a slice of out_buffer, indexed from 0.
-pub fn getcwd(out_buffer: []u8) GetCwdError![]u8 {
- if (builtin.os.tag == .windows) {
- return windows.GetCurrentDirectory(out_buffer);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const path = ".";
- if (out_buffer.len < path.len) return error.NameTooLong;
- const result = out_buffer[0..path.len];
- @memcpy(result, path);
- return result;
- }
-
- const err: E = if (builtin.link_libc) err: {
- const c_err = if (std.c.getcwd(out_buffer.ptr, out_buffer.len)) |_| 0 else std.c._errno().*;
- break :err @enumFromInt(c_err);
- } else err: {
- break :err errno(system.getcwd(out_buffer.ptr, out_buffer.len));
- };
- switch (err) {
- .SUCCESS => return mem.sliceTo(out_buffer, 0),
- .FAULT => unreachable,
- .INVAL => unreachable,
- .NOENT => return error.CurrentWorkingDirectoryUnlinked,
- .RANGE => return error.NameTooLong,
- else => return unexpectedErrno(err),
- }
-}
-
-pub const SymLinkError = error{
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to create a new symbolic link relative to it.
- AccessDenied,
- DiskQuota,
- PathAlreadyExists,
- FileSystem,
- SymLinkLoop,
- FileNotFound,
- SystemResources,
- NoSpaceLeft,
- ReadOnlyFileSystem,
- NotDir,
- NameTooLong,
-
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
-
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
-
- BadPathName,
-} || UnexpectedError;
-
-/// Creates a symbolic link named `sym_link_path` which contains the string `target_path`.
-/// A symbolic link (also known as a soft link) may point to an existing file or to a nonexistent
-/// one; the latter case is known as a dangling link.
-/// On Windows, both paths should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, both paths should be encoded as valid UTF-8.
-/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
-/// If `sym_link_path` exists, it will not be overwritten.
-/// See also `symlinkZ.
-pub fn symlink(target_path: []const u8, sym_link_path: []const u8) SymLinkError!void {
- if (builtin.os.tag == .windows) {
- @compileError("symlink is not supported on Windows; use std.os.windows.CreateSymbolicLink instead");
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return symlinkat(target_path, wasi.AT.FDCWD, sym_link_path);
- }
- const target_path_c = try toPosixPath(target_path);
- const sym_link_path_c = try toPosixPath(sym_link_path);
- return symlinkZ(&target_path_c, &sym_link_path_c);
-}
-
-/// This is the same as `symlink` except the parameters are null-terminated pointers.
-/// See also `symlink`.
-pub fn symlinkZ(target_path: [*:0]const u8, sym_link_path: [*:0]const u8) SymLinkError!void {
- if (builtin.os.tag == .windows) {
- @compileError("symlink is not supported on Windows; use std.os.windows.CreateSymbolicLink instead");
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return symlinkatZ(target_path, fs.cwd().fd, sym_link_path);
- }
- switch (errno(system.symlink(target_path, sym_link_path))) {
- .SUCCESS => return,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .ROFS => return error.ReadOnlyFileSystem,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Similar to `symlink`, however, creates a symbolic link named `sym_link_path` which contains the string
-/// `target_path` **relative** to `newdirfd` directory handle.
-/// A symbolic link (also known as a soft link) may point to an existing file or to a nonexistent
-/// one; the latter case is known as a dangling link.
-/// On Windows, both paths should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, both paths should be encoded as valid UTF-8.
-/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
-/// If `sym_link_path` exists, it will not be overwritten.
-/// See also `symlinkatWasi`, `symlinkatZ` and `symlinkatW`.
-pub fn symlinkat(target_path: []const u8, newdirfd: fd_t, sym_link_path: []const u8) SymLinkError!void {
- if (builtin.os.tag == .windows) {
- @compileError("symlinkat is not supported on Windows; use std.os.windows.CreateSymbolicLink instead");
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return symlinkatWasi(target_path, newdirfd, sym_link_path);
- }
- const target_path_c = try toPosixPath(target_path);
- const sym_link_path_c = try toPosixPath(sym_link_path);
- return symlinkatZ(&target_path_c, newdirfd, &sym_link_path_c);
-}
-
-/// WASI-only. The same as `symlinkat` but targeting WASI.
-/// See also `symlinkat`.
-pub fn symlinkatWasi(target_path: []const u8, newdirfd: fd_t, sym_link_path: []const u8) SymLinkError!void {
- switch (wasi.path_symlink(target_path.ptr, target_path.len, newdirfd, sym_link_path.ptr, sym_link_path.len)) {
- .SUCCESS => {},
- .FAULT => unreachable,
- .INVAL => unreachable,
- .BADF => unreachable,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .ROFS => return error.ReadOnlyFileSystem,
- .NOTCAPABLE => return error.AccessDenied,
- .ILSEQ => return error.InvalidUtf8,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// The same as `symlinkat` except the parameters are null-terminated pointers.
-/// See also `symlinkat`.
-pub fn symlinkatZ(target_path: [*:0]const u8, newdirfd: fd_t, sym_link_path: [*:0]const u8) SymLinkError!void {
- if (builtin.os.tag == .windows) {
- @compileError("symlinkat is not supported on Windows; use std.os.windows.CreateSymbolicLink instead");
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return symlinkat(mem.sliceTo(target_path, 0), newdirfd, mem.sliceTo(sym_link_path, 0));
- }
- switch (errno(system.symlinkat(target_path, newdirfd, sym_link_path))) {
- .SUCCESS => return,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .ROFS => return error.ReadOnlyFileSystem,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const LinkError = UnexpectedError || error{
- AccessDenied,
- DiskQuota,
- PathAlreadyExists,
- FileSystem,
- SymLinkLoop,
- LinkQuotaExceeded,
- NameTooLong,
- FileNotFound,
- SystemResources,
- NoSpaceLeft,
- ReadOnlyFileSystem,
- NotSameFileSystem,
-
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
-};
-
-/// On WASI, both paths should be encoded as valid UTF-8.
-/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
-pub fn linkZ(oldpath: [*:0]const u8, newpath: [*:0]const u8, flags: i32) LinkError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return link(mem.sliceTo(oldpath, 0), mem.sliceTo(newpath, 0), flags);
- }
- switch (errno(system.link(oldpath, newpath, flags))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .FAULT => unreachable,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .PERM => return error.AccessDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- .XDEV => return error.NotSameFileSystem,
- .INVAL => unreachable,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// On WASI, both paths should be encoded as valid UTF-8.
-/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
-pub fn link(oldpath: []const u8, newpath: []const u8, flags: i32) LinkError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return linkat(wasi.AT.FDCWD, oldpath, wasi.AT.FDCWD, newpath, flags) catch |err| switch (err) {
- error.NotDir => unreachable, // link() does not support directories
- else => |e| return e,
- };
- }
- const old = try toPosixPath(oldpath);
- const new = try toPosixPath(newpath);
- return try linkZ(&old, &new, flags);
-}
-
-pub const LinkatError = LinkError || error{NotDir};
-
-/// On WASI, both paths should be encoded as valid UTF-8.
-/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
-pub fn linkatZ(
- olddir: fd_t,
- oldpath: [*:0]const u8,
- newdir: fd_t,
- newpath: [*:0]const u8,
- flags: i32,
-) LinkatError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return linkat(olddir, mem.sliceTo(oldpath, 0), newdir, mem.sliceTo(newpath, 0), flags);
- }
- switch (errno(system.linkat(olddir, oldpath, newdir, newpath, flags))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .FAULT => unreachable,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .NOTDIR => return error.NotDir,
- .PERM => return error.AccessDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- .XDEV => return error.NotSameFileSystem,
- .INVAL => unreachable,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// On WASI, both paths should be encoded as valid UTF-8.
-/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
-pub fn linkat(
- olddir: fd_t,
- oldpath: []const u8,
- newdir: fd_t,
- newpath: []const u8,
- flags: i32,
-) LinkatError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const old: RelativePathWasi = .{ .dir_fd = olddir, .relative_path = oldpath };
- const new: RelativePathWasi = .{ .dir_fd = newdir, .relative_path = newpath };
- const old_flags: wasi.lookupflags_t = .{
- .SYMLINK_FOLLOW = (flags & AT.SYMLINK_FOLLOW) != 0,
- };
- switch (wasi.path_link(
- old.dir_fd,
- old_flags,
- old.relative_path.ptr,
- old.relative_path.len,
- new.dir_fd,
- new.relative_path.ptr,
- new.relative_path.len,
- )) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .FAULT => unreachable,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .NOTDIR => return error.NotDir,
- .PERM => return error.AccessDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- .XDEV => return error.NotSameFileSystem,
- .INVAL => unreachable,
- .ILSEQ => return error.InvalidUtf8,
- else => |err| return unexpectedErrno(err),
- }
- }
- const old = try toPosixPath(oldpath);
- const new = try toPosixPath(newpath);
- return try linkatZ(olddir, &old, newdir, &new, flags);
-}
-
-pub const UnlinkError = error{
- FileNotFound,
-
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to unlink a resource by path relative to it.
- AccessDenied,
- FileBusy,
- FileSystem,
- IsDir,
- SymLinkLoop,
- NameTooLong,
- NotDir,
- SystemResources,
- ReadOnlyFileSystem,
-
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
-
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
-
- /// On Windows, file paths cannot contain these characters:
- /// '/', '*', '?', '"', '<', '>', '|'
- BadPathName,
-
- /// On Windows, `\\server` or `\\server\share` was not found.
- NetworkNotFound,
-} || UnexpectedError;
-
-/// Delete a name and possibly the file it refers to.
-/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `file_path` should be encoded as valid UTF-8.
-/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
-/// See also `unlinkZ`.
-pub fn unlink(file_path: []const u8) UnlinkError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return unlinkat(wasi.AT.FDCWD, file_path, 0) catch |err| switch (err) {
- error.DirNotEmpty => unreachable, // only occurs when targeting directories
- else => |e| return e,
- };
- } else if (builtin.os.tag == .windows) {
- const file_path_w = try windows.sliceToPrefixedFileW(null, file_path);
- return unlinkW(file_path_w.span());
- } else {
- const file_path_c = try toPosixPath(file_path);
- return unlinkZ(&file_path_c);
- }
-}
-
-/// Same as `unlink` except the parameter is null terminated.
-pub fn unlinkZ(file_path: [*:0]const u8) UnlinkError!void {
- if (builtin.os.tag == .windows) {
- const file_path_w = try windows.cStrToPrefixedFileW(null, file_path);
- return unlinkW(file_path_w.span());
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return unlink(mem.sliceTo(file_path, 0));
- }
- switch (errno(system.unlink(file_path))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .BUSY => return error.FileBusy,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .IO => return error.FileSystem,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .ROFS => return error.ReadOnlyFileSystem,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Windows-only. Same as `unlink` except the parameter is null-terminated, WTF16 LE encoded.
-pub fn unlinkW(file_path_w: []const u16) UnlinkError!void {
- windows.DeleteFile(file_path_w, .{ .dir = std.fs.cwd().fd }) catch |err| switch (err) {
- error.DirNotEmpty => unreachable, // we're not passing .remove_dir = true
- else => |e| return e,
- };
-}
-
-pub const UnlinkatError = UnlinkError || error{
- /// When passing `AT.REMOVEDIR`, this error occurs when the named directory is not empty.
- DirNotEmpty,
-};
-
-/// Delete a file name and possibly the file it refers to, based on an open directory handle.
-/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `file_path` should be encoded as valid UTF-8.
-/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
-/// Asserts that the path parameter has no null bytes.
-pub fn unlinkat(dirfd: fd_t, file_path: []const u8, flags: u32) UnlinkatError!void {
- if (builtin.os.tag == .windows) {
- const file_path_w = try windows.sliceToPrefixedFileW(dirfd, file_path);
- return unlinkatW(dirfd, file_path_w.span(), flags);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return unlinkatWasi(dirfd, file_path, flags);
- } else {
- const file_path_c = try toPosixPath(file_path);
- return unlinkatZ(dirfd, &file_path_c, flags);
- }
-}
-
-/// WASI-only. Same as `unlinkat` but targeting WASI.
-/// See also `unlinkat`.
-pub fn unlinkatWasi(dirfd: fd_t, file_path: []const u8, flags: u32) UnlinkatError!void {
- const remove_dir = (flags & AT.REMOVEDIR) != 0;
- const res = if (remove_dir)
- wasi.path_remove_directory(dirfd, file_path.ptr, file_path.len)
- else
- wasi.path_unlink_file(dirfd, file_path.ptr, file_path.len);
- switch (res) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .BUSY => return error.FileBusy,
- .FAULT => unreachable,
- .IO => return error.FileSystem,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .ROFS => return error.ReadOnlyFileSystem,
- .NOTEMPTY => return error.DirNotEmpty,
- .NOTCAPABLE => return error.AccessDenied,
- .ILSEQ => return error.InvalidUtf8,
-
- .INVAL => unreachable, // invalid flags, or pathname has . as last component
- .BADF => unreachable, // always a race condition
-
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Same as `unlinkat` but `file_path` is a null-terminated string.
-pub fn unlinkatZ(dirfd: fd_t, file_path_c: [*:0]const u8, flags: u32) UnlinkatError!void {
- if (builtin.os.tag == .windows) {
- const file_path_w = try windows.cStrToPrefixedFileW(dirfd, file_path_c);
- return unlinkatW(dirfd, file_path_w.span(), flags);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return unlinkat(dirfd, mem.sliceTo(file_path_c, 0), flags);
- }
- switch (errno(system.unlinkat(dirfd, file_path_c, flags))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .BUSY => return error.FileBusy,
- .FAULT => unreachable,
- .IO => return error.FileSystem,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .ROFS => return error.ReadOnlyFileSystem,
- .EXIST => return error.DirNotEmpty,
- .NOTEMPTY => return error.DirNotEmpty,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
-
- .INVAL => unreachable, // invalid flags, or pathname has . as last component
- .BADF => unreachable, // always a race condition
-
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Same as `unlinkat` but `sub_path_w` is WTF16LE, NT prefixed. Windows only.
-pub fn unlinkatW(dirfd: fd_t, sub_path_w: []const u16, flags: u32) UnlinkatError!void {
- const remove_dir = (flags & AT.REMOVEDIR) != 0;
- return windows.DeleteFile(sub_path_w, .{ .dir = dirfd, .remove_dir = remove_dir });
-}
-
-pub const RenameError = error{
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to rename a resource by path relative to it.
- ///
- /// On Windows, this error may be returned instead of PathAlreadyExists when
- /// renaming a directory over an existing directory.
- AccessDenied,
- FileBusy,
- DiskQuota,
- IsDir,
- SymLinkLoop,
- LinkQuotaExceeded,
- NameTooLong,
- FileNotFound,
- NotDir,
- SystemResources,
- NoSpaceLeft,
- PathAlreadyExists,
- ReadOnlyFileSystem,
- RenameAcrossMountPoints,
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
- BadPathName,
- NoDevice,
- SharingViolation,
- PipeBusy,
- /// On Windows, `\\server` or `\\server\share` was not found.
- NetworkNotFound,
- /// On Windows, antivirus software is enabled by default. It can be
- /// disabled, but Windows Update sometimes ignores the user's preference
- /// and re-enables it. When enabled, antivirus software on Windows
- /// intercepts file system operations and makes them significantly slower
- /// in addition to possibly failing with this error code.
- AntivirusInterference,
-} || UnexpectedError;
-
-/// Change the name or location of a file.
-/// On Windows, both paths should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, both paths should be encoded as valid UTF-8.
-/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
-pub fn rename(old_path: []const u8, new_path: []const u8) RenameError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return renameat(wasi.AT.FDCWD, old_path, wasi.AT.FDCWD, new_path);
- } else if (builtin.os.tag == .windows) {
- const old_path_w = try windows.sliceToPrefixedFileW(null, old_path);
- const new_path_w = try windows.sliceToPrefixedFileW(null, new_path);
- return renameW(old_path_w.span().ptr, new_path_w.span().ptr);
- } else {
- const old_path_c = try toPosixPath(old_path);
- const new_path_c = try toPosixPath(new_path);
- return renameZ(&old_path_c, &new_path_c);
- }
-}
-
-/// Same as `rename` except the parameters are null-terminated.
-pub fn renameZ(old_path: [*:0]const u8, new_path: [*:0]const u8) RenameError!void {
- if (builtin.os.tag == .windows) {
- const old_path_w = try windows.cStrToPrefixedFileW(null, old_path);
- const new_path_w = try windows.cStrToPrefixedFileW(null, new_path);
- return renameW(old_path_w.span().ptr, new_path_w.span().ptr);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return rename(mem.sliceTo(old_path, 0), mem.sliceTo(new_path, 0));
- }
- switch (errno(system.rename(old_path, new_path))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .BUSY => return error.FileBusy,
- .DQUOT => return error.DiskQuota,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .EXIST => return error.PathAlreadyExists,
- .NOTEMPTY => return error.PathAlreadyExists,
- .ROFS => return error.ReadOnlyFileSystem,
- .XDEV => return error.RenameAcrossMountPoints,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Same as `rename` except the parameters are null-terminated and WTF16LE encoded.
-/// Assumes target is Windows.
-pub fn renameW(old_path: [*:0]const u16, new_path: [*:0]const u16) RenameError!void {
- const flags = windows.MOVEFILE_REPLACE_EXISTING | windows.MOVEFILE_WRITE_THROUGH;
- return windows.MoveFileExW(old_path, new_path, flags);
-}
-
-/// Change the name or location of a file based on an open directory handle.
-/// On Windows, both paths should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, both paths should be encoded as valid UTF-8.
-/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
-pub fn renameat(
- old_dir_fd: fd_t,
- old_path: []const u8,
- new_dir_fd: fd_t,
- new_path: []const u8,
-) RenameError!void {
- if (builtin.os.tag == .windows) {
- const old_path_w = try windows.sliceToPrefixedFileW(old_dir_fd, old_path);
- const new_path_w = try windows.sliceToPrefixedFileW(new_dir_fd, new_path);
- return renameatW(old_dir_fd, old_path_w.span(), new_dir_fd, new_path_w.span(), windows.TRUE);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const old: RelativePathWasi = .{ .dir_fd = old_dir_fd, .relative_path = old_path };
- const new: RelativePathWasi = .{ .dir_fd = new_dir_fd, .relative_path = new_path };
- return renameatWasi(old, new);
- } else {
- const old_path_c = try toPosixPath(old_path);
- const new_path_c = try toPosixPath(new_path);
- return renameatZ(old_dir_fd, &old_path_c, new_dir_fd, &new_path_c);
- }
-}
-
-/// WASI-only. Same as `renameat` expect targeting WASI.
-/// See also `renameat`.
-pub fn renameatWasi(old: RelativePathWasi, new: RelativePathWasi) RenameError!void {
- switch (wasi.path_rename(old.dir_fd, old.relative_path.ptr, old.relative_path.len, new.dir_fd, new.relative_path.ptr, new.relative_path.len)) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .BUSY => return error.FileBusy,
- .DQUOT => return error.DiskQuota,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .EXIST => return error.PathAlreadyExists,
- .NOTEMPTY => return error.PathAlreadyExists,
- .ROFS => return error.ReadOnlyFileSystem,
- .XDEV => return error.RenameAcrossMountPoints,
- .NOTCAPABLE => return error.AccessDenied,
- .ILSEQ => return error.InvalidUtf8,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Same as `renameat` except the parameters are null-terminated.
-pub fn renameatZ(
- old_dir_fd: fd_t,
- old_path: [*:0]const u8,
- new_dir_fd: fd_t,
- new_path: [*:0]const u8,
-) RenameError!void {
- if (builtin.os.tag == .windows) {
- const old_path_w = try windows.cStrToPrefixedFileW(old_dir_fd, old_path);
- const new_path_w = try windows.cStrToPrefixedFileW(new_dir_fd, new_path);
- return renameatW(old_dir_fd, old_path_w.span(), new_dir_fd, new_path_w.span(), windows.TRUE);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return renameat(old_dir_fd, mem.sliceTo(old_path, 0), new_dir_fd, mem.sliceTo(new_path, 0));
- }
-
- switch (errno(system.renameat(old_dir_fd, old_path, new_dir_fd, new_path))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .BUSY => return error.FileBusy,
- .DQUOT => return error.DiskQuota,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ISDIR => return error.IsDir,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .EXIST => return error.PathAlreadyExists,
- .NOTEMPTY => return error.PathAlreadyExists,
- .ROFS => return error.ReadOnlyFileSystem,
- .XDEV => return error.RenameAcrossMountPoints,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Same as `renameat` but Windows-only and the path parameters are
-/// [WTF-16](https://simonsapin.github.io/wtf-8/#potentially-ill-formed-utf-16) encoded.
-pub fn renameatW(
- old_dir_fd: fd_t,
- old_path_w: []const u16,
- new_dir_fd: fd_t,
- new_path_w: []const u16,
- ReplaceIfExists: windows.BOOLEAN,
-) RenameError!void {
- const src_fd = windows.OpenFile(old_path_w, .{
- .dir = old_dir_fd,
- .access_mask = windows.SYNCHRONIZE | windows.GENERIC_WRITE | windows.DELETE,
- .creation = windows.FILE_OPEN,
- .filter = .any, // This function is supposed to rename both files and directories.
- .follow_symlinks = false,
- }) catch |err| switch (err) {
- error.WouldBlock => unreachable, // Not possible without `.share_access_nonblocking = true`.
- else => |e| return e,
- };
- defer windows.CloseHandle(src_fd);
-
- var need_fallback = true;
- var rc: windows.NTSTATUS = undefined;
- // FILE_RENAME_INFORMATION_EX and FILE_RENAME_POSIX_SEMANTICS require >= win10_rs1,
- // but FILE_RENAME_IGNORE_READONLY_ATTRIBUTE requires >= win10_rs5. We check >= rs5 here
- // so that we only use POSIX_SEMANTICS when we know IGNORE_READONLY_ATTRIBUTE will also be
- // supported in order to avoid either (1) using a redundant call that we can know in advance will return
- // STATUS_NOT_SUPPORTED or (2) only setting IGNORE_READONLY_ATTRIBUTE when >= rs5
- // and therefore having different behavior when the Windows version is >= rs1 but < rs5.
- if (builtin.target.os.isAtLeast(.windows, .win10_rs5) orelse false) {
- const struct_buf_len = @sizeOf(windows.FILE_RENAME_INFORMATION_EX) + (MAX_PATH_BYTES - 1);
- var rename_info_buf: [struct_buf_len]u8 align(@alignOf(windows.FILE_RENAME_INFORMATION_EX)) = undefined;
- const struct_len = @sizeOf(windows.FILE_RENAME_INFORMATION_EX) - 1 + new_path_w.len * 2;
- if (struct_len > struct_buf_len) return error.NameTooLong;
-
- const rename_info: *windows.FILE_RENAME_INFORMATION_EX = @ptrCast(&rename_info_buf);
- var io_status_block: windows.IO_STATUS_BLOCK = undefined;
-
- var flags: windows.ULONG = windows.FILE_RENAME_POSIX_SEMANTICS | windows.FILE_RENAME_IGNORE_READONLY_ATTRIBUTE;
- if (ReplaceIfExists == windows.TRUE) flags |= windows.FILE_RENAME_REPLACE_IF_EXISTS;
- rename_info.* = .{
- .Flags = flags,
- .RootDirectory = if (std.fs.path.isAbsoluteWindowsWTF16(new_path_w)) null else new_dir_fd,
- .FileNameLength = @intCast(new_path_w.len * 2), // already checked error.NameTooLong
- .FileName = undefined,
- };
- @memcpy((&rename_info.FileName).ptr, new_path_w);
- rc = windows.ntdll.NtSetInformationFile(
- src_fd,
- &io_status_block,
- rename_info,
- @intCast(struct_len), // already checked for error.NameTooLong
- .FileRenameInformationEx,
- );
- switch (rc) {
- .SUCCESS => return,
- // INVALID_PARAMETER here means that the filesystem does not support FileRenameInformationEx
- .INVALID_PARAMETER => {},
- .DIRECTORY_NOT_EMPTY => return error.PathAlreadyExists,
- .FILE_IS_A_DIRECTORY => return error.IsDir,
- .NOT_A_DIRECTORY => return error.NotDir,
- // For all other statuses, fall down to the switch below to handle them.
- else => need_fallback = false,
- }
- }
-
- if (need_fallback) {
- const struct_buf_len = @sizeOf(windows.FILE_RENAME_INFORMATION) + (MAX_PATH_BYTES - 1);
- var rename_info_buf: [struct_buf_len]u8 align(@alignOf(windows.FILE_RENAME_INFORMATION)) = undefined;
- const struct_len = @sizeOf(windows.FILE_RENAME_INFORMATION) - 1 + new_path_w.len * 2;
- if (struct_len > struct_buf_len) return error.NameTooLong;
-
- const rename_info: *windows.FILE_RENAME_INFORMATION = @ptrCast(&rename_info_buf);
- var io_status_block: windows.IO_STATUS_BLOCK = undefined;
-
- rename_info.* = .{
- .Flags = ReplaceIfExists,
- .RootDirectory = if (std.fs.path.isAbsoluteWindowsWTF16(new_path_w)) null else new_dir_fd,
- .FileNameLength = @intCast(new_path_w.len * 2), // already checked error.NameTooLong
- .FileName = undefined,
- };
- @memcpy((&rename_info.FileName).ptr, new_path_w);
-
- rc =
- windows.ntdll.NtSetInformationFile(
- src_fd,
- &io_status_block,
- rename_info,
- @intCast(struct_len), // already checked for error.NameTooLong
- .FileRenameInformation,
- );
- }
-
- switch (rc) {
- .SUCCESS => {},
- .INVALID_HANDLE => unreachable,
- .INVALID_PARAMETER => unreachable,
- .OBJECT_PATH_SYNTAX_BAD => unreachable,
- .ACCESS_DENIED => return error.AccessDenied,
- .OBJECT_NAME_NOT_FOUND => return error.FileNotFound,
- .OBJECT_PATH_NOT_FOUND => return error.FileNotFound,
- .NOT_SAME_DEVICE => return error.RenameAcrossMountPoints,
- .OBJECT_NAME_COLLISION => return error.PathAlreadyExists,
- else => return windows.unexpectedStatus(rc),
- }
-}
-
-/// On Windows, `sub_dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `sub_dir_path` should be encoded as valid UTF-8.
-/// On other platforms, `sub_dir_path` is an opaque sequence of bytes with no particular encoding.
-pub fn mkdirat(dir_fd: fd_t, sub_dir_path: []const u8, mode: u32) MakeDirError!void {
- if (builtin.os.tag == .windows) {
- const sub_dir_path_w = try windows.sliceToPrefixedFileW(dir_fd, sub_dir_path);
- return mkdiratW(dir_fd, sub_dir_path_w.span(), mode);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return mkdiratWasi(dir_fd, sub_dir_path, mode);
- } else {
- const sub_dir_path_c = try toPosixPath(sub_dir_path);
- return mkdiratZ(dir_fd, &sub_dir_path_c, mode);
- }
-}
-
-pub fn mkdiratWasi(dir_fd: fd_t, sub_dir_path: []const u8, mode: u32) MakeDirError!void {
- _ = mode;
- switch (wasi.path_create_directory(dir_fd, sub_dir_path.ptr, sub_dir_path.len)) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .BADF => unreachable,
- .PERM => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .FAULT => unreachable,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .NOTDIR => return error.NotDir,
- .ROFS => return error.ReadOnlyFileSystem,
- .NOTCAPABLE => return error.AccessDenied,
- .ILSEQ => return error.InvalidUtf8,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Same as `mkdirat` except the parameters are null-terminated.
-pub fn mkdiratZ(dir_fd: fd_t, sub_dir_path: [*:0]const u8, mode: u32) MakeDirError!void {
- if (builtin.os.tag == .windows) {
- const sub_dir_path_w = try windows.cStrToPrefixedFileW(dir_fd, sub_dir_path);
- return mkdiratW(dir_fd, sub_dir_path_w.span(), mode);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return mkdirat(dir_fd, mem.sliceTo(sub_dir_path, 0), mode);
- }
- switch (errno(system.mkdirat(dir_fd, sub_dir_path, mode))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .BADF => unreachable,
- .PERM => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .FAULT => unreachable,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .NOTDIR => return error.NotDir,
- .ROFS => return error.ReadOnlyFileSystem,
- // dragonfly: when dir_fd is unlinked from filesystem
- .NOTCONN => return error.FileNotFound,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Windows-only. Same as `mkdirat` except the parameter WTF16 LE encoded.
-pub fn mkdiratW(dir_fd: fd_t, sub_path_w: []const u16, mode: u32) MakeDirError!void {
- _ = mode;
- const sub_dir_handle = windows.OpenFile(sub_path_w, .{
- .dir = dir_fd,
- .access_mask = windows.GENERIC_READ | windows.SYNCHRONIZE,
- .creation = windows.FILE_CREATE,
- .filter = .dir_only,
- }) catch |err| switch (err) {
- error.IsDir => return error.Unexpected,
- error.PipeBusy => return error.Unexpected,
- error.WouldBlock => return error.Unexpected,
- error.AntivirusInterference => return error.Unexpected,
- else => |e| return e,
- };
- windows.CloseHandle(sub_dir_handle);
-}
-
-pub const MakeDirError = error{
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to create a new directory relative to it.
- AccessDenied,
- DiskQuota,
- PathAlreadyExists,
- SymLinkLoop,
- LinkQuotaExceeded,
- NameTooLong,
- FileNotFound,
- SystemResources,
- NoSpaceLeft,
- NotDir,
- ReadOnlyFileSystem,
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
- BadPathName,
- NoDevice,
- /// On Windows, `\\server` or `\\server\share` was not found.
- NetworkNotFound,
-} || UnexpectedError;
-
-/// Create a directory.
-/// `mode` is ignored on Windows and WASI.
-/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `dir_path` should be encoded as valid UTF-8.
-/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
-pub fn mkdir(dir_path: []const u8, mode: u32) MakeDirError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return mkdirat(wasi.AT.FDCWD, dir_path, mode);
- } else if (builtin.os.tag == .windows) {
- const dir_path_w = try windows.sliceToPrefixedFileW(null, dir_path);
- return mkdirW(dir_path_w.span(), mode);
- } else {
- const dir_path_c = try toPosixPath(dir_path);
- return mkdirZ(&dir_path_c, mode);
- }
-}
-
-/// Same as `mkdir` but the parameter is null-terminated.
-/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `dir_path` should be encoded as valid UTF-8.
-/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
-pub fn mkdirZ(dir_path: [*:0]const u8, mode: u32) MakeDirError!void {
- if (builtin.os.tag == .windows) {
- const dir_path_w = try windows.cStrToPrefixedFileW(null, dir_path);
- return mkdirW(dir_path_w.span(), mode);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return mkdir(mem.sliceTo(dir_path, 0), mode);
- }
- switch (errno(system.mkdir(dir_path, mode))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .DQUOT => return error.DiskQuota,
- .EXIST => return error.PathAlreadyExists,
- .FAULT => unreachable,
- .LOOP => return error.SymLinkLoop,
- .MLINK => return error.LinkQuotaExceeded,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.NoSpaceLeft,
- .NOTDIR => return error.NotDir,
- .ROFS => return error.ReadOnlyFileSystem,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Windows-only. Same as `mkdir` but the parameters is WTF16LE encoded.
-pub fn mkdirW(dir_path_w: []const u16, mode: u32) MakeDirError!void {
- _ = mode;
- const sub_dir_handle = windows.OpenFile(dir_path_w, .{
- .dir = std.fs.cwd().fd,
- .access_mask = windows.GENERIC_READ | windows.SYNCHRONIZE,
- .creation = windows.FILE_CREATE,
- .filter = .dir_only,
- }) catch |err| switch (err) {
- error.IsDir => return error.Unexpected,
- error.PipeBusy => return error.Unexpected,
- error.WouldBlock => return error.Unexpected,
- error.AntivirusInterference => return error.Unexpected,
- else => |e| return e,
- };
- windows.CloseHandle(sub_dir_handle);
-}
-
-pub const DeleteDirError = error{
- AccessDenied,
- FileBusy,
- SymLinkLoop,
- NameTooLong,
- FileNotFound,
- SystemResources,
- NotDir,
- DirNotEmpty,
- ReadOnlyFileSystem,
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
- BadPathName,
- /// On Windows, `\\server` or `\\server\share` was not found.
- NetworkNotFound,
-} || UnexpectedError;
-
-/// Deletes an empty directory.
-/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `dir_path` should be encoded as valid UTF-8.
-/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
-pub fn rmdir(dir_path: []const u8) DeleteDirError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return unlinkat(wasi.AT.FDCWD, dir_path, AT.REMOVEDIR) catch |err| switch (err) {
- error.FileSystem => unreachable, // only occurs when targeting files
- error.IsDir => unreachable, // only occurs when targeting files
- else => |e| return e,
- };
- } else if (builtin.os.tag == .windows) {
- const dir_path_w = try windows.sliceToPrefixedFileW(null, dir_path);
- return rmdirW(dir_path_w.span());
- } else {
- const dir_path_c = try toPosixPath(dir_path);
- return rmdirZ(&dir_path_c);
- }
-}
-
-/// Same as `rmdir` except the parameter is null-terminated.
-/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `dir_path` should be encoded as valid UTF-8.
-/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
-pub fn rmdirZ(dir_path: [*:0]const u8) DeleteDirError!void {
- if (builtin.os.tag == .windows) {
- const dir_path_w = try windows.cStrToPrefixedFileW(null, dir_path);
- return rmdirW(dir_path_w.span());
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return rmdir(mem.sliceTo(dir_path, 0));
- }
- switch (errno(system.rmdir(dir_path))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .BUSY => return error.FileBusy,
- .FAULT => unreachable,
- .INVAL => return error.BadPathName,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.NotDir,
- .EXIST => return error.DirNotEmpty,
- .NOTEMPTY => return error.DirNotEmpty,
- .ROFS => return error.ReadOnlyFileSystem,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Windows-only. Same as `rmdir` except the parameter is WTF-16 LE encoded.
-pub fn rmdirW(dir_path_w: []const u16) DeleteDirError!void {
- return windows.DeleteFile(dir_path_w, .{ .dir = std.fs.cwd().fd, .remove_dir = true }) catch |err| switch (err) {
- error.IsDir => unreachable,
- else => |e| return e,
- };
-}
-
-pub const ChangeCurDirError = error{
- AccessDenied,
- FileSystem,
- SymLinkLoop,
- NameTooLong,
- FileNotFound,
- SystemResources,
- NotDir,
- BadPathName,
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
-} || UnexpectedError;
-
-/// Changes the current working directory of the calling process.
-/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `dir_path` should be encoded as valid UTF-8.
-/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
-pub fn chdir(dir_path: []const u8) ChangeCurDirError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- @compileError("WASI does not support os.chdir");
- } else if (builtin.os.tag == .windows) {
- var wtf16_dir_path: [windows.PATH_MAX_WIDE]u16 = undefined;
- const len = try std.unicode.wtf8ToWtf16Le(wtf16_dir_path[0..], dir_path);
- if (len > wtf16_dir_path.len) return error.NameTooLong;
- return chdirW(wtf16_dir_path[0..len]);
- } else {
- const dir_path_c = try toPosixPath(dir_path);
- return chdirZ(&dir_path_c);
- }
-}
-
-/// Same as `chdir` except the parameter is null-terminated.
-/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `dir_path` should be encoded as valid UTF-8.
-/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
-pub fn chdirZ(dir_path: [*:0]const u8) ChangeCurDirError!void {
- if (builtin.os.tag == .windows) {
- var wtf16_dir_path: [windows.PATH_MAX_WIDE]u16 = undefined;
- const len = try std.unicode.wtf8ToWtf16Le(wtf16_dir_path[0..], mem.span(dir_path));
- if (len > wtf16_dir_path.len) return error.NameTooLong;
- return chdirW(wtf16_dir_path[0..len]);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return chdir(mem.span(dir_path));
- }
- switch (errno(system.chdir(dir_path))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .FAULT => unreachable,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.NotDir,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Windows-only. Same as `chdir` except the parameter is WTF16 LE encoded.
-pub fn chdirW(dir_path: []const u16) ChangeCurDirError!void {
- windows.SetCurrentDirectory(dir_path) catch |err| switch (err) {
- error.NoDevice => return error.FileSystem,
- else => |e| return e,
- };
-}
-
-pub const FchdirError = error{
- AccessDenied,
- NotDir,
- FileSystem,
-} || UnexpectedError;
-
-pub fn fchdir(dirfd: fd_t) FchdirError!void {
- if (dirfd == AT.FDCWD) return;
- while (true) {
- switch (errno(system.fchdir(dirfd))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .BADF => unreachable,
- .NOTDIR => return error.NotDir,
- .INTR => continue,
- .IO => return error.FileSystem,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const ReadLinkError = error{
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to read value of a symbolic link relative to it.
- AccessDenied,
- FileSystem,
- SymLinkLoop,
- NameTooLong,
- FileNotFound,
- SystemResources,
- NotLink,
- NotDir,
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
- BadPathName,
- /// Windows-only. This error may occur if the opened reparse point is
- /// of unsupported type.
- UnsupportedReparsePointType,
- /// On Windows, `\\server` or `\\server\share` was not found.
- NetworkNotFound,
-} || UnexpectedError;
-
-/// Read value of a symbolic link.
-/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `file_path` should be encoded as valid UTF-8.
-/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
-/// The return value is a slice of `out_buffer` from index 0.
-/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, the result is encoded as UTF-8.
-/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
-pub fn readlink(file_path: []const u8, out_buffer: []u8) ReadLinkError![]u8 {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return readlinkat(wasi.AT.FDCWD, file_path, out_buffer);
- } else if (builtin.os.tag == .windows) {
- const file_path_w = try windows.sliceToPrefixedFileW(null, file_path);
- return readlinkW(file_path_w.span(), out_buffer);
- } else {
- const file_path_c = try toPosixPath(file_path);
- return readlinkZ(&file_path_c, out_buffer);
- }
-}
-
-/// Windows-only. Same as `readlink` except `file_path` is WTF16 LE encoded.
-/// The result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// See also `readlinkZ`.
-pub fn readlinkW(file_path: []const u16, out_buffer: []u8) ReadLinkError![]u8 {
- return windows.ReadLink(std.fs.cwd().fd, file_path, out_buffer);
-}
-
-/// Same as `readlink` except `file_path` is null-terminated.
-pub fn readlinkZ(file_path: [*:0]const u8, out_buffer: []u8) ReadLinkError![]u8 {
- if (builtin.os.tag == .windows) {
- const file_path_w = try windows.cStrToPrefixedFileW(null, file_path);
- return readlinkW(file_path_w.span(), out_buffer);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return readlink(mem.sliceTo(file_path, 0), out_buffer);
- }
- const rc = system.readlink(file_path, out_buffer.ptr, out_buffer.len);
- switch (errno(rc)) {
- .SUCCESS => return out_buffer[0..@bitCast(rc)],
- .ACCES => return error.AccessDenied,
- .FAULT => unreachable,
- .INVAL => return error.NotLink,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.NotDir,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Similar to `readlink` except reads value of a symbolink link **relative** to `dirfd` directory handle.
-/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `file_path` should be encoded as valid UTF-8.
-/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
-/// The return value is a slice of `out_buffer` from index 0.
-/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, the result is encoded as UTF-8.
-/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
-/// See also `readlinkatWasi`, `realinkatZ` and `realinkatW`.
-pub fn readlinkat(dirfd: fd_t, file_path: []const u8, out_buffer: []u8) ReadLinkError![]u8 {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return readlinkatWasi(dirfd, file_path, out_buffer);
- }
- if (builtin.os.tag == .windows) {
- const file_path_w = try windows.sliceToPrefixedFileW(dirfd, file_path);
- return readlinkatW(dirfd, file_path_w.span(), out_buffer);
- }
- const file_path_c = try toPosixPath(file_path);
- return readlinkatZ(dirfd, &file_path_c, out_buffer);
-}
-
-/// WASI-only. Same as `readlinkat` but targets WASI.
-/// See also `readlinkat`.
-pub fn readlinkatWasi(dirfd: fd_t, file_path: []const u8, out_buffer: []u8) ReadLinkError![]u8 {
- var bufused: usize = undefined;
- switch (wasi.path_readlink(dirfd, file_path.ptr, file_path.len, out_buffer.ptr, out_buffer.len, &bufused)) {
- .SUCCESS => return out_buffer[0..bufused],
- .ACCES => return error.AccessDenied,
- .FAULT => unreachable,
- .INVAL => return error.NotLink,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.NotDir,
- .NOTCAPABLE => return error.AccessDenied,
- .ILSEQ => return error.InvalidUtf8,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Windows-only. Same as `readlinkat` except `file_path` is null-terminated, WTF16 LE encoded.
-/// The result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// See also `readlinkat`.
-pub fn readlinkatW(dirfd: fd_t, file_path: []const u16, out_buffer: []u8) ReadLinkError![]u8 {
- return windows.ReadLink(dirfd, file_path, out_buffer);
-}
-
-/// Same as `readlinkat` except `file_path` is null-terminated.
-/// See also `readlinkat`.
-pub fn readlinkatZ(dirfd: fd_t, file_path: [*:0]const u8, out_buffer: []u8) ReadLinkError![]u8 {
- if (builtin.os.tag == .windows) {
- const file_path_w = try windows.cStrToPrefixedFileW(dirfd, file_path);
- return readlinkatW(dirfd, file_path_w.span(), out_buffer);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return readlinkat(dirfd, mem.sliceTo(file_path, 0), out_buffer);
- }
- const rc = system.readlinkat(dirfd, file_path, out_buffer.ptr, out_buffer.len);
- switch (errno(rc)) {
- .SUCCESS => return out_buffer[0..@bitCast(rc)],
- .ACCES => return error.AccessDenied,
- .FAULT => unreachable,
- .INVAL => return error.NotLink,
- .IO => return error.FileSystem,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.NotDir,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const SetEidError = error{
- InvalidUserId,
- PermissionDenied,
-} || UnexpectedError;
-
-pub const SetIdError = error{ResourceLimitReached} || SetEidError;
-
-pub fn setuid(uid: uid_t) SetIdError!void {
- switch (errno(system.setuid(uid))) {
- .SUCCESS => return,
- .AGAIN => return error.ResourceLimitReached,
- .INVAL => return error.InvalidUserId,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn seteuid(uid: uid_t) SetEidError!void {
- switch (errno(system.seteuid(uid))) {
- .SUCCESS => return,
- .INVAL => return error.InvalidUserId,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn setreuid(ruid: uid_t, euid: uid_t) SetIdError!void {
- switch (errno(system.setreuid(ruid, euid))) {
- .SUCCESS => return,
- .AGAIN => return error.ResourceLimitReached,
- .INVAL => return error.InvalidUserId,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn setgid(gid: gid_t) SetIdError!void {
- switch (errno(system.setgid(gid))) {
- .SUCCESS => return,
- .AGAIN => return error.ResourceLimitReached,
- .INVAL => return error.InvalidUserId,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn setegid(uid: uid_t) SetEidError!void {
- switch (errno(system.setegid(uid))) {
- .SUCCESS => return,
- .INVAL => return error.InvalidUserId,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn setregid(rgid: gid_t, egid: gid_t) SetIdError!void {
- switch (errno(system.setregid(rgid, egid))) {
- .SUCCESS => return,
- .AGAIN => return error.ResourceLimitReached,
- .INVAL => return error.InvalidUserId,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Test whether a file descriptor refers to a terminal.
-pub fn isatty(handle: fd_t) bool {
- if (builtin.os.tag == .windows) {
- if (isCygwinPty(handle))
- return true;
-
- var out: windows.DWORD = undefined;
- return windows.kernel32.GetConsoleMode(handle, &out) != 0;
- }
- if (builtin.link_libc) {
- return system.isatty(handle) != 0;
- }
- if (builtin.os.tag == .wasi) {
- var statbuf: wasi.fdstat_t = undefined;
- const err = wasi.fd_fdstat_get(handle, &statbuf);
- if (err != .SUCCESS)
- return false;
-
- // A tty is a character device that we can't seek or tell on.
- if (statbuf.fs_filetype != .CHARACTER_DEVICE)
- return false;
- if (statbuf.fs_rights_base.FD_SEEK or statbuf.fs_rights_base.FD_TELL)
- return false;
-
- return true;
- }
- if (builtin.os.tag == .linux) {
- while (true) {
- var wsz: linux.winsize = undefined;
- const fd: usize = @bitCast(@as(isize, handle));
- const rc = linux.syscall3(.ioctl, fd, linux.T.IOCGWINSZ, @intFromPtr(&wsz));
- switch (linux.getErrno(rc)) {
- .SUCCESS => return true,
- .INTR => continue,
- else => return false,
- }
- }
- }
- return system.isatty(handle) != 0;
-}
-
-pub fn isCygwinPty(handle: fd_t) bool {
- if (builtin.os.tag != .windows) return false;
-
- // If this is a MSYS2/cygwin pty, then it will be a named pipe with a name in one of these formats:
- // msys-[...]-ptyN-[...]
- // cygwin-[...]-ptyN-[...]
- //
- // Example: msys-1888ae32e00d56aa-pty0-to-master
-
- // First, just check that the handle is a named pipe.
- // This allows us to avoid the more costly NtQueryInformationFile call
- // for handles that aren't named pipes.
- {
- var io_status: windows.IO_STATUS_BLOCK = undefined;
- var device_info: windows.FILE_FS_DEVICE_INFORMATION = undefined;
- const rc = windows.ntdll.NtQueryVolumeInformationFile(handle, &io_status, &device_info, @sizeOf(windows.FILE_FS_DEVICE_INFORMATION), .FileFsDeviceInformation);
- switch (rc) {
- .SUCCESS => {},
- else => return false,
- }
- if (device_info.DeviceType != windows.FILE_DEVICE_NAMED_PIPE) return false;
- }
-
- const name_bytes_offset = @offsetOf(windows.FILE_NAME_INFO, "FileName");
- // `NAME_MAX` UTF-16 code units (2 bytes each)
- // Note: This buffer may not be long enough to handle *all* possible paths (PATH_MAX_WIDE would be necessary for that),
- // but because we only care about certain paths and we know they must be within a reasonable length,
- // we can use this smaller buffer and just return false on any error from NtQueryInformationFile.
- const num_name_bytes = windows.MAX_PATH * 2;
- var name_info_bytes align(@alignOf(windows.FILE_NAME_INFO)) = [_]u8{0} ** (name_bytes_offset + num_name_bytes);
-
- var io_status_block: windows.IO_STATUS_BLOCK = undefined;
- const rc = windows.ntdll.NtQueryInformationFile(handle, &io_status_block, &name_info_bytes, @intCast(name_info_bytes.len), .FileNameInformation);
- switch (rc) {
- .SUCCESS => {},
- .INVALID_PARAMETER => unreachable,
- else => return false,
- }
-
- const name_info: *const windows.FILE_NAME_INFO = @ptrCast(&name_info_bytes);
- const name_bytes = name_info_bytes[name_bytes_offset .. name_bytes_offset + name_info.FileNameLength];
- const name_wide = mem.bytesAsSlice(u16, name_bytes);
- // Note: The name we get from NtQueryInformationFile will be prefixed with a '\', e.g. \msys-1888ae32e00d56aa-pty0-to-master
- return (mem.startsWith(u16, name_wide, &[_]u16{ '\\', 'm', 's', 'y', 's', '-' }) or
- mem.startsWith(u16, name_wide, &[_]u16{ '\\', 'c', 'y', 'g', 'w', 'i', 'n', '-' })) and
- mem.indexOf(u16, name_wide, &[_]u16{ '-', 'p', 't', 'y' }) != null;
-}
-
-pub const SocketError = error{
- /// Permission to create a socket of the specified type and/or
- /// pro‐tocol is denied.
- PermissionDenied,
-
- /// The implementation does not support the specified address family.
- AddressFamilyNotSupported,
-
- /// Unknown protocol, or protocol family not available.
- ProtocolFamilyNotAvailable,
-
- /// The per-process limit on the number of open file descriptors has been reached.
- ProcessFdQuotaExceeded,
-
- /// The system-wide limit on the total number of open files has been reached.
- SystemFdQuotaExceeded,
-
- /// Insufficient memory is available. The socket cannot be created until sufficient
- /// resources are freed.
- SystemResources,
-
- /// The protocol type or the specified protocol is not supported within this domain.
- ProtocolNotSupported,
-
- /// The socket type is not supported by the protocol.
- SocketTypeNotSupported,
-} || UnexpectedError;
-
-pub fn socket(domain: u32, socket_type: u32, protocol: u32) SocketError!socket_t {
- if (builtin.os.tag == .windows) {
- // NOTE: windows translates the SOCK.NONBLOCK/SOCK.CLOEXEC flags into
- // windows-analagous operations
- const filtered_sock_type = socket_type & ~@as(u32, SOCK.NONBLOCK | SOCK.CLOEXEC);
- const flags: u32 = if ((socket_type & SOCK.CLOEXEC) != 0)
- windows.ws2_32.WSA_FLAG_NO_HANDLE_INHERIT
- else
- 0;
- const rc = try windows.WSASocketW(
- @bitCast(domain),
- @bitCast(filtered_sock_type),
- @bitCast(protocol),
- null,
- 0,
- flags,
- );
- errdefer windows.closesocket(rc) catch unreachable;
- if ((socket_type & SOCK.NONBLOCK) != 0) {
- var mode: c_ulong = 1; // nonblocking
- if (windows.ws2_32.SOCKET_ERROR == windows.ws2_32.ioctlsocket(rc, windows.ws2_32.FIONBIO, &mode)) {
- switch (windows.ws2_32.WSAGetLastError()) {
- // have not identified any error codes that should be handled yet
- else => unreachable,
- }
- }
- }
- return rc;
- }
-
- const have_sock_flags = !builtin.target.isDarwin();
- const filtered_sock_type = if (!have_sock_flags)
- socket_type & ~@as(u32, SOCK.NONBLOCK | SOCK.CLOEXEC)
- else
- socket_type;
- const rc = system.socket(domain, filtered_sock_type, protocol);
- switch (errno(rc)) {
- .SUCCESS => {
- const fd: fd_t = @intCast(rc);
- errdefer close(fd);
- if (!have_sock_flags) {
- try setSockFlags(fd, socket_type);
- }
- return fd;
- },
- .ACCES => return error.PermissionDenied,
- .AFNOSUPPORT => return error.AddressFamilyNotSupported,
- .INVAL => return error.ProtocolFamilyNotAvailable,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .PROTONOSUPPORT => return error.ProtocolNotSupported,
- .PROTOTYPE => return error.SocketTypeNotSupported,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const ShutdownError = error{
- ConnectionAborted,
-
- /// Connection was reset by peer, application should close socket as it is no longer usable.
- ConnectionResetByPeer,
- BlockingOperationInProgress,
-
- /// The network subsystem has failed.
- NetworkSubsystemFailed,
-
- /// The socket is not connected (connection-oriented sockets only).
- SocketNotConnected,
- SystemResources,
-} || UnexpectedError;
-
-pub const ShutdownHow = enum { recv, send, both };
-
-/// Shutdown socket send/receive operations
-pub fn shutdown(sock: socket_t, how: ShutdownHow) ShutdownError!void {
- if (builtin.os.tag == .windows) {
- const result = windows.ws2_32.shutdown(sock, switch (how) {
- .recv => windows.ws2_32.SD_RECEIVE,
- .send => windows.ws2_32.SD_SEND,
- .both => windows.ws2_32.SD_BOTH,
- });
- if (0 != result) switch (windows.ws2_32.WSAGetLastError()) {
- .WSAECONNABORTED => return error.ConnectionAborted,
- .WSAECONNRESET => return error.ConnectionResetByPeer,
- .WSAEINPROGRESS => return error.BlockingOperationInProgress,
- .WSAEINVAL => unreachable,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAENOTCONN => return error.SocketNotConnected,
- .WSAENOTSOCK => unreachable,
- .WSANOTINITIALISED => unreachable,
- else => |err| return windows.unexpectedWSAError(err),
- };
- } else {
- const rc = system.shutdown(sock, switch (how) {
- .recv => SHUT.RD,
- .send => SHUT.WR,
- .both => SHUT.RDWR,
- });
- switch (errno(rc)) {
- .SUCCESS => return,
- .BADF => unreachable,
- .INVAL => unreachable,
- .NOTCONN => return error.SocketNotConnected,
- .NOTSOCK => unreachable,
- .NOBUFS => return error.SystemResources,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const BindError = error{
- /// The address is protected, and the user is not the superuser.
- /// For UNIX domain sockets: Search permission is denied on a component
- /// of the path prefix.
- AccessDenied,
-
- /// The given address is already in use, or in the case of Internet domain sockets,
- /// The port number was specified as zero in the socket
- /// address structure, but, upon attempting to bind to an ephemeral port, it was
- /// determined that all port numbers in the ephemeral port range are currently in
- /// use. See the discussion of /proc/sys/net/ipv4/ip_local_port_range ip(7).
- AddressInUse,
-
- /// A nonexistent interface was requested or the requested address was not local.
- AddressNotAvailable,
-
- /// The address is not valid for the address family of socket.
- AddressFamilyNotSupported,
-
- /// Too many symbolic links were encountered in resolving addr.
- SymLinkLoop,
-
- /// addr is too long.
- NameTooLong,
-
- /// A component in the directory prefix of the socket pathname does not exist.
- FileNotFound,
-
- /// Insufficient kernel memory was available.
- SystemResources,
-
- /// A component of the path prefix is not a directory.
- NotDir,
-
- /// The socket inode would reside on a read-only filesystem.
- ReadOnlyFileSystem,
-
- /// The network subsystem has failed.
- NetworkSubsystemFailed,
-
- FileDescriptorNotASocket,
-
- AlreadyBound,
-} || UnexpectedError;
-
-/// addr is `*const T` where T is one of the sockaddr
-pub fn bind(sock: socket_t, addr: *const sockaddr, len: socklen_t) BindError!void {
- if (builtin.os.tag == .windows) {
- const rc = windows.bind(sock, addr, len);
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable, // not initialized WSA
- .WSAEACCES => return error.AccessDenied,
- .WSAEADDRINUSE => return error.AddressInUse,
- .WSAEADDRNOTAVAIL => return error.AddressNotAvailable,
- .WSAENOTSOCK => return error.FileDescriptorNotASocket,
- .WSAEFAULT => unreachable, // invalid pointers
- .WSAEINVAL => return error.AlreadyBound,
- .WSAENOBUFS => return error.SystemResources,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- else => |err| return windows.unexpectedWSAError(err),
- }
- unreachable;
- }
- return;
- } else {
- const rc = system.bind(sock, addr, len);
- switch (errno(rc)) {
- .SUCCESS => return,
- .ACCES, .PERM => return error.AccessDenied,
- .ADDRINUSE => return error.AddressInUse,
- .BADF => unreachable, // always a race condition if this error is returned
- .INVAL => unreachable, // invalid parameters
- .NOTSOCK => unreachable, // invalid `sockfd`
- .AFNOSUPPORT => return error.AddressFamilyNotSupported,
- .ADDRNOTAVAIL => return error.AddressNotAvailable,
- .FAULT => unreachable, // invalid `addr` pointer
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOTDIR => return error.NotDir,
- .ROFS => return error.ReadOnlyFileSystem,
- else => |err| return unexpectedErrno(err),
- }
- }
- unreachable;
-}
-
-pub const ListenError = error{
- /// Another socket is already listening on the same port.
- /// For Internet domain sockets, the socket referred to by sockfd had not previously
- /// been bound to an address and, upon attempting to bind it to an ephemeral port, it
- /// was determined that all port numbers in the ephemeral port range are currently in
- /// use. See the discussion of /proc/sys/net/ipv4/ip_local_port_range in ip(7).
- AddressInUse,
-
- /// The file descriptor sockfd does not refer to a socket.
- FileDescriptorNotASocket,
-
- /// The socket is not of a type that supports the listen() operation.
- OperationNotSupported,
-
- /// The network subsystem has failed.
- NetworkSubsystemFailed,
-
- /// Ran out of system resources
- /// On Windows it can either run out of socket descriptors or buffer space
- SystemResources,
-
- /// Already connected
- AlreadyConnected,
-
- /// Socket has not been bound yet
- SocketNotBound,
-} || UnexpectedError;
-
-pub fn listen(sock: socket_t, backlog: u31) ListenError!void {
- if (builtin.os.tag == .windows) {
- const rc = windows.listen(sock, backlog);
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable, // not initialized WSA
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAEADDRINUSE => return error.AddressInUse,
- .WSAEISCONN => return error.AlreadyConnected,
- .WSAEINVAL => return error.SocketNotBound,
- .WSAEMFILE, .WSAENOBUFS => return error.SystemResources,
- .WSAENOTSOCK => return error.FileDescriptorNotASocket,
- .WSAEOPNOTSUPP => return error.OperationNotSupported,
- .WSAEINPROGRESS => unreachable,
- else => |err| return windows.unexpectedWSAError(err),
- }
- }
- return;
- } else {
- const rc = system.listen(sock, backlog);
- switch (errno(rc)) {
- .SUCCESS => return,
- .ADDRINUSE => return error.AddressInUse,
- .BADF => unreachable,
- .NOTSOCK => return error.FileDescriptorNotASocket,
- .OPNOTSUPP => return error.OperationNotSupported,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const AcceptError = error{
- ConnectionAborted,
-
- /// The file descriptor sockfd does not refer to a socket.
- FileDescriptorNotASocket,
-
- /// The per-process limit on the number of open file descriptors has been reached.
- ProcessFdQuotaExceeded,
-
- /// The system-wide limit on the total number of open files has been reached.
- SystemFdQuotaExceeded,
-
- /// Not enough free memory. This often means that the memory allocation is limited
- /// by the socket buffer limits, not by the system memory.
- SystemResources,
-
- /// Socket is not listening for new connections.
- SocketNotListening,
-
- ProtocolFailure,
-
- /// Firewall rules forbid connection.
- BlockedByFirewall,
-
- /// This error occurs when no global event loop is configured,
- /// and accepting from the socket would block.
- WouldBlock,
-
- /// An incoming connection was indicated, but was subsequently terminated by the
- /// remote peer prior to accepting the call.
- ConnectionResetByPeer,
-
- /// The network subsystem has failed.
- NetworkSubsystemFailed,
-
- /// The referenced socket is not a type that supports connection-oriented service.
- OperationNotSupported,
-} || UnexpectedError;
-
-/// Accept a connection on a socket.
-/// If `sockfd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-pub fn accept(
- /// This argument is a socket that has been created with `socket`, bound to a local address
- /// with `bind`, and is listening for connections after a `listen`.
- sock: socket_t,
- /// This argument is a pointer to a sockaddr structure. This structure is filled in with the
- /// address of the peer socket, as known to the communications layer. The exact format of the
- /// address returned addr is determined by the socket's address family (see `socket` and the
- /// respective protocol man pages).
- addr: ?*sockaddr,
- /// This argument is a value-result argument: the caller must initialize it to contain the
- /// size (in bytes) of the structure pointed to by addr; on return it will contain the actual size
- /// of the peer address.
- ///
- /// The returned address is truncated if the buffer provided is too small; in this case, `addr_size`
- /// will return a value greater than was supplied to the call.
- addr_size: ?*socklen_t,
- /// The following values can be bitwise ORed in flags to obtain different behavior:
- /// * `SOCK.NONBLOCK` - Set the `NONBLOCK` file status flag on the open file description (see `open`)
- /// referred to by the new file descriptor. Using this flag saves extra calls to `fcntl` to achieve
- /// the same result.
- /// * `SOCK.CLOEXEC` - Set the close-on-exec (`FD_CLOEXEC`) flag on the new file descriptor. See the
- /// description of the `CLOEXEC` flag in `open` for reasons why this may be useful.
- flags: u32,
-) AcceptError!socket_t {
- const have_accept4 = !(builtin.target.isDarwin() or builtin.os.tag == .windows);
- assert(0 == (flags & ~@as(u32, SOCK.NONBLOCK | SOCK.CLOEXEC))); // Unsupported flag(s)
-
- const accepted_sock: socket_t = while (true) {
- const rc = if (have_accept4)
- system.accept4(sock, addr, addr_size, flags)
- else if (builtin.os.tag == .windows)
- windows.accept(sock, addr, addr_size)
- else
- system.accept(sock, addr, addr_size);
-
- if (builtin.os.tag == .windows) {
- if (rc == windows.ws2_32.INVALID_SOCKET) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable, // not initialized WSA
- .WSAECONNRESET => return error.ConnectionResetByPeer,
- .WSAEFAULT => unreachable,
- .WSAEINVAL => return error.SocketNotListening,
- .WSAEMFILE => return error.ProcessFdQuotaExceeded,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAENOBUFS => return error.FileDescriptorNotASocket,
- .WSAEOPNOTSUPP => return error.OperationNotSupported,
- .WSAEWOULDBLOCK => return error.WouldBlock,
- else => |err| return windows.unexpectedWSAError(err),
- }
- } else {
- break rc;
- }
- } else {
- switch (errno(rc)) {
- .SUCCESS => break @intCast(rc),
- .INTR => continue,
- .AGAIN => return error.WouldBlock,
- .BADF => unreachable, // always a race condition
- .CONNABORTED => return error.ConnectionAborted,
- .FAULT => unreachable,
- .INVAL => return error.SocketNotListening,
- .NOTSOCK => unreachable,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .OPNOTSUPP => unreachable,
- .PROTO => return error.ProtocolFailure,
- .PERM => return error.BlockedByFirewall,
- else => |err| return unexpectedErrno(err),
- }
- }
- };
-
- errdefer switch (builtin.os.tag) {
- .windows => windows.closesocket(accepted_sock) catch unreachable,
- else => close(accepted_sock),
- };
- if (!have_accept4) {
- try setSockFlags(accepted_sock, flags);
- }
- return accepted_sock;
-}
-
-pub const EpollCreateError = error{
- /// The per-user limit on the number of epoll instances imposed by
- /// /proc/sys/fs/epoll/max_user_instances was encountered. See epoll(7) for further
- /// details.
- /// Or, The per-process limit on the number of open file descriptors has been reached.
- ProcessFdQuotaExceeded,
-
- /// The system-wide limit on the total number of open files has been reached.
- SystemFdQuotaExceeded,
-
- /// There was insufficient memory to create the kernel object.
- SystemResources,
-} || UnexpectedError;
-
-pub fn epoll_create1(flags: u32) EpollCreateError!i32 {
- const rc = system.epoll_create1(flags);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- else => |err| return unexpectedErrno(err),
-
- .INVAL => unreachable,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOMEM => return error.SystemResources,
- }
-}
-
-pub const EpollCtlError = error{
- /// op was EPOLL_CTL_ADD, and the supplied file descriptor fd is already registered
- /// with this epoll instance.
- FileDescriptorAlreadyPresentInSet,
-
- /// fd refers to an epoll instance and this EPOLL_CTL_ADD operation would result in a
- /// circular loop of epoll instances monitoring one another.
- OperationCausesCircularLoop,
-
- /// op was EPOLL_CTL_MOD or EPOLL_CTL_DEL, and fd is not registered with this epoll
- /// instance.
- FileDescriptorNotRegistered,
-
- /// There was insufficient memory to handle the requested op control operation.
- SystemResources,
-
- /// The limit imposed by /proc/sys/fs/epoll/max_user_watches was encountered while
- /// trying to register (EPOLL_CTL_ADD) a new file descriptor on an epoll instance.
- /// See epoll(7) for further details.
- UserResourceLimitReached,
-
- /// The target file fd does not support epoll. This error can occur if fd refers to,
- /// for example, a regular file or a directory.
- FileDescriptorIncompatibleWithEpoll,
-} || UnexpectedError;
-
-pub fn epoll_ctl(epfd: i32, op: u32, fd: i32, event: ?*linux.epoll_event) EpollCtlError!void {
- const rc = system.epoll_ctl(epfd, op, fd, event);
- switch (errno(rc)) {
- .SUCCESS => return,
- else => |err| return unexpectedErrno(err),
-
- .BADF => unreachable, // always a race condition if this happens
- .EXIST => return error.FileDescriptorAlreadyPresentInSet,
- .INVAL => unreachable,
- .LOOP => return error.OperationCausesCircularLoop,
- .NOENT => return error.FileDescriptorNotRegistered,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.UserResourceLimitReached,
- .PERM => return error.FileDescriptorIncompatibleWithEpoll,
- }
-}
-
-/// Waits for an I/O event on an epoll file descriptor.
-/// Returns the number of file descriptors ready for the requested I/O,
-/// or zero if no file descriptor became ready during the requested timeout milliseconds.
-pub fn epoll_wait(epfd: i32, events: []linux.epoll_event, timeout: i32) usize {
- while (true) {
- // TODO get rid of the @intCast
- const rc = system.epoll_wait(epfd, events.ptr, @intCast(events.len), timeout);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .BADF => unreachable,
- .FAULT => unreachable,
- .INVAL => unreachable,
- else => unreachable,
- }
- }
-}
-
-pub const EventFdError = error{
- SystemResources,
- ProcessFdQuotaExceeded,
- SystemFdQuotaExceeded,
-} || UnexpectedError;
-
-pub fn eventfd(initval: u32, flags: u32) EventFdError!i32 {
- const rc = system.eventfd(initval, flags);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- else => |err| return unexpectedErrno(err),
-
- .INVAL => unreachable, // invalid parameters
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NODEV => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- }
-}
-
-pub const GetSockNameError = error{
- /// Insufficient resources were available in the system to perform the operation.
- SystemResources,
-
- /// The network subsystem has failed.
- NetworkSubsystemFailed,
-
- /// Socket hasn't been bound yet
- SocketNotBound,
-
- FileDescriptorNotASocket,
-} || UnexpectedError;
-
-pub fn getsockname(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
- if (builtin.os.tag == .windows) {
- const rc = windows.getsockname(sock, addr, addrlen);
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAEFAULT => unreachable, // addr or addrlen have invalid pointers or addrlen points to an incorrect value
- .WSAENOTSOCK => return error.FileDescriptorNotASocket,
- .WSAEINVAL => return error.SocketNotBound,
- else => |err| return windows.unexpectedWSAError(err),
- }
- }
- return;
- } else {
- const rc = system.getsockname(sock, addr, addrlen);
- switch (errno(rc)) {
- .SUCCESS => return,
- else => |err| return unexpectedErrno(err),
-
- .BADF => unreachable, // always a race condition
- .FAULT => unreachable,
- .INVAL => unreachable, // invalid parameters
- .NOTSOCK => return error.FileDescriptorNotASocket,
- .NOBUFS => return error.SystemResources,
- }
- }
-}
-
-pub fn getpeername(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
- if (builtin.os.tag == .windows) {
- const rc = windows.getpeername(sock, addr, addrlen);
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAEFAULT => unreachable, // addr or addrlen have invalid pointers or addrlen points to an incorrect value
- .WSAENOTSOCK => return error.FileDescriptorNotASocket,
- .WSAEINVAL => return error.SocketNotBound,
- else => |err| return windows.unexpectedWSAError(err),
- }
- }
- return;
- } else {
- const rc = system.getpeername(sock, addr, addrlen);
- switch (errno(rc)) {
- .SUCCESS => return,
- else => |err| return unexpectedErrno(err),
-
- .BADF => unreachable, // always a race condition
- .FAULT => unreachable,
- .INVAL => unreachable, // invalid parameters
- .NOTSOCK => return error.FileDescriptorNotASocket,
- .NOBUFS => return error.SystemResources,
- }
- }
-}
-
-pub const ConnectError = error{
- /// For UNIX domain sockets, which are identified by pathname: Write permission is denied on the socket
- /// file, or search permission is denied for one of the directories in the path prefix.
- /// or
- /// The user tried to connect to a broadcast address without having the socket broadcast flag enabled or
- /// the connection request failed because of a local firewall rule.
- PermissionDenied,
-
- /// Local address is already in use.
- AddressInUse,
-
- /// (Internet domain sockets) The socket referred to by sockfd had not previously been bound to an
- /// address and, upon attempting to bind it to an ephemeral port, it was determined that all port numbers
- /// in the ephemeral port range are currently in use. See the discussion of
- /// /proc/sys/net/ipv4/ip_local_port_range in ip(7).
- AddressNotAvailable,
-
- /// The passed address didn't have the correct address family in its sa_family field.
- AddressFamilyNotSupported,
-
- /// Insufficient entries in the routing cache.
- SystemResources,
-
- /// A connect() on a stream socket found no one listening on the remote address.
- ConnectionRefused,
-
- /// Network is unreachable.
- NetworkUnreachable,
-
- /// Timeout while attempting connection. The server may be too busy to accept new connections. Note
- /// that for IP sockets the timeout may be very long when syncookies are enabled on the server.
- ConnectionTimedOut,
-
- /// This error occurs when no global event loop is configured,
- /// and connecting to the socket would block.
- WouldBlock,
-
- /// The given path for the unix socket does not exist.
- FileNotFound,
-
- /// Connection was reset by peer before connect could complete.
- ConnectionResetByPeer,
-
- /// Socket is non-blocking and already has a pending connection in progress.
- ConnectionPending,
-} || UnexpectedError;
-
-/// Initiate a connection on a socket.
-/// If `sockfd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN or EINPROGRESS is received.
-pub fn connect(sock: socket_t, sock_addr: *const sockaddr, len: socklen_t) ConnectError!void {
- if (builtin.os.tag == .windows) {
- const rc = windows.ws2_32.connect(sock, sock_addr, @intCast(len));
- if (rc == 0) return;
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSAEADDRINUSE => return error.AddressInUse,
- .WSAEADDRNOTAVAIL => return error.AddressNotAvailable,
- .WSAECONNREFUSED => return error.ConnectionRefused,
- .WSAECONNRESET => return error.ConnectionResetByPeer,
- .WSAETIMEDOUT => return error.ConnectionTimedOut,
- .WSAEHOSTUNREACH, // TODO: should we return NetworkUnreachable in this case as well?
- .WSAENETUNREACH,
- => return error.NetworkUnreachable,
- .WSAEFAULT => unreachable,
- .WSAEINVAL => unreachable,
- .WSAEISCONN => unreachable,
- .WSAENOTSOCK => unreachable,
- .WSAEWOULDBLOCK => return error.WouldBlock,
- .WSAEACCES => unreachable,
- .WSAENOBUFS => return error.SystemResources,
- .WSAEAFNOSUPPORT => return error.AddressFamilyNotSupported,
- else => |err| return windows.unexpectedWSAError(err),
- }
- return;
- }
-
- while (true) {
- switch (errno(system.connect(sock, sock_addr, len))) {
- .SUCCESS => return,
- .ACCES => return error.PermissionDenied,
- .PERM => return error.PermissionDenied,
- .ADDRINUSE => return error.AddressInUse,
- .ADDRNOTAVAIL => return error.AddressNotAvailable,
- .AFNOSUPPORT => return error.AddressFamilyNotSupported,
- .AGAIN, .INPROGRESS => return error.WouldBlock,
- .ALREADY => return error.ConnectionPending,
- .BADF => unreachable, // sockfd is not a valid open file descriptor.
- .CONNREFUSED => return error.ConnectionRefused,
- .CONNRESET => return error.ConnectionResetByPeer,
- .FAULT => unreachable, // The socket structure address is outside the user's address space.
- .INTR => continue,
- .ISCONN => unreachable, // The socket is already connected.
- .HOSTUNREACH => return error.NetworkUnreachable,
- .NETUNREACH => return error.NetworkUnreachable,
- .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
- .PROTOTYPE => unreachable, // The socket type does not support the requested communications protocol.
- .TIMEDOUT => return error.ConnectionTimedOut,
- .NOENT => return error.FileNotFound, // Returned when socket is AF.UNIX and the given path does not exist.
- .CONNABORTED => unreachable, // Tried to reuse socket that previously received error.ConnectionRefused.
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub fn getsockoptError(sockfd: fd_t) ConnectError!void {
- var err_code: i32 = undefined;
- var size: u32 = @sizeOf(u32);
- const rc = system.getsockopt(sockfd, SOL.SOCKET, SO.ERROR, @ptrCast(&err_code), &size);
- assert(size == 4);
- switch (errno(rc)) {
- .SUCCESS => switch (@as(E, @enumFromInt(err_code))) {
- .SUCCESS => return,
- .ACCES => return error.PermissionDenied,
- .PERM => return error.PermissionDenied,
- .ADDRINUSE => return error.AddressInUse,
- .ADDRNOTAVAIL => return error.AddressNotAvailable,
- .AFNOSUPPORT => return error.AddressFamilyNotSupported,
- .AGAIN => return error.SystemResources,
- .ALREADY => return error.ConnectionPending,
- .BADF => unreachable, // sockfd is not a valid open file descriptor.
- .CONNREFUSED => return error.ConnectionRefused,
- .FAULT => unreachable, // The socket structure address is outside the user's address space.
- .ISCONN => unreachable, // The socket is already connected.
- .HOSTUNREACH => return error.NetworkUnreachable,
- .NETUNREACH => return error.NetworkUnreachable,
- .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
- .PROTOTYPE => unreachable, // The socket type does not support the requested communications protocol.
- .TIMEDOUT => return error.ConnectionTimedOut,
- .CONNRESET => return error.ConnectionResetByPeer,
- else => |err| return unexpectedErrno(err),
- },
- .BADF => unreachable, // The argument sockfd is not a valid file descriptor.
- .FAULT => unreachable, // The address pointed to by optval or optlen is not in a valid part of the process address space.
- .INVAL => unreachable,
- .NOPROTOOPT => unreachable, // The option is unknown at the level indicated.
- .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const WaitPidResult = struct {
- pid: pid_t,
- status: u32,
-};
-
-/// Use this version of the `waitpid` wrapper if you spawned your child process using explicit
-/// `fork` and `execve` method.
-pub fn waitpid(pid: pid_t, flags: u32) WaitPidResult {
- var status: if (builtin.link_libc) c_int else u32 = undefined;
- while (true) {
- const rc = system.waitpid(pid, &status, @intCast(flags));
- switch (errno(rc)) {
- .SUCCESS => return .{
- .pid = @intCast(rc),
- .status = @bitCast(status),
- },
- .INTR => continue,
- .CHILD => unreachable, // The process specified does not exist. It would be a race condition to handle this error.
- .INVAL => unreachable, // Invalid flags.
- else => unreachable,
- }
- }
-}
-
-pub fn wait4(pid: pid_t, flags: u32, ru: ?*rusage) WaitPidResult {
- var status: if (builtin.link_libc) c_int else u32 = undefined;
- while (true) {
- const rc = system.wait4(pid, &status, @intCast(flags), ru);
- switch (errno(rc)) {
- .SUCCESS => return .{
- .pid = @intCast(rc),
- .status = @bitCast(status),
- },
- .INTR => continue,
- .CHILD => unreachable, // The process specified does not exist. It would be a race condition to handle this error.
- .INVAL => unreachable, // Invalid flags.
- else => unreachable,
- }
- }
-}
-
-pub const FStatError = error{
- SystemResources,
-
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to get its filestat information.
- AccessDenied,
-} || UnexpectedError;
-
-/// Return information about a file descriptor.
-pub fn fstat(fd: fd_t) FStatError!Stat {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return Stat.fromFilestat(try fstat_wasi(fd));
- }
- if (builtin.os.tag == .windows) {
- @compileError("fstat is not yet implemented on Windows");
- }
-
- const fstat_sym = if (lfs64_abi) system.fstat64 else system.fstat;
- var stat = mem.zeroes(Stat);
- switch (errno(fstat_sym(fd, &stat))) {
- .SUCCESS => return stat,
- .INVAL => unreachable,
- .BADF => unreachable, // Always a race condition.
- .NOMEM => return error.SystemResources,
- .ACCES => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn fstat_wasi(fd: fd_t) FStatError!wasi.filestat_t {
- var stat: wasi.filestat_t = undefined;
- switch (wasi.fd_filestat_get(fd, &stat)) {
- .SUCCESS => return stat,
- .INVAL => unreachable,
- .BADF => unreachable, // Always a race condition.
- .NOMEM => return error.SystemResources,
- .ACCES => return error.AccessDenied,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const FStatAtError = FStatError || error{
- NameTooLong,
- FileNotFound,
- SymLinkLoop,
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
-};
-
-/// Similar to `fstat`, but returns stat of a resource pointed to by `pathname`
-/// which is relative to `dirfd` handle.
-/// On WASI, `pathname` should be encoded as valid UTF-8.
-/// On other platforms, `pathname` is an opaque sequence of bytes with no particular encoding.
-/// See also `fstatatZ` and `fstatat_wasi`.
-pub fn fstatat(dirfd: fd_t, pathname: []const u8, flags: u32) FStatAtError!Stat {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const filestat = try fstatat_wasi(dirfd, pathname, .{
- .SYMLINK_FOLLOW = (flags & AT.SYMLINK_NOFOLLOW) == 0,
- });
- return Stat.fromFilestat(filestat);
- } else if (builtin.os.tag == .windows) {
- @compileError("fstatat is not yet implemented on Windows");
- } else {
- const pathname_c = try toPosixPath(pathname);
- return fstatatZ(dirfd, &pathname_c, flags);
- }
-}
-
-/// WASI-only. Same as `fstatat` but targeting WASI.
-/// `pathname` should be encoded as valid UTF-8.
-/// See also `fstatat`.
-pub fn fstatat_wasi(dirfd: fd_t, pathname: []const u8, flags: wasi.lookupflags_t) FStatAtError!wasi.filestat_t {
- var stat: wasi.filestat_t = undefined;
- switch (wasi.path_filestat_get(dirfd, flags, pathname.ptr, pathname.len, &stat)) {
- .SUCCESS => return stat,
- .INVAL => unreachable,
- .BADF => unreachable, // Always a race condition.
- .NOMEM => return error.SystemResources,
- .ACCES => return error.AccessDenied,
- .FAULT => unreachable,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.FileNotFound,
- .NOTCAPABLE => return error.AccessDenied,
- .ILSEQ => return error.InvalidUtf8,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Same as `fstatat` but `pathname` is null-terminated.
-/// See also `fstatat`.
-pub fn fstatatZ(dirfd: fd_t, pathname: [*:0]const u8, flags: u32) FStatAtError!Stat {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const filestat = try fstatat_wasi(dirfd, mem.sliceTo(pathname, 0), .{
- .SYMLINK_FOLLOW = (flags & AT.SYMLINK_NOFOLLOW) == 0,
- });
- return Stat.fromFilestat(filestat);
- }
-
- const fstatat_sym = if (lfs64_abi) system.fstatat64 else system.fstatat;
- var stat = mem.zeroes(Stat);
- switch (errno(fstatat_sym(dirfd, pathname, &stat, flags))) {
- .SUCCESS => return stat,
- .INVAL => unreachable,
- .BADF => unreachable, // Always a race condition.
- .NOMEM => return error.SystemResources,
- .ACCES => return error.AccessDenied,
- .PERM => return error.AccessDenied,
- .FAULT => unreachable,
- .NAMETOOLONG => return error.NameTooLong,
- .LOOP => return error.SymLinkLoop,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.FileNotFound,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const KQueueError = error{
- /// The per-process limit on the number of open file descriptors has been reached.
- ProcessFdQuotaExceeded,
-
- /// The system-wide limit on the total number of open files has been reached.
- SystemFdQuotaExceeded,
-} || UnexpectedError;
-
-pub fn kqueue() KQueueError!i32 {
- const rc = system.kqueue();
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const KEventError = error{
- /// The process does not have permission to register a filter.
- AccessDenied,
-
- /// The event could not be found to be modified or deleted.
- EventNotFound,
-
- /// No memory was available to register the event.
- SystemResources,
-
- /// The specified process to attach to does not exist.
- ProcessNotFound,
-
- /// changelist or eventlist had too many items on it.
- /// TODO remove this possibility
- Overflow,
-};
-
-pub fn kevent(
- kq: i32,
- changelist: []const Kevent,
- eventlist: []Kevent,
- timeout: ?*const timespec,
-) KEventError!usize {
- while (true) {
- const rc = system.kevent(
- kq,
- changelist.ptr,
- math.cast(c_int, changelist.len) orelse return error.Overflow,
- eventlist.ptr,
- math.cast(c_int, eventlist.len) orelse return error.Overflow,
- timeout,
- );
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .ACCES => return error.AccessDenied,
- .FAULT => unreachable,
- .BADF => unreachable, // Always a race condition.
- .INTR => continue,
- .INVAL => unreachable,
- .NOENT => return error.EventNotFound,
- .NOMEM => return error.SystemResources,
- .SRCH => return error.ProcessNotFound,
- else => unreachable,
- }
- }
-}
-
-pub const INotifyInitError = error{
- ProcessFdQuotaExceeded,
- SystemFdQuotaExceeded,
- SystemResources,
-} || UnexpectedError;
-
-/// initialize an inotify instance
-pub fn inotify_init1(flags: u32) INotifyInitError!i32 {
- const rc = system.inotify_init1(flags);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INVAL => unreachable,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOMEM => return error.SystemResources,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const INotifyAddWatchError = error{
- AccessDenied,
- NameTooLong,
- FileNotFound,
- SystemResources,
- UserResourceLimitReached,
- NotDir,
- WatchAlreadyExists,
-} || UnexpectedError;
-
-/// add a watch to an initialized inotify instance
-pub fn inotify_add_watch(inotify_fd: i32, pathname: []const u8, mask: u32) INotifyAddWatchError!i32 {
- const pathname_c = try toPosixPath(pathname);
- return inotify_add_watchZ(inotify_fd, &pathname_c, mask);
-}
-
-/// Same as `inotify_add_watch` except pathname is null-terminated.
-pub fn inotify_add_watchZ(inotify_fd: i32, pathname: [*:0]const u8, mask: u32) INotifyAddWatchError!i32 {
- const rc = system.inotify_add_watch(inotify_fd, pathname, mask);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .ACCES => return error.AccessDenied,
- .BADF => unreachable,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.UserResourceLimitReached,
- .NOTDIR => return error.NotDir,
- .EXIST => return error.WatchAlreadyExists,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// remove an existing watch from an inotify instance
-pub fn inotify_rm_watch(inotify_fd: i32, wd: i32) void {
- switch (errno(system.inotify_rm_watch(inotify_fd, wd))) {
- .SUCCESS => return,
- .BADF => unreachable,
- .INVAL => unreachable,
- else => unreachable,
- }
-}
-
-pub const FanotifyInitError = error{
- ProcessFdQuotaExceeded,
- SystemFdQuotaExceeded,
- SystemResources,
- OperationNotSupported,
- PermissionDenied,
-} || UnexpectedError;
-
-pub fn fanotify_init(flags: u32, event_f_flags: u32) FanotifyInitError!i32 {
- const rc = system.fanotify_init(flags, event_f_flags);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INVAL => unreachable,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOMEM => return error.SystemResources,
- .NOSYS => return error.OperationNotSupported,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const FanotifyMarkError = error{
- MarkAlreadyExists,
- IsDir,
- NotAssociatedWithFileSystem,
- FileNotFound,
- SystemResources,
- UserMarkQuotaExceeded,
- NotImplemented,
- NotDir,
- OperationNotSupported,
- PermissionDenied,
- NotSameFileSystem,
- NameTooLong,
-} || UnexpectedError;
-
-pub fn fanotify_mark(fanotify_fd: i32, flags: u32, mask: u64, dirfd: i32, pathname: ?[]const u8) FanotifyMarkError!void {
- if (pathname) |path| {
- const path_c = try toPosixPath(path);
- return fanotify_markZ(fanotify_fd, flags, mask, dirfd, &path_c);
- }
-
- return fanotify_markZ(fanotify_fd, flags, mask, dirfd, null);
-}
-
-pub fn fanotify_markZ(fanotify_fd: i32, flags: u32, mask: u64, dirfd: i32, pathname: ?[*:0]const u8) FanotifyMarkError!void {
- const rc = system.fanotify_mark(fanotify_fd, flags, mask, dirfd, pathname);
- switch (errno(rc)) {
- .SUCCESS => return,
- .BADF => unreachable,
- .EXIST => return error.MarkAlreadyExists,
- .INVAL => unreachable,
- .ISDIR => return error.IsDir,
- .NODEV => return error.NotAssociatedWithFileSystem,
- .NOENT => return error.FileNotFound,
- .NOMEM => return error.SystemResources,
- .NOSPC => return error.UserMarkQuotaExceeded,
- .NOSYS => return error.NotImplemented,
- .NOTDIR => return error.NotDir,
- .OPNOTSUPP => return error.OperationNotSupported,
- .PERM => return error.PermissionDenied,
- .XDEV => return error.NotSameFileSystem,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const MProtectError = error{
- /// The memory cannot be given the specified access. This can happen, for example, if you
- /// mmap(2) a file to which you have read-only access, then ask mprotect() to mark it
- /// PROT_WRITE.
- AccessDenied,
-
- /// Changing the protection of a memory region would result in the total number of map‐
- /// pings with distinct attributes (e.g., read versus read/write protection) exceeding the
- /// allowed maximum. (For example, making the protection of a range PROT_READ in the mid‐
- /// dle of a region currently protected as PROT_READ|PROT_WRITE would result in three map‐
- /// pings: two read/write mappings at each end and a read-only mapping in the middle.)
- OutOfMemory,
-} || UnexpectedError;
-
-/// `memory.len` must be page-aligned.
-pub fn mprotect(memory: []align(mem.page_size) u8, protection: u32) MProtectError!void {
- assert(mem.isAligned(memory.len, mem.page_size));
- if (builtin.os.tag == .windows) {
- const win_prot: windows.DWORD = switch (@as(u3, @truncate(protection))) {
- 0b000 => windows.PAGE_NOACCESS,
- 0b001 => windows.PAGE_READONLY,
- 0b010 => unreachable, // +w -r not allowed
- 0b011 => windows.PAGE_READWRITE,
- 0b100 => windows.PAGE_EXECUTE,
- 0b101 => windows.PAGE_EXECUTE_READ,
- 0b110 => unreachable, // +w -r not allowed
- 0b111 => windows.PAGE_EXECUTE_READWRITE,
- };
- var old: windows.DWORD = undefined;
- windows.VirtualProtect(memory.ptr, memory.len, win_prot, &old) catch |err| switch (err) {
- error.InvalidAddress => return error.AccessDenied,
- error.Unexpected => return error.Unexpected,
- };
- } else {
- switch (errno(system.mprotect(memory.ptr, memory.len, protection))) {
- .SUCCESS => return,
- .INVAL => unreachable,
- .ACCES => return error.AccessDenied,
- .NOMEM => return error.OutOfMemory,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const ForkError = error{SystemResources} || UnexpectedError;
-
-pub fn fork() ForkError!pid_t {
- const rc = system.fork();
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .AGAIN => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const MMapError = error{
- /// The underlying filesystem of the specified file does not support memory mapping.
- MemoryMappingNotSupported,
-
- /// A file descriptor refers to a non-regular file. Or a file mapping was requested,
- /// but the file descriptor is not open for reading. Or `MAP.SHARED` was requested
- /// and `PROT_WRITE` is set, but the file descriptor is not open in `RDWR` mode.
- /// Or `PROT_WRITE` is set, but the file is append-only.
- AccessDenied,
-
- /// The `prot` argument asks for `PROT_EXEC` but the mapped area belongs to a file on
- /// a filesystem that was mounted no-exec.
- PermissionDenied,
- LockedMemoryLimitExceeded,
- ProcessFdQuotaExceeded,
- SystemFdQuotaExceeded,
- OutOfMemory,
-} || UnexpectedError;
-
-/// Map files or devices into memory.
-/// `length` does not need to be aligned.
-/// Use of a mapped region can result in these signals:
-/// * SIGSEGV - Attempted write into a region mapped as read-only.
-/// * SIGBUS - Attempted access to a portion of the buffer that does not correspond to the file
-pub fn mmap(
- ptr: ?[*]align(mem.page_size) u8,
- length: usize,
- prot: u32,
- flags: system.MAP,
- fd: fd_t,
- offset: u64,
-) MMapError![]align(mem.page_size) u8 {
- const mmap_sym = if (lfs64_abi) system.mmap64 else system.mmap;
- const rc = mmap_sym(ptr, length, prot, @bitCast(flags), fd, @bitCast(offset));
- const err: E = if (builtin.link_libc) blk: {
- if (rc != std.c.MAP_FAILED) return @as([*]align(mem.page_size) u8, @ptrCast(@alignCast(rc)))[0..length];
- break :blk @enumFromInt(system._errno().*);
- } else blk: {
- const err = errno(rc);
- if (err == .SUCCESS) return @as([*]align(mem.page_size) u8, @ptrFromInt(rc))[0..length];
- break :blk err;
- };
- switch (err) {
- .SUCCESS => unreachable,
- .TXTBSY => return error.AccessDenied,
- .ACCES => return error.AccessDenied,
- .PERM => return error.PermissionDenied,
- .AGAIN => return error.LockedMemoryLimitExceeded,
- .BADF => unreachable, // Always a race condition.
- .OVERFLOW => unreachable, // The number of pages used for length + offset would overflow.
- .NODEV => return error.MemoryMappingNotSupported,
- .INVAL => unreachable, // Invalid parameters to mmap()
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOMEM => return error.OutOfMemory,
- else => return unexpectedErrno(err),
- }
-}
-
-/// Deletes the mappings for the specified address range, causing
-/// further references to addresses within the range to generate invalid memory references.
-/// Note that while POSIX allows unmapping a region in the middle of an existing mapping,
-/// Zig's munmap function does not, for two reasons:
-/// * It violates the Zig principle that resource deallocation must succeed.
-/// * The Windows function, VirtualFree, has this restriction.
-pub fn munmap(memory: []align(mem.page_size) const u8) void {
- switch (errno(system.munmap(memory.ptr, memory.len))) {
- .SUCCESS => return,
- .INVAL => unreachable, // Invalid parameters.
- .NOMEM => unreachable, // Attempted to unmap a region in the middle of an existing mapping.
- else => unreachable,
- }
-}
-
-pub const MSyncError = error{
- UnmappedMemory,
-} || UnexpectedError;
-
-pub fn msync(memory: []align(mem.page_size) u8, flags: i32) MSyncError!void {
- switch (errno(system.msync(memory.ptr, memory.len, flags))) {
- .SUCCESS => return,
- .NOMEM => return error.UnmappedMemory, // Unsuccessful, provided pointer does not point mapped memory
- .INVAL => unreachable, // Invalid parameters.
- else => unreachable,
- }
-}
-
-pub const AccessError = error{
- PermissionDenied,
- FileNotFound,
- NameTooLong,
- InputOutput,
- SystemResources,
- BadPathName,
- FileBusy,
- SymLinkLoop,
- ReadOnlyFileSystem,
- /// WASI-only; file paths must be valid UTF-8.
- InvalidUtf8,
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
-} || UnexpectedError;
-
-/// check user's permissions for a file
-/// On Windows, `path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `path` should be encoded as valid UTF-8.
-/// On other platforms, `path` is an opaque sequence of bytes with no particular encoding.
-/// TODO currently this assumes `mode` is `F.OK` on Windows.
-pub fn access(path: []const u8, mode: u32) AccessError!void {
- if (builtin.os.tag == .windows) {
- const path_w = windows.sliceToPrefixedFileW(null, path) catch |err| switch (err) {
- error.AccessDenied => return error.PermissionDenied,
- else => |e| return e,
- };
- _ = try windows.GetFileAttributesW(path_w.span().ptr);
- return;
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return faccessat(wasi.AT.FDCWD, path, mode, 0);
- }
- const path_c = try toPosixPath(path);
- return accessZ(&path_c, mode);
-}
-
-/// Same as `access` except `path` is null-terminated.
-pub fn accessZ(path: [*:0]const u8, mode: u32) AccessError!void {
- if (builtin.os.tag == .windows) {
- const path_w = windows.cStrToPrefixedFileW(null, path) catch |err| switch (err) {
- error.AccessDenied => return error.PermissionDenied,
- else => |e| return e,
- };
- _ = try windows.GetFileAttributesW(path_w.span().ptr);
- return;
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return access(mem.sliceTo(path, 0), mode);
- }
- switch (errno(system.access(path, mode))) {
- .SUCCESS => return,
- .ACCES => return error.PermissionDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- .LOOP => return error.SymLinkLoop,
- .TXTBSY => return error.FileBusy,
- .NOTDIR => return error.FileNotFound,
- .NOENT => return error.FileNotFound,
- .NAMETOOLONG => return error.NameTooLong,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .IO => return error.InputOutput,
- .NOMEM => return error.SystemResources,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
/// Call from Windows-specific code if you already have a WTF-16LE encoded, null terminated string.
/// Otherwise use `access` or `accessZ`.
-/// TODO currently this ignores `mode`.
-pub fn accessW(path: [*:0]const u16, mode: u32) windows.GetFileAttributesError!void {
- _ = mode;
+pub fn accessW(path: [*:0]const u16) windows.GetFileAttributesError!void {
const ret = try windows.GetFileAttributesW(path);
if (ret != windows.INVALID_FILE_ATTRIBUTES) {
return;
@@ -4930,700 +69,6 @@ pub fn accessW(path: [*:0]const u16, mode: u32) windows.GetFileAttributesError!v
}
}
-/// Check user's permissions for a file, based on an open directory handle.
-/// On Windows, `path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On WASI, `path` should be encoded as valid UTF-8.
-/// On other platforms, `path` is an opaque sequence of bytes with no particular encoding.
-/// TODO currently this ignores `mode` and `flags` on Windows.
-pub fn faccessat(dirfd: fd_t, path: []const u8, mode: u32, flags: u32) AccessError!void {
- if (builtin.os.tag == .windows) {
- const path_w = try windows.sliceToPrefixedFileW(dirfd, path);
- return faccessatW(dirfd, path_w.span().ptr, mode, flags);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- const resolved: RelativePathWasi = .{ .dir_fd = dirfd, .relative_path = path };
-
- const st = blk: {
- break :blk fstatat_wasi(dirfd, path, .{
- .SYMLINK_FOLLOW = (flags & AT.SYMLINK_NOFOLLOW) == 0,
- });
- } catch |err| switch (err) {
- error.AccessDenied => return error.PermissionDenied,
- else => |e| return e,
- };
-
- if (mode != F_OK) {
- var directory: wasi.fdstat_t = undefined;
- if (wasi.fd_fdstat_get(resolved.dir_fd, &directory) != .SUCCESS) {
- return error.PermissionDenied;
- }
-
- var rights: wasi.rights_t = .{};
- if (mode & R_OK != 0) {
- if (st.filetype == .DIRECTORY) {
- rights.FD_READDIR = true;
- } else {
- rights.FD_READ = true;
- }
- }
- if (mode & W_OK != 0) {
- rights.FD_WRITE = true;
- }
- // No validation for X_OK
-
- // https://github.com/ziglang/zig/issues/18882
- const rights_int: u64 = @bitCast(rights);
- const inheriting_int: u64 = @bitCast(directory.fs_rights_inheriting);
- if ((rights_int & inheriting_int) != rights_int) {
- return error.PermissionDenied;
- }
- }
- return;
- }
- const path_c = try toPosixPath(path);
- return faccessatZ(dirfd, &path_c, mode, flags);
-}
-
-/// Same as `faccessat` except the path parameter is null-terminated.
-pub fn faccessatZ(dirfd: fd_t, path: [*:0]const u8, mode: u32, flags: u32) AccessError!void {
- if (builtin.os.tag == .windows) {
- const path_w = try windows.cStrToPrefixedFileW(dirfd, path);
- return faccessatW(dirfd, path_w.span().ptr, mode, flags);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return faccessat(dirfd, mem.sliceTo(path, 0), mode, flags);
- }
- switch (errno(system.faccessat(dirfd, path, mode, flags))) {
- .SUCCESS => return,
- .ACCES => return error.PermissionDenied,
- .ROFS => return error.ReadOnlyFileSystem,
- .LOOP => return error.SymLinkLoop,
- .TXTBSY => return error.FileBusy,
- .NOTDIR => return error.FileNotFound,
- .NOENT => return error.FileNotFound,
- .NAMETOOLONG => return error.NameTooLong,
- .INVAL => unreachable,
- .FAULT => unreachable,
- .IO => return error.InputOutput,
- .NOMEM => return error.SystemResources,
- .ILSEQ => |err| if (builtin.os.tag == .wasi)
- return error.InvalidUtf8
- else
- return unexpectedErrno(err),
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Same as `faccessat` except asserts the target is Windows and the path parameter
-/// is NtDll-prefixed, null-terminated, WTF-16 encoded.
-/// TODO currently this ignores `mode` and `flags`
-pub fn faccessatW(dirfd: fd_t, sub_path_w: [*:0]const u16, mode: u32, flags: u32) AccessError!void {
- _ = mode;
- _ = flags;
- if (sub_path_w[0] == '.' and sub_path_w[1] == 0) {
- return;
- }
- if (sub_path_w[0] == '.' and sub_path_w[1] == '.' and sub_path_w[2] == 0) {
- return;
- }
-
- const path_len_bytes = math.cast(u16, mem.sliceTo(sub_path_w, 0).len * 2) orelse return error.NameTooLong;
- var nt_name = windows.UNICODE_STRING{
- .Length = path_len_bytes,
- .MaximumLength = path_len_bytes,
- .Buffer = @constCast(sub_path_w),
- };
- var attr = windows.OBJECT_ATTRIBUTES{
- .Length = @sizeOf(windows.OBJECT_ATTRIBUTES),
- .RootDirectory = if (std.fs.path.isAbsoluteWindowsW(sub_path_w)) null else dirfd,
- .Attributes = 0, // Note we do not use OBJ_CASE_INSENSITIVE here.
- .ObjectName = &nt_name,
- .SecurityDescriptor = null,
- .SecurityQualityOfService = null,
- };
- var basic_info: windows.FILE_BASIC_INFORMATION = undefined;
- switch (windows.ntdll.NtQueryAttributesFile(&attr, &basic_info)) {
- .SUCCESS => return,
- .OBJECT_NAME_NOT_FOUND => return error.FileNotFound,
- .OBJECT_PATH_NOT_FOUND => return error.FileNotFound,
- .OBJECT_NAME_INVALID => unreachable,
- .INVALID_PARAMETER => unreachable,
- .ACCESS_DENIED => return error.PermissionDenied,
- .OBJECT_PATH_SYNTAX_BAD => unreachable,
- else => |rc| return windows.unexpectedStatus(rc),
- }
-}
-
-pub const PipeError = error{
- SystemFdQuotaExceeded,
- ProcessFdQuotaExceeded,
-} || UnexpectedError;
-
-/// Creates a unidirectional data channel that can be used for interprocess communication.
-pub fn pipe() PipeError![2]fd_t {
- var fds: [2]fd_t = undefined;
- switch (errno(system.pipe(&fds))) {
- .SUCCESS => return fds,
- .INVAL => unreachable, // Invalid parameters to pipe()
- .FAULT => unreachable, // Invalid fds pointer
- .NFILE => return error.SystemFdQuotaExceeded,
- .MFILE => return error.ProcessFdQuotaExceeded,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn pipe2(flags: O) PipeError![2]fd_t {
- if (@hasDecl(system, "pipe2")) {
- var fds: [2]fd_t = undefined;
- switch (errno(system.pipe2(&fds, flags))) {
- .SUCCESS => return fds,
- .INVAL => unreachable, // Invalid flags
- .FAULT => unreachable, // Invalid fds pointer
- .NFILE => return error.SystemFdQuotaExceeded,
- .MFILE => return error.ProcessFdQuotaExceeded,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- const fds: [2]fd_t = try pipe();
- errdefer {
- close(fds[0]);
- close(fds[1]);
- }
-
- // https://github.com/ziglang/zig/issues/18882
- if (@as(u32, @bitCast(flags)) == 0)
- return fds;
-
- // CLOEXEC is special, it's a file descriptor flag and must be set using
- // F.SETFD.
- if (flags.CLOEXEC) {
- for (fds) |fd| {
- switch (errno(system.fcntl(fd, F.SETFD, @as(u32, FD_CLOEXEC)))) {
- .SUCCESS => {},
- .INVAL => unreachable, // Invalid flags
- .BADF => unreachable, // Always a race condition
- else => |err| return unexpectedErrno(err),
- }
- }
- }
-
- const new_flags: u32 = f: {
- var new_flags = flags;
- new_flags.CLOEXEC = false;
- break :f @bitCast(new_flags);
- };
- // Set every other flag affecting the file status using F.SETFL.
- if (new_flags != 0) {
- for (fds) |fd| {
- switch (errno(system.fcntl(fd, F.SETFL, new_flags))) {
- .SUCCESS => {},
- .INVAL => unreachable, // Invalid flags
- .BADF => unreachable, // Always a race condition
- else => |err| return unexpectedErrno(err),
- }
- }
- }
-
- return fds;
-}
-
-pub const SysCtlError = error{
- PermissionDenied,
- SystemResources,
- NameTooLong,
- UnknownName,
-} || UnexpectedError;
-
-pub fn sysctl(
- name: []const c_int,
- oldp: ?*anyopaque,
- oldlenp: ?*usize,
- newp: ?*anyopaque,
- newlen: usize,
-) SysCtlError!void {
- if (builtin.os.tag == .wasi) {
- @panic("unsupported"); // TODO should be compile error, not panic
- }
- if (builtin.os.tag == .haiku) {
- @panic("unsupported"); // TODO should be compile error, not panic
- }
-
- const name_len = math.cast(c_uint, name.len) orelse return error.NameTooLong;
- switch (errno(system.sysctl(name.ptr, name_len, oldp, oldlenp, newp, newlen))) {
- .SUCCESS => return,
- .FAULT => unreachable,
- .PERM => return error.PermissionDenied,
- .NOMEM => return error.SystemResources,
- .NOENT => return error.UnknownName,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn sysctlbynameZ(
- name: [*:0]const u8,
- oldp: ?*anyopaque,
- oldlenp: ?*usize,
- newp: ?*anyopaque,
- newlen: usize,
-) SysCtlError!void {
- if (builtin.os.tag == .wasi) {
- @panic("unsupported"); // TODO should be compile error, not panic
- }
- if (builtin.os.tag == .haiku) {
- @panic("unsupported"); // TODO should be compile error, not panic
- }
-
- switch (errno(system.sysctlbyname(name, oldp, oldlenp, newp, newlen))) {
- .SUCCESS => return,
- .FAULT => unreachable,
- .PERM => return error.PermissionDenied,
- .NOMEM => return error.SystemResources,
- .NOENT => return error.UnknownName,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn gettimeofday(tv: ?*timeval, tz: ?*timezone) void {
- switch (errno(system.gettimeofday(tv, tz))) {
- .SUCCESS => return,
- .INVAL => unreachable,
- else => unreachable,
- }
-}
-
-pub const SeekError = error{
- Unseekable,
-
- /// In WASI, this error may occur when the file descriptor does
- /// not hold the required rights to seek on it.
- AccessDenied,
-} || UnexpectedError;
-
-/// Repositions read/write file offset relative to the beginning.
-pub fn lseek_SET(fd: fd_t, offset: u64) SeekError!void {
- if (builtin.os.tag == .linux and !builtin.link_libc and @sizeOf(usize) == 4) {
- var result: u64 = undefined;
- switch (errno(system.llseek(fd, offset, &result, SEEK.SET))) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
- }
- if (builtin.os.tag == .windows) {
- return windows.SetFilePointerEx_BEGIN(fd, offset);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var new_offset: wasi.filesize_t = undefined;
- switch (wasi.fd_seek(fd, @bitCast(offset), .SET, &new_offset)) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- const lseek_sym = if (lfs64_abi) system.lseek64 else system.lseek;
- switch (errno(lseek_sym(fd, @bitCast(offset), SEEK.SET))) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Repositions read/write file offset relative to the current offset.
-pub fn lseek_CUR(fd: fd_t, offset: i64) SeekError!void {
- if (builtin.os.tag == .linux and !builtin.link_libc and @sizeOf(usize) == 4) {
- var result: u64 = undefined;
- switch (errno(system.llseek(fd, @bitCast(offset), &result, SEEK.CUR))) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
- }
- if (builtin.os.tag == .windows) {
- return windows.SetFilePointerEx_CURRENT(fd, offset);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var new_offset: wasi.filesize_t = undefined;
- switch (wasi.fd_seek(fd, offset, .CUR, &new_offset)) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
- const lseek_sym = if (lfs64_abi) system.lseek64 else system.lseek;
- switch (errno(lseek_sym(fd, @bitCast(offset), SEEK.CUR))) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Repositions read/write file offset relative to the end.
-pub fn lseek_END(fd: fd_t, offset: i64) SeekError!void {
- if (builtin.os.tag == .linux and !builtin.link_libc and @sizeOf(usize) == 4) {
- var result: u64 = undefined;
- switch (errno(system.llseek(fd, @bitCast(offset), &result, SEEK.END))) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
- }
- if (builtin.os.tag == .windows) {
- return windows.SetFilePointerEx_END(fd, offset);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var new_offset: wasi.filesize_t = undefined;
- switch (wasi.fd_seek(fd, offset, .END, &new_offset)) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
- const lseek_sym = if (lfs64_abi) system.lseek64 else system.lseek;
- switch (errno(lseek_sym(fd, @bitCast(offset), SEEK.END))) {
- .SUCCESS => return,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Returns the read/write file offset relative to the beginning.
-pub fn lseek_CUR_get(fd: fd_t) SeekError!u64 {
- if (builtin.os.tag == .linux and !builtin.link_libc and @sizeOf(usize) == 4) {
- var result: u64 = undefined;
- switch (errno(system.llseek(fd, 0, &result, SEEK.CUR))) {
- .SUCCESS => return result,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
- }
- if (builtin.os.tag == .windows) {
- return windows.SetFilePointerEx_CURRENT_get(fd);
- }
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var new_offset: wasi.filesize_t = undefined;
- switch (wasi.fd_seek(fd, 0, .CUR, &new_offset)) {
- .SUCCESS => return new_offset,
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- .NOTCAPABLE => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
- const lseek_sym = if (lfs64_abi) system.lseek64 else system.lseek;
- const rc = lseek_sym(fd, 0, SEEK.CUR);
- switch (errno(rc)) {
- .SUCCESS => return @bitCast(rc),
- .BADF => unreachable, // always a race condition
- .INVAL => return error.Unseekable,
- .OVERFLOW => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- .NXIO => return error.Unseekable,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const FcntlError = error{
- PermissionDenied,
- FileBusy,
- ProcessFdQuotaExceeded,
- Locked,
- DeadLock,
- LockedRegionLimitExceeded,
-} || UnexpectedError;
-
-pub fn fcntl(fd: fd_t, cmd: i32, arg: usize) FcntlError!usize {
- while (true) {
- const rc = system.fcntl(fd, cmd, arg);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .INTR => continue,
- .AGAIN, .ACCES => return error.Locked,
- .BADF => unreachable,
- .BUSY => return error.FileBusy,
- .INVAL => unreachable, // invalid parameters
- .PERM => return error.PermissionDenied,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NOTDIR => unreachable, // invalid parameter
- .DEADLK => return error.DeadLock,
- .NOLCK => return error.LockedRegionLimitExceeded,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-fn setSockFlags(sock: socket_t, flags: u32) !void {
- if ((flags & SOCK.CLOEXEC) != 0) {
- if (builtin.os.tag == .windows) {
- // TODO: Find out if this is supported for sockets
- } else {
- var fd_flags = fcntl(sock, F.GETFD, 0) catch |err| switch (err) {
- error.FileBusy => unreachable,
- error.Locked => unreachable,
- error.PermissionDenied => unreachable,
- error.DeadLock => unreachable,
- error.LockedRegionLimitExceeded => unreachable,
- else => |e| return e,
- };
- fd_flags |= FD_CLOEXEC;
- _ = fcntl(sock, F.SETFD, fd_flags) catch |err| switch (err) {
- error.FileBusy => unreachable,
- error.Locked => unreachable,
- error.PermissionDenied => unreachable,
- error.DeadLock => unreachable,
- error.LockedRegionLimitExceeded => unreachable,
- else => |e| return e,
- };
- }
- }
- if ((flags & SOCK.NONBLOCK) != 0) {
- if (builtin.os.tag == .windows) {
- var mode: c_ulong = 1;
- if (windows.ws2_32.ioctlsocket(sock, windows.ws2_32.FIONBIO, &mode) == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAENOTSOCK => return error.FileDescriptorNotASocket,
- // TODO: handle more errors
- else => |err| return windows.unexpectedWSAError(err),
- }
- }
- } else {
- var fl_flags = fcntl(sock, F.GETFL, 0) catch |err| switch (err) {
- error.FileBusy => unreachable,
- error.Locked => unreachable,
- error.PermissionDenied => unreachable,
- error.DeadLock => unreachable,
- error.LockedRegionLimitExceeded => unreachable,
- else => |e| return e,
- };
- fl_flags |= 1 << @bitOffsetOf(O, "NONBLOCK");
- _ = fcntl(sock, F.SETFL, fl_flags) catch |err| switch (err) {
- error.FileBusy => unreachable,
- error.Locked => unreachable,
- error.PermissionDenied => unreachable,
- error.DeadLock => unreachable,
- error.LockedRegionLimitExceeded => unreachable,
- else => |e| return e,
- };
- }
- }
-}
-
-pub const FlockError = error{
- WouldBlock,
-
- /// The kernel ran out of memory for allocating file locks
- SystemResources,
-
- /// The underlying filesystem does not support file locks
- FileLocksNotSupported,
-} || UnexpectedError;
-
-/// Depending on the operating system `flock` may or may not interact with
-/// `fcntl` locks made by other processes.
-pub fn flock(fd: fd_t, operation: i32) FlockError!void {
- while (true) {
- const rc = system.flock(fd, operation);
- switch (errno(rc)) {
- .SUCCESS => return,
- .BADF => unreachable,
- .INTR => continue,
- .INVAL => unreachable, // invalid parameters
- .NOLCK => return error.SystemResources,
- .AGAIN => return error.WouldBlock, // TODO: integrate with async instead of just returning an error
- .OPNOTSUPP => return error.FileLocksNotSupported,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const RealPathError = error{
- FileNotFound,
- AccessDenied,
- NameTooLong,
- NotSupported,
- NotDir,
- SymLinkLoop,
- InputOutput,
- FileTooBig,
- IsDir,
- ProcessFdQuotaExceeded,
- SystemFdQuotaExceeded,
- NoDevice,
- SystemResources,
- NoSpaceLeft,
- FileSystem,
- BadPathName,
- DeviceBusy,
-
- SharingViolation,
- PipeBusy,
-
- /// Windows-only; file paths provided by the user must be valid WTF-8.
- /// https://simonsapin.github.io/wtf-8/
- InvalidWtf8,
-
- /// On Windows, `\\server` or `\\server\share` was not found.
- NetworkNotFound,
-
- PathAlreadyExists,
-
- /// On Windows, antivirus software is enabled by default. It can be
- /// disabled, but Windows Update sometimes ignores the user's preference
- /// and re-enables it. When enabled, antivirus software on Windows
- /// intercepts file system operations and makes them significantly slower
- /// in addition to possibly failing with this error code.
- AntivirusInterference,
-
- /// On Windows, the volume does not contain a recognized file system. File
- /// system drivers might not be loaded, or the volume may be corrupt.
- UnrecognizedVolume,
-} || UnexpectedError;
-
-/// Return the canonicalized absolute pathname.
-/// Expands all symbolic links and resolves references to `.`, `..`, and
-/// extra `/` characters in `pathname`.
-/// On Windows, `pathname` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On other platforms, `pathname` is an opaque sequence of bytes with no particular encoding.
-/// The return value is a slice of `out_buffer`, but not necessarily from the beginning.
-/// See also `realpathZ` and `realpathW`.
-/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
-/// Calling this function is usually a bug.
-pub fn realpath(pathname: []const u8, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
- if (builtin.os.tag == .windows) {
- const pathname_w = try windows.sliceToPrefixedFileW(null, pathname);
- return realpathW(pathname_w.span(), out_buffer);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- @compileError("WASI does not support os.realpath");
- }
- const pathname_c = try toPosixPath(pathname);
- return realpathZ(&pathname_c, out_buffer);
-}
-
-/// Same as `realpath` except `pathname` is null-terminated.
-/// Calling this function is usually a bug.
-pub fn realpathZ(pathname: [*:0]const u8, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
- if (builtin.os.tag == .windows) {
- const pathname_w = try windows.cStrToPrefixedFileW(null, pathname);
- return realpathW(pathname_w.span(), out_buffer);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
- return realpath(mem.sliceTo(pathname, 0), out_buffer);
- }
- if (!builtin.link_libc) {
- const flags: O = switch (builtin.os.tag) {
- .linux => .{
- .NONBLOCK = true,
- .CLOEXEC = true,
- .PATH = true,
- },
- else => .{
- .NONBLOCK = true,
- .CLOEXEC = true,
- },
- };
- const fd = openZ(pathname, flags, 0) catch |err| switch (err) {
- error.FileLocksNotSupported => unreachable,
- error.WouldBlock => unreachable,
- error.FileBusy => unreachable, // not asking for write permissions
- error.InvalidUtf8 => unreachable, // WASI-only
- else => |e| return e,
- };
- defer close(fd);
-
- return getFdPath(fd, out_buffer);
- }
- const result_path = std.c.realpath(pathname, out_buffer) orelse switch (@as(E, @enumFromInt(std.c._errno().*))) {
- .SUCCESS => unreachable,
- .INVAL => unreachable,
- .BADF => unreachable,
- .FAULT => unreachable,
- .ACCES => return error.AccessDenied,
- .NOENT => return error.FileNotFound,
- .OPNOTSUPP => return error.NotSupported,
- .NOTDIR => return error.NotDir,
- .NAMETOOLONG => return error.NameTooLong,
- .LOOP => return error.SymLinkLoop,
- .IO => return error.InputOutput,
- else => |err| return unexpectedErrno(err),
- };
- return mem.sliceTo(result_path, 0);
-}
-
-/// Same as `realpath` except `pathname` is WTF16LE-encoded.
-/// The result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// Calling this function is usually a bug.
-pub fn realpathW(pathname: []const u16, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
- const w = windows;
-
- const dir = std.fs.cwd().fd;
- const access_mask = w.GENERIC_READ | w.SYNCHRONIZE;
- const share_access = w.FILE_SHARE_READ;
- const creation = w.FILE_OPEN;
- const h_file = blk: {
- const res = w.OpenFile(pathname, .{
- .dir = dir,
- .access_mask = access_mask,
- .share_access = share_access,
- .creation = creation,
- .filter = .any,
- }) catch |err| switch (err) {
- error.WouldBlock => unreachable,
- else => |e| return e,
- };
- break :blk res;
- };
- defer w.CloseHandle(h_file);
-
- return getFdPath(h_file, out_buffer);
-}
-
pub fn isGetFdPathSupportedOnTarget(os: std.Target.Os) bool {
return switch (os.tag) {
.windows,
@@ -5644,13 +89,16 @@ pub fn isGetFdPathSupportedOnTarget(os: std.Target.Os) bool {
}
/// Return canonical path of handle `fd`.
+///
/// This function is very host-specific and is not universally supported by all hosts.
/// For example, while it generally works on Linux, macOS, FreeBSD or Windows, it is
/// unsupported on WASI.
-/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
-/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
+///
+/// * On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// * On other platforms, the result is an opaque sequence of bytes with no particular encoding.
+///
/// Calling this function is usually a bug.
-pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
+pub fn getFdPath(fd: std.posix.fd_t, out_buffer: *[MAX_PATH_BYTES]u8) std.posix.RealPathError![]u8 {
if (!comptime isGetFdPathSupportedOnTarget(builtin.os)) {
@compileError("querying for canonical path of a handle is unsupported on this host");
}
@@ -5666,13 +114,13 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
// On macOS, we can use F.GETPATH fcntl command to query the OS for
// the path to the file descriptor.
@memset(out_buffer[0..MAX_PATH_BYTES], 0);
- switch (errno(system.fcntl(fd, F.GETPATH, out_buffer))) {
+ switch (posix.errno(posix.system.fcntl(fd, posix.F.GETPATH, out_buffer))) {
.SUCCESS => {},
.BADF => return error.FileNotFound,
.NOSPC => return error.NameTooLong,
// TODO man pages for fcntl on macOS don't really tell you what
// errno values to expect when command is F.GETPATH...
- else => |err| return unexpectedErrno(err),
+ else => |err| return posix.unexpectedErrno(err),
}
const len = mem.indexOfScalar(u8, out_buffer[0..], 0) orelse MAX_PATH_BYTES;
return out_buffer[0..len];
@@ -5681,7 +129,7 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
var procfs_buf: ["/proc/self/fd/-2147483648\x00".len]u8 = undefined;
const proc_path = std.fmt.bufPrintZ(procfs_buf[0..], "/proc/self/fd/{d}", .{fd}) catch unreachable;
- const target = readlinkZ(proc_path, out_buffer) catch |err| {
+ const target = posix.readlinkZ(proc_path, out_buffer) catch |err| {
switch (err) {
error.NotLink => unreachable,
error.BadPathName => unreachable,
@@ -5698,7 +146,7 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
var procfs_buf: ["/proc/self/path/-2147483648\x00".len]u8 = undefined;
const proc_path = std.fmt.bufPrintZ(procfs_buf[0..], "/proc/self/path/{d}", .{fd}) catch unreachable;
- const target = readlinkZ(proc_path, out_buffer) catch |err| switch (err) {
+ const target = posix.readlinkZ(proc_path, out_buffer) catch |err| switch (err) {
error.UnsupportedReparsePointType => unreachable,
error.NotLink => unreachable,
else => |e| return e,
@@ -5707,12 +155,12 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
},
.freebsd => {
if (comptime builtin.os.isAtLeast(.freebsd, .{ .major = 13, .minor = 0, .patch = 0 }) orelse false) {
- var kfile: system.kinfo_file = undefined;
- kfile.structsize = system.KINFO_FILE_SIZE;
- switch (errno(system.fcntl(fd, system.F.KINFO, @intFromPtr(&kfile)))) {
+ var kfile: std.c.kinfo_file = undefined;
+ kfile.structsize = std.c.KINFO_FILE_SIZE;
+ switch (posix.errno(std.c.fcntl(fd, std.c.F.KINFO, @intFromPtr(&kfile)))) {
.SUCCESS => {},
.BADF => return error.FileNotFound,
- else => |err| return unexpectedErrno(err),
+ else => |err| return posix.unexpectedErrno(err),
}
const len = mem.indexOfScalar(u8, &kfile.path, 0) orelse MAX_PATH_BYTES;
if (len == 0) return error.NameTooLong;
@@ -5723,9 +171,9 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
// This fallback implementation reimplements libutil's `kinfo_getfile()`.
// The motivation is to avoid linking -lutil when building zig or general
// user executables.
- var mib = [4]c_int{ CTL.KERN, KERN.PROC, KERN.PROC_FILEDESC, system.getpid() };
+ var mib = [4]c_int{ posix.CTL.KERN, posix.KERN.PROC, posix.KERN.PROC_FILEDESC, std.c.getpid() };
var len: usize = undefined;
- sysctl(&mib, null, &len, null, 0) catch |err| switch (err) {
+ posix.sysctl(&mib, null, &len, null, 0) catch |err| switch (err) {
error.PermissionDenied => unreachable,
error.SystemResources => return error.SystemResources,
error.NameTooLong => unreachable,
@@ -5736,7 +184,7 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
const buf = std.heap.c_allocator.alloc(u8, len) catch return error.SystemResources;
defer std.heap.c_allocator.free(buf);
len = buf.len;
- sysctl(&mib, &buf[0], &len, null, 0) catch |err| switch (err) {
+ posix.sysctl(&mib, &buf[0], &len, null, 0) catch |err| switch (err) {
error.PermissionDenied => unreachable,
error.SystemResources => return error.SystemResources,
error.NameTooLong => unreachable,
@@ -5745,7 +193,7 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
};
var i: usize = 0;
while (i < len) {
- const kf: *align(1) system.kinfo_file = @ptrCast(&buf[i]);
+ const kf: *align(1) std.c.kinfo_file = @ptrCast(&buf[i]);
if (kf.fd == fd) {
len = mem.indexOfScalar(u8, &kf.path, 0) orelse MAX_PATH_BYTES;
if (len == 0) return error.NameTooLong;
@@ -5760,25 +208,25 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
},
.dragonfly => {
@memset(out_buffer[0..MAX_PATH_BYTES], 0);
- switch (errno(system.fcntl(fd, F.GETPATH, out_buffer))) {
+ switch (posix.errno(std.c.fcntl(fd, posix.F.GETPATH, out_buffer))) {
.SUCCESS => {},
.BADF => return error.FileNotFound,
.RANGE => return error.NameTooLong,
- else => |err| return unexpectedErrno(err),
+ else => |err| return posix.unexpectedErrno(err),
}
const len = mem.indexOfScalar(u8, out_buffer[0..], 0) orelse MAX_PATH_BYTES;
return out_buffer[0..len];
},
.netbsd => {
@memset(out_buffer[0..MAX_PATH_BYTES], 0);
- switch (errno(system.fcntl(fd, F.GETPATH, out_buffer))) {
+ switch (posix.errno(std.c.fcntl(fd, posix.F.GETPATH, out_buffer))) {
.SUCCESS => {},
.ACCES => return error.AccessDenied,
.BADF => return error.FileNotFound,
.NOENT => return error.FileNotFound,
.NOMEM => return error.SystemResources,
.RANGE => return error.NameTooLong,
- else => |err| return unexpectedErrno(err),
+ else => |err| return posix.unexpectedErrno(err),
}
const len = mem.indexOfScalar(u8, out_buffer[0..], 0) orelse MAX_PATH_BYTES;
return out_buffer[0..len];
@@ -5787,1908 +235,36 @@ pub fn getFdPath(fd: fd_t, out_buffer: *[MAX_PATH_BYTES]u8) RealPathError![]u8 {
}
}
-/// Spurious wakeups are possible and no precision of timing is guaranteed.
-pub fn nanosleep(seconds: u64, nanoseconds: u64) void {
- var req = timespec{
- .tv_sec = math.cast(isize, seconds) orelse math.maxInt(isize),
- .tv_nsec = math.cast(isize, nanoseconds) orelse math.maxInt(isize),
- };
- var rem: timespec = undefined;
- while (true) {
- switch (errno(system.nanosleep(&req, &rem))) {
- .FAULT => unreachable,
- .INVAL => {
- // Sometimes Darwin returns EINVAL for no reason.
- // We treat it as a spurious wakeup.
- return;
- },
- .INTR => {
- req = rem;
- continue;
- },
- // This prong handles success as well as unexpected errors.
- else => return,
- }
- }
-}
-
-pub fn dl_iterate_phdr(
- context: anytype,
- comptime Error: type,
- comptime callback: fn (info: *dl_phdr_info, size: usize, context: @TypeOf(context)) Error!void,
-) Error!void {
- const Context = @TypeOf(context);
-
- switch (builtin.object_format) {
- .elf, .c => {},
- else => @compileError("dl_iterate_phdr is not available for this target"),
- }
-
- if (builtin.link_libc) {
- switch (system.dl_iterate_phdr(struct {
- fn callbackC(info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int {
- const context_ptr: *const Context = @ptrCast(@alignCast(data));
- callback(info, size, context_ptr.*) catch |err| return @intFromError(err);
- return 0;
- }
- }.callbackC, @ptrCast(@constCast(&context)))) {
- 0 => return,
- else => |err| return @as(Error, @errorCast(@errorFromInt(@as(std.meta.Int(.unsigned, @bitSizeOf(anyerror)), @intCast(err))))),
- }
- }
-
- const elf_base = std.process.getBaseAddress();
- const ehdr: *elf.Ehdr = @ptrFromInt(elf_base);
- // Make sure the base address points to an ELF image.
- assert(mem.eql(u8, ehdr.e_ident[0..4], elf.MAGIC));
- const n_phdr = ehdr.e_phnum;
- const phdrs = (@as([*]elf.Phdr, @ptrFromInt(elf_base + ehdr.e_phoff)))[0..n_phdr];
-
- var it = dl.linkmap_iterator(phdrs) catch unreachable;
-
- // The executable has no dynamic link segment, create a single entry for
- // the whole ELF image.
- if (it.end()) {
- // Find the base address for the ELF image, if this is a PIE the value
- // is non-zero.
- const base_address = for (phdrs) |*phdr| {
- if (phdr.p_type == elf.PT_PHDR) {
- break @intFromPtr(phdrs.ptr) - phdr.p_vaddr;
- // We could try computing the difference between _DYNAMIC and
- // the p_vaddr of the PT_DYNAMIC section, but using the phdr is
- // good enough (Is it?).
- }
- } else unreachable;
-
- var info = dl_phdr_info{
- .dlpi_addr = base_address,
- .dlpi_name = "/proc/self/exe",
- .dlpi_phdr = phdrs.ptr,
- .dlpi_phnum = ehdr.e_phnum,
- };
-
- return callback(&info, @sizeOf(dl_phdr_info), context);
- }
-
- // Last return value from the callback function.
- while (it.next()) |entry| {
- var dlpi_phdr: [*]elf.Phdr = undefined;
- var dlpi_phnum: u16 = undefined;
-
- if (entry.l_addr != 0) {
- const elf_header: *elf.Ehdr = @ptrFromInt(entry.l_addr);
- dlpi_phdr = @ptrFromInt(entry.l_addr + elf_header.e_phoff);
- dlpi_phnum = elf_header.e_phnum;
- } else {
- // This is the running ELF image
- dlpi_phdr = @ptrFromInt(elf_base + ehdr.e_phoff);
- dlpi_phnum = ehdr.e_phnum;
- }
-
- var info = dl_phdr_info{
- .dlpi_addr = entry.l_addr,
- .dlpi_name = entry.l_name,
- .dlpi_phdr = dlpi_phdr,
- .dlpi_phnum = dlpi_phnum,
- };
-
- try callback(&info, @sizeOf(dl_phdr_info), context);
- }
-}
-
-pub const ClockGetTimeError = error{UnsupportedClock} || UnexpectedError;
-
-/// TODO: change this to return the timespec as a return value
-/// TODO: look into making clk_id an enum
-pub fn clock_gettime(clk_id: i32, tp: *timespec) ClockGetTimeError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var ts: timestamp_t = undefined;
- switch (system.clock_time_get(@bitCast(clk_id), 1, &ts)) {
- .SUCCESS => {
- tp.* = .{
- .tv_sec = @intCast(ts / std.time.ns_per_s),
- .tv_nsec = @intCast(ts % std.time.ns_per_s),
- };
- },
- .INVAL => return error.UnsupportedClock,
- else => |err| return unexpectedErrno(err),
- }
- return;
- }
- if (builtin.os.tag == .windows) {
- if (clk_id == CLOCK.REALTIME) {
- var ft: windows.FILETIME = undefined;
- windows.kernel32.GetSystemTimeAsFileTime(&ft);
- // FileTime has a granularity of 100 nanoseconds and uses the NTFS/Windows epoch.
- const ft64 = (@as(u64, ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
- const ft_per_s = std.time.ns_per_s / 100;
- tp.* = .{
- .tv_sec = @as(i64, @intCast(ft64 / ft_per_s)) + std.time.epoch.windows,
- .tv_nsec = @as(c_long, @intCast(ft64 % ft_per_s)) * 100,
- };
- return;
- } else {
- // TODO POSIX implementation of CLOCK.MONOTONIC on Windows.
- return error.UnsupportedClock;
- }
- }
-
- switch (errno(system.clock_gettime(clk_id, tp))) {
- .SUCCESS => return,
- .FAULT => unreachable,
- .INVAL => return error.UnsupportedClock,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub fn clock_getres(clk_id: i32, res: *timespec) ClockGetTimeError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- var ts: timestamp_t = undefined;
- switch (system.clock_res_get(@bitCast(clk_id), &ts)) {
- .SUCCESS => res.* = .{
- .tv_sec = @intCast(ts / std.time.ns_per_s),
- .tv_nsec = @intCast(ts % std.time.ns_per_s),
- },
- .INVAL => return error.UnsupportedClock,
- else => |err| return unexpectedErrno(err),
- }
- return;
- }
-
- switch (errno(system.clock_getres(clk_id, res))) {
- .SUCCESS => return,
- .FAULT => unreachable,
- .INVAL => return error.UnsupportedClock,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const SchedGetAffinityError = error{PermissionDenied} || UnexpectedError;
-
-pub fn sched_getaffinity(pid: pid_t) SchedGetAffinityError!cpu_set_t {
- var set: cpu_set_t = undefined;
- switch (errno(system.sched_getaffinity(pid, @sizeOf(cpu_set_t), &set))) {
- .SUCCESS => return set,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .SRCH => unreachable,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Used to convert a slice to a null terminated slice on the stack.
-/// TODO https://github.com/ziglang/zig/issues/287
-pub fn toPosixPath(file_path: []const u8) error{NameTooLong}![MAX_PATH_BYTES - 1:0]u8 {
- if (std.debug.runtime_safety) assert(std.mem.indexOfScalar(u8, file_path, 0) == null);
- var path_with_null: [MAX_PATH_BYTES - 1:0]u8 = undefined;
- // >= rather than > to make room for the null byte
- if (file_path.len >= MAX_PATH_BYTES) return error.NameTooLong;
- @memcpy(path_with_null[0..file_path.len], file_path);
- path_with_null[file_path.len] = 0;
- return path_with_null;
-}
-
-/// Whether or not error.Unexpected will print its value and a stack trace.
-/// if this happens the fix is to add the error code to the corresponding
-/// switch expression, possibly introduce a new error in the error set, and
-/// send a patch to Zig.
-pub const unexpected_error_tracing = builtin.zig_backend == .stage2_llvm and builtin.mode == .Debug;
-
-pub const UnexpectedError = error{
- /// The Operating System returned an undocumented error code.
- /// This error is in theory not possible, but it would be better
- /// to handle this error than to invoke undefined behavior.
- Unexpected,
-};
-
-/// Call this when you made a syscall or something that sets errno
-/// and you get an unexpected error.
-pub fn unexpectedErrno(err: E) UnexpectedError {
- if (unexpected_error_tracing) {
- std.debug.print("unexpected errno: {d}\n", .{@intFromEnum(err)});
- std.debug.dumpCurrentStackTrace(null);
- }
- return error.Unexpected;
-}
-
-pub const SigaltstackError = error{
- /// The supplied stack size was less than MINSIGSTKSZ.
- SizeTooSmall,
-
- /// Attempted to change the signal stack while it was active.
- PermissionDenied,
-} || UnexpectedError;
-
-pub fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) SigaltstackError!void {
- switch (errno(system.sigaltstack(ss, old_ss))) {
- .SUCCESS => return,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .NOMEM => return error.SizeTooSmall,
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Examine and change a signal action.
-pub fn sigaction(sig: u6, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) error{OperationNotSupported}!void {
- switch (errno(system.sigaction(sig, act, oact))) {
- .SUCCESS => return,
- .INVAL, .NOSYS => return error.OperationNotSupported,
- else => unreachable,
- }
-}
-
-/// Sets the thread signal mask.
-pub fn sigprocmask(flags: u32, noalias set: ?*const sigset_t, noalias oldset: ?*sigset_t) void {
- switch (errno(system.sigprocmask(@bitCast(flags), set, oldset))) {
- .SUCCESS => return,
- .FAULT => unreachable,
+/// WASI-only. Same as `fstatat` but targeting WASI.
+/// `pathname` should be encoded as valid UTF-8.
+/// See also `fstatat`.
+pub fn fstatat_wasi(dirfd: posix.fd_t, pathname: []const u8, flags: wasi.lookupflags_t) posix.FStatAtError!wasi.filestat_t {
+ var stat: wasi.filestat_t = undefined;
+ switch (wasi.path_filestat_get(dirfd, flags, pathname.ptr, pathname.len, &stat)) {
+ .SUCCESS => return stat,
.INVAL => unreachable,
- else => unreachable,
- }
-}
-
-pub const FutimensError = error{
- /// times is NULL, or both tv_nsec values are UTIME_NOW, and either:
- /// * the effective user ID of the caller does not match the owner
- /// of the file, the caller does not have write access to the
- /// file, and the caller is not privileged (Linux: does not have
- /// either the CAP_FOWNER or the CAP_DAC_OVERRIDE capability);
- /// or,
- /// * the file is marked immutable (see chattr(1)).
- AccessDenied,
-
- /// The caller attempted to change one or both timestamps to a value
- /// other than the current time, or to change one of the timestamps
- /// to the current time while leaving the other timestamp unchanged,
- /// (i.e., times is not NULL, neither tv_nsec field is UTIME_NOW,
- /// and neither tv_nsec field is UTIME_OMIT) and either:
- /// * the caller's effective user ID does not match the owner of
- /// file, and the caller is not privileged (Linux: does not have
- /// the CAP_FOWNER capability); or,
- /// * the file is marked append-only or immutable (see chattr(1)).
- PermissionDenied,
-
- ReadOnlyFileSystem,
-} || UnexpectedError;
-
-pub fn futimens(fd: fd_t, times: *const [2]timespec) FutimensError!void {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
- // TODO WASI encodes `wasi.fstflags` to signify magic values
- // similar to UTIME_NOW and UTIME_OMIT. Currently, we ignore
- // this here, but we should really handle it somehow.
- const atim = times[0].toTimestamp();
- const mtim = times[1].toTimestamp();
- switch (wasi.fd_filestat_set_times(fd, atim, mtim, .{
- .ATIM = true,
- .MTIM = true,
- })) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .PERM => return error.PermissionDenied,
- .BADF => unreachable, // always a race condition
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ROFS => return error.ReadOnlyFileSystem,
- else => |err| return unexpectedErrno(err),
- }
- }
-
- switch (errno(system.futimens(fd, times))) {
- .SUCCESS => return,
+ .BADF => unreachable, // Always a race condition.
+ .NOMEM => return error.SystemResources,
.ACCES => return error.AccessDenied,
- .PERM => return error.PermissionDenied,
- .BADF => unreachable, // always a race condition
- .FAULT => unreachable,
- .INVAL => unreachable,
- .ROFS => return error.ReadOnlyFileSystem,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const GetHostNameError = error{PermissionDenied} || UnexpectedError;
-
-pub fn gethostname(name_buffer: *[HOST_NAME_MAX]u8) GetHostNameError![]u8 {
- if (builtin.link_libc) {
- switch (errno(system.gethostname(name_buffer, name_buffer.len))) {
- .SUCCESS => return mem.sliceTo(name_buffer, 0),
- .FAULT => unreachable,
- .NAMETOOLONG => unreachable, // HOST_NAME_MAX prevents this
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
- }
- if (builtin.os.tag == .linux) {
- const uts = uname();
- const hostname = mem.sliceTo(&uts.nodename, 0);
- const result = name_buffer[0..hostname.len];
- @memcpy(result, hostname);
- return result;
- }
-
- @compileError("TODO implement gethostname for this OS");
-}
-
-pub fn uname() utsname {
- var uts: utsname = undefined;
- switch (errno(system.uname(&uts))) {
- .SUCCESS => return uts,
- .FAULT => unreachable,
- else => unreachable,
- }
-}
-
-pub fn res_mkquery(
- op: u4,
- dname: []const u8,
- class: u8,
- ty: u8,
- data: []const u8,
- newrr: ?[*]const u8,
- buf: []u8,
-) usize {
- _ = data;
- _ = newrr;
- // This implementation is ported from musl libc.
- // A more idiomatic "ziggy" implementation would be welcome.
- var name = dname;
- if (mem.endsWith(u8, name, ".")) name.len -= 1;
- assert(name.len <= 253);
- const n = 17 + name.len + @intFromBool(name.len != 0);
-
- // Construct query template - ID will be filled later
- var q: [280]u8 = undefined;
- @memset(q[0..n], 0);
- q[2] = @as(u8, op) * 8 + 1;
- q[5] = 1;
- @memcpy(q[13..][0..name.len], name);
- var i: usize = 13;
- var j: usize = undefined;
- while (q[i] != 0) : (i = j + 1) {
- j = i;
- while (q[j] != 0 and q[j] != '.') : (j += 1) {}
- // TODO determine the circumstances for this and whether or
- // not this should be an error.
- if (j - i - 1 > 62) unreachable;
- q[i - 1] = @intCast(j - i);
- }
- q[i + 1] = ty;
- q[i + 3] = class;
-
- // Make a reasonably unpredictable id
- var ts: timespec = undefined;
- clock_gettime(CLOCK.REALTIME, &ts) catch {};
- const UInt = std.meta.Int(.unsigned, @bitSizeOf(@TypeOf(ts.tv_nsec)));
- const unsec: UInt = @bitCast(ts.tv_nsec);
- const id: u32 = @truncate(unsec + unsec / 65536);
- q[0] = @truncate(id / 256);
- q[1] = @truncate(id);
-
- @memcpy(buf[0..n], q[0..n]);
- return n;
-}
-
-pub const SendError = error{
- /// (For UNIX domain sockets, which are identified by pathname) Write permission is denied
- /// on the destination socket file, or search permission is denied for one of the
- /// directories the path prefix. (See path_resolution(7).)
- /// (For UDP sockets) An attempt was made to send to a network/broadcast address as though
- /// it was a unicast address.
- AccessDenied,
-
- /// The socket is marked nonblocking and the requested operation would block, and
- /// there is no global event loop configured.
- /// It's also possible to get this error under the following condition:
- /// (Internet domain datagram sockets) The socket referred to by sockfd had not previously
- /// been bound to an address and, upon attempting to bind it to an ephemeral port, it was
- /// determined that all port numbers in the ephemeral port range are currently in use. See
- /// the discussion of /proc/sys/net/ipv4/ip_local_port_range in ip(7).
- WouldBlock,
-
- /// Another Fast Open is already in progress.
- FastOpenAlreadyInProgress,
-
- /// Connection reset by peer.
- ConnectionResetByPeer,
-
- /// The socket type requires that message be sent atomically, and the size of the message
- /// to be sent made this impossible. The message is not transmitted.
- MessageTooBig,
-
- /// The output queue for a network interface was full. This generally indicates that the
- /// interface has stopped sending, but may be caused by transient congestion. (Normally,
- /// this does not occur in Linux. Packets are just silently dropped when a device queue
- /// overflows.)
- /// This is also caused when there is not enough kernel memory available.
- SystemResources,
-
- /// The local end has been shut down on a connection oriented socket. In this case, the
- /// process will also receive a SIGPIPE unless MSG.NOSIGNAL is set.
- BrokenPipe,
-
- FileDescriptorNotASocket,
-
- /// Network is unreachable.
- NetworkUnreachable,
-
- /// The local network interface used to reach the destination is down.
- NetworkSubsystemFailed,
-} || UnexpectedError;
-
-pub const SendMsgError = SendError || error{
- /// The passed address didn't have the correct address family in its sa_family field.
- AddressFamilyNotSupported,
-
- /// Returned when socket is AF.UNIX and the given path has a symlink loop.
- SymLinkLoop,
-
- /// Returned when socket is AF.UNIX and the given path length exceeds `MAX_PATH_BYTES` bytes.
- NameTooLong,
-
- /// Returned when socket is AF.UNIX and the given path does not point to an existing file.
- FileNotFound,
- NotDir,
-
- /// The socket is not connected (connection-oriented sockets only).
- SocketNotConnected,
- AddressNotAvailable,
-};
-
-pub fn sendmsg(
- /// The file descriptor of the sending socket.
- sockfd: socket_t,
- /// Message header and iovecs
- msg: *const msghdr_const,
- flags: u32,
-) SendMsgError!usize {
- while (true) {
- const rc = system.sendmsg(sockfd, msg, flags);
- if (builtin.os.tag == .windows) {
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSAEACCES => return error.AccessDenied,
- .WSAEADDRNOTAVAIL => return error.AddressNotAvailable,
- .WSAECONNRESET => return error.ConnectionResetByPeer,
- .WSAEMSGSIZE => return error.MessageTooBig,
- .WSAENOBUFS => return error.SystemResources,
- .WSAENOTSOCK => return error.FileDescriptorNotASocket,
- .WSAEAFNOSUPPORT => return error.AddressFamilyNotSupported,
- .WSAEDESTADDRREQ => unreachable, // A destination address is required.
- .WSAEFAULT => unreachable, // The lpBuffers, lpTo, lpOverlapped, lpNumberOfBytesSent, or lpCompletionRoutine parameters are not part of the user address space, or the lpTo parameter is too small.
- .WSAEHOSTUNREACH => return error.NetworkUnreachable,
- // TODO: WSAEINPROGRESS, WSAEINTR
- .WSAEINVAL => unreachable,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAENETRESET => return error.ConnectionResetByPeer,
- .WSAENETUNREACH => return error.NetworkUnreachable,
- .WSAENOTCONN => return error.SocketNotConnected,
- .WSAESHUTDOWN => unreachable, // The socket has been shut down; it is not possible to WSASendTo on a socket after shutdown has been invoked with how set to SD_SEND or SD_BOTH.
- .WSAEWOULDBLOCK => return error.WouldBlock,
- .WSANOTINITIALISED => unreachable, // A successful WSAStartup call must occur before using this function.
- else => |err| return windows.unexpectedWSAError(err),
- }
- } else {
- return @intCast(rc);
- }
- } else {
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
-
- .ACCES => return error.AccessDenied,
- .AGAIN => return error.WouldBlock,
- .ALREADY => return error.FastOpenAlreadyInProgress,
- .BADF => unreachable, // always a race condition
- .CONNRESET => return error.ConnectionResetByPeer,
- .DESTADDRREQ => unreachable, // The socket is not connection-mode, and no peer address is set.
- .FAULT => unreachable, // An invalid user space address was specified for an argument.
- .INTR => continue,
- .INVAL => unreachable, // Invalid argument passed.
- .ISCONN => unreachable, // connection-mode socket was connected already but a recipient was specified
- .MSGSIZE => return error.MessageTooBig,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
- .OPNOTSUPP => unreachable, // Some bit in the flags argument is inappropriate for the socket type.
- .PIPE => return error.BrokenPipe,
- .AFNOSUPPORT => return error.AddressFamilyNotSupported,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .HOSTUNREACH => return error.NetworkUnreachable,
- .NETUNREACH => return error.NetworkUnreachable,
- .NOTCONN => return error.SocketNotConnected,
- .NETDOWN => return error.NetworkSubsystemFailed,
- else => |err| return unexpectedErrno(err),
- }
- }
- }
-}
-
-pub const SendToError = SendMsgError || error{
- /// The destination address is not reachable by the bound address.
- UnreachableAddress,
-};
-
-/// Transmit a message to another socket.
-///
-/// The `sendto` call may be used only when the socket is in a connected state (so that the intended
-/// recipient is known). The following call
-///
-/// send(sockfd, buf, len, flags);
-///
-/// is equivalent to
-///
-/// sendto(sockfd, buf, len, flags, NULL, 0);
-///
-/// If sendto() is used on a connection-mode (`SOCK.STREAM`, `SOCK.SEQPACKET`) socket, the arguments
-/// `dest_addr` and `addrlen` are asserted to be `null` and `0` respectively, and asserted
-/// that the socket was actually connected.
-/// Otherwise, the address of the target is given by `dest_addr` with `addrlen` specifying its size.
-///
-/// If the message is too long to pass atomically through the underlying protocol,
-/// `SendError.MessageTooBig` is returned, and the message is not transmitted.
-///
-/// There is no indication of failure to deliver.
-///
-/// When the message does not fit into the send buffer of the socket, `sendto` normally blocks,
-/// unless the socket has been placed in nonblocking I/O mode. In nonblocking mode it would fail
-/// with `SendError.WouldBlock`. The `select` call may be used to determine when it is
-/// possible to send more data.
-pub fn sendto(
- /// The file descriptor of the sending socket.
- sockfd: socket_t,
- /// Message to send.
- buf: []const u8,
- flags: u32,
- dest_addr: ?*const sockaddr,
- addrlen: socklen_t,
-) SendToError!usize {
- if (builtin.os.tag == .windows) {
- switch (windows.sendto(sockfd, buf.ptr, buf.len, flags, dest_addr, addrlen)) {
- windows.ws2_32.SOCKET_ERROR => switch (windows.ws2_32.WSAGetLastError()) {
- .WSAEACCES => return error.AccessDenied,
- .WSAEADDRNOTAVAIL => return error.AddressNotAvailable,
- .WSAECONNRESET => return error.ConnectionResetByPeer,
- .WSAEMSGSIZE => return error.MessageTooBig,
- .WSAENOBUFS => return error.SystemResources,
- .WSAENOTSOCK => return error.FileDescriptorNotASocket,
- .WSAEAFNOSUPPORT => return error.AddressFamilyNotSupported,
- .WSAEDESTADDRREQ => unreachable, // A destination address is required.
- .WSAEFAULT => unreachable, // The lpBuffers, lpTo, lpOverlapped, lpNumberOfBytesSent, or lpCompletionRoutine parameters are not part of the user address space, or the lpTo parameter is too small.
- .WSAEHOSTUNREACH => return error.NetworkUnreachable,
- // TODO: WSAEINPROGRESS, WSAEINTR
- .WSAEINVAL => unreachable,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAENETRESET => return error.ConnectionResetByPeer,
- .WSAENETUNREACH => return error.NetworkUnreachable,
- .WSAENOTCONN => return error.SocketNotConnected,
- .WSAESHUTDOWN => unreachable, // The socket has been shut down; it is not possible to WSASendTo on a socket after shutdown has been invoked with how set to SD_SEND or SD_BOTH.
- .WSAEWOULDBLOCK => return error.WouldBlock,
- .WSANOTINITIALISED => unreachable, // A successful WSAStartup call must occur before using this function.
- else => |err| return windows.unexpectedWSAError(err),
- },
- else => |rc| return @intCast(rc),
- }
- }
- while (true) {
- const rc = system.sendto(sockfd, buf.ptr, buf.len, flags, dest_addr, addrlen);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
-
- .ACCES => return error.AccessDenied,
- .AGAIN => return error.WouldBlock,
- .ALREADY => return error.FastOpenAlreadyInProgress,
- .BADF => unreachable, // always a race condition
- .CONNRESET => return error.ConnectionResetByPeer,
- .DESTADDRREQ => unreachable, // The socket is not connection-mode, and no peer address is set.
- .FAULT => unreachable, // An invalid user space address was specified for an argument.
- .INTR => continue,
- .INVAL => return error.UnreachableAddress,
- .ISCONN => unreachable, // connection-mode socket was connected already but a recipient was specified
- .MSGSIZE => return error.MessageTooBig,
- .NOBUFS => return error.SystemResources,
- .NOMEM => return error.SystemResources,
- .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
- .OPNOTSUPP => unreachable, // Some bit in the flags argument is inappropriate for the socket type.
- .PIPE => return error.BrokenPipe,
- .AFNOSUPPORT => return error.AddressFamilyNotSupported,
- .LOOP => return error.SymLinkLoop,
- .NAMETOOLONG => return error.NameTooLong,
- .NOENT => return error.FileNotFound,
- .NOTDIR => return error.NotDir,
- .HOSTUNREACH => return error.NetworkUnreachable,
- .NETUNREACH => return error.NetworkUnreachable,
- .NOTCONN => return error.SocketNotConnected,
- .NETDOWN => return error.NetworkSubsystemFailed,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-/// Transmit a message to another socket.
-///
-/// The `send` call may be used only when the socket is in a connected state (so that the intended
-/// recipient is known). The only difference between `send` and `write` is the presence of
-/// flags. With a zero flags argument, `send` is equivalent to `write`. Also, the following
-/// call
-///
-/// send(sockfd, buf, len, flags);
-///
-/// is equivalent to
-///
-/// sendto(sockfd, buf, len, flags, NULL, 0);
-///
-/// There is no indication of failure to deliver.
-///
-/// When the message does not fit into the send buffer of the socket, `send` normally blocks,
-/// unless the socket has been placed in nonblocking I/O mode. In nonblocking mode it would fail
-/// with `SendError.WouldBlock`. The `select` call may be used to determine when it is
-/// possible to send more data.
-pub fn send(
- /// The file descriptor of the sending socket.
- sockfd: socket_t,
- buf: []const u8,
- flags: u32,
-) SendError!usize {
- return sendto(sockfd, buf, flags, null, 0) catch |err| switch (err) {
- error.AddressFamilyNotSupported => unreachable,
- error.SymLinkLoop => unreachable,
- error.NameTooLong => unreachable,
- error.FileNotFound => unreachable,
- error.NotDir => unreachable,
- error.NetworkUnreachable => unreachable,
- error.AddressNotAvailable => unreachable,
- error.SocketNotConnected => unreachable,
- error.UnreachableAddress => unreachable,
- else => |e| return e,
- };
-}
-
-pub const SendFileError = PReadError || WriteError || SendError;
-
-fn count_iovec_bytes(iovs: []const iovec_const) usize {
- var count: usize = 0;
- for (iovs) |iov| {
- count += iov.iov_len;
- }
- return count;
-}
-
-/// Transfer data between file descriptors, with optional headers and trailers.
-/// Returns the number of bytes written, which can be zero.
-///
-/// The `sendfile` call copies `in_len` bytes from one file descriptor to another. When possible,
-/// this is done within the operating system kernel, which can provide better performance
-/// characteristics than transferring data from kernel to user space and back, such as with
-/// `read` and `write` calls. When `in_len` is `0`, it means to copy until the end of the input file has been
-/// reached. Note, however, that partial writes are still possible in this case.
-///
-/// `in_fd` must be a file descriptor opened for reading, and `out_fd` must be a file descriptor
-/// opened for writing. They may be any kind of file descriptor; however, if `in_fd` is not a regular
-/// file system file, it may cause this function to fall back to calling `read` and `write`, in which case
-/// atomicity guarantees no longer apply.
-///
-/// Copying begins reading at `in_offset`. The input file descriptor seek position is ignored and not updated.
-/// If the output file descriptor has a seek position, it is updated as bytes are written. When
-/// `in_offset` is past the end of the input file, it successfully reads 0 bytes.
-///
-/// `flags` has different meanings per operating system; refer to the respective man pages.
-///
-/// These systems support atomically sending everything, including headers and trailers:
-/// * macOS
-/// * FreeBSD
-///
-/// These systems support in-kernel data copying, but headers and trailers are not sent atomically:
-/// * Linux
-///
-/// Other systems fall back to calling `read` / `write`.
-///
-/// Linux has a limit on how many bytes may be transferred in one `sendfile` call, which is `0x7ffff000`
-/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
-/// well as stuffing the errno codes into the last `4096` values. This is noted on the `sendfile` man page.
-/// The limit on Darwin is `0x7fffffff`, trying to write more than that returns EINVAL.
-/// The corresponding POSIX limit on this is `math.maxInt(isize)`.
-pub fn sendfile(
- out_fd: fd_t,
- in_fd: fd_t,
- in_offset: u64,
- in_len: u64,
- headers: []const iovec_const,
- trailers: []const iovec_const,
- flags: u32,
-) SendFileError!usize {
- var header_done = false;
- var total_written: usize = 0;
-
- // Prevents EOVERFLOW.
- const size_t = std.meta.Int(.unsigned, @typeInfo(usize).Int.bits - 1);
- const max_count = switch (builtin.os.tag) {
- .linux => 0x7ffff000,
- .macos, .ios, .watchos, .tvos => math.maxInt(i32),
- else => math.maxInt(size_t),
- };
-
- switch (builtin.os.tag) {
- .linux => sf: {
- // sendfile() first appeared in Linux 2.2, glibc 2.1.
- const call_sf = comptime if (builtin.link_libc)
- std.c.versionCheck(.{ .major = 2, .minor = 1, .patch = 0 })
- else
- builtin.os.version_range.linux.range.max.order(.{ .major = 2, .minor = 2, .patch = 0 }) != .lt;
- if (!call_sf) break :sf;
-
- if (headers.len != 0) {
- const amt = try writev(out_fd, headers);
- total_written += amt;
- if (amt < count_iovec_bytes(headers)) return total_written;
- header_done = true;
- }
-
- // Here we match BSD behavior, making a zero count value send as many bytes as possible.
- const adjusted_count = if (in_len == 0) max_count else @min(in_len, max_count);
-
- const sendfile_sym = if (lfs64_abi) system.sendfile64 else system.sendfile;
- while (true) {
- var offset: off_t = @bitCast(in_offset);
- const rc = sendfile_sym(out_fd, in_fd, &offset, adjusted_count);
- switch (errno(rc)) {
- .SUCCESS => {
- const amt: usize = @bitCast(rc);
- total_written += amt;
- if (in_len == 0 and amt == 0) {
- // We have detected EOF from `in_fd`.
- break;
- } else if (amt < in_len) {
- return total_written;
- } else {
- break;
- }
- },
-
- .BADF => unreachable, // Always a race condition.
- .FAULT => unreachable, // Segmentation fault.
- .OVERFLOW => unreachable, // We avoid passing too large of a `count`.
- .NOTCONN => return error.BrokenPipe, // `out_fd` is an unconnected socket
-
- .INVAL, .NOSYS => {
- // EINVAL could be any of the following situations:
- // * Descriptor is not valid or locked
- // * an mmap(2)-like operation is not available for in_fd
- // * count is negative
- // * out_fd has the APPEND flag set
- // Because of the "mmap(2)-like operation" possibility, we fall back to doing read/write
- // manually, the same as ENOSYS.
- break :sf;
- },
- .AGAIN => return error.WouldBlock,
- .IO => return error.InputOutput,
- .PIPE => return error.BrokenPipe,
- .NOMEM => return error.SystemResources,
- .NXIO => return error.Unseekable,
- .SPIPE => return error.Unseekable,
- else => |err| {
- unexpectedErrno(err) catch {};
- break :sf;
- },
- }
- }
-
- if (trailers.len != 0) {
- total_written += try writev(out_fd, trailers);
- }
-
- return total_written;
- },
- .freebsd => sf: {
- var hdtr_data: std.c.sf_hdtr = undefined;
- var hdtr: ?*std.c.sf_hdtr = null;
- if (headers.len != 0 or trailers.len != 0) {
- // Here we carefully avoid `@intCast` by returning partial writes when
- // too many io vectors are provided.
- const hdr_cnt = math.cast(u31, headers.len) orelse math.maxInt(u31);
- if (headers.len > hdr_cnt) return writev(out_fd, headers);
-
- const trl_cnt = math.cast(u31, trailers.len) orelse math.maxInt(u31);
-
- hdtr_data = std.c.sf_hdtr{
- .headers = headers.ptr,
- .hdr_cnt = hdr_cnt,
- .trailers = trailers.ptr,
- .trl_cnt = trl_cnt,
- };
- hdtr = &hdtr_data;
- }
-
- while (true) {
- var sbytes: off_t = undefined;
- const err = errno(system.sendfile(in_fd, out_fd, @bitCast(in_offset), @min(in_len, max_count), hdtr, &sbytes, flags));
- const amt: usize = @bitCast(sbytes);
- switch (err) {
- .SUCCESS => return amt,
-
- .BADF => unreachable, // Always a race condition.
- .FAULT => unreachable, // Segmentation fault.
- .NOTCONN => return error.BrokenPipe, // `out_fd` is an unconnected socket
-
- .INVAL, .OPNOTSUPP, .NOTSOCK, .NOSYS => {
- // EINVAL could be any of the following situations:
- // * The fd argument is not a regular file.
- // * The s argument is not a SOCK.STREAM type socket.
- // * The offset argument is negative.
- // Because of some of these possibilities, we fall back to doing read/write
- // manually, the same as ENOSYS.
- break :sf;
- },
-
- .INTR => if (amt != 0) return amt else continue,
-
- .AGAIN => if (amt != 0) {
- return amt;
- } else {
- return error.WouldBlock;
- },
-
- .BUSY => if (amt != 0) {
- return amt;
- } else {
- return error.WouldBlock;
- },
-
- .IO => return error.InputOutput,
- .NOBUFS => return error.SystemResources,
- .PIPE => return error.BrokenPipe,
-
- else => {
- unexpectedErrno(err) catch {};
- if (amt != 0) {
- return amt;
- } else {
- break :sf;
- }
- },
- }
- }
- },
- .macos, .ios, .tvos, .watchos => sf: {
- var hdtr_data: std.c.sf_hdtr = undefined;
- var hdtr: ?*std.c.sf_hdtr = null;
- if (headers.len != 0 or trailers.len != 0) {
- // Here we carefully avoid `@intCast` by returning partial writes when
- // too many io vectors are provided.
- const hdr_cnt = math.cast(u31, headers.len) orelse math.maxInt(u31);
- if (headers.len > hdr_cnt) return writev(out_fd, headers);
-
- const trl_cnt = math.cast(u31, trailers.len) orelse math.maxInt(u31);
-
- hdtr_data = std.c.sf_hdtr{
- .headers = headers.ptr,
- .hdr_cnt = hdr_cnt,
- .trailers = trailers.ptr,
- .trl_cnt = trl_cnt,
- };
- hdtr = &hdtr_data;
- }
-
- while (true) {
- var sbytes: off_t = @min(in_len, max_count);
- const err = errno(system.sendfile(in_fd, out_fd, @bitCast(in_offset), &sbytes, hdtr, flags));
- const amt: usize = @bitCast(sbytes);
- switch (err) {
- .SUCCESS => return amt,
-
- .BADF => unreachable, // Always a race condition.
- .FAULT => unreachable, // Segmentation fault.
- .INVAL => unreachable,
- .NOTCONN => return error.BrokenPipe, // `out_fd` is an unconnected socket
-
- .OPNOTSUPP, .NOTSOCK, .NOSYS => break :sf,
-
- .INTR => if (amt != 0) return amt else continue,
-
- .AGAIN => if (amt != 0) {
- return amt;
- } else {
- return error.WouldBlock;
- },
-
- .IO => return error.InputOutput,
- .PIPE => return error.BrokenPipe,
-
- else => {
- unexpectedErrno(err) catch {};
- if (amt != 0) {
- return amt;
- } else {
- break :sf;
- }
- },
- }
- }
- },
- else => {}, // fall back to read/write
- }
-
- if (headers.len != 0 and !header_done) {
- const amt = try writev(out_fd, headers);
- total_written += amt;
- if (amt < count_iovec_bytes(headers)) return total_written;
- }
-
- rw: {
- var buf: [8 * 4096]u8 = undefined;
- // Here we match BSD behavior, making a zero count value send as many bytes as possible.
- const adjusted_count = if (in_len == 0) buf.len else @min(buf.len, in_len);
- const amt_read = try pread(in_fd, buf[0..adjusted_count], in_offset);
- if (amt_read == 0) {
- if (in_len == 0) {
- // We have detected EOF from `in_fd`.
- break :rw;
- } else {
- return total_written;
- }
- }
- const amt_written = try write(out_fd, buf[0..amt_read]);
- total_written += amt_written;
- if (amt_written < in_len or in_len == 0) return total_written;
- }
-
- if (trailers.len != 0) {
- total_written += try writev(out_fd, trailers);
- }
-
- return total_written;
-}
-
-pub const CopyFileRangeError = error{
- FileTooBig,
- InputOutput,
- /// `fd_in` is not open for reading; or `fd_out` is not open for writing;
- /// or the `APPEND` flag is set for `fd_out`.
- FilesOpenedWithWrongFlags,
- IsDir,
- OutOfMemory,
- NoSpaceLeft,
- Unseekable,
- PermissionDenied,
- SwapFile,
- CorruptedData,
-} || PReadError || PWriteError || UnexpectedError;
-
-var has_copy_file_range_syscall = std.atomic.Value(bool).init(true);
-
-/// Transfer data between file descriptors at specified offsets.
-/// Returns the number of bytes written, which can less than requested.
-///
-/// The `copy_file_range` call copies `len` bytes from one file descriptor to another. When possible,
-/// this is done within the operating system kernel, which can provide better performance
-/// characteristics than transferring data from kernel to user space and back, such as with
-/// `pread` and `pwrite` calls.
-///
-/// `fd_in` must be a file descriptor opened for reading, and `fd_out` must be a file descriptor
-/// opened for writing. They may be any kind of file descriptor; however, if `fd_in` is not a regular
-/// file system file, it may cause this function to fall back to calling `pread` and `pwrite`, in which case
-/// atomicity guarantees no longer apply.
-///
-/// If `fd_in` and `fd_out` are the same, source and target ranges must not overlap.
-/// The file descriptor seek positions are ignored and not updated.
-/// When `off_in` is past the end of the input file, it successfully reads 0 bytes.
-///
-/// `flags` has different meanings per operating system; refer to the respective man pages.
-///
-/// These systems support in-kernel data copying:
-/// * Linux 4.5 (cross-filesystem 5.3)
-/// * FreeBSD 13.0
-///
-/// Other systems fall back to calling `pread` / `pwrite`.
-///
-/// Maximum offsets on Linux and FreeBSD are `math.maxInt(i64)`.
-pub fn copy_file_range(fd_in: fd_t, off_in: u64, fd_out: fd_t, off_out: u64, len: usize, flags: u32) CopyFileRangeError!usize {
- if ((comptime builtin.os.isAtLeast(.freebsd, .{ .major = 13, .minor = 0, .patch = 0 }) orelse false) or
- ((comptime builtin.os.isAtLeast(.linux, .{ .major = 4, .minor = 5, .patch = 0 }) orelse false and
- std.c.versionCheck(.{ .major = 2, .minor = 27, .patch = 0 })) and
- has_copy_file_range_syscall.load(.monotonic)))
- {
- var off_in_copy: i64 = @bitCast(off_in);
- var off_out_copy: i64 = @bitCast(off_out);
-
- while (true) {
- const rc = system.copy_file_range(fd_in, &off_in_copy, fd_out, &off_out_copy, len, flags);
- if (builtin.os.tag == .freebsd) {
- switch (system.getErrno(rc)) {
- .SUCCESS => return @intCast(rc),
- .BADF => return error.FilesOpenedWithWrongFlags,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOSPC => return error.NoSpaceLeft,
- .INVAL => break, // these may not be regular files, try fallback
- .INTEGRITY => return error.CorruptedData,
- .INTR => continue,
- else => |err| return unexpectedErrno(err),
- }
- } else { // assume linux
- switch (system.getErrno(rc)) {
- .SUCCESS => return @intCast(rc),
- .BADF => return error.FilesOpenedWithWrongFlags,
- .FBIG => return error.FileTooBig,
- .IO => return error.InputOutput,
- .ISDIR => return error.IsDir,
- .NOSPC => return error.NoSpaceLeft,
- .INVAL => break, // these may not be regular files, try fallback
- .NOMEM => return error.OutOfMemory,
- .OVERFLOW => return error.Unseekable,
- .PERM => return error.PermissionDenied,
- .TXTBSY => return error.SwapFile,
- .XDEV => break, // support for cross-filesystem copy added in Linux 5.3, use fallback
- .NOSYS => { // syscall added in Linux 4.5, use fallback
- has_copy_file_range_syscall.store(false, .monotonic);
- break;
- },
- else => |err| return unexpectedErrno(err),
- }
- }
- }
- }
-
- var buf: [8 * 4096]u8 = undefined;
- const amt_read = try pread(fd_in, buf[0..@min(buf.len, len)], off_in);
- if (amt_read == 0) return 0;
- return pwrite(fd_out, buf[0..amt_read], off_out);
-}
-
-pub const PollError = error{
- /// The network subsystem has failed.
- NetworkSubsystemFailed,
-
- /// The kernel had no space to allocate file descriptor tables.
- SystemResources,
-} || UnexpectedError;
-
-pub fn poll(fds: []pollfd, timeout: i32) PollError!usize {
- while (true) {
- const fds_count = math.cast(nfds_t, fds.len) orelse return error.SystemResources;
- const rc = system.poll(fds.ptr, fds_count, timeout);
- if (builtin.os.tag == .windows) {
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAENOBUFS => return error.SystemResources,
- // TODO: handle more errors
- else => |err| return windows.unexpectedWSAError(err),
- }
- } else {
- return @intCast(rc);
- }
- } else {
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .FAULT => unreachable,
- .INTR => continue,
- .INVAL => unreachable,
- .NOMEM => return error.SystemResources,
- else => |err| return unexpectedErrno(err),
- }
- }
- unreachable;
- }
-}
-
-pub const PPollError = error{
- /// The operation was interrupted by a delivery of a signal before it could complete.
- SignalInterrupt,
-
- /// The kernel had no space to allocate file descriptor tables.
- SystemResources,
-} || UnexpectedError;
-
-pub fn ppoll(fds: []pollfd, timeout: ?*const timespec, mask: ?*const sigset_t) PPollError!usize {
- var ts: timespec = undefined;
- var ts_ptr: ?*timespec = null;
- if (timeout) |timeout_ns| {
- ts_ptr = &ts;
- ts = timeout_ns.*;
- }
- const fds_count = math.cast(nfds_t, fds.len) orelse return error.SystemResources;
- const rc = system.ppoll(fds.ptr, fds_count, ts_ptr, mask);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
.FAULT => unreachable,
- .INTR => return error.SignalInterrupt,
- .INVAL => unreachable,
- .NOMEM => return error.SystemResources,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const RecvFromError = error{
- /// The socket is marked nonblocking and the requested operation would block, and
- /// there is no global event loop configured.
- WouldBlock,
-
- /// A remote host refused to allow the network connection, typically because it is not
- /// running the requested service.
- ConnectionRefused,
-
- /// Could not allocate kernel memory.
- SystemResources,
-
- ConnectionResetByPeer,
- ConnectionTimedOut,
-
- /// The socket has not been bound.
- SocketNotBound,
-
- /// The UDP message was too big for the buffer and part of it has been discarded
- MessageTooBig,
-
- /// The network subsystem has failed.
- NetworkSubsystemFailed,
-
- /// The socket is not connected (connection-oriented sockets only).
- SocketNotConnected,
-} || UnexpectedError;
-
-pub fn recv(sock: socket_t, buf: []u8, flags: u32) RecvFromError!usize {
- return recvfrom(sock, buf, flags, null, null);
-}
-
-/// If `sockfd` is opened in non blocking mode, the function will
-/// return error.WouldBlock when EAGAIN is received.
-pub fn recvfrom(
- sockfd: socket_t,
- buf: []u8,
- flags: u32,
- src_addr: ?*sockaddr,
- addrlen: ?*socklen_t,
-) RecvFromError!usize {
- while (true) {
- const rc = system.recvfrom(sockfd, buf.ptr, buf.len, flags, src_addr, addrlen);
- if (builtin.os.tag == .windows) {
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable,
- .WSAECONNRESET => return error.ConnectionResetByPeer,
- .WSAEINVAL => return error.SocketNotBound,
- .WSAEMSGSIZE => return error.MessageTooBig,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAENOTCONN => return error.SocketNotConnected,
- .WSAEWOULDBLOCK => return error.WouldBlock,
- .WSAETIMEDOUT => return error.ConnectionTimedOut,
- // TODO: handle more errors
- else => |err| return windows.unexpectedWSAError(err),
- }
- } else {
- return @intCast(rc);
- }
- } else {
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .BADF => unreachable, // always a race condition
- .FAULT => unreachable,
- .INVAL => unreachable,
- .NOTCONN => return error.SocketNotConnected,
- .NOTSOCK => unreachable,
- .INTR => continue,
- .AGAIN => return error.WouldBlock,
- .NOMEM => return error.SystemResources,
- .CONNREFUSED => return error.ConnectionRefused,
- .CONNRESET => return error.ConnectionResetByPeer,
- .TIMEDOUT => return error.ConnectionTimedOut,
- else => |err| return unexpectedErrno(err),
- }
- }
- }
-}
-
-pub const DnExpandError = error{InvalidDnsPacket};
-
-pub fn dn_expand(
- msg: []const u8,
- comp_dn: []const u8,
- exp_dn: []u8,
-) DnExpandError!usize {
- // This implementation is ported from musl libc.
- // A more idiomatic "ziggy" implementation would be welcome.
- var p = comp_dn.ptr;
- var len: usize = std.math.maxInt(usize);
- const end = msg.ptr + msg.len;
- if (p == end or exp_dn.len == 0) return error.InvalidDnsPacket;
- var dest = exp_dn.ptr;
- const dend = dest + @min(exp_dn.len, 254);
- // detect reference loop using an iteration counter
- var i: usize = 0;
- while (i < msg.len) : (i += 2) {
- // loop invariants: p<end, dest<dend
- if ((p[0] & 0xc0) != 0) {
- if (p + 1 == end) return error.InvalidDnsPacket;
- const j = @as(usize, p[0] & 0x3f) << 8 | p[1];
- if (len == std.math.maxInt(usize)) len = @intFromPtr(p) + 2 - @intFromPtr(comp_dn.ptr);
- if (j >= msg.len) return error.InvalidDnsPacket;
- p = msg.ptr + j;
- } else if (p[0] != 0) {
- if (dest != exp_dn.ptr) {
- dest[0] = '.';
- dest += 1;
- }
- var j = p[0];
- p += 1;
- if (j >= @intFromPtr(end) - @intFromPtr(p) or j >= @intFromPtr(dend) - @intFromPtr(dest)) {
- return error.InvalidDnsPacket;
- }
- while (j != 0) {
- j -= 1;
- dest[0] = p[0];
- dest += 1;
- p += 1;
- }
- } else {
- dest[0] = 0;
- if (len == std.math.maxInt(usize)) len = @intFromPtr(p) + 1 - @intFromPtr(comp_dn.ptr);
- return len;
- }
- }
- return error.InvalidDnsPacket;
-}
-
-pub const SetSockOptError = error{
- /// The socket is already connected, and a specified option cannot be set while the socket is connected.
- AlreadyConnected,
-
- /// The option is not supported by the protocol.
- InvalidProtocolOption,
-
- /// The send and receive timeout values are too big to fit into the timeout fields in the socket structure.
- TimeoutTooBig,
-
- /// Insufficient resources are available in the system to complete the call.
- SystemResources,
-
- // Setting the socket option requires more elevated permissions.
- PermissionDenied,
-
- NetworkSubsystemFailed,
- FileDescriptorNotASocket,
- SocketNotBound,
- NoDevice,
-} || UnexpectedError;
-
-/// Set a socket's options.
-pub fn setsockopt(fd: socket_t, level: u32, optname: u32, opt: []const u8) SetSockOptError!void {
- if (builtin.os.tag == .windows) {
- const rc = windows.ws2_32.setsockopt(fd, @intCast(level), @intCast(optname), opt.ptr, @intCast(opt.len));
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .WSANOTINITIALISED => unreachable,
- .WSAENETDOWN => return error.NetworkSubsystemFailed,
- .WSAEFAULT => unreachable,
- .WSAENOTSOCK => return error.FileDescriptorNotASocket,
- .WSAEINVAL => return error.SocketNotBound,
- else => |err| return windows.unexpectedWSAError(err),
- }
- }
- return;
- } else {
- switch (errno(system.setsockopt(fd, level, optname, opt.ptr, @intCast(opt.len)))) {
- .SUCCESS => {},
- .BADF => unreachable, // always a race condition
- .NOTSOCK => unreachable, // always a race condition
- .INVAL => unreachable,
- .FAULT => unreachable,
- .DOM => return error.TimeoutTooBig,
- .ISCONN => return error.AlreadyConnected,
- .NOPROTOOPT => return error.InvalidProtocolOption,
- .NOMEM => return error.SystemResources,
- .NOBUFS => return error.SystemResources,
- .PERM => return error.PermissionDenied,
- .NODEV => return error.NoDevice,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const MemFdCreateError = error{
- SystemFdQuotaExceeded,
- ProcessFdQuotaExceeded,
- OutOfMemory,
-
- /// memfd_create is available in Linux 3.17 and later. This error is returned
- /// for older kernel versions.
- SystemOutdated,
-} || UnexpectedError;
-
-pub fn memfd_createZ(name: [*:0]const u8, flags: u32) MemFdCreateError!fd_t {
- switch (builtin.os.tag) {
- .linux => {
- // memfd_create is available only in glibc versions starting with 2.27.
- const use_c = std.c.versionCheck(.{ .major = 2, .minor = 27, .patch = 0 });
- const sys = if (use_c) std.c else linux;
- const getErrno = if (use_c) std.c.getErrno else linux.getErrno;
- const rc = sys.memfd_create(name, flags);
- switch (getErrno(rc)) {
- .SUCCESS => return @intCast(rc),
- .FAULT => unreachable, // name has invalid memory
- .INVAL => unreachable, // name/flags are faulty
- .NFILE => return error.SystemFdQuotaExceeded,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NOMEM => return error.OutOfMemory,
- .NOSYS => return error.SystemOutdated,
- else => |err| return unexpectedErrno(err),
- }
- },
- .freebsd => {
- if (comptime builtin.os.version_range.semver.max.order(.{ .major = 13, .minor = 0, .patch = 0 }) == .lt)
- @compileError("memfd_create is unavailable on FreeBSD < 13.0");
- const rc = system.memfd_create(name, flags);
- switch (errno(rc)) {
- .SUCCESS => return rc,
- .BADF => unreachable, // name argument NULL
- .INVAL => unreachable, // name too long or invalid/unsupported flags.
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NOSYS => return error.SystemOutdated,
- else => |err| return unexpectedErrno(err),
- }
- },
- else => @compileError("target OS does not support memfd_create()"),
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.FileNotFound,
+ .NOTCAPABLE => return error.AccessDenied,
+ .ILSEQ => return error.InvalidUtf8,
+ else => |err| return posix.unexpectedErrno(err),
}
}
-pub const MFD_NAME_PREFIX = "memfd:";
-pub const MFD_MAX_NAME_LEN = NAME_MAX - MFD_NAME_PREFIX.len;
-fn toMemFdPath(name: []const u8) ![MFD_MAX_NAME_LEN:0]u8 {
- var path_with_null: [MFD_MAX_NAME_LEN:0]u8 = undefined;
- // >= rather than > to make room for the null byte
- if (name.len >= MFD_MAX_NAME_LEN) return error.NameTooLong;
- @memcpy(path_with_null[0..name.len], name);
- path_with_null[name.len] = 0;
- return path_with_null;
-}
-
-pub fn memfd_create(name: []const u8, flags: u32) !fd_t {
- const name_t = try toMemFdPath(name);
- return memfd_createZ(&name_t, flags);
-}
-
-pub fn getrusage(who: i32) rusage {
- var result: rusage = undefined;
- const rc = system.getrusage(who, &result);
- switch (errno(rc)) {
- .SUCCESS => return result,
+pub fn fstat_wasi(fd: posix.fd_t) posix.FStatError!wasi.filestat_t {
+ var stat: wasi.filestat_t = undefined;
+ switch (wasi.fd_filestat_get(fd, &stat)) {
+ .SUCCESS => return stat,
.INVAL => unreachable,
- .FAULT => unreachable,
- else => unreachable,
- }
-}
-
-pub const TIOCError = error{NotATerminal};
-
-pub const TermiosGetError = TIOCError || UnexpectedError;
-
-pub fn tcgetattr(handle: fd_t) TermiosGetError!termios {
- while (true) {
- var term: termios = undefined;
- switch (errno(system.tcgetattr(handle, &term))) {
- .SUCCESS => return term,
- .INTR => continue,
- .BADF => unreachable,
- .NOTTY => return error.NotATerminal,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const TermiosSetError = TermiosGetError || error{ProcessOrphaned};
-
-pub fn tcsetattr(handle: fd_t, optional_action: TCSA, termios_p: termios) TermiosSetError!void {
- while (true) {
- switch (errno(system.tcsetattr(handle, optional_action, &termios_p))) {
- .SUCCESS => return,
- .BADF => unreachable,
- .INTR => continue,
- .INVAL => unreachable,
- .NOTTY => return error.NotATerminal,
- .IO => return error.ProcessOrphaned,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const TermioGetPgrpError = TIOCError || UnexpectedError;
-
-/// Returns the process group ID for the TTY associated with the given handle.
-pub fn tcgetpgrp(handle: fd_t) TermioGetPgrpError!pid_t {
- while (true) {
- var pgrp: pid_t = undefined;
- switch (errno(system.tcgetpgrp(handle, &pgrp))) {
- .SUCCESS => return pgrp,
- .BADF => unreachable,
- .INVAL => unreachable,
- .INTR => continue,
- .NOTTY => return error.NotATerminal,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const TermioSetPgrpError = TermioGetPgrpError || error{NotAPgrpMember};
-
-/// Sets the controlling process group ID for given TTY.
-/// handle must be valid fd_t to a TTY associated with calling process.
-/// pgrp must be a valid process group, and the calling process must be a member
-/// of that group.
-pub fn tcsetpgrp(handle: fd_t, pgrp: pid_t) TermioSetPgrpError!void {
- while (true) {
- switch (errno(system.tcsetpgrp(handle, &pgrp))) {
- .SUCCESS => return,
- .BADF => unreachable,
- .INVAL => unreachable,
- .INTR => continue,
- .NOTTY => return error.NotATerminal,
- .PERM => return TermioSetPgrpError.NotAPgrpMember,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub const IoCtl_SIOCGIFINDEX_Error = error{
- FileSystem,
- InterfaceNotFound,
-} || UnexpectedError;
-
-pub fn ioctl_SIOCGIFINDEX(fd: fd_t, ifr: *ifreq) IoCtl_SIOCGIFINDEX_Error!void {
- while (true) {
- switch (errno(system.ioctl(fd, SIOCGIFINDEX, @intFromPtr(ifr)))) {
- .SUCCESS => return,
- .INVAL => unreachable, // Bad parameters.
- .NOTTY => unreachable,
- .NXIO => unreachable,
- .BADF => unreachable, // Always a race condition.
- .FAULT => unreachable, // Bad pointer parameter.
- .INTR => continue,
- .IO => return error.FileSystem,
- .NODEV => return error.InterfaceNotFound,
- else => |err| return unexpectedErrno(err),
- }
- }
-}
-
-pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) !fd_t {
- const rc = system.signalfd(fd, mask, flags);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .BADF, .INVAL => unreachable,
- .NFILE => return error.SystemFdQuotaExceeded,
+ .BADF => unreachable, // Always a race condition.
.NOMEM => return error.SystemResources,
- .MFILE => return error.ProcessResources,
- .NODEV => return error.InodeMountFail,
- .NOSYS => return error.SystemOutdated,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const SyncError = error{
- InputOutput,
- NoSpaceLeft,
- DiskQuota,
- AccessDenied,
-} || UnexpectedError;
-
-/// Write all pending file contents and metadata modifications to all filesystems.
-pub fn sync() void {
- system.sync();
-}
-
-/// Write all pending file contents and metadata modifications to the filesystem which contains the specified file.
-pub fn syncfs(fd: fd_t) SyncError!void {
- const rc = system.syncfs(fd);
- switch (errno(rc)) {
- .SUCCESS => return,
- .BADF, .INVAL, .ROFS => unreachable,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .DQUOT => return error.DiskQuota,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Write all pending file contents and metadata modifications for the specified file descriptor to the underlying filesystem.
-pub fn fsync(fd: fd_t) SyncError!void {
- if (builtin.os.tag == .windows) {
- if (windows.kernel32.FlushFileBuffers(fd) != 0)
- return;
- switch (windows.kernel32.GetLastError()) {
- .SUCCESS => return,
- .INVALID_HANDLE => unreachable,
- .ACCESS_DENIED => return error.AccessDenied, // a sync was performed but the system couldn't update the access time
- .UNEXP_NET_ERR => return error.InputOutput,
- else => return error.InputOutput,
- }
- }
- const rc = system.fsync(fd);
- switch (errno(rc)) {
- .SUCCESS => return,
- .BADF, .INVAL, .ROFS => unreachable,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .DQUOT => return error.DiskQuota,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-/// Write all pending file contents for the specified file descriptor to the underlying filesystem, but not necessarily the metadata.
-pub fn fdatasync(fd: fd_t) SyncError!void {
- if (builtin.os.tag == .windows) {
- return fsync(fd) catch |err| switch (err) {
- SyncError.AccessDenied => return, // fdatasync doesn't promise that the access time was synced
- else => return err,
- };
- }
- const rc = system.fdatasync(fd);
- switch (errno(rc)) {
- .SUCCESS => return,
- .BADF, .INVAL, .ROFS => unreachable,
- .IO => return error.InputOutput,
- .NOSPC => return error.NoSpaceLeft,
- .DQUOT => return error.DiskQuota,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const PrctlError = error{
- /// Can only occur with PR_SET_SECCOMP/SECCOMP_MODE_FILTER or
- /// PR_SET_MM/PR_SET_MM_EXE_FILE
- AccessDenied,
- /// Can only occur with PR_SET_MM/PR_SET_MM_EXE_FILE
- InvalidFileDescriptor,
- InvalidAddress,
- /// Can only occur with PR_SET_SPECULATION_CTRL, PR_MPX_ENABLE_MANAGEMENT,
- /// or PR_MPX_DISABLE_MANAGEMENT
- UnsupportedFeature,
- /// Can only occur with PR_SET_FP_MODE
- OperationNotSupported,
- PermissionDenied,
-} || UnexpectedError;
-
-pub fn prctl(option: PR, args: anytype) PrctlError!u31 {
- if (@typeInfo(@TypeOf(args)) != .Struct)
- @compileError("Expected tuple or struct argument, found " ++ @typeName(@TypeOf(args)));
- if (args.len > 4)
- @compileError("prctl takes a maximum of 4 optional arguments");
-
- var buf: [4]usize = undefined;
- {
- comptime var i = 0;
- inline while (i < args.len) : (i += 1) buf[i] = args[i];
- }
-
- const rc = system.prctl(@intFromEnum(option), buf[0], buf[1], buf[2], buf[3]);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
.ACCES => return error.AccessDenied,
- .BADF => return error.InvalidFileDescriptor,
- .FAULT => return error.InvalidAddress,
- .INVAL => unreachable,
- .NODEV, .NXIO => return error.UnsupportedFeature,
- .OPNOTSUPP => return error.OperationNotSupported,
- .PERM, .BUSY => return error.PermissionDenied,
- .RANGE => unreachable,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const GetrlimitError = UnexpectedError;
-
-pub fn getrlimit(resource: rlimit_resource) GetrlimitError!rlimit {
- const getrlimit_sym = if (lfs64_abi) system.getrlimit64 else system.getrlimit;
-
- var limits: rlimit = undefined;
- switch (errno(getrlimit_sym(resource, &limits))) {
- .SUCCESS => return limits,
- .FAULT => unreachable, // bogus pointer
- .INVAL => unreachable,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const SetrlimitError = error{ PermissionDenied, LimitTooBig } || UnexpectedError;
-
-pub fn setrlimit(resource: rlimit_resource, limits: rlimit) SetrlimitError!void {
- const setrlimit_sym = if (lfs64_abi) system.setrlimit64 else system.setrlimit;
-
- switch (errno(setrlimit_sym(resource, &limits))) {
- .SUCCESS => return,
- .FAULT => unreachable, // bogus pointer
- .INVAL => return error.LimitTooBig, // this could also mean "invalid resource", but that would be unreachable
- .PERM => return error.PermissionDenied,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const MincoreError = error{
- /// A kernel resource was temporarily unavailable.
- SystemResources,
- /// vec points to an invalid address.
- InvalidAddress,
- /// addr is not page-aligned.
- InvalidSyscall,
- /// One of the following:
- /// * length is greater than user space TASK_SIZE - addr
- /// * addr + length contains unmapped memory
- OutOfMemory,
- /// The mincore syscall is not available on this version and configuration
- /// of this UNIX-like kernel.
- MincoreUnavailable,
-} || UnexpectedError;
-
-/// Determine whether pages are resident in memory.
-pub fn mincore(ptr: [*]align(mem.page_size) u8, length: usize, vec: [*]u8) MincoreError!void {
- return switch (errno(system.mincore(ptr, length, vec))) {
- .SUCCESS => {},
- .AGAIN => error.SystemResources,
- .FAULT => error.InvalidAddress,
- .INVAL => error.InvalidSyscall,
- .NOMEM => error.OutOfMemory,
- .NOSYS => error.MincoreUnavailable,
- else => |err| unexpectedErrno(err),
- };
-}
-
-pub const MadviseError = error{
- /// advice is MADV.REMOVE, but the specified address range is not a shared writable mapping.
- AccessDenied,
- /// advice is MADV.HWPOISON, but the caller does not have the CAP_SYS_ADMIN capability.
- PermissionDenied,
- /// A kernel resource was temporarily unavailable.
- SystemResources,
- /// One of the following:
- /// * addr is not page-aligned or length is negative
- /// * advice is not valid
- /// * advice is MADV.DONTNEED or MADV.REMOVE and the specified address range
- /// includes locked, Huge TLB pages, or VM_PFNMAP pages.
- /// * advice is MADV.MERGEABLE or MADV.UNMERGEABLE, but the kernel was not
- /// configured with CONFIG_KSM.
- /// * advice is MADV.FREE or MADV.WIPEONFORK but the specified address range
- /// includes file, Huge TLB, MAP.SHARED, or VM_PFNMAP ranges.
- InvalidSyscall,
- /// (for MADV.WILLNEED) Paging in this area would exceed the process's
- /// maximum resident set size.
- WouldExceedMaximumResidentSetSize,
- /// One of the following:
- /// * (for MADV.WILLNEED) Not enough memory: paging in failed.
- /// * Addresses in the specified range are not currently mapped, or
- /// are outside the address space of the process.
- OutOfMemory,
- /// The madvise syscall is not available on this version and configuration
- /// of the Linux kernel.
- MadviseUnavailable,
- /// The operating system returned an undocumented error code.
- Unexpected,
-};
-
-/// Give advice about use of memory.
-/// This syscall is optional and is sometimes configured to be disabled.
-pub fn madvise(ptr: [*]align(mem.page_size) u8, length: usize, advice: u32) MadviseError!void {
- switch (errno(system.madvise(ptr, length, advice))) {
- .SUCCESS => return,
- .ACCES => return error.AccessDenied,
- .AGAIN => return error.SystemResources,
- .BADF => unreachable, // The map exists, but the area maps something that isn't a file.
- .INVAL => return error.InvalidSyscall,
- .IO => return error.WouldExceedMaximumResidentSetSize,
- .NOMEM => return error.OutOfMemory,
- .NOSYS => return error.MadviseUnavailable,
- else => |err| return unexpectedErrno(err),
- }
-}
-
-pub const PerfEventOpenError = error{
- /// Returned if the perf_event_attr size value is too small (smaller
- /// than PERF_ATTR_SIZE_VER0), too big (larger than the page size),
- /// or larger than the kernel supports and the extra bytes are not
- /// zero. When E2BIG is returned, the perf_event_attr size field is
- /// overwritten by the kernel to be the size of the structure it was
- /// expecting.
- TooBig,
- /// Returned when the requested event requires CAP_SYS_ADMIN permis‐
- /// sions (or a more permissive perf_event paranoid setting). Some
- /// common cases where an unprivileged process may encounter this
- /// error: attaching to a process owned by a different user; moni‐
- /// toring all processes on a given CPU (i.e., specifying the pid
- /// argument as -1); and not setting exclude_kernel when the para‐
- /// noid setting requires it.
- /// Also:
- /// Returned on many (but not all) architectures when an unsupported
- /// exclude_hv, exclude_idle, exclude_user, or exclude_kernel set‐
- /// ting is specified.
- /// It can also happen, as with EACCES, when the requested event re‐
- /// quires CAP_SYS_ADMIN permissions (or a more permissive
- /// perf_event paranoid setting). This includes setting a break‐
- /// point on a kernel address, and (since Linux 3.13) setting a ker‐
- /// nel function-trace tracepoint.
- PermissionDenied,
- /// Returned if another event already has exclusive access to the
- /// PMU.
- DeviceBusy,
- /// Each opened event uses one file descriptor. If a large number
- /// of events are opened, the per-process limit on the number of
- /// open file descriptors will be reached, and no more events can be
- /// created.
- ProcessResources,
- EventRequiresUnsupportedCpuFeature,
- /// Returned if you try to add more breakpoint
- /// events than supported by the hardware.
- TooManyBreakpoints,
- /// Returned if PERF_SAMPLE_STACK_USER is set in sample_type and it
- /// is not supported by hardware.
- SampleStackNotSupported,
- /// Returned if an event requiring a specific hardware feature is
- /// requested but there is no hardware support. This includes re‐
- /// questing low-skid events if not supported, branch tracing if it
- /// is not available, sampling if no PMU interrupt is available, and
- /// branch stacks for software events.
- EventNotSupported,
- /// Returned if PERF_SAMPLE_CALLCHAIN is requested and sam‐
- /// ple_max_stack is larger than the maximum specified in
- /// /proc/sys/kernel/perf_event_max_stack.
- SampleMaxStackOverflow,
- /// Returned if attempting to attach to a process that does not exist.
- ProcessNotFound,
-} || UnexpectedError;
-
-pub fn perf_event_open(
- attr: *linux.perf_event_attr,
- pid: pid_t,
- cpu: i32,
- group_fd: fd_t,
- flags: usize,
-) PerfEventOpenError!fd_t {
- const rc = linux.perf_event_open(attr, pid, cpu, group_fd, flags);
- switch (errno(rc)) {
- .SUCCESS => return @intCast(rc),
- .@"2BIG" => return error.TooBig,
- .ACCES => return error.PermissionDenied,
- .BADF => unreachable, // group_fd file descriptor is not valid.
- .BUSY => return error.DeviceBusy,
- .FAULT => unreachable, // Segmentation fault.
- .INVAL => unreachable, // Bad attr settings.
- .INTR => unreachable, // Mixed perf and ftrace handling for a uprobe.
- .MFILE => return error.ProcessResources,
- .NODEV => return error.EventRequiresUnsupportedCpuFeature,
- .NOENT => unreachable, // Invalid type setting.
- .NOSPC => return error.TooManyBreakpoints,
- .NOSYS => return error.SampleStackNotSupported,
- .OPNOTSUPP => return error.EventNotSupported,
- .OVERFLOW => return error.SampleMaxStackOverflow,
- .PERM => return error.PermissionDenied,
- .SRCH => return error.ProcessNotFound,
- else => |err| return unexpectedErrno(err),
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return posix.unexpectedErrno(err),
}
}
-
-pub const TimerFdCreateError = error{
- AccessDenied,
- ProcessFdQuotaExceeded,
- SystemFdQuotaExceeded,
- NoDevice,
- SystemResources,
-} || UnexpectedError;
-
-pub const TimerFdGetError = error{InvalidHandle} || UnexpectedError;
-pub const TimerFdSetError = TimerFdGetError || error{Canceled};
-
-pub fn timerfd_create(clokid: i32, flags: linux.TFD) TimerFdCreateError!fd_t {
- const rc = linux.timerfd_create(clokid, flags);
- return switch (errno(rc)) {
- .SUCCESS => @intCast(rc),
- .INVAL => unreachable,
- .MFILE => return error.ProcessFdQuotaExceeded,
- .NFILE => return error.SystemFdQuotaExceeded,
- .NODEV => return error.NoDevice,
- .NOMEM => return error.SystemResources,
- .PERM => return error.AccessDenied,
- else => |err| return unexpectedErrno(err),
- };
-}
-
-pub fn timerfd_settime(
- fd: i32,
- flags: linux.TFD.TIMER,
- new_value: *const linux.itimerspec,
- old_value: ?*linux.itimerspec,
-) TimerFdSetError!void {
- const rc = linux.timerfd_settime(fd, flags, new_value, old_value);
- return switch (errno(rc)) {
- .SUCCESS => {},
- .BADF => error.InvalidHandle,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .CANCELED => error.Canceled,
- else => |err| return unexpectedErrno(err),
- };
-}
-
-pub fn timerfd_gettime(fd: i32) TimerFdGetError!linux.itimerspec {
- var curr_value: linux.itimerspec = undefined;
- const rc = linux.timerfd_gettime(fd, &curr_value);
- return switch (errno(rc)) {
- .SUCCESS => return curr_value,
- .BADF => error.InvalidHandle,
- .FAULT => unreachable,
- .INVAL => unreachable,
- else => |err| return unexpectedErrno(err),
- };
-}
-
-pub const PtraceError = error{
- DeviceBusy,
- InputOutput,
- ProcessNotFound,
- PermissionDenied,
-} || UnexpectedError;
-
-pub fn ptrace(request: u32, pid: pid_t, addr: usize, signal: usize) PtraceError!void {
- if (builtin.os.tag == .windows or builtin.os.tag == .wasi)
- @compileError("Unsupported OS");
-
- return switch (builtin.os.tag) {
- .linux => switch (errno(linux.ptrace(request, pid, addr, signal, 0))) {
- .SUCCESS => {},
- .SRCH => error.ProcessNotFound,
- .FAULT => unreachable,
- .INVAL => unreachable,
- .IO => return error.InputOutput,
- .PERM => error.PermissionDenied,
- .BUSY => error.DeviceBusy,
- else => |err| return unexpectedErrno(err),
- },
-
- .macos, .ios, .tvos, .watchos => switch (errno(darwin.ptrace(
- @intCast(request),
- pid,
- @ptrFromInt(addr),
- @intCast(signal),
- ))) {
- .SUCCESS => {},
- .SRCH => error.ProcessNotFound,
- .INVAL => unreachable,
- .PERM => error.PermissionDenied,
- .BUSY => error.DeviceBusy,
- else => |err| return unexpectedErrno(err),
- },
-
- else => switch (errno(system.ptrace(request, pid, addr, signal))) {
- .SUCCESS => {},
- .SRCH => error.ProcessNotFound,
- .INVAL => unreachable,
- .PERM => error.PermissionDenied,
- .BUSY => error.DeviceBusy,
- else => |err| return unexpectedErrno(err),
- },
- };
-}
-
-const lfs64_abi = builtin.os.tag == .linux and builtin.link_libc and builtin.abi.isGnu();
diff --git a/lib/std/os/emscripten.zig b/lib/std/os/emscripten.zig
index 924b2dd0b2..a37b2b1f5c 100644
--- a/lib/std/os/emscripten.zig
+++ b/lib/std/os/emscripten.zig
@@ -1,8 +1,8 @@
const std = @import("std");
const builtin = @import("builtin");
const wasi = std.os.wasi;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const c = std.c;
pub const FILE = c.FILE;
diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig
index a5cdab18ce..9ff272a332 100644
--- a/lib/std/os/linux.zig
+++ b/lib/std/os/linux.zig
@@ -18,9 +18,9 @@ const is_mips = native_arch.isMIPS();
const is_ppc = native_arch.isPPC();
const is_ppc64 = native_arch.isPPC64();
const is_sparc = native_arch.isSPARC();
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
-const ACCMODE = std.os.ACCMODE;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
+const ACCMODE = std.posix.ACCMODE;
test {
if (builtin.os.tag == .linux) {
@@ -451,10 +451,11 @@ fn splitValue64(val: i64) [2]u32 {
}
/// Get the errno from a syscall return value, or 0 for no error.
-pub fn getErrno(r: usize) E {
- const signed_r = @as(isize, @bitCast(r));
+/// The public API is exposed via the `E` namespace.
+fn errnoFromSyscall(r: usize) E {
+ const signed_r: isize = @bitCast(r);
const int = if (signed_r > -4096 and signed_r < 0) -signed_r else 0;
- return @as(E, @enumFromInt(int));
+ return @enumFromInt(int);
}
pub fn dup(old: i32) usize {
@@ -1561,7 +1562,7 @@ pub fn sigaction(sig: u6, noalias act: ?*const Sigaction, noalias oact: ?*Sigact
.sparc, .sparc64 => syscall5(.rt_sigaction, sig, ksa_arg, oldksa_arg, @intFromPtr(ksa.restorer), mask_size),
else => syscall4(.rt_sigaction, sig, ksa_arg, oldksa_arg, mask_size),
};
- if (getErrno(result) != .SUCCESS) return result;
+ if (E.init(result) != .SUCCESS) return result;
if (oact) |old| {
old.handler.handler = oldksa.handler;
@@ -1648,12 +1649,12 @@ pub fn sendmmsg(fd: i32, msgvec: [*]mmsghdr_const, vlen: u32, flags: u32) usize
if (next_unsent < i) {
const batch_size = i - next_unsent;
const r = syscall4(.sendmmsg, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(&msgvec[next_unsent]), batch_size, flags);
- if (getErrno(r) != 0) return next_unsent;
+ if (E.init(r) != 0) return next_unsent;
if (r < batch_size) return next_unsent + r;
}
// send current message as own packet
const r = sendmsg(fd, &msg.msg_hdr, flags);
- if (getErrno(r) != 0) return r;
+ if (E.init(r) != 0) return r;
// Linux limits the total bytes sent by sendmsg to INT_MAX, so this cast is safe.
msg.msg_len = @as(u32, @intCast(r));
next_unsent = i + 1;
@@ -1665,7 +1666,7 @@ pub fn sendmmsg(fd: i32, msgvec: [*]mmsghdr_const, vlen: u32, flags: u32) usize
if (next_unsent < kvlen or next_unsent == 0) { // want to make sure at least one syscall occurs (e.g. to trigger MSG.EOR)
const batch_size = kvlen - next_unsent;
const r = syscall4(.sendmmsg, @as(usize, @bitCast(@as(isize, fd))), @intFromPtr(&msgvec[next_unsent]), batch_size, flags);
- if (getErrno(r) != 0) return r;
+ if (E.init(r) != 0) return r;
return next_unsent + r;
}
return kvlen;
@@ -2263,13 +2264,609 @@ pub fn map_shadow_stack(addr: u64, size: u64, flags: u32) usize {
}
pub const E = switch (native_arch) {
- .mips, .mipsel => @import("linux/errno/mips.zig").E,
- .sparc, .sparcel, .sparc64 => @import("linux/errno/sparc.zig").E,
- else => @import("linux/errno/generic.zig").E,
+ .mips, .mipsel => enum(u16) {
+ /// No error occurred.
+ SUCCESS = 0,
+
+ PERM = 1,
+ NOENT = 2,
+ SRCH = 3,
+ INTR = 4,
+ IO = 5,
+ NXIO = 6,
+ @"2BIG" = 7,
+ NOEXEC = 8,
+ BADF = 9,
+ CHILD = 10,
+ /// Also used for WOULDBLOCK.
+ AGAIN = 11,
+ NOMEM = 12,
+ ACCES = 13,
+ FAULT = 14,
+ NOTBLK = 15,
+ BUSY = 16,
+ EXIST = 17,
+ XDEV = 18,
+ NODEV = 19,
+ NOTDIR = 20,
+ ISDIR = 21,
+ INVAL = 22,
+ NFILE = 23,
+ MFILE = 24,
+ NOTTY = 25,
+ TXTBSY = 26,
+ FBIG = 27,
+ NOSPC = 28,
+ SPIPE = 29,
+ ROFS = 30,
+ MLINK = 31,
+ PIPE = 32,
+ DOM = 33,
+ RANGE = 34,
+
+ NOMSG = 35,
+ IDRM = 36,
+ CHRNG = 37,
+ L2NSYNC = 38,
+ L3HLT = 39,
+ L3RST = 40,
+ LNRNG = 41,
+ UNATCH = 42,
+ NOCSI = 43,
+ L2HLT = 44,
+ DEADLK = 45,
+ NOLCK = 46,
+ BADE = 50,
+ BADR = 51,
+ XFULL = 52,
+ NOANO = 53,
+ BADRQC = 54,
+ BADSLT = 55,
+ DEADLOCK = 56,
+ BFONT = 59,
+ NOSTR = 60,
+ NODATA = 61,
+ TIME = 62,
+ NOSR = 63,
+ NONET = 64,
+ NOPKG = 65,
+ REMOTE = 66,
+ NOLINK = 67,
+ ADV = 68,
+ SRMNT = 69,
+ COMM = 70,
+ PROTO = 71,
+ DOTDOT = 73,
+ MULTIHOP = 74,
+ BADMSG = 77,
+ NAMETOOLONG = 78,
+ OVERFLOW = 79,
+ NOTUNIQ = 80,
+ BADFD = 81,
+ REMCHG = 82,
+ LIBACC = 83,
+ LIBBAD = 84,
+ LIBSCN = 85,
+ LIBMAX = 86,
+ LIBEXEC = 87,
+ ILSEQ = 88,
+ NOSYS = 89,
+ LOOP = 90,
+ RESTART = 91,
+ STRPIPE = 92,
+ NOTEMPTY = 93,
+ USERS = 94,
+ NOTSOCK = 95,
+ DESTADDRREQ = 96,
+ MSGSIZE = 97,
+ PROTOTYPE = 98,
+ NOPROTOOPT = 99,
+ PROTONOSUPPORT = 120,
+ SOCKTNOSUPPORT = 121,
+ OPNOTSUPP = 122,
+ PFNOSUPPORT = 123,
+ AFNOSUPPORT = 124,
+ ADDRINUSE = 125,
+ ADDRNOTAVAIL = 126,
+ NETDOWN = 127,
+ NETUNREACH = 128,
+ NETRESET = 129,
+ CONNABORTED = 130,
+ CONNRESET = 131,
+ NOBUFS = 132,
+ ISCONN = 133,
+ NOTCONN = 134,
+ UCLEAN = 135,
+ NOTNAM = 137,
+ NAVAIL = 138,
+ ISNAM = 139,
+ REMOTEIO = 140,
+ SHUTDOWN = 143,
+ TOOMANYREFS = 144,
+ TIMEDOUT = 145,
+ CONNREFUSED = 146,
+ HOSTDOWN = 147,
+ HOSTUNREACH = 148,
+ ALREADY = 149,
+ INPROGRESS = 150,
+ STALE = 151,
+ CANCELED = 158,
+ NOMEDIUM = 159,
+ MEDIUMTYPE = 160,
+ NOKEY = 161,
+ KEYEXPIRED = 162,
+ KEYREVOKED = 163,
+ KEYREJECTED = 164,
+ OWNERDEAD = 165,
+ NOTRECOVERABLE = 166,
+ RFKILL = 167,
+ HWPOISON = 168,
+ DQUOT = 1133,
+ _,
+
+ pub const init = errnoFromSyscall;
+ },
+ .sparc, .sparcel, .sparc64 => enum(u16) {
+ /// No error occurred.
+ SUCCESS = 0,
+
+ PERM = 1,
+ NOENT = 2,
+ SRCH = 3,
+ INTR = 4,
+ IO = 5,
+ NXIO = 6,
+ @"2BIG" = 7,
+ NOEXEC = 8,
+ BADF = 9,
+ CHILD = 10,
+ /// Also used for WOULDBLOCK
+ AGAIN = 11,
+ NOMEM = 12,
+ ACCES = 13,
+ FAULT = 14,
+ NOTBLK = 15,
+ BUSY = 16,
+ EXIST = 17,
+ XDEV = 18,
+ NODEV = 19,
+ NOTDIR = 20,
+ ISDIR = 21,
+ INVAL = 22,
+ NFILE = 23,
+ MFILE = 24,
+ NOTTY = 25,
+ TXTBSY = 26,
+ FBIG = 27,
+ NOSPC = 28,
+ SPIPE = 29,
+ ROFS = 30,
+ MLINK = 31,
+ PIPE = 32,
+ DOM = 33,
+ RANGE = 34,
+
+ INPROGRESS = 36,
+ ALREADY = 37,
+ NOTSOCK = 38,
+ DESTADDRREQ = 39,
+ MSGSIZE = 40,
+ PROTOTYPE = 41,
+ NOPROTOOPT = 42,
+ PROTONOSUPPORT = 43,
+ SOCKTNOSUPPORT = 44,
+ /// Also used for NOTSUP
+ OPNOTSUPP = 45,
+ PFNOSUPPORT = 46,
+ AFNOSUPPORT = 47,
+ ADDRINUSE = 48,
+ ADDRNOTAVAIL = 49,
+ NETDOWN = 50,
+ NETUNREACH = 51,
+ NETRESET = 52,
+ CONNABORTED = 53,
+ CONNRESET = 54,
+ NOBUFS = 55,
+ ISCONN = 56,
+ NOTCONN = 57,
+ SHUTDOWN = 58,
+ TOOMANYREFS = 59,
+ TIMEDOUT = 60,
+ CONNREFUSED = 61,
+ LOOP = 62,
+ NAMETOOLONG = 63,
+ HOSTDOWN = 64,
+ HOSTUNREACH = 65,
+ NOTEMPTY = 66,
+ PROCLIM = 67,
+ USERS = 68,
+ DQUOT = 69,
+ STALE = 70,
+ REMOTE = 71,
+ NOSTR = 72,
+ TIME = 73,
+ NOSR = 74,
+ NOMSG = 75,
+ BADMSG = 76,
+ IDRM = 77,
+ DEADLK = 78,
+ NOLCK = 79,
+ NONET = 80,
+ RREMOTE = 81,
+ NOLINK = 82,
+ ADV = 83,
+ SRMNT = 84,
+ COMM = 85,
+ PROTO = 86,
+ MULTIHOP = 87,
+ DOTDOT = 88,
+ REMCHG = 89,
+ NOSYS = 90,
+ STRPIPE = 91,
+ OVERFLOW = 92,
+ BADFD = 93,
+ CHRNG = 94,
+ L2NSYNC = 95,
+ L3HLT = 96,
+ L3RST = 97,
+ LNRNG = 98,
+ UNATCH = 99,
+ NOCSI = 100,
+ L2HLT = 101,
+ BADE = 102,
+ BADR = 103,
+ XFULL = 104,
+ NOANO = 105,
+ BADRQC = 106,
+ BADSLT = 107,
+ DEADLOCK = 108,
+ BFONT = 109,
+ LIBEXEC = 110,
+ NODATA = 111,
+ LIBBAD = 112,
+ NOPKG = 113,
+ LIBACC = 114,
+ NOTUNIQ = 115,
+ RESTART = 116,
+ UCLEAN = 117,
+ NOTNAM = 118,
+ NAVAIL = 119,
+ ISNAM = 120,
+ REMOTEIO = 121,
+ ILSEQ = 122,
+ LIBMAX = 123,
+ LIBSCN = 124,
+ NOMEDIUM = 125,
+ MEDIUMTYPE = 126,
+ CANCELED = 127,
+ NOKEY = 128,
+ KEYEXPIRED = 129,
+ KEYREVOKED = 130,
+ KEYREJECTED = 131,
+ OWNERDEAD = 132,
+ NOTRECOVERABLE = 133,
+ RFKILL = 134,
+ HWPOISON = 135,
+ _,
+
+ pub const init = errnoFromSyscall;
+ },
+ else => enum(u16) {
+ /// No error occurred.
+ /// Same code used for `NSROK`.
+ SUCCESS = 0,
+ /// Operation not permitted
+ PERM = 1,
+ /// No such file or directory
+ NOENT = 2,
+ /// No such process
+ SRCH = 3,
+ /// Interrupted system call
+ INTR = 4,
+ /// I/O error
+ IO = 5,
+ /// No such device or address
+ NXIO = 6,
+ /// Arg list too long
+ @"2BIG" = 7,
+ /// Exec format error
+ NOEXEC = 8,
+ /// Bad file number
+ BADF = 9,
+ /// No child processes
+ CHILD = 10,
+ /// Try again
+ /// Also means: WOULDBLOCK: operation would block
+ AGAIN = 11,
+ /// Out of memory
+ NOMEM = 12,
+ /// Permission denied
+ ACCES = 13,
+ /// Bad address
+ FAULT = 14,
+ /// Block device required
+ NOTBLK = 15,
+ /// Device or resource busy
+ BUSY = 16,
+ /// File exists
+ EXIST = 17,
+ /// Cross-device link
+ XDEV = 18,
+ /// No such device
+ NODEV = 19,
+ /// Not a directory
+ NOTDIR = 20,
+ /// Is a directory
+ ISDIR = 21,
+ /// Invalid argument
+ INVAL = 22,
+ /// File table overflow
+ NFILE = 23,
+ /// Too many open files
+ MFILE = 24,
+ /// Not a typewriter
+ NOTTY = 25,
+ /// Text file busy
+ TXTBSY = 26,
+ /// File too large
+ FBIG = 27,
+ /// No space left on device
+ NOSPC = 28,
+ /// Illegal seek
+ SPIPE = 29,
+ /// Read-only file system
+ ROFS = 30,
+ /// Too many links
+ MLINK = 31,
+ /// Broken pipe
+ PIPE = 32,
+ /// Math argument out of domain of func
+ DOM = 33,
+ /// Math result not representable
+ RANGE = 34,
+ /// Resource deadlock would occur
+ DEADLK = 35,
+ /// File name too long
+ NAMETOOLONG = 36,
+ /// No record locks available
+ NOLCK = 37,
+ /// Function not implemented
+ NOSYS = 38,
+ /// Directory not empty
+ NOTEMPTY = 39,
+ /// Too many symbolic links encountered
+ LOOP = 40,
+ /// No message of desired type
+ NOMSG = 42,
+ /// Identifier removed
+ IDRM = 43,
+ /// Channel number out of range
+ CHRNG = 44,
+ /// Level 2 not synchronized
+ L2NSYNC = 45,
+ /// Level 3 halted
+ L3HLT = 46,
+ /// Level 3 reset
+ L3RST = 47,
+ /// Link number out of range
+ LNRNG = 48,
+ /// Protocol driver not attached
+ UNATCH = 49,
+ /// No CSI structure available
+ NOCSI = 50,
+ /// Level 2 halted
+ L2HLT = 51,
+ /// Invalid exchange
+ BADE = 52,
+ /// Invalid request descriptor
+ BADR = 53,
+ /// Exchange full
+ XFULL = 54,
+ /// No anode
+ NOANO = 55,
+ /// Invalid request code
+ BADRQC = 56,
+ /// Invalid slot
+ BADSLT = 57,
+ /// Bad font file format
+ BFONT = 59,
+ /// Device not a stream
+ NOSTR = 60,
+ /// No data available
+ NODATA = 61,
+ /// Timer expired
+ TIME = 62,
+ /// Out of streams resources
+ NOSR = 63,
+ /// Machine is not on the network
+ NONET = 64,
+ /// Package not installed
+ NOPKG = 65,
+ /// Object is remote
+ REMOTE = 66,
+ /// Link has been severed
+ NOLINK = 67,
+ /// Advertise error
+ ADV = 68,
+ /// Srmount error
+ SRMNT = 69,
+ /// Communication error on send
+ COMM = 70,
+ /// Protocol error
+ PROTO = 71,
+ /// Multihop attempted
+ MULTIHOP = 72,
+ /// RFS specific error
+ DOTDOT = 73,
+ /// Not a data message
+ BADMSG = 74,
+ /// Value too large for defined data type
+ OVERFLOW = 75,
+ /// Name not unique on network
+ NOTUNIQ = 76,
+ /// File descriptor in bad state
+ BADFD = 77,
+ /// Remote address changed
+ REMCHG = 78,
+ /// Can not access a needed shared library
+ LIBACC = 79,
+ /// Accessing a corrupted shared library
+ LIBBAD = 80,
+ /// .lib section in a.out corrupted
+ LIBSCN = 81,
+ /// Attempting to link in too many shared libraries
+ LIBMAX = 82,
+ /// Cannot exec a shared library directly
+ LIBEXEC = 83,
+ /// Illegal byte sequence
+ ILSEQ = 84,
+ /// Interrupted system call should be restarted
+ RESTART = 85,
+ /// Streams pipe error
+ STRPIPE = 86,
+ /// Too many users
+ USERS = 87,
+ /// Socket operation on non-socket
+ NOTSOCK = 88,
+ /// Destination address required
+ DESTADDRREQ = 89,
+ /// Message too long
+ MSGSIZE = 90,
+ /// Protocol wrong type for socket
+ PROTOTYPE = 91,
+ /// Protocol not available
+ NOPROTOOPT = 92,
+ /// Protocol not supported
+ PROTONOSUPPORT = 93,
+ /// Socket type not supported
+ SOCKTNOSUPPORT = 94,
+ /// Operation not supported on transport endpoint
+ /// This code also means `NOTSUP`.
+ OPNOTSUPP = 95,
+ /// Protocol family not supported
+ PFNOSUPPORT = 96,
+ /// Address family not supported by protocol
+ AFNOSUPPORT = 97,
+ /// Address already in use
+ ADDRINUSE = 98,
+ /// Cannot assign requested address
+ ADDRNOTAVAIL = 99,
+ /// Network is down
+ NETDOWN = 100,
+ /// Network is unreachable
+ NETUNREACH = 101,
+ /// Network dropped connection because of reset
+ NETRESET = 102,
+ /// Software caused connection abort
+ CONNABORTED = 103,
+ /// Connection reset by peer
+ CONNRESET = 104,
+ /// No buffer space available
+ NOBUFS = 105,
+ /// Transport endpoint is already connected
+ ISCONN = 106,
+ /// Transport endpoint is not connected
+ NOTCONN = 107,
+ /// Cannot send after transport endpoint shutdown
+ SHUTDOWN = 108,
+ /// Too many references: cannot splice
+ TOOMANYREFS = 109,
+ /// Connection timed out
+ TIMEDOUT = 110,
+ /// Connection refused
+ CONNREFUSED = 111,
+ /// Host is down
+ HOSTDOWN = 112,
+ /// No route to host
+ HOSTUNREACH = 113,
+ /// Operation already in progress
+ ALREADY = 114,
+ /// Operation now in progress
+ INPROGRESS = 115,
+ /// Stale NFS file handle
+ STALE = 116,
+ /// Structure needs cleaning
+ UCLEAN = 117,
+ /// Not a XENIX named type file
+ NOTNAM = 118,
+ /// No XENIX semaphores available
+ NAVAIL = 119,
+ /// Is a named type file
+ ISNAM = 120,
+ /// Remote I/O error
+ REMOTEIO = 121,
+ /// Quota exceeded
+ DQUOT = 122,
+ /// No medium found
+ NOMEDIUM = 123,
+ /// Wrong medium type
+ MEDIUMTYPE = 124,
+ /// Operation canceled
+ CANCELED = 125,
+ /// Required key not available
+ NOKEY = 126,
+ /// Key has expired
+ KEYEXPIRED = 127,
+ /// Key has been revoked
+ KEYREVOKED = 128,
+ /// Key was rejected by service
+ KEYREJECTED = 129,
+ // for robust mutexes
+ /// Owner died
+ OWNERDEAD = 130,
+ /// State not recoverable
+ NOTRECOVERABLE = 131,
+ /// Operation not possible due to RF-kill
+ RFKILL = 132,
+ /// Memory page has hardware error
+ HWPOISON = 133,
+ // nameserver query return codes
+ /// DNS server returned answer with no data
+ NSRNODATA = 160,
+ /// DNS server claims query was misformatted
+ NSRFORMERR = 161,
+ /// DNS server returned general failure
+ NSRSERVFAIL = 162,
+ /// Domain name not found
+ NSRNOTFOUND = 163,
+ /// DNS server does not implement requested operation
+ NSRNOTIMP = 164,
+ /// DNS server refused query
+ NSRREFUSED = 165,
+ /// Misformatted DNS query
+ NSRBADQUERY = 166,
+ /// Misformatted domain name
+ NSRBADNAME = 167,
+ /// Unsupported address family
+ NSRBADFAMILY = 168,
+ /// Misformatted DNS reply
+ NSRBADRESP = 169,
+ /// Could not contact DNS servers
+ NSRCONNREFUSED = 170,
+ /// Timeout while contacting DNS servers
+ NSRTIMEOUT = 171,
+ /// End of file
+ NSROF = 172,
+ /// Error reading file
+ NSRFILE = 173,
+ /// Out of memory
+ NSRNOMEM = 174,
+ /// Application terminated lookup
+ NSRDESTRUCTION = 175,
+ /// Domain name is too long
+ NSRQUERYDOMAINTOOLONG = 176,
+ /// Domain name is too long
+ NSRCNAMELOOP = 177,
+
+ _,
+
+ pub const init = errnoFromSyscall;
+ },
};
pub const pid_t = i32;
pub const fd_t = i32;
+pub const socket_t = i32;
pub const uid_t = u32;
pub const gid_t = u32;
pub const clock_t = isize;
diff --git a/lib/std/os/linux/IoUring.zig b/lib/std/os/linux/IoUring.zig
index 9e9957c697..0e3c4ce338 100644
--- a/lib/std/os/linux/IoUring.zig
+++ b/lib/std/os/linux/IoUring.zig
@@ -4,12 +4,12 @@ const builtin = @import("builtin");
const assert = std.debug.assert;
const mem = std.mem;
const net = std.net;
-const os = std.os;
const posix = std.posix;
-const linux = os.linux;
+const linux = std.os.linux;
const testing = std.testing;
+const is_linux = builtin.os.tag == .linux;
-fd: os.fd_t = -1,
+fd: posix.fd_t = -1,
sq: SubmissionQueue,
cq: CompletionQueue,
flags: u32,
@@ -45,7 +45,7 @@ pub fn init_params(entries: u16, p: *linux.io_uring_params) !IoUring {
assert(p.resv[2] == 0);
const res = linux.io_uring_setup(entries, p);
- switch (linux.getErrno(res)) {
+ switch (linux.E.init(res)) {
.SUCCESS => {},
.FAULT => return error.ParamsOutsideAccessibleAddressSpace,
// The resv array contains non-zero data, p.flags contains an unsupported flag,
@@ -59,11 +59,11 @@ pub fn init_params(entries: u16, p: *linux.io_uring_params) !IoUring {
// or a container seccomp policy prohibits io_uring syscalls:
.PERM => return error.PermissionDenied,
.NOSYS => return error.SystemOutdated,
- else => |errno| return os.unexpectedErrno(errno),
+ else => |errno| return posix.unexpectedErrno(errno),
}
- const fd = @as(os.fd_t, @intCast(res));
+ const fd = @as(posix.fd_t, @intCast(res));
assert(fd >= 0);
- errdefer os.close(fd);
+ errdefer posix.close(fd);
// Kernel versions 5.4 and up use only one mmap() for the submission and completion queues.
// This is not an optional feature for us... if the kernel does it, we have to do it.
@@ -121,7 +121,7 @@ pub fn deinit(self: *IoUring) void {
// The mmaps depend on the fd, so the order of these calls is important:
self.cq.deinit();
self.sq.deinit();
- os.close(self.fd);
+ posix.close(self.fd);
self.fd = -1;
}
@@ -174,7 +174,7 @@ pub fn submit_and_wait(self: *IoUring, wait_nr: u32) !u32 {
pub fn enter(self: *IoUring, to_submit: u32, min_complete: u32, flags: u32) !u32 {
assert(self.fd >= 0);
const res = linux.io_uring_enter(self.fd, to_submit, min_complete, flags, null);
- switch (linux.getErrno(res)) {
+ switch (linux.E.init(res)) {
.SUCCESS => {},
// The kernel was unable to allocate memory or ran out of resources for the request.
// The application should wait for some completions and try again:
@@ -200,7 +200,7 @@ pub fn enter(self: *IoUring, to_submit: u32, min_complete: u32, flags: u32) !u32
// The operation was interrupted by a delivery of a signal before it could complete.
// This can happen while waiting for events with IORING_ENTER_GETEVENTS:
.INTR => return error.SignalInterrupt,
- else => |errno| return os.unexpectedErrno(errno),
+ else => |errno| return posix.unexpectedErrno(errno),
}
return @as(u32, @intCast(res));
}
@@ -344,7 +344,7 @@ pub fn cq_advance(self: *IoUring, count: u32) void {
/// apply to the write, since the fsync may complete before the write is issued to the disk.
/// You should preferably use `link_with_next_sqe()` on a write's SQE to link it with an fsync,
/// or else insert a full write barrier using `drain_previous_sqes()` when queueing an fsync.
-pub fn fsync(self: *IoUring, user_data: u64, fd: os.fd_t, flags: u32) !*linux.io_uring_sqe {
+pub fn fsync(self: *IoUring, user_data: u64, fd: posix.fd_t, flags: u32) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
sqe.prep_fsync(fd, flags);
sqe.user_data = user_data;
@@ -369,7 +369,7 @@ pub const ReadBuffer = union(enum) {
buffer: []u8,
/// io_uring will read directly into these buffers using readv.
- iovecs: []const os.iovec,
+ iovecs: []const posix.iovec,
/// io_uring will select a buffer that has previously been provided with `provide_buffers`.
/// The buffer group reference by `group_id` must contain at least one buffer for the read to work.
@@ -389,7 +389,7 @@ pub const ReadBuffer = union(enum) {
pub fn read(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
buffer: ReadBuffer,
offset: u64,
) !*linux.io_uring_sqe {
@@ -412,7 +412,7 @@ pub fn read(
pub fn write(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
buffer: []const u8,
offset: u64,
) !*linux.io_uring_sqe {
@@ -436,7 +436,7 @@ pub fn write(
/// See https://github.com/axboe/liburing/issues/291
///
/// Returns a pointer to the SQE so that you can further modify the SQE for advanced use cases.
-pub fn splice(self: *IoUring, user_data: u64, fd_in: os.fd_t, off_in: u64, fd_out: os.fd_t, off_out: u64, len: usize) !*linux.io_uring_sqe {
+pub fn splice(self: *IoUring, user_data: u64, fd_in: posix.fd_t, off_in: u64, fd_out: posix.fd_t, off_out: u64, len: usize) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
sqe.prep_splice(fd_in, off_in, fd_out, off_out, len);
sqe.user_data = user_data;
@@ -451,8 +451,8 @@ pub fn splice(self: *IoUring, user_data: u64, fd_in: os.fd_t, off_in: u64, fd_ou
pub fn read_fixed(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- buffer: *os.iovec,
+ fd: posix.fd_t,
+ buffer: *posix.iovec,
offset: u64,
buffer_index: u16,
) !*linux.io_uring_sqe {
@@ -469,8 +469,8 @@ pub fn read_fixed(
pub fn writev(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- iovecs: []const os.iovec_const,
+ fd: posix.fd_t,
+ iovecs: []const posix.iovec_const,
offset: u64,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -487,8 +487,8 @@ pub fn writev(
pub fn write_fixed(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- buffer: *os.iovec,
+ fd: posix.fd_t,
+ buffer: *posix.iovec,
offset: u64,
buffer_index: u16,
) !*linux.io_uring_sqe {
@@ -504,9 +504,9 @@ pub fn write_fixed(
pub fn accept(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- addr: ?*os.sockaddr,
- addrlen: ?*os.socklen_t,
+ fd: posix.fd_t,
+ addr: ?*posix.sockaddr,
+ addrlen: ?*posix.socklen_t,
flags: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -526,9 +526,9 @@ pub fn accept(
pub fn accept_multishot(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- addr: ?*os.sockaddr,
- addrlen: ?*os.socklen_t,
+ fd: posix.fd_t,
+ addr: ?*posix.sockaddr,
+ addrlen: ?*posix.socklen_t,
flags: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -551,9 +551,9 @@ pub fn accept_multishot(
pub fn accept_direct(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- addr: ?*os.sockaddr,
- addrlen: ?*os.socklen_t,
+ fd: posix.fd_t,
+ addr: ?*posix.sockaddr,
+ addrlen: ?*posix.socklen_t,
flags: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -567,9 +567,9 @@ pub fn accept_direct(
pub fn accept_multishot_direct(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- addr: ?*os.sockaddr,
- addrlen: ?*os.socklen_t,
+ fd: posix.fd_t,
+ addr: ?*posix.sockaddr,
+ addrlen: ?*posix.socklen_t,
flags: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -583,9 +583,9 @@ pub fn accept_multishot_direct(
pub fn connect(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- addr: *const os.sockaddr,
- addrlen: os.socklen_t,
+ fd: posix.fd_t,
+ addr: *const posix.sockaddr,
+ addrlen: posix.socklen_t,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
sqe.prep_connect(fd, addr, addrlen);
@@ -598,8 +598,8 @@ pub fn connect(
pub fn epoll_ctl(
self: *IoUring,
user_data: u64,
- epfd: os.fd_t,
- fd: os.fd_t,
+ epfd: posix.fd_t,
+ fd: posix.fd_t,
op: u32,
ev: ?*linux.epoll_event,
) !*linux.io_uring_sqe {
@@ -629,7 +629,7 @@ pub const RecvBuffer = union(enum) {
pub fn recv(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
buffer: RecvBuffer,
flags: u32,
) !*linux.io_uring_sqe {
@@ -653,7 +653,7 @@ pub fn recv(
pub fn send(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
buffer: []const u8,
flags: u32,
) !*linux.io_uring_sqe {
@@ -681,7 +681,7 @@ pub fn send(
pub fn send_zc(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
buffer: []const u8,
send_flags: u32,
zc_flags: u16,
@@ -698,7 +698,7 @@ pub fn send_zc(
pub fn send_zc_fixed(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
buffer: []const u8,
send_flags: u32,
zc_flags: u16,
@@ -716,8 +716,8 @@ pub fn send_zc_fixed(
pub fn recvmsg(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- msg: *os.msghdr,
+ fd: posix.fd_t,
+ msg: *posix.msghdr,
flags: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -732,8 +732,8 @@ pub fn recvmsg(
pub fn sendmsg(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- msg: *const os.msghdr_const,
+ fd: posix.fd_t,
+ msg: *const posix.msghdr_const,
flags: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -748,8 +748,8 @@ pub fn sendmsg(
pub fn sendmsg_zc(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
- msg: *const os.msghdr_const,
+ fd: posix.fd_t,
+ msg: *const posix.msghdr_const,
flags: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -764,10 +764,10 @@ pub fn sendmsg_zc(
pub fn openat(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
path: [*:0]const u8,
flags: linux.O,
- mode: os.mode_t,
+ mode: posix.mode_t,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
sqe.prep_openat(fd, path, flags, mode);
@@ -789,10 +789,10 @@ pub fn openat(
pub fn openat_direct(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
path: [*:0]const u8,
flags: linux.O,
- mode: os.mode_t,
+ mode: posix.mode_t,
file_index: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -804,7 +804,7 @@ pub fn openat_direct(
/// Queues (but does not submit) an SQE to perform a `close(2)`.
/// Returns a pointer to the SQE.
/// Available since 5.6.
-pub fn close(self: *IoUring, user_data: u64, fd: os.fd_t) !*linux.io_uring_sqe {
+pub fn close(self: *IoUring, user_data: u64, fd: posix.fd_t) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
sqe.prep_close(fd);
sqe.user_data = user_data;
@@ -836,7 +836,7 @@ pub fn close_direct(self: *IoUring, user_data: u64, file_index: u32) !*linux.io_
pub fn timeout(
self: *IoUring,
user_data: u64,
- ts: *const os.linux.kernel_timespec,
+ ts: *const linux.kernel_timespec,
count: u32,
flags: u32,
) !*linux.io_uring_sqe {
@@ -885,7 +885,7 @@ pub fn timeout_remove(
pub fn link_timeout(
self: *IoUring,
user_data: u64,
- ts: *const os.linux.kernel_timespec,
+ ts: *const linux.kernel_timespec,
flags: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -899,7 +899,7 @@ pub fn link_timeout(
pub fn poll_add(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
poll_mask: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -942,7 +942,7 @@ pub fn poll_update(
pub fn fallocate(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
mode: i32,
offset: u64,
len: u64,
@@ -958,7 +958,7 @@ pub fn fallocate(
pub fn statx(
self: *IoUring,
user_data: u64,
- fd: os.fd_t,
+ fd: posix.fd_t,
path: [:0]const u8,
flags: u32,
mask: u32,
@@ -997,7 +997,7 @@ pub fn cancel(
pub fn shutdown(
self: *IoUring,
user_data: u64,
- sockfd: os.socket_t,
+ sockfd: posix.socket_t,
how: u32,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -1011,9 +1011,9 @@ pub fn shutdown(
pub fn renameat(
self: *IoUring,
user_data: u64,
- old_dir_fd: os.fd_t,
+ old_dir_fd: posix.fd_t,
old_path: [*:0]const u8,
- new_dir_fd: os.fd_t,
+ new_dir_fd: posix.fd_t,
new_path: [*:0]const u8,
flags: u32,
) !*linux.io_uring_sqe {
@@ -1028,7 +1028,7 @@ pub fn renameat(
pub fn unlinkat(
self: *IoUring,
user_data: u64,
- dir_fd: os.fd_t,
+ dir_fd: posix.fd_t,
path: [*:0]const u8,
flags: u32,
) !*linux.io_uring_sqe {
@@ -1043,9 +1043,9 @@ pub fn unlinkat(
pub fn mkdirat(
self: *IoUring,
user_data: u64,
- dir_fd: os.fd_t,
+ dir_fd: posix.fd_t,
path: [*:0]const u8,
- mode: os.mode_t,
+ mode: posix.mode_t,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
sqe.prep_mkdirat(dir_fd, path, mode);
@@ -1059,7 +1059,7 @@ pub fn symlinkat(
self: *IoUring,
user_data: u64,
target: [*:0]const u8,
- new_dir_fd: os.fd_t,
+ new_dir_fd: posix.fd_t,
link_path: [*:0]const u8,
) !*linux.io_uring_sqe {
const sqe = try self.get_sqe();
@@ -1073,9 +1073,9 @@ pub fn symlinkat(
pub fn linkat(
self: *IoUring,
user_data: u64,
- old_dir_fd: os.fd_t,
+ old_dir_fd: posix.fd_t,
old_path: [*:0]const u8,
- new_dir_fd: os.fd_t,
+ new_dir_fd: posix.fd_t,
new_path: [*:0]const u8,
flags: u32,
) !*linux.io_uring_sqe {
@@ -1147,7 +1147,7 @@ pub fn waitid(
/// Registering file descriptors will wait for the ring to idle.
/// Files are automatically unregistered by the kernel when the ring is torn down.
/// An application need unregister only if it wants to register a new array of file descriptors.
-pub fn register_files(self: *IoUring, fds: []const os.fd_t) !void {
+pub fn register_files(self: *IoUring, fds: []const posix.fd_t) !void {
assert(self.fd >= 0);
const res = linux.io_uring_register(
self.fd,
@@ -1166,7 +1166,7 @@ pub fn register_files(self: *IoUring, fds: []const os.fd_t) !void {
/// * removing an existing entry (set the fd to -1)
/// * replacing an existing entry with a new fd
/// Adding new file descriptors must be done with `register_files`.
-pub fn register_files_update(self: *IoUring, offset: u32, fds: []const os.fd_t) !void {
+pub fn register_files_update(self: *IoUring, offset: u32, fds: []const posix.fd_t) !void {
assert(self.fd >= 0);
const FilesUpdate = extern struct {
@@ -1192,7 +1192,7 @@ pub fn register_files_update(self: *IoUring, offset: u32, fds: []const os.fd_t)
/// Registers the file descriptor for an eventfd that will be notified of completion events on
/// an io_uring instance.
/// Only a single a eventfd can be registered at any given point in time.
-pub fn register_eventfd(self: *IoUring, fd: os.fd_t) !void {
+pub fn register_eventfd(self: *IoUring, fd: posix.fd_t) !void {
assert(self.fd >= 0);
const res = linux.io_uring_register(
self.fd,
@@ -1207,7 +1207,7 @@ pub fn register_eventfd(self: *IoUring, fd: os.fd_t) !void {
/// an io_uring instance. Notifications are only posted for events that complete in an async manner.
/// This means that events that complete inline while being submitted do not trigger a notification event.
/// Only a single eventfd can be registered at any given point in time.
-pub fn register_eventfd_async(self: *IoUring, fd: os.fd_t) !void {
+pub fn register_eventfd_async(self: *IoUring, fd: posix.fd_t) !void {
assert(self.fd >= 0);
const res = linux.io_uring_register(
self.fd,
@@ -1231,7 +1231,7 @@ pub fn unregister_eventfd(self: *IoUring) !void {
}
/// Registers an array of buffers for use with `read_fixed` and `write_fixed`.
-pub fn register_buffers(self: *IoUring, buffers: []const os.iovec) !void {
+pub fn register_buffers(self: *IoUring, buffers: []const posix.iovec) !void {
assert(self.fd >= 0);
const res = linux.io_uring_register(
self.fd,
@@ -1246,15 +1246,15 @@ pub fn register_buffers(self: *IoUring, buffers: []const os.iovec) !void {
pub fn unregister_buffers(self: *IoUring) !void {
assert(self.fd >= 0);
const res = linux.io_uring_register(self.fd, .UNREGISTER_BUFFERS, null, 0);
- switch (linux.getErrno(res)) {
+ switch (linux.E.init(res)) {
.SUCCESS => {},
.NXIO => return error.BuffersNotRegistered,
- else => |errno| return os.unexpectedErrno(errno),
+ else => |errno| return posix.unexpectedErrno(errno),
}
}
fn handle_registration_result(res: usize) !void {
- switch (linux.getErrno(res)) {
+ switch (linux.E.init(res)) {
.SUCCESS => {},
// One or more fds in the array are invalid, or the kernel does not support sparse sets:
.BADF => return error.FileDescriptorInvalid,
@@ -1271,7 +1271,7 @@ fn handle_registration_result(res: usize) !void {
.NOMEM => return error.SystemResources,
// Attempt to register files on a ring already registering files or being torn down:
.NXIO => return error.RingShuttingDownOrAlreadyRegisteringFiles,
- else => |errno| return os.unexpectedErrno(errno),
+ else => |errno| return posix.unexpectedErrno(errno),
}
}
@@ -1279,10 +1279,10 @@ fn handle_registration_result(res: usize) !void {
pub fn unregister_files(self: *IoUring) !void {
assert(self.fd >= 0);
const res = linux.io_uring_register(self.fd, .UNREGISTER_FILES, null, 0);
- switch (linux.getErrno(res)) {
+ switch (linux.E.init(res)) {
.SUCCESS => {},
.NXIO => return error.FilesNotRegistered,
- else => |errno| return os.unexpectedErrno(errno),
+ else => |errno| return posix.unexpectedErrno(errno),
}
}
@@ -1355,36 +1355,36 @@ pub const SubmissionQueue = struct {
sqe_head: u32 = 0,
sqe_tail: u32 = 0,
- pub fn init(fd: os.fd_t, p: linux.io_uring_params) !SubmissionQueue {
+ pub fn init(fd: posix.fd_t, p: linux.io_uring_params) !SubmissionQueue {
assert(fd >= 0);
assert((p.features & linux.IORING_FEAT_SINGLE_MMAP) != 0);
const size = @max(
p.sq_off.array + p.sq_entries * @sizeOf(u32),
p.cq_off.cqes + p.cq_entries * @sizeOf(linux.io_uring_cqe),
);
- const mmap = try os.mmap(
+ const mmap = try posix.mmap(
null,
size,
- os.PROT.READ | os.PROT.WRITE,
+ posix.PROT.READ | posix.PROT.WRITE,
.{ .TYPE = .SHARED, .POPULATE = true },
fd,
linux.IORING_OFF_SQ_RING,
);
- errdefer os.munmap(mmap);
+ errdefer posix.munmap(mmap);
assert(mmap.len == size);
// The motivation for the `sqes` and `array` indirection is to make it possible for the
// application to preallocate static linux.io_uring_sqe entries and then replay them when needed.
const size_sqes = p.sq_entries * @sizeOf(linux.io_uring_sqe);
- const mmap_sqes = try os.mmap(
+ const mmap_sqes = try posix.mmap(
null,
size_sqes,
- os.PROT.READ | os.PROT.WRITE,
+ posix.PROT.READ | posix.PROT.WRITE,
.{ .TYPE = .SHARED, .POPULATE = true },
fd,
linux.IORING_OFF_SQES,
);
- errdefer os.munmap(mmap_sqes);
+ errdefer posix.munmap(mmap_sqes);
assert(mmap_sqes.len == size_sqes);
const array: [*]u32 = @ptrCast(@alignCast(&mmap[p.sq_off.array]));
@@ -1406,8 +1406,8 @@ pub const SubmissionQueue = struct {
}
pub fn deinit(self: *SubmissionQueue) void {
- os.munmap(self.mmap_sqes);
- os.munmap(self.mmap);
+ posix.munmap(self.mmap_sqes);
+ posix.munmap(self.mmap);
}
};
@@ -1418,7 +1418,7 @@ pub const CompletionQueue = struct {
overflow: *u32,
cqes: []linux.io_uring_cqe,
- pub fn init(fd: os.fd_t, p: linux.io_uring_params, sq: SubmissionQueue) !CompletionQueue {
+ pub fn init(fd: posix.fd_t, p: linux.io_uring_params, sq: SubmissionQueue) !CompletionQueue {
assert(fd >= 0);
assert((p.features & linux.IORING_FEAT_SINGLE_MMAP) != 0);
const mmap = sq.mmap;
@@ -1506,7 +1506,7 @@ pub const BufferGroup = struct {
}
// Prepare recv operation which will select buffer from this group.
- pub fn recv(self: *BufferGroup, user_data: u64, fd: os.fd_t, flags: u32) !*linux.io_uring_sqe {
+ pub fn recv(self: *BufferGroup, user_data: u64, fd: posix.fd_t, flags: u32) !*linux.io_uring_sqe {
var sqe = try self.ring.get_sqe();
sqe.prep_rw(.RECV, fd, 0, 0, 0);
sqe.rw_flags = flags;
@@ -1517,7 +1517,7 @@ pub const BufferGroup = struct {
}
// Prepare multishot recv operation which will select buffer from this group.
- pub fn recv_multishot(self: *BufferGroup, user_data: u64, fd: os.fd_t, flags: u32) !*linux.io_uring_sqe {
+ pub fn recv_multishot(self: *BufferGroup, user_data: u64, fd: posix.fd_t, flags: u32) !*linux.io_uring_sqe {
var sqe = try self.recv(user_data, fd, flags);
sqe.ioprio |= linux.IORING_RECV_MULTISHOT;
return sqe;
@@ -1559,20 +1559,20 @@ pub const BufferGroup = struct {
/// `fd` is IO_Uring.fd for which the provided buffer ring is being registered.
/// `entries` is the number of entries requested in the buffer ring, must be power of 2.
/// `group_id` is the chosen buffer group ID, unique in IO_Uring.
-pub fn setup_buf_ring(fd: os.fd_t, entries: u16, group_id: u16) !*align(mem.page_size) linux.io_uring_buf_ring {
+pub fn setup_buf_ring(fd: posix.fd_t, entries: u16, group_id: u16) !*align(mem.page_size) linux.io_uring_buf_ring {
if (entries == 0 or entries > 1 << 15) return error.EntriesNotInRange;
if (!std.math.isPowerOfTwo(entries)) return error.EntriesNotPowerOfTwo;
const mmap_size = entries * @sizeOf(linux.io_uring_buf);
- const mmap = try os.mmap(
+ const mmap = try posix.mmap(
null,
mmap_size,
- os.PROT.READ | os.PROT.WRITE,
+ posix.PROT.READ | posix.PROT.WRITE,
.{ .TYPE = .PRIVATE, .ANONYMOUS = true },
-1,
0,
);
- errdefer os.munmap(mmap);
+ errdefer posix.munmap(mmap);
assert(mmap.len == mmap_size);
const br: *align(mem.page_size) linux.io_uring_buf_ring = @ptrCast(mmap.ptr);
@@ -1580,7 +1580,7 @@ pub fn setup_buf_ring(fd: os.fd_t, entries: u16, group_id: u16) !*align(mem.page
return br;
}
-fn register_buf_ring(fd: os.fd_t, addr: u64, entries: u32, group_id: u16) !void {
+fn register_buf_ring(fd: posix.fd_t, addr: u64, entries: u32, group_id: u16) !void {
var reg = mem.zeroInit(linux.io_uring_buf_reg, .{
.ring_addr = addr,
.ring_entries = entries,
@@ -1595,7 +1595,7 @@ fn register_buf_ring(fd: os.fd_t, addr: u64, entries: u32, group_id: u16) !void
try handle_register_buf_ring_result(res);
}
-fn unregister_buf_ring(fd: os.fd_t, group_id: u16) !void {
+fn unregister_buf_ring(fd: posix.fd_t, group_id: u16) !void {
var reg = mem.zeroInit(linux.io_uring_buf_reg, .{
.bgid = group_id,
});
@@ -1609,20 +1609,20 @@ fn unregister_buf_ring(fd: os.fd_t, group_id: u16) !void {
}
fn handle_register_buf_ring_result(res: usize) !void {
- switch (linux.getErrno(res)) {
+ switch (linux.E.init(res)) {
.SUCCESS => {},
.INVAL => return error.ArgumentsInvalid,
- else => |errno| return os.unexpectedErrno(errno),
+ else => |errno| return posix.unexpectedErrno(errno),
}
}
// Unregisters a previously registered shared buffer ring, returned from io_uring_setup_buf_ring.
-pub fn free_buf_ring(fd: os.fd_t, br: *align(mem.page_size) linux.io_uring_buf_ring, entries: u32, group_id: u16) void {
+pub fn free_buf_ring(fd: posix.fd_t, br: *align(mem.page_size) linux.io_uring_buf_ring, entries: u32, group_id: u16) void {
unregister_buf_ring(fd, group_id) catch {};
var mmap: []align(mem.page_size) u8 = undefined;
mmap.ptr = @ptrCast(br);
mmap.len = entries * @sizeOf(linux.io_uring_buf);
- os.munmap(mmap);
+ posix.munmap(mmap);
}
/// Initialises `br` so that it is ready to be used.
@@ -1664,7 +1664,7 @@ pub fn buf_ring_advance(br: *linux.io_uring_buf_ring, count: u16) void {
}
test "structs/offsets/entries" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
try testing.expectEqual(@as(usize, 120), @sizeOf(linux.io_uring_params));
try testing.expectEqual(@as(usize, 64), @sizeOf(linux.io_uring_sqe));
@@ -1679,7 +1679,7 @@ test "structs/offsets/entries" {
}
test "nop" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -1688,7 +1688,7 @@ test "nop" {
};
defer {
ring.deinit();
- testing.expectEqual(@as(os.fd_t, -1), ring.fd) catch @panic("test failed");
+ testing.expectEqual(@as(posix.fd_t, -1), ring.fd) catch @panic("test failed");
}
const sqe = try ring.nop(0xaaaaaaaa);
@@ -1746,7 +1746,7 @@ test "nop" {
}
test "readv" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -1755,8 +1755,8 @@ test "readv" {
};
defer ring.deinit();
- const fd = try os.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
- defer os.close(fd);
+ const fd = try posix.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
+ defer posix.close(fd);
// Linux Kernel 5.4 supports IORING_REGISTER_FILES but not sparse fd sets (i.e. an fd of -1).
// Linux Kernel 5.5 adds support for sparse fd sets.
@@ -1764,13 +1764,13 @@ test "readv" {
// https://github.com/torvalds/linux/blob/v5.4/fs/io_uring.c#L3119-L3124 vs
// https://github.com/torvalds/linux/blob/v5.8/fs/io_uring.c#L6687-L6691
// We therefore avoid stressing sparse fd sets here:
- var registered_fds = [_]os.fd_t{0} ** 1;
+ var registered_fds = [_]posix.fd_t{0} ** 1;
const fd_index = 0;
registered_fds[fd_index] = fd;
try ring.register_files(registered_fds[0..]);
var buffer = [_]u8{42} ** 128;
- var iovecs = [_]os.iovec{os.iovec{ .iov_base = &buffer, .iov_len = buffer.len }};
+ var iovecs = [_]posix.iovec{posix.iovec{ .iov_base = &buffer, .iov_len = buffer.len }};
const sqe = try ring.read(0xcccccccc, fd_index, .{ .iovecs = iovecs[0..] }, 0);
try testing.expectEqual(linux.IORING_OP.READV, sqe.opcode);
sqe.flags |= linux.IOSQE_FIXED_FILE;
@@ -1788,7 +1788,7 @@ test "readv" {
}
test "writev/fsync/readv" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(4, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -1806,12 +1806,12 @@ test "writev/fsync/readv" {
const fd = file.handle;
const buffer_write = [_]u8{42} ** 128;
- const iovecs_write = [_]os.iovec_const{
- os.iovec_const{ .iov_base = &buffer_write, .iov_len = buffer_write.len },
+ const iovecs_write = [_]posix.iovec_const{
+ posix.iovec_const{ .iov_base = &buffer_write, .iov_len = buffer_write.len },
};
var buffer_read = [_]u8{0} ** 128;
- var iovecs_read = [_]os.iovec{
- os.iovec{ .iov_base = &buffer_read, .iov_len = buffer_read.len },
+ var iovecs_read = [_]posix.iovec{
+ posix.iovec{ .iov_base = &buffer_read, .iov_len = buffer_read.len },
};
const sqe_writev = try ring.writev(0xdddddddd, fd, iovecs_write[0..], 17);
@@ -1858,7 +1858,7 @@ test "writev/fsync/readv" {
}
test "write/read" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(2, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -1905,7 +1905,7 @@ test "write/read" {
}
test "splice/read" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(4, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -1929,7 +1929,7 @@ test "splice/read" {
var buffer_read = [_]u8{98} ** 20;
_ = try file_src.write(&buffer_write);
- const fds = try os.pipe();
+ const fds = try posix.pipe();
const pipe_offset: u64 = std.math.maxInt(u64);
const sqe_splice_to_pipe = try ring.splice(0x11111111, fd_src, 0, fds[1], pipe_offset, buffer_write.len);
@@ -1976,7 +1976,7 @@ test "splice/read" {
}
test "write_fixed/read_fixed" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(2, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -1998,7 +1998,7 @@ test "write_fixed/read_fixed" {
@memset(&raw_buffers[0], 'z');
raw_buffers[0][0.."foobar".len].* = "foobar".*;
- var buffers = [2]os.iovec{
+ var buffers = [2]posix.iovec{
.{ .iov_base = &raw_buffers[0], .iov_len = raw_buffers[0].len },
.{ .iov_base = &raw_buffers[1], .iov_len = raw_buffers[1].len },
};
@@ -2041,7 +2041,7 @@ test "write_fixed/read_fixed" {
}
test "openat" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2063,7 +2063,7 @@ test "openat" {
} else @intFromPtr(path);
const flags: linux.O = .{ .CLOEXEC = true, .ACCMODE = .RDWR, .CREAT = true };
- const mode: os.mode_t = 0o666;
+ const mode: posix.mode_t = 0o666;
const sqe_openat = try ring.openat(0x33333333, tmp.dir.fd, path, flags, mode);
try testing.expectEqual(linux.io_uring_sqe{
.opcode = .OPENAT,
@@ -2091,11 +2091,11 @@ test "openat" {
try testing.expect(cqe_openat.res > 0);
try testing.expectEqual(@as(u32, 0), cqe_openat.flags);
- os.close(cqe_openat.res);
+ posix.close(cqe_openat.res);
}
test "close" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2126,7 +2126,7 @@ test "close" {
}
test "accept/connect/send/recv" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(16, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2167,7 +2167,7 @@ test "accept/connect/send/recv" {
}
test "sendmsg/recvmsg" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(2, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2178,24 +2178,24 @@ test "sendmsg/recvmsg" {
var address_server = try net.Address.parseIp4("127.0.0.1", 0);
- const server = try os.socket(address_server.any.family, os.SOCK.DGRAM, 0);
- defer os.close(server);
- try os.setsockopt(server, os.SOL.SOCKET, os.SO.REUSEPORT, &mem.toBytes(@as(c_int, 1)));
- try os.setsockopt(server, os.SOL.SOCKET, os.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
- try os.bind(server, &address_server.any, address_server.getOsSockLen());
+ const server = try posix.socket(address_server.any.family, posix.SOCK.DGRAM, 0);
+ defer posix.close(server);
+ try posix.setsockopt(server, posix.SOL.SOCKET, posix.SO.REUSEPORT, &mem.toBytes(@as(c_int, 1)));
+ try posix.setsockopt(server, posix.SOL.SOCKET, posix.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
+ try posix.bind(server, &address_server.any, address_server.getOsSockLen());
// set address_server to the OS-chosen IP/port.
- var slen: os.socklen_t = address_server.getOsSockLen();
- try os.getsockname(server, &address_server.any, &slen);
+ var slen: posix.socklen_t = address_server.getOsSockLen();
+ try posix.getsockname(server, &address_server.any, &slen);
- const client = try os.socket(address_server.any.family, os.SOCK.DGRAM, 0);
- defer os.close(client);
+ const client = try posix.socket(address_server.any.family, posix.SOCK.DGRAM, 0);
+ defer posix.close(client);
const buffer_send = [_]u8{42} ** 128;
- const iovecs_send = [_]os.iovec_const{
- os.iovec_const{ .iov_base = &buffer_send, .iov_len = buffer_send.len },
+ const iovecs_send = [_]posix.iovec_const{
+ posix.iovec_const{ .iov_base = &buffer_send, .iov_len = buffer_send.len },
};
- const msg_send = os.msghdr_const{
+ const msg_send: posix.msghdr_const = .{
.name = &address_server.any,
.namelen = address_server.getOsSockLen(),
.iov = &iovecs_send,
@@ -2210,12 +2210,12 @@ test "sendmsg/recvmsg" {
try testing.expectEqual(client, sqe_sendmsg.fd);
var buffer_recv = [_]u8{0} ** 128;
- var iovecs_recv = [_]os.iovec{
- os.iovec{ .iov_base = &buffer_recv, .iov_len = buffer_recv.len },
+ var iovecs_recv = [_]posix.iovec{
+ posix.iovec{ .iov_base = &buffer_recv, .iov_len = buffer_recv.len },
};
const addr = [_]u8{0} ** 4;
var address_recv = net.Address.initIp4(addr, 0);
- var msg_recv: os.msghdr = os.msghdr{
+ var msg_recv: posix.msghdr = .{
.name = &address_recv.any,
.namelen = address_recv.getOsSockLen(),
.iov = &iovecs_recv,
@@ -2254,7 +2254,7 @@ test "sendmsg/recvmsg" {
}
test "timeout (after a relative time)" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2265,7 +2265,7 @@ test "timeout (after a relative time)" {
const ms = 10;
const margin = 5;
- const ts = os.linux.kernel_timespec{ .tv_sec = 0, .tv_nsec = ms * 1000000 };
+ const ts: linux.kernel_timespec = .{ .tv_sec = 0, .tv_nsec = ms * 1000000 };
const started = std.time.milliTimestamp();
const sqe = try ring.timeout(0x55555555, &ts, 0, 0);
@@ -2285,7 +2285,7 @@ test "timeout (after a relative time)" {
}
test "timeout (after a number of completions)" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(2, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2294,7 +2294,7 @@ test "timeout (after a number of completions)" {
};
defer ring.deinit();
- const ts = os.linux.kernel_timespec{ .tv_sec = 3, .tv_nsec = 0 };
+ const ts: linux.kernel_timespec = .{ .tv_sec = 3, .tv_nsec = 0 };
const count_completions: u64 = 1;
const sqe_timeout = try ring.timeout(0x66666666, &ts, count_completions, 0);
try testing.expectEqual(linux.IORING_OP.TIMEOUT, sqe_timeout.opcode);
@@ -2318,7 +2318,7 @@ test "timeout (after a number of completions)" {
}
test "timeout_remove" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(2, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2327,7 +2327,7 @@ test "timeout_remove" {
};
defer ring.deinit();
- const ts = os.linux.kernel_timespec{ .tv_sec = 3, .tv_nsec = 0 };
+ const ts: linux.kernel_timespec = .{ .tv_sec = 3, .tv_nsec = 0 };
const sqe_timeout = try ring.timeout(0x88888888, &ts, 0, 0);
try testing.expectEqual(linux.IORING_OP.TIMEOUT, sqe_timeout.opcode);
try testing.expectEqual(@as(u64, 0x88888888), sqe_timeout.user_data);
@@ -2343,7 +2343,7 @@ test "timeout_remove" {
// * kernel 5.10 gives user data 0x88888888 first, 0x99999999 second
// * kernel 5.18 gives user data 0x99999999 first, 0x88888888 second
- var cqes: [2]os.linux.io_uring_cqe = undefined;
+ var cqes: [2]linux.io_uring_cqe = undefined;
cqes[0] = try ring.copy_cqe();
cqes[1] = try ring.copy_cqe();
@@ -2378,7 +2378,7 @@ test "timeout_remove" {
}
test "accept/connect/recv/link_timeout" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(16, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2395,7 +2395,7 @@ test "accept/connect/recv/link_timeout" {
const sqe_recv = try ring.recv(0xffffffff, socket_test_harness.server, .{ .buffer = buffer_recv[0..] }, 0);
sqe_recv.flags |= linux.IOSQE_IO_LINK;
- const ts = os.linux.kernel_timespec{ .tv_sec = 0, .tv_nsec = 1000000 };
+ const ts = linux.kernel_timespec{ .tv_sec = 0, .tv_nsec = 1000000 };
_ = try ring.link_timeout(0x22222222, &ts, 0);
const nr_wait = try ring.submit();
@@ -2427,7 +2427,7 @@ test "accept/connect/recv/link_timeout" {
}
test "fallocate" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2473,7 +2473,7 @@ test "fallocate" {
}
test "statx" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2525,12 +2525,12 @@ test "statx" {
.flags = 0,
}, cqe);
- try testing.expect(buf.mask & os.linux.STATX_SIZE == os.linux.STATX_SIZE);
+ try testing.expect(buf.mask & linux.STATX_SIZE == linux.STATX_SIZE);
try testing.expectEqual(@as(u64, 6), buf.size);
}
test "accept/connect/recv/cancel" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(16, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2580,7 +2580,7 @@ test "accept/connect/recv/cancel" {
}
test "register_files_update" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2589,10 +2589,10 @@ test "register_files_update" {
};
defer ring.deinit();
- const fd = try os.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
- defer os.close(fd);
+ const fd = try posix.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
+ defer posix.close(fd);
- var registered_fds = [_]os.fd_t{0} ** 2;
+ var registered_fds = [_]posix.fd_t{0} ** 2;
const fd_index = 0;
const fd_index2 = 1;
registered_fds[fd_index] = fd;
@@ -2607,8 +2607,8 @@ test "register_files_update" {
// Test IORING_REGISTER_FILES_UPDATE
// Only available since Linux 5.5
- const fd2 = try os.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
- defer os.close(fd2);
+ const fd2 = try posix.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
+ defer posix.close(fd2);
registered_fds[fd_index] = fd2;
registered_fds[fd_index2] = -1;
@@ -2660,14 +2660,14 @@ test "register_files_update" {
try testing.expectEqual(@as(u32, 1), try ring.submit());
const cqe = try ring.copy_cqe();
- try testing.expectEqual(os.linux.E.BADF, cqe.err());
+ try testing.expectEqual(linux.E.BADF, cqe.err());
}
try ring.unregister_files();
}
test "shutdown" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(16, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2680,17 +2680,17 @@ test "shutdown" {
// Socket bound, expect shutdown to work
{
- const server = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
- defer os.close(server);
- try os.setsockopt(server, os.SOL.SOCKET, os.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
- try os.bind(server, &address.any, address.getOsSockLen());
- try os.listen(server, 1);
+ const server = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
+ defer posix.close(server);
+ try posix.setsockopt(server, posix.SOL.SOCKET, posix.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
+ try posix.bind(server, &address.any, address.getOsSockLen());
+ try posix.listen(server, 1);
// set address to the OS-chosen IP/port.
- var slen: os.socklen_t = address.getOsSockLen();
- try os.getsockname(server, &address.any, &slen);
+ var slen: posix.socklen_t = address.getOsSockLen();
+ try posix.getsockname(server, &address.any, &slen);
- const shutdown_sqe = try ring.shutdown(0x445445445, server, os.linux.SHUT.RD);
+ const shutdown_sqe = try ring.shutdown(0x445445445, server, linux.SHUT.RD);
try testing.expectEqual(linux.IORING_OP.SHUTDOWN, shutdown_sqe.opcode);
try testing.expectEqual(@as(i32, server), shutdown_sqe.fd);
@@ -2713,10 +2713,10 @@ test "shutdown" {
// Socket not bound, expect to fail with ENOTCONN
{
- const server = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
- defer os.close(server);
+ const server = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
+ defer posix.close(server);
- const shutdown_sqe = ring.shutdown(0x445445445, server, os.linux.SHUT.RD) catch |err| switch (err) {
+ const shutdown_sqe = ring.shutdown(0x445445445, server, linux.SHUT.RD) catch |err| switch (err) {
else => |errno| std.debug.panic("unhandled errno: {}", .{errno}),
};
try testing.expectEqual(linux.IORING_OP.SHUTDOWN, shutdown_sqe.opcode);
@@ -2726,12 +2726,12 @@ test "shutdown" {
const cqe = try ring.copy_cqe();
try testing.expectEqual(@as(u64, 0x445445445), cqe.user_data);
- try testing.expectEqual(os.linux.E.NOTCONN, cqe.err());
+ try testing.expectEqual(linux.E.NOTCONN, cqe.err());
}
}
test "renameat" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2800,7 +2800,7 @@ test "renameat" {
}
test "unlinkat" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2852,7 +2852,7 @@ test "unlinkat" {
}
test "mkdirat" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2896,7 +2896,7 @@ test "mkdirat" {
}
test "symlinkat" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -2944,7 +2944,7 @@ test "symlinkat" {
}
test "linkat" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -3003,7 +3003,7 @@ test "linkat" {
}
test "provide_buffers: read" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -3012,8 +3012,8 @@ test "provide_buffers: read" {
};
defer ring.deinit();
- const fd = try os.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
- defer os.close(fd);
+ const fd = try posix.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
+ defer posix.close(fd);
const group_id = 1337;
const buffer_id = 0;
@@ -3135,7 +3135,7 @@ test "provide_buffers: read" {
}
test "remove_buffers" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(1, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -3144,8 +3144,8 @@ test "remove_buffers" {
};
defer ring.deinit();
- const fd = try os.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
- defer os.close(fd);
+ const fd = try posix.openZ("/dev/zero", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
+ defer posix.close(fd);
const group_id = 1337;
const buffer_id = 0;
@@ -3224,7 +3224,7 @@ test "remove_buffers" {
}
test "provide_buffers: accept/connect/send/recv" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(16, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -3391,9 +3391,9 @@ test "provide_buffers: accept/connect/send/recv" {
/// Used for testing server/client interactions.
const SocketTestHarness = struct {
- listener: os.socket_t,
- server: os.socket_t,
- client: os.socket_t,
+ listener: posix.socket_t,
+ server: posix.socket_t,
+ client: posix.socket_t,
fn close(self: SocketTestHarness) void {
posix.close(self.client);
@@ -3408,12 +3408,12 @@ fn createSocketTestHarness(ring: *IoUring) !SocketTestHarness {
errdefer posix.close(listener_socket);
// Submit 1 accept
- var accept_addr: os.sockaddr = undefined;
- var accept_addr_len: os.socklen_t = @sizeOf(@TypeOf(accept_addr));
+ var accept_addr: posix.sockaddr = undefined;
+ var accept_addr_len: posix.socklen_t = @sizeOf(@TypeOf(accept_addr));
_ = try ring.accept(0xaaaaaaaa, listener_socket, &accept_addr, &accept_addr_len, 0);
// Create a TCP client socket
- const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
+ const client = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
errdefer posix.close(client);
_ = try ring.connect(0xcccccccc, client, &address.any, address.getOsSockLen());
@@ -3451,24 +3451,24 @@ fn createSocketTestHarness(ring: *IoUring) !SocketTestHarness {
};
}
-fn createListenerSocket(address: *net.Address) !os.socket_t {
+fn createListenerSocket(address: *net.Address) !posix.socket_t {
const kernel_backlog = 1;
- const listener_socket = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
+ const listener_socket = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
errdefer posix.close(listener_socket);
- try os.setsockopt(listener_socket, os.SOL.SOCKET, os.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
- try os.bind(listener_socket, &address.any, address.getOsSockLen());
- try os.listen(listener_socket, kernel_backlog);
+ try posix.setsockopt(listener_socket, posix.SOL.SOCKET, posix.SO.REUSEADDR, &mem.toBytes(@as(c_int, 1)));
+ try posix.bind(listener_socket, &address.any, address.getOsSockLen());
+ try posix.listen(listener_socket, kernel_backlog);
// set address to the OS-chosen IP/port.
- var slen: os.socklen_t = address.getOsSockLen();
- try os.getsockname(listener_socket, &address.any, &slen);
+ var slen: posix.socklen_t = address.getOsSockLen();
+ try posix.getsockname(listener_socket, &address.any, &slen);
return listener_socket;
}
test "accept multishot" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(16, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -3482,8 +3482,8 @@ test "accept multishot" {
defer posix.close(listener_socket);
// submit multishot accept operation
- var addr: os.sockaddr = undefined;
- var addr_len: os.socklen_t = @sizeOf(@TypeOf(addr));
+ var addr: posix.sockaddr = undefined;
+ var addr_len: posix.socklen_t = @sizeOf(@TypeOf(addr));
const userdata: u64 = 0xaaaaaaaa;
_ = try ring.accept_multishot(userdata, listener_socket, &addr, &addr_len, 0);
try testing.expectEqual(@as(u32, 1), try ring.submit());
@@ -3491,9 +3491,9 @@ test "accept multishot" {
var nr: usize = 4; // number of clients to connect
while (nr > 0) : (nr -= 1) {
// connect client
- const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
+ const client = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
errdefer posix.close(client);
- try os.connect(client, &address.any, address.getOsSockLen());
+ try posix.connect(client, &address.any, address.getOsSockLen());
// test accept completion
var cqe = try ring.copy_cqe();
@@ -3571,7 +3571,7 @@ test "accept_direct" {
var address = try net.Address.parseIp4("127.0.0.1", 0);
// register direct file descriptors
- var registered_fds = [_]os.fd_t{-1} ** 2;
+ var registered_fds = [_]posix.fd_t{-1} ** 2;
try ring.register_files(registered_fds[0..]);
const listener_socket = try createListenerSocket(&address);
@@ -3591,19 +3591,19 @@ test "accept_direct" {
try testing.expectEqual(@as(u32, 1), try ring.submit());
// connect
- const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
- try os.connect(client, &address.any, address.getOsSockLen());
+ const client = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
+ try posix.connect(client, &address.any, address.getOsSockLen());
defer posix.close(client);
// accept completion
const cqe_accept = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe_accept.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe_accept.err());
const fd_index = cqe_accept.res;
try testing.expect(fd_index < registered_fds.len);
try testing.expect(cqe_accept.user_data == accept_userdata);
// send data
- _ = try os.send(client, buffer_send, 0);
+ _ = try posix.send(client, buffer_send, 0);
// Example of how to use registered fd:
// Submit receive to fixed file returned by accept (fd_index).
@@ -3625,13 +3625,13 @@ test "accept_direct" {
_ = try ring.accept_direct(accept_userdata, listener_socket, null, null, 0);
try testing.expectEqual(@as(u32, 1), try ring.submit());
// connect
- const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
- try os.connect(client, &address.any, address.getOsSockLen());
+ const client = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
+ try posix.connect(client, &address.any, address.getOsSockLen());
defer posix.close(client);
// completion with error
const cqe_accept = try ring.copy_cqe();
try testing.expect(cqe_accept.user_data == accept_userdata);
- try testing.expectEqual(os.E.NFILE, cqe_accept.err());
+ try testing.expectEqual(posix.E.NFILE, cqe_accept.err());
}
// return file descriptors to kernel
try ring.register_files_update(0, registered_fds[0..]);
@@ -3651,7 +3651,7 @@ test "accept_multishot_direct" {
var address = try net.Address.parseIp4("127.0.0.1", 0);
- var registered_fds = [_]os.fd_t{-1} ** 2;
+ var registered_fds = [_]posix.fd_t{-1} ** 2;
try ring.register_files(registered_fds[0..]);
const listener_socket = try createListenerSocket(&address);
@@ -3667,8 +3667,8 @@ test "accept_multishot_direct" {
for (registered_fds) |_| {
// connect
- const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
- try os.connect(client, &address.any, address.getOsSockLen());
+ const client = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
+ try posix.connect(client, &address.any, address.getOsSockLen());
defer posix.close(client);
// accept completion
@@ -3682,13 +3682,13 @@ test "accept_multishot_direct" {
// Multishot is terminated (more flag is not set).
{
// connect
- const client = try os.socket(address.any.family, os.SOCK.STREAM | os.SOCK.CLOEXEC, 0);
- try os.connect(client, &address.any, address.getOsSockLen());
+ const client = try posix.socket(address.any.family, posix.SOCK.STREAM | posix.SOCK.CLOEXEC, 0);
+ try posix.connect(client, &address.any, address.getOsSockLen());
defer posix.close(client);
// completion with error
const cqe_accept = try ring.copy_cqe();
try testing.expect(cqe_accept.user_data == accept_userdata);
- try testing.expectEqual(os.E.NFILE, cqe_accept.err());
+ try testing.expectEqual(posix.E.NFILE, cqe_accept.err());
try testing.expect(cqe_accept.flags & linux.IORING_CQE_F_MORE == 0); // has more is not set
}
// return file descriptors to kernel
@@ -3708,16 +3708,16 @@ test "socket" {
defer ring.deinit();
// prepare, submit socket operation
- _ = try ring.socket(0, linux.AF.INET, os.SOCK.STREAM, 0, 0);
+ _ = try ring.socket(0, linux.AF.INET, posix.SOCK.STREAM, 0, 0);
try testing.expectEqual(@as(u32, 1), try ring.submit());
// test completion
var cqe = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe.err());
- const fd: os.fd_t = @intCast(cqe.res);
+ try testing.expectEqual(posix.E.SUCCESS, cqe.err());
+ const fd: posix.fd_t = @intCast(cqe.res);
try testing.expect(fd > 2);
- os.close(fd);
+ posix.close(fd);
}
test "socket_direct/socket_direct_alloc/close_direct" {
@@ -3730,29 +3730,29 @@ test "socket_direct/socket_direct_alloc/close_direct" {
};
defer ring.deinit();
- var registered_fds = [_]os.fd_t{-1} ** 3;
+ var registered_fds = [_]posix.fd_t{-1} ** 3;
try ring.register_files(registered_fds[0..]);
// create socket in registered file descriptor at index 0 (last param)
- _ = try ring.socket_direct(0, linux.AF.INET, os.SOCK.STREAM, 0, 0, 0);
+ _ = try ring.socket_direct(0, linux.AF.INET, posix.SOCK.STREAM, 0, 0, 0);
try testing.expectEqual(@as(u32, 1), try ring.submit());
var cqe_socket = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe_socket.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe_socket.err());
try testing.expect(cqe_socket.res == 0);
// create socket in registered file descriptor at index 1 (last param)
- _ = try ring.socket_direct(0, linux.AF.INET, os.SOCK.STREAM, 0, 0, 1);
+ _ = try ring.socket_direct(0, linux.AF.INET, posix.SOCK.STREAM, 0, 0, 1);
try testing.expectEqual(@as(u32, 1), try ring.submit());
cqe_socket = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe_socket.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe_socket.err());
try testing.expect(cqe_socket.res == 0); // res is 0 when index is specified
// create socket in kernel chosen file descriptor index (_alloc version)
// completion res has index from registered files
- _ = try ring.socket_direct_alloc(0, linux.AF.INET, os.SOCK.STREAM, 0, 0);
+ _ = try ring.socket_direct_alloc(0, linux.AF.INET, posix.SOCK.STREAM, 0, 0);
try testing.expectEqual(@as(u32, 1), try ring.submit());
cqe_socket = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe_socket.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe_socket.err());
try testing.expect(cqe_socket.res == 2); // returns registered file index
// use sockets from registered_fds in connect operation
@@ -3782,17 +3782,17 @@ test "socket_direct/socket_direct_alloc/close_direct" {
}
// test connect completion
try testing.expect(cqe_connect.user_data == connect_userdata);
- try testing.expectEqual(os.E.SUCCESS, cqe_connect.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe_connect.err());
// test accept completion
try testing.expect(cqe_accept.user_data == accept_userdata);
- try testing.expectEqual(os.E.SUCCESS, cqe_accept.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe_accept.err());
// submit and test close_direct
_ = try ring.close_direct(close_userdata, @intCast(fd_index));
try testing.expectEqual(@as(u32, 1), try ring.submit());
var cqe_close = try ring.copy_cqe();
try testing.expect(cqe_close.user_data == close_userdata);
- try testing.expectEqual(os.E.SUCCESS, cqe_close.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe_close.err());
}
try ring.unregister_files();
@@ -3808,35 +3808,35 @@ test "openat_direct/close_direct" {
};
defer ring.deinit();
- var registered_fds = [_]os.fd_t{-1} ** 3;
+ var registered_fds = [_]posix.fd_t{-1} ** 3;
try ring.register_files(registered_fds[0..]);
var tmp = std.testing.tmpDir(.{});
defer tmp.cleanup();
const path = "test_io_uring_close_direct";
const flags: linux.O = .{ .ACCMODE = .RDWR, .CREAT = true };
- const mode: os.mode_t = 0o666;
+ const mode: posix.mode_t = 0o666;
const user_data: u64 = 0;
// use registered file at index 0 (last param)
_ = try ring.openat_direct(user_data, tmp.dir.fd, path, flags, mode, 0);
try testing.expectEqual(@as(u32, 1), try ring.submit());
var cqe = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe.err());
try testing.expect(cqe.res == 0);
// use registered file at index 1
_ = try ring.openat_direct(user_data, tmp.dir.fd, path, flags, mode, 1);
try testing.expectEqual(@as(u32, 1), try ring.submit());
cqe = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe.err());
try testing.expect(cqe.res == 0); // res is 0 when we specify index
// let kernel choose registered file index
_ = try ring.openat_direct(user_data, tmp.dir.fd, path, flags, mode, linux.IORING_FILE_INDEX_ALLOC);
try testing.expectEqual(@as(u32, 1), try ring.submit());
cqe = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe.err());
try testing.expect(cqe.res == 2); // chosen index is in res
// close all open file descriptors
@@ -3844,7 +3844,7 @@ test "openat_direct/close_direct" {
_ = try ring.close_direct(user_data, @intCast(fd_index));
try testing.expectEqual(@as(u32, 1), try ring.submit());
var cqe_close = try ring.copy_cqe();
- try testing.expectEqual(os.E.SUCCESS, cqe_close.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe_close.err());
}
try ring.unregister_files();
}
@@ -3859,13 +3859,13 @@ test "waitid" {
};
defer ring.deinit();
- const pid = try os.fork();
+ const pid = try posix.fork();
if (pid == 0) {
- os.exit(7);
+ posix.exit(7);
}
- var siginfo: os.siginfo_t = undefined;
- _ = try ring.waitid(0, .PID, pid, &siginfo, os.W.EXITED, 0);
+ var siginfo: posix.siginfo_t = undefined;
+ _ = try ring.waitid(0, .PID, pid, &siginfo, posix.W.EXITED, 0);
try testing.expectEqual(1, try ring.submit());
@@ -3877,13 +3877,13 @@ test "waitid" {
/// For use in tests. Returns SkipZigTest if kernel version is less than required.
inline fn skipKernelLessThan(required: std.SemanticVersion) !void {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var uts: linux.utsname = undefined;
const res = linux.uname(&uts);
- switch (linux.getErrno(res)) {
+ switch (linux.E.init(res)) {
.SUCCESS => {},
- else => |errno| return os.unexpectedErrno(errno),
+ else => |errno| return posix.unexpectedErrno(errno),
}
const release = mem.sliceTo(&uts.release, 0);
@@ -3893,7 +3893,7 @@ inline fn skipKernelLessThan(required: std.SemanticVersion) !void {
}
test BufferGroup {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
// Init IoUring
var ring = IoUring.init(16, 0) catch |err| switch (err) {
@@ -3948,7 +3948,7 @@ test BufferGroup {
const cqe = try ring.copy_cqe();
try testing.expectEqual(2, cqe.user_data); // matches submitted user_data
try testing.expect(cqe.res >= 0); // success
- try testing.expectEqual(os.E.SUCCESS, cqe.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe.err());
try testing.expectEqual(data.len, @as(usize, @intCast(cqe.res))); // cqe.res holds received data len
// Read buffer_id and used buffer len from cqe
@@ -3963,7 +3963,7 @@ test BufferGroup {
}
test "ring mapped buffers recv" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(16, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -4029,7 +4029,7 @@ test "ring mapped buffers recv" {
const cqe = try ring.copy_cqe();
try testing.expectEqual(user_data, cqe.user_data);
try testing.expect(cqe.res < 0); // fail
- try testing.expectEqual(os.E.NOBUFS, cqe.err());
+ try testing.expectEqual(posix.E.NOBUFS, cqe.err());
try testing.expect(cqe.flags & linux.IORING_CQE_F_BUFFER == 0); // IORING_CQE_F_BUFFER flags is set on success only
try testing.expectError(error.NoBufferSelected, cqe.buffer_id());
}
@@ -4049,7 +4049,7 @@ test "ring mapped buffers recv" {
}
test "ring mapped buffers multishot recv" {
- if (builtin.os.tag != .linux) return error.SkipZigTest;
+ if (!is_linux) return error.SkipZigTest;
var ring = IoUring.init(16, 0) catch |err| switch (err) {
error.SystemOutdated => return error.SkipZigTest,
@@ -4120,7 +4120,7 @@ test "ring mapped buffers multishot recv" {
const cqe = try ring.copy_cqe();
try testing.expectEqual(recv_user_data, cqe.user_data);
try testing.expect(cqe.res < 0); // fail
- try testing.expectEqual(os.E.NOBUFS, cqe.err());
+ try testing.expectEqual(posix.E.NOBUFS, cqe.err());
try testing.expect(cqe.flags & linux.IORING_CQE_F_BUFFER == 0); // IORING_CQE_F_BUFFER flags is set on success only
// has more is not set
// indicates that multishot is finished
@@ -4194,7 +4194,7 @@ test "ring mapped buffers multishot recv" {
fn expect_buf_grp_recv(
ring: *IoUring,
buf_grp: *BufferGroup,
- fd: os.fd_t,
+ fd: posix.fd_t,
user_data: u64,
expected: []const u8,
) !u16 {
@@ -4220,7 +4220,7 @@ fn expect_buf_grp_cqe(
try testing.expect(cqe.res >= 0); // success
try testing.expect(cqe.flags & linux.IORING_CQE_F_BUFFER == linux.IORING_CQE_F_BUFFER); // IORING_CQE_F_BUFFER flag is set
try testing.expectEqual(expected.len, @as(usize, @intCast(cqe.res)));
- try testing.expectEqual(os.E.SUCCESS, cqe.err());
+ try testing.expectEqual(posix.E.SUCCESS, cqe.err());
// get buffer from pool
const buffer_id = try cqe.buffer_id();
diff --git a/lib/std/os/linux/arm-eabi.zig b/lib/std/os/linux/arm-eabi.zig
index 68575c3344..e589305725 100644
--- a/lib/std/os/linux/arm-eabi.zig
+++ b/lib/std/os/linux/arm-eabi.zig
@@ -2,8 +2,8 @@ const std = @import("../../std.zig");
const maxInt = std.math.maxInt;
const linux = std.os.linux;
const SYS = linux.SYS;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const socklen_t = linux.socklen_t;
const stack_t = linux.stack_t;
const sigset_t = linux.sigset_t;
diff --git a/lib/std/os/linux/arm64.zig b/lib/std/os/linux/arm64.zig
index f2331c1309..fd1db34004 100644
--- a/lib/std/os/linux/arm64.zig
+++ b/lib/std/os/linux/arm64.zig
@@ -4,8 +4,8 @@ const linux = std.os.linux;
const SYS = linux.SYS;
const socklen_t = linux.socklen_t;
const sockaddr = linux.sockaddr;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const uid_t = linux.uid_t;
const gid_t = linux.gid_t;
const pid_t = linux.pid_t;
diff --git a/lib/std/os/linux/bpf.zig b/lib/std/os/linux/bpf.zig
index 145fe3212d..5e02485b15 100644
--- a/lib/std/os/linux/bpf.zig
+++ b/lib/std/os/linux/bpf.zig
@@ -1,5 +1,5 @@
const std = @import("../../std.zig");
-const errno = getErrno;
+const errno = linux.E.init;
const unexpectedErrno = std.os.unexpectedErrno;
const expectEqual = std.testing.expectEqual;
const expectError = std.testing.expectError;
@@ -8,7 +8,6 @@ const expect = std.testing.expect;
const linux = std.os.linux;
const fd_t = linux.fd_t;
const pid_t = linux.pid_t;
-const getErrno = linux.getErrno;
pub const btf = @import("bpf/btf.zig");
pub const kern = @import("bpf/kern.zig");
diff --git a/lib/std/os/linux/errno/generic.zig b/lib/std/os/linux/errno/generic.zig
deleted file mode 100644
index 730c71a5a2..0000000000
--- a/lib/std/os/linux/errno/generic.zig
+++ /dev/null
@@ -1,460 +0,0 @@
-pub const E = enum(u16) {
- /// No error occurred.
- /// Same code used for `NSROK`.
- SUCCESS = 0,
-
- /// Operation not permitted
- PERM = 1,
-
- /// No such file or directory
- NOENT = 2,
-
- /// No such process
- SRCH = 3,
-
- /// Interrupted system call
- INTR = 4,
-
- /// I/O error
- IO = 5,
-
- /// No such device or address
- NXIO = 6,
-
- /// Arg list too long
- @"2BIG" = 7,
-
- /// Exec format error
- NOEXEC = 8,
-
- /// Bad file number
- BADF = 9,
-
- /// No child processes
- CHILD = 10,
-
- /// Try again
- /// Also means: WOULDBLOCK: operation would block
- AGAIN = 11,
-
- /// Out of memory
- NOMEM = 12,
-
- /// Permission denied
- ACCES = 13,
-
- /// Bad address
- FAULT = 14,
-
- /// Block device required
- NOTBLK = 15,
-
- /// Device or resource busy
- BUSY = 16,
-
- /// File exists
- EXIST = 17,
-
- /// Cross-device link
- XDEV = 18,
-
- /// No such device
- NODEV = 19,
-
- /// Not a directory
- NOTDIR = 20,
-
- /// Is a directory
- ISDIR = 21,
-
- /// Invalid argument
- INVAL = 22,
-
- /// File table overflow
- NFILE = 23,
-
- /// Too many open files
- MFILE = 24,
-
- /// Not a typewriter
- NOTTY = 25,
-
- /// Text file busy
- TXTBSY = 26,
-
- /// File too large
- FBIG = 27,
-
- /// No space left on device
- NOSPC = 28,
-
- /// Illegal seek
- SPIPE = 29,
-
- /// Read-only file system
- ROFS = 30,
-
- /// Too many links
- MLINK = 31,
-
- /// Broken pipe
- PIPE = 32,
-
- /// Math argument out of domain of func
- DOM = 33,
-
- /// Math result not representable
- RANGE = 34,
-
- /// Resource deadlock would occur
- DEADLK = 35,
-
- /// File name too long
- NAMETOOLONG = 36,
-
- /// No record locks available
- NOLCK = 37,
-
- /// Function not implemented
- NOSYS = 38,
-
- /// Directory not empty
- NOTEMPTY = 39,
-
- /// Too many symbolic links encountered
- LOOP = 40,
-
- /// No message of desired type
- NOMSG = 42,
-
- /// Identifier removed
- IDRM = 43,
-
- /// Channel number out of range
- CHRNG = 44,
-
- /// Level 2 not synchronized
- L2NSYNC = 45,
-
- /// Level 3 halted
- L3HLT = 46,
-
- /// Level 3 reset
- L3RST = 47,
-
- /// Link number out of range
- LNRNG = 48,
-
- /// Protocol driver not attached
- UNATCH = 49,
-
- /// No CSI structure available
- NOCSI = 50,
-
- /// Level 2 halted
- L2HLT = 51,
-
- /// Invalid exchange
- BADE = 52,
-
- /// Invalid request descriptor
- BADR = 53,
-
- /// Exchange full
- XFULL = 54,
-
- /// No anode
- NOANO = 55,
-
- /// Invalid request code
- BADRQC = 56,
-
- /// Invalid slot
- BADSLT = 57,
-
- /// Bad font file format
- BFONT = 59,
-
- /// Device not a stream
- NOSTR = 60,
-
- /// No data available
- NODATA = 61,
-
- /// Timer expired
- TIME = 62,
-
- /// Out of streams resources
- NOSR = 63,
-
- /// Machine is not on the network
- NONET = 64,
-
- /// Package not installed
- NOPKG = 65,
-
- /// Object is remote
- REMOTE = 66,
-
- /// Link has been severed
- NOLINK = 67,
-
- /// Advertise error
- ADV = 68,
-
- /// Srmount error
- SRMNT = 69,
-
- /// Communication error on send
- COMM = 70,
-
- /// Protocol error
- PROTO = 71,
-
- /// Multihop attempted
- MULTIHOP = 72,
-
- /// RFS specific error
- DOTDOT = 73,
-
- /// Not a data message
- BADMSG = 74,
-
- /// Value too large for defined data type
- OVERFLOW = 75,
-
- /// Name not unique on network
- NOTUNIQ = 76,
-
- /// File descriptor in bad state
- BADFD = 77,
-
- /// Remote address changed
- REMCHG = 78,
-
- /// Can not access a needed shared library
- LIBACC = 79,
-
- /// Accessing a corrupted shared library
- LIBBAD = 80,
-
- /// .lib section in a.out corrupted
- LIBSCN = 81,
-
- /// Attempting to link in too many shared libraries
- LIBMAX = 82,
-
- /// Cannot exec a shared library directly
- LIBEXEC = 83,
-
- /// Illegal byte sequence
- ILSEQ = 84,
-
- /// Interrupted system call should be restarted
- RESTART = 85,
-
- /// Streams pipe error
- STRPIPE = 86,
-
- /// Too many users
- USERS = 87,
-
- /// Socket operation on non-socket
- NOTSOCK = 88,
-
- /// Destination address required
- DESTADDRREQ = 89,
-
- /// Message too long
- MSGSIZE = 90,
-
- /// Protocol wrong type for socket
- PROTOTYPE = 91,
-
- /// Protocol not available
- NOPROTOOPT = 92,
-
- /// Protocol not supported
- PROTONOSUPPORT = 93,
-
- /// Socket type not supported
- SOCKTNOSUPPORT = 94,
-
- /// Operation not supported on transport endpoint
- /// This code also means `NOTSUP`.
- OPNOTSUPP = 95,
-
- /// Protocol family not supported
- PFNOSUPPORT = 96,
-
- /// Address family not supported by protocol
- AFNOSUPPORT = 97,
-
- /// Address already in use
- ADDRINUSE = 98,
-
- /// Cannot assign requested address
- ADDRNOTAVAIL = 99,
-
- /// Network is down
- NETDOWN = 100,
-
- /// Network is unreachable
- NETUNREACH = 101,
-
- /// Network dropped connection because of reset
- NETRESET = 102,
-
- /// Software caused connection abort
- CONNABORTED = 103,
-
- /// Connection reset by peer
- CONNRESET = 104,
-
- /// No buffer space available
- NOBUFS = 105,
-
- /// Transport endpoint is already connected
- ISCONN = 106,
-
- /// Transport endpoint is not connected
- NOTCONN = 107,
-
- /// Cannot send after transport endpoint shutdown
- SHUTDOWN = 108,
-
- /// Too many references: cannot splice
- TOOMANYREFS = 109,
-
- /// Connection timed out
- TIMEDOUT = 110,
-
- /// Connection refused
- CONNREFUSED = 111,
-
- /// Host is down
- HOSTDOWN = 112,
-
- /// No route to host
- HOSTUNREACH = 113,
-
- /// Operation already in progress
- ALREADY = 114,
-
- /// Operation now in progress
- INPROGRESS = 115,
-
- /// Stale NFS file handle
- STALE = 116,
-
- /// Structure needs cleaning
- UCLEAN = 117,
-
- /// Not a XENIX named type file
- NOTNAM = 118,
-
- /// No XENIX semaphores available
- NAVAIL = 119,
-
- /// Is a named type file
- ISNAM = 120,
-
- /// Remote I/O error
- REMOTEIO = 121,
-
- /// Quota exceeded
- DQUOT = 122,
-
- /// No medium found
- NOMEDIUM = 123,
-
- /// Wrong medium type
- MEDIUMTYPE = 124,
-
- /// Operation canceled
- CANCELED = 125,
-
- /// Required key not available
- NOKEY = 126,
-
- /// Key has expired
- KEYEXPIRED = 127,
-
- /// Key has been revoked
- KEYREVOKED = 128,
-
- /// Key was rejected by service
- KEYREJECTED = 129,
-
- // for robust mutexes
-
- /// Owner died
- OWNERDEAD = 130,
-
- /// State not recoverable
- NOTRECOVERABLE = 131,
-
- /// Operation not possible due to RF-kill
- RFKILL = 132,
-
- /// Memory page has hardware error
- HWPOISON = 133,
-
- // nameserver query return codes
-
- /// DNS server returned answer with no data
- NSRNODATA = 160,
-
- /// DNS server claims query was misformatted
- NSRFORMERR = 161,
-
- /// DNS server returned general failure
- NSRSERVFAIL = 162,
-
- /// Domain name not found
- NSRNOTFOUND = 163,
-
- /// DNS server does not implement requested operation
- NSRNOTIMP = 164,
-
- /// DNS server refused query
- NSRREFUSED = 165,
-
- /// Misformatted DNS query
- NSRBADQUERY = 166,
-
- /// Misformatted domain name
- NSRBADNAME = 167,
-
- /// Unsupported address family
- NSRBADFAMILY = 168,
-
- /// Misformatted DNS reply
- NSRBADRESP = 169,
-
- /// Could not contact DNS servers
- NSRCONNREFUSED = 170,
-
- /// Timeout while contacting DNS servers
- NSRTIMEOUT = 171,
-
- /// End of file
- NSROF = 172,
-
- /// Error reading file
- NSRFILE = 173,
-
- /// Out of memory
- NSRNOMEM = 174,
-
- /// Application terminated lookup
- NSRDESTRUCTION = 175,
-
- /// Domain name is too long
- NSRQUERYDOMAINTOOLONG = 176,
-
- /// Domain name is too long
- NSRCNAMELOOP = 177,
-
- _,
-};
diff --git a/lib/std/os/linux/errno/mips.zig b/lib/std/os/linux/errno/mips.zig
deleted file mode 100644
index 39fb9f71ea..0000000000
--- a/lib/std/os/linux/errno/mips.zig
+++ /dev/null
@@ -1,141 +0,0 @@
-//! These are MIPS ABI compatible.
-pub const E = enum(i32) {
- /// No error occurred.
- SUCCESS = 0,
-
- PERM = 1,
- NOENT = 2,
- SRCH = 3,
- INTR = 4,
- IO = 5,
- NXIO = 6,
- @"2BIG" = 7,
- NOEXEC = 8,
- BADF = 9,
- CHILD = 10,
- /// Also used for WOULDBLOCK.
- AGAIN = 11,
- NOMEM = 12,
- ACCES = 13,
- FAULT = 14,
- NOTBLK = 15,
- BUSY = 16,
- EXIST = 17,
- XDEV = 18,
- NODEV = 19,
- NOTDIR = 20,
- ISDIR = 21,
- INVAL = 22,
- NFILE = 23,
- MFILE = 24,
- NOTTY = 25,
- TXTBSY = 26,
- FBIG = 27,
- NOSPC = 28,
- SPIPE = 29,
- ROFS = 30,
- MLINK = 31,
- PIPE = 32,
- DOM = 33,
- RANGE = 34,
-
- NOMSG = 35,
- IDRM = 36,
- CHRNG = 37,
- L2NSYNC = 38,
- L3HLT = 39,
- L3RST = 40,
- LNRNG = 41,
- UNATCH = 42,
- NOCSI = 43,
- L2HLT = 44,
- DEADLK = 45,
- NOLCK = 46,
- BADE = 50,
- BADR = 51,
- XFULL = 52,
- NOANO = 53,
- BADRQC = 54,
- BADSLT = 55,
- DEADLOCK = 56,
- BFONT = 59,
- NOSTR = 60,
- NODATA = 61,
- TIME = 62,
- NOSR = 63,
- NONET = 64,
- NOPKG = 65,
- REMOTE = 66,
- NOLINK = 67,
- ADV = 68,
- SRMNT = 69,
- COMM = 70,
- PROTO = 71,
- DOTDOT = 73,
- MULTIHOP = 74,
- BADMSG = 77,
- NAMETOOLONG = 78,
- OVERFLOW = 79,
- NOTUNIQ = 80,
- BADFD = 81,
- REMCHG = 82,
- LIBACC = 83,
- LIBBAD = 84,
- LIBSCN = 85,
- LIBMAX = 86,
- LIBEXEC = 87,
- ILSEQ = 88,
- NOSYS = 89,
- LOOP = 90,
- RESTART = 91,
- STRPIPE = 92,
- NOTEMPTY = 93,
- USERS = 94,
- NOTSOCK = 95,
- DESTADDRREQ = 96,
- MSGSIZE = 97,
- PROTOTYPE = 98,
- NOPROTOOPT = 99,
- PROTONOSUPPORT = 120,
- SOCKTNOSUPPORT = 121,
- OPNOTSUPP = 122,
- PFNOSUPPORT = 123,
- AFNOSUPPORT = 124,
- ADDRINUSE = 125,
- ADDRNOTAVAIL = 126,
- NETDOWN = 127,
- NETUNREACH = 128,
- NETRESET = 129,
- CONNABORTED = 130,
- CONNRESET = 131,
- NOBUFS = 132,
- ISCONN = 133,
- NOTCONN = 134,
- UCLEAN = 135,
- NOTNAM = 137,
- NAVAIL = 138,
- ISNAM = 139,
- REMOTEIO = 140,
- SHUTDOWN = 143,
- TOOMANYREFS = 144,
- TIMEDOUT = 145,
- CONNREFUSED = 146,
- HOSTDOWN = 147,
- HOSTUNREACH = 148,
- ALREADY = 149,
- INPROGRESS = 150,
- STALE = 151,
- CANCELED = 158,
- NOMEDIUM = 159,
- MEDIUMTYPE = 160,
- NOKEY = 161,
- KEYEXPIRED = 162,
- KEYREVOKED = 163,
- KEYREJECTED = 164,
- OWNERDEAD = 165,
- NOTRECOVERABLE = 166,
- RFKILL = 167,
- HWPOISON = 168,
- DQUOT = 1133,
- _,
-};
diff --git a/lib/std/os/linux/errno/sparc.zig b/lib/std/os/linux/errno/sparc.zig
deleted file mode 100644
index c4ab65f34a..0000000000
--- a/lib/std/os/linux/errno/sparc.zig
+++ /dev/null
@@ -1,144 +0,0 @@
-//! These match the SunOS error numbering scheme.
-pub const E = enum(i32) {
- /// No error occurred.
- SUCCESS = 0,
-
- PERM = 1,
- NOENT = 2,
- SRCH = 3,
- INTR = 4,
- IO = 5,
- NXIO = 6,
- @"2BIG" = 7,
- NOEXEC = 8,
- BADF = 9,
- CHILD = 10,
- /// Also used for WOULDBLOCK
- AGAIN = 11,
- NOMEM = 12,
- ACCES = 13,
- FAULT = 14,
- NOTBLK = 15,
- BUSY = 16,
- EXIST = 17,
- XDEV = 18,
- NODEV = 19,
- NOTDIR = 20,
- ISDIR = 21,
- INVAL = 22,
- NFILE = 23,
- MFILE = 24,
- NOTTY = 25,
- TXTBSY = 26,
- FBIG = 27,
- NOSPC = 28,
- SPIPE = 29,
- ROFS = 30,
- MLINK = 31,
- PIPE = 32,
- DOM = 33,
- RANGE = 34,
-
- INPROGRESS = 36,
- ALREADY = 37,
- NOTSOCK = 38,
- DESTADDRREQ = 39,
- MSGSIZE = 40,
- PROTOTYPE = 41,
- NOPROTOOPT = 42,
- PROTONOSUPPORT = 43,
- SOCKTNOSUPPORT = 44,
- /// Also used for NOTSUP
- OPNOTSUPP = 45,
- PFNOSUPPORT = 46,
- AFNOSUPPORT = 47,
- ADDRINUSE = 48,
- ADDRNOTAVAIL = 49,
- NETDOWN = 50,
- NETUNREACH = 51,
- NETRESET = 52,
- CONNABORTED = 53,
- CONNRESET = 54,
- NOBUFS = 55,
- ISCONN = 56,
- NOTCONN = 57,
- SHUTDOWN = 58,
- TOOMANYREFS = 59,
- TIMEDOUT = 60,
- CONNREFUSED = 61,
- LOOP = 62,
- NAMETOOLONG = 63,
- HOSTDOWN = 64,
- HOSTUNREACH = 65,
- NOTEMPTY = 66,
- PROCLIM = 67,
- USERS = 68,
- DQUOT = 69,
- STALE = 70,
- REMOTE = 71,
- NOSTR = 72,
- TIME = 73,
- NOSR = 74,
- NOMSG = 75,
- BADMSG = 76,
- IDRM = 77,
- DEADLK = 78,
- NOLCK = 79,
- NONET = 80,
- RREMOTE = 81,
- NOLINK = 82,
- ADV = 83,
- SRMNT = 84,
- COMM = 85,
- PROTO = 86,
- MULTIHOP = 87,
- DOTDOT = 88,
- REMCHG = 89,
- NOSYS = 90,
- STRPIPE = 91,
- OVERFLOW = 92,
- BADFD = 93,
- CHRNG = 94,
- L2NSYNC = 95,
- L3HLT = 96,
- L3RST = 97,
- LNRNG = 98,
- UNATCH = 99,
- NOCSI = 100,
- L2HLT = 101,
- BADE = 102,
- BADR = 103,
- XFULL = 104,
- NOANO = 105,
- BADRQC = 106,
- BADSLT = 107,
- DEADLOCK = 108,
- BFONT = 109,
- LIBEXEC = 110,
- NODATA = 111,
- LIBBAD = 112,
- NOPKG = 113,
- LIBACC = 114,
- NOTUNIQ = 115,
- RESTART = 116,
- UCLEAN = 117,
- NOTNAM = 118,
- NAVAIL = 119,
- ISNAM = 120,
- REMOTEIO = 121,
- ILSEQ = 122,
- LIBMAX = 123,
- LIBSCN = 124,
- NOMEDIUM = 125,
- MEDIUMTYPE = 126,
- CANCELED = 127,
- NOKEY = 128,
- KEYEXPIRED = 129,
- KEYREVOKED = 130,
- KEYREJECTED = 131,
- OWNERDEAD = 132,
- NOTRECOVERABLE = 133,
- RFKILL = 134,
- HWPOISON = 135,
- _,
-};
diff --git a/lib/std/os/linux/io_uring_sqe.zig b/lib/std/os/linux/io_uring_sqe.zig
index 73ee195687..7306cf8eed 100644
--- a/lib/std/os/linux/io_uring_sqe.zig
+++ b/lib/std/os/linux/io_uring_sqe.zig
@@ -2,8 +2,7 @@
//! Split into its own file to compartmentalize the initialization methods.
const std = @import("../../std.zig");
-const os = std.os;
-const linux = os.linux;
+const linux = std.os.linux;
pub const io_uring_sqe = extern struct {
opcode: linux.IORING_OP,
@@ -40,7 +39,7 @@ pub const io_uring_sqe = extern struct {
};
}
- pub fn prep_fsync(sqe: *linux.io_uring_sqe, fd: os.fd_t, flags: u32) void {
+ pub fn prep_fsync(sqe: *linux.io_uring_sqe, fd: linux.fd_t, flags: u32) void {
sqe.* = .{
.opcode = .FSYNC,
.flags = 0,
@@ -62,7 +61,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_rw(
sqe: *linux.io_uring_sqe,
op: linux.IORING_OP,
- fd: os.fd_t,
+ fd: linux.fd_t,
addr: u64,
len: usize,
offset: u64,
@@ -85,15 +84,15 @@ pub const io_uring_sqe = extern struct {
};
}
- pub fn prep_read(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []u8, offset: u64) void {
+ pub fn prep_read(sqe: *linux.io_uring_sqe, fd: linux.fd_t, buffer: []u8, offset: u64) void {
sqe.prep_rw(.READ, fd, @intFromPtr(buffer.ptr), buffer.len, offset);
}
- pub fn prep_write(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []const u8, offset: u64) void {
+ pub fn prep_write(sqe: *linux.io_uring_sqe, fd: linux.fd_t, buffer: []const u8, offset: u64) void {
sqe.prep_rw(.WRITE, fd, @intFromPtr(buffer.ptr), buffer.len, offset);
}
- pub fn prep_splice(sqe: *linux.io_uring_sqe, fd_in: os.fd_t, off_in: u64, fd_out: os.fd_t, off_out: u64, len: usize) void {
+ pub fn prep_splice(sqe: *linux.io_uring_sqe, fd_in: linux.fd_t, off_in: u64, fd_out: linux.fd_t, off_out: u64, len: usize) void {
sqe.prep_rw(.SPLICE, fd_out, undefined, len, off_out);
sqe.addr = off_in;
sqe.splice_fd_in = fd_in;
@@ -101,8 +100,8 @@ pub const io_uring_sqe = extern struct {
pub fn prep_readv(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- iovecs: []const os.iovec,
+ fd: linux.fd_t,
+ iovecs: []const std.posix.iovec,
offset: u64,
) void {
sqe.prep_rw(.READV, fd, @intFromPtr(iovecs.ptr), iovecs.len, offset);
@@ -110,28 +109,28 @@ pub const io_uring_sqe = extern struct {
pub fn prep_writev(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- iovecs: []const os.iovec_const,
+ fd: linux.fd_t,
+ iovecs: []const std.posix.iovec_const,
offset: u64,
) void {
sqe.prep_rw(.WRITEV, fd, @intFromPtr(iovecs.ptr), iovecs.len, offset);
}
- pub fn prep_read_fixed(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: *os.iovec, offset: u64, buffer_index: u16) void {
+ pub fn prep_read_fixed(sqe: *linux.io_uring_sqe, fd: linux.fd_t, buffer: *std.posix.iovec, offset: u64, buffer_index: u16) void {
sqe.prep_rw(.READ_FIXED, fd, @intFromPtr(buffer.iov_base), buffer.iov_len, offset);
sqe.buf_index = buffer_index;
}
- pub fn prep_write_fixed(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: *os.iovec, offset: u64, buffer_index: u16) void {
+ pub fn prep_write_fixed(sqe: *linux.io_uring_sqe, fd: linux.fd_t, buffer: *std.posix.iovec, offset: u64, buffer_index: u16) void {
sqe.prep_rw(.WRITE_FIXED, fd, @intFromPtr(buffer.iov_base), buffer.iov_len, offset);
sqe.buf_index = buffer_index;
}
pub fn prep_accept(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- addr: ?*os.sockaddr,
- addrlen: ?*os.socklen_t,
+ fd: linux.fd_t,
+ addr: ?*linux.sockaddr,
+ addrlen: ?*linux.socklen_t,
flags: u32,
) void {
// `addr` holds a pointer to `sockaddr`, and `addr2` holds a pointer to socklen_t`.
@@ -142,9 +141,9 @@ pub const io_uring_sqe = extern struct {
pub fn prep_accept_direct(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- addr: ?*os.sockaddr,
- addrlen: ?*os.socklen_t,
+ fd: linux.fd_t,
+ addr: ?*linux.sockaddr,
+ addrlen: ?*linux.socklen_t,
flags: u32,
file_index: u32,
) void {
@@ -154,9 +153,9 @@ pub const io_uring_sqe = extern struct {
pub fn prep_multishot_accept_direct(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- addr: ?*os.sockaddr,
- addrlen: ?*os.socklen_t,
+ fd: linux.fd_t,
+ addr: ?*linux.sockaddr,
+ addrlen: ?*linux.socklen_t,
flags: u32,
) void {
prep_multishot_accept(sqe, fd, addr, addrlen, flags);
@@ -177,9 +176,9 @@ pub const io_uring_sqe = extern struct {
pub fn prep_connect(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- addr: *const os.sockaddr,
- addrlen: os.socklen_t,
+ fd: linux.fd_t,
+ addr: *const linux.sockaddr,
+ addrlen: linux.socklen_t,
) void {
// `addrlen` maps to `sqe.off` (u64) instead of `sqe.len` (which is only a u32).
sqe.prep_rw(.CONNECT, fd, @intFromPtr(addr), 0, addrlen);
@@ -187,22 +186,22 @@ pub const io_uring_sqe = extern struct {
pub fn prep_epoll_ctl(
sqe: *linux.io_uring_sqe,
- epfd: os.fd_t,
- fd: os.fd_t,
+ epfd: linux.fd_t,
+ fd: linux.fd_t,
op: u32,
ev: ?*linux.epoll_event,
) void {
sqe.prep_rw(.EPOLL_CTL, epfd, @intFromPtr(ev), op, @intCast(fd));
}
- pub fn prep_recv(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []u8, flags: u32) void {
+ pub fn prep_recv(sqe: *linux.io_uring_sqe, fd: linux.fd_t, buffer: []u8, flags: u32) void {
sqe.prep_rw(.RECV, fd, @intFromPtr(buffer.ptr), buffer.len, 0);
sqe.rw_flags = flags;
}
pub fn prep_recv_multishot(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
+ fd: linux.fd_t,
buffer: []u8,
flags: u32,
) void {
@@ -212,8 +211,8 @@ pub const io_uring_sqe = extern struct {
pub fn prep_recvmsg(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- msg: *os.msghdr,
+ fd: linux.fd_t,
+ msg: *linux.msghdr,
flags: u32,
) void {
sqe.prep_rw(.RECVMSG, fd, @intFromPtr(msg), 1, 0);
@@ -222,26 +221,26 @@ pub const io_uring_sqe = extern struct {
pub fn prep_recvmsg_multishot(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- msg: *os.msghdr,
+ fd: linux.fd_t,
+ msg: *linux.msghdr,
flags: u32,
) void {
sqe.prep_recvmsg(fd, msg, flags);
sqe.ioprio |= linux.IORING_RECV_MULTISHOT;
}
- pub fn prep_send(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []const u8, flags: u32) void {
+ pub fn prep_send(sqe: *linux.io_uring_sqe, fd: linux.fd_t, buffer: []const u8, flags: u32) void {
sqe.prep_rw(.SEND, fd, @intFromPtr(buffer.ptr), buffer.len, 0);
sqe.rw_flags = flags;
}
- pub fn prep_send_zc(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []const u8, flags: u32, zc_flags: u16) void {
+ pub fn prep_send_zc(sqe: *linux.io_uring_sqe, fd: linux.fd_t, buffer: []const u8, flags: u32, zc_flags: u16) void {
sqe.prep_rw(.SEND_ZC, fd, @intFromPtr(buffer.ptr), buffer.len, 0);
sqe.rw_flags = flags;
sqe.ioprio = zc_flags;
}
- pub fn prep_send_zc_fixed(sqe: *linux.io_uring_sqe, fd: os.fd_t, buffer: []const u8, flags: u32, zc_flags: u16, buf_index: u16) void {
+ pub fn prep_send_zc_fixed(sqe: *linux.io_uring_sqe, fd: linux.fd_t, buffer: []const u8, flags: u32, zc_flags: u16, buf_index: u16) void {
prep_send_zc(sqe, fd, buffer, flags, zc_flags);
sqe.ioprio |= linux.IORING_RECVSEND_FIXED_BUF;
sqe.buf_index = buf_index;
@@ -249,8 +248,8 @@ pub const io_uring_sqe = extern struct {
pub fn prep_sendmsg_zc(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- msg: *const os.msghdr_const,
+ fd: linux.fd_t,
+ msg: *const linux.msghdr_const,
flags: u32,
) void {
prep_sendmsg(sqe, fd, msg, flags);
@@ -259,8 +258,8 @@ pub const io_uring_sqe = extern struct {
pub fn prep_sendmsg(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- msg: *const os.msghdr_const,
+ fd: linux.fd_t,
+ msg: *const linux.msghdr_const,
flags: u32,
) void {
sqe.prep_rw(.SENDMSG, fd, @intFromPtr(msg), 1, 0);
@@ -269,10 +268,10 @@ pub const io_uring_sqe = extern struct {
pub fn prep_openat(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
+ fd: linux.fd_t,
path: [*:0]const u8,
flags: linux.O,
- mode: os.mode_t,
+ mode: linux.mode_t,
) void {
sqe.prep_rw(.OPENAT, fd, @intFromPtr(path), mode, 0);
sqe.rw_flags = @bitCast(flags);
@@ -280,17 +279,17 @@ pub const io_uring_sqe = extern struct {
pub fn prep_openat_direct(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
+ fd: linux.fd_t,
path: [*:0]const u8,
flags: linux.O,
- mode: os.mode_t,
+ mode: linux.mode_t,
file_index: u32,
) void {
prep_openat(sqe, fd, path, flags, mode);
__io_uring_set_target_fixed_file(sqe, file_index);
}
- pub fn prep_close(sqe: *linux.io_uring_sqe, fd: os.fd_t) void {
+ pub fn prep_close(sqe: *linux.io_uring_sqe, fd: linux.fd_t) void {
sqe.* = .{
.opcode = .CLOSE,
.flags = 0,
@@ -316,7 +315,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_timeout(
sqe: *linux.io_uring_sqe,
- ts: *const os.linux.kernel_timespec,
+ ts: *const linux.kernel_timespec,
count: u32,
flags: u32,
) void {
@@ -345,7 +344,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_link_timeout(
sqe: *linux.io_uring_sqe,
- ts: *const os.linux.kernel_timespec,
+ ts: *const linux.kernel_timespec,
flags: u32,
) void {
sqe.prep_rw(.LINK_TIMEOUT, -1, @intFromPtr(ts), 1, 0);
@@ -354,7 +353,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_poll_add(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
+ fd: linux.fd_t,
poll_mask: u32,
) void {
sqe.prep_rw(.POLL_ADD, fd, @intFromPtr(@as(?*anyopaque, null)), 0, 0);
@@ -393,7 +392,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_fallocate(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
+ fd: linux.fd_t,
mode: i32,
offset: u64,
len: u64,
@@ -418,7 +417,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_statx(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
+ fd: linux.fd_t,
path: [*:0]const u8,
flags: u32,
mask: u32,
@@ -439,7 +438,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_shutdown(
sqe: *linux.io_uring_sqe,
- sockfd: os.socket_t,
+ sockfd: linux.socket_t,
how: u32,
) void {
sqe.prep_rw(.SHUTDOWN, sockfd, 0, how, 0);
@@ -447,9 +446,9 @@ pub const io_uring_sqe = extern struct {
pub fn prep_renameat(
sqe: *linux.io_uring_sqe,
- old_dir_fd: os.fd_t,
+ old_dir_fd: linux.fd_t,
old_path: [*:0]const u8,
- new_dir_fd: os.fd_t,
+ new_dir_fd: linux.fd_t,
new_path: [*:0]const u8,
flags: u32,
) void {
@@ -466,7 +465,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_unlinkat(
sqe: *linux.io_uring_sqe,
- dir_fd: os.fd_t,
+ dir_fd: linux.fd_t,
path: [*:0]const u8,
flags: u32,
) void {
@@ -476,9 +475,9 @@ pub const io_uring_sqe = extern struct {
pub fn prep_mkdirat(
sqe: *linux.io_uring_sqe,
- dir_fd: os.fd_t,
+ dir_fd: linux.fd_t,
path: [*:0]const u8,
- mode: os.mode_t,
+ mode: linux.mode_t,
) void {
sqe.prep_rw(.MKDIRAT, dir_fd, @intFromPtr(path), mode, 0);
}
@@ -486,7 +485,7 @@ pub const io_uring_sqe = extern struct {
pub fn prep_symlinkat(
sqe: *linux.io_uring_sqe,
target: [*:0]const u8,
- new_dir_fd: os.fd_t,
+ new_dir_fd: linux.fd_t,
link_path: [*:0]const u8,
) void {
sqe.prep_rw(
@@ -500,9 +499,9 @@ pub const io_uring_sqe = extern struct {
pub fn prep_linkat(
sqe: *linux.io_uring_sqe,
- old_dir_fd: os.fd_t,
+ old_dir_fd: linux.fd_t,
old_path: [*:0]const u8,
- new_dir_fd: os.fd_t,
+ new_dir_fd: linux.fd_t,
new_path: [*:0]const u8,
flags: u32,
) void {
@@ -541,9 +540,9 @@ pub const io_uring_sqe = extern struct {
pub fn prep_multishot_accept(
sqe: *linux.io_uring_sqe,
- fd: os.fd_t,
- addr: ?*os.sockaddr,
- addrlen: ?*os.socklen_t,
+ fd: linux.fd_t,
+ addr: ?*linux.sockaddr,
+ addrlen: ?*linux.socklen_t,
flags: u32,
) void {
prep_accept(sqe, fd, addr, addrlen, flags);
diff --git a/lib/std/os/linux/mips.zig b/lib/std/os/linux/mips.zig
index 896757f1f6..b0f33894c8 100644
--- a/lib/std/os/linux/mips.zig
+++ b/lib/std/os/linux/mips.zig
@@ -3,8 +3,8 @@ const maxInt = std.math.maxInt;
const linux = std.os.linux;
const SYS = linux.SYS;
const socklen_t = linux.socklen_t;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const uid_t = linux.uid_t;
const gid_t = linux.gid_t;
const pid_t = linux.pid_t;
diff --git a/lib/std/os/linux/mips64.zig b/lib/std/os/linux/mips64.zig
index 4a34f30dd9..c1b352328b 100644
--- a/lib/std/os/linux/mips64.zig
+++ b/lib/std/os/linux/mips64.zig
@@ -3,8 +3,8 @@ const maxInt = std.math.maxInt;
const linux = std.os.linux;
const SYS = linux.SYS;
const socklen_t = linux.socklen_t;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const uid_t = linux.uid_t;
const gid_t = linux.gid_t;
const pid_t = linux.pid_t;
diff --git a/lib/std/os/linux/powerpc.zig b/lib/std/os/linux/powerpc.zig
index 4d13e90166..af7c8f0c06 100644
--- a/lib/std/os/linux/powerpc.zig
+++ b/lib/std/os/linux/powerpc.zig
@@ -3,8 +3,8 @@ const maxInt = std.math.maxInt;
const linux = std.os.linux;
const SYS = linux.SYS;
const socklen_t = linux.socklen_t;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const uid_t = linux.uid_t;
const gid_t = linux.gid_t;
const pid_t = linux.pid_t;
diff --git a/lib/std/os/linux/powerpc64.zig b/lib/std/os/linux/powerpc64.zig
index c81ef382c2..9a17fb9a35 100644
--- a/lib/std/os/linux/powerpc64.zig
+++ b/lib/std/os/linux/powerpc64.zig
@@ -3,8 +3,8 @@ const maxInt = std.math.maxInt;
const linux = std.os.linux;
const SYS = linux.SYS;
const socklen_t = linux.socklen_t;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const uid_t = linux.uid_t;
const gid_t = linux.gid_t;
const pid_t = linux.pid_t;
diff --git a/lib/std/os/linux/riscv64.zig b/lib/std/os/linux/riscv64.zig
index c23fc5e4df..88b5c70fbc 100644
--- a/lib/std/os/linux/riscv64.zig
+++ b/lib/std/os/linux/riscv64.zig
@@ -1,6 +1,6 @@
const std = @import("../../std.zig");
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const linux = std.os.linux;
const SYS = linux.SYS;
const uid_t = std.os.linux.uid_t;
diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig
index 0a344e2bf4..796c6e0905 100644
--- a/lib/std/os/linux/sparc64.zig
+++ b/lib/std/os/linux/sparc64.zig
@@ -10,8 +10,8 @@ const linux = std.os.linux;
const SYS = linux.SYS;
const sockaddr = linux.sockaddr;
const socklen_t = linux.socklen_t;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const timespec = linux.timespec;
pub fn syscall_pipe(fd: *[2]i32) usize {
diff --git a/lib/std/os/linux/start_pie.zig b/lib/std/os/linux/start_pie.zig
index cf557f9d66..b576134042 100644
--- a/lib/std/os/linux/start_pie.zig
+++ b/lib/std/os/linux/start_pie.zig
@@ -81,7 +81,7 @@ pub fn relocate(phdrs: []elf.Phdr) void {
break :base @intFromPtr(dynv) - phdr.p_vaddr;
}
// This is not supposed to happen for well-formed binaries.
- std.os.abort();
+ @trap();
};
var rel_addr: usize = 0;
diff --git a/lib/std/os/linux/test.zig b/lib/std/os/linux/test.zig
index 2224224c5d..5aa8a565cf 100644
--- a/lib/std/os/linux/test.zig
+++ b/lib/std/os/linux/test.zig
@@ -18,7 +18,7 @@ test "fallocate" {
try expect((try file.stat()).size == 0);
const len: i64 = 65536;
- switch (linux.getErrno(linux.fallocate(file.handle, 0, 0, len))) {
+ switch (linux.E.init(linux.fallocate(file.handle, 0, 0, len))) {
.SUCCESS => {},
.NOSYS => return error.SkipZigTest,
.OPNOTSUPP => return error.SkipZigTest,
@@ -34,11 +34,11 @@ test "getpid" {
test "timer" {
const epoll_fd = linux.epoll_create();
- var err: linux.E = linux.getErrno(epoll_fd);
+ var err: linux.E = linux.E.init(epoll_fd);
try expect(err == .SUCCESS);
const timer_fd = linux.timerfd_create(linux.CLOCK.MONOTONIC, .{});
- try expect(linux.getErrno(timer_fd) == .SUCCESS);
+ try expect(linux.E.init(timer_fd) == .SUCCESS);
const time_interval = linux.timespec{
.tv_sec = 0,
@@ -50,7 +50,7 @@ test "timer" {
.it_value = time_interval,
};
- err = linux.getErrno(linux.timerfd_settime(@as(i32, @intCast(timer_fd)), .{}, &new_time, null));
+ err = linux.E.init(linux.timerfd_settime(@as(i32, @intCast(timer_fd)), .{}, &new_time, null));
try expect(err == .SUCCESS);
var event = linux.epoll_event{
@@ -58,13 +58,13 @@ test "timer" {
.data = linux.epoll_data{ .ptr = 0 },
};
- err = linux.getErrno(linux.epoll_ctl(@as(i32, @intCast(epoll_fd)), linux.EPOLL.CTL_ADD, @as(i32, @intCast(timer_fd)), &event));
+ err = linux.E.init(linux.epoll_ctl(@as(i32, @intCast(epoll_fd)), linux.EPOLL.CTL_ADD, @as(i32, @intCast(timer_fd)), &event));
try expect(err == .SUCCESS);
const events_one: linux.epoll_event = undefined;
var events = [_]linux.epoll_event{events_one} ** 8;
- err = linux.getErrno(linux.epoll_wait(@as(i32, @intCast(epoll_fd)), &events, 8, -1));
+ err = linux.E.init(linux.epoll_wait(@as(i32, @intCast(epoll_fd)), &events, 8, -1));
try expect(err == .SUCCESS);
}
@@ -77,7 +77,7 @@ test "statx" {
defer file.close();
var statx_buf: linux.Statx = undefined;
- switch (linux.getErrno(linux.statx(file.handle, "", linux.AT.EMPTY_PATH, linux.STATX_BASIC_STATS, &statx_buf))) {
+ switch (linux.E.init(linux.statx(file.handle, "", linux.AT.EMPTY_PATH, linux.STATX_BASIC_STATS, &statx_buf))) {
.SUCCESS => {},
// The statx syscall was only introduced in linux 4.11
.NOSYS => return error.SkipZigTest,
@@ -85,7 +85,7 @@ test "statx" {
}
var stat_buf: linux.Stat = undefined;
- switch (linux.getErrno(linux.fstatat(file.handle, "", &stat_buf, linux.AT.EMPTY_PATH))) {
+ switch (linux.E.init(linux.fstatat(file.handle, "", &stat_buf, linux.AT.EMPTY_PATH))) {
.SUCCESS => {},
else => unreachable,
}
diff --git a/lib/std/os/linux/tls.zig b/lib/std/os/linux/tls.zig
index 6973d1ea2e..82dc3bf759 100644
--- a/lib/std/os/linux/tls.zig
+++ b/lib/std/os/linux/tls.zig
@@ -1,10 +1,11 @@
const std = @import("std");
-const os = std.os;
const mem = std.mem;
const elf = std.elf;
const math = std.math;
const assert = std.debug.assert;
const native_arch = @import("builtin").cpu.arch;
+const linux = std.os.linux;
+const posix = std.posix;
// This file implements the two TLS variants [1] used by ELF-based systems.
//
@@ -111,7 +112,7 @@ pub var tls_image: TLSImage = undefined;
pub fn setThreadPointer(addr: usize) void {
switch (native_arch) {
.x86 => {
- var user_desc = std.os.linux.user_desc{
+ var user_desc: linux.user_desc = .{
.entry_number = tls_image.gdt_entry_number,
.base_addr = addr,
.limit = 0xfffff,
@@ -124,7 +125,7 @@ pub fn setThreadPointer(addr: usize) void {
.useable = 1,
},
};
- const rc = std.os.linux.syscall1(.set_thread_area, @intFromPtr(&user_desc));
+ const rc = linux.syscall1(.set_thread_area, @intFromPtr(&user_desc));
assert(rc == 0);
const gdt_entry_number = user_desc.entry_number;
@@ -137,7 +138,7 @@ pub fn setThreadPointer(addr: usize) void {
);
},
.x86_64 => {
- const rc = std.os.linux.syscall2(.arch_prctl, std.os.linux.ARCH.SET_FS, addr);
+ const rc = linux.syscall2(.arch_prctl, linux.ARCH.SET_FS, addr);
assert(rc == 0);
},
.aarch64, .aarch64_be => {
@@ -148,7 +149,7 @@ pub fn setThreadPointer(addr: usize) void {
);
},
.arm, .thumb => {
- const rc = std.os.linux.syscall1(.set_tls, addr);
+ const rc = linux.syscall1(.set_tls, addr);
assert(rc == 0);
},
.riscv64 => {
@@ -159,7 +160,7 @@ pub fn setThreadPointer(addr: usize) void {
);
},
.mips, .mipsel, .mips64, .mips64el => {
- const rc = std.os.linux.syscall1(.set_thread_area, addr);
+ const rc = linux.syscall1(.set_thread_area, addr);
assert(rc == 0);
},
.powerpc, .powerpcle => {
@@ -320,14 +321,14 @@ pub fn initStaticTLS(phdrs: []elf.Phdr) void {
break :blk main_thread_tls_buffer[0..tls_image.alloc_size];
}
- const alloc_tls_area = os.mmap(
+ const alloc_tls_area = posix.mmap(
null,
tls_image.alloc_size + tls_image.alloc_align - 1,
- os.PROT.READ | os.PROT.WRITE,
+ posix.PROT.READ | posix.PROT.WRITE,
.{ .TYPE = .PRIVATE, .ANONYMOUS = true },
-1,
0,
- ) catch os.abort();
+ ) catch posix.abort();
// Make sure the slice is correctly aligned.
const begin_addr = @intFromPtr(alloc_tls_area.ptr);
diff --git a/lib/std/os/linux/vdso.zig b/lib/std/os/linux/vdso.zig
index 50e7ce1dfd..4e62679b26 100644
--- a/lib/std/os/linux/vdso.zig
+++ b/lib/std/os/linux/vdso.zig
@@ -5,7 +5,7 @@ const mem = std.mem;
const maxInt = std.math.maxInt;
pub fn lookup(vername: []const u8, name: []const u8) usize {
- const vdso_addr = std.os.system.getauxval(std.elf.AT_SYSINFO_EHDR);
+ const vdso_addr = linux.getauxval(std.elf.AT_SYSINFO_EHDR);
if (vdso_addr == 0) return 0;
const eh = @as(*elf.Ehdr, @ptrFromInt(vdso_addr));
diff --git a/lib/std/os/linux/x86.zig b/lib/std/os/linux/x86.zig
index 44ee45d316..52a0215922 100644
--- a/lib/std/os/linux/x86.zig
+++ b/lib/std/os/linux/x86.zig
@@ -3,8 +3,8 @@ const maxInt = std.math.maxInt;
const linux = std.os.linux;
const SYS = linux.SYS;
const socklen_t = linux.socklen_t;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const uid_t = linux.uid_t;
const gid_t = linux.gid_t;
const pid_t = linux.pid_t;
diff --git a/lib/std/os/linux/x86_64.zig b/lib/std/os/linux/x86_64.zig
index 2d69d539ae..b21e56c0e5 100644
--- a/lib/std/os/linux/x86_64.zig
+++ b/lib/std/os/linux/x86_64.zig
@@ -2,8 +2,8 @@ const std = @import("../../std.zig");
const maxInt = std.math.maxInt;
const linux = std.os.linux;
const SYS = linux.SYS;
-const iovec = std.os.iovec;
-const iovec_const = std.os.iovec_const;
+const iovec = std.posix.iovec;
+const iovec_const = std.posix.iovec_const;
const pid_t = linux.pid_t;
const uid_t = linux.uid_t;
diff --git a/lib/std/os/plan9.zig b/lib/std/os/plan9.zig
index 354e05e570..a01e6f59eb 100644
--- a/lib/std/os/plan9.zig
+++ b/lib/std/os/plan9.zig
@@ -11,13 +11,96 @@ pub const syscall_bits = switch (builtin.cpu.arch) {
.x86_64 => @import("plan9/x86_64.zig"),
else => @compileError("more plan9 syscall implementations (needs more inline asm in stage2"),
};
-pub const E = @import("plan9/errno.zig").E;
-/// Get the errno from a syscall return value, or 0 for no error.
-pub fn getErrno(r: usize) E {
- const signed_r = @as(isize, @bitCast(r));
- const int = if (signed_r > -4096 and signed_r < 0) -signed_r else 0;
- return @as(E, @enumFromInt(int));
-}
+/// Ported from /sys/include/ape/errno.h
+pub const E = enum(u16) {
+ SUCCESS = 0,
+ DOM = 1000,
+ RANGE = 1001,
+ PLAN9 = 1002,
+
+ @"2BIG" = 1,
+ ACCES = 2,
+ AGAIN = 3,
+ // WOULDBLOCK = 3, // TODO errno.h has 2 names for 3
+ BADF = 4,
+ BUSY = 5,
+ CHILD = 6,
+ DEADLK = 7,
+ EXIST = 8,
+ FAULT = 9,
+ FBIG = 10,
+ INTR = 11,
+ INVAL = 12,
+ IO = 13,
+ ISDIR = 14,
+ MFILE = 15,
+ MLINK = 16,
+ NAMETOOLONG = 17,
+ NFILE = 18,
+ NODEV = 19,
+ NOENT = 20,
+ NOEXEC = 21,
+ NOLCK = 22,
+ NOMEM = 23,
+ NOSPC = 24,
+ NOSYS = 25,
+ NOTDIR = 26,
+ NOTEMPTY = 27,
+ NOTTY = 28,
+ NXIO = 29,
+ PERM = 30,
+ PIPE = 31,
+ ROFS = 32,
+ SPIPE = 33,
+ SRCH = 34,
+ XDEV = 35,
+
+ // bsd networking software
+ NOTSOCK = 36,
+ PROTONOSUPPORT = 37,
+ // PROTOTYPE = 37, // TODO errno.h has two names for 37
+ CONNREFUSED = 38,
+ AFNOSUPPORT = 39,
+ NOBUFS = 40,
+ OPNOTSUPP = 41,
+ ADDRINUSE = 42,
+ DESTADDRREQ = 43,
+ MSGSIZE = 44,
+ NOPROTOOPT = 45,
+ SOCKTNOSUPPORT = 46,
+ PFNOSUPPORT = 47,
+ ADDRNOTAVAIL = 48,
+ NETDOWN = 49,
+ NETUNREACH = 50,
+ NETRESET = 51,
+ CONNABORTED = 52,
+ ISCONN = 53,
+ NOTCONN = 54,
+ SHUTDOWN = 55,
+ TOOMANYREFS = 56,
+ TIMEDOUT = 57,
+ HOSTDOWN = 58,
+ HOSTUNREACH = 59,
+ GREG = 60,
+
+ // These added in 1003.1b-1993
+ CANCELED = 61,
+ INPROGRESS = 62,
+
+ // We just add these to be compatible with std.os, which uses them,
+ // They should never get used.
+ DQUOT,
+ CONNRESET,
+ OVERFLOW,
+ LOOP,
+ TXTBSY,
+
+ pub fn init(r: usize) E {
+ const signed_r: isize = @bitCast(r);
+ const int = if (signed_r > -4096 and signed_r < 0) -signed_r else 0;
+ return @enumFromInt(int);
+ }
+};
// The max bytes that can be in the errstr buff
pub const ERRMAX = 128;
var errstr_buf: [ERRMAX]u8 = undefined;
diff --git a/lib/std/os/plan9/errno.zig b/lib/std/os/plan9/errno.zig
deleted file mode 100644
index 47a232e67c..0000000000
--- a/lib/std/os/plan9/errno.zig
+++ /dev/null
@@ -1,84 +0,0 @@
-//! Ported from /sys/include/ape/errno.h
-pub const E = enum(u16) {
- SUCCESS = 0,
- DOM = 1000,
- RANGE = 1001,
- PLAN9 = 1002,
-
- @"2BIG" = 1,
- ACCES = 2,
- AGAIN = 3,
- // WOULDBLOCK = 3, // TODO errno.h has 2 names for 3
- BADF = 4,
- BUSY = 5,
- CHILD = 6,
- DEADLK = 7,
- EXIST = 8,
- FAULT = 9,
- FBIG = 10,
- INTR = 11,
- INVAL = 12,
- IO = 13,
- ISDIR = 14,
- MFILE = 15,
- MLINK = 16,
- NAMETOOLONG = 17,
- NFILE = 18,
- NODEV = 19,
- NOENT = 20,
- NOEXEC = 21,
- NOLCK = 22,
- NOMEM = 23,
- NOSPC = 24,
- NOSYS = 25,
- NOTDIR = 26,
- NOTEMPTY = 27,
- NOTTY = 28,
- NXIO = 29,
- PERM = 30,
- PIPE = 31,
- ROFS = 32,
- SPIPE = 33,
- SRCH = 34,
- XDEV = 35,
-
- // bsd networking software
- NOTSOCK = 36,
- PROTONOSUPPORT = 37,
- // PROTOTYPE = 37, // TODO errno.h has two names for 37
- CONNREFUSED = 38,
- AFNOSUPPORT = 39,
- NOBUFS = 40,
- OPNOTSUPP = 41,
- ADDRINUSE = 42,
- DESTADDRREQ = 43,
- MSGSIZE = 44,
- NOPROTOOPT = 45,
- SOCKTNOSUPPORT = 46,
- PFNOSUPPORT = 47,
- ADDRNOTAVAIL = 48,
- NETDOWN = 49,
- NETUNREACH = 50,
- NETRESET = 51,
- CONNABORTED = 52,
- ISCONN = 53,
- NOTCONN = 54,
- SHUTDOWN = 55,
- TOOMANYREFS = 56,
- TIMEDOUT = 57,
- HOSTDOWN = 58,
- HOSTUNREACH = 59,
- GREG = 60,
-
- // These added in 1003.1b-1993
- CANCELED = 61,
- INPROGRESS = 62,
-
- // We just add these to be compatible with std.os, which uses them,
- // They should never get used.
- DQUOT,
- CONNRESET,
- OVERFLOW,
- LOOP,
- TXTBSY,
-};
diff --git a/lib/std/os/wasi.zig b/lib/std/os/wasi.zig
index 016ce38a9f..d0f8bdbb66 100644
--- a/lib/std/os/wasi.zig
+++ b/lib/std/os/wasi.zig
@@ -17,8 +17,8 @@ comptime {
// assert(@alignOf(u64) == 8);
}
-pub const iovec_t = std.os.iovec;
-pub const ciovec_t = std.os.iovec_const;
+pub const iovec_t = std.posix.iovec;
+pub const ciovec_t = std.posix.iovec_const;
pub extern "wasi_snapshot_preview1" fn args_get(argv: [*][*:0]u8, argv_buf: [*]u8) errno_t;
pub extern "wasi_snapshot_preview1" fn args_sizes_get(argc: *usize, argv_buf_size: *usize) errno_t;
diff --git a/lib/std/os/windows.zig b/lib/std/os/windows.zig
index dec5402609..6ea7611fd7 100644
--- a/lib/std/os/windows.zig
+++ b/lib/std/os/windows.zig
@@ -11,6 +11,7 @@ const assert = std.debug.assert;
const math = std.math;
const maxInt = std.math.maxInt;
const native_arch = builtin.cpu.arch;
+const UnexpectedError = std.posix.UnexpectedError;
test {
if (builtin.os.tag == .windows) {
@@ -547,7 +548,7 @@ pub const GetQueuedCompletionStatusError = error{
Cancelled,
EOF,
Timeout,
-} || std.os.UnexpectedError;
+} || UnexpectedError;
pub fn GetQueuedCompletionStatusEx(
completion_port: HANDLE,
@@ -1701,7 +1702,7 @@ pub fn VirtualProtectEx(handle: HANDLE, addr: ?LPVOID, size: SIZE_T, new_prot: D
.SUCCESS => return old_prot,
.INVALID_ADDRESS => return error.InvalidAddress,
// TODO: map errors
- else => |rc| return std.os.windows.unexpectedStatus(rc),
+ else => |rc| return unexpectedStatus(rc),
}
}
@@ -1946,7 +1947,7 @@ pub fn SetFileTime(
pub const LockFileError = error{
SystemResources,
WouldBlock,
-} || std.os.UnexpectedError;
+} || UnexpectedError;
pub fn LockFile(
FileHandle: HANDLE,
@@ -1983,7 +1984,7 @@ pub fn LockFile(
pub const UnlockFileError = error{
RangeNotLocked,
-} || std.os.UnexpectedError;
+} || UnexpectedError;
pub fn UnlockFile(
FileHandle: HANDLE,
@@ -2672,8 +2673,8 @@ pub fn loadWinsockExtensionFunction(comptime T: type, sock: ws2_32.SOCKET, guid:
/// Call this when you made a windows DLL call or something that does SetLastError
/// and you get an unexpected error.
-pub fn unexpectedError(err: Win32Error) std.os.UnexpectedError {
- if (std.os.unexpected_error_tracing) {
+pub fn unexpectedError(err: Win32Error) UnexpectedError {
+ if (std.posix.unexpected_error_tracing) {
// 614 is the length of the longest windows error description
var buf_wstr: [614]WCHAR = undefined;
const len = kernel32.FormatMessageW(
@@ -2694,14 +2695,14 @@ pub fn unexpectedError(err: Win32Error) std.os.UnexpectedError {
return error.Unexpected;
}
-pub fn unexpectedWSAError(err: ws2_32.WinsockError) std.os.UnexpectedError {
+pub fn unexpectedWSAError(err: ws2_32.WinsockError) UnexpectedError {
return unexpectedError(@as(Win32Error, @enumFromInt(@intFromEnum(err))));
}
/// Call this when you made a windows NtDll call
/// and you get an unexpected status.
-pub fn unexpectedStatus(status: NTSTATUS) std.os.UnexpectedError {
- if (std.os.unexpected_error_tracing) {
+pub fn unexpectedStatus(status: NTSTATUS) UnexpectedError {
+ if (std.posix.unexpected_error_tracing) {
std.debug.print("error.Unexpected NTSTATUS=0x{x}\n", .{@intFromEnum(status)});
std.debug.dumpCurrentStackTrace(@returnAddress());
}
@@ -4246,7 +4247,7 @@ pub const KNONVOLATILE_CONTEXT_POINTERS = switch (native_arch) {
pub const EXCEPTION_POINTERS = extern struct {
ExceptionRecord: *EXCEPTION_RECORD,
- ContextRecord: *std.os.windows.CONTEXT,
+ ContextRecord: *CONTEXT,
};
pub const VECTORED_EXCEPTION_HANDLER = *const fn (ExceptionInfo: *EXCEPTION_POINTERS) callconv(WINAPI) c_long;
diff --git a/lib/std/os/windows/test.zig b/lib/std/os/windows/test.zig
index 64d554c836..c9f6ccbce0 100644
--- a/lib/std/os/windows/test.zig
+++ b/lib/std/os/windows/test.zig
@@ -245,7 +245,7 @@ test "loadWinsockExtensionFunction" {
const LPFN_CONNECTEX = *const fn (
Socket: windows.ws2_32.SOCKET,
SockAddr: *const windows.ws2_32.sockaddr,
- SockLen: std.os.socklen_t,
+ SockLen: std.posix.socklen_t,
SendBuf: ?*const anyopaque,
SendBufLen: windows.DWORD,
BytesSent: *windows.DWORD,
@@ -254,7 +254,7 @@ test "loadWinsockExtensionFunction" {
_ = windows.loadWinsockExtensionFunction(
LPFN_CONNECTEX,
- try std.os.socket(std.os.AF.INET, std.os.SOCK.DGRAM, 0),
+ try std.posix.socket(std.posix.AF.INET, std.posix.SOCK.DGRAM, 0),
windows.ws2_32.WSAID_CONNECTEX,
) catch |err| switch (err) {
error.OperationNotSupported => unreachable,
diff --git a/lib/std/os/windows/ws2_32.zig b/lib/std/os/windows/ws2_32.zig
index ea53d621fd..12817906c2 100644
--- a/lib/std/os/windows/ws2_32.zig
+++ b/lib/std/os/windows/ws2_32.zig
@@ -850,6 +850,8 @@ pub const POLL = struct {
pub const ERR = 1;
pub const HUP = 2;
pub const NVAL = 4;
+ pub const IN = RDNORM | RDBAND;
+ pub const OUT = WRNORM;
};
pub const TF_DISCONNECT = 1;
diff --git a/lib/std/pdb.zig b/lib/std/pdb.zig
index 9640ec3569..ece1cc63dc 100644
--- a/lib/std/pdb.zig
+++ b/lib/std/pdb.zig
@@ -2,7 +2,6 @@ const std = @import("std.zig");
const io = std.io;
const math = std.math;
const mem = std.mem;
-const os = std.os;
const coff = std.coff;
const fs = std.fs;
const File = std.fs.File;
diff --git a/lib/std/posix.zig b/lib/std/posix.zig
new file mode 100644
index 0000000000..fb2262e267
--- /dev/null
+++ b/lib/std/posix.zig
@@ -0,0 +1,7326 @@
+//! POSIX API layer.
+//!
+//! This is more cross platform than using OS-specific APIs, however, it is
+//! lower-level and less portable than other namespaces such as `std.fs` and
+//! `std.process`.
+//!
+//! These APIs are generally lowered to libc function calls if and only if libc
+//! is linked. Most operating systems other than Windows, Linux, and WASI
+//! require always linking libc because they use it as the stable syscall ABI.
+//!
+//! Operating systems that are not POSIX-compliant are sometimes supported by
+//! this API layer; sometimes not. Generally, an implementation will be
+//! provided only if such implementation is straightforward on that operating
+//! system. Otherwise, programmers are expected to use OS-specific logic to
+//! deal with the exception.
+
+const builtin = @import("builtin");
+const root = @import("root");
+const std = @import("std.zig");
+const mem = std.mem;
+const fs = std.fs;
+const max_path_bytes = fs.MAX_PATH_BYTES;
+const maxInt = std.math.maxInt;
+const cast = std.math.cast;
+const assert = std.debug.assert;
+const native_os = builtin.os.tag;
+
+test {
+ _ = @import("posix/test.zig");
+}
+
+/// Whether to use libc for the POSIX API layer.
+const use_libc = builtin.link_libc or switch (native_os) {
+ .windows, .wasi => true,
+ else => false,
+};
+
+const linux = std.os.linux;
+const windows = std.os.windows;
+const wasi = std.os.wasi;
+
+/// A libc-compatible API layer.
+pub const system = if (use_libc)
+ std.c
+else switch (native_os) {
+ .linux => linux,
+ .plan9 => std.os.plan9,
+ else => struct {},
+};
+
+pub const AF = system.AF;
+pub const AF_SUN = system.AF_SUN;
+pub const ARCH = system.ARCH;
+pub const AT = system.AT;
+pub const AT_SUN = system.AT_SUN;
+pub const CLOCK = system.CLOCK;
+pub const CPU_COUNT = system.CPU_COUNT;
+pub const CTL = system.CTL;
+pub const DT = system.DT;
+pub const E = system.E;
+pub const Elf_Symndx = system.Elf_Symndx;
+pub const F = system.F;
+pub const FD_CLOEXEC = system.FD_CLOEXEC;
+pub const Flock = system.Flock;
+pub const HOST_NAME_MAX = system.HOST_NAME_MAX;
+pub const HW = system.HW;
+pub const IFNAMESIZE = system.IFNAMESIZE;
+pub const IOV_MAX = system.IOV_MAX;
+pub const IPPROTO = system.IPPROTO;
+pub const KERN = system.KERN;
+pub const Kevent = system.Kevent;
+pub const LOCK = system.LOCK;
+pub const MADV = system.MADV;
+pub const MAP = system.MAP;
+pub const MSF = system.MSF;
+pub const MAX_ADDR_LEN = system.MAX_ADDR_LEN;
+pub const MFD = system.MFD;
+pub const MMAP2_UNIT = system.MMAP2_UNIT;
+pub const MSG = system.MSG;
+pub const NAME_MAX = system.NAME_MAX;
+pub const O = system.O;
+pub const PATH_MAX = system.PATH_MAX;
+pub const POLL = system.POLL;
+pub const POSIX_FADV = system.POSIX_FADV;
+pub const PR = system.PR;
+pub const PROT = system.PROT;
+pub const REG = system.REG;
+pub const RLIM = system.RLIM;
+pub const RR = system.RR;
+pub const S = system.S;
+pub const SA = system.SA;
+pub const SC = system.SC;
+pub const _SC = system._SC;
+pub const SEEK = system.SEEK;
+pub const SHUT = system.SHUT;
+pub const SIG = system.SIG;
+pub const SIOCGIFINDEX = system.SIOCGIFINDEX;
+pub const SO = system.SO;
+pub const SOCK = system.SOCK;
+pub const SOL = system.SOL;
+pub const STDERR_FILENO = system.STDERR_FILENO;
+pub const STDIN_FILENO = system.STDIN_FILENO;
+pub const STDOUT_FILENO = system.STDOUT_FILENO;
+pub const SYS = system.SYS;
+pub const Sigaction = system.Sigaction;
+pub const Stat = system.Stat;
+pub const T = system.T;
+pub const TCSA = system.TCSA;
+pub const TCP = system.TCP;
+pub const VDSO = system.VDSO;
+pub const W = system.W;
+pub const addrinfo = system.addrinfo;
+pub const blkcnt_t = system.blkcnt_t;
+pub const blksize_t = system.blksize_t;
+pub const clock_t = system.clock_t;
+pub const cpu_set_t = system.cpu_set_t;
+pub const dev_t = system.dev_t;
+pub const dl_phdr_info = system.dl_phdr_info;
+pub const empty_sigset = system.empty_sigset;
+pub const filled_sigset = system.filled_sigset;
+pub const fd_t = system.fd_t;
+pub const gid_t = system.gid_t;
+pub const ifreq = system.ifreq;
+pub const ino_t = system.ino_t;
+pub const mcontext_t = system.mcontext_t;
+pub const mode_t = system.mode_t;
+pub const msghdr = system.msghdr;
+pub const msghdr_const = system.msghdr_const;
+pub const nfds_t = system.nfds_t;
+pub const nlink_t = system.nlink_t;
+pub const off_t = system.off_t;
+pub const pid_t = system.pid_t;
+pub const pollfd = system.pollfd;
+pub const port_t = system.port_t;
+pub const port_event = system.port_event;
+pub const port_notify = system.port_notify;
+pub const file_obj = system.file_obj;
+pub const rlim_t = system.rlim_t;
+pub const rlimit = system.rlimit;
+pub const rlimit_resource = system.rlimit_resource;
+pub const rusage = system.rusage;
+pub const sa_family_t = system.sa_family_t;
+pub const siginfo_t = system.siginfo_t;
+pub const sigset_t = system.sigset_t;
+pub const sockaddr = system.sockaddr;
+pub const socklen_t = system.socklen_t;
+pub const stack_t = system.stack_t;
+pub const time_t = system.time_t;
+pub const timespec = system.timespec;
+pub const timestamp_t = system.timestamp_t;
+pub const timeval = system.timeval;
+pub const timezone = system.timezone;
+pub const ucontext_t = system.ucontext_t;
+pub const uid_t = system.uid_t;
+pub const user_desc = system.user_desc;
+pub const utsname = system.utsname;
+pub const winsize = system.winsize;
+
+pub const termios = system.termios;
+pub const CSIZE = system.CSIZE;
+pub const NCCS = system.NCCS;
+pub const cc_t = system.cc_t;
+pub const V = system.V;
+pub const speed_t = system.speed_t;
+pub const tc_iflag_t = system.tc_iflag_t;
+pub const tc_oflag_t = system.tc_oflag_t;
+pub const tc_cflag_t = system.tc_cflag_t;
+pub const tc_lflag_t = system.tc_lflag_t;
+
+pub const F_OK = system.F_OK;
+pub const R_OK = system.R_OK;
+pub const W_OK = system.W_OK;
+pub const X_OK = system.X_OK;
+
+pub const iovec = extern struct {
+ iov_base: [*]u8,
+ iov_len: usize,
+};
+
+pub const iovec_const = extern struct {
+ iov_base: [*]const u8,
+ iov_len: usize,
+};
+
+pub const ACCMODE = enum(u2) {
+ RDONLY = 0,
+ WRONLY = 1,
+ RDWR = 2,
+};
+
+pub const LOG = struct {
+ /// system is unusable
+ pub const EMERG = 0;
+ /// action must be taken immediately
+ pub const ALERT = 1;
+ /// critical conditions
+ pub const CRIT = 2;
+ /// error conditions
+ pub const ERR = 3;
+ /// warning conditions
+ pub const WARNING = 4;
+ /// normal but significant condition
+ pub const NOTICE = 5;
+ /// informational
+ pub const INFO = 6;
+ /// debug-level messages
+ pub const DEBUG = 7;
+};
+
+pub const socket_t = if (native_os == .windows) windows.ws2_32.SOCKET else fd_t;
+
+/// Obtains errno from the return value of a system function call.
+///
+/// For some systems this will obtain the value directly from the syscall return value;
+/// for others it will use a thread-local errno variable. Therefore, this
+/// function only returns a well-defined value when it is called directly after
+/// the system function call whose errno value is intended to be observed.
+pub fn errno(rc: anytype) E {
+ if (use_libc) {
+ return if (rc == -1) @enumFromInt(std.c._errno().*) else .SUCCESS;
+ }
+ const signed: isize = @bitCast(rc);
+ const int = if (signed > -4096 and signed < 0) -signed else 0;
+ return @enumFromInt(int);
+}
+
+/// Closes the file descriptor.
+///
+/// This function is not capable of returning any indication of failure. An
+/// application which wants to ensure writes have succeeded before closing must
+/// call `fsync` before `close`.
+///
+/// The Zig standard library does not support POSIX thread cancellation.
+pub fn close(fd: fd_t) void {
+ if (native_os == .windows) {
+ return windows.CloseHandle(fd);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ _ = std.os.wasi.fd_close(fd);
+ return;
+ }
+ if (builtin.target.isDarwin()) {
+ // This avoids the EINTR problem.
+ switch (errno(std.c.@"close$NOCANCEL"(fd))) {
+ .BADF => unreachable, // Always a race condition.
+ else => return,
+ }
+ }
+ switch (errno(system.close(fd))) {
+ .BADF => unreachable, // Always a race condition.
+ .INTR => return, // This is still a success. See https://github.com/ziglang/zig/issues/2425
+ else => return,
+ }
+}
+
+pub const FChmodError = error{
+ AccessDenied,
+ InputOutput,
+ SymLinkLoop,
+ FileNotFound,
+ SystemResources,
+ ReadOnlyFileSystem,
+} || UnexpectedError;
+
+/// Changes the mode of the file referred to by the file descriptor.
+///
+/// The process must have the correct privileges in order to do this
+/// successfully, or must have the effective user ID matching the owner
+/// of the file.
+pub fn fchmod(fd: fd_t, mode: mode_t) FChmodError!void {
+ if (!fs.has_executable_bit) @compileError("fchmod unsupported by target OS");
+
+ while (true) {
+ const res = system.fchmod(fd, mode);
+ switch (errno(res)) {
+ .SUCCESS => return,
+ .INTR => continue,
+ .BADF => unreachable,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .IO => return error.InputOutput,
+ .LOOP => return error.SymLinkLoop,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.FileNotFound,
+ .PERM => return error.AccessDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const FChmodAtError = FChmodError || error{
+ /// A component of `path` exceeded `NAME_MAX`, or the entire path exceeded
+ /// `PATH_MAX`.
+ NameTooLong,
+ /// `path` resolves to a symbolic link, and `AT.SYMLINK_NOFOLLOW` was set
+ /// in `flags`. This error only occurs on Linux, where changing the mode of
+ /// a symbolic link has no meaning and can cause undefined behaviour on
+ /// certain filesystems.
+ ///
+ /// The procfs fallback was used but procfs was not mounted.
+ OperationNotSupported,
+ /// The procfs fallback was used but the process exceeded its open file
+ /// limit.
+ ProcessFdQuotaExceeded,
+ /// The procfs fallback was used but the system exceeded it open file limit.
+ SystemFdQuotaExceeded,
+};
+
+/// Changes the `mode` of `path` relative to the directory referred to by
+/// `dirfd`. The process must have the correct privileges in order to do this
+/// successfully, or must have the effective user ID matching the owner of the
+/// file.
+///
+/// On Linux the `fchmodat2` syscall will be used if available, otherwise a
+/// workaround using procfs will be employed. Changing the mode of a symbolic
+/// link with `AT.SYMLINK_NOFOLLOW` set will also return
+/// `OperationNotSupported`, as:
+///
+/// 1. Permissions on the link are ignored when resolving its target.
+/// 2. This operation has been known to invoke undefined behaviour across
+/// different filesystems[1].
+///
+/// [1]: https://sourceware.org/legacy-ml/libc-alpha/2020-02/msg00467.html.
+pub inline fn fchmodat(dirfd: fd_t, path: []const u8, mode: mode_t, flags: u32) FChmodAtError!void {
+ if (!fs.has_executable_bit) @compileError("fchmodat unsupported by target OS");
+
+ // No special handling for linux is needed if we can use the libc fallback
+ // or `flags` is empty. Glibc only added the fallback in 2.32.
+ const skip_fchmodat_fallback = native_os != .linux or
+ std.c.versionCheck(.{ .major = 2, .minor = 32, .patch = 0 }) or
+ flags == 0;
+
+ // This function is marked inline so that when flags is comptime-known,
+ // skip_fchmodat_fallback will be comptime-known true.
+ if (skip_fchmodat_fallback)
+ return fchmodat1(dirfd, path, mode, flags);
+
+ return fchmodat2(dirfd, path, mode, flags);
+}
+
+fn fchmodat1(dirfd: fd_t, path: []const u8, mode: mode_t, flags: u32) FChmodAtError!void {
+ const path_c = try toPosixPath(path);
+ while (true) {
+ const res = system.fchmodat(dirfd, &path_c, mode, flags);
+ switch (errno(res)) {
+ .SUCCESS => return,
+ .INTR => continue,
+ .BADF => unreachable,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .IO => return error.InputOutput,
+ .LOOP => return error.SymLinkLoop,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .OPNOTSUPP => return error.OperationNotSupported,
+ .PERM => return error.AccessDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+fn fchmodat2(dirfd: fd_t, path: []const u8, mode: mode_t, flags: u32) FChmodAtError!void {
+ const global = struct {
+ var has_fchmodat2: bool = true;
+ };
+ const path_c = try toPosixPath(path);
+ const use_fchmodat2 = (builtin.os.isAtLeast(.linux, .{ .major = 6, .minor = 6, .patch = 0 }) orelse false) and
+ @atomicLoad(bool, &global.has_fchmodat2, .monotonic);
+ while (use_fchmodat2) {
+ // Later on this should be changed to `system.fchmodat2`
+ // when the musl/glibc add a wrapper.
+ const res = linux.fchmodat2(dirfd, &path_c, mode, flags);
+ switch (E.init(res)) {
+ .SUCCESS => return,
+ .INTR => continue,
+ .BADF => unreachable,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .IO => return error.InputOutput,
+ .LOOP => return error.SymLinkLoop,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.FileNotFound,
+ .OPNOTSUPP => return error.OperationNotSupported,
+ .PERM => return error.AccessDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+
+ .NOSYS => {
+ @atomicStore(bool, &global.has_fchmodat2, false, .monotonic);
+ break;
+ },
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ // Fallback to changing permissions using procfs:
+ //
+ // 1. Open `path` as a `PATH` descriptor.
+ // 2. Stat the fd and check if it isn't a symbolic link.
+ // 3. Generate the procfs reference to the fd via `/proc/self/fd/{fd}`.
+ // 4. Pass the procfs path to `chmod` with the `mode`.
+ var pathfd: fd_t = undefined;
+ while (true) {
+ const rc = system.openat(dirfd, &path_c, .{ .PATH = true, .NOFOLLOW = true, .CLOEXEC = true }, @as(mode_t, 0));
+ switch (errno(rc)) {
+ .SUCCESS => {
+ pathfd = @intCast(rc);
+ break;
+ },
+ .INTR => continue,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .LOOP => return error.SymLinkLoop,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ defer close(pathfd);
+
+ const stat = fstatatZ(pathfd, "", AT.EMPTY_PATH) catch |err| switch (err) {
+ error.NameTooLong => unreachable,
+ error.FileNotFound => unreachable,
+ error.InvalidUtf8 => unreachable,
+ else => |e| return e,
+ };
+ if ((stat.mode & S.IFMT) == S.IFLNK)
+ return error.OperationNotSupported;
+
+ var procfs_buf: ["/proc/self/fd/-2147483648\x00".len]u8 = undefined;
+ const proc_path = std.fmt.bufPrintZ(procfs_buf[0..], "/proc/self/fd/{d}", .{pathfd}) catch unreachable;
+ while (true) {
+ const res = system.chmod(proc_path, mode);
+ switch (errno(res)) {
+ // Getting NOENT here means that procfs isn't mounted.
+ .NOENT => return error.OperationNotSupported,
+
+ .SUCCESS => return,
+ .INTR => continue,
+ .BADF => unreachable,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .IO => return error.InputOutput,
+ .LOOP => return error.SymLinkLoop,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.FileNotFound,
+ .PERM => return error.AccessDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const FChownError = error{
+ AccessDenied,
+ InputOutput,
+ SymLinkLoop,
+ FileNotFound,
+ SystemResources,
+ ReadOnlyFileSystem,
+} || UnexpectedError;
+
+/// Changes the owner and group of the file referred to by the file descriptor.
+/// The process must have the correct privileges in order to do this
+/// successfully. The group may be changed by the owner of the directory to
+/// any group of which the owner is a member. If the owner or group is
+/// specified as `null`, the ID is not changed.
+pub fn fchown(fd: fd_t, owner: ?uid_t, group: ?gid_t) FChownError!void {
+ switch (native_os) {
+ .windows, .wasi => @compileError("Unsupported OS"),
+ else => {},
+ }
+
+ while (true) {
+ const res = system.fchown(fd, owner orelse ~@as(uid_t, 0), group orelse ~@as(gid_t, 0));
+
+ switch (errno(res)) {
+ .SUCCESS => return,
+ .INTR => continue,
+ .BADF => unreachable, // Can be reached if the fd refers to a directory opened without `OpenDirOptions{ .iterate = true }`
+
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .IO => return error.InputOutput,
+ .LOOP => return error.SymLinkLoop,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.FileNotFound,
+ .PERM => return error.AccessDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const RebootError = error{
+ PermissionDenied,
+} || UnexpectedError;
+
+pub const RebootCommand = switch (native_os) {
+ .linux => union(linux.LINUX_REBOOT.CMD) {
+ RESTART: void,
+ HALT: void,
+ CAD_ON: void,
+ CAD_OFF: void,
+ POWER_OFF: void,
+ RESTART2: [*:0]const u8,
+ SW_SUSPEND: void,
+ KEXEC: void,
+ },
+ else => @compileError("Unsupported OS"),
+};
+
+pub fn reboot(cmd: RebootCommand) RebootError!void {
+ switch (native_os) {
+ .linux => {
+ switch (linux.E.init(linux.reboot(
+ .MAGIC1,
+ .MAGIC2,
+ cmd,
+ switch (cmd) {
+ .RESTART2 => |s| s,
+ else => null,
+ },
+ ))) {
+ .SUCCESS => {},
+ .PERM => return error.PermissionDenied,
+ else => |err| return std.os.unexpectedErrno(err),
+ }
+ switch (cmd) {
+ .CAD_OFF => {},
+ .CAD_ON => {},
+ .SW_SUSPEND => {},
+
+ .HALT => unreachable,
+ .KEXEC => unreachable,
+ .POWER_OFF => unreachable,
+ .RESTART => unreachable,
+ .RESTART2 => unreachable,
+ }
+ },
+ else => @compileError("Unsupported OS"),
+ }
+}
+
+pub const GetRandomError = OpenError;
+
+/// Obtain a series of random bytes. These bytes can be used to seed user-space
+/// random number generators or for cryptographic purposes.
+/// When linking against libc, this calls the
+/// appropriate OS-specific library call. Otherwise it uses the zig standard
+/// library implementation.
+pub fn getrandom(buffer: []u8) GetRandomError!void {
+ if (native_os == .windows) {
+ return windows.RtlGenRandom(buffer);
+ }
+ if (native_os == .linux or native_os == .freebsd) {
+ var buf = buffer;
+ const use_c = native_os != .linux or
+ std.c.versionCheck(std.SemanticVersion{ .major = 2, .minor = 25, .patch = 0 });
+
+ while (buf.len != 0) {
+ const num_read: usize, const err = if (use_c) res: {
+ const rc = std.c.getrandom(buf.ptr, buf.len, 0);
+ break :res .{ @bitCast(rc), errno(rc) };
+ } else res: {
+ const rc = linux.getrandom(buf.ptr, buf.len, 0);
+ break :res .{ rc, linux.E.init(rc) };
+ };
+
+ switch (err) {
+ .SUCCESS => buf = buf[num_read..],
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .INTR => continue,
+ .NOSYS => return getRandomBytesDevURandom(buf),
+ else => return unexpectedErrno(err),
+ }
+ }
+ return;
+ }
+ if (native_os == .emscripten) {
+ const err = errno(std.c.getentropy(buffer.ptr, buffer.len));
+ switch (err) {
+ .SUCCESS => return,
+ else => return unexpectedErrno(err),
+ }
+ }
+ switch (native_os) {
+ .netbsd, .openbsd, .macos, .ios, .tvos, .watchos => {
+ system.arc4random_buf(buffer.ptr, buffer.len);
+ return;
+ },
+ .wasi => switch (wasi.random_get(buffer.ptr, buffer.len)) {
+ .SUCCESS => return,
+ else => |err| return unexpectedErrno(err),
+ },
+ else => return getRandomBytesDevURandom(buffer),
+ }
+}
+
+fn getRandomBytesDevURandom(buf: []u8) !void {
+ const fd = try openZ("/dev/urandom", .{ .ACCMODE = .RDONLY, .CLOEXEC = true }, 0);
+ defer close(fd);
+
+ const st = try fstat(fd);
+ if (!S.ISCHR(st.mode)) {
+ return error.NoDevice;
+ }
+
+ const file: fs.File = .{ .handle = fd };
+ const stream = file.reader();
+ stream.readNoEof(buf) catch return error.Unexpected;
+}
+
+/// Causes abnormal process termination.
+/// If linking against libc, this calls the abort() libc function. Otherwise
+/// it raises SIGABRT followed by SIGKILL and finally lo
+/// Invokes the current signal handler for SIGABRT, if any.
+pub fn abort() noreturn {
+ @setCold(true);
+ // MSVCRT abort() sometimes opens a popup window which is undesirable, so
+ // even when linking libc on Windows we use our own abort implementation.
+ // See https://github.com/ziglang/zig/issues/2071 for more details.
+ if (native_os == .windows) {
+ if (builtin.mode == .Debug) {
+ @breakpoint();
+ }
+ windows.kernel32.ExitProcess(3);
+ }
+ if (!builtin.link_libc and native_os == .linux) {
+ // The Linux man page says that the libc abort() function
+ // "first unblocks the SIGABRT signal", but this is a footgun
+ // for user-defined signal handlers that want to restore some state in
+ // some program sections and crash in others.
+ // So, the user-installed SIGABRT handler is run, if present.
+ raise(SIG.ABRT) catch {};
+
+ // Disable all signal handlers.
+ sigprocmask(SIG.BLOCK, &linux.all_mask, null);
+
+ // Only one thread may proceed to the rest of abort().
+ if (!builtin.single_threaded) {
+ const global = struct {
+ var abort_entered: bool = false;
+ };
+ while (@cmpxchgWeak(bool, &global.abort_entered, false, true, .seq_cst, .seq_cst)) |_| {}
+ }
+
+ // Install default handler so that the tkill below will terminate.
+ const sigact = Sigaction{
+ .handler = .{ .handler = SIG.DFL },
+ .mask = empty_sigset,
+ .flags = 0,
+ };
+ sigaction(SIG.ABRT, &sigact, null) catch |err| switch (err) {
+ error.OperationNotSupported => unreachable,
+ };
+
+ _ = linux.tkill(linux.gettid(), SIG.ABRT);
+
+ const sigabrtmask: linux.sigset_t = [_]u32{0} ** 31 ++ [_]u32{1 << (SIG.ABRT - 1)};
+ sigprocmask(SIG.UNBLOCK, &sigabrtmask, null);
+
+ // Beyond this point should be unreachable.
+ @as(*allowzero volatile u8, @ptrFromInt(0)).* = 0;
+ raise(SIG.KILL) catch {};
+ exit(127); // Pid 1 might not be signalled in some containers.
+ }
+ switch (native_os) {
+ .uefi, .wasi, .emscripten, .cuda, .amdhsa => @trap(),
+ else => system.abort(),
+ }
+}
+
+pub const RaiseError = UnexpectedError;
+
+pub fn raise(sig: u8) RaiseError!void {
+ if (builtin.link_libc) {
+ switch (errno(system.raise(sig))) {
+ .SUCCESS => return,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ if (native_os == .linux) {
+ var set: sigset_t = undefined;
+ // block application signals
+ sigprocmask(SIG.BLOCK, &linux.app_mask, &set);
+
+ const tid = linux.gettid();
+ const rc = linux.tkill(tid, sig);
+
+ // restore signal mask
+ sigprocmask(SIG.SETMASK, &set, null);
+
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ @compileError("std.os.raise unimplemented for this target");
+}
+
+pub const KillError = error{ ProcessNotFound, PermissionDenied } || UnexpectedError;
+
+pub fn kill(pid: pid_t, sig: u8) KillError!void {
+ switch (errno(system.kill(pid, sig))) {
+ .SUCCESS => return,
+ .INVAL => unreachable, // invalid signal
+ .PERM => return error.PermissionDenied,
+ .SRCH => return error.ProcessNotFound,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Exits all threads of the program with the specified status code.
+pub fn exit(status: u8) noreturn {
+ if (builtin.link_libc) {
+ std.c.exit(status);
+ }
+ if (native_os == .windows) {
+ windows.kernel32.ExitProcess(status);
+ }
+ if (native_os == .wasi) {
+ wasi.proc_exit(status);
+ }
+ if (native_os == .linux and !builtin.single_threaded) {
+ linux.exit_group(status);
+ }
+ if (native_os == .uefi) {
+ const uefi = std.os.uefi;
+ // exit() is only available if exitBootServices() has not been called yet.
+ // This call to exit should not fail, so we don't care about its return value.
+ if (uefi.system_table.boot_services) |bs| {
+ _ = bs.exit(uefi.handle, @enumFromInt(status), 0, null);
+ }
+ // If we can't exit, reboot the system instead.
+ uefi.system_table.runtime_services.resetSystem(.ResetCold, @enumFromInt(status), 0, null);
+ }
+ system.exit(status);
+}
+
+pub const ReadError = error{
+ InputOutput,
+ SystemResources,
+ IsDir,
+ OperationAborted,
+ BrokenPipe,
+ ConnectionResetByPeer,
+ ConnectionTimedOut,
+ NotOpenForReading,
+ SocketNotConnected,
+
+ /// This error occurs when no global event loop is configured,
+ /// and reading from the file descriptor would block.
+ WouldBlock,
+
+ /// In WASI, this error occurs when the file descriptor does
+ /// not hold the required rights to read from it.
+ AccessDenied,
+} || UnexpectedError;
+
+/// Returns the number of bytes that were read, which can be less than
+/// buf.len. If 0 bytes were read, that means EOF.
+/// If `fd` is opened in non blocking mode, the function will return error.WouldBlock
+/// when EAGAIN is received.
+///
+/// Linux has a limit on how many bytes may be transferred in one `read` call, which is `0x7ffff000`
+/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
+/// well as stuffing the errno codes into the last `4096` values. This is noted on the `read` man page.
+/// The limit on Darwin is `0x7fffffff`, trying to read more than that returns EINVAL.
+/// The corresponding POSIX limit is `maxInt(isize)`.
+pub fn read(fd: fd_t, buf: []u8) ReadError!usize {
+ if (buf.len == 0) return 0;
+ if (native_os == .windows) {
+ return windows.ReadFile(fd, buf, null);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ const iovs = [1]iovec{iovec{
+ .iov_base = buf.ptr,
+ .iov_len = buf.len,
+ }};
+
+ var nread: usize = undefined;
+ switch (wasi.fd_read(fd, &iovs, iovs.len, &nread)) {
+ .SUCCESS => return nread,
+ .INTR => unreachable,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => unreachable,
+ .BADF => return error.NotOpenForReading, // Can be a race condition.
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTCONN => return error.SocketNotConnected,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ // Prevents EINVAL.
+ const max_count = switch (native_os) {
+ .linux => 0x7ffff000,
+ .macos, .ios, .watchos, .tvos => maxInt(i32),
+ else => maxInt(isize),
+ };
+ while (true) {
+ const rc = system.read(fd, buf.ptr, @min(buf.len, max_count));
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => return error.WouldBlock,
+ .BADF => return error.NotOpenForReading, // Can be a race condition.
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTCONN => return error.SocketNotConnected,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+/// Number of bytes read is returned. Upon reading end-of-file, zero is returned.
+///
+/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
+/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
+///
+/// This operation is non-atomic on the following systems:
+/// * Windows
+/// On these systems, the read races with concurrent writes to the same file descriptor.
+///
+/// This function assumes that all vectors, including zero-length vectors, have
+/// a pointer within the address space of the application.
+pub fn readv(fd: fd_t, iov: []const iovec) ReadError!usize {
+ if (native_os == .windows) {
+ // TODO improve this to use ReadFileScatter
+ if (iov.len == 0) return 0;
+ const first = iov[0];
+ return read(fd, first.iov_base[0..first.iov_len]);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ var nread: usize = undefined;
+ switch (wasi.fd_read(fd, iov.ptr, iov.len, &nread)) {
+ .SUCCESS => return nread,
+ .INTR => unreachable,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => unreachable, // currently not support in WASI
+ .BADF => return error.NotOpenForReading, // can be a race condition
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTCONN => return error.SocketNotConnected,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ while (true) {
+ const rc = system.readv(fd, iov.ptr, @min(iov.len, IOV_MAX));
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => return error.WouldBlock,
+ .BADF => return error.NotOpenForReading, // can be a race condition
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTCONN => return error.SocketNotConnected,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const PReadError = ReadError || error{Unseekable};
+
+/// Number of bytes read is returned. Upon reading end-of-file, zero is returned.
+///
+/// Retries when interrupted by a signal.
+///
+/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
+/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
+///
+/// Linux has a limit on how many bytes may be transferred in one `pread` call, which is `0x7ffff000`
+/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
+/// well as stuffing the errno codes into the last `4096` values. This is noted on the `read` man page.
+/// The limit on Darwin is `0x7fffffff`, trying to read more than that returns EINVAL.
+/// The corresponding POSIX limit is `maxInt(isize)`.
+pub fn pread(fd: fd_t, buf: []u8, offset: u64) PReadError!usize {
+ if (buf.len == 0) return 0;
+ if (native_os == .windows) {
+ return windows.ReadFile(fd, buf, offset);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ const iovs = [1]iovec{iovec{
+ .iov_base = buf.ptr,
+ .iov_len = buf.len,
+ }};
+
+ var nread: usize = undefined;
+ switch (wasi.fd_pread(fd, &iovs, iovs.len, offset, &nread)) {
+ .SUCCESS => return nread,
+ .INTR => unreachable,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => unreachable,
+ .BADF => return error.NotOpenForReading, // Can be a race condition.
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTCONN => return error.SocketNotConnected,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ // Prevent EINVAL.
+ const max_count = switch (native_os) {
+ .linux => 0x7ffff000,
+ .macos, .ios, .watchos, .tvos => maxInt(i32),
+ else => maxInt(isize),
+ };
+
+ const pread_sym = if (lfs64_abi) system.pread64 else system.pread;
+ while (true) {
+ const rc = pread_sym(fd, buf.ptr, @min(buf.len, max_count), @bitCast(offset));
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => return error.WouldBlock,
+ .BADF => return error.NotOpenForReading, // Can be a race condition.
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTCONN => return error.SocketNotConnected,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const TruncateError = error{
+ FileTooBig,
+ InputOutput,
+ FileBusy,
+
+ /// In WASI, this error occurs when the file descriptor does
+ /// not hold the required rights to call `ftruncate` on it.
+ AccessDenied,
+} || UnexpectedError;
+
+pub fn ftruncate(fd: fd_t, length: u64) TruncateError!void {
+ if (native_os == .windows) {
+ var io_status_block: windows.IO_STATUS_BLOCK = undefined;
+ var eof_info = windows.FILE_END_OF_FILE_INFORMATION{
+ .EndOfFile = @bitCast(length),
+ };
+
+ const rc = windows.ntdll.NtSetInformationFile(
+ fd,
+ &io_status_block,
+ &eof_info,
+ @sizeOf(windows.FILE_END_OF_FILE_INFORMATION),
+ .FileEndOfFileInformation,
+ );
+
+ switch (rc) {
+ .SUCCESS => return,
+ .INVALID_HANDLE => unreachable, // Handle not open for writing
+ .ACCESS_DENIED => return error.AccessDenied,
+ else => return windows.unexpectedStatus(rc),
+ }
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ switch (wasi.fd_filestat_set_size(fd, length)) {
+ .SUCCESS => return,
+ .INTR => unreachable,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .PERM => return error.AccessDenied,
+ .TXTBSY => return error.FileBusy,
+ .BADF => unreachable, // Handle not open for writing
+ .INVAL => unreachable, // Handle not open for writing
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ const ftruncate_sym = if (lfs64_abi) system.ftruncate64 else system.ftruncate;
+ while (true) {
+ switch (errno(ftruncate_sym(fd, @bitCast(length)))) {
+ .SUCCESS => return,
+ .INTR => continue,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .PERM => return error.AccessDenied,
+ .TXTBSY => return error.FileBusy,
+ .BADF => unreachable, // Handle not open for writing
+ .INVAL => unreachable, // Handle not open for writing
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+/// Number of bytes read is returned. Upon reading end-of-file, zero is returned.
+///
+/// Retries when interrupted by a signal.
+///
+/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
+/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
+///
+/// This operation is non-atomic on the following systems:
+/// * Darwin
+/// * Windows
+/// On these systems, the read races with concurrent writes to the same file descriptor.
+pub fn preadv(fd: fd_t, iov: []const iovec, offset: u64) PReadError!usize {
+ const have_pread_but_not_preadv = switch (native_os) {
+ .windows, .macos, .ios, .watchos, .tvos, .haiku => true,
+ else => false,
+ };
+ if (have_pread_but_not_preadv) {
+ // We could loop here; but proper usage of `preadv` must handle partial reads anyway.
+ // So we simply read into the first vector only.
+ if (iov.len == 0) return 0;
+ const first = iov[0];
+ return pread(fd, first.iov_base[0..first.iov_len], offset);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ var nread: usize = undefined;
+ switch (wasi.fd_pread(fd, iov.ptr, iov.len, offset, &nread)) {
+ .SUCCESS => return nread,
+ .INTR => unreachable,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => unreachable,
+ .BADF => return error.NotOpenForReading, // can be a race condition
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTCONN => return error.SocketNotConnected,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ const preadv_sym = if (lfs64_abi) system.preadv64 else system.preadv;
+ while (true) {
+ const rc = preadv_sym(fd, iov.ptr, @min(iov.len, IOV_MAX), @bitCast(offset));
+ switch (errno(rc)) {
+ .SUCCESS => return @bitCast(rc),
+ .INTR => continue,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => return error.WouldBlock,
+ .BADF => return error.NotOpenForReading, // can be a race condition
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTCONN => return error.SocketNotConnected,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const WriteError = error{
+ DiskQuota,
+ FileTooBig,
+ InputOutput,
+ NoSpaceLeft,
+ DeviceBusy,
+ InvalidArgument,
+
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to write to it.
+ AccessDenied,
+ BrokenPipe,
+ SystemResources,
+ OperationAborted,
+ NotOpenForWriting,
+
+ /// The process cannot access the file because another process has locked
+ /// a portion of the file. Windows-only.
+ LockViolation,
+
+ /// This error occurs when no global event loop is configured,
+ /// and reading from the file descriptor would block.
+ WouldBlock,
+
+ /// Connection reset by peer.
+ ConnectionResetByPeer,
+} || UnexpectedError;
+
+/// Write to a file descriptor.
+/// Retries when interrupted by a signal.
+/// Returns the number of bytes written. If nonzero bytes were supplied, this will be nonzero.
+///
+/// Note that a successful write() may transfer fewer than count bytes. Such partial writes can
+/// occur for various reasons; for example, because there was insufficient space on the disk
+/// device to write all of the requested bytes, or because a blocked write() to a socket, pipe, or
+/// similar was interrupted by a signal handler after it had transferred some, but before it had
+/// transferred all of the requested bytes. In the event of a partial write, the caller can make
+/// another write() call to transfer the remaining bytes. The subsequent call will either
+/// transfer further bytes or may result in an error (e.g., if the disk is now full).
+///
+/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
+/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
+///
+/// Linux has a limit on how many bytes may be transferred in one `write` call, which is `0x7ffff000`
+/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
+/// well as stuffing the errno codes into the last `4096` values. This is noted on the `write` man page.
+/// The limit on Darwin is `0x7fffffff`, trying to read more than that returns EINVAL.
+/// The corresponding POSIX limit is `maxInt(isize)`.
+pub fn write(fd: fd_t, bytes: []const u8) WriteError!usize {
+ if (bytes.len == 0) return 0;
+ if (native_os == .windows) {
+ return windows.WriteFile(fd, bytes, null);
+ }
+
+ if (native_os == .wasi and !builtin.link_libc) {
+ const ciovs = [_]iovec_const{iovec_const{
+ .iov_base = bytes.ptr,
+ .iov_len = bytes.len,
+ }};
+ var nwritten: usize = undefined;
+ switch (wasi.fd_write(fd, &ciovs, ciovs.len, &nwritten)) {
+ .SUCCESS => return nwritten,
+ .INTR => unreachable,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => unreachable,
+ .BADF => return error.NotOpenForWriting, // can be a race condition.
+ .DESTADDRREQ => unreachable, // `connect` was never called.
+ .DQUOT => return error.DiskQuota,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .PIPE => return error.BrokenPipe,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ const max_count = switch (native_os) {
+ .linux => 0x7ffff000,
+ .macos, .ios, .watchos, .tvos => maxInt(i32),
+ else => maxInt(isize),
+ };
+ while (true) {
+ const rc = system.write(fd, bytes.ptr, @min(bytes.len, max_count));
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .INVAL => return error.InvalidArgument,
+ .FAULT => unreachable,
+ .AGAIN => return error.WouldBlock,
+ .BADF => return error.NotOpenForWriting, // can be a race condition.
+ .DESTADDRREQ => unreachable, // `connect` was never called.
+ .DQUOT => return error.DiskQuota,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .PIPE => return error.BrokenPipe,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .BUSY => return error.DeviceBusy,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+/// Write multiple buffers to a file descriptor.
+/// Retries when interrupted by a signal.
+/// Returns the number of bytes written. If nonzero bytes were supplied, this will be nonzero.
+///
+/// Note that a successful write() may transfer fewer bytes than supplied. Such partial writes can
+/// occur for various reasons; for example, because there was insufficient space on the disk
+/// device to write all of the requested bytes, or because a blocked write() to a socket, pipe, or
+/// similar was interrupted by a signal handler after it had transferred some, but before it had
+/// transferred all of the requested bytes. In the event of a partial write, the caller can make
+/// another write() call to transfer the remaining bytes. The subsequent call will either
+/// transfer further bytes or may result in an error (e.g., if the disk is now full).
+///
+/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
+/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
+///
+/// If `iov.len` is larger than `IOV_MAX`, a partial write will occur.
+///
+/// This function assumes that all vectors, including zero-length vectors, have
+/// a pointer within the address space of the application.
+pub fn writev(fd: fd_t, iov: []const iovec_const) WriteError!usize {
+ if (native_os == .windows) {
+ // TODO improve this to use WriteFileScatter
+ if (iov.len == 0) return 0;
+ const first = iov[0];
+ return write(fd, first.iov_base[0..first.iov_len]);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ var nwritten: usize = undefined;
+ switch (wasi.fd_write(fd, iov.ptr, iov.len, &nwritten)) {
+ .SUCCESS => return nwritten,
+ .INTR => unreachable,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => unreachable,
+ .BADF => return error.NotOpenForWriting, // can be a race condition.
+ .DESTADDRREQ => unreachable, // `connect` was never called.
+ .DQUOT => return error.DiskQuota,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .PIPE => return error.BrokenPipe,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ while (true) {
+ const rc = system.writev(fd, iov.ptr, @min(iov.len, IOV_MAX));
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .INVAL => return error.InvalidArgument,
+ .FAULT => unreachable,
+ .AGAIN => return error.WouldBlock,
+ .BADF => return error.NotOpenForWriting, // Can be a race condition.
+ .DESTADDRREQ => unreachable, // `connect` was never called.
+ .DQUOT => return error.DiskQuota,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .PIPE => return error.BrokenPipe,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .BUSY => return error.DeviceBusy,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const PWriteError = WriteError || error{Unseekable};
+
+/// Write to a file descriptor, with a position offset.
+/// Retries when interrupted by a signal.
+/// Returns the number of bytes written. If nonzero bytes were supplied, this will be nonzero.
+///
+/// Note that a successful write() may transfer fewer bytes than supplied. Such partial writes can
+/// occur for various reasons; for example, because there was insufficient space on the disk
+/// device to write all of the requested bytes, or because a blocked write() to a socket, pipe, or
+/// similar was interrupted by a signal handler after it had transferred some, but before it had
+/// transferred all of the requested bytes. In the event of a partial write, the caller can make
+/// another write() call to transfer the remaining bytes. The subsequent call will either
+/// transfer further bytes or may result in an error (e.g., if the disk is now full).
+///
+/// For POSIX systems, if `fd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+/// On Windows, if the application has a global event loop enabled, I/O Completion Ports are
+/// used to perform the I/O. `error.WouldBlock` is not possible on Windows.
+///
+/// Linux has a limit on how many bytes may be transferred in one `pwrite` call, which is `0x7ffff000`
+/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
+/// well as stuffing the errno codes into the last `4096` values. This is noted on the `write` man page.
+/// The limit on Darwin is `0x7fffffff`, trying to write more than that returns EINVAL.
+/// The corresponding POSIX limit is `maxInt(isize)`.
+pub fn pwrite(fd: fd_t, bytes: []const u8, offset: u64) PWriteError!usize {
+ if (bytes.len == 0) return 0;
+ if (native_os == .windows) {
+ return windows.WriteFile(fd, bytes, offset);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ const ciovs = [1]iovec_const{iovec_const{
+ .iov_base = bytes.ptr,
+ .iov_len = bytes.len,
+ }};
+
+ var nwritten: usize = undefined;
+ switch (wasi.fd_pwrite(fd, &ciovs, ciovs.len, offset, &nwritten)) {
+ .SUCCESS => return nwritten,
+ .INTR => unreachable,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => unreachable,
+ .BADF => return error.NotOpenForWriting, // can be a race condition.
+ .DESTADDRREQ => unreachable, // `connect` was never called.
+ .DQUOT => return error.DiskQuota,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .PIPE => return error.BrokenPipe,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ // Prevent EINVAL.
+ const max_count = switch (native_os) {
+ .linux => 0x7ffff000,
+ .macos, .ios, .watchos, .tvos => maxInt(i32),
+ else => maxInt(isize),
+ };
+
+ const pwrite_sym = if (lfs64_abi) system.pwrite64 else system.pwrite;
+ while (true) {
+ const rc = pwrite_sym(fd, bytes.ptr, @min(bytes.len, max_count), @bitCast(offset));
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .INVAL => return error.InvalidArgument,
+ .FAULT => unreachable,
+ .AGAIN => return error.WouldBlock,
+ .BADF => return error.NotOpenForWriting, // Can be a race condition.
+ .DESTADDRREQ => unreachable, // `connect` was never called.
+ .DQUOT => return error.DiskQuota,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .PIPE => return error.BrokenPipe,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .BUSY => return error.DeviceBusy,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+/// Write multiple buffers to a file descriptor, with a position offset.
+/// Retries when interrupted by a signal.
+/// Returns the number of bytes written. If nonzero bytes were supplied, this will be nonzero.
+///
+/// Note that a successful write() may transfer fewer than count bytes. Such partial writes can
+/// occur for various reasons; for example, because there was insufficient space on the disk
+/// device to write all of the requested bytes, or because a blocked write() to a socket, pipe, or
+/// similar was interrupted by a signal handler after it had transferred some, but before it had
+/// transferred all of the requested bytes. In the event of a partial write, the caller can make
+/// another write() call to transfer the remaining bytes. The subsequent call will either
+/// transfer further bytes or may result in an error (e.g., if the disk is now full).
+///
+/// If `fd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+///
+/// The following systems do not have this syscall, and will return partial writes if more than one
+/// vector is provided:
+/// * Darwin
+/// * Windows
+///
+/// If `iov.len` is larger than `IOV_MAX`, a partial write will occur.
+pub fn pwritev(fd: fd_t, iov: []const iovec_const, offset: u64) PWriteError!usize {
+ const have_pwrite_but_not_pwritev = switch (native_os) {
+ .windows, .macos, .ios, .watchos, .tvos, .haiku => true,
+ else => false,
+ };
+
+ if (have_pwrite_but_not_pwritev) {
+ // We could loop here; but proper usage of `pwritev` must handle partial writes anyway.
+ // So we simply write the first vector only.
+ if (iov.len == 0) return 0;
+ const first = iov[0];
+ return pwrite(fd, first.iov_base[0..first.iov_len], offset);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ var nwritten: usize = undefined;
+ switch (wasi.fd_pwrite(fd, iov.ptr, iov.len, offset, &nwritten)) {
+ .SUCCESS => return nwritten,
+ .INTR => unreachable,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .AGAIN => unreachable,
+ .BADF => return error.NotOpenForWriting, // Can be a race condition.
+ .DESTADDRREQ => unreachable, // `connect` was never called.
+ .DQUOT => return error.DiskQuota,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .PIPE => return error.BrokenPipe,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ const pwritev_sym = if (lfs64_abi) system.pwritev64 else system.pwritev;
+ while (true) {
+ const rc = pwritev_sym(fd, iov.ptr, @min(iov.len, IOV_MAX), @bitCast(offset));
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .INVAL => return error.InvalidArgument,
+ .FAULT => unreachable,
+ .AGAIN => return error.WouldBlock,
+ .BADF => return error.NotOpenForWriting, // Can be a race condition.
+ .DESTADDRREQ => unreachable, // `connect` was never called.
+ .DQUOT => return error.DiskQuota,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .PIPE => return error.BrokenPipe,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .BUSY => return error.DeviceBusy,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const OpenError = error{
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to open a new resource relative to it.
+ AccessDenied,
+ SymLinkLoop,
+ ProcessFdQuotaExceeded,
+ SystemFdQuotaExceeded,
+ NoDevice,
+ FileNotFound,
+
+ /// The path exceeded `max_path_bytes` bytes.
+ NameTooLong,
+
+ /// Insufficient kernel memory was available, or
+ /// the named file is a FIFO and per-user hard limit on
+ /// memory allocation for pipes has been reached.
+ SystemResources,
+
+ /// The file is too large to be opened. This error is unreachable
+ /// for 64-bit targets, as well as when opening directories.
+ FileTooBig,
+
+ /// The path refers to directory but the `DIRECTORY` flag was not provided.
+ IsDir,
+
+ /// A new path cannot be created because the device has no room for the new file.
+ /// This error is only reachable when the `CREAT` flag is provided.
+ NoSpaceLeft,
+
+ /// A component used as a directory in the path was not, in fact, a directory, or
+ /// `DIRECTORY` was specified and the path was not a directory.
+ NotDir,
+
+ /// The path already exists and the `CREAT` and `EXCL` flags were provided.
+ PathAlreadyExists,
+ DeviceBusy,
+
+ /// The underlying filesystem does not support file locks
+ FileLocksNotSupported,
+
+ /// Path contains characters that are disallowed by the underlying filesystem.
+ BadPathName,
+
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+
+ /// On Windows, `\\server` or `\\server\share` was not found.
+ NetworkNotFound,
+
+ /// One of these three things:
+ /// * pathname refers to an executable image which is currently being
+ /// executed and write access was requested.
+ /// * pathname refers to a file that is currently in use as a swap
+ /// file, and the O_TRUNC flag was specified.
+ /// * pathname refers to a file that is currently being read by the
+ /// kernel (e.g., for module/firmware loading), and write access was
+ /// requested.
+ FileBusy,
+
+ WouldBlock,
+} || UnexpectedError;
+
+/// Open and possibly create a file. Keeps trying if it gets interrupted.
+/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `file_path` should be encoded as valid UTF-8.
+/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
+/// See also `openZ`.
+pub fn open(file_path: []const u8, flags: O, perm: mode_t) OpenError!fd_t {
+ if (native_os == .windows) {
+ @compileError("Windows does not support POSIX; use Windows-specific API or cross-platform std.fs API");
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return openat(AT.FDCWD, file_path, flags, perm);
+ }
+ const file_path_c = try toPosixPath(file_path);
+ return openZ(&file_path_c, flags, perm);
+}
+
+/// Open and possibly create a file. Keeps trying if it gets interrupted.
+/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `file_path` should be encoded as valid UTF-8.
+/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
+/// See also `open`.
+pub fn openZ(file_path: [*:0]const u8, flags: O, perm: mode_t) OpenError!fd_t {
+ if (native_os == .windows) {
+ @compileError("Windows does not support POSIX; use Windows-specific API or cross-platform std.fs API");
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return open(mem.sliceTo(file_path, 0), flags, perm);
+ }
+
+ const open_sym = if (lfs64_abi) system.open64 else system.open;
+ while (true) {
+ const rc = open_sym(file_path, flags, perm);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .FBIG => return error.FileTooBig,
+ .OVERFLOW => return error.FileTooBig,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NODEV => return error.NoDevice,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .NOTDIR => return error.NotDir,
+ .PERM => return error.AccessDenied,
+ .EXIST => return error.PathAlreadyExists,
+ .BUSY => return error.DeviceBusy,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+/// Open and possibly create a file. Keeps trying if it gets interrupted.
+/// `file_path` is relative to the open directory handle `dir_fd`.
+/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `file_path` should be encoded as valid UTF-8.
+/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
+/// See also `openatZ`.
+pub fn openat(dir_fd: fd_t, file_path: []const u8, flags: O, mode: mode_t) OpenError!fd_t {
+ if (native_os == .windows) {
+ @compileError("Windows does not support POSIX; use Windows-specific API or cross-platform std.fs API");
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ // `mode` is ignored on WASI, which does not support unix-style file permissions
+ const opts = try openOptionsFromFlagsWasi(flags);
+ const fd = try openatWasi(
+ dir_fd,
+ file_path,
+ opts.lookup_flags,
+ opts.oflags,
+ opts.fs_flags,
+ opts.fs_rights_base,
+ opts.fs_rights_inheriting,
+ );
+ errdefer close(fd);
+
+ if (flags.write) {
+ const info = try std.os.fstat_wasi(fd);
+ if (info.filetype == .DIRECTORY)
+ return error.IsDir;
+ }
+
+ return fd;
+ }
+ const file_path_c = try toPosixPath(file_path);
+ return openatZ(dir_fd, &file_path_c, flags, mode);
+}
+
+/// Open and possibly create a file in WASI.
+pub fn openatWasi(
+ dir_fd: fd_t,
+ file_path: []const u8,
+ lookup_flags: wasi.lookupflags_t,
+ oflags: wasi.oflags_t,
+ fdflags: wasi.fdflags_t,
+ base: wasi.rights_t,
+ inheriting: wasi.rights_t,
+) OpenError!fd_t {
+ while (true) {
+ var fd: fd_t = undefined;
+ switch (wasi.path_open(dir_fd, lookup_flags, file_path.ptr, file_path.len, oflags, base, inheriting, fdflags, &fd)) {
+ .SUCCESS => return fd,
+ .INTR => continue,
+
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .BADF => unreachable,
+ .ACCES => return error.AccessDenied,
+ .FBIG => return error.FileTooBig,
+ .OVERFLOW => return error.FileTooBig,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NODEV => return error.NoDevice,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .NOTDIR => return error.NotDir,
+ .PERM => return error.AccessDenied,
+ .EXIST => return error.PathAlreadyExists,
+ .BUSY => return error.DeviceBusy,
+ .NOTCAPABLE => return error.AccessDenied,
+ .ILSEQ => return error.InvalidUtf8,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+/// A struct to contain all lookup/rights flags accepted by `wasi.path_open`
+const WasiOpenOptions = struct {
+ oflags: wasi.oflags_t,
+ lookup_flags: wasi.lookupflags_t,
+ fs_rights_base: wasi.rights_t,
+ fs_rights_inheriting: wasi.rights_t,
+ fs_flags: wasi.fdflags_t,
+};
+
+/// Compute rights + flags corresponding to the provided POSIX access mode.
+fn openOptionsFromFlagsWasi(oflag: O) OpenError!WasiOpenOptions {
+ const w = std.os.wasi;
+
+ // Next, calculate the read/write rights to request, depending on the
+ // provided POSIX access mode
+ var rights: w.rights_t = .{};
+ if (oflag.read) {
+ rights.FD_READ = true;
+ rights.FD_READDIR = true;
+ }
+ if (oflag.write) {
+ rights.FD_DATASYNC = true;
+ rights.FD_WRITE = true;
+ rights.FD_ALLOCATE = true;
+ rights.FD_FILESTAT_SET_SIZE = true;
+ }
+
+ // https://github.com/ziglang/zig/issues/18882
+ const flag_bits: u32 = @bitCast(oflag);
+ const oflags_int: u16 = @as(u12, @truncate(flag_bits >> 12));
+ const fs_flags_int: u16 = @as(u12, @truncate(flag_bits));
+
+ return .{
+ // https://github.com/ziglang/zig/issues/18882
+ .oflags = @bitCast(oflags_int),
+ .lookup_flags = .{
+ .SYMLINK_FOLLOW = !oflag.NOFOLLOW,
+ },
+ .fs_rights_base = rights,
+ .fs_rights_inheriting = rights,
+ // https://github.com/ziglang/zig/issues/18882
+ .fs_flags = @bitCast(fs_flags_int),
+ };
+}
+
+/// Open and possibly create a file. Keeps trying if it gets interrupted.
+/// `file_path` is relative to the open directory handle `dir_fd`.
+/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `file_path` should be encoded as valid UTF-8.
+/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
+/// See also `openat`.
+pub fn openatZ(dir_fd: fd_t, file_path: [*:0]const u8, flags: O, mode: mode_t) OpenError!fd_t {
+ if (native_os == .windows) {
+ @compileError("Windows does not support POSIX; use Windows-specific API or cross-platform std.fs API");
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return openat(dir_fd, mem.sliceTo(file_path, 0), flags, mode);
+ }
+
+ const openat_sym = if (lfs64_abi) system.openat64 else system.openat;
+ while (true) {
+ const rc = openat_sym(dir_fd, file_path, flags, mode);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .BADF => unreachable,
+ .ACCES => return error.AccessDenied,
+ .FBIG => return error.FileTooBig,
+ .OVERFLOW => return error.FileTooBig,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NODEV => return error.NoDevice,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .NOTDIR => return error.NotDir,
+ .PERM => return error.AccessDenied,
+ .EXIST => return error.PathAlreadyExists,
+ .BUSY => return error.DeviceBusy,
+ .OPNOTSUPP => return error.FileLocksNotSupported,
+ .AGAIN => return error.WouldBlock,
+ .TXTBSY => return error.FileBusy,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub fn dup(old_fd: fd_t) !fd_t {
+ const rc = system.dup(old_fd);
+ return switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .MFILE => error.ProcessFdQuotaExceeded,
+ .BADF => unreachable, // invalid file descriptor
+ else => |err| return unexpectedErrno(err),
+ };
+}
+
+pub fn dup2(old_fd: fd_t, new_fd: fd_t) !void {
+ while (true) {
+ switch (errno(system.dup2(old_fd, new_fd))) {
+ .SUCCESS => return,
+ .BUSY, .INTR => continue,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .INVAL => unreachable, // invalid parameters passed to dup2
+ .BADF => unreachable, // invalid file descriptor
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const ExecveError = error{
+ SystemResources,
+ AccessDenied,
+ InvalidExe,
+ FileSystem,
+ IsDir,
+ FileNotFound,
+ NotDir,
+ FileBusy,
+ ProcessFdQuotaExceeded,
+ SystemFdQuotaExceeded,
+ NameTooLong,
+} || UnexpectedError;
+
+/// This function ignores PATH environment variable. See `execvpeZ` for that.
+pub fn execveZ(
+ path: [*:0]const u8,
+ child_argv: [*:null]const ?[*:0]const u8,
+ envp: [*:null]const ?[*:0]const u8,
+) ExecveError {
+ switch (errno(system.execve(path, child_argv, envp))) {
+ .SUCCESS => unreachable,
+ .FAULT => unreachable,
+ .@"2BIG" => return error.SystemResources,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOMEM => return error.SystemResources,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .INVAL => return error.InvalidExe,
+ .NOEXEC => return error.InvalidExe,
+ .IO => return error.FileSystem,
+ .LOOP => return error.FileSystem,
+ .ISDIR => return error.IsDir,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .TXTBSY => return error.FileBusy,
+ else => |err| switch (native_os) {
+ .macos, .ios, .tvos, .watchos => switch (err) {
+ .BADEXEC => return error.InvalidExe,
+ .BADARCH => return error.InvalidExe,
+ else => return unexpectedErrno(err),
+ },
+ .linux => switch (err) {
+ .LIBBAD => return error.InvalidExe,
+ else => return unexpectedErrno(err),
+ },
+ else => return unexpectedErrno(err),
+ },
+ }
+}
+
+pub const Arg0Expand = enum {
+ expand,
+ no_expand,
+};
+
+/// Like `execvpeZ` except if `arg0_expand` is `.expand`, then `argv` is mutable,
+/// and `argv[0]` is expanded to be the same absolute path that is passed to the execve syscall.
+/// If this function returns with an error, `argv[0]` will be restored to the value it was when it was passed in.
+pub fn execvpeZ_expandArg0(
+ comptime arg0_expand: Arg0Expand,
+ file: [*:0]const u8,
+ child_argv: switch (arg0_expand) {
+ .expand => [*:null]?[*:0]const u8,
+ .no_expand => [*:null]const ?[*:0]const u8,
+ },
+ envp: [*:null]const ?[*:0]const u8,
+) ExecveError {
+ const file_slice = mem.sliceTo(file, 0);
+ if (mem.indexOfScalar(u8, file_slice, '/') != null) return execveZ(file, child_argv, envp);
+
+ const PATH = getenvZ("PATH") orelse "/usr/local/bin:/bin/:/usr/bin";
+ // Use of PATH_MAX here is valid as the path_buf will be passed
+ // directly to the operating system in execveZ.
+ var path_buf: [PATH_MAX]u8 = undefined;
+ var it = mem.tokenizeScalar(u8, PATH, ':');
+ var seen_eacces = false;
+ var err: ExecveError = error.FileNotFound;
+
+ // In case of expanding arg0 we must put it back if we return with an error.
+ const prev_arg0 = child_argv[0];
+ defer switch (arg0_expand) {
+ .expand => child_argv[0] = prev_arg0,
+ .no_expand => {},
+ };
+
+ while (it.next()) |search_path| {
+ const path_len = search_path.len + file_slice.len + 1;
+ if (path_buf.len < path_len + 1) return error.NameTooLong;
+ @memcpy(path_buf[0..search_path.len], search_path);
+ path_buf[search_path.len] = '/';
+ @memcpy(path_buf[search_path.len + 1 ..][0..file_slice.len], file_slice);
+ path_buf[path_len] = 0;
+ const full_path = path_buf[0..path_len :0].ptr;
+ switch (arg0_expand) {
+ .expand => child_argv[0] = full_path,
+ .no_expand => {},
+ }
+ err = execveZ(full_path, child_argv, envp);
+ switch (err) {
+ error.AccessDenied => seen_eacces = true,
+ error.FileNotFound, error.NotDir => {},
+ else => |e| return e,
+ }
+ }
+ if (seen_eacces) return error.AccessDenied;
+ return err;
+}
+
+/// This function also uses the PATH environment variable to get the full path to the executable.
+/// If `file` is an absolute path, this is the same as `execveZ`.
+pub fn execvpeZ(
+ file: [*:0]const u8,
+ argv_ptr: [*:null]const ?[*:0]const u8,
+ envp: [*:null]const ?[*:0]const u8,
+) ExecveError {
+ return execvpeZ_expandArg0(.no_expand, file, argv_ptr, envp);
+}
+
+/// Get an environment variable.
+/// See also `getenvZ`.
+pub fn getenv(key: []const u8) ?[:0]const u8 {
+ if (native_os == .windows) {
+ @compileError("std.os.getenv is unavailable for Windows because environment strings are in WTF-16 format. See std.process.getEnvVarOwned for a cross-platform API or std.process.getenvW for a Windows-specific API.");
+ }
+ if (builtin.link_libc) {
+ var ptr = std.c.environ;
+ while (ptr[0]) |line| : (ptr += 1) {
+ var line_i: usize = 0;
+ while (line[line_i] != 0 and line[line_i] != '=') : (line_i += 1) {}
+ const this_key = line[0..line_i];
+
+ if (!mem.eql(u8, this_key, key)) continue;
+
+ return mem.sliceTo(line + line_i + 1, 0);
+ }
+ return null;
+ }
+ if (native_os == .wasi) {
+ @compileError("std.os.getenv is unavailable for WASI. See std.process.getEnvMap or std.process.getEnvVarOwned for a cross-platform API.");
+ }
+ // The simplified start logic doesn't populate environ.
+ if (std.start.simplified_logic) return null;
+ // TODO see https://github.com/ziglang/zig/issues/4524
+ for (std.os.environ) |ptr| {
+ var line_i: usize = 0;
+ while (ptr[line_i] != 0 and ptr[line_i] != '=') : (line_i += 1) {}
+ const this_key = ptr[0..line_i];
+ if (!mem.eql(u8, key, this_key)) continue;
+
+ return mem.sliceTo(ptr + line_i + 1, 0);
+ }
+ return null;
+}
+
+/// Get an environment variable with a null-terminated name.
+/// See also `getenv`.
+pub fn getenvZ(key: [*:0]const u8) ?[:0]const u8 {
+ if (builtin.link_libc) {
+ const value = system.getenv(key) orelse return null;
+ return mem.sliceTo(value, 0);
+ }
+ if (native_os == .windows) {
+ @compileError("std.os.getenvZ is unavailable for Windows because environment string is in WTF-16 format. See std.process.getEnvVarOwned for cross-platform API or std.process.getenvW for Windows-specific API.");
+ }
+ return getenv(mem.sliceTo(key, 0));
+}
+
+pub const GetCwdError = error{
+ NameTooLong,
+ CurrentWorkingDirectoryUnlinked,
+} || UnexpectedError;
+
+/// The result is a slice of out_buffer, indexed from 0.
+pub fn getcwd(out_buffer: []u8) GetCwdError![]u8 {
+ if (native_os == .windows) {
+ return windows.GetCurrentDirectory(out_buffer);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ const path = ".";
+ if (out_buffer.len < path.len) return error.NameTooLong;
+ const result = out_buffer[0..path.len];
+ @memcpy(result, path);
+ return result;
+ }
+
+ const err: E = if (builtin.link_libc) err: {
+ const c_err = if (std.c.getcwd(out_buffer.ptr, out_buffer.len)) |_| 0 else std.c._errno().*;
+ break :err @enumFromInt(c_err);
+ } else err: {
+ break :err errno(system.getcwd(out_buffer.ptr, out_buffer.len));
+ };
+ switch (err) {
+ .SUCCESS => return mem.sliceTo(out_buffer, 0),
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .NOENT => return error.CurrentWorkingDirectoryUnlinked,
+ .RANGE => return error.NameTooLong,
+ else => return unexpectedErrno(err),
+ }
+}
+
+pub const SymLinkError = error{
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to create a new symbolic link relative to it.
+ AccessDenied,
+ DiskQuota,
+ PathAlreadyExists,
+ FileSystem,
+ SymLinkLoop,
+ FileNotFound,
+ SystemResources,
+ NoSpaceLeft,
+ ReadOnlyFileSystem,
+ NotDir,
+ NameTooLong,
+
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+
+ BadPathName,
+} || UnexpectedError;
+
+/// Creates a symbolic link named `sym_link_path` which contains the string `target_path`.
+/// A symbolic link (also known as a soft link) may point to an existing file or to a nonexistent
+/// one; the latter case is known as a dangling link.
+/// On Windows, both paths should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, both paths should be encoded as valid UTF-8.
+/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
+/// If `sym_link_path` exists, it will not be overwritten.
+/// See also `symlinkZ.
+pub fn symlink(target_path: []const u8, sym_link_path: []const u8) SymLinkError!void {
+ if (native_os == .windows) {
+ @compileError("symlink is not supported on Windows; use std.os.windows.CreateSymbolicLink instead");
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return symlinkat(target_path, wasi.AT.FDCWD, sym_link_path);
+ }
+ const target_path_c = try toPosixPath(target_path);
+ const sym_link_path_c = try toPosixPath(sym_link_path);
+ return symlinkZ(&target_path_c, &sym_link_path_c);
+}
+
+/// This is the same as `symlink` except the parameters are null-terminated pointers.
+/// See also `symlink`.
+pub fn symlinkZ(target_path: [*:0]const u8, sym_link_path: [*:0]const u8) SymLinkError!void {
+ if (native_os == .windows) {
+ @compileError("symlink is not supported on Windows; use std.os.windows.CreateSymbolicLink instead");
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return symlinkatZ(target_path, fs.cwd().fd, sym_link_path);
+ }
+ switch (errno(system.symlink(target_path, sym_link_path))) {
+ .SUCCESS => return,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Similar to `symlink`, however, creates a symbolic link named `sym_link_path` which contains the string
+/// `target_path` **relative** to `newdirfd` directory handle.
+/// A symbolic link (also known as a soft link) may point to an existing file or to a nonexistent
+/// one; the latter case is known as a dangling link.
+/// On Windows, both paths should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, both paths should be encoded as valid UTF-8.
+/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
+/// If `sym_link_path` exists, it will not be overwritten.
+/// See also `symlinkatWasi`, `symlinkatZ` and `symlinkatW`.
+pub fn symlinkat(target_path: []const u8, newdirfd: fd_t, sym_link_path: []const u8) SymLinkError!void {
+ if (native_os == .windows) {
+ @compileError("symlinkat is not supported on Windows; use std.os.windows.CreateSymbolicLink instead");
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return symlinkatWasi(target_path, newdirfd, sym_link_path);
+ }
+ const target_path_c = try toPosixPath(target_path);
+ const sym_link_path_c = try toPosixPath(sym_link_path);
+ return symlinkatZ(&target_path_c, newdirfd, &sym_link_path_c);
+}
+
+/// WASI-only. The same as `symlinkat` but targeting WASI.
+/// See also `symlinkat`.
+pub fn symlinkatWasi(target_path: []const u8, newdirfd: fd_t, sym_link_path: []const u8) SymLinkError!void {
+ switch (wasi.path_symlink(target_path.ptr, target_path.len, newdirfd, sym_link_path.ptr, sym_link_path.len)) {
+ .SUCCESS => {},
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .BADF => unreachable,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .NOTCAPABLE => return error.AccessDenied,
+ .ILSEQ => return error.InvalidUtf8,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// The same as `symlinkat` except the parameters are null-terminated pointers.
+/// See also `symlinkat`.
+pub fn symlinkatZ(target_path: [*:0]const u8, newdirfd: fd_t, sym_link_path: [*:0]const u8) SymLinkError!void {
+ if (native_os == .windows) {
+ @compileError("symlinkat is not supported on Windows; use std.os.windows.CreateSymbolicLink instead");
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return symlinkat(mem.sliceTo(target_path, 0), newdirfd, mem.sliceTo(sym_link_path, 0));
+ }
+ switch (errno(system.symlinkat(target_path, newdirfd, sym_link_path))) {
+ .SUCCESS => return,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const LinkError = UnexpectedError || error{
+ AccessDenied,
+ DiskQuota,
+ PathAlreadyExists,
+ FileSystem,
+ SymLinkLoop,
+ LinkQuotaExceeded,
+ NameTooLong,
+ FileNotFound,
+ SystemResources,
+ NoSpaceLeft,
+ ReadOnlyFileSystem,
+ NotSameFileSystem,
+
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+};
+
+/// On WASI, both paths should be encoded as valid UTF-8.
+/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
+pub fn linkZ(oldpath: [*:0]const u8, newpath: [*:0]const u8, flags: i32) LinkError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return link(mem.sliceTo(oldpath, 0), mem.sliceTo(newpath, 0), flags);
+ }
+ switch (errno(system.link(oldpath, newpath, flags))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .FAULT => unreachable,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .PERM => return error.AccessDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .XDEV => return error.NotSameFileSystem,
+ .INVAL => unreachable,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// On WASI, both paths should be encoded as valid UTF-8.
+/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
+pub fn link(oldpath: []const u8, newpath: []const u8, flags: i32) LinkError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return linkat(wasi.AT.FDCWD, oldpath, wasi.AT.FDCWD, newpath, flags) catch |err| switch (err) {
+ error.NotDir => unreachable, // link() does not support directories
+ else => |e| return e,
+ };
+ }
+ const old = try toPosixPath(oldpath);
+ const new = try toPosixPath(newpath);
+ return try linkZ(&old, &new, flags);
+}
+
+pub const LinkatError = LinkError || error{NotDir};
+
+/// On WASI, both paths should be encoded as valid UTF-8.
+/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
+pub fn linkatZ(
+ olddir: fd_t,
+ oldpath: [*:0]const u8,
+ newdir: fd_t,
+ newpath: [*:0]const u8,
+ flags: i32,
+) LinkatError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return linkat(olddir, mem.sliceTo(oldpath, 0), newdir, mem.sliceTo(newpath, 0), flags);
+ }
+ switch (errno(system.linkat(olddir, oldpath, newdir, newpath, flags))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .FAULT => unreachable,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .NOTDIR => return error.NotDir,
+ .PERM => return error.AccessDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .XDEV => return error.NotSameFileSystem,
+ .INVAL => unreachable,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// On WASI, both paths should be encoded as valid UTF-8.
+/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
+pub fn linkat(
+ olddir: fd_t,
+ oldpath: []const u8,
+ newdir: fd_t,
+ newpath: []const u8,
+ flags: i32,
+) LinkatError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ const old: RelativePathWasi = .{ .dir_fd = olddir, .relative_path = oldpath };
+ const new: RelativePathWasi = .{ .dir_fd = newdir, .relative_path = newpath };
+ const old_flags: wasi.lookupflags_t = .{
+ .SYMLINK_FOLLOW = (flags & AT.SYMLINK_FOLLOW) != 0,
+ };
+ switch (wasi.path_link(
+ old.dir_fd,
+ old_flags,
+ old.relative_path.ptr,
+ old.relative_path.len,
+ new.dir_fd,
+ new.relative_path.ptr,
+ new.relative_path.len,
+ )) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .FAULT => unreachable,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .NOTDIR => return error.NotDir,
+ .PERM => return error.AccessDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .XDEV => return error.NotSameFileSystem,
+ .INVAL => unreachable,
+ .ILSEQ => return error.InvalidUtf8,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ const old = try toPosixPath(oldpath);
+ const new = try toPosixPath(newpath);
+ return try linkatZ(olddir, &old, newdir, &new, flags);
+}
+
+pub const UnlinkError = error{
+ FileNotFound,
+
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to unlink a resource by path relative to it.
+ AccessDenied,
+ FileBusy,
+ FileSystem,
+ IsDir,
+ SymLinkLoop,
+ NameTooLong,
+ NotDir,
+ SystemResources,
+ ReadOnlyFileSystem,
+
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+
+ /// On Windows, file paths cannot contain these characters:
+ /// '/', '*', '?', '"', '<', '>', '|'
+ BadPathName,
+
+ /// On Windows, `\\server` or `\\server\share` was not found.
+ NetworkNotFound,
+} || UnexpectedError;
+
+/// Delete a name and possibly the file it refers to.
+/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `file_path` should be encoded as valid UTF-8.
+/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
+/// See also `unlinkZ`.
+pub fn unlink(file_path: []const u8) UnlinkError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return unlinkat(wasi.AT.FDCWD, file_path, 0) catch |err| switch (err) {
+ error.DirNotEmpty => unreachable, // only occurs when targeting directories
+ else => |e| return e,
+ };
+ } else if (native_os == .windows) {
+ const file_path_w = try windows.sliceToPrefixedFileW(null, file_path);
+ return unlinkW(file_path_w.span());
+ } else {
+ const file_path_c = try toPosixPath(file_path);
+ return unlinkZ(&file_path_c);
+ }
+}
+
+/// Same as `unlink` except the parameter is null terminated.
+pub fn unlinkZ(file_path: [*:0]const u8) UnlinkError!void {
+ if (native_os == .windows) {
+ const file_path_w = try windows.cStrToPrefixedFileW(null, file_path);
+ return unlinkW(file_path_w.span());
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return unlink(mem.sliceTo(file_path, 0));
+ }
+ switch (errno(system.unlink(file_path))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .BUSY => return error.FileBusy,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .IO => return error.FileSystem,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Windows-only. Same as `unlink` except the parameter is null-terminated, WTF16 LE encoded.
+pub fn unlinkW(file_path_w: []const u16) UnlinkError!void {
+ windows.DeleteFile(file_path_w, .{ .dir = fs.cwd().fd }) catch |err| switch (err) {
+ error.DirNotEmpty => unreachable, // we're not passing .remove_dir = true
+ else => |e| return e,
+ };
+}
+
+pub const UnlinkatError = UnlinkError || error{
+ /// When passing `AT.REMOVEDIR`, this error occurs when the named directory is not empty.
+ DirNotEmpty,
+};
+
+/// Delete a file name and possibly the file it refers to, based on an open directory handle.
+/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `file_path` should be encoded as valid UTF-8.
+/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
+/// Asserts that the path parameter has no null bytes.
+pub fn unlinkat(dirfd: fd_t, file_path: []const u8, flags: u32) UnlinkatError!void {
+ if (native_os == .windows) {
+ const file_path_w = try windows.sliceToPrefixedFileW(dirfd, file_path);
+ return unlinkatW(dirfd, file_path_w.span(), flags);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return unlinkatWasi(dirfd, file_path, flags);
+ } else {
+ const file_path_c = try toPosixPath(file_path);
+ return unlinkatZ(dirfd, &file_path_c, flags);
+ }
+}
+
+/// WASI-only. Same as `unlinkat` but targeting WASI.
+/// See also `unlinkat`.
+pub fn unlinkatWasi(dirfd: fd_t, file_path: []const u8, flags: u32) UnlinkatError!void {
+ const remove_dir = (flags & AT.REMOVEDIR) != 0;
+ const res = if (remove_dir)
+ wasi.path_remove_directory(dirfd, file_path.ptr, file_path.len)
+ else
+ wasi.path_unlink_file(dirfd, file_path.ptr, file_path.len);
+ switch (res) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .BUSY => return error.FileBusy,
+ .FAULT => unreachable,
+ .IO => return error.FileSystem,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .NOTEMPTY => return error.DirNotEmpty,
+ .NOTCAPABLE => return error.AccessDenied,
+ .ILSEQ => return error.InvalidUtf8,
+
+ .INVAL => unreachable, // invalid flags, or pathname has . as last component
+ .BADF => unreachable, // always a race condition
+
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Same as `unlinkat` but `file_path` is a null-terminated string.
+pub fn unlinkatZ(dirfd: fd_t, file_path_c: [*:0]const u8, flags: u32) UnlinkatError!void {
+ if (native_os == .windows) {
+ const file_path_w = try windows.cStrToPrefixedFileW(dirfd, file_path_c);
+ return unlinkatW(dirfd, file_path_w.span(), flags);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return unlinkat(dirfd, mem.sliceTo(file_path_c, 0), flags);
+ }
+ switch (errno(system.unlinkat(dirfd, file_path_c, flags))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .BUSY => return error.FileBusy,
+ .FAULT => unreachable,
+ .IO => return error.FileSystem,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .EXIST => return error.DirNotEmpty,
+ .NOTEMPTY => return error.DirNotEmpty,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+
+ .INVAL => unreachable, // invalid flags, or pathname has . as last component
+ .BADF => unreachable, // always a race condition
+
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Same as `unlinkat` but `sub_path_w` is WTF16LE, NT prefixed. Windows only.
+pub fn unlinkatW(dirfd: fd_t, sub_path_w: []const u16, flags: u32) UnlinkatError!void {
+ const remove_dir = (flags & AT.REMOVEDIR) != 0;
+ return windows.DeleteFile(sub_path_w, .{ .dir = dirfd, .remove_dir = remove_dir });
+}
+
+pub const RenameError = error{
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to rename a resource by path relative to it.
+ ///
+ /// On Windows, this error may be returned instead of PathAlreadyExists when
+ /// renaming a directory over an existing directory.
+ AccessDenied,
+ FileBusy,
+ DiskQuota,
+ IsDir,
+ SymLinkLoop,
+ LinkQuotaExceeded,
+ NameTooLong,
+ FileNotFound,
+ NotDir,
+ SystemResources,
+ NoSpaceLeft,
+ PathAlreadyExists,
+ ReadOnlyFileSystem,
+ RenameAcrossMountPoints,
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+ BadPathName,
+ NoDevice,
+ SharingViolation,
+ PipeBusy,
+ /// On Windows, `\\server` or `\\server\share` was not found.
+ NetworkNotFound,
+ /// On Windows, antivirus software is enabled by default. It can be
+ /// disabled, but Windows Update sometimes ignores the user's preference
+ /// and re-enables it. When enabled, antivirus software on Windows
+ /// intercepts file system operations and makes them significantly slower
+ /// in addition to possibly failing with this error code.
+ AntivirusInterference,
+} || UnexpectedError;
+
+/// Change the name or location of a file.
+/// On Windows, both paths should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, both paths should be encoded as valid UTF-8.
+/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
+pub fn rename(old_path: []const u8, new_path: []const u8) RenameError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return renameat(wasi.AT.FDCWD, old_path, wasi.AT.FDCWD, new_path);
+ } else if (native_os == .windows) {
+ const old_path_w = try windows.sliceToPrefixedFileW(null, old_path);
+ const new_path_w = try windows.sliceToPrefixedFileW(null, new_path);
+ return renameW(old_path_w.span().ptr, new_path_w.span().ptr);
+ } else {
+ const old_path_c = try toPosixPath(old_path);
+ const new_path_c = try toPosixPath(new_path);
+ return renameZ(&old_path_c, &new_path_c);
+ }
+}
+
+/// Same as `rename` except the parameters are null-terminated.
+pub fn renameZ(old_path: [*:0]const u8, new_path: [*:0]const u8) RenameError!void {
+ if (native_os == .windows) {
+ const old_path_w = try windows.cStrToPrefixedFileW(null, old_path);
+ const new_path_w = try windows.cStrToPrefixedFileW(null, new_path);
+ return renameW(old_path_w.span().ptr, new_path_w.span().ptr);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return rename(mem.sliceTo(old_path, 0), mem.sliceTo(new_path, 0));
+ }
+ switch (errno(system.rename(old_path, new_path))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .BUSY => return error.FileBusy,
+ .DQUOT => return error.DiskQuota,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .EXIST => return error.PathAlreadyExists,
+ .NOTEMPTY => return error.PathAlreadyExists,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .XDEV => return error.RenameAcrossMountPoints,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Same as `rename` except the parameters are null-terminated and WTF16LE encoded.
+/// Assumes target is Windows.
+pub fn renameW(old_path: [*:0]const u16, new_path: [*:0]const u16) RenameError!void {
+ const flags = windows.MOVEFILE_REPLACE_EXISTING | windows.MOVEFILE_WRITE_THROUGH;
+ return windows.MoveFileExW(old_path, new_path, flags);
+}
+
+/// Change the name or location of a file based on an open directory handle.
+/// On Windows, both paths should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, both paths should be encoded as valid UTF-8.
+/// On other platforms, both paths are an opaque sequence of bytes with no particular encoding.
+pub fn renameat(
+ old_dir_fd: fd_t,
+ old_path: []const u8,
+ new_dir_fd: fd_t,
+ new_path: []const u8,
+) RenameError!void {
+ if (native_os == .windows) {
+ const old_path_w = try windows.sliceToPrefixedFileW(old_dir_fd, old_path);
+ const new_path_w = try windows.sliceToPrefixedFileW(new_dir_fd, new_path);
+ return renameatW(old_dir_fd, old_path_w.span(), new_dir_fd, new_path_w.span(), windows.TRUE);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ const old: RelativePathWasi = .{ .dir_fd = old_dir_fd, .relative_path = old_path };
+ const new: RelativePathWasi = .{ .dir_fd = new_dir_fd, .relative_path = new_path };
+ return renameatWasi(old, new);
+ } else {
+ const old_path_c = try toPosixPath(old_path);
+ const new_path_c = try toPosixPath(new_path);
+ return renameatZ(old_dir_fd, &old_path_c, new_dir_fd, &new_path_c);
+ }
+}
+
+/// WASI-only. Same as `renameat` expect targeting WASI.
+/// See also `renameat`.
+fn renameatWasi(old: RelativePathWasi, new: RelativePathWasi) RenameError!void {
+ switch (wasi.path_rename(old.dir_fd, old.relative_path.ptr, old.relative_path.len, new.dir_fd, new.relative_path.ptr, new.relative_path.len)) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .BUSY => return error.FileBusy,
+ .DQUOT => return error.DiskQuota,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .EXIST => return error.PathAlreadyExists,
+ .NOTEMPTY => return error.PathAlreadyExists,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .XDEV => return error.RenameAcrossMountPoints,
+ .NOTCAPABLE => return error.AccessDenied,
+ .ILSEQ => return error.InvalidUtf8,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// An fd-relative file path
+///
+/// This is currently only used for WASI-specific functionality, but the concept
+/// is the same as the dirfd/pathname pairs in the `*at(...)` POSIX functions.
+const RelativePathWasi = struct {
+ /// Handle to directory
+ dir_fd: fd_t,
+ /// Path to resource within `dir_fd`.
+ relative_path: []const u8,
+};
+
+/// Same as `renameat` except the parameters are null-terminated.
+pub fn renameatZ(
+ old_dir_fd: fd_t,
+ old_path: [*:0]const u8,
+ new_dir_fd: fd_t,
+ new_path: [*:0]const u8,
+) RenameError!void {
+ if (native_os == .windows) {
+ const old_path_w = try windows.cStrToPrefixedFileW(old_dir_fd, old_path);
+ const new_path_w = try windows.cStrToPrefixedFileW(new_dir_fd, new_path);
+ return renameatW(old_dir_fd, old_path_w.span(), new_dir_fd, new_path_w.span(), windows.TRUE);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return renameat(old_dir_fd, mem.sliceTo(old_path, 0), new_dir_fd, mem.sliceTo(new_path, 0));
+ }
+
+ switch (errno(system.renameat(old_dir_fd, old_path, new_dir_fd, new_path))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .BUSY => return error.FileBusy,
+ .DQUOT => return error.DiskQuota,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ISDIR => return error.IsDir,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .EXIST => return error.PathAlreadyExists,
+ .NOTEMPTY => return error.PathAlreadyExists,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .XDEV => return error.RenameAcrossMountPoints,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Same as `renameat` but Windows-only and the path parameters are
+/// [WTF-16](https://simonsapin.github.io/wtf-8/#potentially-ill-formed-utf-16) encoded.
+pub fn renameatW(
+ old_dir_fd: fd_t,
+ old_path_w: []const u16,
+ new_dir_fd: fd_t,
+ new_path_w: []const u16,
+ ReplaceIfExists: windows.BOOLEAN,
+) RenameError!void {
+ const src_fd = windows.OpenFile(old_path_w, .{
+ .dir = old_dir_fd,
+ .access_mask = windows.SYNCHRONIZE | windows.GENERIC_WRITE | windows.DELETE,
+ .creation = windows.FILE_OPEN,
+ .filter = .any, // This function is supposed to rename both files and directories.
+ .follow_symlinks = false,
+ }) catch |err| switch (err) {
+ error.WouldBlock => unreachable, // Not possible without `.share_access_nonblocking = true`.
+ else => |e| return e,
+ };
+ defer windows.CloseHandle(src_fd);
+
+ var need_fallback = true;
+ var rc: windows.NTSTATUS = undefined;
+ // FILE_RENAME_INFORMATION_EX and FILE_RENAME_POSIX_SEMANTICS require >= win10_rs1,
+ // but FILE_RENAME_IGNORE_READONLY_ATTRIBUTE requires >= win10_rs5. We check >= rs5 here
+ // so that we only use POSIX_SEMANTICS when we know IGNORE_READONLY_ATTRIBUTE will also be
+ // supported in order to avoid either (1) using a redundant call that we can know in advance will return
+ // STATUS_NOT_SUPPORTED or (2) only setting IGNORE_READONLY_ATTRIBUTE when >= rs5
+ // and therefore having different behavior when the Windows version is >= rs1 but < rs5.
+ if (builtin.target.os.isAtLeast(.windows, .win10_rs5) orelse false) {
+ const struct_buf_len = @sizeOf(windows.FILE_RENAME_INFORMATION_EX) + (max_path_bytes - 1);
+ var rename_info_buf: [struct_buf_len]u8 align(@alignOf(windows.FILE_RENAME_INFORMATION_EX)) = undefined;
+ const struct_len = @sizeOf(windows.FILE_RENAME_INFORMATION_EX) - 1 + new_path_w.len * 2;
+ if (struct_len > struct_buf_len) return error.NameTooLong;
+
+ const rename_info: *windows.FILE_RENAME_INFORMATION_EX = @ptrCast(&rename_info_buf);
+ var io_status_block: windows.IO_STATUS_BLOCK = undefined;
+
+ var flags: windows.ULONG = windows.FILE_RENAME_POSIX_SEMANTICS | windows.FILE_RENAME_IGNORE_READONLY_ATTRIBUTE;
+ if (ReplaceIfExists == windows.TRUE) flags |= windows.FILE_RENAME_REPLACE_IF_EXISTS;
+ rename_info.* = .{
+ .Flags = flags,
+ .RootDirectory = if (fs.path.isAbsoluteWindowsWTF16(new_path_w)) null else new_dir_fd,
+ .FileNameLength = @intCast(new_path_w.len * 2), // already checked error.NameTooLong
+ .FileName = undefined,
+ };
+ @memcpy((&rename_info.FileName).ptr, new_path_w);
+ rc = windows.ntdll.NtSetInformationFile(
+ src_fd,
+ &io_status_block,
+ rename_info,
+ @intCast(struct_len), // already checked for error.NameTooLong
+ .FileRenameInformationEx,
+ );
+ switch (rc) {
+ .SUCCESS => return,
+ // INVALID_PARAMETER here means that the filesystem does not support FileRenameInformationEx
+ .INVALID_PARAMETER => {},
+ .DIRECTORY_NOT_EMPTY => return error.PathAlreadyExists,
+ .FILE_IS_A_DIRECTORY => return error.IsDir,
+ .NOT_A_DIRECTORY => return error.NotDir,
+ // For all other statuses, fall down to the switch below to handle them.
+ else => need_fallback = false,
+ }
+ }
+
+ if (need_fallback) {
+ const struct_buf_len = @sizeOf(windows.FILE_RENAME_INFORMATION) + (max_path_bytes - 1);
+ var rename_info_buf: [struct_buf_len]u8 align(@alignOf(windows.FILE_RENAME_INFORMATION)) = undefined;
+ const struct_len = @sizeOf(windows.FILE_RENAME_INFORMATION) - 1 + new_path_w.len * 2;
+ if (struct_len > struct_buf_len) return error.NameTooLong;
+
+ const rename_info: *windows.FILE_RENAME_INFORMATION = @ptrCast(&rename_info_buf);
+ var io_status_block: windows.IO_STATUS_BLOCK = undefined;
+
+ rename_info.* = .{
+ .Flags = ReplaceIfExists,
+ .RootDirectory = if (fs.path.isAbsoluteWindowsWTF16(new_path_w)) null else new_dir_fd,
+ .FileNameLength = @intCast(new_path_w.len * 2), // already checked error.NameTooLong
+ .FileName = undefined,
+ };
+ @memcpy((&rename_info.FileName).ptr, new_path_w);
+
+ rc =
+ windows.ntdll.NtSetInformationFile(
+ src_fd,
+ &io_status_block,
+ rename_info,
+ @intCast(struct_len), // already checked for error.NameTooLong
+ .FileRenameInformation,
+ );
+ }
+
+ switch (rc) {
+ .SUCCESS => {},
+ .INVALID_HANDLE => unreachable,
+ .INVALID_PARAMETER => unreachable,
+ .OBJECT_PATH_SYNTAX_BAD => unreachable,
+ .ACCESS_DENIED => return error.AccessDenied,
+ .OBJECT_NAME_NOT_FOUND => return error.FileNotFound,
+ .OBJECT_PATH_NOT_FOUND => return error.FileNotFound,
+ .NOT_SAME_DEVICE => return error.RenameAcrossMountPoints,
+ .OBJECT_NAME_COLLISION => return error.PathAlreadyExists,
+ else => return windows.unexpectedStatus(rc),
+ }
+}
+
+/// On Windows, `sub_dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `sub_dir_path` should be encoded as valid UTF-8.
+/// On other platforms, `sub_dir_path` is an opaque sequence of bytes with no particular encoding.
+pub fn mkdirat(dir_fd: fd_t, sub_dir_path: []const u8, mode: u32) MakeDirError!void {
+ if (native_os == .windows) {
+ const sub_dir_path_w = try windows.sliceToPrefixedFileW(dir_fd, sub_dir_path);
+ return mkdiratW(dir_fd, sub_dir_path_w.span(), mode);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return mkdiratWasi(dir_fd, sub_dir_path, mode);
+ } else {
+ const sub_dir_path_c = try toPosixPath(sub_dir_path);
+ return mkdiratZ(dir_fd, &sub_dir_path_c, mode);
+ }
+}
+
+pub fn mkdiratWasi(dir_fd: fd_t, sub_dir_path: []const u8, mode: u32) MakeDirError!void {
+ _ = mode;
+ switch (wasi.path_create_directory(dir_fd, sub_dir_path.ptr, sub_dir_path.len)) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .BADF => unreachable,
+ .PERM => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .FAULT => unreachable,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .NOTDIR => return error.NotDir,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .NOTCAPABLE => return error.AccessDenied,
+ .ILSEQ => return error.InvalidUtf8,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Same as `mkdirat` except the parameters are null-terminated.
+pub fn mkdiratZ(dir_fd: fd_t, sub_dir_path: [*:0]const u8, mode: u32) MakeDirError!void {
+ if (native_os == .windows) {
+ const sub_dir_path_w = try windows.cStrToPrefixedFileW(dir_fd, sub_dir_path);
+ return mkdiratW(dir_fd, sub_dir_path_w.span(), mode);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return mkdirat(dir_fd, mem.sliceTo(sub_dir_path, 0), mode);
+ }
+ switch (errno(system.mkdirat(dir_fd, sub_dir_path, mode))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .BADF => unreachable,
+ .PERM => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .FAULT => unreachable,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .NOTDIR => return error.NotDir,
+ .ROFS => return error.ReadOnlyFileSystem,
+ // dragonfly: when dir_fd is unlinked from filesystem
+ .NOTCONN => return error.FileNotFound,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Windows-only. Same as `mkdirat` except the parameter WTF16 LE encoded.
+pub fn mkdiratW(dir_fd: fd_t, sub_path_w: []const u16, mode: u32) MakeDirError!void {
+ _ = mode;
+ const sub_dir_handle = windows.OpenFile(sub_path_w, .{
+ .dir = dir_fd,
+ .access_mask = windows.GENERIC_READ | windows.SYNCHRONIZE,
+ .creation = windows.FILE_CREATE,
+ .filter = .dir_only,
+ }) catch |err| switch (err) {
+ error.IsDir => return error.Unexpected,
+ error.PipeBusy => return error.Unexpected,
+ error.WouldBlock => return error.Unexpected,
+ error.AntivirusInterference => return error.Unexpected,
+ else => |e| return e,
+ };
+ windows.CloseHandle(sub_dir_handle);
+}
+
+pub const MakeDirError = error{
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to create a new directory relative to it.
+ AccessDenied,
+ DiskQuota,
+ PathAlreadyExists,
+ SymLinkLoop,
+ LinkQuotaExceeded,
+ NameTooLong,
+ FileNotFound,
+ SystemResources,
+ NoSpaceLeft,
+ NotDir,
+ ReadOnlyFileSystem,
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+ BadPathName,
+ NoDevice,
+ /// On Windows, `\\server` or `\\server\share` was not found.
+ NetworkNotFound,
+} || UnexpectedError;
+
+/// Create a directory.
+/// `mode` is ignored on Windows and WASI.
+/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `dir_path` should be encoded as valid UTF-8.
+/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
+pub fn mkdir(dir_path: []const u8, mode: u32) MakeDirError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return mkdirat(wasi.AT.FDCWD, dir_path, mode);
+ } else if (native_os == .windows) {
+ const dir_path_w = try windows.sliceToPrefixedFileW(null, dir_path);
+ return mkdirW(dir_path_w.span(), mode);
+ } else {
+ const dir_path_c = try toPosixPath(dir_path);
+ return mkdirZ(&dir_path_c, mode);
+ }
+}
+
+/// Same as `mkdir` but the parameter is null-terminated.
+/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `dir_path` should be encoded as valid UTF-8.
+/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
+pub fn mkdirZ(dir_path: [*:0]const u8, mode: u32) MakeDirError!void {
+ if (native_os == .windows) {
+ const dir_path_w = try windows.cStrToPrefixedFileW(null, dir_path);
+ return mkdirW(dir_path_w.span(), mode);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return mkdir(mem.sliceTo(dir_path, 0), mode);
+ }
+ switch (errno(system.mkdir(dir_path, mode))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .DQUOT => return error.DiskQuota,
+ .EXIST => return error.PathAlreadyExists,
+ .FAULT => unreachable,
+ .LOOP => return error.SymLinkLoop,
+ .MLINK => return error.LinkQuotaExceeded,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.NoSpaceLeft,
+ .NOTDIR => return error.NotDir,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Windows-only. Same as `mkdir` but the parameters is WTF16LE encoded.
+pub fn mkdirW(dir_path_w: []const u16, mode: u32) MakeDirError!void {
+ _ = mode;
+ const sub_dir_handle = windows.OpenFile(dir_path_w, .{
+ .dir = fs.cwd().fd,
+ .access_mask = windows.GENERIC_READ | windows.SYNCHRONIZE,
+ .creation = windows.FILE_CREATE,
+ .filter = .dir_only,
+ }) catch |err| switch (err) {
+ error.IsDir => return error.Unexpected,
+ error.PipeBusy => return error.Unexpected,
+ error.WouldBlock => return error.Unexpected,
+ error.AntivirusInterference => return error.Unexpected,
+ else => |e| return e,
+ };
+ windows.CloseHandle(sub_dir_handle);
+}
+
+pub const DeleteDirError = error{
+ AccessDenied,
+ FileBusy,
+ SymLinkLoop,
+ NameTooLong,
+ FileNotFound,
+ SystemResources,
+ NotDir,
+ DirNotEmpty,
+ ReadOnlyFileSystem,
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+ BadPathName,
+ /// On Windows, `\\server` or `\\server\share` was not found.
+ NetworkNotFound,
+} || UnexpectedError;
+
+/// Deletes an empty directory.
+/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `dir_path` should be encoded as valid UTF-8.
+/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
+pub fn rmdir(dir_path: []const u8) DeleteDirError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return unlinkat(wasi.AT.FDCWD, dir_path, AT.REMOVEDIR) catch |err| switch (err) {
+ error.FileSystem => unreachable, // only occurs when targeting files
+ error.IsDir => unreachable, // only occurs when targeting files
+ else => |e| return e,
+ };
+ } else if (native_os == .windows) {
+ const dir_path_w = try windows.sliceToPrefixedFileW(null, dir_path);
+ return rmdirW(dir_path_w.span());
+ } else {
+ const dir_path_c = try toPosixPath(dir_path);
+ return rmdirZ(&dir_path_c);
+ }
+}
+
+/// Same as `rmdir` except the parameter is null-terminated.
+/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `dir_path` should be encoded as valid UTF-8.
+/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
+pub fn rmdirZ(dir_path: [*:0]const u8) DeleteDirError!void {
+ if (native_os == .windows) {
+ const dir_path_w = try windows.cStrToPrefixedFileW(null, dir_path);
+ return rmdirW(dir_path_w.span());
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return rmdir(mem.sliceTo(dir_path, 0));
+ }
+ switch (errno(system.rmdir(dir_path))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .BUSY => return error.FileBusy,
+ .FAULT => unreachable,
+ .INVAL => return error.BadPathName,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.NotDir,
+ .EXIST => return error.DirNotEmpty,
+ .NOTEMPTY => return error.DirNotEmpty,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Windows-only. Same as `rmdir` except the parameter is WTF-16 LE encoded.
+pub fn rmdirW(dir_path_w: []const u16) DeleteDirError!void {
+ return windows.DeleteFile(dir_path_w, .{ .dir = fs.cwd().fd, .remove_dir = true }) catch |err| switch (err) {
+ error.IsDir => unreachable,
+ else => |e| return e,
+ };
+}
+
+pub const ChangeCurDirError = error{
+ AccessDenied,
+ FileSystem,
+ SymLinkLoop,
+ NameTooLong,
+ FileNotFound,
+ SystemResources,
+ NotDir,
+ BadPathName,
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+} || UnexpectedError;
+
+/// Changes the current working directory of the calling process.
+/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `dir_path` should be encoded as valid UTF-8.
+/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
+pub fn chdir(dir_path: []const u8) ChangeCurDirError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ @compileError("WASI does not support os.chdir");
+ } else if (native_os == .windows) {
+ var wtf16_dir_path: [windows.PATH_MAX_WIDE]u16 = undefined;
+ const len = try std.unicode.wtf8ToWtf16Le(wtf16_dir_path[0..], dir_path);
+ if (len > wtf16_dir_path.len) return error.NameTooLong;
+ return chdirW(wtf16_dir_path[0..len]);
+ } else {
+ const dir_path_c = try toPosixPath(dir_path);
+ return chdirZ(&dir_path_c);
+ }
+}
+
+/// Same as `chdir` except the parameter is null-terminated.
+/// On Windows, `dir_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `dir_path` should be encoded as valid UTF-8.
+/// On other platforms, `dir_path` is an opaque sequence of bytes with no particular encoding.
+pub fn chdirZ(dir_path: [*:0]const u8) ChangeCurDirError!void {
+ if (native_os == .windows) {
+ var wtf16_dir_path: [windows.PATH_MAX_WIDE]u16 = undefined;
+ const len = try std.unicode.wtf8ToWtf16Le(wtf16_dir_path[0..], mem.span(dir_path));
+ if (len > wtf16_dir_path.len) return error.NameTooLong;
+ return chdirW(wtf16_dir_path[0..len]);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return chdir(mem.span(dir_path));
+ }
+ switch (errno(system.chdir(dir_path))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .FAULT => unreachable,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.NotDir,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Windows-only. Same as `chdir` except the parameter is WTF16 LE encoded.
+pub fn chdirW(dir_path: []const u16) ChangeCurDirError!void {
+ windows.SetCurrentDirectory(dir_path) catch |err| switch (err) {
+ error.NoDevice => return error.FileSystem,
+ else => |e| return e,
+ };
+}
+
+pub const FchdirError = error{
+ AccessDenied,
+ NotDir,
+ FileSystem,
+} || UnexpectedError;
+
+pub fn fchdir(dirfd: fd_t) FchdirError!void {
+ if (dirfd == AT.FDCWD) return;
+ while (true) {
+ switch (errno(system.fchdir(dirfd))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .BADF => unreachable,
+ .NOTDIR => return error.NotDir,
+ .INTR => continue,
+ .IO => return error.FileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const ReadLinkError = error{
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to read value of a symbolic link relative to it.
+ AccessDenied,
+ FileSystem,
+ SymLinkLoop,
+ NameTooLong,
+ FileNotFound,
+ SystemResources,
+ NotLink,
+ NotDir,
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+ BadPathName,
+ /// Windows-only. This error may occur if the opened reparse point is
+ /// of unsupported type.
+ UnsupportedReparsePointType,
+ /// On Windows, `\\server` or `\\server\share` was not found.
+ NetworkNotFound,
+} || UnexpectedError;
+
+/// Read value of a symbolic link.
+/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `file_path` should be encoded as valid UTF-8.
+/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
+/// The return value is a slice of `out_buffer` from index 0.
+/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, the result is encoded as UTF-8.
+/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
+pub fn readlink(file_path: []const u8, out_buffer: []u8) ReadLinkError![]u8 {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return readlinkat(wasi.AT.FDCWD, file_path, out_buffer);
+ } else if (native_os == .windows) {
+ const file_path_w = try windows.sliceToPrefixedFileW(null, file_path);
+ return readlinkW(file_path_w.span(), out_buffer);
+ } else {
+ const file_path_c = try toPosixPath(file_path);
+ return readlinkZ(&file_path_c, out_buffer);
+ }
+}
+
+/// Windows-only. Same as `readlink` except `file_path` is WTF16 LE encoded.
+/// The result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// See also `readlinkZ`.
+pub fn readlinkW(file_path: []const u16, out_buffer: []u8) ReadLinkError![]u8 {
+ return windows.ReadLink(fs.cwd().fd, file_path, out_buffer);
+}
+
+/// Same as `readlink` except `file_path` is null-terminated.
+pub fn readlinkZ(file_path: [*:0]const u8, out_buffer: []u8) ReadLinkError![]u8 {
+ if (native_os == .windows) {
+ const file_path_w = try windows.cStrToPrefixedFileW(null, file_path);
+ return readlinkW(file_path_w.span(), out_buffer);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return readlink(mem.sliceTo(file_path, 0), out_buffer);
+ }
+ const rc = system.readlink(file_path, out_buffer.ptr, out_buffer.len);
+ switch (errno(rc)) {
+ .SUCCESS => return out_buffer[0..@bitCast(rc)],
+ .ACCES => return error.AccessDenied,
+ .FAULT => unreachable,
+ .INVAL => return error.NotLink,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.NotDir,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Similar to `readlink` except reads value of a symbolink link **relative** to `dirfd` directory handle.
+/// On Windows, `file_path` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, `file_path` should be encoded as valid UTF-8.
+/// On other platforms, `file_path` is an opaque sequence of bytes with no particular encoding.
+/// The return value is a slice of `out_buffer` from index 0.
+/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// On WASI, the result is encoded as UTF-8.
+/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
+/// See also `readlinkatWasi`, `realinkatZ` and `realinkatW`.
+pub fn readlinkat(dirfd: fd_t, file_path: []const u8, out_buffer: []u8) ReadLinkError![]u8 {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return readlinkatWasi(dirfd, file_path, out_buffer);
+ }
+ if (native_os == .windows) {
+ const file_path_w = try windows.sliceToPrefixedFileW(dirfd, file_path);
+ return readlinkatW(dirfd, file_path_w.span(), out_buffer);
+ }
+ const file_path_c = try toPosixPath(file_path);
+ return readlinkatZ(dirfd, &file_path_c, out_buffer);
+}
+
+/// WASI-only. Same as `readlinkat` but targets WASI.
+/// See also `readlinkat`.
+pub fn readlinkatWasi(dirfd: fd_t, file_path: []const u8, out_buffer: []u8) ReadLinkError![]u8 {
+ var bufused: usize = undefined;
+ switch (wasi.path_readlink(dirfd, file_path.ptr, file_path.len, out_buffer.ptr, out_buffer.len, &bufused)) {
+ .SUCCESS => return out_buffer[0..bufused],
+ .ACCES => return error.AccessDenied,
+ .FAULT => unreachable,
+ .INVAL => return error.NotLink,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.NotDir,
+ .NOTCAPABLE => return error.AccessDenied,
+ .ILSEQ => return error.InvalidUtf8,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Windows-only. Same as `readlinkat` except `file_path` is null-terminated, WTF16 LE encoded.
+/// The result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// See also `readlinkat`.
+pub fn readlinkatW(dirfd: fd_t, file_path: []const u16, out_buffer: []u8) ReadLinkError![]u8 {
+ return windows.ReadLink(dirfd, file_path, out_buffer);
+}
+
+/// Same as `readlinkat` except `file_path` is null-terminated.
+/// See also `readlinkat`.
+pub fn readlinkatZ(dirfd: fd_t, file_path: [*:0]const u8, out_buffer: []u8) ReadLinkError![]u8 {
+ if (native_os == .windows) {
+ const file_path_w = try windows.cStrToPrefixedFileW(dirfd, file_path);
+ return readlinkatW(dirfd, file_path_w.span(), out_buffer);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return readlinkat(dirfd, mem.sliceTo(file_path, 0), out_buffer);
+ }
+ const rc = system.readlinkat(dirfd, file_path, out_buffer.ptr, out_buffer.len);
+ switch (errno(rc)) {
+ .SUCCESS => return out_buffer[0..@bitCast(rc)],
+ .ACCES => return error.AccessDenied,
+ .FAULT => unreachable,
+ .INVAL => return error.NotLink,
+ .IO => return error.FileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.NotDir,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const SetEidError = error{
+ InvalidUserId,
+ PermissionDenied,
+} || UnexpectedError;
+
+pub const SetIdError = error{ResourceLimitReached} || SetEidError;
+
+pub fn setuid(uid: uid_t) SetIdError!void {
+ switch (errno(system.setuid(uid))) {
+ .SUCCESS => return,
+ .AGAIN => return error.ResourceLimitReached,
+ .INVAL => return error.InvalidUserId,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn seteuid(uid: uid_t) SetEidError!void {
+ switch (errno(system.seteuid(uid))) {
+ .SUCCESS => return,
+ .INVAL => return error.InvalidUserId,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn setreuid(ruid: uid_t, euid: uid_t) SetIdError!void {
+ switch (errno(system.setreuid(ruid, euid))) {
+ .SUCCESS => return,
+ .AGAIN => return error.ResourceLimitReached,
+ .INVAL => return error.InvalidUserId,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn setgid(gid: gid_t) SetIdError!void {
+ switch (errno(system.setgid(gid))) {
+ .SUCCESS => return,
+ .AGAIN => return error.ResourceLimitReached,
+ .INVAL => return error.InvalidUserId,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn setegid(uid: uid_t) SetEidError!void {
+ switch (errno(system.setegid(uid))) {
+ .SUCCESS => return,
+ .INVAL => return error.InvalidUserId,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn setregid(rgid: gid_t, egid: gid_t) SetIdError!void {
+ switch (errno(system.setregid(rgid, egid))) {
+ .SUCCESS => return,
+ .AGAIN => return error.ResourceLimitReached,
+ .INVAL => return error.InvalidUserId,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Test whether a file descriptor refers to a terminal.
+pub fn isatty(handle: fd_t) bool {
+ if (native_os == .windows) {
+ if (fs.File.isCygwinPty(.{ .handle = handle }))
+ return true;
+
+ var out: windows.DWORD = undefined;
+ return windows.kernel32.GetConsoleMode(handle, &out) != 0;
+ }
+ if (builtin.link_libc) {
+ return system.isatty(handle) != 0;
+ }
+ if (native_os == .wasi) {
+ var statbuf: wasi.fdstat_t = undefined;
+ const err = wasi.fd_fdstat_get(handle, &statbuf);
+ if (err != .SUCCESS)
+ return false;
+
+ // A tty is a character device that we can't seek or tell on.
+ if (statbuf.fs_filetype != .CHARACTER_DEVICE)
+ return false;
+ if (statbuf.fs_rights_base.FD_SEEK or statbuf.fs_rights_base.FD_TELL)
+ return false;
+
+ return true;
+ }
+ if (native_os == .linux) {
+ while (true) {
+ var wsz: linux.winsize = undefined;
+ const fd: usize = @bitCast(@as(isize, handle));
+ const rc = linux.syscall3(.ioctl, fd, linux.T.IOCGWINSZ, @intFromPtr(&wsz));
+ switch (linux.E.init(rc)) {
+ .SUCCESS => return true,
+ .INTR => continue,
+ else => return false,
+ }
+ }
+ }
+ return system.isatty(handle) != 0;
+}
+
+pub const SocketError = error{
+ /// Permission to create a socket of the specified type and/or
+ /// pro‐tocol is denied.
+ PermissionDenied,
+
+ /// The implementation does not support the specified address family.
+ AddressFamilyNotSupported,
+
+ /// Unknown protocol, or protocol family not available.
+ ProtocolFamilyNotAvailable,
+
+ /// The per-process limit on the number of open file descriptors has been reached.
+ ProcessFdQuotaExceeded,
+
+ /// The system-wide limit on the total number of open files has been reached.
+ SystemFdQuotaExceeded,
+
+ /// Insufficient memory is available. The socket cannot be created until sufficient
+ /// resources are freed.
+ SystemResources,
+
+ /// The protocol type or the specified protocol is not supported within this domain.
+ ProtocolNotSupported,
+
+ /// The socket type is not supported by the protocol.
+ SocketTypeNotSupported,
+} || UnexpectedError;
+
+pub fn socket(domain: u32, socket_type: u32, protocol: u32) SocketError!socket_t {
+ if (native_os == .windows) {
+ // NOTE: windows translates the SOCK.NONBLOCK/SOCK.CLOEXEC flags into
+ // windows-analagous operations
+ const filtered_sock_type = socket_type & ~@as(u32, SOCK.NONBLOCK | SOCK.CLOEXEC);
+ const flags: u32 = if ((socket_type & SOCK.CLOEXEC) != 0)
+ windows.ws2_32.WSA_FLAG_NO_HANDLE_INHERIT
+ else
+ 0;
+ const rc = try windows.WSASocketW(
+ @bitCast(domain),
+ @bitCast(filtered_sock_type),
+ @bitCast(protocol),
+ null,
+ 0,
+ flags,
+ );
+ errdefer windows.closesocket(rc) catch unreachable;
+ if ((socket_type & SOCK.NONBLOCK) != 0) {
+ var mode: c_ulong = 1; // nonblocking
+ if (windows.ws2_32.SOCKET_ERROR == windows.ws2_32.ioctlsocket(rc, windows.ws2_32.FIONBIO, &mode)) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ // have not identified any error codes that should be handled yet
+ else => unreachable,
+ }
+ }
+ }
+ return rc;
+ }
+
+ const have_sock_flags = !builtin.target.isDarwin();
+ const filtered_sock_type = if (!have_sock_flags)
+ socket_type & ~@as(u32, SOCK.NONBLOCK | SOCK.CLOEXEC)
+ else
+ socket_type;
+ const rc = system.socket(domain, filtered_sock_type, protocol);
+ switch (errno(rc)) {
+ .SUCCESS => {
+ const fd: fd_t = @intCast(rc);
+ errdefer close(fd);
+ if (!have_sock_flags) {
+ try setSockFlags(fd, socket_type);
+ }
+ return fd;
+ },
+ .ACCES => return error.PermissionDenied,
+ .AFNOSUPPORT => return error.AddressFamilyNotSupported,
+ .INVAL => return error.ProtocolFamilyNotAvailable,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .PROTONOSUPPORT => return error.ProtocolNotSupported,
+ .PROTOTYPE => return error.SocketTypeNotSupported,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const ShutdownError = error{
+ ConnectionAborted,
+
+ /// Connection was reset by peer, application should close socket as it is no longer usable.
+ ConnectionResetByPeer,
+ BlockingOperationInProgress,
+
+ /// The network subsystem has failed.
+ NetworkSubsystemFailed,
+
+ /// The socket is not connected (connection-oriented sockets only).
+ SocketNotConnected,
+ SystemResources,
+} || UnexpectedError;
+
+pub const ShutdownHow = enum { recv, send, both };
+
+/// Shutdown socket send/receive operations
+pub fn shutdown(sock: socket_t, how: ShutdownHow) ShutdownError!void {
+ if (native_os == .windows) {
+ const result = windows.ws2_32.shutdown(sock, switch (how) {
+ .recv => windows.ws2_32.SD_RECEIVE,
+ .send => windows.ws2_32.SD_SEND,
+ .both => windows.ws2_32.SD_BOTH,
+ });
+ if (0 != result) switch (windows.ws2_32.WSAGetLastError()) {
+ .WSAECONNABORTED => return error.ConnectionAborted,
+ .WSAECONNRESET => return error.ConnectionResetByPeer,
+ .WSAEINPROGRESS => return error.BlockingOperationInProgress,
+ .WSAEINVAL => unreachable,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAENOTCONN => return error.SocketNotConnected,
+ .WSAENOTSOCK => unreachable,
+ .WSANOTINITIALISED => unreachable,
+ else => |err| return windows.unexpectedWSAError(err),
+ };
+ } else {
+ const rc = system.shutdown(sock, switch (how) {
+ .recv => SHUT.RD,
+ .send => SHUT.WR,
+ .both => SHUT.RDWR,
+ });
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ .BADF => unreachable,
+ .INVAL => unreachable,
+ .NOTCONN => return error.SocketNotConnected,
+ .NOTSOCK => unreachable,
+ .NOBUFS => return error.SystemResources,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const BindError = error{
+ /// The address is protected, and the user is not the superuser.
+ /// For UNIX domain sockets: Search permission is denied on a component
+ /// of the path prefix.
+ AccessDenied,
+
+ /// The given address is already in use, or in the case of Internet domain sockets,
+ /// The port number was specified as zero in the socket
+ /// address structure, but, upon attempting to bind to an ephemeral port, it was
+ /// determined that all port numbers in the ephemeral port range are currently in
+ /// use. See the discussion of /proc/sys/net/ipv4/ip_local_port_range ip(7).
+ AddressInUse,
+
+ /// A nonexistent interface was requested or the requested address was not local.
+ AddressNotAvailable,
+
+ /// The address is not valid for the address family of socket.
+ AddressFamilyNotSupported,
+
+ /// Too many symbolic links were encountered in resolving addr.
+ SymLinkLoop,
+
+ /// addr is too long.
+ NameTooLong,
+
+ /// A component in the directory prefix of the socket pathname does not exist.
+ FileNotFound,
+
+ /// Insufficient kernel memory was available.
+ SystemResources,
+
+ /// A component of the path prefix is not a directory.
+ NotDir,
+
+ /// The socket inode would reside on a read-only filesystem.
+ ReadOnlyFileSystem,
+
+ /// The network subsystem has failed.
+ NetworkSubsystemFailed,
+
+ FileDescriptorNotASocket,
+
+ AlreadyBound,
+} || UnexpectedError;
+
+/// addr is `*const T` where T is one of the sockaddr
+pub fn bind(sock: socket_t, addr: *const sockaddr, len: socklen_t) BindError!void {
+ if (native_os == .windows) {
+ const rc = windows.bind(sock, addr, len);
+ if (rc == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable, // not initialized WSA
+ .WSAEACCES => return error.AccessDenied,
+ .WSAEADDRINUSE => return error.AddressInUse,
+ .WSAEADDRNOTAVAIL => return error.AddressNotAvailable,
+ .WSAENOTSOCK => return error.FileDescriptorNotASocket,
+ .WSAEFAULT => unreachable, // invalid pointers
+ .WSAEINVAL => return error.AlreadyBound,
+ .WSAENOBUFS => return error.SystemResources,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ unreachable;
+ }
+ return;
+ } else {
+ const rc = system.bind(sock, addr, len);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ .ACCES, .PERM => return error.AccessDenied,
+ .ADDRINUSE => return error.AddressInUse,
+ .BADF => unreachable, // always a race condition if this error is returned
+ .INVAL => unreachable, // invalid parameters
+ .NOTSOCK => unreachable, // invalid `sockfd`
+ .AFNOSUPPORT => return error.AddressFamilyNotSupported,
+ .ADDRNOTAVAIL => return error.AddressNotAvailable,
+ .FAULT => unreachable, // invalid `addr` pointer
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOTDIR => return error.NotDir,
+ .ROFS => return error.ReadOnlyFileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ unreachable;
+}
+
+pub const ListenError = error{
+ /// Another socket is already listening on the same port.
+ /// For Internet domain sockets, the socket referred to by sockfd had not previously
+ /// been bound to an address and, upon attempting to bind it to an ephemeral port, it
+ /// was determined that all port numbers in the ephemeral port range are currently in
+ /// use. See the discussion of /proc/sys/net/ipv4/ip_local_port_range in ip(7).
+ AddressInUse,
+
+ /// The file descriptor sockfd does not refer to a socket.
+ FileDescriptorNotASocket,
+
+ /// The socket is not of a type that supports the listen() operation.
+ OperationNotSupported,
+
+ /// The network subsystem has failed.
+ NetworkSubsystemFailed,
+
+ /// Ran out of system resources
+ /// On Windows it can either run out of socket descriptors or buffer space
+ SystemResources,
+
+ /// Already connected
+ AlreadyConnected,
+
+ /// Socket has not been bound yet
+ SocketNotBound,
+} || UnexpectedError;
+
+pub fn listen(sock: socket_t, backlog: u31) ListenError!void {
+ if (native_os == .windows) {
+ const rc = windows.listen(sock, backlog);
+ if (rc == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable, // not initialized WSA
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAEADDRINUSE => return error.AddressInUse,
+ .WSAEISCONN => return error.AlreadyConnected,
+ .WSAEINVAL => return error.SocketNotBound,
+ .WSAEMFILE, .WSAENOBUFS => return error.SystemResources,
+ .WSAENOTSOCK => return error.FileDescriptorNotASocket,
+ .WSAEOPNOTSUPP => return error.OperationNotSupported,
+ .WSAEINPROGRESS => unreachable,
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ }
+ return;
+ } else {
+ const rc = system.listen(sock, backlog);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ .ADDRINUSE => return error.AddressInUse,
+ .BADF => unreachable,
+ .NOTSOCK => return error.FileDescriptorNotASocket,
+ .OPNOTSUPP => return error.OperationNotSupported,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const AcceptError = error{
+ ConnectionAborted,
+
+ /// The file descriptor sockfd does not refer to a socket.
+ FileDescriptorNotASocket,
+
+ /// The per-process limit on the number of open file descriptors has been reached.
+ ProcessFdQuotaExceeded,
+
+ /// The system-wide limit on the total number of open files has been reached.
+ SystemFdQuotaExceeded,
+
+ /// Not enough free memory. This often means that the memory allocation is limited
+ /// by the socket buffer limits, not by the system memory.
+ SystemResources,
+
+ /// Socket is not listening for new connections.
+ SocketNotListening,
+
+ ProtocolFailure,
+
+ /// Firewall rules forbid connection.
+ BlockedByFirewall,
+
+ /// This error occurs when no global event loop is configured,
+ /// and accepting from the socket would block.
+ WouldBlock,
+
+ /// An incoming connection was indicated, but was subsequently terminated by the
+ /// remote peer prior to accepting the call.
+ ConnectionResetByPeer,
+
+ /// The network subsystem has failed.
+ NetworkSubsystemFailed,
+
+ /// The referenced socket is not a type that supports connection-oriented service.
+ OperationNotSupported,
+} || UnexpectedError;
+
+/// Accept a connection on a socket.
+/// If `sockfd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+pub fn accept(
+ /// This argument is a socket that has been created with `socket`, bound to a local address
+ /// with `bind`, and is listening for connections after a `listen`.
+ sock: socket_t,
+ /// This argument is a pointer to a sockaddr structure. This structure is filled in with the
+ /// address of the peer socket, as known to the communications layer. The exact format of the
+ /// address returned addr is determined by the socket's address family (see `socket` and the
+ /// respective protocol man pages).
+ addr: ?*sockaddr,
+ /// This argument is a value-result argument: the caller must initialize it to contain the
+ /// size (in bytes) of the structure pointed to by addr; on return it will contain the actual size
+ /// of the peer address.
+ ///
+ /// The returned address is truncated if the buffer provided is too small; in this case, `addr_size`
+ /// will return a value greater than was supplied to the call.
+ addr_size: ?*socklen_t,
+ /// The following values can be bitwise ORed in flags to obtain different behavior:
+ /// * `SOCK.NONBLOCK` - Set the `NONBLOCK` file status flag on the open file description (see `open`)
+ /// referred to by the new file descriptor. Using this flag saves extra calls to `fcntl` to achieve
+ /// the same result.
+ /// * `SOCK.CLOEXEC` - Set the close-on-exec (`FD_CLOEXEC`) flag on the new file descriptor. See the
+ /// description of the `CLOEXEC` flag in `open` for reasons why this may be useful.
+ flags: u32,
+) AcceptError!socket_t {
+ const have_accept4 = !(builtin.target.isDarwin() or native_os == .windows);
+ assert(0 == (flags & ~@as(u32, SOCK.NONBLOCK | SOCK.CLOEXEC))); // Unsupported flag(s)
+
+ const accepted_sock: socket_t = while (true) {
+ const rc = if (have_accept4)
+ system.accept4(sock, addr, addr_size, flags)
+ else if (native_os == .windows)
+ windows.accept(sock, addr, addr_size)
+ else
+ system.accept(sock, addr, addr_size);
+
+ if (native_os == .windows) {
+ if (rc == windows.ws2_32.INVALID_SOCKET) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable, // not initialized WSA
+ .WSAECONNRESET => return error.ConnectionResetByPeer,
+ .WSAEFAULT => unreachable,
+ .WSAEINVAL => return error.SocketNotListening,
+ .WSAEMFILE => return error.ProcessFdQuotaExceeded,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAENOBUFS => return error.FileDescriptorNotASocket,
+ .WSAEOPNOTSUPP => return error.OperationNotSupported,
+ .WSAEWOULDBLOCK => return error.WouldBlock,
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ } else {
+ break rc;
+ }
+ } else {
+ switch (errno(rc)) {
+ .SUCCESS => break @intCast(rc),
+ .INTR => continue,
+ .AGAIN => return error.WouldBlock,
+ .BADF => unreachable, // always a race condition
+ .CONNABORTED => return error.ConnectionAborted,
+ .FAULT => unreachable,
+ .INVAL => return error.SocketNotListening,
+ .NOTSOCK => unreachable,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .OPNOTSUPP => unreachable,
+ .PROTO => return error.ProtocolFailure,
+ .PERM => return error.BlockedByFirewall,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ };
+
+ errdefer switch (native_os) {
+ .windows => windows.closesocket(accepted_sock) catch unreachable,
+ else => close(accepted_sock),
+ };
+ if (!have_accept4) {
+ try setSockFlags(accepted_sock, flags);
+ }
+ return accepted_sock;
+}
+
+fn setSockFlags(sock: socket_t, flags: u32) !void {
+ if ((flags & SOCK.CLOEXEC) != 0) {
+ if (native_os == .windows) {
+ // TODO: Find out if this is supported for sockets
+ } else {
+ var fd_flags = fcntl(sock, F.GETFD, 0) catch |err| switch (err) {
+ error.FileBusy => unreachable,
+ error.Locked => unreachable,
+ error.PermissionDenied => unreachable,
+ error.DeadLock => unreachable,
+ error.LockedRegionLimitExceeded => unreachable,
+ else => |e| return e,
+ };
+ fd_flags |= FD_CLOEXEC;
+ _ = fcntl(sock, F.SETFD, fd_flags) catch |err| switch (err) {
+ error.FileBusy => unreachable,
+ error.Locked => unreachable,
+ error.PermissionDenied => unreachable,
+ error.DeadLock => unreachable,
+ error.LockedRegionLimitExceeded => unreachable,
+ else => |e| return e,
+ };
+ }
+ }
+ if ((flags & SOCK.NONBLOCK) != 0) {
+ if (native_os == .windows) {
+ var mode: c_ulong = 1;
+ if (windows.ws2_32.ioctlsocket(sock, windows.ws2_32.FIONBIO, &mode) == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAENOTSOCK => return error.FileDescriptorNotASocket,
+ // TODO: handle more errors
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ }
+ } else {
+ var fl_flags = fcntl(sock, F.GETFL, 0) catch |err| switch (err) {
+ error.FileBusy => unreachable,
+ error.Locked => unreachable,
+ error.PermissionDenied => unreachable,
+ error.DeadLock => unreachable,
+ error.LockedRegionLimitExceeded => unreachable,
+ else => |e| return e,
+ };
+ fl_flags |= 1 << @bitOffsetOf(O, "NONBLOCK");
+ _ = fcntl(sock, F.SETFL, fl_flags) catch |err| switch (err) {
+ error.FileBusy => unreachable,
+ error.Locked => unreachable,
+ error.PermissionDenied => unreachable,
+ error.DeadLock => unreachable,
+ error.LockedRegionLimitExceeded => unreachable,
+ else => |e| return e,
+ };
+ }
+ }
+}
+
+pub const EpollCreateError = error{
+ /// The per-user limit on the number of epoll instances imposed by
+ /// /proc/sys/fs/epoll/max_user_instances was encountered. See epoll(7) for further
+ /// details.
+ /// Or, The per-process limit on the number of open file descriptors has been reached.
+ ProcessFdQuotaExceeded,
+
+ /// The system-wide limit on the total number of open files has been reached.
+ SystemFdQuotaExceeded,
+
+ /// There was insufficient memory to create the kernel object.
+ SystemResources,
+} || UnexpectedError;
+
+pub fn epoll_create1(flags: u32) EpollCreateError!i32 {
+ const rc = system.epoll_create1(flags);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ else => |err| return unexpectedErrno(err),
+
+ .INVAL => unreachable,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOMEM => return error.SystemResources,
+ }
+}
+
+pub const EpollCtlError = error{
+ /// op was EPOLL_CTL_ADD, and the supplied file descriptor fd is already registered
+ /// with this epoll instance.
+ FileDescriptorAlreadyPresentInSet,
+
+ /// fd refers to an epoll instance and this EPOLL_CTL_ADD operation would result in a
+ /// circular loop of epoll instances monitoring one another.
+ OperationCausesCircularLoop,
+
+ /// op was EPOLL_CTL_MOD or EPOLL_CTL_DEL, and fd is not registered with this epoll
+ /// instance.
+ FileDescriptorNotRegistered,
+
+ /// There was insufficient memory to handle the requested op control operation.
+ SystemResources,
+
+ /// The limit imposed by /proc/sys/fs/epoll/max_user_watches was encountered while
+ /// trying to register (EPOLL_CTL_ADD) a new file descriptor on an epoll instance.
+ /// See epoll(7) for further details.
+ UserResourceLimitReached,
+
+ /// The target file fd does not support epoll. This error can occur if fd refers to,
+ /// for example, a regular file or a directory.
+ FileDescriptorIncompatibleWithEpoll,
+} || UnexpectedError;
+
+pub fn epoll_ctl(epfd: i32, op: u32, fd: i32, event: ?*linux.epoll_event) EpollCtlError!void {
+ const rc = system.epoll_ctl(epfd, op, fd, event);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ else => |err| return unexpectedErrno(err),
+
+ .BADF => unreachable, // always a race condition if this happens
+ .EXIST => return error.FileDescriptorAlreadyPresentInSet,
+ .INVAL => unreachable,
+ .LOOP => return error.OperationCausesCircularLoop,
+ .NOENT => return error.FileDescriptorNotRegistered,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.UserResourceLimitReached,
+ .PERM => return error.FileDescriptorIncompatibleWithEpoll,
+ }
+}
+
+/// Waits for an I/O event on an epoll file descriptor.
+/// Returns the number of file descriptors ready for the requested I/O,
+/// or zero if no file descriptor became ready during the requested timeout milliseconds.
+pub fn epoll_wait(epfd: i32, events: []linux.epoll_event, timeout: i32) usize {
+ while (true) {
+ // TODO get rid of the @intCast
+ const rc = system.epoll_wait(epfd, events.ptr, @intCast(events.len), timeout);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .BADF => unreachable,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ else => unreachable,
+ }
+ }
+}
+
+pub const EventFdError = error{
+ SystemResources,
+ ProcessFdQuotaExceeded,
+ SystemFdQuotaExceeded,
+} || UnexpectedError;
+
+pub fn eventfd(initval: u32, flags: u32) EventFdError!i32 {
+ const rc = system.eventfd(initval, flags);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ else => |err| return unexpectedErrno(err),
+
+ .INVAL => unreachable, // invalid parameters
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NODEV => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ }
+}
+
+pub const GetSockNameError = error{
+ /// Insufficient resources were available in the system to perform the operation.
+ SystemResources,
+
+ /// The network subsystem has failed.
+ NetworkSubsystemFailed,
+
+ /// Socket hasn't been bound yet
+ SocketNotBound,
+
+ FileDescriptorNotASocket,
+} || UnexpectedError;
+
+pub fn getsockname(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
+ if (native_os == .windows) {
+ const rc = windows.getsockname(sock, addr, addrlen);
+ if (rc == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAEFAULT => unreachable, // addr or addrlen have invalid pointers or addrlen points to an incorrect value
+ .WSAENOTSOCK => return error.FileDescriptorNotASocket,
+ .WSAEINVAL => return error.SocketNotBound,
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ }
+ return;
+ } else {
+ const rc = system.getsockname(sock, addr, addrlen);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ else => |err| return unexpectedErrno(err),
+
+ .BADF => unreachable, // always a race condition
+ .FAULT => unreachable,
+ .INVAL => unreachable, // invalid parameters
+ .NOTSOCK => return error.FileDescriptorNotASocket,
+ .NOBUFS => return error.SystemResources,
+ }
+ }
+}
+
+pub fn getpeername(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
+ if (native_os == .windows) {
+ const rc = windows.getpeername(sock, addr, addrlen);
+ if (rc == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAEFAULT => unreachable, // addr or addrlen have invalid pointers or addrlen points to an incorrect value
+ .WSAENOTSOCK => return error.FileDescriptorNotASocket,
+ .WSAEINVAL => return error.SocketNotBound,
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ }
+ return;
+ } else {
+ const rc = system.getpeername(sock, addr, addrlen);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ else => |err| return unexpectedErrno(err),
+
+ .BADF => unreachable, // always a race condition
+ .FAULT => unreachable,
+ .INVAL => unreachable, // invalid parameters
+ .NOTSOCK => return error.FileDescriptorNotASocket,
+ .NOBUFS => return error.SystemResources,
+ }
+ }
+}
+
+pub const ConnectError = error{
+ /// For UNIX domain sockets, which are identified by pathname: Write permission is denied on the socket
+ /// file, or search permission is denied for one of the directories in the path prefix.
+ /// or
+ /// The user tried to connect to a broadcast address without having the socket broadcast flag enabled or
+ /// the connection request failed because of a local firewall rule.
+ PermissionDenied,
+
+ /// Local address is already in use.
+ AddressInUse,
+
+ /// (Internet domain sockets) The socket referred to by sockfd had not previously been bound to an
+ /// address and, upon attempting to bind it to an ephemeral port, it was determined that all port numbers
+ /// in the ephemeral port range are currently in use. See the discussion of
+ /// /proc/sys/net/ipv4/ip_local_port_range in ip(7).
+ AddressNotAvailable,
+
+ /// The passed address didn't have the correct address family in its sa_family field.
+ AddressFamilyNotSupported,
+
+ /// Insufficient entries in the routing cache.
+ SystemResources,
+
+ /// A connect() on a stream socket found no one listening on the remote address.
+ ConnectionRefused,
+
+ /// Network is unreachable.
+ NetworkUnreachable,
+
+ /// Timeout while attempting connection. The server may be too busy to accept new connections. Note
+ /// that for IP sockets the timeout may be very long when syncookies are enabled on the server.
+ ConnectionTimedOut,
+
+ /// This error occurs when no global event loop is configured,
+ /// and connecting to the socket would block.
+ WouldBlock,
+
+ /// The given path for the unix socket does not exist.
+ FileNotFound,
+
+ /// Connection was reset by peer before connect could complete.
+ ConnectionResetByPeer,
+
+ /// Socket is non-blocking and already has a pending connection in progress.
+ ConnectionPending,
+} || UnexpectedError;
+
+/// Initiate a connection on a socket.
+/// If `sockfd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN or EINPROGRESS is received.
+pub fn connect(sock: socket_t, sock_addr: *const sockaddr, len: socklen_t) ConnectError!void {
+ if (native_os == .windows) {
+ const rc = windows.ws2_32.connect(sock, sock_addr, @intCast(len));
+ if (rc == 0) return;
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSAEADDRINUSE => return error.AddressInUse,
+ .WSAEADDRNOTAVAIL => return error.AddressNotAvailable,
+ .WSAECONNREFUSED => return error.ConnectionRefused,
+ .WSAECONNRESET => return error.ConnectionResetByPeer,
+ .WSAETIMEDOUT => return error.ConnectionTimedOut,
+ .WSAEHOSTUNREACH, // TODO: should we return NetworkUnreachable in this case as well?
+ .WSAENETUNREACH,
+ => return error.NetworkUnreachable,
+ .WSAEFAULT => unreachable,
+ .WSAEINVAL => unreachable,
+ .WSAEISCONN => unreachable,
+ .WSAENOTSOCK => unreachable,
+ .WSAEWOULDBLOCK => return error.WouldBlock,
+ .WSAEACCES => unreachable,
+ .WSAENOBUFS => return error.SystemResources,
+ .WSAEAFNOSUPPORT => return error.AddressFamilyNotSupported,
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ return;
+ }
+
+ while (true) {
+ switch (errno(system.connect(sock, sock_addr, len))) {
+ .SUCCESS => return,
+ .ACCES => return error.PermissionDenied,
+ .PERM => return error.PermissionDenied,
+ .ADDRINUSE => return error.AddressInUse,
+ .ADDRNOTAVAIL => return error.AddressNotAvailable,
+ .AFNOSUPPORT => return error.AddressFamilyNotSupported,
+ .AGAIN, .INPROGRESS => return error.WouldBlock,
+ .ALREADY => return error.ConnectionPending,
+ .BADF => unreachable, // sockfd is not a valid open file descriptor.
+ .CONNREFUSED => return error.ConnectionRefused,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .FAULT => unreachable, // The socket structure address is outside the user's address space.
+ .INTR => continue,
+ .ISCONN => unreachable, // The socket is already connected.
+ .HOSTUNREACH => return error.NetworkUnreachable,
+ .NETUNREACH => return error.NetworkUnreachable,
+ .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
+ .PROTOTYPE => unreachable, // The socket type does not support the requested communications protocol.
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ .NOENT => return error.FileNotFound, // Returned when socket is AF.UNIX and the given path does not exist.
+ .CONNABORTED => unreachable, // Tried to reuse socket that previously received error.ConnectionRefused.
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub fn getsockoptError(sockfd: fd_t) ConnectError!void {
+ var err_code: i32 = undefined;
+ var size: u32 = @sizeOf(u32);
+ const rc = system.getsockopt(sockfd, SOL.SOCKET, SO.ERROR, @ptrCast(&err_code), &size);
+ assert(size == 4);
+ switch (errno(rc)) {
+ .SUCCESS => switch (@as(E, @enumFromInt(err_code))) {
+ .SUCCESS => return,
+ .ACCES => return error.PermissionDenied,
+ .PERM => return error.PermissionDenied,
+ .ADDRINUSE => return error.AddressInUse,
+ .ADDRNOTAVAIL => return error.AddressNotAvailable,
+ .AFNOSUPPORT => return error.AddressFamilyNotSupported,
+ .AGAIN => return error.SystemResources,
+ .ALREADY => return error.ConnectionPending,
+ .BADF => unreachable, // sockfd is not a valid open file descriptor.
+ .CONNREFUSED => return error.ConnectionRefused,
+ .FAULT => unreachable, // The socket structure address is outside the user's address space.
+ .ISCONN => unreachable, // The socket is already connected.
+ .HOSTUNREACH => return error.NetworkUnreachable,
+ .NETUNREACH => return error.NetworkUnreachable,
+ .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
+ .PROTOTYPE => unreachable, // The socket type does not support the requested communications protocol.
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ else => |err| return unexpectedErrno(err),
+ },
+ .BADF => unreachable, // The argument sockfd is not a valid file descriptor.
+ .FAULT => unreachable, // The address pointed to by optval or optlen is not in a valid part of the process address space.
+ .INVAL => unreachable,
+ .NOPROTOOPT => unreachable, // The option is unknown at the level indicated.
+ .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const WaitPidResult = struct {
+ pid: pid_t,
+ status: u32,
+};
+
+/// Use this version of the `waitpid` wrapper if you spawned your child process using explicit
+/// `fork` and `execve` method.
+pub fn waitpid(pid: pid_t, flags: u32) WaitPidResult {
+ var status: if (builtin.link_libc) c_int else u32 = undefined;
+ while (true) {
+ const rc = system.waitpid(pid, &status, @intCast(flags));
+ switch (errno(rc)) {
+ .SUCCESS => return .{
+ .pid = @intCast(rc),
+ .status = @bitCast(status),
+ },
+ .INTR => continue,
+ .CHILD => unreachable, // The process specified does not exist. It would be a race condition to handle this error.
+ .INVAL => unreachable, // Invalid flags.
+ else => unreachable,
+ }
+ }
+}
+
+pub fn wait4(pid: pid_t, flags: u32, ru: ?*rusage) WaitPidResult {
+ var status: if (builtin.link_libc) c_int else u32 = undefined;
+ while (true) {
+ const rc = system.wait4(pid, &status, @intCast(flags), ru);
+ switch (errno(rc)) {
+ .SUCCESS => return .{
+ .pid = @intCast(rc),
+ .status = @bitCast(status),
+ },
+ .INTR => continue,
+ .CHILD => unreachable, // The process specified does not exist. It would be a race condition to handle this error.
+ .INVAL => unreachable, // Invalid flags.
+ else => unreachable,
+ }
+ }
+}
+
+pub const FStatError = error{
+ SystemResources,
+
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to get its filestat information.
+ AccessDenied,
+} || UnexpectedError;
+
+/// Return information about a file descriptor.
+pub fn fstat(fd: fd_t) FStatError!Stat {
+ if (native_os == .wasi and !builtin.link_libc) {
+ return Stat.fromFilestat(try std.os.fstat_wasi(fd));
+ }
+ if (native_os == .windows) {
+ @compileError("fstat is not yet implemented on Windows");
+ }
+
+ const fstat_sym = if (lfs64_abi) system.fstat64 else system.fstat;
+ var stat = mem.zeroes(Stat);
+ switch (errno(fstat_sym(fd, &stat))) {
+ .SUCCESS => return stat,
+ .INVAL => unreachable,
+ .BADF => unreachable, // Always a race condition.
+ .NOMEM => return error.SystemResources,
+ .ACCES => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const FStatAtError = FStatError || error{
+ NameTooLong,
+ FileNotFound,
+ SymLinkLoop,
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+};
+
+/// Similar to `fstat`, but returns stat of a resource pointed to by `pathname`
+/// which is relative to `dirfd` handle.
+/// On WASI, `pathname` should be encoded as valid UTF-8.
+/// On other platforms, `pathname` is an opaque sequence of bytes with no particular encoding.
+/// See also `fstatatZ` and `std.os.fstatat_wasi`.
+pub fn fstatat(dirfd: fd_t, pathname: []const u8, flags: u32) FStatAtError!Stat {
+ if (native_os == .wasi and !builtin.link_libc) {
+ const filestat = try std.os.fstatat_wasi(dirfd, pathname, .{
+ .SYMLINK_FOLLOW = (flags & AT.SYMLINK_NOFOLLOW) == 0,
+ });
+ return Stat.fromFilestat(filestat);
+ } else if (native_os == .windows) {
+ @compileError("fstatat is not yet implemented on Windows");
+ } else {
+ const pathname_c = try toPosixPath(pathname);
+ return fstatatZ(dirfd, &pathname_c, flags);
+ }
+}
+
+/// Same as `fstatat` but `pathname` is null-terminated.
+/// See also `fstatat`.
+pub fn fstatatZ(dirfd: fd_t, pathname: [*:0]const u8, flags: u32) FStatAtError!Stat {
+ if (native_os == .wasi and !builtin.link_libc) {
+ const filestat = try std.os.fstatat_wasi(dirfd, mem.sliceTo(pathname, 0), .{
+ .SYMLINK_FOLLOW = (flags & AT.SYMLINK_NOFOLLOW) == 0,
+ });
+ return Stat.fromFilestat(filestat);
+ }
+
+ const fstatat_sym = if (lfs64_abi) system.fstatat64 else system.fstatat;
+ var stat = mem.zeroes(Stat);
+ switch (errno(fstatat_sym(dirfd, pathname, &stat, flags))) {
+ .SUCCESS => return stat,
+ .INVAL => unreachable,
+ .BADF => unreachable, // Always a race condition.
+ .NOMEM => return error.SystemResources,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.AccessDenied,
+ .FAULT => unreachable,
+ .NAMETOOLONG => return error.NameTooLong,
+ .LOOP => return error.SymLinkLoop,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.FileNotFound,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const KQueueError = error{
+ /// The per-process limit on the number of open file descriptors has been reached.
+ ProcessFdQuotaExceeded,
+
+ /// The system-wide limit on the total number of open files has been reached.
+ SystemFdQuotaExceeded,
+} || UnexpectedError;
+
+pub fn kqueue() KQueueError!i32 {
+ const rc = system.kqueue();
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const KEventError = error{
+ /// The process does not have permission to register a filter.
+ AccessDenied,
+
+ /// The event could not be found to be modified or deleted.
+ EventNotFound,
+
+ /// No memory was available to register the event.
+ SystemResources,
+
+ /// The specified process to attach to does not exist.
+ ProcessNotFound,
+
+ /// changelist or eventlist had too many items on it.
+ /// TODO remove this possibility
+ Overflow,
+};
+
+pub fn kevent(
+ kq: i32,
+ changelist: []const Kevent,
+ eventlist: []Kevent,
+ timeout: ?*const timespec,
+) KEventError!usize {
+ while (true) {
+ const rc = system.kevent(
+ kq,
+ changelist.ptr,
+ cast(c_int, changelist.len) orelse return error.Overflow,
+ eventlist.ptr,
+ cast(c_int, eventlist.len) orelse return error.Overflow,
+ timeout,
+ );
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .ACCES => return error.AccessDenied,
+ .FAULT => unreachable,
+ .BADF => unreachable, // Always a race condition.
+ .INTR => continue,
+ .INVAL => unreachable,
+ .NOENT => return error.EventNotFound,
+ .NOMEM => return error.SystemResources,
+ .SRCH => return error.ProcessNotFound,
+ else => unreachable,
+ }
+ }
+}
+
+pub const INotifyInitError = error{
+ ProcessFdQuotaExceeded,
+ SystemFdQuotaExceeded,
+ SystemResources,
+} || UnexpectedError;
+
+/// initialize an inotify instance
+pub fn inotify_init1(flags: u32) INotifyInitError!i32 {
+ const rc = system.inotify_init1(flags);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INVAL => unreachable,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOMEM => return error.SystemResources,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const INotifyAddWatchError = error{
+ AccessDenied,
+ NameTooLong,
+ FileNotFound,
+ SystemResources,
+ UserResourceLimitReached,
+ NotDir,
+ WatchAlreadyExists,
+} || UnexpectedError;
+
+/// add a watch to an initialized inotify instance
+pub fn inotify_add_watch(inotify_fd: i32, pathname: []const u8, mask: u32) INotifyAddWatchError!i32 {
+ const pathname_c = try toPosixPath(pathname);
+ return inotify_add_watchZ(inotify_fd, &pathname_c, mask);
+}
+
+/// Same as `inotify_add_watch` except pathname is null-terminated.
+pub fn inotify_add_watchZ(inotify_fd: i32, pathname: [*:0]const u8, mask: u32) INotifyAddWatchError!i32 {
+ const rc = system.inotify_add_watch(inotify_fd, pathname, mask);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .ACCES => return error.AccessDenied,
+ .BADF => unreachable,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.UserResourceLimitReached,
+ .NOTDIR => return error.NotDir,
+ .EXIST => return error.WatchAlreadyExists,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// remove an existing watch from an inotify instance
+pub fn inotify_rm_watch(inotify_fd: i32, wd: i32) void {
+ switch (errno(system.inotify_rm_watch(inotify_fd, wd))) {
+ .SUCCESS => return,
+ .BADF => unreachable,
+ .INVAL => unreachable,
+ else => unreachable,
+ }
+}
+
+pub const FanotifyInitError = error{
+ ProcessFdQuotaExceeded,
+ SystemFdQuotaExceeded,
+ SystemResources,
+ OperationNotSupported,
+ PermissionDenied,
+} || UnexpectedError;
+
+pub fn fanotify_init(flags: u32, event_f_flags: u32) FanotifyInitError!i32 {
+ const rc = system.fanotify_init(flags, event_f_flags);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INVAL => unreachable,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOMEM => return error.SystemResources,
+ .NOSYS => return error.OperationNotSupported,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const FanotifyMarkError = error{
+ MarkAlreadyExists,
+ IsDir,
+ NotAssociatedWithFileSystem,
+ FileNotFound,
+ SystemResources,
+ UserMarkQuotaExceeded,
+ NotImplemented,
+ NotDir,
+ OperationNotSupported,
+ PermissionDenied,
+ NotSameFileSystem,
+ NameTooLong,
+} || UnexpectedError;
+
+pub fn fanotify_mark(fanotify_fd: i32, flags: u32, mask: u64, dirfd: i32, pathname: ?[]const u8) FanotifyMarkError!void {
+ if (pathname) |path| {
+ const path_c = try toPosixPath(path);
+ return fanotify_markZ(fanotify_fd, flags, mask, dirfd, &path_c);
+ }
+
+ return fanotify_markZ(fanotify_fd, flags, mask, dirfd, null);
+}
+
+pub fn fanotify_markZ(fanotify_fd: i32, flags: u32, mask: u64, dirfd: i32, pathname: ?[*:0]const u8) FanotifyMarkError!void {
+ const rc = system.fanotify_mark(fanotify_fd, flags, mask, dirfd, pathname);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ .BADF => unreachable,
+ .EXIST => return error.MarkAlreadyExists,
+ .INVAL => unreachable,
+ .ISDIR => return error.IsDir,
+ .NODEV => return error.NotAssociatedWithFileSystem,
+ .NOENT => return error.FileNotFound,
+ .NOMEM => return error.SystemResources,
+ .NOSPC => return error.UserMarkQuotaExceeded,
+ .NOSYS => return error.NotImplemented,
+ .NOTDIR => return error.NotDir,
+ .OPNOTSUPP => return error.OperationNotSupported,
+ .PERM => return error.PermissionDenied,
+ .XDEV => return error.NotSameFileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const MProtectError = error{
+ /// The memory cannot be given the specified access. This can happen, for example, if you
+ /// mmap(2) a file to which you have read-only access, then ask mprotect() to mark it
+ /// PROT_WRITE.
+ AccessDenied,
+
+ /// Changing the protection of a memory region would result in the total number of map‐
+ /// pings with distinct attributes (e.g., read versus read/write protection) exceeding the
+ /// allowed maximum. (For example, making the protection of a range PROT_READ in the mid‐
+ /// dle of a region currently protected as PROT_READ|PROT_WRITE would result in three map‐
+ /// pings: two read/write mappings at each end and a read-only mapping in the middle.)
+ OutOfMemory,
+} || UnexpectedError;
+
+/// `memory.len` must be page-aligned.
+pub fn mprotect(memory: []align(mem.page_size) u8, protection: u32) MProtectError!void {
+ assert(mem.isAligned(memory.len, mem.page_size));
+ if (native_os == .windows) {
+ const win_prot: windows.DWORD = switch (@as(u3, @truncate(protection))) {
+ 0b000 => windows.PAGE_NOACCESS,
+ 0b001 => windows.PAGE_READONLY,
+ 0b010 => unreachable, // +w -r not allowed
+ 0b011 => windows.PAGE_READWRITE,
+ 0b100 => windows.PAGE_EXECUTE,
+ 0b101 => windows.PAGE_EXECUTE_READ,
+ 0b110 => unreachable, // +w -r not allowed
+ 0b111 => windows.PAGE_EXECUTE_READWRITE,
+ };
+ var old: windows.DWORD = undefined;
+ windows.VirtualProtect(memory.ptr, memory.len, win_prot, &old) catch |err| switch (err) {
+ error.InvalidAddress => return error.AccessDenied,
+ error.Unexpected => return error.Unexpected,
+ };
+ } else {
+ switch (errno(system.mprotect(memory.ptr, memory.len, protection))) {
+ .SUCCESS => return,
+ .INVAL => unreachable,
+ .ACCES => return error.AccessDenied,
+ .NOMEM => return error.OutOfMemory,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const ForkError = error{SystemResources} || UnexpectedError;
+
+pub fn fork() ForkError!pid_t {
+ const rc = system.fork();
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .AGAIN => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const MMapError = error{
+ /// The underlying filesystem of the specified file does not support memory mapping.
+ MemoryMappingNotSupported,
+
+ /// A file descriptor refers to a non-regular file. Or a file mapping was requested,
+ /// but the file descriptor is not open for reading. Or `MAP.SHARED` was requested
+ /// and `PROT_WRITE` is set, but the file descriptor is not open in `RDWR` mode.
+ /// Or `PROT_WRITE` is set, but the file is append-only.
+ AccessDenied,
+
+ /// The `prot` argument asks for `PROT_EXEC` but the mapped area belongs to a file on
+ /// a filesystem that was mounted no-exec.
+ PermissionDenied,
+ LockedMemoryLimitExceeded,
+ ProcessFdQuotaExceeded,
+ SystemFdQuotaExceeded,
+ OutOfMemory,
+} || UnexpectedError;
+
+/// Map files or devices into memory.
+/// `length` does not need to be aligned.
+/// Use of a mapped region can result in these signals:
+/// * SIGSEGV - Attempted write into a region mapped as read-only.
+/// * SIGBUS - Attempted access to a portion of the buffer that does not correspond to the file
+pub fn mmap(
+ ptr: ?[*]align(mem.page_size) u8,
+ length: usize,
+ prot: u32,
+ flags: system.MAP,
+ fd: fd_t,
+ offset: u64,
+) MMapError![]align(mem.page_size) u8 {
+ const mmap_sym = if (lfs64_abi) system.mmap64 else system.mmap;
+ const rc = mmap_sym(ptr, length, prot, @bitCast(flags), fd, @bitCast(offset));
+ const err: E = if (builtin.link_libc) blk: {
+ if (rc != std.c.MAP_FAILED) return @as([*]align(mem.page_size) u8, @ptrCast(@alignCast(rc)))[0..length];
+ break :blk @enumFromInt(system._errno().*);
+ } else blk: {
+ const err = errno(rc);
+ if (err == .SUCCESS) return @as([*]align(mem.page_size) u8, @ptrFromInt(rc))[0..length];
+ break :blk err;
+ };
+ switch (err) {
+ .SUCCESS => unreachable,
+ .TXTBSY => return error.AccessDenied,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.PermissionDenied,
+ .AGAIN => return error.LockedMemoryLimitExceeded,
+ .BADF => unreachable, // Always a race condition.
+ .OVERFLOW => unreachable, // The number of pages used for length + offset would overflow.
+ .NODEV => return error.MemoryMappingNotSupported,
+ .INVAL => unreachable, // Invalid parameters to mmap()
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOMEM => return error.OutOfMemory,
+ else => return unexpectedErrno(err),
+ }
+}
+
+/// Deletes the mappings for the specified address range, causing
+/// further references to addresses within the range to generate invalid memory references.
+/// Note that while POSIX allows unmapping a region in the middle of an existing mapping,
+/// Zig's munmap function does not, for two reasons:
+/// * It violates the Zig principle that resource deallocation must succeed.
+/// * The Windows function, VirtualFree, has this restriction.
+pub fn munmap(memory: []align(mem.page_size) const u8) void {
+ switch (errno(system.munmap(memory.ptr, memory.len))) {
+ .SUCCESS => return,
+ .INVAL => unreachable, // Invalid parameters.
+ .NOMEM => unreachable, // Attempted to unmap a region in the middle of an existing mapping.
+ else => unreachable,
+ }
+}
+
+pub const MSyncError = error{
+ UnmappedMemory,
+} || UnexpectedError;
+
+pub fn msync(memory: []align(mem.page_size) u8, flags: i32) MSyncError!void {
+ switch (errno(system.msync(memory.ptr, memory.len, flags))) {
+ .SUCCESS => return,
+ .NOMEM => return error.UnmappedMemory, // Unsuccessful, provided pointer does not point mapped memory
+ .INVAL => unreachable, // Invalid parameters.
+ else => unreachable,
+ }
+}
+
+pub const AccessError = error{
+ PermissionDenied,
+ FileNotFound,
+ NameTooLong,
+ InputOutput,
+ SystemResources,
+ BadPathName,
+ FileBusy,
+ SymLinkLoop,
+ ReadOnlyFileSystem,
+ /// WASI-only; file paths must be valid UTF-8.
+ InvalidUtf8,
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+} || UnexpectedError;
+
+/// check user's permissions for a file
+///
+/// * On Windows, asserts `path` is valid [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// * On WASI, invalid UTF-8 passed to `path` causes `error.InvalidUtf8`.
+/// * On other platforms, `path` is an opaque sequence of bytes with no particular encoding.
+///
+/// On Windows, `mode` is ignored. This is a POSIX API that is only partially supported by
+/// Windows. See `fs` for the cross-platform file system API.
+pub fn access(path: []const u8, mode: u32) AccessError!void {
+ if (native_os == .windows) {
+ const path_w = windows.sliceToPrefixedFileW(null, path) catch |err| switch (err) {
+ error.AccessDenied => return error.PermissionDenied,
+ else => |e| return e,
+ };
+ _ = try windows.GetFileAttributesW(path_w.span().ptr);
+ return;
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return faccessat(wasi.AT.FDCWD, path, mode, 0);
+ }
+ const path_c = try toPosixPath(path);
+ return accessZ(&path_c, mode);
+}
+
+/// Same as `access` except `path` is null-terminated.
+pub fn accessZ(path: [*:0]const u8, mode: u32) AccessError!void {
+ if (native_os == .windows) {
+ const path_w = windows.cStrToPrefixedFileW(null, path) catch |err| switch (err) {
+ error.AccessDenied => return error.PermissionDenied,
+ else => |e| return e,
+ };
+ _ = try windows.GetFileAttributesW(path_w.span().ptr);
+ return;
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return access(mem.sliceTo(path, 0), mode);
+ }
+ switch (errno(system.access(path, mode))) {
+ .SUCCESS => return,
+ .ACCES => return error.PermissionDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .TXTBSY => return error.FileBusy,
+ .NOTDIR => return error.FileNotFound,
+ .NOENT => return error.FileNotFound,
+ .NAMETOOLONG => return error.NameTooLong,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .IO => return error.InputOutput,
+ .NOMEM => return error.SystemResources,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Check user's permissions for a file, based on an open directory handle.
+///
+/// * On Windows, asserts `path` is valid [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// * On WASI, invalid UTF-8 passed to `path` causes `error.InvalidUtf8`.
+/// * On other platforms, `path` is an opaque sequence of bytes with no particular encoding.
+///
+/// On Windows, `mode` is ignored. This is a POSIX API that is only partially supported by
+/// Windows. See `fs` for the cross-platform file system API.
+pub fn faccessat(dirfd: fd_t, path: []const u8, mode: u32, flags: u32) AccessError!void {
+ if (native_os == .windows) {
+ const path_w = try windows.sliceToPrefixedFileW(dirfd, path);
+ return faccessatW(dirfd, path_w.span().ptr);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ const resolved: RelativePathWasi = .{ .dir_fd = dirfd, .relative_path = path };
+
+ const st = blk: {
+ break :blk std.os.fstatat_wasi(dirfd, path, .{
+ .SYMLINK_FOLLOW = (flags & AT.SYMLINK_NOFOLLOW) == 0,
+ });
+ } catch |err| switch (err) {
+ error.AccessDenied => return error.PermissionDenied,
+ else => |e| return e,
+ };
+
+ if (mode != F_OK) {
+ var directory: wasi.fdstat_t = undefined;
+ if (wasi.fd_fdstat_get(resolved.dir_fd, &directory) != .SUCCESS) {
+ return error.PermissionDenied;
+ }
+
+ var rights: wasi.rights_t = .{};
+ if (mode & R_OK != 0) {
+ if (st.filetype == .DIRECTORY) {
+ rights.FD_READDIR = true;
+ } else {
+ rights.FD_READ = true;
+ }
+ }
+ if (mode & W_OK != 0) {
+ rights.FD_WRITE = true;
+ }
+ // No validation for X_OK
+
+ // https://github.com/ziglang/zig/issues/18882
+ const rights_int: u64 = @bitCast(rights);
+ const inheriting_int: u64 = @bitCast(directory.fs_rights_inheriting);
+ if ((rights_int & inheriting_int) != rights_int) {
+ return error.PermissionDenied;
+ }
+ }
+ return;
+ }
+ const path_c = try toPosixPath(path);
+ return faccessatZ(dirfd, &path_c, mode, flags);
+}
+
+/// Same as `faccessat` except the path parameter is null-terminated.
+pub fn faccessatZ(dirfd: fd_t, path: [*:0]const u8, mode: u32, flags: u32) AccessError!void {
+ if (native_os == .windows) {
+ const path_w = try windows.cStrToPrefixedFileW(dirfd, path);
+ return faccessatW(dirfd, path_w.span().ptr);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return faccessat(dirfd, mem.sliceTo(path, 0), mode, flags);
+ }
+ switch (errno(system.faccessat(dirfd, path, mode, flags))) {
+ .SUCCESS => return,
+ .ACCES => return error.PermissionDenied,
+ .ROFS => return error.ReadOnlyFileSystem,
+ .LOOP => return error.SymLinkLoop,
+ .TXTBSY => return error.FileBusy,
+ .NOTDIR => return error.FileNotFound,
+ .NOENT => return error.FileNotFound,
+ .NAMETOOLONG => return error.NameTooLong,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .IO => return error.InputOutput,
+ .NOMEM => return error.SystemResources,
+ .ILSEQ => |err| if (native_os == .wasi)
+ return error.InvalidUtf8
+ else
+ return unexpectedErrno(err),
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Same as `faccessat` except asserts the target is Windows and the path parameter
+/// is NtDll-prefixed, null-terminated, WTF-16 encoded.
+pub fn faccessatW(dirfd: fd_t, sub_path_w: [*:0]const u16) AccessError!void {
+ if (sub_path_w[0] == '.' and sub_path_w[1] == 0) {
+ return;
+ }
+ if (sub_path_w[0] == '.' and sub_path_w[1] == '.' and sub_path_w[2] == 0) {
+ return;
+ }
+
+ const path_len_bytes = cast(u16, mem.sliceTo(sub_path_w, 0).len * 2) orelse return error.NameTooLong;
+ var nt_name = windows.UNICODE_STRING{
+ .Length = path_len_bytes,
+ .MaximumLength = path_len_bytes,
+ .Buffer = @constCast(sub_path_w),
+ };
+ var attr = windows.OBJECT_ATTRIBUTES{
+ .Length = @sizeOf(windows.OBJECT_ATTRIBUTES),
+ .RootDirectory = if (fs.path.isAbsoluteWindowsW(sub_path_w)) null else dirfd,
+ .Attributes = 0, // Note we do not use OBJ_CASE_INSENSITIVE here.
+ .ObjectName = &nt_name,
+ .SecurityDescriptor = null,
+ .SecurityQualityOfService = null,
+ };
+ var basic_info: windows.FILE_BASIC_INFORMATION = undefined;
+ switch (windows.ntdll.NtQueryAttributesFile(&attr, &basic_info)) {
+ .SUCCESS => return,
+ .OBJECT_NAME_NOT_FOUND => return error.FileNotFound,
+ .OBJECT_PATH_NOT_FOUND => return error.FileNotFound,
+ .OBJECT_NAME_INVALID => unreachable,
+ .INVALID_PARAMETER => unreachable,
+ .ACCESS_DENIED => return error.PermissionDenied,
+ .OBJECT_PATH_SYNTAX_BAD => unreachable,
+ else => |rc| return windows.unexpectedStatus(rc),
+ }
+}
+
+pub const PipeError = error{
+ SystemFdQuotaExceeded,
+ ProcessFdQuotaExceeded,
+} || UnexpectedError;
+
+/// Creates a unidirectional data channel that can be used for interprocess communication.
+pub fn pipe() PipeError![2]fd_t {
+ var fds: [2]fd_t = undefined;
+ switch (errno(system.pipe(&fds))) {
+ .SUCCESS => return fds,
+ .INVAL => unreachable, // Invalid parameters to pipe()
+ .FAULT => unreachable, // Invalid fds pointer
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn pipe2(flags: O) PipeError![2]fd_t {
+ // https://github.com/ziglang/zig/issues/19352
+ if (@hasDecl(system, "pipe2")) {
+ var fds: [2]fd_t = undefined;
+ switch (errno(system.pipe2(&fds, flags))) {
+ .SUCCESS => return fds,
+ .INVAL => unreachable, // Invalid flags
+ .FAULT => unreachable, // Invalid fds pointer
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ const fds: [2]fd_t = try pipe();
+ errdefer {
+ close(fds[0]);
+ close(fds[1]);
+ }
+
+ // https://github.com/ziglang/zig/issues/18882
+ if (@as(u32, @bitCast(flags)) == 0)
+ return fds;
+
+ // CLOEXEC is special, it's a file descriptor flag and must be set using
+ // F.SETFD.
+ if (flags.CLOEXEC) {
+ for (fds) |fd| {
+ switch (errno(system.fcntl(fd, F.SETFD, @as(u32, FD_CLOEXEC)))) {
+ .SUCCESS => {},
+ .INVAL => unreachable, // Invalid flags
+ .BADF => unreachable, // Always a race condition
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ }
+
+ const new_flags: u32 = f: {
+ var new_flags = flags;
+ new_flags.CLOEXEC = false;
+ break :f @bitCast(new_flags);
+ };
+ // Set every other flag affecting the file status using F.SETFL.
+ if (new_flags != 0) {
+ for (fds) |fd| {
+ switch (errno(system.fcntl(fd, F.SETFL, new_flags))) {
+ .SUCCESS => {},
+ .INVAL => unreachable, // Invalid flags
+ .BADF => unreachable, // Always a race condition
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ }
+
+ return fds;
+}
+
+pub const SysCtlError = error{
+ PermissionDenied,
+ SystemResources,
+ NameTooLong,
+ UnknownName,
+} || UnexpectedError;
+
+pub fn sysctl(
+ name: []const c_int,
+ oldp: ?*anyopaque,
+ oldlenp: ?*usize,
+ newp: ?*anyopaque,
+ newlen: usize,
+) SysCtlError!void {
+ if (native_os == .wasi) {
+ @panic("unsupported"); // TODO should be compile error, not panic
+ }
+ if (native_os == .haiku) {
+ @panic("unsupported"); // TODO should be compile error, not panic
+ }
+
+ const name_len = cast(c_uint, name.len) orelse return error.NameTooLong;
+ switch (errno(system.sysctl(name.ptr, name_len, oldp, oldlenp, newp, newlen))) {
+ .SUCCESS => return,
+ .FAULT => unreachable,
+ .PERM => return error.PermissionDenied,
+ .NOMEM => return error.SystemResources,
+ .NOENT => return error.UnknownName,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn sysctlbynameZ(
+ name: [*:0]const u8,
+ oldp: ?*anyopaque,
+ oldlenp: ?*usize,
+ newp: ?*anyopaque,
+ newlen: usize,
+) SysCtlError!void {
+ if (native_os == .wasi) {
+ @panic("unsupported"); // TODO should be compile error, not panic
+ }
+ if (native_os == .haiku) {
+ @panic("unsupported"); // TODO should be compile error, not panic
+ }
+
+ switch (errno(system.sysctlbyname(name, oldp, oldlenp, newp, newlen))) {
+ .SUCCESS => return,
+ .FAULT => unreachable,
+ .PERM => return error.PermissionDenied,
+ .NOMEM => return error.SystemResources,
+ .NOENT => return error.UnknownName,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn gettimeofday(tv: ?*timeval, tz: ?*timezone) void {
+ switch (errno(system.gettimeofday(tv, tz))) {
+ .SUCCESS => return,
+ .INVAL => unreachable,
+ else => unreachable,
+ }
+}
+
+pub const SeekError = error{
+ Unseekable,
+
+ /// In WASI, this error may occur when the file descriptor does
+ /// not hold the required rights to seek on it.
+ AccessDenied,
+} || UnexpectedError;
+
+/// Repositions read/write file offset relative to the beginning.
+pub fn lseek_SET(fd: fd_t, offset: u64) SeekError!void {
+ if (native_os == .linux and !builtin.link_libc and @sizeOf(usize) == 4) {
+ var result: u64 = undefined;
+ switch (errno(system.llseek(fd, offset, &result, SEEK.SET))) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ if (native_os == .windows) {
+ return windows.SetFilePointerEx_BEGIN(fd, offset);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ var new_offset: wasi.filesize_t = undefined;
+ switch (wasi.fd_seek(fd, @bitCast(offset), .SET, &new_offset)) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ const lseek_sym = if (lfs64_abi) system.lseek64 else system.lseek;
+ switch (errno(lseek_sym(fd, @bitCast(offset), SEEK.SET))) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Repositions read/write file offset relative to the current offset.
+pub fn lseek_CUR(fd: fd_t, offset: i64) SeekError!void {
+ if (native_os == .linux and !builtin.link_libc and @sizeOf(usize) == 4) {
+ var result: u64 = undefined;
+ switch (errno(system.llseek(fd, @bitCast(offset), &result, SEEK.CUR))) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ if (native_os == .windows) {
+ return windows.SetFilePointerEx_CURRENT(fd, offset);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ var new_offset: wasi.filesize_t = undefined;
+ switch (wasi.fd_seek(fd, offset, .CUR, &new_offset)) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ const lseek_sym = if (lfs64_abi) system.lseek64 else system.lseek;
+ switch (errno(lseek_sym(fd, @bitCast(offset), SEEK.CUR))) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Repositions read/write file offset relative to the end.
+pub fn lseek_END(fd: fd_t, offset: i64) SeekError!void {
+ if (native_os == .linux and !builtin.link_libc and @sizeOf(usize) == 4) {
+ var result: u64 = undefined;
+ switch (errno(system.llseek(fd, @bitCast(offset), &result, SEEK.END))) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ if (native_os == .windows) {
+ return windows.SetFilePointerEx_END(fd, offset);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ var new_offset: wasi.filesize_t = undefined;
+ switch (wasi.fd_seek(fd, offset, .END, &new_offset)) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ const lseek_sym = if (lfs64_abi) system.lseek64 else system.lseek;
+ switch (errno(lseek_sym(fd, @bitCast(offset), SEEK.END))) {
+ .SUCCESS => return,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Returns the read/write file offset relative to the beginning.
+pub fn lseek_CUR_get(fd: fd_t) SeekError!u64 {
+ if (native_os == .linux and !builtin.link_libc and @sizeOf(usize) == 4) {
+ var result: u64 = undefined;
+ switch (errno(system.llseek(fd, 0, &result, SEEK.CUR))) {
+ .SUCCESS => return result,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ if (native_os == .windows) {
+ return windows.SetFilePointerEx_CURRENT_get(fd);
+ }
+ if (native_os == .wasi and !builtin.link_libc) {
+ var new_offset: wasi.filesize_t = undefined;
+ switch (wasi.fd_seek(fd, 0, .CUR, &new_offset)) {
+ .SUCCESS => return new_offset,
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ .NOTCAPABLE => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ const lseek_sym = if (lfs64_abi) system.lseek64 else system.lseek;
+ const rc = lseek_sym(fd, 0, SEEK.CUR);
+ switch (errno(rc)) {
+ .SUCCESS => return @bitCast(rc),
+ .BADF => unreachable, // always a race condition
+ .INVAL => return error.Unseekable,
+ .OVERFLOW => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ .NXIO => return error.Unseekable,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const FcntlError = error{
+ PermissionDenied,
+ FileBusy,
+ ProcessFdQuotaExceeded,
+ Locked,
+ DeadLock,
+ LockedRegionLimitExceeded,
+} || UnexpectedError;
+
+pub fn fcntl(fd: fd_t, cmd: i32, arg: usize) FcntlError!usize {
+ while (true) {
+ const rc = system.fcntl(fd, cmd, arg);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .INTR => continue,
+ .AGAIN, .ACCES => return error.Locked,
+ .BADF => unreachable,
+ .BUSY => return error.FileBusy,
+ .INVAL => unreachable, // invalid parameters
+ .PERM => return error.PermissionDenied,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NOTDIR => unreachable, // invalid parameter
+ .DEADLK => return error.DeadLock,
+ .NOLCK => return error.LockedRegionLimitExceeded,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const FlockError = error{
+ WouldBlock,
+
+ /// The kernel ran out of memory for allocating file locks
+ SystemResources,
+
+ /// The underlying filesystem does not support file locks
+ FileLocksNotSupported,
+} || UnexpectedError;
+
+/// Depending on the operating system `flock` may or may not interact with
+/// `fcntl` locks made by other processes.
+pub fn flock(fd: fd_t, operation: i32) FlockError!void {
+ while (true) {
+ const rc = system.flock(fd, operation);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ .BADF => unreachable,
+ .INTR => continue,
+ .INVAL => unreachable, // invalid parameters
+ .NOLCK => return error.SystemResources,
+ .AGAIN => return error.WouldBlock, // TODO: integrate with async instead of just returning an error
+ .OPNOTSUPP => return error.FileLocksNotSupported,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const RealPathError = error{
+ FileNotFound,
+ AccessDenied,
+ NameTooLong,
+ NotSupported,
+ NotDir,
+ SymLinkLoop,
+ InputOutput,
+ FileTooBig,
+ IsDir,
+ ProcessFdQuotaExceeded,
+ SystemFdQuotaExceeded,
+ NoDevice,
+ SystemResources,
+ NoSpaceLeft,
+ FileSystem,
+ BadPathName,
+ DeviceBusy,
+
+ SharingViolation,
+ PipeBusy,
+
+ /// Windows-only; file paths provided by the user must be valid WTF-8.
+ /// https://simonsapin.github.io/wtf-8/
+ InvalidWtf8,
+
+ /// On Windows, `\\server` or `\\server\share` was not found.
+ NetworkNotFound,
+
+ PathAlreadyExists,
+
+ /// On Windows, antivirus software is enabled by default. It can be
+ /// disabled, but Windows Update sometimes ignores the user's preference
+ /// and re-enables it. When enabled, antivirus software on Windows
+ /// intercepts file system operations and makes them significantly slower
+ /// in addition to possibly failing with this error code.
+ AntivirusInterference,
+
+ /// On Windows, the volume does not contain a recognized file system. File
+ /// system drivers might not be loaded, or the volume may be corrupt.
+ UnrecognizedVolume,
+} || UnexpectedError;
+
+/// Return the canonicalized absolute pathname.
+///
+/// Expands all symbolic links and resolves references to `.`, `..`, and
+/// extra `/` characters in `pathname`.
+///
+/// On Windows, `pathname` should be encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+///
+/// On other platforms, `pathname` is an opaque sequence of bytes with no particular encoding.
+///
+/// The return value is a slice of `out_buffer`, but not necessarily from the beginning.
+///
+/// See also `realpathZ` and `realpathW`.
+///
+/// * On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+/// * On other platforms, the result is an opaque sequence of bytes with no particular encoding.
+///
+/// Calling this function is usually a bug.
+pub fn realpath(pathname: []const u8, out_buffer: *[max_path_bytes]u8) RealPathError![]u8 {
+ if (native_os == .windows) {
+ const pathname_w = try windows.sliceToPrefixedFileW(null, pathname);
+ return realpathW(pathname_w.span(), out_buffer);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ @compileError("WASI does not support os.realpath");
+ }
+ const pathname_c = try toPosixPath(pathname);
+ return realpathZ(&pathname_c, out_buffer);
+}
+
+/// Same as `realpath` except `pathname` is null-terminated.
+///
+/// Calling this function is usually a bug.
+pub fn realpathZ(pathname: [*:0]const u8, out_buffer: *[max_path_bytes]u8) RealPathError![]u8 {
+ if (native_os == .windows) {
+ const pathname_w = try windows.cStrToPrefixedFileW(null, pathname);
+ return realpathW(pathname_w.span(), out_buffer);
+ } else if (native_os == .wasi and !builtin.link_libc) {
+ return realpath(mem.sliceTo(pathname, 0), out_buffer);
+ }
+ if (!builtin.link_libc) {
+ const flags: O = switch (native_os) {
+ .linux => .{
+ .NONBLOCK = true,
+ .CLOEXEC = true,
+ .PATH = true,
+ },
+ else => .{
+ .NONBLOCK = true,
+ .CLOEXEC = true,
+ },
+ };
+ const fd = openZ(pathname, flags, 0) catch |err| switch (err) {
+ error.FileLocksNotSupported => unreachable,
+ error.WouldBlock => unreachable,
+ error.FileBusy => unreachable, // not asking for write permissions
+ error.InvalidUtf8 => unreachable, // WASI-only
+ else => |e| return e,
+ };
+ defer close(fd);
+
+ return std.os.getFdPath(fd, out_buffer);
+ }
+ const result_path = std.c.realpath(pathname, out_buffer) orelse switch (@as(E, @enumFromInt(std.c._errno().*))) {
+ .SUCCESS => unreachable,
+ .INVAL => unreachable,
+ .BADF => unreachable,
+ .FAULT => unreachable,
+ .ACCES => return error.AccessDenied,
+ .NOENT => return error.FileNotFound,
+ .OPNOTSUPP => return error.NotSupported,
+ .NOTDIR => return error.NotDir,
+ .NAMETOOLONG => return error.NameTooLong,
+ .LOOP => return error.SymLinkLoop,
+ .IO => return error.InputOutput,
+ else => |err| return unexpectedErrno(err),
+ };
+ return mem.sliceTo(result_path, 0);
+}
+
+/// Same as `realpath` except `pathname` is WTF16LE-encoded.
+///
+/// The result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
+///
+/// Calling this function is usually a bug.
+pub fn realpathW(pathname: []const u16, out_buffer: *[max_path_bytes]u8) RealPathError![]u8 {
+ const w = windows;
+
+ const dir = fs.cwd().fd;
+ const access_mask = w.GENERIC_READ | w.SYNCHRONIZE;
+ const share_access = w.FILE_SHARE_READ;
+ const creation = w.FILE_OPEN;
+ const h_file = blk: {
+ const res = w.OpenFile(pathname, .{
+ .dir = dir,
+ .access_mask = access_mask,
+ .share_access = share_access,
+ .creation = creation,
+ .filter = .any,
+ }) catch |err| switch (err) {
+ error.WouldBlock => unreachable,
+ else => |e| return e,
+ };
+ break :blk res;
+ };
+ defer w.CloseHandle(h_file);
+
+ return std.os.getFdPath(h_file, out_buffer);
+}
+
+/// Spurious wakeups are possible and no precision of timing is guaranteed.
+pub fn nanosleep(seconds: u64, nanoseconds: u64) void {
+ var req = timespec{
+ .tv_sec = cast(isize, seconds) orelse maxInt(isize),
+ .tv_nsec = cast(isize, nanoseconds) orelse maxInt(isize),
+ };
+ var rem: timespec = undefined;
+ while (true) {
+ switch (errno(system.nanosleep(&req, &rem))) {
+ .FAULT => unreachable,
+ .INVAL => {
+ // Sometimes Darwin returns EINVAL for no reason.
+ // We treat it as a spurious wakeup.
+ return;
+ },
+ .INTR => {
+ req = rem;
+ continue;
+ },
+ // This prong handles success as well as unexpected errors.
+ else => return,
+ }
+ }
+}
+
+pub fn dl_iterate_phdr(
+ context: anytype,
+ comptime Error: type,
+ comptime callback: fn (info: *dl_phdr_info, size: usize, context: @TypeOf(context)) Error!void,
+) Error!void {
+ const Context = @TypeOf(context);
+ const elf = std.elf;
+ const dl = @import("dynamic_library.zig");
+
+ switch (builtin.object_format) {
+ .elf, .c => {},
+ else => @compileError("dl_iterate_phdr is not available for this target"),
+ }
+
+ if (builtin.link_libc) {
+ switch (system.dl_iterate_phdr(struct {
+ fn callbackC(info: *dl_phdr_info, size: usize, data: ?*anyopaque) callconv(.C) c_int {
+ const context_ptr: *const Context = @ptrCast(@alignCast(data));
+ callback(info, size, context_ptr.*) catch |err| return @intFromError(err);
+ return 0;
+ }
+ }.callbackC, @ptrCast(@constCast(&context)))) {
+ 0 => return,
+ else => |err| return @as(Error, @errorCast(@errorFromInt(@as(std.meta.Int(.unsigned, @bitSizeOf(anyerror)), @intCast(err))))),
+ }
+ }
+
+ const elf_base = std.process.getBaseAddress();
+ const ehdr: *elf.Ehdr = @ptrFromInt(elf_base);
+ // Make sure the base address points to an ELF image.
+ assert(mem.eql(u8, ehdr.e_ident[0..4], elf.MAGIC));
+ const n_phdr = ehdr.e_phnum;
+ const phdrs = (@as([*]elf.Phdr, @ptrFromInt(elf_base + ehdr.e_phoff)))[0..n_phdr];
+
+ var it = dl.linkmap_iterator(phdrs) catch unreachable;
+
+ // The executable has no dynamic link segment, create a single entry for
+ // the whole ELF image.
+ if (it.end()) {
+ // Find the base address for the ELF image, if this is a PIE the value
+ // is non-zero.
+ const base_address = for (phdrs) |*phdr| {
+ if (phdr.p_type == elf.PT_PHDR) {
+ break @intFromPtr(phdrs.ptr) - phdr.p_vaddr;
+ // We could try computing the difference between _DYNAMIC and
+ // the p_vaddr of the PT_DYNAMIC section, but using the phdr is
+ // good enough (Is it?).
+ }
+ } else unreachable;
+
+ var info = dl_phdr_info{
+ .dlpi_addr = base_address,
+ .dlpi_name = "/proc/self/exe",
+ .dlpi_phdr = phdrs.ptr,
+ .dlpi_phnum = ehdr.e_phnum,
+ };
+
+ return callback(&info, @sizeOf(dl_phdr_info), context);
+ }
+
+ // Last return value from the callback function.
+ while (it.next()) |entry| {
+ var dlpi_phdr: [*]elf.Phdr = undefined;
+ var dlpi_phnum: u16 = undefined;
+
+ if (entry.l_addr != 0) {
+ const elf_header: *elf.Ehdr = @ptrFromInt(entry.l_addr);
+ dlpi_phdr = @ptrFromInt(entry.l_addr + elf_header.e_phoff);
+ dlpi_phnum = elf_header.e_phnum;
+ } else {
+ // This is the running ELF image
+ dlpi_phdr = @ptrFromInt(elf_base + ehdr.e_phoff);
+ dlpi_phnum = ehdr.e_phnum;
+ }
+
+ var info = dl_phdr_info{
+ .dlpi_addr = entry.l_addr,
+ .dlpi_name = entry.l_name,
+ .dlpi_phdr = dlpi_phdr,
+ .dlpi_phnum = dlpi_phnum,
+ };
+
+ try callback(&info, @sizeOf(dl_phdr_info), context);
+ }
+}
+
+pub const ClockGetTimeError = error{UnsupportedClock} || UnexpectedError;
+
+/// TODO: change this to return the timespec as a return value
+/// TODO: look into making clk_id an enum
+pub fn clock_gettime(clk_id: i32, tp: *timespec) ClockGetTimeError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ var ts: timestamp_t = undefined;
+ switch (system.clock_time_get(@bitCast(clk_id), 1, &ts)) {
+ .SUCCESS => {
+ tp.* = .{
+ .tv_sec = @intCast(ts / std.time.ns_per_s),
+ .tv_nsec = @intCast(ts % std.time.ns_per_s),
+ };
+ },
+ .INVAL => return error.UnsupportedClock,
+ else => |err| return unexpectedErrno(err),
+ }
+ return;
+ }
+ if (native_os == .windows) {
+ if (clk_id == CLOCK.REALTIME) {
+ var ft: windows.FILETIME = undefined;
+ windows.kernel32.GetSystemTimeAsFileTime(&ft);
+ // FileTime has a granularity of 100 nanoseconds and uses the NTFS/Windows epoch.
+ const ft64 = (@as(u64, ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+ const ft_per_s = std.time.ns_per_s / 100;
+ tp.* = .{
+ .tv_sec = @as(i64, @intCast(ft64 / ft_per_s)) + std.time.epoch.windows,
+ .tv_nsec = @as(c_long, @intCast(ft64 % ft_per_s)) * 100,
+ };
+ return;
+ } else {
+ // TODO POSIX implementation of CLOCK.MONOTONIC on Windows.
+ return error.UnsupportedClock;
+ }
+ }
+
+ switch (errno(system.clock_gettime(clk_id, tp))) {
+ .SUCCESS => return,
+ .FAULT => unreachable,
+ .INVAL => return error.UnsupportedClock,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub fn clock_getres(clk_id: i32, res: *timespec) ClockGetTimeError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ var ts: timestamp_t = undefined;
+ switch (system.clock_res_get(@bitCast(clk_id), &ts)) {
+ .SUCCESS => res.* = .{
+ .tv_sec = @intCast(ts / std.time.ns_per_s),
+ .tv_nsec = @intCast(ts % std.time.ns_per_s),
+ },
+ .INVAL => return error.UnsupportedClock,
+ else => |err| return unexpectedErrno(err),
+ }
+ return;
+ }
+
+ switch (errno(system.clock_getres(clk_id, res))) {
+ .SUCCESS => return,
+ .FAULT => unreachable,
+ .INVAL => return error.UnsupportedClock,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const SchedGetAffinityError = error{PermissionDenied} || UnexpectedError;
+
+pub fn sched_getaffinity(pid: pid_t) SchedGetAffinityError!cpu_set_t {
+ var set: cpu_set_t = undefined;
+ switch (errno(system.sched_getaffinity(pid, @sizeOf(cpu_set_t), &set))) {
+ .SUCCESS => return set,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .SRCH => unreachable,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const SigaltstackError = error{
+ /// The supplied stack size was less than MINSIGSTKSZ.
+ SizeTooSmall,
+
+ /// Attempted to change the signal stack while it was active.
+ PermissionDenied,
+} || UnexpectedError;
+
+pub fn sigaltstack(ss: ?*stack_t, old_ss: ?*stack_t) SigaltstackError!void {
+ switch (errno(system.sigaltstack(ss, old_ss))) {
+ .SUCCESS => return,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .NOMEM => return error.SizeTooSmall,
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Examine and change a signal action.
+pub fn sigaction(sig: u6, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) error{OperationNotSupported}!void {
+ switch (errno(system.sigaction(sig, act, oact))) {
+ .SUCCESS => return,
+ .INVAL, .NOSYS => return error.OperationNotSupported,
+ else => unreachable,
+ }
+}
+
+/// Sets the thread signal mask.
+pub fn sigprocmask(flags: u32, noalias set: ?*const sigset_t, noalias oldset: ?*sigset_t) void {
+ switch (errno(system.sigprocmask(@bitCast(flags), set, oldset))) {
+ .SUCCESS => return,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ else => unreachable,
+ }
+}
+
+pub const FutimensError = error{
+ /// times is NULL, or both tv_nsec values are UTIME_NOW, and either:
+ /// * the effective user ID of the caller does not match the owner
+ /// of the file, the caller does not have write access to the
+ /// file, and the caller is not privileged (Linux: does not have
+ /// either the CAP_FOWNER or the CAP_DAC_OVERRIDE capability);
+ /// or,
+ /// * the file is marked immutable (see chattr(1)).
+ AccessDenied,
+
+ /// The caller attempted to change one or both timestamps to a value
+ /// other than the current time, or to change one of the timestamps
+ /// to the current time while leaving the other timestamp unchanged,
+ /// (i.e., times is not NULL, neither tv_nsec field is UTIME_NOW,
+ /// and neither tv_nsec field is UTIME_OMIT) and either:
+ /// * the caller's effective user ID does not match the owner of
+ /// file, and the caller is not privileged (Linux: does not have
+ /// the CAP_FOWNER capability); or,
+ /// * the file is marked append-only or immutable (see chattr(1)).
+ PermissionDenied,
+
+ ReadOnlyFileSystem,
+} || UnexpectedError;
+
+pub fn futimens(fd: fd_t, times: *const [2]timespec) FutimensError!void {
+ if (native_os == .wasi and !builtin.link_libc) {
+ // TODO WASI encodes `wasi.fstflags` to signify magic values
+ // similar to UTIME_NOW and UTIME_OMIT. Currently, we ignore
+ // this here, but we should really handle it somehow.
+ const atim = times[0].toTimestamp();
+ const mtim = times[1].toTimestamp();
+ switch (wasi.fd_filestat_set_times(fd, atim, mtim, .{
+ .ATIM = true,
+ .MTIM = true,
+ })) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.PermissionDenied,
+ .BADF => unreachable, // always a race condition
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ROFS => return error.ReadOnlyFileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+
+ switch (errno(system.futimens(fd, times))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .PERM => return error.PermissionDenied,
+ .BADF => unreachable, // always a race condition
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .ROFS => return error.ReadOnlyFileSystem,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const GetHostNameError = error{PermissionDenied} || UnexpectedError;
+
+pub fn gethostname(name_buffer: *[HOST_NAME_MAX]u8) GetHostNameError![]u8 {
+ if (builtin.link_libc) {
+ switch (errno(system.gethostname(name_buffer, name_buffer.len))) {
+ .SUCCESS => return mem.sliceTo(name_buffer, 0),
+ .FAULT => unreachable,
+ .NAMETOOLONG => unreachable, // HOST_NAME_MAX prevents this
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ if (native_os == .linux) {
+ const uts = uname();
+ const hostname = mem.sliceTo(&uts.nodename, 0);
+ const result = name_buffer[0..hostname.len];
+ @memcpy(result, hostname);
+ return result;
+ }
+
+ @compileError("TODO implement gethostname for this OS");
+}
+
+pub fn uname() utsname {
+ var uts: utsname = undefined;
+ switch (errno(system.uname(&uts))) {
+ .SUCCESS => return uts,
+ .FAULT => unreachable,
+ else => unreachable,
+ }
+}
+
+pub fn res_mkquery(
+ op: u4,
+ dname: []const u8,
+ class: u8,
+ ty: u8,
+ data: []const u8,
+ newrr: ?[*]const u8,
+ buf: []u8,
+) usize {
+ _ = data;
+ _ = newrr;
+ // This implementation is ported from musl libc.
+ // A more idiomatic "ziggy" implementation would be welcome.
+ var name = dname;
+ if (mem.endsWith(u8, name, ".")) name.len -= 1;
+ assert(name.len <= 253);
+ const n = 17 + name.len + @intFromBool(name.len != 0);
+
+ // Construct query template - ID will be filled later
+ var q: [280]u8 = undefined;
+ @memset(q[0..n], 0);
+ q[2] = @as(u8, op) * 8 + 1;
+ q[5] = 1;
+ @memcpy(q[13..][0..name.len], name);
+ var i: usize = 13;
+ var j: usize = undefined;
+ while (q[i] != 0) : (i = j + 1) {
+ j = i;
+ while (q[j] != 0 and q[j] != '.') : (j += 1) {}
+ // TODO determine the circumstances for this and whether or
+ // not this should be an error.
+ if (j - i - 1 > 62) unreachable;
+ q[i - 1] = @intCast(j - i);
+ }
+ q[i + 1] = ty;
+ q[i + 3] = class;
+
+ // Make a reasonably unpredictable id
+ var ts: timespec = undefined;
+ clock_gettime(CLOCK.REALTIME, &ts) catch {};
+ const UInt = std.meta.Int(.unsigned, @bitSizeOf(@TypeOf(ts.tv_nsec)));
+ const unsec: UInt = @bitCast(ts.tv_nsec);
+ const id: u32 = @truncate(unsec + unsec / 65536);
+ q[0] = @truncate(id / 256);
+ q[1] = @truncate(id);
+
+ @memcpy(buf[0..n], q[0..n]);
+ return n;
+}
+
+pub const SendError = error{
+ /// (For UNIX domain sockets, which are identified by pathname) Write permission is denied
+ /// on the destination socket file, or search permission is denied for one of the
+ /// directories the path prefix. (See path_resolution(7).)
+ /// (For UDP sockets) An attempt was made to send to a network/broadcast address as though
+ /// it was a unicast address.
+ AccessDenied,
+
+ /// The socket is marked nonblocking and the requested operation would block, and
+ /// there is no global event loop configured.
+ /// It's also possible to get this error under the following condition:
+ /// (Internet domain datagram sockets) The socket referred to by sockfd had not previously
+ /// been bound to an address and, upon attempting to bind it to an ephemeral port, it was
+ /// determined that all port numbers in the ephemeral port range are currently in use. See
+ /// the discussion of /proc/sys/net/ipv4/ip_local_port_range in ip(7).
+ WouldBlock,
+
+ /// Another Fast Open is already in progress.
+ FastOpenAlreadyInProgress,
+
+ /// Connection reset by peer.
+ ConnectionResetByPeer,
+
+ /// The socket type requires that message be sent atomically, and the size of the message
+ /// to be sent made this impossible. The message is not transmitted.
+ MessageTooBig,
+
+ /// The output queue for a network interface was full. This generally indicates that the
+ /// interface has stopped sending, but may be caused by transient congestion. (Normally,
+ /// this does not occur in Linux. Packets are just silently dropped when a device queue
+ /// overflows.)
+ /// This is also caused when there is not enough kernel memory available.
+ SystemResources,
+
+ /// The local end has been shut down on a connection oriented socket. In this case, the
+ /// process will also receive a SIGPIPE unless MSG.NOSIGNAL is set.
+ BrokenPipe,
+
+ FileDescriptorNotASocket,
+
+ /// Network is unreachable.
+ NetworkUnreachable,
+
+ /// The local network interface used to reach the destination is down.
+ NetworkSubsystemFailed,
+} || UnexpectedError;
+
+pub const SendMsgError = SendError || error{
+ /// The passed address didn't have the correct address family in its sa_family field.
+ AddressFamilyNotSupported,
+
+ /// Returned when socket is AF.UNIX and the given path has a symlink loop.
+ SymLinkLoop,
+
+ /// Returned when socket is AF.UNIX and the given path length exceeds `max_path_bytes` bytes.
+ NameTooLong,
+
+ /// Returned when socket is AF.UNIX and the given path does not point to an existing file.
+ FileNotFound,
+ NotDir,
+
+ /// The socket is not connected (connection-oriented sockets only).
+ SocketNotConnected,
+ AddressNotAvailable,
+};
+
+pub fn sendmsg(
+ /// The file descriptor of the sending socket.
+ sockfd: socket_t,
+ /// Message header and iovecs
+ msg: *const msghdr_const,
+ flags: u32,
+) SendMsgError!usize {
+ while (true) {
+ const rc = system.sendmsg(sockfd, msg, flags);
+ if (native_os == .windows) {
+ if (rc == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSAEACCES => return error.AccessDenied,
+ .WSAEADDRNOTAVAIL => return error.AddressNotAvailable,
+ .WSAECONNRESET => return error.ConnectionResetByPeer,
+ .WSAEMSGSIZE => return error.MessageTooBig,
+ .WSAENOBUFS => return error.SystemResources,
+ .WSAENOTSOCK => return error.FileDescriptorNotASocket,
+ .WSAEAFNOSUPPORT => return error.AddressFamilyNotSupported,
+ .WSAEDESTADDRREQ => unreachable, // A destination address is required.
+ .WSAEFAULT => unreachable, // The lpBuffers, lpTo, lpOverlapped, lpNumberOfBytesSent, or lpCompletionRoutine parameters are not part of the user address space, or the lpTo parameter is too small.
+ .WSAEHOSTUNREACH => return error.NetworkUnreachable,
+ // TODO: WSAEINPROGRESS, WSAEINTR
+ .WSAEINVAL => unreachable,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAENETRESET => return error.ConnectionResetByPeer,
+ .WSAENETUNREACH => return error.NetworkUnreachable,
+ .WSAENOTCONN => return error.SocketNotConnected,
+ .WSAESHUTDOWN => unreachable, // The socket has been shut down; it is not possible to WSASendTo on a socket after shutdown has been invoked with how set to SD_SEND or SD_BOTH.
+ .WSAEWOULDBLOCK => return error.WouldBlock,
+ .WSANOTINITIALISED => unreachable, // A successful WSAStartup call must occur before using this function.
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ } else {
+ return @intCast(rc);
+ }
+ } else {
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+
+ .ACCES => return error.AccessDenied,
+ .AGAIN => return error.WouldBlock,
+ .ALREADY => return error.FastOpenAlreadyInProgress,
+ .BADF => unreachable, // always a race condition
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .DESTADDRREQ => unreachable, // The socket is not connection-mode, and no peer address is set.
+ .FAULT => unreachable, // An invalid user space address was specified for an argument.
+ .INTR => continue,
+ .INVAL => unreachable, // Invalid argument passed.
+ .ISCONN => unreachable, // connection-mode socket was connected already but a recipient was specified
+ .MSGSIZE => return error.MessageTooBig,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
+ .OPNOTSUPP => unreachable, // Some bit in the flags argument is inappropriate for the socket type.
+ .PIPE => return error.BrokenPipe,
+ .AFNOSUPPORT => return error.AddressFamilyNotSupported,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .HOSTUNREACH => return error.NetworkUnreachable,
+ .NETUNREACH => return error.NetworkUnreachable,
+ .NOTCONN => return error.SocketNotConnected,
+ .NETDOWN => return error.NetworkSubsystemFailed,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ }
+}
+
+pub const SendToError = SendMsgError || error{
+ /// The destination address is not reachable by the bound address.
+ UnreachableAddress,
+};
+
+/// Transmit a message to another socket.
+///
+/// The `sendto` call may be used only when the socket is in a connected state (so that the intended
+/// recipient is known). The following call
+///
+/// send(sockfd, buf, len, flags);
+///
+/// is equivalent to
+///
+/// sendto(sockfd, buf, len, flags, NULL, 0);
+///
+/// If sendto() is used on a connection-mode (`SOCK.STREAM`, `SOCK.SEQPACKET`) socket, the arguments
+/// `dest_addr` and `addrlen` are asserted to be `null` and `0` respectively, and asserted
+/// that the socket was actually connected.
+/// Otherwise, the address of the target is given by `dest_addr` with `addrlen` specifying its size.
+///
+/// If the message is too long to pass atomically through the underlying protocol,
+/// `SendError.MessageTooBig` is returned, and the message is not transmitted.
+///
+/// There is no indication of failure to deliver.
+///
+/// When the message does not fit into the send buffer of the socket, `sendto` normally blocks,
+/// unless the socket has been placed in nonblocking I/O mode. In nonblocking mode it would fail
+/// with `SendError.WouldBlock`. The `select` call may be used to determine when it is
+/// possible to send more data.
+pub fn sendto(
+ /// The file descriptor of the sending socket.
+ sockfd: socket_t,
+ /// Message to send.
+ buf: []const u8,
+ flags: u32,
+ dest_addr: ?*const sockaddr,
+ addrlen: socklen_t,
+) SendToError!usize {
+ if (native_os == .windows) {
+ switch (windows.sendto(sockfd, buf.ptr, buf.len, flags, dest_addr, addrlen)) {
+ windows.ws2_32.SOCKET_ERROR => switch (windows.ws2_32.WSAGetLastError()) {
+ .WSAEACCES => return error.AccessDenied,
+ .WSAEADDRNOTAVAIL => return error.AddressNotAvailable,
+ .WSAECONNRESET => return error.ConnectionResetByPeer,
+ .WSAEMSGSIZE => return error.MessageTooBig,
+ .WSAENOBUFS => return error.SystemResources,
+ .WSAENOTSOCK => return error.FileDescriptorNotASocket,
+ .WSAEAFNOSUPPORT => return error.AddressFamilyNotSupported,
+ .WSAEDESTADDRREQ => unreachable, // A destination address is required.
+ .WSAEFAULT => unreachable, // The lpBuffers, lpTo, lpOverlapped, lpNumberOfBytesSent, or lpCompletionRoutine parameters are not part of the user address space, or the lpTo parameter is too small.
+ .WSAEHOSTUNREACH => return error.NetworkUnreachable,
+ // TODO: WSAEINPROGRESS, WSAEINTR
+ .WSAEINVAL => unreachable,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAENETRESET => return error.ConnectionResetByPeer,
+ .WSAENETUNREACH => return error.NetworkUnreachable,
+ .WSAENOTCONN => return error.SocketNotConnected,
+ .WSAESHUTDOWN => unreachable, // The socket has been shut down; it is not possible to WSASendTo on a socket after shutdown has been invoked with how set to SD_SEND or SD_BOTH.
+ .WSAEWOULDBLOCK => return error.WouldBlock,
+ .WSANOTINITIALISED => unreachable, // A successful WSAStartup call must occur before using this function.
+ else => |err| return windows.unexpectedWSAError(err),
+ },
+ else => |rc| return @intCast(rc),
+ }
+ }
+ while (true) {
+ const rc = system.sendto(sockfd, buf.ptr, buf.len, flags, dest_addr, addrlen);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+
+ .ACCES => return error.AccessDenied,
+ .AGAIN => return error.WouldBlock,
+ .ALREADY => return error.FastOpenAlreadyInProgress,
+ .BADF => unreachable, // always a race condition
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .DESTADDRREQ => unreachable, // The socket is not connection-mode, and no peer address is set.
+ .FAULT => unreachable, // An invalid user space address was specified for an argument.
+ .INTR => continue,
+ .INVAL => return error.UnreachableAddress,
+ .ISCONN => unreachable, // connection-mode socket was connected already but a recipient was specified
+ .MSGSIZE => return error.MessageTooBig,
+ .NOBUFS => return error.SystemResources,
+ .NOMEM => return error.SystemResources,
+ .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
+ .OPNOTSUPP => unreachable, // Some bit in the flags argument is inappropriate for the socket type.
+ .PIPE => return error.BrokenPipe,
+ .AFNOSUPPORT => return error.AddressFamilyNotSupported,
+ .LOOP => return error.SymLinkLoop,
+ .NAMETOOLONG => return error.NameTooLong,
+ .NOENT => return error.FileNotFound,
+ .NOTDIR => return error.NotDir,
+ .HOSTUNREACH => return error.NetworkUnreachable,
+ .NETUNREACH => return error.NetworkUnreachable,
+ .NOTCONN => return error.SocketNotConnected,
+ .NETDOWN => return error.NetworkSubsystemFailed,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+/// Transmit a message to another socket.
+///
+/// The `send` call may be used only when the socket is in a connected state (so that the intended
+/// recipient is known). The only difference between `send` and `write` is the presence of
+/// flags. With a zero flags argument, `send` is equivalent to `write`. Also, the following
+/// call
+///
+/// send(sockfd, buf, len, flags);
+///
+/// is equivalent to
+///
+/// sendto(sockfd, buf, len, flags, NULL, 0);
+///
+/// There is no indication of failure to deliver.
+///
+/// When the message does not fit into the send buffer of the socket, `send` normally blocks,
+/// unless the socket has been placed in nonblocking I/O mode. In nonblocking mode it would fail
+/// with `SendError.WouldBlock`. The `select` call may be used to determine when it is
+/// possible to send more data.
+pub fn send(
+ /// The file descriptor of the sending socket.
+ sockfd: socket_t,
+ buf: []const u8,
+ flags: u32,
+) SendError!usize {
+ return sendto(sockfd, buf, flags, null, 0) catch |err| switch (err) {
+ error.AddressFamilyNotSupported => unreachable,
+ error.SymLinkLoop => unreachable,
+ error.NameTooLong => unreachable,
+ error.FileNotFound => unreachable,
+ error.NotDir => unreachable,
+ error.NetworkUnreachable => unreachable,
+ error.AddressNotAvailable => unreachable,
+ error.SocketNotConnected => unreachable,
+ error.UnreachableAddress => unreachable,
+ else => |e| return e,
+ };
+}
+
+pub const SendFileError = PReadError || WriteError || SendError;
+
+/// Transfer data between file descriptors, with optional headers and trailers.
+///
+/// Returns the number of bytes written, which can be zero.
+///
+/// The `sendfile` call copies `in_len` bytes from one file descriptor to another. When possible,
+/// this is done within the operating system kernel, which can provide better performance
+/// characteristics than transferring data from kernel to user space and back, such as with
+/// `read` and `write` calls. When `in_len` is `0`, it means to copy until the end of the input file has been
+/// reached. Note, however, that partial writes are still possible in this case.
+///
+/// `in_fd` must be a file descriptor opened for reading, and `out_fd` must be a file descriptor
+/// opened for writing. They may be any kind of file descriptor; however, if `in_fd` is not a regular
+/// file system file, it may cause this function to fall back to calling `read` and `write`, in which case
+/// atomicity guarantees no longer apply.
+///
+/// Copying begins reading at `in_offset`. The input file descriptor seek position is ignored and not updated.
+/// If the output file descriptor has a seek position, it is updated as bytes are written. When
+/// `in_offset` is past the end of the input file, it successfully reads 0 bytes.
+///
+/// `flags` has different meanings per operating system; refer to the respective man pages.
+///
+/// These systems support atomically sending everything, including headers and trailers:
+/// * macOS
+/// * FreeBSD
+///
+/// These systems support in-kernel data copying, but headers and trailers are not sent atomically:
+/// * Linux
+///
+/// Other systems fall back to calling `read` / `write`.
+///
+/// Linux has a limit on how many bytes may be transferred in one `sendfile` call, which is `0x7ffff000`
+/// on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as
+/// well as stuffing the errno codes into the last `4096` values. This is noted on the `sendfile` man page.
+/// The limit on Darwin is `0x7fffffff`, trying to write more than that returns EINVAL.
+/// The corresponding POSIX limit on this is `maxInt(isize)`.
+pub fn sendfile(
+ out_fd: fd_t,
+ in_fd: fd_t,
+ in_offset: u64,
+ in_len: u64,
+ headers: []const iovec_const,
+ trailers: []const iovec_const,
+ flags: u32,
+) SendFileError!usize {
+ var header_done = false;
+ var total_written: usize = 0;
+
+ // Prevents EOVERFLOW.
+ const size_t = std.meta.Int(.unsigned, @typeInfo(usize).Int.bits - 1);
+ const max_count = switch (native_os) {
+ .linux => 0x7ffff000,
+ .macos, .ios, .watchos, .tvos => maxInt(i32),
+ else => maxInt(size_t),
+ };
+
+ switch (native_os) {
+ .linux => sf: {
+ // sendfile() first appeared in Linux 2.2, glibc 2.1.
+ const call_sf = comptime if (builtin.link_libc)
+ std.c.versionCheck(.{ .major = 2, .minor = 1, .patch = 0 })
+ else
+ builtin.os.version_range.linux.range.max.order(.{ .major = 2, .minor = 2, .patch = 0 }) != .lt;
+ if (!call_sf) break :sf;
+
+ if (headers.len != 0) {
+ const amt = try writev(out_fd, headers);
+ total_written += amt;
+ if (amt < count_iovec_bytes(headers)) return total_written;
+ header_done = true;
+ }
+
+ // Here we match BSD behavior, making a zero count value send as many bytes as possible.
+ const adjusted_count = if (in_len == 0) max_count else @min(in_len, max_count);
+
+ const sendfile_sym = if (lfs64_abi) system.sendfile64 else system.sendfile;
+ while (true) {
+ var offset: off_t = @bitCast(in_offset);
+ const rc = sendfile_sym(out_fd, in_fd, &offset, adjusted_count);
+ switch (errno(rc)) {
+ .SUCCESS => {
+ const amt: usize = @bitCast(rc);
+ total_written += amt;
+ if (in_len == 0 and amt == 0) {
+ // We have detected EOF from `in_fd`.
+ break;
+ } else if (amt < in_len) {
+ return total_written;
+ } else {
+ break;
+ }
+ },
+
+ .BADF => unreachable, // Always a race condition.
+ .FAULT => unreachable, // Segmentation fault.
+ .OVERFLOW => unreachable, // We avoid passing too large of a `count`.
+ .NOTCONN => return error.BrokenPipe, // `out_fd` is an unconnected socket
+
+ .INVAL, .NOSYS => {
+ // EINVAL could be any of the following situations:
+ // * Descriptor is not valid or locked
+ // * an mmap(2)-like operation is not available for in_fd
+ // * count is negative
+ // * out_fd has the APPEND flag set
+ // Because of the "mmap(2)-like operation" possibility, we fall back to doing read/write
+ // manually, the same as ENOSYS.
+ break :sf;
+ },
+ .AGAIN => return error.WouldBlock,
+ .IO => return error.InputOutput,
+ .PIPE => return error.BrokenPipe,
+ .NOMEM => return error.SystemResources,
+ .NXIO => return error.Unseekable,
+ .SPIPE => return error.Unseekable,
+ else => |err| {
+ unexpectedErrno(err) catch {};
+ break :sf;
+ },
+ }
+ }
+
+ if (trailers.len != 0) {
+ total_written += try writev(out_fd, trailers);
+ }
+
+ return total_written;
+ },
+ .freebsd => sf: {
+ var hdtr_data: std.c.sf_hdtr = undefined;
+ var hdtr: ?*std.c.sf_hdtr = null;
+ if (headers.len != 0 or trailers.len != 0) {
+ // Here we carefully avoid `@intCast` by returning partial writes when
+ // too many io vectors are provided.
+ const hdr_cnt = cast(u31, headers.len) orelse maxInt(u31);
+ if (headers.len > hdr_cnt) return writev(out_fd, headers);
+
+ const trl_cnt = cast(u31, trailers.len) orelse maxInt(u31);
+
+ hdtr_data = std.c.sf_hdtr{
+ .headers = headers.ptr,
+ .hdr_cnt = hdr_cnt,
+ .trailers = trailers.ptr,
+ .trl_cnt = trl_cnt,
+ };
+ hdtr = &hdtr_data;
+ }
+
+ while (true) {
+ var sbytes: off_t = undefined;
+ const err = errno(system.sendfile(in_fd, out_fd, @bitCast(in_offset), @min(in_len, max_count), hdtr, &sbytes, flags));
+ const amt: usize = @bitCast(sbytes);
+ switch (err) {
+ .SUCCESS => return amt,
+
+ .BADF => unreachable, // Always a race condition.
+ .FAULT => unreachable, // Segmentation fault.
+ .NOTCONN => return error.BrokenPipe, // `out_fd` is an unconnected socket
+
+ .INVAL, .OPNOTSUPP, .NOTSOCK, .NOSYS => {
+ // EINVAL could be any of the following situations:
+ // * The fd argument is not a regular file.
+ // * The s argument is not a SOCK.STREAM type socket.
+ // * The offset argument is negative.
+ // Because of some of these possibilities, we fall back to doing read/write
+ // manually, the same as ENOSYS.
+ break :sf;
+ },
+
+ .INTR => if (amt != 0) return amt else continue,
+
+ .AGAIN => if (amt != 0) {
+ return amt;
+ } else {
+ return error.WouldBlock;
+ },
+
+ .BUSY => if (amt != 0) {
+ return amt;
+ } else {
+ return error.WouldBlock;
+ },
+
+ .IO => return error.InputOutput,
+ .NOBUFS => return error.SystemResources,
+ .PIPE => return error.BrokenPipe,
+
+ else => {
+ unexpectedErrno(err) catch {};
+ if (amt != 0) {
+ return amt;
+ } else {
+ break :sf;
+ }
+ },
+ }
+ }
+ },
+ .macos, .ios, .tvos, .watchos => sf: {
+ var hdtr_data: std.c.sf_hdtr = undefined;
+ var hdtr: ?*std.c.sf_hdtr = null;
+ if (headers.len != 0 or trailers.len != 0) {
+ // Here we carefully avoid `@intCast` by returning partial writes when
+ // too many io vectors are provided.
+ const hdr_cnt = cast(u31, headers.len) orelse maxInt(u31);
+ if (headers.len > hdr_cnt) return writev(out_fd, headers);
+
+ const trl_cnt = cast(u31, trailers.len) orelse maxInt(u31);
+
+ hdtr_data = std.c.sf_hdtr{
+ .headers = headers.ptr,
+ .hdr_cnt = hdr_cnt,
+ .trailers = trailers.ptr,
+ .trl_cnt = trl_cnt,
+ };
+ hdtr = &hdtr_data;
+ }
+
+ while (true) {
+ var sbytes: off_t = @min(in_len, max_count);
+ const err = errno(system.sendfile(in_fd, out_fd, @bitCast(in_offset), &sbytes, hdtr, flags));
+ const amt: usize = @bitCast(sbytes);
+ switch (err) {
+ .SUCCESS => return amt,
+
+ .BADF => unreachable, // Always a race condition.
+ .FAULT => unreachable, // Segmentation fault.
+ .INVAL => unreachable,
+ .NOTCONN => return error.BrokenPipe, // `out_fd` is an unconnected socket
+
+ .OPNOTSUPP, .NOTSOCK, .NOSYS => break :sf,
+
+ .INTR => if (amt != 0) return amt else continue,
+
+ .AGAIN => if (amt != 0) {
+ return amt;
+ } else {
+ return error.WouldBlock;
+ },
+
+ .IO => return error.InputOutput,
+ .PIPE => return error.BrokenPipe,
+
+ else => {
+ unexpectedErrno(err) catch {};
+ if (amt != 0) {
+ return amt;
+ } else {
+ break :sf;
+ }
+ },
+ }
+ }
+ },
+ else => {}, // fall back to read/write
+ }
+
+ if (headers.len != 0 and !header_done) {
+ const amt = try writev(out_fd, headers);
+ total_written += amt;
+ if (amt < count_iovec_bytes(headers)) return total_written;
+ }
+
+ rw: {
+ var buf: [8 * 4096]u8 = undefined;
+ // Here we match BSD behavior, making a zero count value send as many bytes as possible.
+ const adjusted_count = if (in_len == 0) buf.len else @min(buf.len, in_len);
+ const amt_read = try pread(in_fd, buf[0..adjusted_count], in_offset);
+ if (amt_read == 0) {
+ if (in_len == 0) {
+ // We have detected EOF from `in_fd`.
+ break :rw;
+ } else {
+ return total_written;
+ }
+ }
+ const amt_written = try write(out_fd, buf[0..amt_read]);
+ total_written += amt_written;
+ if (amt_written < in_len or in_len == 0) return total_written;
+ }
+
+ if (trailers.len != 0) {
+ total_written += try writev(out_fd, trailers);
+ }
+
+ return total_written;
+}
+
+fn count_iovec_bytes(iovs: []const iovec_const) usize {
+ var count: usize = 0;
+ for (iovs) |iov| {
+ count += iov.iov_len;
+ }
+ return count;
+}
+
+pub const CopyFileRangeError = error{
+ FileTooBig,
+ InputOutput,
+ /// `fd_in` is not open for reading; or `fd_out` is not open for writing;
+ /// or the `APPEND` flag is set for `fd_out`.
+ FilesOpenedWithWrongFlags,
+ IsDir,
+ OutOfMemory,
+ NoSpaceLeft,
+ Unseekable,
+ PermissionDenied,
+ SwapFile,
+ CorruptedData,
+} || PReadError || PWriteError || UnexpectedError;
+
+/// Transfer data between file descriptors at specified offsets.
+///
+/// Returns the number of bytes written, which can less than requested.
+///
+/// The `copy_file_range` call copies `len` bytes from one file descriptor to another. When possible,
+/// this is done within the operating system kernel, which can provide better performance
+/// characteristics than transferring data from kernel to user space and back, such as with
+/// `pread` and `pwrite` calls.
+///
+/// `fd_in` must be a file descriptor opened for reading, and `fd_out` must be a file descriptor
+/// opened for writing. They may be any kind of file descriptor; however, if `fd_in` is not a regular
+/// file system file, it may cause this function to fall back to calling `pread` and `pwrite`, in which case
+/// atomicity guarantees no longer apply.
+///
+/// If `fd_in` and `fd_out` are the same, source and target ranges must not overlap.
+/// The file descriptor seek positions are ignored and not updated.
+/// When `off_in` is past the end of the input file, it successfully reads 0 bytes.
+///
+/// `flags` has different meanings per operating system; refer to the respective man pages.
+///
+/// These systems support in-kernel data copying:
+/// * Linux 4.5 (cross-filesystem 5.3)
+/// * FreeBSD 13.0
+///
+/// Other systems fall back to calling `pread` / `pwrite`.
+///
+/// Maximum offsets on Linux and FreeBSD are `maxInt(i64)`.
+pub fn copy_file_range(fd_in: fd_t, off_in: u64, fd_out: fd_t, off_out: u64, len: usize, flags: u32) CopyFileRangeError!usize {
+ const global = struct {
+ var has_copy_file_range = true;
+ };
+
+ if ((comptime builtin.os.isAtLeast(.freebsd, .{ .major = 13, .minor = 0, .patch = 0 }) orelse false) or
+ ((comptime builtin.os.isAtLeast(.linux, .{ .major = 4, .minor = 5, .patch = 0 }) orelse false and
+ std.c.versionCheck(.{ .major = 2, .minor = 27, .patch = 0 })) and
+ @atomicLoad(bool, &global.has_copy_file_range, .monotonic)))
+ {
+ var off_in_copy: i64 = @bitCast(off_in);
+ var off_out_copy: i64 = @bitCast(off_out);
+
+ while (true) {
+ const rc = system.copy_file_range(fd_in, &off_in_copy, fd_out, &off_out_copy, len, flags);
+ if (native_os == .freebsd) {
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .BADF => return error.FilesOpenedWithWrongFlags,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOSPC => return error.NoSpaceLeft,
+ .INVAL => break, // these may not be regular files, try fallback
+ .INTEGRITY => return error.CorruptedData,
+ .INTR => continue,
+ else => |err| return unexpectedErrno(err),
+ }
+ } else { // assume linux
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .BADF => return error.FilesOpenedWithWrongFlags,
+ .FBIG => return error.FileTooBig,
+ .IO => return error.InputOutput,
+ .ISDIR => return error.IsDir,
+ .NOSPC => return error.NoSpaceLeft,
+ .INVAL => break, // these may not be regular files, try fallback
+ .NOMEM => return error.OutOfMemory,
+ .OVERFLOW => return error.Unseekable,
+ .PERM => return error.PermissionDenied,
+ .TXTBSY => return error.SwapFile,
+ .XDEV => break, // support for cross-filesystem copy added in Linux 5.3, use fallback
+ .NOSYS => {
+ @atomicStore(bool, &global.has_copy_file_range, false, .monotonic);
+ break;
+ },
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ }
+ }
+
+ var buf: [8 * 4096]u8 = undefined;
+ const amt_read = try pread(fd_in, buf[0..@min(buf.len, len)], off_in);
+ if (amt_read == 0) return 0;
+ return pwrite(fd_out, buf[0..amt_read], off_out);
+}
+
+pub const PollError = error{
+ /// The network subsystem has failed.
+ NetworkSubsystemFailed,
+
+ /// The kernel had no space to allocate file descriptor tables.
+ SystemResources,
+} || UnexpectedError;
+
+pub fn poll(fds: []pollfd, timeout: i32) PollError!usize {
+ while (true) {
+ const fds_count = cast(nfds_t, fds.len) orelse return error.SystemResources;
+ const rc = system.poll(fds.ptr, fds_count, timeout);
+ if (native_os == .windows) {
+ if (rc == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAENOBUFS => return error.SystemResources,
+ // TODO: handle more errors
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ } else {
+ return @intCast(rc);
+ }
+ } else {
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .FAULT => unreachable,
+ .INTR => continue,
+ .INVAL => unreachable,
+ .NOMEM => return error.SystemResources,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ unreachable;
+ }
+}
+
+pub const PPollError = error{
+ /// The operation was interrupted by a delivery of a signal before it could complete.
+ SignalInterrupt,
+
+ /// The kernel had no space to allocate file descriptor tables.
+ SystemResources,
+} || UnexpectedError;
+
+pub fn ppoll(fds: []pollfd, timeout: ?*const timespec, mask: ?*const sigset_t) PPollError!usize {
+ var ts: timespec = undefined;
+ var ts_ptr: ?*timespec = null;
+ if (timeout) |timeout_ns| {
+ ts_ptr = &ts;
+ ts = timeout_ns.*;
+ }
+ const fds_count = cast(nfds_t, fds.len) orelse return error.SystemResources;
+ const rc = system.ppoll(fds.ptr, fds_count, ts_ptr, mask);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .FAULT => unreachable,
+ .INTR => return error.SignalInterrupt,
+ .INVAL => unreachable,
+ .NOMEM => return error.SystemResources,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const RecvFromError = error{
+ /// The socket is marked nonblocking and the requested operation would block, and
+ /// there is no global event loop configured.
+ WouldBlock,
+
+ /// A remote host refused to allow the network connection, typically because it is not
+ /// running the requested service.
+ ConnectionRefused,
+
+ /// Could not allocate kernel memory.
+ SystemResources,
+
+ ConnectionResetByPeer,
+ ConnectionTimedOut,
+
+ /// The socket has not been bound.
+ SocketNotBound,
+
+ /// The UDP message was too big for the buffer and part of it has been discarded
+ MessageTooBig,
+
+ /// The network subsystem has failed.
+ NetworkSubsystemFailed,
+
+ /// The socket is not connected (connection-oriented sockets only).
+ SocketNotConnected,
+} || UnexpectedError;
+
+pub fn recv(sock: socket_t, buf: []u8, flags: u32) RecvFromError!usize {
+ return recvfrom(sock, buf, flags, null, null);
+}
+
+/// If `sockfd` is opened in non blocking mode, the function will
+/// return error.WouldBlock when EAGAIN is received.
+pub fn recvfrom(
+ sockfd: socket_t,
+ buf: []u8,
+ flags: u32,
+ src_addr: ?*sockaddr,
+ addrlen: ?*socklen_t,
+) RecvFromError!usize {
+ while (true) {
+ const rc = system.recvfrom(sockfd, buf.ptr, buf.len, flags, src_addr, addrlen);
+ if (native_os == .windows) {
+ if (rc == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable,
+ .WSAECONNRESET => return error.ConnectionResetByPeer,
+ .WSAEINVAL => return error.SocketNotBound,
+ .WSAEMSGSIZE => return error.MessageTooBig,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAENOTCONN => return error.SocketNotConnected,
+ .WSAEWOULDBLOCK => return error.WouldBlock,
+ .WSAETIMEDOUT => return error.ConnectionTimedOut,
+ // TODO: handle more errors
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ } else {
+ return @intCast(rc);
+ }
+ } else {
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .BADF => unreachable, // always a race condition
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .NOTCONN => return error.SocketNotConnected,
+ .NOTSOCK => unreachable,
+ .INTR => continue,
+ .AGAIN => return error.WouldBlock,
+ .NOMEM => return error.SystemResources,
+ .CONNREFUSED => return error.ConnectionRefused,
+ .CONNRESET => return error.ConnectionResetByPeer,
+ .TIMEDOUT => return error.ConnectionTimedOut,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+ }
+}
+
+pub const DnExpandError = error{InvalidDnsPacket};
+
+pub fn dn_expand(
+ msg: []const u8,
+ comp_dn: []const u8,
+ exp_dn: []u8,
+) DnExpandError!usize {
+ // This implementation is ported from musl libc.
+ // A more idiomatic "ziggy" implementation would be welcome.
+ var p = comp_dn.ptr;
+ var len: usize = maxInt(usize);
+ const end = msg.ptr + msg.len;
+ if (p == end or exp_dn.len == 0) return error.InvalidDnsPacket;
+ var dest = exp_dn.ptr;
+ const dend = dest + @min(exp_dn.len, 254);
+ // detect reference loop using an iteration counter
+ var i: usize = 0;
+ while (i < msg.len) : (i += 2) {
+ // loop invariants: p<end, dest<dend
+ if ((p[0] & 0xc0) != 0) {
+ if (p + 1 == end) return error.InvalidDnsPacket;
+ const j = @as(usize, p[0] & 0x3f) << 8 | p[1];
+ if (len == maxInt(usize)) len = @intFromPtr(p) + 2 - @intFromPtr(comp_dn.ptr);
+ if (j >= msg.len) return error.InvalidDnsPacket;
+ p = msg.ptr + j;
+ } else if (p[0] != 0) {
+ if (dest != exp_dn.ptr) {
+ dest[0] = '.';
+ dest += 1;
+ }
+ var j = p[0];
+ p += 1;
+ if (j >= @intFromPtr(end) - @intFromPtr(p) or j >= @intFromPtr(dend) - @intFromPtr(dest)) {
+ return error.InvalidDnsPacket;
+ }
+ while (j != 0) {
+ j -= 1;
+ dest[0] = p[0];
+ dest += 1;
+ p += 1;
+ }
+ } else {
+ dest[0] = 0;
+ if (len == maxInt(usize)) len = @intFromPtr(p) + 1 - @intFromPtr(comp_dn.ptr);
+ return len;
+ }
+ }
+ return error.InvalidDnsPacket;
+}
+
+pub const SetSockOptError = error{
+ /// The socket is already connected, and a specified option cannot be set while the socket is connected.
+ AlreadyConnected,
+
+ /// The option is not supported by the protocol.
+ InvalidProtocolOption,
+
+ /// The send and receive timeout values are too big to fit into the timeout fields in the socket structure.
+ TimeoutTooBig,
+
+ /// Insufficient resources are available in the system to complete the call.
+ SystemResources,
+
+ // Setting the socket option requires more elevated permissions.
+ PermissionDenied,
+
+ NetworkSubsystemFailed,
+ FileDescriptorNotASocket,
+ SocketNotBound,
+ NoDevice,
+} || UnexpectedError;
+
+/// Set a socket's options.
+pub fn setsockopt(fd: socket_t, level: u32, optname: u32, opt: []const u8) SetSockOptError!void {
+ if (native_os == .windows) {
+ const rc = windows.ws2_32.setsockopt(fd, @intCast(level), @intCast(optname), opt.ptr, @intCast(opt.len));
+ if (rc == windows.ws2_32.SOCKET_ERROR) {
+ switch (windows.ws2_32.WSAGetLastError()) {
+ .WSANOTINITIALISED => unreachable,
+ .WSAENETDOWN => return error.NetworkSubsystemFailed,
+ .WSAEFAULT => unreachable,
+ .WSAENOTSOCK => return error.FileDescriptorNotASocket,
+ .WSAEINVAL => return error.SocketNotBound,
+ else => |err| return windows.unexpectedWSAError(err),
+ }
+ }
+ return;
+ } else {
+ switch (errno(system.setsockopt(fd, level, optname, opt.ptr, @intCast(opt.len)))) {
+ .SUCCESS => {},
+ .BADF => unreachable, // always a race condition
+ .NOTSOCK => unreachable, // always a race condition
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ .DOM => return error.TimeoutTooBig,
+ .ISCONN => return error.AlreadyConnected,
+ .NOPROTOOPT => return error.InvalidProtocolOption,
+ .NOMEM => return error.SystemResources,
+ .NOBUFS => return error.SystemResources,
+ .PERM => return error.PermissionDenied,
+ .NODEV => return error.NoDevice,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const MemFdCreateError = error{
+ SystemFdQuotaExceeded,
+ ProcessFdQuotaExceeded,
+ OutOfMemory,
+ /// Either the name provided exceeded `NAME_MAX`, or invalid flags were passed.
+ NameTooLong,
+
+ /// memfd_create is available in Linux 3.17 and later. This error is returned
+ /// for older kernel versions.
+ SystemOutdated,
+} || UnexpectedError;
+
+pub fn memfd_createZ(name: [*:0]const u8, flags: u32) MemFdCreateError!fd_t {
+ switch (native_os) {
+ .linux => {
+ // memfd_create is available only in glibc versions starting with 2.27.
+ const use_c = std.c.versionCheck(.{ .major = 2, .minor = 27, .patch = 0 });
+ const sys = if (use_c) std.c else linux;
+ const rc = sys.memfd_create(name, flags);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .FAULT => unreachable, // name has invalid memory
+ .INVAL => return error.NameTooLong, // or, program has a bug and flags are faulty
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NOMEM => return error.OutOfMemory,
+ .NOSYS => return error.SystemOutdated,
+ else => |err| return unexpectedErrno(err),
+ }
+ },
+ .freebsd => {
+ if (comptime builtin.os.version_range.semver.max.order(.{ .major = 13, .minor = 0, .patch = 0 }) == .lt)
+ @compileError("memfd_create is unavailable on FreeBSD < 13.0");
+ const rc = system.memfd_create(name, flags);
+ switch (errno(rc)) {
+ .SUCCESS => return rc,
+ .BADF => unreachable, // name argument NULL
+ .INVAL => unreachable, // name too long or invalid/unsupported flags.
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOSYS => return error.SystemOutdated,
+ else => |err| return unexpectedErrno(err),
+ }
+ },
+ else => @compileError("target OS does not support memfd_create()"),
+ }
+}
+
+pub fn memfd_create(name: []const u8, flags: u32) MemFdCreateError!fd_t {
+ var buffer: [NAME_MAX - "memfd:".len - 1:0]u8 = undefined;
+ if (name.len > buffer.len) return error.NameTooLong;
+ @memcpy(buffer[0..name.len], name);
+ buffer[name.len] = 0;
+ return memfd_createZ(&buffer, flags);
+}
+
+pub fn getrusage(who: i32) rusage {
+ var result: rusage = undefined;
+ const rc = system.getrusage(who, &result);
+ switch (errno(rc)) {
+ .SUCCESS => return result,
+ .INVAL => unreachable,
+ .FAULT => unreachable,
+ else => unreachable,
+ }
+}
+
+pub const TIOCError = error{NotATerminal};
+
+pub const TermiosGetError = TIOCError || UnexpectedError;
+
+pub fn tcgetattr(handle: fd_t) TermiosGetError!termios {
+ while (true) {
+ var term: termios = undefined;
+ switch (errno(system.tcgetattr(handle, &term))) {
+ .SUCCESS => return term,
+ .INTR => continue,
+ .BADF => unreachable,
+ .NOTTY => return error.NotATerminal,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const TermiosSetError = TermiosGetError || error{ProcessOrphaned};
+
+pub fn tcsetattr(handle: fd_t, optional_action: TCSA, termios_p: termios) TermiosSetError!void {
+ while (true) {
+ switch (errno(system.tcsetattr(handle, optional_action, &termios_p))) {
+ .SUCCESS => return,
+ .BADF => unreachable,
+ .INTR => continue,
+ .INVAL => unreachable,
+ .NOTTY => return error.NotATerminal,
+ .IO => return error.ProcessOrphaned,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const TermioGetPgrpError = TIOCError || UnexpectedError;
+
+/// Returns the process group ID for the TTY associated with the given handle.
+pub fn tcgetpgrp(handle: fd_t) TermioGetPgrpError!pid_t {
+ while (true) {
+ var pgrp: pid_t = undefined;
+ switch (errno(system.tcgetpgrp(handle, &pgrp))) {
+ .SUCCESS => return pgrp,
+ .BADF => unreachable,
+ .INVAL => unreachable,
+ .INTR => continue,
+ .NOTTY => return error.NotATerminal,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub const TermioSetPgrpError = TermioGetPgrpError || error{NotAPgrpMember};
+
+/// Sets the controlling process group ID for given TTY.
+/// handle must be valid fd_t to a TTY associated with calling process.
+/// pgrp must be a valid process group, and the calling process must be a member
+/// of that group.
+pub fn tcsetpgrp(handle: fd_t, pgrp: pid_t) TermioSetPgrpError!void {
+ while (true) {
+ switch (errno(system.tcsetpgrp(handle, &pgrp))) {
+ .SUCCESS => return,
+ .BADF => unreachable,
+ .INVAL => unreachable,
+ .INTR => continue,
+ .NOTTY => return error.NotATerminal,
+ .PERM => return TermioSetPgrpError.NotAPgrpMember,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) !fd_t {
+ const rc = system.signalfd(fd, mask, flags);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .BADF, .INVAL => unreachable,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NOMEM => return error.SystemResources,
+ .MFILE => return error.ProcessResources,
+ .NODEV => return error.InodeMountFail,
+ .NOSYS => return error.SystemOutdated,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const SyncError = error{
+ InputOutput,
+ NoSpaceLeft,
+ DiskQuota,
+ AccessDenied,
+} || UnexpectedError;
+
+/// Write all pending file contents and metadata modifications to all filesystems.
+pub fn sync() void {
+ system.sync();
+}
+
+/// Write all pending file contents and metadata modifications to the filesystem which contains the specified file.
+pub fn syncfs(fd: fd_t) SyncError!void {
+ const rc = system.syncfs(fd);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ .BADF, .INVAL, .ROFS => unreachable,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .DQUOT => return error.DiskQuota,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Write all pending file contents and metadata modifications for the specified file descriptor to the underlying filesystem.
+pub fn fsync(fd: fd_t) SyncError!void {
+ if (native_os == .windows) {
+ if (windows.kernel32.FlushFileBuffers(fd) != 0)
+ return;
+ switch (windows.kernel32.GetLastError()) {
+ .SUCCESS => return,
+ .INVALID_HANDLE => unreachable,
+ .ACCESS_DENIED => return error.AccessDenied, // a sync was performed but the system couldn't update the access time
+ .UNEXP_NET_ERR => return error.InputOutput,
+ else => return error.InputOutput,
+ }
+ }
+ const rc = system.fsync(fd);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ .BADF, .INVAL, .ROFS => unreachable,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .DQUOT => return error.DiskQuota,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+/// Write all pending file contents for the specified file descriptor to the underlying filesystem, but not necessarily the metadata.
+pub fn fdatasync(fd: fd_t) SyncError!void {
+ if (native_os == .windows) {
+ return fsync(fd) catch |err| switch (err) {
+ SyncError.AccessDenied => return, // fdatasync doesn't promise that the access time was synced
+ else => return err,
+ };
+ }
+ const rc = system.fdatasync(fd);
+ switch (errno(rc)) {
+ .SUCCESS => return,
+ .BADF, .INVAL, .ROFS => unreachable,
+ .IO => return error.InputOutput,
+ .NOSPC => return error.NoSpaceLeft,
+ .DQUOT => return error.DiskQuota,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const PrctlError = error{
+ /// Can only occur with PR_SET_SECCOMP/SECCOMP_MODE_FILTER or
+ /// PR_SET_MM/PR_SET_MM_EXE_FILE
+ AccessDenied,
+ /// Can only occur with PR_SET_MM/PR_SET_MM_EXE_FILE
+ InvalidFileDescriptor,
+ InvalidAddress,
+ /// Can only occur with PR_SET_SPECULATION_CTRL, PR_MPX_ENABLE_MANAGEMENT,
+ /// or PR_MPX_DISABLE_MANAGEMENT
+ UnsupportedFeature,
+ /// Can only occur with PR_SET_FP_MODE
+ OperationNotSupported,
+ PermissionDenied,
+} || UnexpectedError;
+
+pub fn prctl(option: PR, args: anytype) PrctlError!u31 {
+ if (@typeInfo(@TypeOf(args)) != .Struct)
+ @compileError("Expected tuple or struct argument, found " ++ @typeName(@TypeOf(args)));
+ if (args.len > 4)
+ @compileError("prctl takes a maximum of 4 optional arguments");
+
+ var buf: [4]usize = undefined;
+ {
+ comptime var i = 0;
+ inline while (i < args.len) : (i += 1) buf[i] = args[i];
+ }
+
+ const rc = system.prctl(@intFromEnum(option), buf[0], buf[1], buf[2], buf[3]);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .ACCES => return error.AccessDenied,
+ .BADF => return error.InvalidFileDescriptor,
+ .FAULT => return error.InvalidAddress,
+ .INVAL => unreachable,
+ .NODEV, .NXIO => return error.UnsupportedFeature,
+ .OPNOTSUPP => return error.OperationNotSupported,
+ .PERM, .BUSY => return error.PermissionDenied,
+ .RANGE => unreachable,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const GetrlimitError = UnexpectedError;
+
+pub fn getrlimit(resource: rlimit_resource) GetrlimitError!rlimit {
+ const getrlimit_sym = if (lfs64_abi) system.getrlimit64 else system.getrlimit;
+
+ var limits: rlimit = undefined;
+ switch (errno(getrlimit_sym(resource, &limits))) {
+ .SUCCESS => return limits,
+ .FAULT => unreachable, // bogus pointer
+ .INVAL => unreachable,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const SetrlimitError = error{ PermissionDenied, LimitTooBig } || UnexpectedError;
+
+pub fn setrlimit(resource: rlimit_resource, limits: rlimit) SetrlimitError!void {
+ const setrlimit_sym = if (lfs64_abi) system.setrlimit64 else system.setrlimit;
+
+ switch (errno(setrlimit_sym(resource, &limits))) {
+ .SUCCESS => return,
+ .FAULT => unreachable, // bogus pointer
+ .INVAL => return error.LimitTooBig, // this could also mean "invalid resource", but that would be unreachable
+ .PERM => return error.PermissionDenied,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const MincoreError = error{
+ /// A kernel resource was temporarily unavailable.
+ SystemResources,
+ /// vec points to an invalid address.
+ InvalidAddress,
+ /// addr is not page-aligned.
+ InvalidSyscall,
+ /// One of the following:
+ /// * length is greater than user space TASK_SIZE - addr
+ /// * addr + length contains unmapped memory
+ OutOfMemory,
+ /// The mincore syscall is not available on this version and configuration
+ /// of this UNIX-like kernel.
+ MincoreUnavailable,
+} || UnexpectedError;
+
+/// Determine whether pages are resident in memory.
+pub fn mincore(ptr: [*]align(mem.page_size) u8, length: usize, vec: [*]u8) MincoreError!void {
+ return switch (errno(system.mincore(ptr, length, vec))) {
+ .SUCCESS => {},
+ .AGAIN => error.SystemResources,
+ .FAULT => error.InvalidAddress,
+ .INVAL => error.InvalidSyscall,
+ .NOMEM => error.OutOfMemory,
+ .NOSYS => error.MincoreUnavailable,
+ else => |err| unexpectedErrno(err),
+ };
+}
+
+pub const MadviseError = error{
+ /// advice is MADV.REMOVE, but the specified address range is not a shared writable mapping.
+ AccessDenied,
+ /// advice is MADV.HWPOISON, but the caller does not have the CAP_SYS_ADMIN capability.
+ PermissionDenied,
+ /// A kernel resource was temporarily unavailable.
+ SystemResources,
+ /// One of the following:
+ /// * addr is not page-aligned or length is negative
+ /// * advice is not valid
+ /// * advice is MADV.DONTNEED or MADV.REMOVE and the specified address range
+ /// includes locked, Huge TLB pages, or VM_PFNMAP pages.
+ /// * advice is MADV.MERGEABLE or MADV.UNMERGEABLE, but the kernel was not
+ /// configured with CONFIG_KSM.
+ /// * advice is MADV.FREE or MADV.WIPEONFORK but the specified address range
+ /// includes file, Huge TLB, MAP.SHARED, or VM_PFNMAP ranges.
+ InvalidSyscall,
+ /// (for MADV.WILLNEED) Paging in this area would exceed the process's
+ /// maximum resident set size.
+ WouldExceedMaximumResidentSetSize,
+ /// One of the following:
+ /// * (for MADV.WILLNEED) Not enough memory: paging in failed.
+ /// * Addresses in the specified range are not currently mapped, or
+ /// are outside the address space of the process.
+ OutOfMemory,
+ /// The madvise syscall is not available on this version and configuration
+ /// of the Linux kernel.
+ MadviseUnavailable,
+ /// The operating system returned an undocumented error code.
+ Unexpected,
+};
+
+/// Give advice about use of memory.
+/// This syscall is optional and is sometimes configured to be disabled.
+pub fn madvise(ptr: [*]align(mem.page_size) u8, length: usize, advice: u32) MadviseError!void {
+ switch (errno(system.madvise(ptr, length, advice))) {
+ .SUCCESS => return,
+ .ACCES => return error.AccessDenied,
+ .AGAIN => return error.SystemResources,
+ .BADF => unreachable, // The map exists, but the area maps something that isn't a file.
+ .INVAL => return error.InvalidSyscall,
+ .IO => return error.WouldExceedMaximumResidentSetSize,
+ .NOMEM => return error.OutOfMemory,
+ .NOSYS => return error.MadviseUnavailable,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const PerfEventOpenError = error{
+ /// Returned if the perf_event_attr size value is too small (smaller
+ /// than PERF_ATTR_SIZE_VER0), too big (larger than the page size),
+ /// or larger than the kernel supports and the extra bytes are not
+ /// zero. When E2BIG is returned, the perf_event_attr size field is
+ /// overwritten by the kernel to be the size of the structure it was
+ /// expecting.
+ TooBig,
+ /// Returned when the requested event requires CAP_SYS_ADMIN permis‐
+ /// sions (or a more permissive perf_event paranoid setting). Some
+ /// common cases where an unprivileged process may encounter this
+ /// error: attaching to a process owned by a different user; moni‐
+ /// toring all processes on a given CPU (i.e., specifying the pid
+ /// argument as -1); and not setting exclude_kernel when the para‐
+ /// noid setting requires it.
+ /// Also:
+ /// Returned on many (but not all) architectures when an unsupported
+ /// exclude_hv, exclude_idle, exclude_user, or exclude_kernel set‐
+ /// ting is specified.
+ /// It can also happen, as with EACCES, when the requested event re‐
+ /// quires CAP_SYS_ADMIN permissions (or a more permissive
+ /// perf_event paranoid setting). This includes setting a break‐
+ /// point on a kernel address, and (since Linux 3.13) setting a ker‐
+ /// nel function-trace tracepoint.
+ PermissionDenied,
+ /// Returned if another event already has exclusive access to the
+ /// PMU.
+ DeviceBusy,
+ /// Each opened event uses one file descriptor. If a large number
+ /// of events are opened, the per-process limit on the number of
+ /// open file descriptors will be reached, and no more events can be
+ /// created.
+ ProcessResources,
+ EventRequiresUnsupportedCpuFeature,
+ /// Returned if you try to add more breakpoint
+ /// events than supported by the hardware.
+ TooManyBreakpoints,
+ /// Returned if PERF_SAMPLE_STACK_USER is set in sample_type and it
+ /// is not supported by hardware.
+ SampleStackNotSupported,
+ /// Returned if an event requiring a specific hardware feature is
+ /// requested but there is no hardware support. This includes re‐
+ /// questing low-skid events if not supported, branch tracing if it
+ /// is not available, sampling if no PMU interrupt is available, and
+ /// branch stacks for software events.
+ EventNotSupported,
+ /// Returned if PERF_SAMPLE_CALLCHAIN is requested and sam‐
+ /// ple_max_stack is larger than the maximum specified in
+ /// /proc/sys/kernel/perf_event_max_stack.
+ SampleMaxStackOverflow,
+ /// Returned if attempting to attach to a process that does not exist.
+ ProcessNotFound,
+} || UnexpectedError;
+
+pub fn perf_event_open(
+ attr: *linux.perf_event_attr,
+ pid: pid_t,
+ cpu: i32,
+ group_fd: fd_t,
+ flags: usize,
+) PerfEventOpenError!fd_t {
+ const rc = linux.perf_event_open(attr, pid, cpu, group_fd, flags);
+ switch (errno(rc)) {
+ .SUCCESS => return @intCast(rc),
+ .@"2BIG" => return error.TooBig,
+ .ACCES => return error.PermissionDenied,
+ .BADF => unreachable, // group_fd file descriptor is not valid.
+ .BUSY => return error.DeviceBusy,
+ .FAULT => unreachable, // Segmentation fault.
+ .INVAL => unreachable, // Bad attr settings.
+ .INTR => unreachable, // Mixed perf and ftrace handling for a uprobe.
+ .MFILE => return error.ProcessResources,
+ .NODEV => return error.EventRequiresUnsupportedCpuFeature,
+ .NOENT => unreachable, // Invalid type setting.
+ .NOSPC => return error.TooManyBreakpoints,
+ .NOSYS => return error.SampleStackNotSupported,
+ .OPNOTSUPP => return error.EventNotSupported,
+ .OVERFLOW => return error.SampleMaxStackOverflow,
+ .PERM => return error.PermissionDenied,
+ .SRCH => return error.ProcessNotFound,
+ else => |err| return unexpectedErrno(err),
+ }
+}
+
+pub const TimerFdCreateError = error{
+ AccessDenied,
+ ProcessFdQuotaExceeded,
+ SystemFdQuotaExceeded,
+ NoDevice,
+ SystemResources,
+} || UnexpectedError;
+
+pub const TimerFdGetError = error{InvalidHandle} || UnexpectedError;
+pub const TimerFdSetError = TimerFdGetError || error{Canceled};
+
+pub fn timerfd_create(clokid: i32, flags: linux.TFD) TimerFdCreateError!fd_t {
+ const rc = linux.timerfd_create(clokid, flags);
+ return switch (errno(rc)) {
+ .SUCCESS => @intCast(rc),
+ .INVAL => unreachable,
+ .MFILE => return error.ProcessFdQuotaExceeded,
+ .NFILE => return error.SystemFdQuotaExceeded,
+ .NODEV => return error.NoDevice,
+ .NOMEM => return error.SystemResources,
+ .PERM => return error.AccessDenied,
+ else => |err| return unexpectedErrno(err),
+ };
+}
+
+pub fn timerfd_settime(
+ fd: i32,
+ flags: linux.TFD.TIMER,
+ new_value: *const linux.itimerspec,
+ old_value: ?*linux.itimerspec,
+) TimerFdSetError!void {
+ const rc = linux.timerfd_settime(fd, flags, new_value, old_value);
+ return switch (errno(rc)) {
+ .SUCCESS => {},
+ .BADF => error.InvalidHandle,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .CANCELED => error.Canceled,
+ else => |err| return unexpectedErrno(err),
+ };
+}
+
+pub fn timerfd_gettime(fd: i32) TimerFdGetError!linux.itimerspec {
+ var curr_value: linux.itimerspec = undefined;
+ const rc = linux.timerfd_gettime(fd, &curr_value);
+ return switch (errno(rc)) {
+ .SUCCESS => return curr_value,
+ .BADF => error.InvalidHandle,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ else => |err| return unexpectedErrno(err),
+ };
+}
+
+pub const PtraceError = error{
+ DeviceBusy,
+ InputOutput,
+ ProcessNotFound,
+ PermissionDenied,
+} || UnexpectedError;
+
+pub fn ptrace(request: u32, pid: pid_t, addr: usize, signal: usize) PtraceError!void {
+ if (native_os == .windows or native_os == .wasi)
+ @compileError("Unsupported OS");
+
+ return switch (native_os) {
+ .linux => switch (errno(linux.ptrace(request, pid, addr, signal, 0))) {
+ .SUCCESS => {},
+ .SRCH => error.ProcessNotFound,
+ .FAULT => unreachable,
+ .INVAL => unreachable,
+ .IO => return error.InputOutput,
+ .PERM => error.PermissionDenied,
+ .BUSY => error.DeviceBusy,
+ else => |err| return unexpectedErrno(err),
+ },
+
+ .macos, .ios, .tvos, .watchos => switch (errno(std.c.ptrace(
+ @intCast(request),
+ pid,
+ @ptrFromInt(addr),
+ @intCast(signal),
+ ))) {
+ .SUCCESS => {},
+ .SRCH => error.ProcessNotFound,
+ .INVAL => unreachable,
+ .PERM => error.PermissionDenied,
+ .BUSY => error.DeviceBusy,
+ else => |err| return unexpectedErrno(err),
+ },
+
+ else => switch (errno(system.ptrace(request, pid, addr, signal))) {
+ .SUCCESS => {},
+ .SRCH => error.ProcessNotFound,
+ .INVAL => unreachable,
+ .PERM => error.PermissionDenied,
+ .BUSY => error.DeviceBusy,
+ else => |err| return unexpectedErrno(err),
+ },
+ };
+}
+
+pub const IoCtl_SIOCGIFINDEX_Error = error{
+ FileSystem,
+ InterfaceNotFound,
+} || UnexpectedError;
+
+pub fn ioctl_SIOCGIFINDEX(fd: fd_t, ifr: *ifreq) IoCtl_SIOCGIFINDEX_Error!void {
+ while (true) {
+ switch (errno(system.ioctl(fd, SIOCGIFINDEX, @intFromPtr(ifr)))) {
+ .SUCCESS => return,
+ .INVAL => unreachable, // Bad parameters.
+ .NOTTY => unreachable,
+ .NXIO => unreachable,
+ .BADF => unreachable, // Always a race condition.
+ .FAULT => unreachable, // Bad pointer parameter.
+ .INTR => continue,
+ .IO => return error.FileSystem,
+ .NODEV => return error.InterfaceNotFound,
+ else => |err| return unexpectedErrno(err),
+ }
+ }
+}
+
+const lfs64_abi = native_os == .linux and builtin.link_libc and builtin.abi.isGnu();
+
+/// Whether or not `error.Unexpected` will print its value and a stack trace.
+///
+/// If this happens the fix is to add the error code to the corresponding
+/// switch expression, possibly introduce a new error in the error set, and
+/// send a patch to Zig.
+pub const unexpected_error_tracing = builtin.zig_backend == .stage2_llvm and builtin.mode == .Debug;
+
+pub const UnexpectedError = error{
+ /// The Operating System returned an undocumented error code.
+ ///
+ /// This error is in theory not possible, but it would be better
+ /// to handle this error than to invoke undefined behavior.
+ ///
+ /// When this error code is observed, it usually means the Zig Standard
+ /// Library needs a small patch to add the error code to the error set for
+ /// the respective function.
+ Unexpected,
+};
+
+/// Call this when you made a syscall or something that sets errno
+/// and you get an unexpected error.
+pub fn unexpectedErrno(err: E) UnexpectedError {
+ if (unexpected_error_tracing) {
+ std.debug.print("unexpected errno: {d}\n", .{@intFromEnum(err)});
+ std.debug.dumpCurrentStackTrace(null);
+ }
+ return error.Unexpected;
+}
+
+/// Used to convert a slice to a null terminated slice on the stack.
+pub fn toPosixPath(file_path: []const u8) error{NameTooLong}![PATH_MAX - 1:0]u8 {
+ if (std.debug.runtime_safety) assert(mem.indexOfScalar(u8, file_path, 0) == null);
+ var path_with_null: [PATH_MAX - 1:0]u8 = undefined;
+ // >= rather than > to make room for the null byte
+ if (file_path.len >= PATH_MAX) return error.NameTooLong;
+ @memcpy(path_with_null[0..file_path.len], file_path);
+ path_with_null[file_path.len] = 0;
+ return path_with_null;
+}
diff --git a/lib/std/os/test.zig b/lib/std/posix/test.zig
index d9f05d94ef..1020bef4b7 100644
--- a/lib/std/os/test.zig
+++ b/lib/std/posix/test.zig
@@ -1,5 +1,5 @@
const std = @import("../std.zig");
-const os = std.os;
+const posix = std.posix;
const testing = std.testing;
const expect = testing.expect;
const expectEqual = testing.expectEqual;
@@ -10,6 +10,7 @@ const mem = std.mem;
const elf = std.elf;
const File = std.fs.File;
const Thread = std.Thread;
+const linux = std.os.linux;
const a = std.testing.allocator;
@@ -31,26 +32,26 @@ test "chdir smoke test" {
// Get current working directory path
var old_cwd_buf: [fs.MAX_PATH_BYTES]u8 = undefined;
- const old_cwd = try os.getcwd(old_cwd_buf[0..]);
+ const old_cwd = try posix.getcwd(old_cwd_buf[0..]);
{
// Firstly, changing to itself should have no effect
- try os.chdir(old_cwd);
+ try posix.chdir(old_cwd);
var new_cwd_buf: [fs.MAX_PATH_BYTES]u8 = undefined;
- const new_cwd = try os.getcwd(new_cwd_buf[0..]);
+ const new_cwd = try posix.getcwd(new_cwd_buf[0..]);
try expect(mem.eql(u8, old_cwd, new_cwd));
}
// Next, change current working directory to one level above
if (native_os != .wasi) { // WASI does not support navigating outside of Preopens
const parent = fs.path.dirname(old_cwd) orelse unreachable; // old_cwd should be absolute
- try os.chdir(parent);
+ try posix.chdir(parent);
// Restore cwd because process may have other tests that do not tolerate chdir.
- defer os.chdir(old_cwd) catch unreachable;
+ defer posix.chdir(old_cwd) catch unreachable;
var new_cwd_buf: [fs.MAX_PATH_BYTES]u8 = undefined;
- const new_cwd = try os.getcwd(new_cwd_buf[0..]);
+ const new_cwd = try posix.getcwd(new_cwd_buf[0..]);
try expect(mem.eql(u8, parent, new_cwd));
}
@@ -65,10 +66,10 @@ test "chdir smoke test" {
var tmp_dir = try fs.cwd().makeOpenPath("zig-test-tmp", .{});
// Change current working directory to tmp directory
- try os.chdir("zig-test-tmp");
+ try posix.chdir("zig-test-tmp");
var new_cwd_buf: [fs.MAX_PATH_BYTES]u8 = undefined;
- const new_cwd = try os.getcwd(new_cwd_buf[0..]);
+ const new_cwd = try posix.getcwd(new_cwd_buf[0..]);
// On Windows, fs.path.resolve returns an uppercase drive letter, but the drive letter returned by getcwd may be lowercase
var resolved_cwd_buf: [fs.MAX_PATH_BYTES]u8 = undefined;
@@ -80,7 +81,7 @@ test "chdir smoke test" {
// Restore cwd because process may have other tests that do not tolerate chdir.
tmp_dir.close();
- os.chdir(old_cwd) catch unreachable;
+ posix.chdir(old_cwd) catch unreachable;
try fs.cwd().deleteDir("zig-test-tmp");
}
}
@@ -105,39 +106,39 @@ test "open smoke test" {
};
var file_path: []u8 = undefined;
- var fd: os.fd_t = undefined;
- const mode: os.mode_t = if (native_os == .windows) 0 else 0o666;
+ var fd: posix.fd_t = undefined;
+ const mode: posix.mode_t = if (native_os == .windows) 0 else 0o666;
// Create some file using `open`.
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_file" });
- fd = try os.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true, .EXCL = true }, mode);
- os.close(fd);
+ fd = try posix.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true, .EXCL = true }, mode);
+ posix.close(fd);
// Try this again with the same flags. This op should fail with error.PathAlreadyExists.
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_file" });
- try expectError(error.PathAlreadyExists, os.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true, .EXCL = true }, mode));
+ try expectError(error.PathAlreadyExists, posix.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true, .EXCL = true }, mode));
// Try opening without `EXCL` flag.
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_file" });
- fd = try os.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true }, mode);
- os.close(fd);
+ fd = try posix.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true }, mode);
+ posix.close(fd);
// Try opening as a directory which should fail.
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_file" });
- try expectError(error.NotDir, os.open(file_path, .{ .ACCMODE = .RDWR, .DIRECTORY = true }, mode));
+ try expectError(error.NotDir, posix.open(file_path, .{ .ACCMODE = .RDWR, .DIRECTORY = true }, mode));
// Create some directory
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_dir" });
- try os.mkdir(file_path, mode);
+ try posix.mkdir(file_path, mode);
// Open dir using `open`
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_dir" });
- fd = try os.open(file_path, .{ .ACCMODE = .RDONLY, .DIRECTORY = true }, mode);
- os.close(fd);
+ fd = try posix.open(file_path, .{ .ACCMODE = .RDONLY, .DIRECTORY = true }, mode);
+ posix.close(fd);
// Try opening as file which should fail.
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_dir" });
- try expectError(error.IsDir, os.open(file_path, .{ .ACCMODE = .RDWR }, mode));
+ try expectError(error.IsDir, posix.open(file_path, .{ .ACCMODE = .RDWR }, mode));
}
test "openat smoke test" {
@@ -149,49 +150,49 @@ test "openat smoke test" {
var tmp = tmpDir(.{});
defer tmp.cleanup();
- var fd: os.fd_t = undefined;
- const mode: os.mode_t = if (native_os == .windows) 0 else 0o666;
+ var fd: posix.fd_t = undefined;
+ const mode: posix.mode_t = if (native_os == .windows) 0 else 0o666;
// Create some file using `openat`.
- fd = try os.openat(tmp.dir.fd, "some_file", os.CommonOpenFlags.lower(.{
+ fd = try posix.openat(tmp.dir.fd, "some_file", CommonOpenFlags.lower(.{
.ACCMODE = .RDWR,
.CREAT = true,
.EXCL = true,
}), mode);
- os.close(fd);
+ posix.close(fd);
// Try this again with the same flags. This op should fail with error.PathAlreadyExists.
- try expectError(error.PathAlreadyExists, os.openat(tmp.dir.fd, "some_file", os.CommonOpenFlags.lower(.{
+ try expectError(error.PathAlreadyExists, posix.openat(tmp.dir.fd, "some_file", CommonOpenFlags.lower(.{
.ACCMODE = .RDWR,
.CREAT = true,
.EXCL = true,
}), mode));
// Try opening without `EXCL` flag.
- fd = try os.openat(tmp.dir.fd, "some_file", os.CommonOpenFlags.lower(.{
+ fd = try posix.openat(tmp.dir.fd, "some_file", CommonOpenFlags.lower(.{
.ACCMODE = .RDWR,
.CREAT = true,
}), mode);
- os.close(fd);
+ posix.close(fd);
// Try opening as a directory which should fail.
- try expectError(error.NotDir, os.openat(tmp.dir.fd, "some_file", os.CommonOpenFlags.lower(.{
+ try expectError(error.NotDir, posix.openat(tmp.dir.fd, "some_file", CommonOpenFlags.lower(.{
.ACCMODE = .RDWR,
.DIRECTORY = true,
}), mode));
// Create some directory
- try os.mkdirat(tmp.dir.fd, "some_dir", mode);
+ try posix.mkdirat(tmp.dir.fd, "some_dir", mode);
// Open dir using `open`
- fd = try os.openat(tmp.dir.fd, "some_dir", os.CommonOpenFlags.lower(.{
+ fd = try posix.openat(tmp.dir.fd, "some_dir", CommonOpenFlags.lower(.{
.ACCMODE = .RDONLY,
.DIRECTORY = true,
}), mode);
- os.close(fd);
+ posix.close(fd);
// Try opening as file which should fail.
- try expectError(error.IsDir, os.openat(tmp.dir.fd, "some_dir", os.CommonOpenFlags.lower(.{
+ try expectError(error.IsDir, posix.openat(tmp.dir.fd, "some_dir", CommonOpenFlags.lower(.{
.ACCMODE = .RDWR,
}), mode));
}
@@ -211,7 +212,7 @@ test "symlink with relative paths" {
try cwd.writeFile("file.txt", "nonsense");
if (native_os == .windows) {
- os.windows.CreateSymbolicLink(
+ std.os.windows.CreateSymbolicLink(
cwd.fd,
&[_]u16{ 's', 'y', 'm', 'l', 'i', 'n', 'k', 'e', 'd' },
&[_:0]u16{ 'f', 'i', 'l', 'e', '.', 't', 'x', 't' },
@@ -226,11 +227,11 @@ test "symlink with relative paths" {
else => return err,
};
} else {
- try os.symlink("file.txt", "symlinked");
+ try posix.symlink("file.txt", "symlinked");
}
var buffer: [fs.MAX_PATH_BYTES]u8 = undefined;
- const given = try os.readlink("symlinked", buffer[0..]);
+ const given = try posix.readlink("symlinked", buffer[0..]);
try expect(mem.eql(u8, "file.txt", given));
try cwd.deleteFile("file.txt");
@@ -247,7 +248,7 @@ test "readlink on Windows" {
fn testReadlink(target_path: []const u8, symlink_path: []const u8) !void {
var buffer: [fs.MAX_PATH_BYTES]u8 = undefined;
- const given = try os.readlink(symlink_path, buffer[0..]);
+ const given = try posix.readlink(symlink_path, buffer[0..]);
try expect(mem.eql(u8, target_path, given));
}
@@ -268,7 +269,7 @@ test "link with relative paths" {
cwd.deleteFile("new.txt") catch {};
try cwd.writeFile("example.txt", "example");
- try os.link("example.txt", "new.txt", 0);
+ try posix.link("example.txt", "new.txt", 0);
const efd = try cwd.openFile("example.txt", .{});
defer efd.close();
@@ -277,17 +278,17 @@ test "link with relative paths" {
defer nfd.close();
{
- const estat = try os.fstat(efd.handle);
- const nstat = try os.fstat(nfd.handle);
+ const estat = try posix.fstat(efd.handle);
+ const nstat = try posix.fstat(nfd.handle);
try testing.expectEqual(estat.ino, nstat.ino);
try testing.expectEqual(@as(@TypeOf(nstat.nlink), 2), nstat.nlink);
}
- try os.unlink("new.txt");
+ try posix.unlink("new.txt");
{
- const estat = try os.fstat(efd.handle);
+ const estat = try posix.fstat(efd.handle);
try testing.expectEqual(@as(@TypeOf(estat.nlink), 1), estat.nlink);
}
@@ -312,7 +313,7 @@ test "linkat with different directories" {
tmp.dir.deleteFile("new.txt") catch {};
try cwd.writeFile("example.txt", "example");
- try os.linkat(cwd.fd, "example.txt", tmp.dir.fd, "new.txt", 0);
+ try posix.linkat(cwd.fd, "example.txt", tmp.dir.fd, "new.txt", 0);
const efd = try cwd.openFile("example.txt", .{});
defer efd.close();
@@ -321,17 +322,17 @@ test "linkat with different directories" {
{
defer nfd.close();
- const estat = try os.fstat(efd.handle);
- const nstat = try os.fstat(nfd.handle);
+ const estat = try posix.fstat(efd.handle);
+ const nstat = try posix.fstat(nfd.handle);
try testing.expectEqual(estat.ino, nstat.ino);
try testing.expectEqual(@as(@TypeOf(nstat.nlink), 2), nstat.nlink);
}
- try os.unlinkat(tmp.dir.fd, "new.txt", 0);
+ try posix.unlinkat(tmp.dir.fd, "new.txt", 0);
{
- const estat = try os.fstat(efd.handle);
+ const estat = try posix.fstat(efd.handle);
try testing.expectEqual(@as(@TypeOf(estat.nlink), 1), estat.nlink);
}
@@ -351,12 +352,12 @@ test "fstatat" {
// fetch file's info on the opened fd directly
const file = try tmp.dir.openFile("file.txt", .{});
- const stat = try os.fstat(file.handle);
+ const stat = try posix.fstat(file.handle);
defer file.close();
// now repeat but using `fstatat` instead
- const flags = if (native_os == .wasi) 0x0 else os.AT.SYMLINK_NOFOLLOW;
- const statat = try os.fstatat(tmp.dir.fd, "file.txt", flags);
+ const flags = if (native_os == .wasi) 0x0 else posix.AT.SYMLINK_NOFOLLOW;
+ const statat = try posix.fstatat(tmp.dir.fd, "file.txt", flags);
try expectEqual(stat, statat);
}
@@ -369,7 +370,7 @@ test "readlinkat" {
// create a symbolic link
if (native_os == .windows) {
- os.windows.CreateSymbolicLink(
+ std.os.windows.CreateSymbolicLink(
tmp.dir.fd,
&[_]u16{ 'l', 'i', 'n', 'k' },
&[_:0]u16{ 'f', 'i', 'l', 'e', '.', 't', 'x', 't' },
@@ -380,12 +381,12 @@ test "readlinkat" {
else => return err,
};
} else {
- try os.symlinkat("file.txt", tmp.dir.fd, "link");
+ try posix.symlinkat("file.txt", tmp.dir.fd, "link");
}
// read the link
var buffer: [fs.MAX_PATH_BYTES]u8 = undefined;
- const read_link = try os.readlinkat(tmp.dir.fd, "link", buffer[0..]);
+ const read_link = try posix.readlinkat(tmp.dir.fd, "link", buffer[0..]);
try expect(mem.eql(u8, "file.txt", read_link));
}
@@ -456,8 +457,8 @@ fn testTls() !void {
test "getrandom" {
var buf_a: [50]u8 = undefined;
var buf_b: [50]u8 = undefined;
- try os.getrandom(&buf_a);
- try os.getrandom(&buf_b);
+ try posix.getrandom(&buf_a);
+ try posix.getrandom(&buf_b);
// If this test fails the chance is significantly higher that there is a bug than
// that two sets of 50 bytes were equal.
try expect(!mem.eql(u8, &buf_a, &buf_b));
@@ -466,23 +467,23 @@ test "getrandom" {
test "getcwd" {
// at least call it so it gets compiled
var buf: [std.fs.MAX_PATH_BYTES]u8 = undefined;
- _ = os.getcwd(&buf) catch undefined;
+ _ = posix.getcwd(&buf) catch undefined;
}
test "sigaltstack" {
if (native_os == .windows or native_os == .wasi) return error.SkipZigTest;
- var st: os.stack_t = undefined;
- try os.sigaltstack(null, &st);
+ var st: posix.stack_t = undefined;
+ try posix.sigaltstack(null, &st);
// Setting a stack size less than MINSIGSTKSZ returns ENOMEM
st.flags = 0;
st.size = 1;
- try testing.expectError(error.SizeTooSmall, os.sigaltstack(&st, null));
+ try testing.expectError(error.SizeTooSmall, posix.sigaltstack(&st, null));
}
// If the type is not available use void to avoid erroring out when `iter_fn` is
// analyzed
-const dl_phdr_info = if (@hasDecl(os.system, "dl_phdr_info")) os.dl_phdr_info else anyopaque;
+const dl_phdr_info = if (@hasDecl(posix.system, "dl_phdr_info")) posix.dl_phdr_info else anyopaque;
const IterFnError = error{
MissingPtLoadSegment,
@@ -527,7 +528,7 @@ test "dl_iterate_phdr" {
if (builtin.object_format != .elf) return error.SkipZigTest;
var counter: usize = 0;
- try os.dl_iterate_phdr(&counter, IterFnError, iter_fn);
+ try posix.dl_iterate_phdr(&counter, IterFnError, iter_fn);
try expect(counter != 0);
}
@@ -535,8 +536,8 @@ test "gethostname" {
if (native_os == .windows or native_os == .wasi)
return error.SkipZigTest;
- var buf: [os.HOST_NAME_MAX]u8 = undefined;
- const hostname = try os.gethostname(&buf);
+ var buf: [posix.HOST_NAME_MAX]u8 = undefined;
+ const hostname = try posix.gethostname(&buf);
try expect(hostname.len != 0);
}
@@ -544,13 +545,13 @@ test "pipe" {
if (native_os == .windows or native_os == .wasi)
return error.SkipZigTest;
- const fds = try os.pipe();
- try expect((try os.write(fds[1], "hello")) == 5);
+ const fds = try posix.pipe();
+ try expect((try posix.write(fds[1], "hello")) == 5);
var buf: [16]u8 = undefined;
- try expect((try os.read(fds[0], buf[0..])) == 5);
+ try expect((try posix.read(fds[0], buf[0..])) == 5);
try testing.expectEqualSlices(u8, buf[0..5], "hello");
- os.close(fds[1]);
- os.close(fds[0]);
+ posix.close(fds[1]);
+ posix.close(fds[0]);
}
test "argsAlloc" {
@@ -569,17 +570,17 @@ test "memfd_create" {
else => return error.SkipZigTest,
}
- const fd = os.memfd_create("test", 0) catch |err| switch (err) {
+ const fd = posix.memfd_create("test", 0) catch |err| switch (err) {
// Related: https://github.com/ziglang/zig/issues/4019
error.SystemOutdated => return error.SkipZigTest,
else => |e| return e,
};
- defer os.close(fd);
- try expect((try os.write(fd, "test")) == 4);
- try os.lseek_SET(fd, 0);
+ defer posix.close(fd);
+ try expect((try posix.write(fd, "test")) == 4);
+ try posix.lseek_SET(fd, 0);
var buf: [10]u8 = undefined;
- const bytes_read = try os.read(fd, &buf);
+ const bytes_read = try posix.read(fd, &buf);
try expect(bytes_read == 4);
try expect(mem.eql(u8, buf[0..4], "test"));
}
@@ -593,15 +594,15 @@ test "mmap" {
// Simple mmap() call with non page-aligned size
{
- const data = try os.mmap(
+ const data = try posix.mmap(
null,
1234,
- os.PROT.READ | os.PROT.WRITE,
+ posix.PROT.READ | posix.PROT.WRITE,
.{ .TYPE = .PRIVATE, .ANONYMOUS = true },
-1,
0,
);
- defer os.munmap(data);
+ defer posix.munmap(data);
try testing.expectEqual(@as(usize, 1234), data.len);
@@ -635,15 +636,15 @@ test "mmap" {
const file = try tmp.dir.openFile(test_out_file, .{});
defer file.close();
- const data = try os.mmap(
+ const data = try posix.mmap(
null,
alloc_size,
- os.PROT.READ,
+ posix.PROT.READ,
.{ .TYPE = .PRIVATE },
file.handle,
0,
);
- defer os.munmap(data);
+ defer posix.munmap(data);
var mem_stream = io.fixedBufferStream(data);
const stream = mem_stream.reader();
@@ -659,15 +660,15 @@ test "mmap" {
const file = try tmp.dir.openFile(test_out_file, .{});
defer file.close();
- const data = try os.mmap(
+ const data = try posix.mmap(
null,
alloc_size / 2,
- os.PROT.READ,
+ posix.PROT.READ,
.{ .TYPE = .PRIVATE },
file.handle,
alloc_size / 2,
);
- defer os.munmap(data);
+ defer posix.munmap(data);
var mem_stream = io.fixedBufferStream(data);
const stream = mem_stream.reader();
@@ -683,14 +684,14 @@ test "mmap" {
test "getenv" {
if (native_os == .wasi and !builtin.link_libc) {
- // std.os.getenv is not supported on WASI due to the need of allocation
+ // std.posix.getenv is not supported on WASI due to the need of allocation
return error.SkipZigTest;
}
if (native_os == .windows) {
- try expect(os.getenvW(&[_:0]u16{ 'B', 'O', 'G', 'U', 'S', 0x11, 0x22, 0x33, 0x44, 0x55 }) == null);
+ try expect(std.process.getenvW(&[_:0]u16{ 'B', 'O', 'G', 'U', 'S', 0x11, 0x22, 0x33, 0x44, 0x55 }) == null);
} else {
- try expect(os.getenvZ("BOGUSDOESNOTEXISTENVVAR") == null);
+ try expect(posix.getenvZ("BOGUSDOESNOTEXISTENVVAR") == null);
}
}
@@ -711,18 +712,18 @@ test "fcntl" {
// Note: The test assumes createFile opens the file with CLOEXEC
{
- const flags = try os.fcntl(file.handle, os.F.GETFD, 0);
- try expect((flags & os.FD_CLOEXEC) != 0);
+ const flags = try posix.fcntl(file.handle, posix.F.GETFD, 0);
+ try expect((flags & posix.FD_CLOEXEC) != 0);
}
{
- _ = try os.fcntl(file.handle, os.F.SETFD, 0);
- const flags = try os.fcntl(file.handle, os.F.GETFD, 0);
- try expect((flags & os.FD_CLOEXEC) == 0);
+ _ = try posix.fcntl(file.handle, posix.F.SETFD, 0);
+ const flags = try posix.fcntl(file.handle, posix.F.GETFD, 0);
+ try expect((flags & posix.FD_CLOEXEC) == 0);
}
{
- _ = try os.fcntl(file.handle, os.F.SETFD, os.FD_CLOEXEC);
- const flags = try os.fcntl(file.handle, os.F.GETFD, 0);
- try expect((flags & os.FD_CLOEXEC) != 0);
+ _ = try posix.fcntl(file.handle, posix.F.SETFD, posix.FD_CLOEXEC);
+ const flags = try posix.fcntl(file.handle, posix.F.GETFD, 0);
+ try expect((flags & posix.FD_CLOEXEC) != 0);
}
}
@@ -731,7 +732,7 @@ test "signalfd" {
.linux, .solaris, .illumos => {},
else => return error.SkipZigTest,
}
- _ = &os.signalfd;
+ _ = &posix.signalfd;
}
test "sync" {
@@ -748,8 +749,8 @@ test "sync" {
tmp.dir.deleteFile(test_out_file) catch {};
}
- os.sync();
- try os.syncfs(file.handle);
+ posix.sync();
+ try posix.syncfs(file.handle);
}
test "fsync" {
@@ -768,23 +769,23 @@ test "fsync" {
tmp.dir.deleteFile(test_out_file) catch {};
}
- try os.fsync(file.handle);
- try os.fdatasync(file.handle);
+ try posix.fsync(file.handle);
+ try posix.fdatasync(file.handle);
}
test "getrlimit and setrlimit" {
- if (!@hasDecl(os.system, "rlimit")) {
+ if (!@hasDecl(posix.system, "rlimit")) {
return error.SkipZigTest;
}
- inline for (std.meta.fields(os.rlimit_resource)) |field| {
- const resource = @as(os.rlimit_resource, @enumFromInt(field.value));
- const limit = try os.getrlimit(resource);
+ inline for (std.meta.fields(posix.rlimit_resource)) |field| {
+ const resource = @as(posix.rlimit_resource, @enumFromInt(field.value));
+ const limit = try posix.getrlimit(resource);
// XNU kernel does not support RLIMIT_STACK if a custom stack is active,
// which looks to always be the case. EINVAL is returned.
// See https://github.com/apple-oss-distributions/xnu/blob/5e3eaea39dcf651e66cb99ba7d70e32cc4a99587/bsd/kern/kern_resource.c#L1173
- if (builtin.os.tag.isDarwin() and resource == .STACK) {
+ if (native_os.isDarwin() and resource == .STACK) {
continue;
}
@@ -794,11 +795,11 @@ test "getrlimit and setrlimit" {
// This happens for example if RLIMIT_MEMLOCK is bigger than ~2GiB.
// In that case the following the limit would be RLIM_INFINITY and the following setrlimit fails with EPERM.
if (comptime builtin.cpu.arch.isMIPS() and builtin.link_libc) {
- if (limit.cur != os.linux.RLIM.INFINITY) {
- try os.setrlimit(resource, limit);
+ if (limit.cur != linux.RLIM.INFINITY) {
+ try posix.setrlimit(resource, limit);
}
} else {
- try os.setrlimit(resource, limit);
+ try posix.setrlimit(resource, limit);
}
}
}
@@ -807,15 +808,15 @@ test "shutdown socket" {
if (native_os == .wasi)
return error.SkipZigTest;
if (native_os == .windows) {
- _ = try os.windows.WSAStartup(2, 2);
+ _ = try std.os.windows.WSAStartup(2, 2);
}
defer {
if (native_os == .windows) {
- os.windows.WSACleanup() catch unreachable;
+ std.os.windows.WSACleanup() catch unreachable;
}
}
- const sock = try os.socket(os.AF.INET, os.SOCK.STREAM, 0);
- os.shutdown(sock, .both) catch |err| switch (err) {
+ const sock = try posix.socket(posix.AF.INET, posix.SOCK.STREAM, 0);
+ posix.shutdown(sock, .both) catch |err| switch (err) {
error.SocketNotConnected => {},
else => |e| return e,
};
@@ -838,63 +839,63 @@ test "sigaction" {
const S = struct {
var handler_called_count: u32 = 0;
- fn handler(sig: i32, info: *const os.siginfo_t, ctx_ptr: ?*const anyopaque) callconv(.C) void {
+ fn handler(sig: i32, info: *const posix.siginfo_t, ctx_ptr: ?*const anyopaque) callconv(.C) void {
_ = ctx_ptr;
// Check that we received the correct signal.
switch (native_os) {
.netbsd => {
- if (sig == os.SIG.USR1 and sig == info.info.signo)
+ if (sig == posix.SIG.USR1 and sig == info.info.signo)
handler_called_count += 1;
},
else => {
- if (sig == os.SIG.USR1 and sig == info.signo)
+ if (sig == posix.SIG.USR1 and sig == info.signo)
handler_called_count += 1;
},
}
}
};
- var sa = os.Sigaction{
+ var sa: posix.Sigaction = .{
.handler = .{ .sigaction = &S.handler },
- .mask = os.empty_sigset,
- .flags = os.SA.SIGINFO | os.SA.RESETHAND,
+ .mask = posix.empty_sigset,
+ .flags = posix.SA.SIGINFO | posix.SA.RESETHAND,
};
- var old_sa: os.Sigaction = undefined;
+ var old_sa: posix.Sigaction = undefined;
// Install the new signal handler.
- try os.sigaction(os.SIG.USR1, &sa, null);
+ try posix.sigaction(posix.SIG.USR1, &sa, null);
// Check that we can read it back correctly.
- try os.sigaction(os.SIG.USR1, null, &old_sa);
+ try posix.sigaction(posix.SIG.USR1, null, &old_sa);
try testing.expectEqual(&S.handler, old_sa.handler.sigaction.?);
- try testing.expect((old_sa.flags & os.SA.SIGINFO) != 0);
+ try testing.expect((old_sa.flags & posix.SA.SIGINFO) != 0);
// Invoke the handler.
- try os.raise(os.SIG.USR1);
+ try posix.raise(posix.SIG.USR1);
try testing.expect(S.handler_called_count == 1);
// Check if passing RESETHAND correctly reset the handler to SIG_DFL
- try os.sigaction(os.SIG.USR1, null, &old_sa);
- try testing.expectEqual(os.SIG.DFL, old_sa.handler.handler);
+ try posix.sigaction(posix.SIG.USR1, null, &old_sa);
+ try testing.expectEqual(posix.SIG.DFL, old_sa.handler.handler);
// Reinstall the signal w/o RESETHAND and re-raise
- sa.flags = os.SA.SIGINFO;
- try os.sigaction(os.SIG.USR1, &sa, null);
- try os.raise(os.SIG.USR1);
+ sa.flags = posix.SA.SIGINFO;
+ try posix.sigaction(posix.SIG.USR1, &sa, null);
+ try posix.raise(posix.SIG.USR1);
try testing.expect(S.handler_called_count == 2);
// Now set the signal to ignored
- sa.handler = .{ .handler = os.SIG.IGN };
+ sa.handler = .{ .handler = posix.SIG.IGN };
sa.flags = 0;
- try os.sigaction(os.SIG.USR1, &sa, null);
+ try posix.sigaction(posix.SIG.USR1, &sa, null);
// Re-raise to ensure handler is actually ignored
- try os.raise(os.SIG.USR1);
+ try posix.raise(posix.SIG.USR1);
try testing.expect(S.handler_called_count == 2);
// Ensure that ignored state is returned when querying
- try os.sigaction(os.SIG.USR1, null, &old_sa);
- try testing.expectEqual(os.SIG.IGN, old_sa.handler.handler.?);
+ try posix.sigaction(posix.SIG.USR1, null, &old_sa);
+ try testing.expectEqual(posix.SIG.IGN, old_sa.handler.handler.?);
}
test "dup & dup2" {
@@ -910,13 +911,13 @@ test "dup & dup2" {
var file = try tmp.dir.createFile("os_dup_test", .{});
defer file.close();
- var duped = std.fs.File{ .handle = try os.dup(file.handle) };
+ var duped = std.fs.File{ .handle = try posix.dup(file.handle) };
defer duped.close();
try duped.writeAll("dup");
// Tests aren't run in parallel so using the next fd shouldn't be an issue.
const new_fd = duped.handle + 1;
- try os.dup2(file.handle, new_fd);
+ try posix.dup2(file.handle, new_fd);
var dup2ed = std.fs.File{ .handle = new_fd };
defer dup2ed.close();
try dup2ed.writeAll("dup2");
@@ -938,9 +939,9 @@ test "writev longer than IOV_MAX" {
var file = try tmp.dir.createFile("pwritev", .{});
defer file.close();
- const iovecs = [_]os.iovec_const{.{ .iov_base = "a", .iov_len = 1 }} ** (os.IOV_MAX + 1);
+ const iovecs = [_]posix.iovec_const{.{ .iov_base = "a", .iov_len = 1 }} ** (posix.IOV_MAX + 1);
const amt = try file.writev(&iovecs);
- try testing.expectEqual(@as(usize, os.IOV_MAX), amt);
+ try testing.expectEqual(@as(usize, posix.IOV_MAX), amt);
}
test "POSIX file locking with fcntl" {
@@ -964,46 +965,46 @@ test "POSIX file locking with fcntl" {
const fd = file.handle;
// Place an exclusive lock on the first byte, and a shared lock on the second byte:
- var struct_flock = std.mem.zeroInit(os.Flock, .{ .type = os.F.WRLCK });
- _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock));
+ var struct_flock = std.mem.zeroInit(posix.Flock, .{ .type = posix.F.WRLCK });
+ _ = try posix.fcntl(fd, posix.F.SETLK, @intFromPtr(&struct_flock));
struct_flock.start = 1;
- struct_flock.type = os.F.RDLCK;
- _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock));
+ struct_flock.type = posix.F.RDLCK;
+ _ = try posix.fcntl(fd, posix.F.SETLK, @intFromPtr(&struct_flock));
// Check the locks in a child process:
- const pid = try os.fork();
+ const pid = try posix.fork();
if (pid == 0) {
// child expects be denied the exclusive lock:
struct_flock.start = 0;
- struct_flock.type = os.F.WRLCK;
- try expectError(error.Locked, os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock)));
+ struct_flock.type = posix.F.WRLCK;
+ try expectError(error.Locked, posix.fcntl(fd, posix.F.SETLK, @intFromPtr(&struct_flock)));
// child expects to get the shared lock:
struct_flock.start = 1;
- struct_flock.type = os.F.RDLCK;
- _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock));
+ struct_flock.type = posix.F.RDLCK;
+ _ = try posix.fcntl(fd, posix.F.SETLK, @intFromPtr(&struct_flock));
// child waits for the exclusive lock in order to test deadlock:
struct_flock.start = 0;
- struct_flock.type = os.F.WRLCK;
- _ = try os.fcntl(fd, os.F.SETLKW, @intFromPtr(&struct_flock));
+ struct_flock.type = posix.F.WRLCK;
+ _ = try posix.fcntl(fd, posix.F.SETLKW, @intFromPtr(&struct_flock));
// child exits without continuing:
- os.exit(0);
+ posix.exit(0);
} else {
// parent waits for child to get shared lock:
std.time.sleep(1 * std.time.ns_per_ms);
// parent expects deadlock when attempting to upgrade the shared lock to exclusive:
struct_flock.start = 1;
- struct_flock.type = os.F.WRLCK;
- try expectError(error.DeadLock, os.fcntl(fd, os.F.SETLKW, @intFromPtr(&struct_flock)));
+ struct_flock.type = posix.F.WRLCK;
+ try expectError(error.DeadLock, posix.fcntl(fd, posix.F.SETLKW, @intFromPtr(&struct_flock)));
// parent releases exclusive lock:
struct_flock.start = 0;
- struct_flock.type = os.F.UNLCK;
- _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock));
+ struct_flock.type = posix.F.UNLCK;
+ _ = try posix.fcntl(fd, posix.F.SETLK, @intFromPtr(&struct_flock));
// parent releases shared lock:
struct_flock.start = 1;
- struct_flock.type = os.F.UNLCK;
- _ = try os.fcntl(fd, os.F.SETLK, @intFromPtr(&struct_flock));
+ struct_flock.type = posix.F.UNLCK;
+ _ = try posix.fcntl(fd, posix.F.SETLK, @intFromPtr(&struct_flock));
// parent waits for child:
- const result = os.waitpid(pid, 0);
+ const result = posix.waitpid(pid, 0);
try expect(result.status == 0 * 256);
}
}
@@ -1026,43 +1027,43 @@ test "rename smoke test" {
};
var file_path: []u8 = undefined;
- var fd: os.fd_t = undefined;
- const mode: os.mode_t = if (native_os == .windows) 0 else 0o666;
+ var fd: posix.fd_t = undefined;
+ const mode: posix.mode_t = if (native_os == .windows) 0 else 0o666;
// Create some file using `open`.
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_file" });
- fd = try os.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true, .EXCL = true }, mode);
- os.close(fd);
+ fd = try posix.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true, .EXCL = true }, mode);
+ posix.close(fd);
// Rename the file
var new_file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_other_file" });
- try os.rename(file_path, new_file_path);
+ try posix.rename(file_path, new_file_path);
// Try opening renamed file
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_other_file" });
- fd = try os.open(file_path, .{ .ACCMODE = .RDWR }, mode);
- os.close(fd);
+ fd = try posix.open(file_path, .{ .ACCMODE = .RDWR }, mode);
+ posix.close(fd);
// Try opening original file - should fail with error.FileNotFound
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_file" });
- try expectError(error.FileNotFound, os.open(file_path, .{ .ACCMODE = .RDWR }, mode));
+ try expectError(error.FileNotFound, posix.open(file_path, .{ .ACCMODE = .RDWR }, mode));
// Create some directory
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_dir" });
- try os.mkdir(file_path, mode);
+ try posix.mkdir(file_path, mode);
// Rename the directory
new_file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_other_dir" });
- try os.rename(file_path, new_file_path);
+ try posix.rename(file_path, new_file_path);
// Try opening renamed directory
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_other_dir" });
- fd = try os.open(file_path, .{ .ACCMODE = .RDONLY, .DIRECTORY = true }, mode);
- os.close(fd);
+ fd = try posix.open(file_path, .{ .ACCMODE = .RDONLY, .DIRECTORY = true }, mode);
+ posix.close(fd);
// Try opening original directory - should fail with error.FileNotFound
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_dir" });
- try expectError(error.FileNotFound, os.open(file_path, .{ .ACCMODE = .RDONLY, .DIRECTORY = true }, mode));
+ try expectError(error.FileNotFound, posix.open(file_path, .{ .ACCMODE = .RDONLY, .DIRECTORY = true }, mode));
}
test "access smoke test" {
@@ -1083,50 +1084,49 @@ test "access smoke test" {
};
var file_path: []u8 = undefined;
- var fd: os.fd_t = undefined;
- const mode: os.mode_t = if (native_os == .windows) 0 else 0o666;
+ var fd: posix.fd_t = undefined;
+ const mode: posix.mode_t = if (native_os == .windows) 0 else 0o666;
// Create some file using `open`.
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_file" });
- fd = try os.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true, .EXCL = true }, mode);
- os.close(fd);
+ fd = try posix.open(file_path, .{ .ACCMODE = .RDWR, .CREAT = true, .EXCL = true }, mode);
+ posix.close(fd);
// Try to access() the file
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_file" });
- if (builtin.os.tag == .windows) {
- try os.access(file_path, os.F_OK);
+ if (native_os == .windows) {
+ try posix.access(file_path, posix.F_OK);
} else {
- try os.access(file_path, os.F_OK | os.W_OK | os.R_OK);
+ try posix.access(file_path, posix.F_OK | posix.W_OK | posix.R_OK);
}
// Try to access() a non-existent file - should fail with error.FileNotFound
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_other_file" });
- try expectError(error.FileNotFound, os.access(file_path, os.F_OK));
+ try expectError(error.FileNotFound, posix.access(file_path, posix.F_OK));
// Create some directory
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_dir" });
- try os.mkdir(file_path, mode);
+ try posix.mkdir(file_path, mode);
// Try to access() the directory
file_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "some_dir" });
- try os.access(file_path, os.F_OK);
+ try posix.access(file_path, posix.F_OK);
}
test "timerfd" {
if (native_os != .linux) return error.SkipZigTest;
- const linux = os.linux;
- const tfd = try os.timerfd_create(linux.CLOCK.MONOTONIC, .{ .CLOEXEC = true });
- defer os.close(tfd);
+ const tfd = try posix.timerfd_create(linux.CLOCK.MONOTONIC, .{ .CLOEXEC = true });
+ defer posix.close(tfd);
- // Fire event 10_000_000ns = 10ms after the os.timerfd_settime call.
+ // Fire event 10_000_000ns = 10ms after the posix.timerfd_settime call.
var sit: linux.itimerspec = .{ .it_interval = .{ .tv_sec = 0, .tv_nsec = 0 }, .it_value = .{ .tv_sec = 0, .tv_nsec = 10 * (1000 * 1000) } };
- try os.timerfd_settime(tfd, .{}, &sit, null);
+ try posix.timerfd_settime(tfd, .{}, &sit, null);
- var fds: [1]os.pollfd = .{.{ .fd = tfd, .events = os.linux.POLL.IN, .revents = 0 }};
- try expectEqual(@as(usize, 1), try os.poll(&fds, -1)); // -1 => infinite waiting
+ var fds: [1]posix.pollfd = .{.{ .fd = tfd, .events = linux.POLL.IN, .revents = 0 }};
+ try expectEqual(@as(usize, 1), try posix.poll(&fds, -1)); // -1 => infinite waiting
- const git = try os.timerfd_gettime(tfd);
+ const git = try posix.timerfd_gettime(tfd);
const expect_disarmed_timer: linux.itimerspec = .{ .it_interval = .{ .tv_sec = 0, .tv_nsec = 0 }, .it_value = .{ .tv_sec = 0, .tv_nsec = 0 } };
try expectEqual(expect_disarmed_timer, git);
}
@@ -1138,7 +1138,7 @@ test "isatty" {
var file = try tmp.dir.createFile("foo", .{});
defer file.close();
- try expectEqual(os.isatty(file.handle), false);
+ try expectEqual(posix.isatty(file.handle), false);
}
test "read with empty buffer" {
@@ -1163,7 +1163,7 @@ test "read with empty buffer" {
const bytes = try allocator.alloc(u8, 0);
- _ = try os.read(file.handle, bytes);
+ _ = try posix.read(file.handle, bytes);
}
test "pread with empty buffer" {
@@ -1188,7 +1188,7 @@ test "pread with empty buffer" {
const bytes = try allocator.alloc(u8, 0);
- _ = try os.pread(file.handle, bytes, 0);
+ _ = try posix.pread(file.handle, bytes, 0);
}
test "write with empty buffer" {
@@ -1213,7 +1213,7 @@ test "write with empty buffer" {
const bytes = try allocator.alloc(u8, 0);
- _ = try os.write(file.handle, bytes);
+ _ = try posix.write(file.handle, bytes);
}
test "pwrite with empty buffer" {
@@ -1238,11 +1238,11 @@ test "pwrite with empty buffer" {
const bytes = try allocator.alloc(u8, 0);
- _ = try os.pwrite(file.handle, bytes, 0);
+ _ = try posix.pwrite(file.handle, bytes, 0);
}
-fn expectMode(dir: os.fd_t, file: []const u8, mode: os.mode_t) !void {
- const st = try os.fstatat(dir, file, os.AT.SYMLINK_NOFOLLOW);
+fn expectMode(dir: posix.fd_t, file: []const u8, mode: posix.mode_t) !void {
+ const st = try posix.fstatat(dir, file, posix.AT.SYMLINK_NOFOLLOW);
try expectEqual(mode, st.mode & 0b111_111_111);
}
@@ -1252,31 +1252,31 @@ test "fchmodat smoke test" {
var tmp = tmpDir(.{});
defer tmp.cleanup();
- try expectError(error.FileNotFound, os.fchmodat(tmp.dir.fd, "regfile", 0o666, 0));
- const fd = try os.openat(
+ try expectError(error.FileNotFound, posix.fchmodat(tmp.dir.fd, "regfile", 0o666, 0));
+ const fd = try posix.openat(
tmp.dir.fd,
"regfile",
.{ .ACCMODE = .WRONLY, .CREAT = true, .EXCL = true, .TRUNC = true },
0o644,
);
- os.close(fd);
- try os.symlinkat("regfile", tmp.dir.fd, "symlink");
+ posix.close(fd);
+ try posix.symlinkat("regfile", tmp.dir.fd, "symlink");
const sym_mode = blk: {
- const st = try os.fstatat(tmp.dir.fd, "symlink", os.AT.SYMLINK_NOFOLLOW);
+ const st = try posix.fstatat(tmp.dir.fd, "symlink", posix.AT.SYMLINK_NOFOLLOW);
break :blk st.mode & 0b111_111_111;
};
- try os.fchmodat(tmp.dir.fd, "regfile", 0o640, 0);
+ try posix.fchmodat(tmp.dir.fd, "regfile", 0o640, 0);
try expectMode(tmp.dir.fd, "regfile", 0o640);
- try os.fchmodat(tmp.dir.fd, "regfile", 0o600, os.AT.SYMLINK_NOFOLLOW);
+ try posix.fchmodat(tmp.dir.fd, "regfile", 0o600, posix.AT.SYMLINK_NOFOLLOW);
try expectMode(tmp.dir.fd, "regfile", 0o600);
- try os.fchmodat(tmp.dir.fd, "symlink", 0o640, 0);
+ try posix.fchmodat(tmp.dir.fd, "symlink", 0o640, 0);
try expectMode(tmp.dir.fd, "regfile", 0o640);
try expectMode(tmp.dir.fd, "symlink", sym_mode);
var test_link = true;
- os.fchmodat(tmp.dir.fd, "symlink", 0o600, os.AT.SYMLINK_NOFOLLOW) catch |err| switch (err) {
+ posix.fchmodat(tmp.dir.fd, "symlink", 0o600, posix.AT.SYMLINK_NOFOLLOW) catch |err| switch (err) {
error.OperationNotSupported => test_link = false,
else => |e| return e,
};
@@ -1284,3 +1284,34 @@ test "fchmodat smoke test" {
try expectMode(tmp.dir.fd, "symlink", 0o600);
try expectMode(tmp.dir.fd, "regfile", 0o640);
}
+
+const CommonOpenFlags = packed struct {
+ ACCMODE: posix.ACCMODE = .RDONLY,
+ CREAT: bool = false,
+ EXCL: bool = false,
+ LARGEFILE: bool = false,
+ DIRECTORY: bool = false,
+ CLOEXEC: bool = false,
+ NONBLOCK: bool = false,
+
+ pub fn lower(cof: CommonOpenFlags) posix.O {
+ if (native_os == .wasi) return .{
+ .read = cof.ACCMODE != .WRONLY,
+ .write = cof.ACCMODE != .RDONLY,
+ .CREAT = cof.CREAT,
+ .EXCL = cof.EXCL,
+ .DIRECTORY = cof.DIRECTORY,
+ .NONBLOCK = cof.NONBLOCK,
+ };
+ var result: posix.O = .{
+ .ACCMODE = cof.ACCMODE,
+ .CREAT = cof.CREAT,
+ .EXCL = cof.EXCL,
+ .DIRECTORY = cof.DIRECTORY,
+ .NONBLOCK = cof.NONBLOCK,
+ .CLOEXEC = cof.CLOEXEC,
+ };
+ if (@hasField(posix.O, "LARGEFILE")) result.LARGEFILE = cof.LARGEFILE;
+ return result;
+ }
+};
diff --git a/lib/std/process.zig b/lib/std/process.zig
index 5360a96521..b72c1963f5 100644
--- a/lib/std/process.zig
+++ b/lib/std/process.zig
@@ -1,6 +1,5 @@
const std = @import("std.zig");
const builtin = @import("builtin");
-const os = std.os;
const fs = std.fs;
const mem = std.mem;
const math = std.math;
@@ -8,20 +7,27 @@ const Allocator = mem.Allocator;
const assert = std.debug.assert;
const testing = std.testing;
const child_process = @import("child_process.zig");
+const native_os = builtin.os.tag;
+const posix = std.posix;
+const windows = std.os.windows;
pub const Child = child_process.ChildProcess;
-pub const abort = os.abort;
-pub const exit = os.exit;
-pub const changeCurDir = os.chdir;
-pub const changeCurDirC = os.chdirC;
+pub const abort = posix.abort;
+pub const exit = posix.exit;
+pub const changeCurDir = posix.chdir;
+pub const changeCurDirC = posix.chdirC;
+
+pub const GetCwdError = posix.GetCwdError;
/// The result is a slice of `out_buffer`, from index `0`.
/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
pub fn getCwd(out_buffer: []u8) ![]u8 {
- return os.getcwd(out_buffer);
+ return posix.getcwd(out_buffer);
}
+pub const GetCwdAllocError = Allocator.Error || posix.GetCwdError;
+
/// Caller must free the returned memory.
/// On Windows, the result is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
/// On other platforms, the result is an opaque sequence of bytes with no particular encoding.
@@ -34,7 +40,7 @@ pub fn getCwdAlloc(allocator: Allocator) ![]u8 {
var current_buf: []u8 = &stack_buf;
while (true) {
- if (os.getcwd(current_buf)) |slice| {
+ if (posix.getcwd(current_buf)) |slice| {
return allocator.dupe(u8, slice);
} else |err| switch (err) {
error.NameTooLong => {
@@ -51,7 +57,7 @@ pub fn getCwdAlloc(allocator: Allocator) ![]u8 {
}
test getCwdAlloc {
- if (builtin.os.tag == .wasi) return error.SkipZigTest;
+ if (native_os == .wasi) return error.SkipZigTest;
const cwd = try getCwdAlloc(testing.allocator);
testing.allocator.free(cwd);
@@ -72,13 +78,13 @@ pub const EnvMap = struct {
pub const EnvNameHashContext = struct {
fn upcase(c: u21) u21 {
if (c <= std.math.maxInt(u16))
- return std.os.windows.ntdll.RtlUpcaseUnicodeChar(@as(u16, @intCast(c)));
+ return windows.ntdll.RtlUpcaseUnicodeChar(@as(u16, @intCast(c)));
return c;
}
pub fn hash(self: @This(), s: []const u8) u64 {
_ = self;
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
var h = std.hash.Wyhash.init(0);
var it = std.unicode.Wtf8View.initUnchecked(s).iterator();
while (it.nextCodepoint()) |cp| {
@@ -96,7 +102,7 @@ pub const EnvMap = struct {
pub fn eql(self: @This(), a: []const u8, b: []const u8) bool {
_ = self;
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
var it_a = std.unicode.Wtf8View.initUnchecked(a).iterator();
var it_b = std.unicode.Wtf8View.initUnchecked(b).iterator();
while (true) {
@@ -228,7 +234,7 @@ test "EnvMap" {
try testing.expectEqual(@as(EnvMap.Size, 2), env.count());
// case insensitivity on Windows only
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
try testing.expectEqualStrings("1", env.get("something_New_aNd_LONGER").?);
} else {
try testing.expect(null == env.get("something_New_aNd_LONGER"));
@@ -248,7 +254,7 @@ test "EnvMap" {
try testing.expectEqual(@as(EnvMap.Size, 1), env.count());
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
// test Unicode case-insensitivity on Windows
try env.put("КИРиллИЦА", "something else");
try testing.expectEqualStrings("something else", env.get("кириллица").?);
@@ -279,8 +285,8 @@ pub fn getEnvMap(allocator: Allocator) GetEnvMapError!EnvMap {
var result = EnvMap.init(allocator);
errdefer result.deinit();
- if (builtin.os.tag == .windows) {
- const ptr = os.windows.peb().ProcessParameters.Environment;
+ if (native_os == .windows) {
+ const ptr = windows.peb().ProcessParameters.Environment;
var i: usize = 0;
while (ptr[i] != 0) {
@@ -310,13 +316,13 @@ pub fn getEnvMap(allocator: Allocator) GetEnvMapError!EnvMap {
try result.putMove(key, value);
}
return result;
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ } else if (native_os == .wasi and !builtin.link_libc) {
var environ_count: usize = undefined;
var environ_buf_size: usize = undefined;
- const environ_sizes_get_ret = os.wasi.environ_sizes_get(&environ_count, &environ_buf_size);
+ const environ_sizes_get_ret = std.os.wasi.environ_sizes_get(&environ_count, &environ_buf_size);
if (environ_sizes_get_ret != .SUCCESS) {
- return os.unexpectedErrno(environ_sizes_get_ret);
+ return posix.unexpectedErrno(environ_sizes_get_ret);
}
if (environ_count == 0) {
@@ -328,9 +334,9 @@ pub fn getEnvMap(allocator: Allocator) GetEnvMapError!EnvMap {
const environ_buf = try allocator.alloc(u8, environ_buf_size);
defer allocator.free(environ_buf);
- const environ_get_ret = os.wasi.environ_get(environ.ptr, environ_buf.ptr);
+ const environ_get_ret = std.os.wasi.environ_get(environ.ptr, environ_buf.ptr);
if (environ_get_ret != .SUCCESS) {
- return os.unexpectedErrno(environ_get_ret);
+ return posix.unexpectedErrno(environ_get_ret);
}
for (environ) |env| {
@@ -356,7 +362,7 @@ pub fn getEnvMap(allocator: Allocator) GetEnvMapError!EnvMap {
}
return result;
} else {
- for (os.environ) |line| {
+ for (std.os.environ) |line| {
var line_i: usize = 0;
while (line[line_i] != 0 and line[line_i] != '=') : (line_i += 1) {}
const key = line[0..line_i];
@@ -391,37 +397,37 @@ pub const GetEnvVarOwnedError = error{
/// On Windows, the value is encoded as [WTF-8](https://simonsapin.github.io/wtf-8/).
/// On other platforms, the value is an opaque sequence of bytes with no particular encoding.
pub fn getEnvVarOwned(allocator: Allocator, key: []const u8) GetEnvVarOwnedError![]u8 {
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
const result_w = blk: {
var stack_alloc = std.heap.stackFallback(256 * @sizeOf(u16), allocator);
const stack_allocator = stack_alloc.get();
const key_w = try std.unicode.wtf8ToWtf16LeAllocZ(stack_allocator, key);
defer stack_allocator.free(key_w);
- break :blk std.os.getenvW(key_w) orelse return error.EnvironmentVariableNotFound;
+ break :blk getenvW(key_w) orelse return error.EnvironmentVariableNotFound;
};
// wtf16LeToWtf8Alloc can only fail with OutOfMemory
return std.unicode.wtf16LeToWtf8Alloc(allocator, result_w);
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ } else if (native_os == .wasi and !builtin.link_libc) {
var envmap = getEnvMap(allocator) catch return error.OutOfMemory;
defer envmap.deinit();
const val = envmap.get(key) orelse return error.EnvironmentVariableNotFound;
return allocator.dupe(u8, val);
} else {
- const result = os.getenv(key) orelse return error.EnvironmentVariableNotFound;
+ const result = posix.getenv(key) orelse return error.EnvironmentVariableNotFound;
return allocator.dupe(u8, result);
}
}
/// On Windows, `key` must be valid UTF-8.
pub fn hasEnvVarConstant(comptime key: []const u8) bool {
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
const key_w = comptime std.unicode.utf8ToUtf16LeStringLiteral(key);
- return std.os.getenvW(key_w) != null;
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ return getenvW(key_w) != null;
+ } else if (native_os == .wasi and !builtin.link_libc) {
@compileError("hasEnvVarConstant is not supported for WASI without libc");
} else {
- return os.getenv(key) != null;
+ return posix.getenv(key) != null;
}
}
@@ -436,19 +442,63 @@ pub const HasEnvVarError = error{
/// On Windows, if `key` is not valid [WTF-8](https://simonsapin.github.io/wtf-8/),
/// then `error.InvalidWtf8` is returned.
pub fn hasEnvVar(allocator: Allocator, key: []const u8) HasEnvVarError!bool {
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
var stack_alloc = std.heap.stackFallback(256 * @sizeOf(u16), allocator);
const stack_allocator = stack_alloc.get();
const key_w = try std.unicode.wtf8ToWtf16LeAllocZ(stack_allocator, key);
defer stack_allocator.free(key_w);
- return std.os.getenvW(key_w) != null;
- } else if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ return getenvW(key_w) != null;
+ } else if (native_os == .wasi and !builtin.link_libc) {
var envmap = getEnvMap(allocator) catch return error.OutOfMemory;
defer envmap.deinit();
return envmap.getPtr(key) != null;
} else {
- return os.getenv(key) != null;
+ return posix.getenv(key) != null;
+ }
+}
+
+/// Windows-only. Get an environment variable with a null-terminated, WTF-16 encoded name.
+///
+/// This function performs a Unicode-aware case-insensitive lookup using RtlEqualUnicodeString.
+///
+/// See also:
+/// * `std.posix.getenv`
+/// * `getEnvMap`
+/// * `getEnvVarOwned`
+/// * `hasEnvVarConstant`
+/// * `hasEnvVar`
+pub fn getenvW(key: [*:0]const u16) ?[:0]const u16 {
+ if (native_os != .windows) {
+ @compileError("Windows-only");
+ }
+ const key_slice = mem.sliceTo(key, 0);
+ const ptr = windows.peb().ProcessParameters.Environment;
+ var i: usize = 0;
+ while (ptr[i] != 0) {
+ const key_start = i;
+
+ // There are some special environment variables that start with =,
+ // so we need a special case to not treat = as a key/value separator
+ // if it's the first character.
+ // https://devblogs.microsoft.com/oldnewthing/20100506-00/?p=14133
+ if (ptr[key_start] == '=') i += 1;
+
+ while (ptr[i] != 0 and ptr[i] != '=') : (i += 1) {}
+ const this_key = ptr[key_start..i];
+
+ if (ptr[i] == '=') i += 1;
+
+ const value_start = i;
+ while (ptr[i] != 0) : (i += 1) {}
+ const this_value = ptr[value_start..i :0];
+
+ if (windows.eqlIgnoreCaseWTF16(key_slice, this_key)) {
+ return this_value;
+ }
+
+ i += 1; // skip over null byte
}
+ return null;
}
test getEnvVarOwned {
@@ -459,7 +509,7 @@ test getEnvVarOwned {
}
test hasEnvVarConstant {
- if (builtin.os.tag == .wasi and !builtin.link_libc) return error.SkipZigTest;
+ if (native_os == .wasi and !builtin.link_libc) return error.SkipZigTest;
try testing.expect(!hasEnvVarConstant("BADENV"));
}
@@ -478,14 +528,14 @@ pub const ArgIteratorPosix = struct {
pub fn init() ArgIteratorPosix {
return ArgIteratorPosix{
.index = 0,
- .count = os.argv.len,
+ .count = std.os.argv.len,
};
}
pub fn next(self: *ArgIteratorPosix) ?[:0]const u8 {
if (self.index == self.count) return null;
- const s = os.argv[self.index];
+ const s = std.os.argv[self.index];
self.index += 1;
return mem.sliceTo(s, 0);
}
@@ -503,7 +553,7 @@ pub const ArgIteratorWasi = struct {
index: usize,
args: [][:0]u8,
- pub const InitError = error{OutOfMemory} || os.UnexpectedError;
+ pub const InitError = error{OutOfMemory} || posix.UnexpectedError;
/// You must call deinit to free the internal buffer of the
/// iterator after you are done.
@@ -517,13 +567,12 @@ pub const ArgIteratorWasi = struct {
}
fn internalInit(allocator: Allocator) InitError![][:0]u8 {
- const w = os.wasi;
var count: usize = undefined;
var buf_size: usize = undefined;
- switch (w.args_sizes_get(&count, &buf_size)) {
+ switch (std.os.wasi.args_sizes_get(&count, &buf_size)) {
.SUCCESS => {},
- else => |err| return os.unexpectedErrno(err),
+ else => |err| return posix.unexpectedErrno(err),
}
if (count == 0) {
@@ -535,9 +584,9 @@ pub const ArgIteratorWasi = struct {
const argv_buf = try allocator.alloc(u8, buf_size);
- switch (w.args_get(argv.ptr, argv_buf.ptr)) {
+ switch (std.os.wasi.args_get(argv.ptr, argv_buf.ptr)) {
.SUCCESS => {},
- else => |err| return os.unexpectedErrno(err),
+ else => |err| return posix.unexpectedErrno(err),
}
var result_args = try allocator.alloc([:0]u8, count);
@@ -1007,7 +1056,7 @@ pub fn ArgIteratorGeneral(comptime options: ArgIteratorGeneralOptions) type {
/// Cross-platform command line argument iterator.
pub const ArgIterator = struct {
- const InnerType = switch (builtin.os.tag) {
+ const InnerType = switch (native_os) {
.windows => ArgIteratorWindows,
.wasi => if (builtin.link_libc) ArgIteratorPosix else ArgIteratorWasi,
else => ArgIteratorPosix,
@@ -1018,10 +1067,10 @@ pub const ArgIterator = struct {
/// Initialize the args iterator. Consider using initWithAllocator() instead
/// for cross-platform compatibility.
pub fn init() ArgIterator {
- if (builtin.os.tag == .wasi) {
+ if (native_os == .wasi) {
@compileError("In WASI, use initWithAllocator instead.");
}
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
@compileError("In Windows, use initWithAllocator instead.");
}
@@ -1032,11 +1081,11 @@ pub const ArgIterator = struct {
/// You must deinitialize iterator's internal buffers by calling `deinit` when done.
pub fn initWithAllocator(allocator: Allocator) InitError!ArgIterator {
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ if (native_os == .wasi and !builtin.link_libc) {
return ArgIterator{ .inner = try InnerType.init(allocator) };
}
- if (builtin.os.tag == .windows) {
- const cmd_line_w = os.windows.kernel32.GetCommandLineW();
+ if (native_os == .windows) {
+ const cmd_line_w = windows.kernel32.GetCommandLineW();
return ArgIterator{ .inner = try InnerType.init(allocator, cmd_line_w) };
}
@@ -1061,11 +1110,11 @@ pub const ArgIterator = struct {
/// was created with `initWithAllocator` function.
pub fn deinit(self: *ArgIterator) void {
// Unless we're targeting WASI or Windows, this is a no-op.
- if (builtin.os.tag == .wasi and !builtin.link_libc) {
+ if (native_os == .wasi and !builtin.link_libc) {
self.inner.deinit();
}
- if (builtin.os.tag == .windows) {
+ if (native_os == .windows) {
self.inner.deinit();
}
}
@@ -1334,13 +1383,13 @@ fn testResponseFileCmdLine(input_cmd_line: []const u8, expected_args: []const []
}
pub const UserInfo = struct {
- uid: os.uid_t,
- gid: os.gid_t,
+ uid: posix.uid_t,
+ gid: posix.gid_t,
};
/// POSIX function which gets a uid from username.
pub fn getUserInfo(name: []const u8) !UserInfo {
- return switch (builtin.os.tag) {
+ return switch (native_os) {
.linux,
.macos,
.watchos,
@@ -1376,8 +1425,8 @@ pub fn posixGetUserInfo(name: []const u8) !UserInfo {
var buf: [std.mem.page_size]u8 = undefined;
var name_index: usize = 0;
var state = State.Start;
- var uid: os.uid_t = 0;
- var gid: os.gid_t = 0;
+ var uid: posix.uid_t = 0;
+ var gid: posix.gid_t = 0;
while (true) {
const amt_read = try reader.read(buf[0..]);
@@ -1462,36 +1511,36 @@ pub fn posixGetUserInfo(name: []const u8) !UserInfo {
}
pub fn getBaseAddress() usize {
- switch (builtin.os.tag) {
+ switch (native_os) {
.linux => {
- const base = os.system.getauxval(std.elf.AT_BASE);
+ const base = std.os.linux.getauxval(std.elf.AT_BASE);
if (base != 0) {
return base;
}
- const phdr = os.system.getauxval(std.elf.AT_PHDR);
+ const phdr = std.os.linux.getauxval(std.elf.AT_PHDR);
return phdr - @sizeOf(std.elf.Ehdr);
},
.macos, .freebsd, .netbsd => {
return @intFromPtr(&std.c._mh_execute_header);
},
- .windows => return @intFromPtr(os.windows.kernel32.GetModuleHandleW(null)),
+ .windows => return @intFromPtr(windows.kernel32.GetModuleHandleW(null)),
else => @compileError("Unsupported OS"),
}
}
/// Tells whether calling the `execv` or `execve` functions will be a compile error.
-pub const can_execv = switch (builtin.os.tag) {
+pub const can_execv = switch (native_os) {
.windows, .haiku, .wasi => false,
else => true,
};
/// Tells whether spawning child processes is supported (e.g. via ChildProcess)
-pub const can_spawn = switch (builtin.os.tag) {
+pub const can_spawn = switch (native_os) {
.wasi, .watchos, .tvos => false,
else => true,
};
-pub const ExecvError = std.os.ExecveError || error{OutOfMemory};
+pub const ExecvError = std.posix.ExecveError || error{OutOfMemory};
/// Replaces the current process image with the executed process.
/// This function must allocate memory to add a null terminating bytes on path and each arg.
@@ -1500,7 +1549,7 @@ pub const ExecvError = std.os.ExecveError || error{OutOfMemory};
/// `argv[0]` is the executable path.
/// This function also uses the PATH environment variable to get the full path to the executable.
/// Due to the heap-allocation, it is illegal to call this function in a fork() child.
-/// For that use case, use the `std.os` functions directly.
+/// For that use case, use the `std.posix` functions directly.
pub fn execv(allocator: Allocator, argv: []const []const u8) ExecvError {
return execve(allocator, argv, null);
}
@@ -1512,7 +1561,7 @@ pub fn execv(allocator: Allocator, argv: []const []const u8) ExecvError {
/// `argv[0]` is the executable path.
/// This function also uses the PATH environment variable to get the full path to the executable.
/// Due to the heap-allocation, it is illegal to call this function in a fork() child.
-/// For that use case, use the `std.os` functions directly.
+/// For that use case, use the `std.posix` functions directly.
pub fn execve(
allocator: Allocator,
argv: []const []const u8,
@@ -1536,14 +1585,14 @@ pub fn execve(
} else if (builtin.output_mode == .Exe) {
// Then we have Zig start code and this works.
// TODO type-safety for null-termination of `os.environ`.
- break :m @as([*:null]const ?[*:0]const u8, @ptrCast(os.environ.ptr));
+ break :m @as([*:null]const ?[*:0]const u8, @ptrCast(std.os.environ.ptr));
} else {
// TODO come up with a solution for this.
@compileError("missing std lib enhancement: std.process.execv implementation has no way to collect the environment variables to forward to the child process");
}
};
- return os.execvpeZ_expandArg0(.no_expand, argv_buf.ptr[0].?, argv_buf.ptr, envp);
+ return posix.execvpeZ_expandArg0(.no_expand, argv_buf.ptr[0].?, argv_buf.ptr, envp);
}
pub const TotalSystemMemoryError = error{
@@ -1555,14 +1604,14 @@ pub const TotalSystemMemoryError = error{
/// and Linux's /proc/meminfo reporting more memory when
/// using QEMU user mode emulation.
pub fn totalSystemMemory() TotalSystemMemoryError!u64 {
- switch (builtin.os.tag) {
+ switch (native_os) {
.linux => {
return totalSystemMemoryLinux() catch return error.UnknownTotalSystemMemory;
},
.freebsd => {
var physmem: c_ulong = undefined;
var len: usize = @sizeOf(c_ulong);
- os.sysctlbynameZ("hw.physmem", &physmem, &len, null, 0) catch |err| switch (err) {
+ posix.sysctlbynameZ("hw.physmem", &physmem, &len, null, 0) catch |err| switch (err) {
error.NameTooLong, error.UnknownName => unreachable,
else => return error.UnknownTotalSystemMemory,
};
@@ -1570,12 +1619,12 @@ pub fn totalSystemMemory() TotalSystemMemoryError!u64 {
},
.openbsd => {
const mib: [2]c_int = [_]c_int{
- std.os.CTL.HW,
- std.os.HW.PHYSMEM64,
+ posix.CTL.HW,
+ posix.HW.PHYSMEM64,
};
var physmem: i64 = undefined;
var len: usize = @sizeOf(@TypeOf(physmem));
- std.os.sysctl(&mib, &physmem, &len, null, 0) catch |err| switch (err) {
+ posix.sysctl(&mib, &physmem, &len, null, 0) catch |err| switch (err) {
error.NameTooLong => unreachable, // constant, known good value
error.PermissionDenied => unreachable, // only when setting values,
error.SystemResources => unreachable, // memory already on the stack
@@ -1586,11 +1635,11 @@ pub fn totalSystemMemory() TotalSystemMemoryError!u64 {
return @as(u64, @bitCast(physmem));
},
.windows => {
- var sbi: std.os.windows.SYSTEM_BASIC_INFORMATION = undefined;
- const rc = std.os.windows.ntdll.NtQuerySystemInformation(
+ var sbi: windows.SYSTEM_BASIC_INFORMATION = undefined;
+ const rc = windows.ntdll.NtQuerySystemInformation(
.SystemBasicInformation,
&sbi,
- @sizeOf(std.os.windows.SYSTEM_BASIC_INFORMATION),
+ @sizeOf(windows.SYSTEM_BASIC_INFORMATION),
null,
);
if (rc != .SUCCESS) {
diff --git a/lib/std/start.zig b/lib/std/start.zig
index 49695a3a25..3a2b0714f7 100644
--- a/lib/std/start.zig
+++ b/lib/std/start.zig
@@ -407,7 +407,7 @@ fn posixCallMainAndExit() callconv(.C) noreturn {
// FIXME: Make __aeabi_read_tp call the kernel helper kuser_get_tls
// For the time being use a simple abort instead of a @panic call to
// keep the binary bloat under control.
- std.os.abort();
+ std.posix.abort();
}
}
@@ -422,7 +422,7 @@ fn posixCallMainAndExit() callconv(.C) noreturn {
expandStackSize(phdrs);
}
- std.os.exit(callMainWithArgs(argc, argv, envp));
+ std.posix.exit(callMainWithArgs(argc, argv, envp));
}
fn expandStackSize(phdrs: []elf.Phdr) void {
@@ -432,13 +432,13 @@ fn expandStackSize(phdrs: []elf.Phdr) void {
assert(phdr.p_memsz % std.mem.page_size == 0);
// Silently fail if we are unable to get limits.
- const limits = std.os.getrlimit(.STACK) catch break;
+ const limits = std.posix.getrlimit(.STACK) catch break;
// Clamp to limits.max .
const wanted_stack_size = @min(phdr.p_memsz, limits.max);
if (wanted_stack_size > limits.cur) {
- std.os.setrlimit(.STACK, .{
+ std.posix.setrlimit(.STACK, .{
.cur = wanted_stack_size,
.max = limits.max,
}) catch {
@@ -464,7 +464,7 @@ inline fn callMainWithArgs(argc: usize, argv: [*][*:0]u8, envp: [][*:0]u8) u8 {
std.os.environ = envp;
std.debug.maybeEnableSegfaultHandler();
- std.os.maybeIgnoreSigpipe();
+ maybeIgnoreSigpipe();
return callMain();
}
@@ -563,3 +563,38 @@ pub fn call_wWinMain() std.os.windows.INT {
// second parameter hPrevInstance, MSDN: "This parameter is always NULL"
return root.wWinMain(hInstance, null, lpCmdLine, nCmdShow);
}
+
+fn maybeIgnoreSigpipe() void {
+ const have_sigpipe_support = switch (builtin.os.tag) {
+ .linux,
+ .plan9,
+ .solaris,
+ .netbsd,
+ .openbsd,
+ .haiku,
+ .macos,
+ .ios,
+ .watchos,
+ .tvos,
+ .dragonfly,
+ .freebsd,
+ => true,
+
+ else => false,
+ };
+
+ if (have_sigpipe_support and !std.options.keep_sigpipe) {
+ const posix = std.posix;
+ const act: posix.Sigaction = .{
+ // Set handler to a noop function instead of `SIG.IGN` to prevent
+ // leaking signal disposition to a child process.
+ .handler = .{ .handler = noopSigHandler },
+ .mask = posix.empty_sigset,
+ .flags = 0,
+ };
+ posix.sigaction(posix.SIG.PIPE, &act, null) catch |err|
+ std.debug.panic("failed to set noop SIGPIPE handler: {s}", .{@errorName(err)});
+ }
+}
+
+fn noopSigHandler(_: c_int) callconv(.C) void {}
diff --git a/lib/std/std.zig b/lib/std/std.zig
index 557b320c24..8aa12ff31a 100644
--- a/lib/std/std.zig
+++ b/lib/std/std.zig
@@ -85,12 +85,11 @@ pub const math = @import("math.zig");
pub const mem = @import("mem.zig");
pub const meta = @import("meta.zig");
pub const net = @import("net.zig");
-pub const posix = @import("os.zig");
-/// Non-portable Operating System-specific API.
pub const os = @import("os.zig");
pub const once = @import("once.zig").once;
pub const packed_int_array = @import("packed_int_array.zig");
pub const pdb = @import("pdb.zig");
+pub const posix = @import("posix.zig");
pub const process = @import("process.zig");
/// Deprecated: use `Random` instead.
pub const rand = Random;
@@ -170,3 +169,7 @@ comptime {
test {
testing.refAllDecls(@This());
}
+
+comptime {
+ debug.assert(@import("std") == @This()); // std lib tests require --zig-lib-dir
+}
diff --git a/lib/std/time.zig b/lib/std/time.zig
index 425e028e01..3a4be673cc 100644
--- a/lib/std/time.zig
+++ b/lib/std/time.zig
@@ -2,8 +2,9 @@ const std = @import("std.zig");
const builtin = @import("builtin");
const assert = std.debug.assert;
const testing = std.testing;
-const os = std.os;
const math = std.math;
+const windows = std.os.windows;
+const posix = std.posix;
pub const epoch = @import("time/epoch.zig");
@@ -11,8 +12,8 @@ pub const epoch = @import("time/epoch.zig");
pub fn sleep(nanoseconds: u64) void {
if (builtin.os.tag == .windows) {
const big_ms_from_ns = nanoseconds / ns_per_ms;
- const ms = math.cast(os.windows.DWORD, big_ms_from_ns) orelse math.maxInt(os.windows.DWORD);
- os.windows.kernel32.Sleep(ms);
+ const ms = math.cast(windows.DWORD, big_ms_from_ns) orelse math.maxInt(windows.DWORD);
+ windows.kernel32.Sleep(ms);
return;
}
@@ -40,7 +41,7 @@ pub fn sleep(nanoseconds: u64) void {
}
if (builtin.os.tag == .uefi) {
- const boot_services = os.uefi.system_table.boot_services.?;
+ const boot_services = std.os.uefi.system_table.boot_services.?;
const us_from_ns = nanoseconds / ns_per_us;
const us = math.cast(usize, us_from_ns) orelse math.maxInt(usize);
_ = boot_services.stall(us);
@@ -49,7 +50,7 @@ pub fn sleep(nanoseconds: u64) void {
const s = nanoseconds / ns_per_s;
const ns = nanoseconds % ns_per_s;
- std.os.nanosleep(s, ns);
+ posix.nanosleep(s, ns);
}
test "sleep" {
@@ -60,7 +61,7 @@ test "sleep" {
/// Precision of timing depends on the hardware and operating system.
/// The return value is signed because it is possible to have a date that is
/// before the epoch.
-/// See `std.os.clock_gettime` for a POSIX timestamp.
+/// See `posix.clock_gettime` for a POSIX timestamp.
pub fn timestamp() i64 {
return @divFloor(milliTimestamp(), ms_per_s);
}
@@ -69,7 +70,7 @@ pub fn timestamp() i64 {
/// Precision of timing depends on the hardware and operating system.
/// The return value is signed because it is possible to have a date that is
/// before the epoch.
-/// See `std.os.clock_gettime` for a POSIX timestamp.
+/// See `posix.clock_gettime` for a POSIX timestamp.
pub fn milliTimestamp() i64 {
return @as(i64, @intCast(@divFloor(nanoTimestamp(), ns_per_ms)));
}
@@ -78,7 +79,7 @@ pub fn milliTimestamp() i64 {
/// Precision of timing depends on the hardware and operating system.
/// The return value is signed because it is possible to have a date that is
/// before the epoch.
-/// See `std.os.clock_gettime` for a POSIX timestamp.
+/// See `posix.clock_gettime` for a POSIX timestamp.
pub fn microTimestamp() i64 {
return @as(i64, @intCast(@divFloor(nanoTimestamp(), ns_per_us)));
}
@@ -88,21 +89,21 @@ pub fn microTimestamp() i64 {
/// On Windows this has a maximum granularity of 100 nanoseconds.
/// The return value is signed because it is possible to have a date that is
/// before the epoch.
-/// See `std.os.clock_gettime` for a POSIX timestamp.
+/// See `posix.clock_gettime` for a POSIX timestamp.
pub fn nanoTimestamp() i128 {
switch (builtin.os.tag) {
.windows => {
// FileTime has a granularity of 100 nanoseconds and uses the NTFS/Windows epoch,
// which is 1601-01-01.
const epoch_adj = epoch.windows * (ns_per_s / 100);
- var ft: os.windows.FILETIME = undefined;
- os.windows.kernel32.GetSystemTimeAsFileTime(&ft);
+ var ft: windows.FILETIME = undefined;
+ windows.kernel32.GetSystemTimeAsFileTime(&ft);
const ft64 = (@as(u64, ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
return @as(i128, @as(i64, @bitCast(ft64)) + epoch_adj) * 100;
},
.wasi => {
- var ns: os.wasi.timestamp_t = undefined;
- const err = os.wasi.clock_time_get(.REALTIME, 1, &ns);
+ var ns: std.os.wasi.timestamp_t = undefined;
+ const err = std.os.wasi.clock_time_get(.REALTIME, 1, &ns);
assert(err == .SUCCESS);
return ns;
},
@@ -113,8 +114,8 @@ pub fn nanoTimestamp() i128 {
return value.toEpoch();
},
else => {
- var ts: os.timespec = undefined;
- os.clock_gettime(os.CLOCK.REALTIME, &ts) catch |err| switch (err) {
+ var ts: posix.timespec = undefined;
+ posix.clock_gettime(posix.CLOCK.REALTIME, &ts) catch |err| switch (err) {
error.UnsupportedClock, error.Unexpected => return 0, // "Precision of timing depends on hardware and OS".
};
return (@as(i128, ts.tv_sec) * ns_per_s) + ts.tv_nsec;
@@ -172,7 +173,7 @@ pub const s_per_week = s_per_day * 7;
/// It also tries to be monotonic, but this is not a guarantee due to OS/hardware bugs.
/// If you need monotonic readings for elapsed time, consider `Timer` instead.
pub const Instant = struct {
- timestamp: if (is_posix) os.timespec else u64,
+ timestamp: if (is_posix) posix.timespec else u64,
// true if we should use clock_gettime()
const is_posix = switch (builtin.os.tag) {
@@ -188,11 +189,11 @@ pub const Instant = struct {
const clock_id = switch (builtin.os.tag) {
.windows => {
// QPC on windows doesn't fail on >= XP/2000 and includes time suspended.
- return Instant{ .timestamp = os.windows.QueryPerformanceCounter() };
+ return Instant{ .timestamp = windows.QueryPerformanceCounter() };
},
.wasi => {
- var ns: os.wasi.timestamp_t = undefined;
- const rc = os.wasi.clock_time_get(.MONOTONIC, 1, &ns);
+ var ns: std.os.wasi.timestamp_t = undefined;
+ const rc = std.os.wasi.clock_time_get(.MONOTONIC, 1, &ns);
if (rc != .SUCCESS) return error.Unsupported;
return .{ .timestamp = ns };
},
@@ -204,21 +205,21 @@ pub const Instant = struct {
},
// On darwin, use UPTIME_RAW instead of MONOTONIC as it ticks while
// suspended.
- .macos, .ios, .tvos, .watchos => os.CLOCK.UPTIME_RAW,
+ .macos, .ios, .tvos, .watchos => posix.CLOCK.UPTIME_RAW,
// On freebsd derivatives, use MONOTONIC_FAST as currently there's
// no precision tradeoff.
- .freebsd, .dragonfly => os.CLOCK.MONOTONIC_FAST,
+ .freebsd, .dragonfly => posix.CLOCK.MONOTONIC_FAST,
// On linux, use BOOTTIME instead of MONOTONIC as it ticks while
// suspended.
- .linux => os.CLOCK.BOOTTIME,
+ .linux => posix.CLOCK.BOOTTIME,
// On other posix systems, MONOTONIC is generally the fastest and
// ticks while suspended.
- else => os.CLOCK.MONOTONIC,
+ else => posix.CLOCK.MONOTONIC,
};
- var ts: os.timespec = undefined;
- os.clock_gettime(clock_id, &ts) catch return error.Unsupported;
- return Instant{ .timestamp = ts };
+ var ts: posix.timespec = undefined;
+ posix.clock_gettime(clock_id, &ts) catch return error.Unsupported;
+ return .{ .timestamp = ts };
}
/// Quickly compares two instances between each other.
@@ -245,7 +246,7 @@ pub const Instant = struct {
// https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-kuser_shared_data
// https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi_x/kuser_shared_data/index.htm
const qpc = self.timestamp - earlier.timestamp;
- const qpf = os.windows.QueryPerformanceFrequency();
+ const qpf = windows.QueryPerformanceFrequency();
// 10Mhz (1 qpc tick every 100ns) is a common enough QPF value that we can optimize on it.
// https://github.com/microsoft/STL/blob/785143a0c73f030238ef618890fd4d6ae2b3a3a0/stl/inc/chrono#L694-L701
diff --git a/lib/std/zig.zig b/lib/std/zig.zig
index ce446e59b6..0b2b29eebf 100644
--- a/lib/std/zig.zig
+++ b/lib/std/zig.zig
@@ -1002,7 +1002,7 @@ pub const EnvVar = enum {
}
pub fn getPosix(comptime ev: EnvVar) ?[:0]const u8 {
- return std.os.getenvZ(@tagName(ev));
+ return std.posix.getenvZ(@tagName(ev));
}
};
diff --git a/lib/std/zig/Server.zig b/lib/std/zig/Server.zig
index d112adf45f..bf5fdba231 100644
--- a/lib/std/zig/Server.zig
+++ b/lib/std/zig/Server.zig
@@ -146,7 +146,7 @@ pub fn serveMessage(
header: OutMessage.Header,
bufs: []const []const u8,
) !void {
- var iovecs: [10]std.os.iovec_const = undefined;
+ var iovecs: [10]std.posix.iovec_const = undefined;
const header_le = bswap(header);
iovecs[0] = .{
.iov_base = @as([*]const u8, @ptrCast(&header_le)),
diff --git a/lib/std/zig/system.zig b/lib/std/zig/system.zig
index 3599488dca..b7a5284be9 100644
--- a/lib/std/zig/system.zig
+++ b/lib/std/zig/system.zig
@@ -168,7 +168,7 @@ pub fn resolveTargetQuery(query: Target.Query) DetectError!Target {
if (query.os_tag == null) {
switch (builtin.target.os.tag) {
.linux => {
- const uts = std.os.uname();
+ const uts = posix.uname();
const release = mem.sliceTo(&uts.release, 0);
// The release field sometimes has a weird format,
// `Version.parse` will attempt to find some meaningful interpretation.
@@ -181,7 +181,7 @@ pub fn resolveTargetQuery(query: Target.Query) DetectError!Target {
}
},
.solaris, .illumos => {
- const uts = std.os.uname();
+ const uts = posix.uname();
const release = mem.sliceTo(&uts.release, 0);
if (std.SemanticVersion.parse(release)) |ver| {
os.version_range.semver.min = ver;
@@ -206,7 +206,7 @@ pub fn resolveTargetQuery(query: Target.Query) DetectError!Target {
var value: u32 = undefined;
var len: usize = @sizeOf(@TypeOf(value));
- std.os.sysctlbynameZ(key, &value, &len, null, 0) catch |err| switch (err) {
+ posix.sysctlbynameZ(key, &value, &len, null, 0) catch |err| switch (err) {
error.NameTooLong => unreachable, // constant, known good value
error.PermissionDenied => unreachable, // only when setting values,
error.SystemResources => unreachable, // memory already on the stack
@@ -257,15 +257,15 @@ pub fn resolveTargetQuery(query: Target.Query) DetectError!Target {
},
.openbsd => {
const mib: [2]c_int = [_]c_int{
- std.os.CTL.KERN,
- std.os.KERN.OSRELEASE,
+ posix.CTL.KERN,
+ posix.KERN.OSRELEASE,
};
var buf: [64]u8 = undefined;
// consider that sysctl result includes null-termination
// reserve 1 byte to ensure we never overflow when appending ".0"
var len: usize = buf.len - 1;
- std.os.sysctl(&mib, &buf, &len, null, 0) catch |err| switch (err) {
+ posix.sysctl(&mib, &buf, &len, null, 0) catch |err| switch (err) {
error.NameTooLong => unreachable, // constant, known good value
error.PermissionDenied => unreachable, // only when setting values,
error.SystemResources => unreachable, // memory already on the stack
@@ -636,8 +636,8 @@ pub fn abiAndDynamicLinkerFromFile(
// So far, no luck. Next we try to see if the information is
// present in the symlink data for the dynamic linker path.
- var link_buf: [std.os.PATH_MAX]u8 = undefined;
- const link_name = std.os.readlink(dl_path, &link_buf) catch |err| switch (err) {
+ var link_buf: [posix.PATH_MAX]u8 = undefined;
+ const link_name = posix.readlink(dl_path, &link_buf) catch |err| switch (err) {
error.NameTooLong => unreachable,
error.InvalidUtf8 => unreachable, // WASI only
error.InvalidWtf8 => unreachable, // Windows only
@@ -670,7 +670,7 @@ pub fn abiAndDynamicLinkerFromFile(
// Nothing worked so far. Finally we fall back to hard-coded search paths.
// Some distros such as Debian keep their libc.so.6 in `/lib/$triple/`.
- var path_buf: [std.os.PATH_MAX]u8 = undefined;
+ var path_buf: [posix.PATH_MAX]u8 = undefined;
var index: usize = 0;
const prefix = "/lib/";
const cpu_arch = @tagName(result.cpu.arch);
@@ -1138,6 +1138,7 @@ const fs = std.fs;
const assert = std.debug.assert;
const Target = std.Target;
const native_endian = builtin.cpu.arch.endian();
+const posix = std.posix;
test {
_ = NativePaths;
diff --git a/lib/std/zig/system/NativePaths.zig b/lib/std/zig/system/NativePaths.zig
index 1d3ce10d9b..9d9ab22812 100644
--- a/lib/std/zig/system/NativePaths.zig
+++ b/lib/std/zig/system/NativePaths.zig
@@ -137,21 +137,21 @@ pub fn detect(arena: Allocator, native_target: std.Target) !NativePaths {
// variables to search for headers and libraries.
// We use os.getenv here since this part won't be executed on
// windows, to get rid of unnecessary error handling.
- if (std.os.getenv("C_INCLUDE_PATH")) |c_include_path| {
+ if (std.posix.getenv("C_INCLUDE_PATH")) |c_include_path| {
var it = mem.tokenizeScalar(u8, c_include_path, ':');
while (it.next()) |dir| {
try self.addIncludeDir(dir);
}
}
- if (std.os.getenv("CPLUS_INCLUDE_PATH")) |cplus_include_path| {
+ if (std.posix.getenv("CPLUS_INCLUDE_PATH")) |cplus_include_path| {
var it = mem.tokenizeScalar(u8, cplus_include_path, ':');
while (it.next()) |dir| {
try self.addIncludeDir(dir);
}
}
- if (std.os.getenv("LIBRARY_PATH")) |library_path| {
+ if (std.posix.getenv("LIBRARY_PATH")) |library_path| {
var it = mem.tokenizeScalar(u8, library_path, ':');
while (it.next()) |dir| {
try self.addLibDir(dir);
diff --git a/lib/std/zig/system/darwin/macos.zig b/lib/std/zig/system/darwin/macos.zig
index c4feb7a35b..3b27c2f8cf 100644
--- a/lib/std/zig/system/darwin/macos.zig
+++ b/lib/std/zig/system/darwin/macos.zig
@@ -3,7 +3,6 @@ const builtin = @import("builtin");
const assert = std.debug.assert;
const mem = std.mem;
const testing = std.testing;
-const os = std.os;
const Target = std.Target;
@@ -397,7 +396,7 @@ test "detect" {
pub fn detectNativeCpuAndFeatures() ?Target.Cpu {
var cpu_family: std.c.CPUFAMILY = undefined;
var len: usize = @sizeOf(std.c.CPUFAMILY);
- os.sysctlbynameZ("hw.cpufamily", &cpu_family, &len, null, 0) catch |err| switch (err) {
+ std.posix.sysctlbynameZ("hw.cpufamily", &cpu_family, &len, null, 0) catch |err| switch (err) {
error.NameTooLong => unreachable, // constant, known good value
error.PermissionDenied => unreachable, // only when setting values,
error.SystemResources => unreachable, // memory already on the stack