Bug 1493496. Update Cargo lockfiles re-vendor rust dependencies
authorJeff Muizelaar <jmuizelaar@mozilla.com>
Mon, 24 Sep 2018 23:17:50 -0400
changeset 496504 64029a0e3bafad7ffed4ae041e8c77084b1cf5ad
parent 496503 ce2df8780ef26e37673489bc0d3b19f572b68a9a
child 496505 de7c162147f9225caffc35e35d0dfb0e9a217e58
push id1864
push userffxbld-merge
push dateMon, 03 Dec 2018 15:51:40 +0000
treeherdermozilla-release@f040763d99ad [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1493496
milestone64.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1493496. Update Cargo lockfiles re-vendor rust dependencies
Cargo.lock
third_party/rust/dwrote/.cargo-checksum.json
third_party/rust/dwrote/Cargo.toml
third_party/rust/dwrote/appveyor.yml
third_party/rust/dwrote/src/bitmap_render_target.rs
third_party/rust/dwrote/src/com_helpers.rs
third_party/rust/dwrote/src/comptr.rs
third_party/rust/dwrote/src/font.rs
third_party/rust/dwrote/src/font_collection.rs
third_party/rust/dwrote/src/font_collection_impl.rs
third_party/rust/dwrote/src/font_face.rs
third_party/rust/dwrote/src/font_family.rs
third_party/rust/dwrote/src/font_file.rs
third_party/rust/dwrote/src/font_file_loader_impl.rs
third_party/rust/dwrote/src/gdi_interop.rs
third_party/rust/dwrote/src/geometry_sink_impl.rs
third_party/rust/dwrote/src/glyph_run_analysis.rs
third_party/rust/dwrote/src/helpers.rs
third_party/rust/dwrote/src/lib.rs
third_party/rust/dwrote/src/outline_builder.rs
third_party/rust/dwrote/src/rendering_params.rs
third_party/rust/dwrote/src/test.rs
third_party/rust/dwrote/src/types.rs
third_party/rust/gdi32-sys/.cargo-checksum.json
third_party/rust/gdi32-sys/Cargo.toml
third_party/rust/gdi32-sys/README.md
third_party/rust/gdi32-sys/build.rs
third_party/rust/gdi32-sys/src/lib.rs
third_party/rust/winapi/.cargo-checksum.json
third_party/rust/winapi/.cargo_vcs_info.json
third_party/rust/winapi/Cargo.toml
third_party/rust/winapi/LICENSE-MIT
third_party/rust/winapi/README.md
third_party/rust/winapi/build.rs
third_party/rust/winapi/src/lib.rs
third_party/rust/winapi/src/macros.rs
third_party/rust/winapi/src/shared/d3d9.rs
third_party/rust/winapi/src/shared/d3d9types.rs
third_party/rust/winapi/src/shared/dxgi.rs
third_party/rust/winapi/src/shared/dxgi1_2.rs
third_party/rust/winapi/src/shared/dxgi1_3.rs
third_party/rust/winapi/src/shared/dxgi1_4.rs
third_party/rust/winapi/src/shared/dxgi1_5.rs
third_party/rust/winapi/src/shared/dxgi1_6.rs
third_party/rust/winapi/src/shared/evntprov.rs
third_party/rust/winapi/src/shared/evntrace.rs
third_party/rust/winapi/src/shared/guiddef.rs
third_party/rust/winapi/src/shared/ks.rs
third_party/rust/winapi/src/shared/ksmedia.rs
third_party/rust/winapi/src/shared/minwindef.rs
third_party/rust/winapi/src/shared/mod.rs
third_party/rust/winapi/src/shared/mstcpip.rs
third_party/rust/winapi/src/shared/ntddscsi.rs
third_party/rust/winapi/src/shared/rpc.rs
third_party/rust/winapi/src/shared/rpcdce.rs
third_party/rust/winapi/src/shared/sddl.rs
third_party/rust/winapi/src/shared/sspi.rs
third_party/rust/winapi/src/shared/transportsettingcommon.rs
third_party/rust/winapi/src/shared/tvout.rs
third_party/rust/winapi/src/shared/windef.rs
third_party/rust/winapi/src/shared/wmistr.rs
third_party/rust/winapi/src/shared/wnnc.rs
third_party/rust/winapi/src/shared/ws2def.rs
third_party/rust/winapi/src/shared/ws2ipdef.rs
third_party/rust/winapi/src/shared/wtypes.rs
third_party/rust/winapi/src/um/accctrl.rs
third_party/rust/winapi/src/um/aclapi.rs
third_party/rust/winapi/src/um/appmgmt.rs
third_party/rust/winapi/src/um/bits.rs
third_party/rust/winapi/src/um/bits10_1.rs
third_party/rust/winapi/src/um/bits1_5.rs
third_party/rust/winapi/src/um/bits2_0.rs
third_party/rust/winapi/src/um/bits2_5.rs
third_party/rust/winapi/src/um/bits3_0.rs
third_party/rust/winapi/src/um/bits4_0.rs
third_party/rust/winapi/src/um/bits5_0.rs
third_party/rust/winapi/src/um/bitscfg.rs
third_party/rust/winapi/src/um/bitsmsg.rs
third_party/rust/winapi/src/um/cfgmgr32.rs
third_party/rust/winapi/src/um/combaseapi.rs
third_party/rust/winapi/src/um/commapi.rs
third_party/rust/winapi/src/um/commctrl.rs
third_party/rust/winapi/src/um/commdlg.rs
third_party/rust/winapi/src/um/corsym.rs
third_party/rust/winapi/src/um/d2d1_1.rs
third_party/rust/winapi/src/um/d2d1_3.rs
third_party/rust/winapi/src/um/d2d1effectauthor.rs
third_party/rust/winapi/src/um/d2d1svg.rs
third_party/rust/winapi/src/um/d2dbasetypes.rs
third_party/rust/winapi/src/um/d3d11.rs
third_party/rust/winapi/src/um/d3d11_1.rs
third_party/rust/winapi/src/um/d3d11_2.rs
third_party/rust/winapi/src/um/d3d11sdklayers.rs
third_party/rust/winapi/src/um/d3d11tokenizedprogramformat.rs
third_party/rust/winapi/src/um/d3d12.rs
third_party/rust/winapi/src/um/d3d12shader.rs
third_party/rust/winapi/src/um/d3dcommon.rs
third_party/rust/winapi/src/um/dbghelp.rs
third_party/rust/winapi/src/um/dbt.rs
third_party/rust/winapi/src/um/dcommon.rs
third_party/rust/winapi/src/um/dcomp.rs
third_party/rust/winapi/src/um/dcompanimation.rs
third_party/rust/winapi/src/um/devicetopology.rs
third_party/rust/winapi/src/um/docobj.rs
third_party/rust/winapi/src/um/dpa_dsa.rs
third_party/rust/winapi/src/um/dsound.rs
third_party/rust/winapi/src/um/dwmapi.rs
third_party/rust/winapi/src/um/dwrite_3.rs
third_party/rust/winapi/src/um/dxgidebug.rs
third_party/rust/winapi/src/um/dxva2api.rs
third_party/rust/winapi/src/um/dxvahd.rs
third_party/rust/winapi/src/um/endpointvolume.rs
third_party/rust/winapi/src/um/evntcons.rs
third_party/rust/winapi/src/um/exdisp.rs
third_party/rust/winapi/src/um/fibersapi.rs
third_party/rust/winapi/src/um/fileapi.rs
third_party/rust/winapi/src/um/highlevelmonitorconfigurationapi.rs
third_party/rust/winapi/src/um/http.rs
third_party/rust/winapi/src/um/imm.rs
third_party/rust/winapi/src/um/ioapiset.rs
third_party/rust/winapi/src/um/jobapi.rs
third_party/rust/winapi/src/um/lmaccess.rs
third_party/rust/winapi/src/um/lmsvc.rs
third_party/rust/winapi/src/um/lowlevelmonitorconfigurationapi.rs
third_party/rust/winapi/src/um/lsalookup.rs
third_party/rust/winapi/src/um/minschannel.rs
third_party/rust/winapi/src/um/minwinbase.rs
third_party/rust/winapi/src/um/mmdeviceapi.rs
third_party/rust/winapi/src/um/mmsystem.rs
third_party/rust/winapi/src/um/mod.rs
third_party/rust/winapi/src/um/mschapp.rs
third_party/rust/winapi/src/um/namedpipeapi.rs
third_party/rust/winapi/src/um/ncrypt.rs
third_party/rust/winapi/src/um/ntlsa.rs
third_party/rust/winapi/src/um/ntsecapi.rs
third_party/rust/winapi/src/um/oaidl.rs
third_party/rust/winapi/src/um/objidl.rs
third_party/rust/winapi/src/um/ocidl.rs
third_party/rust/winapi/src/um/ole2.rs
third_party/rust/winapi/src/um/oleauto.rs
third_party/rust/winapi/src/um/oleidl.rs
third_party/rust/winapi/src/um/opmapi.rs
third_party/rust/winapi/src/um/pdh.rs
third_party/rust/winapi/src/um/perflib.rs
third_party/rust/winapi/src/um/physicalmonitorenumerationapi.rs
third_party/rust/winapi/src/um/powersetting.rs
third_party/rust/winapi/src/um/processsnapshot.rs
third_party/rust/winapi/src/um/processthreadsapi.rs
third_party/rust/winapi/src/um/processtopologyapi.rs
third_party/rust/winapi/src/um/profileapi.rs
third_party/rust/winapi/src/um/propkeydef.rs
third_party/rust/winapi/src/um/propsys.rs
third_party/rust/winapi/src/um/reason.rs
third_party/rust/winapi/src/um/restartmanager.rs
third_party/rust/winapi/src/um/restrictederrorinfo.rs
third_party/rust/winapi/src/um/sapi.rs
third_party/rust/winapi/src/um/sapi51.rs
third_party/rust/winapi/src/um/sapi53.rs
third_party/rust/winapi/src/um/sapiddk.rs
third_party/rust/winapi/src/um/sapiddk51.rs
third_party/rust/winapi/src/um/securitybaseapi.rs
third_party/rust/winapi/src/um/servprov.rs
third_party/rust/winapi/src/um/setupapi.rs
third_party/rust/winapi/src/um/shellapi.rs
third_party/rust/winapi/src/um/shobjidl.rs
third_party/rust/winapi/src/um/shobjidl_core.rs
third_party/rust/winapi/src/um/shtypes.rs
third_party/rust/winapi/src/um/subauth.rs
third_party/rust/winapi/src/um/systemtopologyapi.rs
third_party/rust/winapi/src/um/tlhelp32.rs
third_party/rust/winapi/src/um/urlhist.rs
third_party/rust/winapi/src/um/urlmon.rs
third_party/rust/winapi/src/um/userenv.rs
third_party/rust/winapi/src/um/usp10.rs
third_party/rust/winapi/src/um/uxtheme.rs
third_party/rust/winapi/src/um/vsbackup.rs
third_party/rust/winapi/src/um/vss.rs
third_party/rust/winapi/src/um/vswriter.rs
third_party/rust/winapi/src/um/wct.rs
third_party/rust/winapi/src/um/werapi.rs
third_party/rust/winapi/src/um/winbase.rs
third_party/rust/winapi/src/um/wincodec.rs
third_party/rust/winapi/src/um/wincodecsdk.rs
third_party/rust/winapi/src/um/wincred.rs
third_party/rust/winapi/src/um/wincrypt.rs
third_party/rust/winapi/src/um/winefs.rs
third_party/rust/winapi/src/um/wingdi.rs
third_party/rust/winapi/src/um/winioctl.rs
third_party/rust/winapi/src/um/winnls.rs
third_party/rust/winapi/src/um/winnt.rs
third_party/rust/winapi/src/um/winreg.rs
third_party/rust/winapi/src/um/winsafer.rs
third_party/rust/winapi/src/um/winsmcrd.rs
third_party/rust/winapi/src/um/winsvc.rs
third_party/rust/winapi/src/um/winusb.rs
third_party/rust/winapi/src/um/winuser.rs
third_party/rust/winapi/src/vc/limits.rs
third_party/rust/winapi/src/winrt/activation.rs
third_party/rust/winapi/src/winrt/hstring.rs
third_party/rust/winapi/src/winrt/roapi.rs
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -20,17 +20,17 @@ dependencies = [
  "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "ansi_term"
 version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "app_units"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -75,17 +75,17 @@ dependencies = [
 
 [[package]]
 name = "atty"
 version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "audioipc"
 version = "0.2.4"
 dependencies = [
  "bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -629,26 +629,24 @@ dependencies = [
 name = "dump_syms_rust_demangle"
 version = "0.1.0"
 dependencies = [
  "rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "dwrote"
-version = "0.4.2"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.66 (git+https://github.com/servo/serde?branch=deserialize_from_enums8)",
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "either"
 version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -768,17 +766,17 @@ dependencies = [
 ]
 
 [[package]]
 name = "fs2"
 version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "fuchsia-zircon"
 version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -813,25 +811,16 @@ dependencies = [
 ]
 
 [[package]]
 name = "gcc"
 version = "0.3.54"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
-name = "gdi32-sys"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
 name = "geckodriver"
 version = "0.22.0"
 dependencies = [
  "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "clap 2.31.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.12.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1157,17 +1146,17 @@ version = "0.2.43"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "libloading"
 version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cc 1.0.23 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "libudev"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1443,27 +1432,27 @@ version = "0.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "msdos_time"
 version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "net2"
 version = "0.2.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "netwerk_helper"
 version = "0.0.1"
 dependencies = [
  "nserror 0.1.0",
  "nsstring 0.1.0",
@@ -1594,17 +1583,17 @@ dependencies = [
 [[package]]
 name = "parking_lot_core"
 version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "peeking_take_while"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1759,17 +1748,17 @@ dependencies = [
 
 [[package]]
 name = "rand"
 version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "rayon"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1914,17 +1903,17 @@ name = "safemem"
 version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "same-file"
 version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "scoped-tls"
 version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -2306,17 +2295,17 @@ source = "registry+https://github.com/ru
 
 [[package]]
 name = "time"
 version = "0.1.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "redox_syscall 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "tokio"
 version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2487,17 +2476,17 @@ dependencies = [
  "core-foundation 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation-sys 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "devd-rs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "libudev 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
  "runloop 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "ucd-util"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -2583,17 +2572,17 @@ version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "walkdir"
 version = "2.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "same-file 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "want"
 version = "0.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2638,17 +2627,17 @@ dependencies = [
  "app_units 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-text 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dwrote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "plane-split 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2666,33 +2655,33 @@ name = "webrender_api"
 version = "0.57.2"
 dependencies = [
  "app_units 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dwrote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_bytes 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.66 (git+https://github.com/servo/serde?branch=deserialize_from_enums8)",
  "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webrender_bindings"
 version = "0.1.0"
 dependencies = [
  "app_units 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "dwrote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "foreign-types 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "nsstring 0.1.0",
  "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2710,17 +2699,17 @@ dependencies = [
 
 [[package]]
 name = "winapi"
 version = "0.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "winapi"
-version = "0.3.4"
+version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "winapi-build"
@@ -2737,25 +2726,25 @@ name = "winapi-x86_64-pc-windows-gnu"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "wincolor"
 version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "winreg"
 version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "ws2_32-sys"
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2877,17 +2866,17 @@ dependencies = [
 "checksum darling 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2a78af487e4eb8f4421a1770687b328af6bb4494ca93435210678c6eea875c11"
 "checksum darling_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b315f49c7b6db3708bca6e6913c194581a44ec619b7a39e131d4dd63733a3698"
 "checksum darling_macro 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eb69a38fdeaeaf3db712e1df170de67ee9dfc24fb88ca3e9d21e703ec25a4d8e"
 "checksum devd-rs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e7c9ac481c38baf400d3b732e4a06850dfaa491d1b6379a249d9d40d14c2434c"
 "checksum diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3c2b69f912779fbb121ceb775d74d51e915af17aaebc38d28a592843a2dd0a3a"
 "checksum docopt 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d8acd393692c503b168471874953a2531df0e9ab77d0b6bbc582395743300a4a"
 "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"
 "checksum dtoa-short 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "068d4026697c1a18f0b0bb8cfcad1b0c151b90d8edb9bf4c235ad68128920d1d"
-"checksum dwrote 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b26e30aaa6bf31ec830db15fec14ed04f0f2ecfcc486ecfce88c55d3389b237f"
+"checksum dwrote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "30a998e9ff70cd208ccdc4f864e998688bf61d7b897dccec8e17a884d17358bf"
 "checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
 "checksum ena 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cabe5a5078ac8c506d3e4430763b1ba9b609b1286913e7d08e581d1c2de9b7e5"
 "checksum encoding_c 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "769ecb8b33323998e482b218c0d13cd64c267609023b4b7ec3ee740714c318ee"
 "checksum encoding_rs 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2a91912d6f37c6a8fef8a2316a862542d036f13c923ad518b5aca7bcaac7544c"
 "checksum env_logger 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0561146661ae44c579e993456bc76d11ce1e0c7d745e57b2fa7146b6e49fa2ad"
 "checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3"
 "checksum euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "70a2ebdf55fb9d6329046e026329a55ef8fbaae5ea833f56e170beb3125a8a5f"
 "checksum failure 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7efb22686e4a466b1ec1a15c2898f91fa9cb340452496dca654032de20ff95b9"
@@ -2899,17 +2888,16 @@ dependencies = [
 "checksum freetype 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b659e75b7a7338fe75afd7f909fc2b71937845cffb6ebe54ba2e50f13d8e903d"
 "checksum fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
 "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
 "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
 "checksum futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "884dbe32a6ae4cd7da5c6db9b78114449df9953b8d490c9d7e1b51720b922c62"
 "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
 "checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
 "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb"
-"checksum gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518"
 "checksum gl_generator 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a795170cbd85b5a7baa58d6d7525cae6a03e486859860c220f7ebbbdd379d0a"
 "checksum gleam 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0d41e7ac812597988fdae31c9baec3c6d35cadb8ad9ab88a9bf9c0f119ed66c2"
 "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
 "checksum h2 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "a27e7ed946e8335bdf9a191bc1b9b14a03ba822d013d2f58437f4fabcbd7fc2c"
 "checksum http 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "dca621d0fa606a5ff2850b6e337b57ad6137ee4d67e940449643ff45af6874c6"
 "checksum httparse 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "af2f2dd97457e8fb1ae7c5a420db346af389926e36f43768b96f101546b04a07"
 "checksum humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0484fda3e7007f2a4a0d9c3a703ca38c71c54c55602ce4660c419fd32e188c9e"
 "checksum hyper 0.12.7 (registry+https://github.com/rust-lang/crates.io-index)" = "c087746de95e20e4dabe86606c3a019964a8fde2d5f386152939063c116c5971"
@@ -3066,17 +3054,17 @@ dependencies = [
 "checksum vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b"
 "checksum vec_map 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "887b5b631c2ad01628bbbaa7dd4c869f80d3186688f8d0b6f58774fbe324988c"
 "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
 "checksum walkdir 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "63636bd0eb3d00ccb8b9036381b526efac53caf112b7783b730ab3f8e44da369"
 "checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3"
 "checksum webidl 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc14e4b71f94b5bb4c6d696e3b3be4d2e9ee6750a60870ecae09ff7138a131a7"
 "checksum which 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4be6cfa54dab45266e98b5d7be2f8ce959ddd49abd141a05d52dce4b07f803bb"
 "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
-"checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3"
+"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
 "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
 "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 "checksum wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb06499a3a4d44302791052df005d5232b927ed1a9658146d842165c4de7767"
 "checksum winreg 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a"
 "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
 "checksum xml-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c1cb601d29fe2c2ac60a2b2e5e293994d87a1f6fa9687a31a15270f909be9c2"
 "checksum yaml-rust 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57ab38ee1a4a266ed033496cf9af1828d8d6e6c1cfa5f643a2809effcae4d628"
--- a/third_party/rust/dwrote/.cargo-checksum.json
+++ b/third_party/rust/dwrote/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"5fe56546432c0adb817b352c979eb7285d3c03d30dd9dc211449a6bbe3cb175e","README.md":"d69d75705e2582721cbfb2d3b4b2af052c71679057a0b2ac53a22c03f1755bba","appveyor.yml":"2c7b2468dc69bef84860b8900024cb6e1a1c52f6fe1232e8ccd83caaf7c231ca","src/bitmap_render_target.rs":"d3b229f85a9804ac52976431657727b410e7d5253283df046e46d98c196f0a3a","src/com_helpers.rs":"fccb4b36379ae3454a88aa32a8e5c09e46ef5f5626266dde1fe5f40a992de39c","src/comptr.rs":"218435689f505769686e07cfc5428852dda90b849a0d48e670f632307f5edc7c","src/font.rs":"9bdf3134c6ad3639eab3da4419c9b43aad2673797f6fdc65841da2c82e1f3af4","src/font_collection.rs":"969fa3abf141dc3504774886f4783fda4a74cd5a198c643f8a77fc1af4e75258","src/font_face.rs":"97bb3f67516b766fb3522f6fb07836cd55020adecc814353d2da35f885c66a85","src/font_family.rs":"403da9f8f9903cbe7f9f79636497b273f9885e200f53af99f9d4e483f11d6889","src/font_file.rs":"60ad02fc25765a2c113175ea372e98a2be0d84aa65fef9246b6a0192e63ff708","src/font_file_loader_impl.rs":"0d304ad99ff1e6874510a1498223329d798ff75b417e3db7e823a695003dfe92","src/gdi_interop.rs":"98922996afc5b8c8304cb65e7c965419003825dfa172a3e11fe69bf3d768551c","src/glyph_run_analysis.rs":"d30d8b41b047815ab5770c730b7a6d09939f2347b4a4257b87bebec08a5794fe","src/helpers.rs":"5d6f164468234ca8806dc1cea117b42dbfae80cc4c9ae965cb0556efdb364682","src/lib.rs":"af8bae7d775a9ddeb956353e572b553aa2819f7183bb3aed8dde98016f6b4c97","src/rendering_params.rs":"be1d1c433f76926c285d8ecdb747c5d9cc6a6c10c1a1890c0760cd99755ed471","src/test.rs":"d77e45f8866abeea070cbbafd4cbde62d875292e8d191310a04c70091978547c","src/types.rs":"784235c15d61fb0d001373575169aa473c92af18dcbc1709a5b2bbaa3a7ceb22"},"package":"b26e30aaa6bf31ec830db15fec14ed04f0f2ecfcc486ecfce88c55d3389b237f"}
\ No newline at end of file
+{"files":{"Cargo.toml":"76ab5c65a983292b55154defbe54d6d18661e4f0addc237873b8333a6f5f3c05","README.md":"d69d75705e2582721cbfb2d3b4b2af052c71679057a0b2ac53a22c03f1755bba","appveyor.yml":"7c1e0718a363d3567cecd1ef772d4e17c2a17f18906dc464dce8a2411adff6be","src/bitmap_render_target.rs":"fc13525d7459515e4bf9769c8a8961b046b4d1ba4042591aaf0925dd5edebf64","src/com_helpers.rs":"02535b27bfb0cee6e4d8db3abd22f2d2e8137a4ce3ab3504beaf4fa3ca9370df","src/comptr.rs":"84794cf04b772398e75fdb5d55fd8fa015abf26c61b1f9c761a597133682b2e1","src/font.rs":"a79b944f2f5125bbef9e24921355dc6996f073e3742ddd410b8efaa0df3a3ee2","src/font_collection.rs":"df3767b305e9981fbe9398d9982123c668fb2a38cd92f5bdbaf574353005378d","src/font_collection_impl.rs":"a585a6ce62083b3346d67619ea47fec46423a7fb04cc11372828389ab26c5a05","src/font_face.rs":"55d3ddef22be160b9b9a0ffd677993290b0df0f847e7dbcce4014a222490205e","src/font_family.rs":"4e948542dba0c158187d0cb2d72343c443380480cacd12894070d0ef1351dd0a","src/font_file.rs":"913c5dd428028fb3c870b70f4ef2ac2ac357c7ae02cc2c7fb075eb675dcc97b4","src/font_file_loader_impl.rs":"42d23dd036bd2ec7c76de6fffd34a675949f5f881fba553f53351f2ac96da003","src/gdi_interop.rs":"04dbef7c34bb0fe62c4f2c2ceca62ca94c75a964d744b29b3322a6c3bbb4eabd","src/geometry_sink_impl.rs":"d615de212e55b8b8d95c8d605fc5d78044b4ae4dfd846f706911a16cc3afc049","src/glyph_run_analysis.rs":"3b2a351422098a19e8f490421e5b19227fc14a41a0df97d488c536fd1d4b552c","src/helpers.rs":"2f3c57642b24b80c45bbd012e7d6ca1fc524b1b42a8be004cb9b52ea13f4166d","src/lib.rs":"b634e62dd088d804429f451ba9f14aaab0b6a1179042d70fed825f3253ffacfb","src/outline_builder.rs":"0f5c842b2ffe75e21d68f93be6a3834c120bd43303d4e490fdfee9f4f964cdc4","src/rendering_params.rs":"850a51143790f5d29422dc49cbceddc232d814ecd0e6933434ad644e6eec539b","src/test.rs":"120f63cd638b2195caeec8c74a06985103abc6e720275a7f80ffdf130474a8a0","src/types.rs":"587aea2e50720e85b28efe237c8ea10bc45b52049ca724447a0fc9b0e6672b11"},"package":"30a998e9ff70cd208ccdc4f864e998688bf61d7b897dccec8e17a884d17358bf"}
\ No newline at end of file
--- a/third_party/rust/dwrote/Cargo.toml
+++ b/third_party/rust/dwrote/Cargo.toml
@@ -7,36 +7,31 @@
 #
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 name = "dwrote"
-version = "0.4.2"
+version = "0.5.1"
 authors = ["Vladimir Vukicevic <vladimir@pobox.com>"]
 description = "Lightweight binding to DirectWrite."
 license = "MPL-2.0"
 repository = "https://github.com/servo/dwrote-rs"
 
 [lib]
 name = "dwrote"
-[dependencies.gdi32-sys]
-version = "0.2"
-
-[dependencies.kernel32-sys]
-version = "0.2"
-
 [dependencies.lazy_static]
 version = "1"
 
 [dependencies.libc]
 version = "0.2"
 
 [dependencies.serde]
 version = "1.0"
 
 [dependencies.serde_derive]
 version = "1.0"
 
 [dependencies.winapi]
-version = "0.2"
+version = "0.3.6"
+features = ["dwrite", "dwrite_1", "dwrite_3", "winnt", "unknwnbase", "libloaderapi", "winnls"]
--- a/third_party/rust/dwrote/appveyor.yml
+++ b/third_party/rust/dwrote/appveyor.yml
@@ -1,13 +1,121 @@
+# Appveyor configuration template for Rust using rustup for Rust installation
+# https://github.com/starkat99/appveyor-rust
+
+## Operating System (VM environment) ##
+
+# Rust needs at least Visual Studio 2013 Appveyor OS for MSVC targets.
+os: Visual Studio 2015
+
+## Build Matrix ##
+
+# This configuration will setup a build for each channel & target combination (12 windows
+# combinations in all).
+#
+# There are 3 channels: stable, beta, and nightly.
+#
+# Alternatively, the full version may be specified for the channel to build using that specific
+# version (e.g. channel: 1.5.0)
+#
+# The values for target are the set of windows Rust build targets. Each value is of the form
+#
+# ARCH-pc-windows-TOOLCHAIN
+#
+# Where ARCH is the target architecture, either x86_64 or i686, and TOOLCHAIN is the linker
+# toolchain to use, either msvc or gnu. See https://www.rust-lang.org/downloads.html#win-foot for
+# a description of the toolchain differences.
+# See https://github.com/rust-lang-nursery/rustup.rs/#toolchain-specification for description of
+# toolchains and host triples.
+#
+# Comment out channel/target combos you do not wish to build in CI.
+#
+# You may use the `cargoflags` and `RUSTFLAGS` variables to set additional flags for cargo commands
+# and rustc, respectively. For instance, you can uncomment the cargoflags lines in the nightly
+# channels to enable unstable features when building for nightly. Or you could add additional
+# matrix entries to test different combinations of features.
 environment:
-  PATH: 'C:\msys64\mingw64\bin;C:\msys64\usr\bin;%PATH%;C:\Rust\bin'
+  matrix:
+
+### MSVC Toolchains ###
+
+  # Stable 64-bit MSVC
+   - channel: stable
+     target: x86_64-pc-windows-msvc
+  # Stable 32-bit MSVC
+  #  - channel: stable
+  #    target: i686-pc-windows-msvc
+  # Beta 64-bit MSVC
+  #  - channel: beta
+  #    target: x86_64-pc-windows-msvc
+  # Beta 32-bit MSVC
+  #  - channel: beta
+  #    target: i686-pc-windows-msvc
+  # Nightly 64-bit MSVC
+  #  - channel: nightly
+  #    target: x86_64-pc-windows-msvc
+      #cargoflags: --features "unstable"
+  # Nightly 32-bit MSVC
+  #  - channel: nightly
+  #    target: i686-pc-windows-msvc
+      #cargoflags: --features "unstable"
+
+### GNU Toolchains ###
 
+  # Stable 64-bit GNU
+  #  - channel: stable
+  #    target: x86_64-pc-windows-gnu
+  # Stable 32-bit GNU
+  #  - channel: stable
+  #    target: i686-pc-windows-gnu
+  # Beta 64-bit GNU
+  #  - channel: beta
+  #    target: x86_64-pc-windows-gnu
+  # Beta 32-bit GNU
+  #  - channel: beta
+  #    target: i686-pc-windows-gnu
+  # Nightly 64-bit GNU
+  #  - channel: nightly
+  #    target: x86_64-pc-windows-gnu
+  #    #cargoflags: --features "unstable"
+  # Nightly 32-bit GNU
+  #  - channel: nightly
+  #    target: i686-pc-windows-gnu
+      #cargoflags: --features "unstable"
+
+### Allowed failures ###
+
+# See Appveyor documentation for specific details. In short, place any channel or targets you wish
+# to allow build failures on (usually nightly at least is a wise choice). This will prevent a build
+# or test failure in the matching channels/targets from failing the entire build.
+matrix:
+  allow_failures:
+    - channel: nightly
+
+# If you only care about stable channel build failures, uncomment the following line:
+    #- channel: beta
+
+## Install Script ##
+
+# This is the most important part of the Appveyor configuration. This installs the version of Rust
+# specified by the 'channel' and 'target' environment variables from the build matrix. This uses
+# rustup to install Rust.
+#
+# For simple configurations, instead of using the build matrix, you can simply set the
+# default-toolchain and default-host manually here.
 install:
-  - ps: Start-FileDownload "https://static.rust-lang.org/dist/rust-nightly-x86_64-pc-windows-gnu.msi"
-  - msiexec /passive /i "rust-nightly-x86_64-pc-windows-gnu.msi" ADDLOCAL=Rustc,Cargo,Std INSTALLDIR=C:\Rust
-  - rustc -V
-  - cargo -V
+  - appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
+  - rustup-init -yv --default-toolchain %channel% --default-host %target%
+  - set PATH=%PATH%;%USERPROFILE%\.cargo\bin
+  - rustc -vV
+  - cargo -vV
 
+## Build Script ##
+
+# 'cargo test' takes care of building for us, so disable Appveyor's build stage. This prevents
+# the "directory does not contain a project or solution file" error.
 build: false
 
+# Uses 'cargo test' to run tests and build. Alternatively, the project may call compiled programs
+#directly or perform other testing commands. Rust will automatically be placed in the PATH
+# environment variable.
 test_script:
-  - cargo test --verbose
+  - cargo test --verbose %cargoflags%
--- a/third_party/rust/dwrote/src/bitmap_render_target.rs
+++ b/third_party/rust/dwrote/src/bitmap_render_target.rs
@@ -2,107 +2,110 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::slice;
 use std::cell::UnsafeCell;
 use std::mem::{zeroed, size_of};
 
 use comptr::ComPtr;
-use winapi;
-use gdi32;
+use winapi::um::dwrite::{DWRITE_GLYPH_RUN, DWRITE_GLYPH_OFFSET};
+use winapi::um::dwrite::IDWriteBitmapRenderTarget;
+use winapi::um::dcommon::{DWRITE_MEASURING_MODE};
+use winapi::um::wingdi::{BITMAP, OBJ_BITMAP, RGB, GetObjectW, GetCurrentObject};
+use winapi::shared::windef::{RECT, HDC};
+use winapi::ctypes::c_void;
 use super::{FontFace, RenderingParams};
 
-#[derive(Debug)]
 pub struct BitmapRenderTarget {
-    native: UnsafeCell<ComPtr<winapi::IDWriteBitmapRenderTarget>>,
+    native: UnsafeCell<ComPtr<IDWriteBitmapRenderTarget>>,
 }
 
 impl BitmapRenderTarget {
-    pub fn take(native: ComPtr<winapi::IDWriteBitmapRenderTarget>) -> BitmapRenderTarget {
+    pub fn take(native: ComPtr<IDWriteBitmapRenderTarget>) -> BitmapRenderTarget {
         BitmapRenderTarget {
             native: UnsafeCell::new(native),
         }
     }
 
-    pub unsafe fn as_ptr(&self) -> *mut winapi::IDWriteBitmapRenderTarget {
+    pub unsafe fn as_ptr(&self) -> *mut IDWriteBitmapRenderTarget {
         (*self.native.get()).as_ptr()
     }
 
     // A dip is 1/96th of an inch, so this value is the number of pixels per inch divided by 96.
     pub fn set_pixels_per_dip(&self, ppd: f32) {
         unsafe {
             (*self.native.get()).SetPixelsPerDip(ppd);
         }
     }
 
-    pub fn get_memory_dc(&self) -> winapi::HDC {
+    pub fn get_memory_dc(&self) -> HDC {
         unsafe {
             (*self.native.get()).GetMemoryDC()
         }
     }
 
     pub fn draw_glyph_run(&self,
                           baseline_origin_x: f32,
                           baseline_origin_y: f32,
-                          measuring_mode: winapi::DWRITE_MEASURING_MODE,
+                          measuring_mode: DWRITE_MEASURING_MODE,
                           font_face: &FontFace,
                           em_size: f32,
                           glyph_indices: &[u16],
                           glyph_advances: &[f32],
-                          glyph_offsets: &[winapi::DWRITE_GLYPH_OFFSET],
+                          glyph_offsets: &[DWRITE_GLYPH_OFFSET],
                           rendering_params: &RenderingParams,
                           color: &(f32, f32, f32))
-        -> winapi::RECT
+        -> RECT
     {
         unsafe {
             assert!(glyph_indices.len() == glyph_advances.len());
             assert!(glyph_indices.len() == glyph_offsets.len());
 
             let r = (color.0 * 255.0) as u8;
             let g = (color.1 * 255.0) as u8;
             let b = (color.2 * 255.0) as u8;
 
-            let mut glyph_run: winapi::DWRITE_GLYPH_RUN = zeroed();
+            let mut glyph_run: DWRITE_GLYPH_RUN = zeroed();
             glyph_run.fontFace = font_face.as_ptr();
             glyph_run.fontEmSize = em_size;
             glyph_run.glyphCount = glyph_indices.len() as u32;
             glyph_run.glyphIndices = glyph_indices.as_ptr();
             glyph_run.glyphAdvances = glyph_advances.as_ptr();
             glyph_run.glyphOffsets = glyph_offsets.as_ptr();
             glyph_run.isSideways = 0;
             glyph_run.bidiLevel = 0;
 
-            let mut rect: winapi::RECT = zeroed();
+            let mut rect: RECT = zeroed();
             let hr = (*self.native.get()).DrawGlyphRun(baseline_origin_x,
                                                        baseline_origin_y,
                                                        measuring_mode,
                                                        &glyph_run,
                                                        rendering_params.as_ptr(),
-                                                       winapi::RGB(r,g,b),
+                                                       RGB(r,g,b),
                                                        &mut rect);
             assert!(hr == 0);
             rect
         }
     }
 
     // This function expects to have glyphs rendered in WHITE,
     // and pulls out a u8 vector of width*height*4 size with
     // the coverage value (we pull out R) broadcast to the alpha
     // channel, with the color white.  That is, it performs:
     // RGBX -> xxxR, where xxx = 0xff
     pub fn get_opaque_values_as_mask(&self) -> Vec<u8> {
         // Now grossness to pull out the pixels
         unsafe {
             let memory_dc = self.get_memory_dc();
-            let mut bitmap: winapi::BITMAP = zeroed();
-            let ret = gdi32::GetObjectW(gdi32::GetCurrentObject(memory_dc, winapi::OBJ_BITMAP),
-                                        size_of::<winapi::BITMAP>() as i32,
-                                        &mut bitmap as *mut _ as *mut winapi::c_void);
-            assert!(ret == size_of::<winapi::BITMAP>() as i32);
+            let mut bitmap: BITMAP = zeroed();
+            let ret = GetObjectW(GetCurrentObject(memory_dc, OBJ_BITMAP),
+                                 size_of::<BITMAP>() as i32,
+                                 &mut bitmap as *mut _ as *mut c_void);
+            assert!(ret == size_of::<BITMAP>() as i32);
             assert!(bitmap.bmBitsPixel == 32);
 
             let width = bitmap.bmWidth as usize;
             let stride = bitmap.bmWidthBytes as usize;
             let height = bitmap.bmHeight as usize;
 
             let mut out_bytes: Vec<u8> = vec![0; width * height * 4];
             let mut out_u32 = slice::from_raw_parts_mut(out_bytes.as_mut_ptr() as *mut u32,
--- a/third_party/rust/dwrote/src/com_helpers.rs
+++ b/third_party/rust/dwrote/src/com_helpers.rs
@@ -21,17 +21,17 @@ macro_rules! implement_iunknown {
                 unsafe extern "system" fn QueryInterface(This: *mut IUnknown,
                                                          riid: REFIID,
                                                          ppvObject: *mut *mut c_void) -> HRESULT {
                     let this = if guid_equals!(*riid, $iuud) {
                         mem::transmute(This)
                     } else if guid_equals!(*riid, UuidOfIUnknown) {
                         mem::transmute(This)
                     } else {
-                        return $crate::winapi::E_NOINTERFACE;
+                        return $crate::winapi::shared::winerror::E_NOINTERFACE;
                     };
 
                     (*This).AddRef();
                     *ppvObject = this;
                     return S_OK;
                 }
                 QueryInterface
             },
@@ -43,36 +43,36 @@ macro_rules! implement_iunknown {
                 }
                 AddRef
             },
             Release: {
                 unsafe extern "system" fn Release(This: *mut IUnknown) -> ULONG {
                     let this = $typ::from_interface(This);
                     let count = this.refcount.fetch_sub(1, atomic::Ordering::Release) - 1;
                     if count == 0 {
-                        FontFileStream::destroy(This);
+                        <$typ as Com<$interface>>::destroy(This as *mut $interface);
                     }
                     count as ULONG
                 }
                 Release
             },
         }
     };
     (static $interface:ident, $iuud:ident, $typ:ident) => {
         IUnknownVtbl {
             QueryInterface: {
                 unsafe extern "system" fn QueryInterface(This: *mut IUnknown,
                                                          riid: REFIID,
-                                                         ppvObject: *mut *mut c_void) -> HRESULT {
+                                                         ppvObject: *mut *mut $crate::winapi::ctypes::c_void) -> HRESULT {
                     let this = if guid_equals!(*riid, $iuud) {
                         mem::transmute(This)
                     } else if guid_equals!(*riid, UuidOfIUnknown) {
                         mem::transmute(This)
                     } else {
-                        return $crate::winapi::E_NOINTERFACE;
+                        return $crate::winapi::shared::winerror::E_NOINTERFACE;
                     };
 
                     (*This).AddRef();
                     *ppvObject = this;
                     return S_OK;
                 }
                 QueryInterface
             },
--- a/third_party/rust/dwrote/src/comptr.rs
+++ b/third_party/rust/dwrote/src/comptr.rs
@@ -1,15 +1,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::ops::{Deref, DerefMut};
 use std::ptr;
-use winapi::{IUnknown, REFIID, S_OK, E_NOINTERFACE};
+use winapi::um::unknwnbase::IUnknown;
+use winapi::shared::guiddef::REFIID;
+use winapi::shared::winerror::{S_OK, E_NOINTERFACE};
 
 #[derive(Debug)]
 pub struct ComPtr<T> {
     ptr: *mut T,
 }
 
 impl<T> ComPtr<T> {
     pub fn new() -> Self {
@@ -20,21 +22,21 @@ impl<T> ComPtr<T> {
         unsafe {
             if !ptr.is_null() {
                 (*(ptr as *mut IUnknown)).AddRef();
             }
         }
         ComPtr { ptr: ptr }
     }
 
-    pub fn already_addrefed(ptr: *mut T) -> Self {
+    pub unsafe fn already_addrefed(ptr: *mut T) -> Self {
         ComPtr { ptr: ptr }
     }
 
-    pub fn getter_addrefs<Q>(&mut self) -> *mut *mut Q {
+    pub unsafe fn getter_addrefs<Q>(&mut self) -> *mut *mut Q {
         self.release();
         return &mut self.ptr as *mut *mut _ as *mut *mut Q;
     }
 
     pub fn as_ptr(&self) -> *mut T {
         self.ptr
     }
 
@@ -56,29 +58,31 @@ impl<T> ComPtr<T> {
 
     pub fn addref(&self) {
         unsafe {
             assert!(!self.ptr.is_null());
             (*(self.ptr as *mut IUnknown)).AddRef();
         }
     }
 
-    pub fn release(&self) {
-        unsafe {
-            if !self.ptr.is_null() {
-                (*(self.ptr as *mut IUnknown)).Release();
-            }
+    pub unsafe fn release(&self) {
+        if !self.ptr.is_null() {
+            (*(self.ptr as *mut IUnknown)).Release();
         }
     }
 
     pub fn forget(&mut self) -> *mut T {
         let ptr = self.ptr;
         self.ptr = ptr::null_mut();
         ptr
     }
+
+    pub fn is_null(&self) -> bool {
+        self.ptr.is_null()
+    }
 }
 
 impl<T> Clone for ComPtr<T> {
     fn clone(&self) -> Self {
         if !self.ptr.is_null() {
             self.addref();
         }
         ComPtr { ptr: self.ptr }
@@ -103,13 +107,15 @@ impl<T> DerefMut for ComPtr<T> {
 impl<T> PartialEq for ComPtr<T> {
     fn eq(&self, other: &ComPtr<T>) -> bool {
         self.ptr == other.ptr
     }
 }
 
 impl<T> Drop for ComPtr<T> {
     fn drop(&mut self) {
-        self.release();
+        unsafe {
+            self.release();
+        }
     }
 }
 
 unsafe impl<T> Send for ComPtr<T> {}
--- a/third_party/rust/dwrote/src/font.rs
+++ b/third_party/rust/dwrote/src/font.rs
@@ -1,87 +1,148 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::cell::UnsafeCell;
 
 use comptr::ComPtr;
-use winapi;
+use winapi::shared::minwindef::{BOOL, FALSE, TRUE};
+use winapi::shared::winerror::S_OK;
+use winapi::um::dwrite::{DWRITE_FONT_METRICS, DWRITE_INFORMATIONAL_STRING_FULL_NAME, DWRITE_INFORMATIONAL_STRING_ID};
+use winapi::um::dwrite::{DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME};
+use winapi::um::dwrite::{DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME, IDWriteFontFace};
+use winapi::um::dwrite::{IDWriteLocalizedStrings, IDWriteFont, IDWriteFontFamily};
+use winapi::um::dwrite_1::IDWriteFont1;
 use std::mem;
 
 use super::*;
 use helpers::*;
 
-#[derive(Debug)]
 pub struct Font {
-    native: UnsafeCell<ComPtr<winapi::IDWriteFont>>,
+    native: UnsafeCell<ComPtr<IDWriteFont>>,
 }
 
 impl Font {
-    pub fn take(native: ComPtr<winapi::IDWriteFont>) -> Font {
+    pub fn take(native: ComPtr<IDWriteFont>) -> Font {
         Font {
             native: UnsafeCell::new(native),
         }
     }
 
-    pub unsafe fn as_ptr(&self) -> *mut winapi::IDWriteFont {
+    pub unsafe fn as_ptr(&self) -> *mut IDWriteFont {
         (*self.native.get()).as_ptr()
     }
 
     pub fn to_descriptor(&self) -> FontDescriptor {
         FontDescriptor {
             family_name: self.family_name(),
             stretch: self.stretch(),
             style: self.style(),
             weight: self.weight(),
         }
     }
 
     pub fn stretch(&self) -> FontStretch {
         unsafe {
-            mem::transmute::<u32, FontStretch>((*self.native.get()).GetStretch().0)
+            mem::transmute::<u32, FontStretch>((*self.native.get()).GetStretch())
         }
     }
 
     pub fn style(&self) -> FontStyle {
         unsafe {
-            mem::transmute::<u32, FontStyle>((*self.native.get()).GetStyle().0)
+            mem::transmute::<u32, FontStyle>((*self.native.get()).GetStyle())
         }
     }
 
     pub fn weight(&self) -> FontWeight {
         unsafe {
-            mem::transmute::<u32, FontWeight>((*self.native.get()).GetWeight().0)
+            FontWeight::from_u32((*self.native.get()).GetWeight())
+        }
+    }
+
+    pub fn is_monospace(&self) -> Option<bool> {
+        unsafe {
+            let font1: Option<ComPtr<IDWriteFont1>> = (*self.native.get()).query_interface(&IDWriteFont1::uuidof());
+            font1.map(|font| font.IsMonospacedFont() == TRUE)
+        }
+    }
+
+    pub fn simulations(&self) -> FontSimulations {
+        unsafe {
+            mem::transmute::<u32, FontSimulations>((*self.native.get()).GetSimulations())
         }
     }
 
     pub fn family_name(&self) -> String {
         unsafe {
-            let mut family: ComPtr<winapi::IDWriteFontFamily> = ComPtr::new();
+            let mut family: ComPtr<IDWriteFontFamily> = ComPtr::new();
             let hr = (*self.native.get()).GetFontFamily(family.getter_addrefs());
             assert!(hr == 0);
 
             FontFamily::take(family).name()
         }
     }
 
     pub fn face_name(&self) -> String {
         unsafe {
-            let mut names: ComPtr<winapi::IDWriteLocalizedStrings> = ComPtr::new();
+            let mut names: ComPtr<IDWriteLocalizedStrings> = ComPtr::new();
             let hr = (*self.native.get()).GetFaceNames(names.getter_addrefs());
             assert!(hr == 0);
 
             get_locale_string(&mut names)
         }
     }
 
+    pub fn informational_string(&self, id: InformationalStringId) -> Option<String> {
+        unsafe {
+            let mut names: ComPtr<IDWriteLocalizedStrings> = ComPtr::new();
+            let mut exists = FALSE;
+            let id = id as DWRITE_INFORMATIONAL_STRING_ID;
+            let hr = (*self.native.get()).GetInformationalStrings(id,
+                                                                  names.getter_addrefs(),
+                                                                  &mut exists);
+            assert!(hr == S_OK);
+            if exists == TRUE {
+                Some(get_locale_string(&mut names))
+            } else {
+                None
+            }
+        }
+    }
+
     pub fn create_font_face(&self) -> FontFace {
         // FIXME create_font_face should cache the FontFace and return it,
         // there's a 1:1 relationship
         unsafe {
-            let mut face: ComPtr<winapi::IDWriteFontFace> = ComPtr::new();
+            let mut face: ComPtr<IDWriteFontFace> = ComPtr::new();
             let hr = (*self.native.get()).CreateFontFace(face.getter_addrefs());
             assert!(hr == 0);
             FontFace::take(face)
         }
     }
+
+    pub fn metrics(&self) -> DWRITE_FONT_METRICS {
+        unsafe {
+            let mut metrics = mem::zeroed();
+            (*self.native.get()).GetMetrics(&mut metrics);
+            metrics
+        }
+    }
 }
+
+impl Clone for Font {
+    fn clone(&self) -> Font {
+        unsafe {
+            Font {
+                native: UnsafeCell::new((*self.native.get()).clone()),
+            }
+        }
+    }
+}
+
+#[repr(u32)]
+#[derive(Clone, Copy, Debug, PartialEq)]
+pub enum InformationalStringId {
+    FullName = DWRITE_INFORMATIONAL_STRING_FULL_NAME,
+    PostscriptName = DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME,
+    PostscriptCidName = DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME,
+}
--- a/third_party/rust/dwrote/src/font_collection.rs
+++ b/third_party/rust/dwrote/src/font_collection.rs
@@ -1,72 +1,96 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use comptr::ComPtr;
-use winapi;
-use winapi::FALSE;
+use winapi::um::dwrite::{IDWriteFontFamily, IDWriteFont, IDWriteFontCollection};
+use winapi::um::dwrite::{IDWriteFontCollectionLoader};
+use winapi::shared::minwindef::{BOOL, FALSE};
+use winapi::shared::winerror::S_OK;
 use std::cell::UnsafeCell;
+use std::mem;
+use std::ptr;
+use std::sync::atomic::{ATOMIC_USIZE_INIT, AtomicUsize, Ordering};
 
-use super::{DWriteFactory, FontFamily, Font, FontFace, FontDescriptor};
+use super::{CustomFontCollectionLoaderImpl, DWriteFactory, FontFamily, Font};
+use super::{FontFace, FontDescriptor};
 use helpers::*;
+use com_helpers::Com;
 
-#[derive(Debug)]
+static NEXT_ID: AtomicUsize = ATOMIC_USIZE_INIT;
+
 pub struct FontCollectionFamilyIterator {
-    collection: ComPtr<winapi::IDWriteFontCollection>,
+    collection: ComPtr<IDWriteFontCollection>,
     curr: u32,
     count: u32,
 }
 
 impl Iterator for FontCollectionFamilyIterator {
     type Item = FontFamily;
     fn next(&mut self) -> Option<FontFamily> {
         if self.curr == self.count {
             return None;
         }
 
         unsafe {
-            let mut family: ComPtr<winapi::IDWriteFontFamily> = ComPtr::new();
+            let mut family: ComPtr<IDWriteFontFamily> = ComPtr::new();
             let hr = self.collection.GetFontFamily(self.curr, family.getter_addrefs());
             assert!(hr == 0);
             self.curr += 1;
             Some(FontFamily::take(family))
         }
     }
 }
 
 pub struct FontCollection {
-    native: UnsafeCell<ComPtr<winapi::IDWriteFontCollection>>,
+    native: UnsafeCell<ComPtr<IDWriteFontCollection>>,
 }
 
 impl FontCollection {
     pub fn system() -> FontCollection {
         unsafe {
-            let mut native: ComPtr<winapi::IDWriteFontCollection> = ComPtr::new();
+            let mut native: ComPtr<IDWriteFontCollection> = ComPtr::new();
             let hr = (*DWriteFactory()).GetSystemFontCollection(native.getter_addrefs(), FALSE);
             assert!(hr == 0);
 
             FontCollection {
                 native: UnsafeCell::new(native)
             }
         }
     }
 
-    pub fn take(native: ComPtr<winapi::IDWriteFontCollection>) -> FontCollection {
+    pub fn take(native: ComPtr<IDWriteFontCollection>) -> FontCollection {
         FontCollection {
             native: UnsafeCell::new(native)
         }
     }
 
-    pub unsafe fn as_ptr(&self) -> *mut winapi::IDWriteFontCollection {
+    pub fn from_loader(collection_loader: ComPtr<IDWriteFontCollectionLoader>) -> FontCollection {
+        unsafe {
+            let factory = DWriteFactory();
+            assert_eq!((*factory).RegisterFontCollectionLoader(collection_loader.clone().forget()),
+                       S_OK);
+            let mut collection: ComPtr<IDWriteFontCollection> = ComPtr::new();
+            let id = NEXT_ID.fetch_add(1, Ordering::SeqCst);
+            assert_eq!((*factory).CreateCustomFontCollection(
+                            collection_loader.clone().forget(),
+                            &id as *const usize as *const _,
+                            mem::size_of::<AtomicUsize>() as u32,
+                            collection.getter_addrefs()),
+                       S_OK);
+            FontCollection::take(collection)
+        }
+    }
+
+    pub unsafe fn as_ptr(&self) -> *mut IDWriteFontCollection {
         (*self.native.get()).as_ptr()
     }
 
-    
     pub fn families_iter(&self) -> FontCollectionFamilyIterator {
         unsafe {
             FontCollectionFamilyIterator {
                 collection: (*self.native.get()).clone(),
                 curr: 0,
                 count: (*self.native.get()).GetFontFamilyCount(),
             }
         }
@@ -75,17 +99,17 @@ impl FontCollection {
     pub fn get_font_family_count(&self) -> u32 {
         unsafe {
             (*self.native.get()).GetFontFamilyCount()
         }
     }
 
     pub fn get_font_family(&self, index: u32) -> FontFamily {
         unsafe {
-            let mut family: ComPtr<winapi::IDWriteFontFamily> = ComPtr::new();
+            let mut family: ComPtr<IDWriteFontFamily> = ComPtr::new();
             let hr = (*self.native.get()).GetFontFamily(index, family.getter_addrefs());
             assert!(hr == 0);
             FontFamily::take(family)
         }
     }
 
     // Find a font matching the given font descriptor in this
     // font collection.  
@@ -101,35 +125,35 @@ impl FontCollection {
             }
         }
 
         None
     }
 
     pub fn get_font_from_face(&self, face: &FontFace) -> Option<Font> {
         unsafe {
-            let mut font: ComPtr<winapi::IDWriteFont> = ComPtr::new();
+            let mut font: ComPtr<IDWriteFont> = ComPtr::new();
             let hr = (*self.native.get()).GetFontFromFontFace(face.as_ptr(), font.getter_addrefs());
             if hr != 0 {
                 return None;
             }
             Some(Font::take(font))
         }
     }
 
     pub fn get_font_family_by_name(&self, family_name: &str) -> Option<FontFamily> {
         unsafe {
             let mut index: u32 = 0;
-            let mut exists: winapi::BOOL = winapi::FALSE;
+            let mut exists: BOOL = FALSE;
             let hr = (*self.native.get()).FindFamilyName(family_name.to_wide_null().as_ptr(), &mut index, &mut exists);
             assert!(hr == 0);
-            if exists == winapi::FALSE {
+            if exists == FALSE {
                 return None;
             }
 
-            let mut family: ComPtr<winapi::IDWriteFontFamily> = ComPtr::new();
+            let mut family: ComPtr<IDWriteFontFamily> = ComPtr::new();
             let hr = (*self.native.get()).GetFontFamily(index, family.getter_addrefs());
             assert!(hr == 0);
 
             Some(FontFamily::take(family))
         }
     }
 }
new file mode 100644
--- /dev/null
+++ b/third_party/rust/dwrote/src/font_collection_impl.rs
@@ -0,0 +1,156 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// A temporary custom font collection that exists solely for the face-to-font mapping to work.
+
+use std::mem;
+use std::sync::atomic::AtomicUsize;
+use winapi::ctypes::c_void;
+use winapi::shared::guiddef::REFIID;
+use winapi::shared::minwindef::{BOOL, FALSE, TRUE, ULONG};
+use winapi::shared::winerror::{E_INVALIDARG, S_OK};
+use winapi::um::dwrite::{IDWriteFactory, IDWriteFontCollectionLoader};
+use winapi::um::dwrite::{IDWriteFontCollectionLoaderVtbl, IDWriteFontFile, IDWriteFontFileEnumerator};
+use winapi::um::dwrite::{IDWriteFontFileEnumeratorVtbl};
+use winapi::um::unknwnbase::{IUnknown, IUnknownVtbl};
+use winapi::um::winnt::HRESULT;
+
+use com_helpers::{Com, UuidOfIUnknown};
+use comptr::ComPtr;
+use FontFile;
+
+DEFINE_GUID! {
+    DWRITE_FONT_COLLECTION_LOADER_UUID,
+    0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0
+}
+DEFINE_GUID! {
+    DWRITE_FONT_FILE_ENUMERATOR_UUID,
+    0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0
+}
+
+static FONT_COLLECTION_LOADER_VTBL: IDWriteFontCollectionLoaderVtbl =
+        IDWriteFontCollectionLoaderVtbl {
+    parent: implement_iunknown!(static IDWriteFontCollectionLoader,
+                                DWRITE_FONT_COLLECTION_LOADER_UUID,
+                                CustomFontCollectionLoaderImpl),
+    CreateEnumeratorFromKey: CustomFontCollectionLoaderImpl_CreateEnumeratorFromKey,
+};
+
+pub struct CustomFontCollectionLoaderImpl {
+    refcount: AtomicUsize,
+    font_files: Vec<ComPtr<IDWriteFontFile>>,
+}
+
+impl Com<IDWriteFontCollectionLoader> for CustomFontCollectionLoaderImpl {
+    type Vtbl = IDWriteFontCollectionLoaderVtbl;
+    #[inline]
+    fn vtbl() -> &'static IDWriteFontCollectionLoaderVtbl {
+        &FONT_COLLECTION_LOADER_VTBL
+    }
+}
+
+impl Com<IUnknown> for CustomFontCollectionLoaderImpl {
+    type Vtbl = IUnknownVtbl;
+    #[inline]
+    fn vtbl() -> &'static IUnknownVtbl {
+        &FONT_COLLECTION_LOADER_VTBL.parent
+    }
+}
+
+impl CustomFontCollectionLoaderImpl {
+    pub fn new(font_files: &[FontFile]) -> ComPtr<IDWriteFontCollectionLoader> {
+        unsafe {
+            ComPtr::already_addrefed(CustomFontCollectionLoaderImpl {
+                refcount: AtomicUsize::new(1),
+                font_files: font_files.iter().map(|file| file.as_com_ptr()).collect(),
+            }.into_interface())
+        }
+    }
+}
+
+unsafe extern "system" fn CustomFontCollectionLoaderImpl_CreateEnumeratorFromKey(
+        this: *mut IDWriteFontCollectionLoader,
+        _: *mut IDWriteFactory,
+        _: *const c_void,
+        _: u32,
+        out_enumerator: *mut *mut IDWriteFontFileEnumerator)
+        -> HRESULT {
+    let this = CustomFontCollectionLoaderImpl::from_interface(this);
+    let enumerator = CustomFontFileEnumeratorImpl::new((*this).font_files.clone());
+    let enumerator = ComPtr::<IDWriteFontFileEnumerator>::from_ptr(enumerator.into_interface());
+    *out_enumerator = enumerator.as_ptr();
+    mem::forget(enumerator);
+    S_OK
+}
+
+struct CustomFontFileEnumeratorImpl {
+    refcount: AtomicUsize,
+    font_files: Vec<ComPtr<IDWriteFontFile>>,
+    index: isize,
+}
+
+impl Com<IDWriteFontFileEnumerator> for CustomFontFileEnumeratorImpl {
+    type Vtbl = IDWriteFontFileEnumeratorVtbl;
+    #[inline]
+    fn vtbl() -> &'static IDWriteFontFileEnumeratorVtbl {
+        &FONT_FILE_ENUMERATOR_VTBL
+    }
+}
+
+impl Com<IUnknown> for CustomFontFileEnumeratorImpl {
+    type Vtbl = IUnknownVtbl;
+    #[inline]
+    fn vtbl() -> &'static IUnknownVtbl {
+        &FONT_FILE_ENUMERATOR_VTBL.parent
+    }
+}
+
+static FONT_FILE_ENUMERATOR_VTBL: IDWriteFontFileEnumeratorVtbl = IDWriteFontFileEnumeratorVtbl {
+    parent: implement_iunknown!(static IDWriteFontFileEnumerator,
+                                DWRITE_FONT_FILE_ENUMERATOR_UUID,
+                                CustomFontFileEnumeratorImpl),
+    GetCurrentFontFile: CustomFontFileEnumeratorImpl_GetCurrentFontFile,
+    MoveNext: CustomFontFileEnumeratorImpl_MoveNext,
+};
+
+impl CustomFontFileEnumeratorImpl {
+    pub fn new(font_files: Vec<ComPtr<IDWriteFontFile>>) -> CustomFontFileEnumeratorImpl {
+        CustomFontFileEnumeratorImpl {
+            refcount: AtomicUsize::new(1),
+            font_files,
+            index: -1,
+        }
+    }
+}
+
+unsafe extern "system" fn CustomFontFileEnumeratorImpl_GetCurrentFontFile(
+        this: *mut IDWriteFontFileEnumerator,
+        out_font_file: *mut *mut IDWriteFontFile)
+        -> HRESULT {
+    let this = CustomFontFileEnumeratorImpl::from_interface(this);
+    if (*this).index < 0 || (*this).index >= (*this).font_files.len() as isize {
+        return E_INVALIDARG
+    }
+    let new_font_file = (*this).font_files[(*this).index as usize].clone();
+    *out_font_file = new_font_file.as_ptr();
+    mem::forget(new_font_file);
+    S_OK
+}
+
+unsafe extern "system" fn CustomFontFileEnumeratorImpl_MoveNext(
+        this: *mut IDWriteFontFileEnumerator,
+        has_current_file: *mut BOOL)
+        -> HRESULT {
+    let this = CustomFontFileEnumeratorImpl::from_interface(this);
+    let font_file_count = (*this).font_files.len() as isize;
+    if (*this).index < font_file_count {
+        (*this).index += 1
+    }
+    *has_current_file = if (*this).index >= 0 && (*this).index < font_file_count {
+        TRUE
+    } else {
+        FALSE
+    };
+    S_OK
+}
--- a/third_party/rust/dwrote/src/font_face.rs
+++ b/third_party/rust/dwrote/src/font_face.rs
@@ -1,80 +1,99 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::slice;
 use std::ptr;
 use std::cell::UnsafeCell;
-use std::mem::zeroed;
+use std::mem::{self, zeroed};
 
+use com_helpers::Com;
 use comptr::ComPtr;
+use font::Font;
+use geometry_sink_impl::GeometrySinkImpl;
+use outline_builder::OutlineBuilder;
 use super::{FontMetrics, FontFile, DefaultDWriteRenderParams, DWriteFactory};
 
-use winapi;
+use winapi::Interface;
+use winapi::ctypes::c_void;
+use winapi::shared::minwindef::{BOOL, FALSE, TRUE};
+use winapi::shared::winerror::S_OK;
+use winapi::um::dcommon::DWRITE_MEASURING_MODE;
+use winapi::um::dwrite::{DWRITE_FONT_FACE_TYPE_BITMAP, DWRITE_FONT_FACE_TYPE_CFF};
+use winapi::um::dwrite::{DWRITE_FONT_FACE_TYPE_RAW_CFF, DWRITE_FONT_FACE_TYPE_TYPE1};
+use winapi::um::dwrite::{DWRITE_FONT_FACE_TYPE_TRUETYPE};
+use winapi::um::dwrite::{DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION, DWRITE_FONT_FACE_TYPE_VECTOR};
+use winapi::um::dwrite::{DWRITE_FONT_METRICS, DWRITE_FONT_SIMULATIONS, DWRITE_GLYPH_METRICS};
+use winapi::um::dwrite::{DWRITE_GLYPH_OFFSET, DWRITE_MATRIX, DWRITE_RENDERING_MODE};
+use winapi::um::dwrite::{DWRITE_RENDERING_MODE_DEFAULT, DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC};
+use winapi::um::dwrite::{IDWriteFontCollection, IDWriteFont, IDWriteFontFace, IDWriteFontFile};
+use winapi::um::dwrite::{IDWriteRenderingParams};
+use winapi::um::dwrite_3::{IDWriteFontFace5, IDWriteFontResource, DWRITE_FONT_AXIS_VALUE};
 
-#[derive(Debug)]
 pub struct FontFace {
-    native: UnsafeCell<ComPtr<winapi::IDWriteFontFace>>,
+    native: UnsafeCell<ComPtr<IDWriteFontFace>>,
+    face5: UnsafeCell<Option<ComPtr<IDWriteFontFace5>>>,
     metrics: FontMetrics,
 }
 
 impl FontFace {
-    pub fn take(native: ComPtr<winapi::IDWriteFontFace>) -> FontFace {
+    pub fn take(native: ComPtr<IDWriteFontFace>) -> FontFace {
         unsafe {
             let mut metrics: FontMetrics = zeroed();
             let cell = UnsafeCell::new(native);
             (*cell.get()).GetMetrics(&mut metrics);
             FontFace {
                 native: cell,
+                face5: UnsafeCell::new(None),
                 metrics: metrics,
             }
         }
     }
 
-    pub unsafe fn as_ptr(&self) -> *mut winapi::IDWriteFontFace {
+    pub unsafe fn as_ptr(&self) -> *mut IDWriteFontFace {
         (*self.native.get()).as_ptr()
     }
 
-    unsafe fn get_raw_files(&self) -> Vec<*mut winapi::IDWriteFontFile> {
+    unsafe fn get_raw_files(&self) -> Vec<*mut IDWriteFontFile> {
         let mut number_of_files: u32 = 0;
         let hr = (*self.native.get()).GetFiles(&mut number_of_files, ptr::null_mut());
         assert!(hr == 0);
 
-        let mut file_ptrs: Vec<*mut winapi::IDWriteFontFile> =
+        let mut file_ptrs: Vec<*mut IDWriteFontFile> =
             vec![ptr::null_mut(); number_of_files as usize];
         let hr = (*self.native.get()).GetFiles(&mut number_of_files, file_ptrs.as_mut_ptr());
         assert!(hr == 0);
         file_ptrs
     }
 
     pub fn get_files(&self) -> Vec<FontFile> {
         unsafe {
             let file_ptrs = self.get_raw_files();
-            file_ptrs.iter().map(|p| FontFile::take(ComPtr::already_addrefed(*p))).collect()
+            file_ptrs.iter().map(|p| FontFile::take(ComPtr::from_ptr(*p))).collect()
         }
     }
 
-    pub fn create_font_face_with_simulations(&self, simulations: winapi::DWRITE_FONT_SIMULATIONS) -> FontFace {
+    pub fn create_font_face_with_simulations(&self, simulations: DWRITE_FONT_SIMULATIONS) -> FontFace {
         unsafe {
             let file_ptrs = self.get_raw_files();
             let face_type = (*self.native.get()).GetType();
             let face_index = (*self.native.get()).GetIndex();
-            let mut face: ComPtr<winapi::IDWriteFontFace> = ComPtr::new();
+            let mut face: ComPtr<IDWriteFontFace> = ComPtr::new();
             let hr = (*DWriteFactory()).CreateFontFace(
                 face_type,
                 file_ptrs.len() as u32,
                 file_ptrs.as_ptr(),
                 face_index,
                 simulations,
                 face.getter_addrefs()
             );
             for p in file_ptrs {
-                let _ = ComPtr::<winapi::IDWriteFontFile>::already_addrefed(p);
+                let _ = ComPtr::<IDWriteFontFile>::already_addrefed(p);
             }
             assert!(hr == 0);
             FontFace::take(face)
         }
     }
 
     pub fn get_glyph_count(&self) -> u16 {
         unsafe {
@@ -83,114 +102,247 @@ impl FontFace {
     }
 
     pub fn metrics(&self) -> &FontMetrics {
         &self.metrics
     }
 
     pub fn get_metrics(&self) -> FontMetrics {
         unsafe {
-            let mut metrics: winapi::DWRITE_FONT_METRICS = zeroed();
+            let mut metrics: DWRITE_FONT_METRICS = zeroed();
             (*self.native.get()).GetMetrics(&mut metrics);
             metrics
         }
     }
 
     pub fn get_glyph_indices(&self, code_points: &[u32]) -> Vec<u16> {
         unsafe {
             let mut glyph_indices: Vec<u16> = vec![0; code_points.len()];
             let hr = (*self.native.get()).GetGlyphIndices(code_points.as_ptr(),
                                                           code_points.len() as u32,
                                                           glyph_indices.as_mut_ptr());
             assert!(hr == 0);
             glyph_indices
         }
     }
 
-    pub fn get_design_glyph_metrics(&self, glyph_indices: &[u16], is_sideways: bool) -> Vec<winapi::DWRITE_GLYPH_METRICS> {
+    pub fn get_design_glyph_metrics(&self, glyph_indices: &[u16], is_sideways: bool) -> Vec<DWRITE_GLYPH_METRICS> {
         unsafe {
-            let mut metrics: Vec<winapi::DWRITE_GLYPH_METRICS> = vec![zeroed(); glyph_indices.len()];
+            let mut metrics: Vec<DWRITE_GLYPH_METRICS> = vec![zeroed(); glyph_indices.len()];
             let hr = (*self.native.get()).GetDesignGlyphMetrics(glyph_indices.as_ptr(),
                                                                 glyph_indices.len() as u32,
                                                                 metrics.as_mut_ptr(),
-                                                                is_sideways as winapi::BOOL);
+                                                                is_sideways as BOOL);
             assert!(hr == 0);
             metrics
         }
     }
 
-    pub fn get_gdi_compatible_glyph_metrics(&self, em_size: f32, pixels_per_dip: f32, transform: *const winapi::DWRITE_MATRIX,
+    pub fn get_gdi_compatible_glyph_metrics(&self, em_size: f32, pixels_per_dip: f32, transform: *const DWRITE_MATRIX,
                                             use_gdi_natural: bool, glyph_indices: &[u16], is_sideways: bool)
-                                            -> Vec<winapi::DWRITE_GLYPH_METRICS>
+                                            -> Vec<DWRITE_GLYPH_METRICS>
     {
         unsafe {
-            let mut metrics: Vec<winapi::DWRITE_GLYPH_METRICS> = vec![zeroed(); glyph_indices.len()];
+            let mut metrics: Vec<DWRITE_GLYPH_METRICS> = vec![zeroed(); glyph_indices.len()];
             let hr = (*self.native.get()).GetGdiCompatibleGlyphMetrics(em_size, pixels_per_dip,
                                                                        transform,
-                                                                       use_gdi_natural as winapi::BOOL,
+                                                                       use_gdi_natural as BOOL,
                                                                        glyph_indices.as_ptr(),
                                                                        glyph_indices.len() as u32,
                                                                        metrics.as_mut_ptr(),
-                                                                       is_sideways as winapi::BOOL);
+                                                                       is_sideways as BOOL);
             assert!(hr == 0);
             metrics
         }
     }
 
     pub fn get_font_table(&self, opentype_table_tag: u32) -> Option<Vec<u8>> {
         unsafe {
             let mut table_data_ptr: *const u8 = ptr::null_mut();
             let mut table_size: u32 = 0;
-            let mut table_context: *mut winapi::c_void = ptr::null_mut();
-            let mut exists: winapi::BOOL = winapi::FALSE;
+            let mut table_context: *mut c_void = ptr::null_mut();
+            let mut exists: BOOL = FALSE;
 
             let hr = (*self.native.get()).TryGetFontTable(opentype_table_tag,
-                                                          &mut table_data_ptr as *mut *const _ as *mut *const winapi::c_void,
+                                                          &mut table_data_ptr as *mut *const _ as *mut *const c_void,
                                                           &mut table_size,
                                                           &mut table_context,
                                                           &mut exists);
             assert!(hr == 0);
 
-            if exists == winapi::FALSE {
+            if exists == FALSE {
                 return None;
             }
 
             let table_bytes = slice::from_raw_parts(table_data_ptr, table_size as usize).to_vec();
 
             (*self.native.get()).ReleaseFontTable(table_context);
 
             Some(table_bytes)
         }
     }
 
     pub fn get_recommended_rendering_mode(&self,
                                           em_size: f32,
                                           pixels_per_dip: f32,
-                                          measure_mode: winapi::DWRITE_MEASURING_MODE,
-                                          rendering_params: *mut winapi::IDWriteRenderingParams) ->
-                                          winapi::DWRITE_RENDERING_MODE {
+                                          measure_mode: DWRITE_MEASURING_MODE,
+                                          rendering_params: *mut IDWriteRenderingParams) ->
+                                          DWRITE_RENDERING_MODE {
       unsafe {
-        let mut render_mode : winapi::DWRITE_RENDERING_MODE = winapi::DWRITE_RENDERING_MODE_DEFAULT;
+        let mut render_mode : DWRITE_RENDERING_MODE = DWRITE_RENDERING_MODE_DEFAULT;
         let hr = (*self.native.get()).GetRecommendedRenderingMode(em_size,
                                                                   pixels_per_dip,
                                                                   measure_mode,
                                                                   rendering_params,
                                                                   &mut render_mode);
 
         if !(hr != 0) {
-          return winapi::DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC;
+          return DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC;
         }
 
         render_mode
       }
     }
 
     pub fn get_recommended_rendering_mode_default_params(&self,
                                                         em_size: f32,
                                                         pixels_per_dip: f32,
-                                                        measure_mode: winapi::DWRITE_MEASURING_MODE) ->
-                                                        winapi::DWRITE_RENDERING_MODE {
+                                                        measure_mode: DWRITE_MEASURING_MODE) ->
+                                                        DWRITE_RENDERING_MODE {
       self.get_recommended_rendering_mode(em_size,
                                           pixels_per_dip,
                                           measure_mode,
                                           DefaultDWriteRenderParams())
     }
+
+    pub fn get_glyph_run_outline(&self,
+                                 em_size: f32,
+                                 glyph_indices: &[u16],
+                                 glyph_advances: Option<&[f32]>,
+                                 glyph_offsets: Option<&[DWRITE_GLYPH_OFFSET]>,
+                                 is_sideways: bool,
+                                 is_right_to_left: bool,
+                                 outline_builder: Box<OutlineBuilder>) {
+        unsafe {
+            let glyph_advances = match glyph_advances {
+                None => ptr::null(),
+                Some(glyph_advances) => {
+                    assert_eq!(glyph_advances.len(), glyph_indices.len());
+                    glyph_advances.as_ptr()
+                }
+            };
+            let glyph_offsets = match glyph_offsets {
+                None => ptr::null(),
+                Some(glyph_offsets) => {
+                    assert_eq!(glyph_offsets.len(), glyph_indices.len());
+                    glyph_offsets.as_ptr()
+                }
+            };
+            let is_sideways = if is_sideways { TRUE } else { FALSE };
+            let is_right_to_left = if is_right_to_left { TRUE } else { FALSE };
+            let geometry_sink = GeometrySinkImpl::new(outline_builder);
+            let geometry_sink = geometry_sink.into_interface();
+            let hr = (*self.native.get()).GetGlyphRunOutline(em_size,
+                                                            glyph_indices.as_ptr(),
+                                                            glyph_advances,
+                                                            glyph_offsets,
+                                                            glyph_indices.len() as u32,
+                                                            is_sideways,
+                                                            is_right_to_left,
+                                                            geometry_sink);
+            assert_eq!(hr, S_OK);
+        }
+    }
+
+    #[inline]
+    pub fn get_type(&self) -> FontFaceType {
+        unsafe {
+            match (*self.native.get()).GetType() {
+                DWRITE_FONT_FACE_TYPE_CFF => FontFaceType::Cff,
+                DWRITE_FONT_FACE_TYPE_RAW_CFF => FontFaceType::RawCff,
+                DWRITE_FONT_FACE_TYPE_TRUETYPE => FontFaceType::TrueType,
+                DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION => FontFaceType::TrueTypeCollection,
+                DWRITE_FONT_FACE_TYPE_TYPE1 => FontFaceType::Type1,
+                DWRITE_FONT_FACE_TYPE_VECTOR => FontFaceType::Vector,
+                DWRITE_FONT_FACE_TYPE_BITMAP => FontFaceType::Bitmap,
+                _ => FontFaceType::Unknown,
+            }
+        }
+    }
+
+    #[inline]
+    pub fn get_index(&self) -> u32 {
+        unsafe {
+            (*self.native.get()).GetIndex()
+        }
+    }
+
+    #[inline]
+    unsafe fn get_face5(&self) -> &mut ComPtr<IDWriteFontFace5> {
+        (*self.face5.get()).get_or_insert_with(|| {
+            (*self.native.get())
+                .query_interface(&IDWriteFontFace5::uuidof())
+                .unwrap_or(ComPtr::new())
+        })
+    }
+
+    pub fn has_variations(&self) -> bool {
+        unsafe {
+            let face5 = self.get_face5();
+            if !face5.is_null() {
+                face5.HasVariations() == TRUE
+            } else {
+                false
+            }
+        }
+    }
+
+    pub fn create_font_face_with_variations(
+        &self,
+        simulations: DWRITE_FONT_SIMULATIONS,
+        axis_values: &[DWRITE_FONT_AXIS_VALUE],
+    ) -> Option<FontFace> {
+        unsafe {
+            let face5 = self.get_face5();
+            if !face5.is_null() {
+                let mut resource: ComPtr<IDWriteFontResource> = ComPtr::new();
+                let hr = face5.GetFontResource(resource.getter_addrefs());
+                if hr == S_OK && !resource.is_null() {
+                    let mut var_face: ComPtr<IDWriteFontFace> = ComPtr::new();
+                    let hr = resource.CreateFontFace(
+                        simulations,
+                        axis_values.as_ptr(),
+                        axis_values.len() as u32,
+                        var_face.getter_addrefs(),
+                    );
+                    if hr == S_OK && !var_face.is_null() {
+                        return Some(FontFace::take(var_face));
+                    }
+                }
+            }
+            None
+        }
+    }
 }
+
+impl Clone for FontFace {
+    fn clone(&self) -> FontFace {
+        unsafe {
+            FontFace {
+                native: UnsafeCell::new((*self.native.get()).clone()),
+                face5: UnsafeCell::new(None),
+                metrics: self.metrics,
+            }
+        }
+    }
+}
+
+#[derive(Clone, Copy, Debug, PartialEq)]
+pub enum FontFaceType {
+    Unknown,
+    Cff,
+    RawCff,
+    TrueType,
+    TrueTypeCollection,
+    Type1,
+    Vector,
+    Bitmap,
+}
--- a/third_party/rust/dwrote/src/font_family.rs
+++ b/third_party/rust/dwrote/src/font_family.rs
@@ -1,76 +1,77 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::cell::UnsafeCell;
 
 use comptr::ComPtr;
-use winapi;
+use winapi::um::dwrite::{IDWriteFont, IDWriteFontFamily, IDWriteFontCollection};
+use winapi::um::dwrite::{IDWriteLocalizedStrings};
 
 use super::*;
 use helpers::*;
 
-#[derive(Debug)]
 pub struct FontFamily {
-    native: UnsafeCell<ComPtr<winapi::IDWriteFontFamily>>,
+    native: UnsafeCell<ComPtr<IDWriteFontFamily>>,
 }
 
 impl FontFamily {
-    pub fn take(native: ComPtr<winapi::IDWriteFontFamily>) -> FontFamily {
+    pub fn take(native: ComPtr<IDWriteFontFamily>) -> FontFamily {
         FontFamily {
             native: UnsafeCell::new(native)
         }
     }
 
-    pub unsafe fn as_ptr(&self) -> *mut winapi::IDWriteFontFamily {
+    pub unsafe fn as_ptr(&self) -> *mut IDWriteFontFamily {
         (*self.native.get()).as_ptr()
     }
 
     pub fn name(&self) -> String {
         unsafe {
-            let mut family_names: ComPtr<winapi::IDWriteLocalizedStrings> = ComPtr::new();
+            let mut family_names: ComPtr<IDWriteLocalizedStrings> = ComPtr::new();
             let hr = (*self.native.get()).GetFamilyNames(family_names.getter_addrefs());
             assert!(hr == 0);
 
             get_locale_string(&mut family_names)
         }
     }
 
     pub fn get_first_matching_font(&self,
                                    weight: FontWeight,
                                    stretch: FontStretch,
                                    style: FontStyle)
         -> Font
     {
         unsafe {
-            let mut font: ComPtr<winapi::IDWriteFont> = ComPtr::new();
+            let mut font: ComPtr<IDWriteFont> = ComPtr::new();
             let hr = (*self.native.get()).GetFirstMatchingFont(weight.t(), stretch.t(), style.t(), font.getter_addrefs());
             assert!(hr == 0);
             Font::take(font)
         }
     }
 
     pub fn get_font_collection(&self) -> FontCollection {
         unsafe {
-            let mut collection: ComPtr<winapi::IDWriteFontCollection> = ComPtr::new();
+            let mut collection: ComPtr<IDWriteFontCollection> = ComPtr::new();
             let hr = (*self.native.get()).GetFontCollection(collection.getter_addrefs());
             assert!(hr == 0);
             FontCollection::take(collection)
         }
     }
 
     pub fn get_font_count(&self) -> u32 {
         unsafe {
             (*self.native.get()).GetFontCount()
         }
     }
 
     pub fn get_font(&self, index: u32) -> Font {
         unsafe {
-            let mut font: ComPtr<winapi::IDWriteFont> = ComPtr::new();
+            let mut font: ComPtr<IDWriteFont> = ComPtr::new();
             let hr = (*self.native.get()).GetFont(index, font.getter_addrefs());
             assert!(hr == 0);
+            assert!(!font.as_ptr().is_null());
             Font::take(font)
         }
     }
 }
--- a/third_party/rust/dwrote/src/font_file.rs
+++ b/third_party/rust/dwrote/src/font_file.rs
@@ -1,126 +1,224 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::slice;
 use std::ptr;
 use std::cell::UnsafeCell;
+use std::path::PathBuf;
+use std::ffi::OsString;
+use std::fs::File;
+use std::os::windows::ffi::{OsStrExt, OsStringExt};
+use std::os::windows::io::IntoRawHandle;
+use std::path::Path;
 
 use comptr::ComPtr;
 
-use winapi;
+use winapi::Interface;
+use winapi::ctypes::c_void;
+use winapi::um::dwrite::{IDWriteFontFace, IDWriteFontFile, IDWriteFontFileStream};
+use winapi::um::dwrite::{IDWriteFontFileLoader, IDWriteLocalFontFileLoader};
+use winapi::um::dwrite::{DWRITE_FONT_SIMULATIONS, DWRITE_FONT_FACE_TYPE_UNKNOWN};
+use winapi::um::dwrite::{DWRITE_FONT_FACE_TYPE, DWRITE_FONT_FILE_TYPE_UNKNOWN};
 
 use font_file_loader_impl::DataFontHelper;
 use font_face::FontFace;
 use super::DWriteFactory;
 
-#[derive(Debug)]
 pub struct FontFile {
-    native: UnsafeCell<ComPtr<winapi::IDWriteFontFile>>,
+    native: UnsafeCell<ComPtr<IDWriteFontFile>>,
     data_key: usize,
-    face_type: winapi::DWRITE_FONT_FACE_TYPE,
+    face_type: DWRITE_FONT_FACE_TYPE,
 }
 
 impl FontFile {
+    pub fn new_from_path<P>(path: P) -> Option<FontFile> where P: AsRef<Path> {
+        unsafe {
+            let mut path: Vec<u16> = path.as_ref().as_os_str().encode_wide().collect();
+            path.push(0);
+
+            let mut font_file: ComPtr<IDWriteFontFile> = ComPtr::new();
+            let hr = (*DWriteFactory()).CreateFontFileReference(path.as_ptr(),
+                                                                ptr::null(),
+                                                                font_file.getter_addrefs());
+            if hr != 0 || font_file.is_null() {
+                return None
+            }
+
+            Some(FontFile {
+                native: UnsafeCell::new(font_file),
+                data_key: 0,
+                face_type: DWRITE_FONT_FACE_TYPE_UNKNOWN,
+            })
+        }
+    }
+
     pub fn new_from_data(data: &[u8]) -> Option<FontFile> {
         let (font_file, key) = DataFontHelper::register_font_data(data);
 
         let mut ff = FontFile {
             native: UnsafeCell::new(font_file),
             data_key: key,
-            face_type: winapi::DWRITE_FONT_FACE_TYPE_UNKNOWN,
+            face_type: DWRITE_FONT_FACE_TYPE_UNKNOWN,
         };
 
-        if ff.analyze() == false {
+        if ff.analyze() == 0 {
             DataFontHelper::unregister_font_data(key);
             return None;
         }
 
         Some(ff)
     }
 
-    fn analyze(&mut self) -> bool {
-        let mut face_type = winapi::DWRITE_FONT_FACE_TYPE_UNKNOWN;
+    pub fn analyze_data(data: &[u8]) -> u32 {
+        let (font_file, key) = DataFontHelper::register_font_data(data);
+
+        let mut ff = FontFile {
+            native: UnsafeCell::new(font_file),
+            data_key: key,
+            face_type: DWRITE_FONT_FACE_TYPE_UNKNOWN,
+        };
+
+        ff.analyze()
+    }
+
+    fn analyze(&mut self) -> u32 {
+        let mut face_type = DWRITE_FONT_FACE_TYPE_UNKNOWN;
+        let mut num_faces = 0;
         unsafe {
             let mut supported = 0;
-            let mut _file_type = winapi::DWRITE_FONT_FILE_TYPE_UNKNOWN;
-            let mut _num_faces = 0;
+            let mut _file_type = DWRITE_FONT_FILE_TYPE_UNKNOWN;
 
-            let hr = (*self.as_ptr()).Analyze(&mut supported, &mut _file_type, &mut face_type, &mut _num_faces);
+            let hr = (*self.native.get()).Analyze(&mut supported,
+                                                  &mut _file_type,
+                                                  &mut face_type,
+                                                  &mut num_faces);
             if hr != 0 || supported == 0 {
-                return false;
+                return 0
             }
         }
         self.face_type = face_type;
-        true
+        num_faces as u32
     }
 
-    pub fn take(native: ComPtr<winapi::IDWriteFontFile>) -> FontFile {
+    pub fn take(native: ComPtr<IDWriteFontFile>) -> FontFile {
         let mut ff = FontFile {
             native: UnsafeCell::new(native),
             data_key: 0,
-            face_type: winapi::DWRITE_FONT_FACE_TYPE_UNKNOWN,
+            face_type: DWRITE_FONT_FACE_TYPE_UNKNOWN,
         };
         ff.analyze();
         ff
     }
 
     pub fn data_key(&self) -> Option<usize> {
         if self.data_key != 0 {
             Some(self.data_key)
         } else {
             None
         }
     }
 
-    pub unsafe fn as_ptr(&self) -> *mut winapi::IDWriteFontFile {
-        (*self.native.get()).as_ptr()
+    pub(crate) unsafe fn as_com_ptr(&self) -> ComPtr<IDWriteFontFile> {
+        (*self.native.get()).clone()
     }
 
     // This is a helper to read the contents of this FontFile,
     // without requiring callers to deal with loaders, keys,
     // or streams.
     pub fn get_font_file_bytes(&self) -> Vec<u8> {
         unsafe {
-            let mut ref_key: *const winapi::c_void = ptr::null();
+            let mut ref_key: *const c_void = ptr::null();
             let mut ref_key_size: u32 = 0;
             let hr = (*self.native.get()).GetReferenceKey(&mut ref_key, &mut ref_key_size);
             assert!(hr == 0);
 
-            let mut loader: ComPtr<winapi::IDWriteFontFileLoader> = ComPtr::new();
+            let mut loader: ComPtr<IDWriteFontFileLoader> = ComPtr::new();
             let hr = (*self.native.get()).GetLoader(loader.getter_addrefs());
             assert!(hr == 0);
 
-            let mut stream: ComPtr<winapi::IDWriteFontFileStream> = ComPtr::new();
+            let mut stream: ComPtr<IDWriteFontFileStream> = ComPtr::new();
             let hr = loader.CreateStreamFromKey(ref_key, ref_key_size, stream.getter_addrefs());
             assert!(hr == 0);
 
             let mut file_size: u64 = 0;
             let hr = stream.GetFileSize(&mut file_size);
             assert!(hr == 0);
 
-            let mut fragment_start: *const winapi::c_void = ptr::null();
-            let mut fragment_context: *mut winapi::c_void = ptr::null_mut();
+            let mut fragment_start: *const c_void = ptr::null();
+            let mut fragment_context: *mut c_void = ptr::null_mut();
             let hr = stream.ReadFileFragment(&mut fragment_start, 0, file_size, &mut fragment_context);
             assert!(hr == 0);
 
             let in_ptr = slice::from_raw_parts(fragment_start as *const u8, file_size as usize);
             let bytes = in_ptr.to_vec();
 
             stream.ReleaseFileFragment(fragment_context);
 
             bytes
         }
     }
 
-    pub fn create_face(&self, face_index: u32, simulations: winapi::DWRITE_FONT_SIMULATIONS) -> FontFace {
+    // This is a helper to get the path of a font file,
+    // without requiring callers to deal with loaders.
+    pub fn get_font_file_path(&self) -> Option<PathBuf> {
         unsafe {
-            let mut face: ComPtr<winapi::IDWriteFontFace> = ComPtr::new();
-            let ptr = self.as_ptr();
-            let hr = (*DWriteFactory()).CreateFontFace(self.face_type, 1, &ptr,
+            let mut ref_key: *const c_void = ptr::null();
+            let mut ref_key_size: u32 = 0;
+            let hr = (*self.native.get()).GetReferenceKey(&mut ref_key, &mut ref_key_size);
+            assert!(hr == 0);
+
+            let mut loader: ComPtr<IDWriteFontFileLoader> = ComPtr::new();
+            let hr = (*self.native.get()).GetLoader(loader.getter_addrefs());
+            assert!(hr == 0);
+
+            let mut local_loader: ComPtr<IDWriteLocalFontFileLoader> =
+                match loader.query_interface(&IDWriteLocalFontFileLoader::uuidof()) {
+                    Some(local_loader) => local_loader,
+                    None => return None,
+                };
+
+            let mut file_path_len = 0;
+            let hr = local_loader.GetFilePathLengthFromKey(ref_key,
+                                                           ref_key_size,
+                                                           &mut file_path_len);
+            assert_eq!(hr, 0);
+
+            let mut file_path_buf = vec![0; file_path_len as usize + 1];
+            let hr = local_loader.GetFilePathFromKey(ref_key,
+                                                     ref_key_size,
+                                                     file_path_buf.as_mut_ptr(),
+                                                     file_path_len + 1);
+            assert_eq!(hr, 0);
+
+            if let Some(&0) = file_path_buf.last() {
+                file_path_buf.pop();
+            }
+
+            Some(PathBuf::from(OsString::from_wide(&file_path_buf)))
+        }
+    }
+
+    pub fn create_face(&self, face_index: u32, simulations: DWRITE_FONT_SIMULATIONS) -> FontFace {
+        unsafe {
+            let mut face: ComPtr<IDWriteFontFace> = ComPtr::new();
+            let ptr = self.as_com_ptr();
+            let hr = (*DWriteFactory()).CreateFontFace(self.face_type, 1, &ptr.as_ptr(),
                                                        face_index, simulations, face.getter_addrefs());
             assert!(hr == 0);
             FontFace::take(face)
         }
     }
 }
+
+impl Clone for FontFile {
+    fn clone(&self) -> FontFile {
+        unsafe {
+            FontFile {
+                native: UnsafeCell::new((*self.native.get()).clone()),
+                data_key: self.data_key,
+                face_type: self.face_type,
+            }
+        }
+    }
+}
--- a/third_party/rust/dwrote/src/font_file_loader_impl.rs
+++ b/third_party/rust/dwrote/src/font_file_loader_impl.rs
@@ -1,20 +1,25 @@
 #![allow(non_snake_case, non_upper_case_globals)]
 
 use std::{mem, ptr};
 use std::collections::HashMap;
+use std::sync::atomic::AtomicUsize;
 use std::sync::{Mutex, atomic};
 use std::marker::Send;
-use winapi::{IUnknown, IUnknownVtbl};
-use winapi::{IDWriteFontFileStream, IDWriteFontFileStreamVtbl};
-use winapi::{IDWriteFontFileLoader, IDWriteFontFileLoaderVtbl};
-use winapi::IDWriteFontFile;
-use winapi::{E_FAIL, E_INVALIDARG, E_NOTIMPL, S_OK};
-use winapi::{c_void, UINT32, UINT64, ULONG, HRESULT, REFIID};
+use winapi::ctypes::c_void;
+use winapi::shared::basetsd::{UINT32, UINT64};
+use winapi::shared::guiddef::REFIID;
+use winapi::shared::minwindef::ULONG;
+use winapi::shared::winerror::{E_FAIL, E_INVALIDARG, E_NOTIMPL, S_OK};
+use winapi::um::dwrite::IDWriteFontFile;
+use winapi::um::dwrite::{IDWriteFontFileLoader, IDWriteFontFileLoaderVtbl};
+use winapi::um::dwrite::{IDWriteFontFileStream, IDWriteFontFileStreamVtbl};
+use winapi::um::unknwnbase::{IUnknown, IUnknownVtbl};
+use winapi::um::winnt::HRESULT;
 
 use super::DWriteFactory;
 use comptr::ComPtr;
 use com_helpers::*;
 
 struct FontFileLoader;
 
 DEFINE_GUID!{UuidOfIDWriteFontFileLoader, 0x727cad4e, 0xd6af, 0x4c9e, 0x8a, 0x08, 0xd6, 0x95, 0xb1, 0x1c, 0xaa, 0x49}
@@ -39,16 +44,19 @@ const FontFileLoaderVtbl: &'static IDWri
                     *fontFileStream = ptr::null_mut();
                     return E_FAIL
                 }
                 Some(file_stream) => {
                     file_stream.as_ptr()
                 }
             };
 
+            // This is an addref getter, so make sure to do that!
+            (*stream).AddRef();
+
             *fontFileStream = stream;
             S_OK
         }
         CreateStreamFromKey
     }
 };
 
 impl Com<IDWriteFontFileLoader> for FontFileLoader {
@@ -124,17 +132,17 @@ const FontFileStreamVtbl: &'static IDWri
         }
         GetLastWriteTime
     },
 };
 
 impl FontFileStream {
     pub fn new(data: &[u8]) -> FontFileStream {
         FontFileStream {
-            refcount: atomic::ATOMIC_USIZE_INIT,
+            refcount: AtomicUsize::new(1),
             data: data.to_vec(),
         }
     }
 }
 
 impl Com<IDWriteFontFileStream> for FontFileStream {
     type Vtbl = IDWriteFontFileStreamVtbl;
     fn vtbl() -> &'static IDWriteFontFileStreamVtbl { FontFileStreamVtbl }
@@ -165,17 +173,19 @@ lazy_static! {
 
 pub struct DataFontHelper;
 
 impl DataFontHelper {
     pub fn register_font_data(font_data: &[u8]) -> (ComPtr<IDWriteFontFile>, usize) {
         unsafe {
             let key = FONT_FILE_KEY.fetch_add(1, atomic::Ordering::Relaxed);
             let font_file_stream_native = FontFileStream::new(font_data);
-            let font_file_stream = ComPtr::from_ptr(font_file_stream_native.into_interface());
+            let font_file_stream: ComPtr<IDWriteFontFileStream> =
+                ComPtr::from_ptr(font_file_stream_native.into_interface());
+
             {
                 let mut map = FONT_FILE_STREAM_MAP.lock().unwrap();
                 map.insert(key, font_file_stream);
             }
 
             let mut font_file: ComPtr<IDWriteFontFile> = ComPtr::new();
             {
                 let loader = FONT_FILE_LOADER.lock().unwrap();
@@ -192,9 +202,9 @@ impl DataFontHelper {
     }
 
     pub fn unregister_font_data(key: usize) {
         let mut map = FONT_FILE_STREAM_MAP.lock().unwrap();
         if map.remove(&key).is_none() {
             panic!("unregister_font_data: trying to unregister key that is no longer registered");
         }
     }
-}
\ No newline at end of file
+}
--- a/third_party/rust/dwrote/src/gdi_interop.rs
+++ b/third_party/rust/dwrote/src/gdi_interop.rs
@@ -1,43 +1,43 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::ptr;
 use std::cell::UnsafeCell;
 
 use comptr::ComPtr;
-use winapi;
+use winapi::um::dwrite::IDWriteBitmapRenderTarget;
+use winapi::um::dwrite::IDWriteGdiInterop;
 use super::{DWriteFactory, BitmapRenderTarget};
 
-#[derive(Debug)]
 pub struct GdiInterop {
-    native: UnsafeCell<ComPtr<winapi::IDWriteGdiInterop>>,
+    native: UnsafeCell<ComPtr<IDWriteGdiInterop>>,
 }
 
 impl GdiInterop {
     pub fn create() -> GdiInterop {
         unsafe {
-            let mut native: ComPtr<winapi::IDWriteGdiInterop> = ComPtr::new();
+            let mut native: ComPtr<IDWriteGdiInterop> = ComPtr::new();
             let hr = (*DWriteFactory()).GetGdiInterop(native.getter_addrefs());
             assert!(hr == 0);
             GdiInterop::take(native)
         }
     }
 
-    pub fn take(native: ComPtr<winapi::IDWriteGdiInterop>) -> GdiInterop {
+    pub fn take(native: ComPtr<IDWriteGdiInterop>) -> GdiInterop {
         GdiInterop {
             native: UnsafeCell::new(native),
         }
     }
 
     pub fn create_bitmap_render_target(&self, width: u32, height: u32) -> BitmapRenderTarget {
         unsafe {
-            let mut native: ComPtr<winapi::IDWriteBitmapRenderTarget> = ComPtr::new();
+            let mut native: ComPtr<IDWriteBitmapRenderTarget> = ComPtr::new();
             let hr = (*self.native.get()).CreateBitmapRenderTarget(ptr::null_mut(),
                                                                    width, height,
                                                                    native.getter_addrefs());
             assert!(hr == 0);
             BitmapRenderTarget::take(native)
         }
     }
 }
new file mode 100644
--- /dev/null
+++ b/third_party/rust/dwrote/src/geometry_sink_impl.rs
@@ -0,0 +1,113 @@
+#![allow(non_snake_case, non_upper_case_globals)]
+
+use std::mem;
+use std::os::raw::c_void;
+use std::slice;
+use std::sync::atomic::AtomicUsize;
+use winapi::shared::guiddef::REFIID;
+use winapi::shared::minwindef::{UINT, ULONG};
+use winapi::shared::winerror::S_OK;
+use winapi::um::d2d1::{D2D1_BEZIER_SEGMENT, D2D1_FIGURE_BEGIN, D2D1_FIGURE_END, D2D1_FIGURE_END_CLOSED};
+use winapi::um::d2d1::{D2D1_FILL_MODE, D2D1_PATH_SEGMENT, D2D1_POINT_2F};
+use winapi::um::d2d1::{ID2D1SimplifiedGeometrySink, ID2D1SimplifiedGeometrySinkVtbl};
+use winapi::um::unknwnbase::{IUnknown, IUnknownVtbl};
+use winapi::um::winnt::HRESULT;
+
+use com_helpers::{Com, UuidOfIUnknown};
+use comptr::ComPtr;
+use outline_builder::OutlineBuilder;
+
+DEFINE_GUID!{
+    D2D1_SIMPLIFIED_GEOMETRY_SINK_UUID,
+    0x2cd9069e, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9
+}
+
+static GEOMETRY_SINK_VTBL: ID2D1SimplifiedGeometrySinkVtbl = ID2D1SimplifiedGeometrySinkVtbl {
+    parent: implement_iunknown!(static ID2D1SimplifiedGeometrySink,
+                                D2D1_SIMPLIFIED_GEOMETRY_SINK_UUID,
+                                GeometrySinkImpl),
+    BeginFigure: GeometrySinkImpl_BeginFigure,
+    EndFigure: GeometrySinkImpl_EndFigure,
+    AddLines: GeometrySinkImpl_AddLines,
+    AddBeziers: GeometrySinkImpl_AddBeziers,
+    Close: GeometrySinkImpl_Close,
+    SetFillMode: GeometrySinkImpl_SetFillMode,
+    SetSegmentFlags: GeometrySinkImpl_SetSegmentFlags,
+};
+
+pub struct GeometrySinkImpl {
+    refcount: AtomicUsize,
+    outline_builder: Box<OutlineBuilder>,
+}
+
+impl Com<ID2D1SimplifiedGeometrySink> for GeometrySinkImpl {
+    type Vtbl = ID2D1SimplifiedGeometrySinkVtbl;
+    #[inline]
+    fn vtbl() -> &'static ID2D1SimplifiedGeometrySinkVtbl {
+        &GEOMETRY_SINK_VTBL
+    }
+}
+
+impl Com<IUnknown> for GeometrySinkImpl {
+    type Vtbl = IUnknownVtbl;
+    #[inline]
+    fn vtbl() -> &'static IUnknownVtbl {
+        &GEOMETRY_SINK_VTBL.parent
+    }
+}
+
+impl GeometrySinkImpl {
+    pub fn new(outline_builder: Box<OutlineBuilder>) -> GeometrySinkImpl {
+        GeometrySinkImpl {
+            refcount: AtomicUsize::new(1),
+            outline_builder,
+        }
+    }
+}
+
+unsafe extern "system" fn GeometrySinkImpl_BeginFigure(this: *mut ID2D1SimplifiedGeometrySink,
+                                                       start_point: D2D1_POINT_2F,
+                                                       _: D2D1_FIGURE_BEGIN) {
+    let this = GeometrySinkImpl::from_interface(this);
+    (*this).outline_builder.move_to(start_point.x, start_point.y)
+}
+
+unsafe extern "system" fn GeometrySinkImpl_EndFigure(this: *mut ID2D1SimplifiedGeometrySink,
+                                                     figure_end: D2D1_FIGURE_END) {
+    let this = GeometrySinkImpl::from_interface(this);
+    if figure_end == D2D1_FIGURE_END_CLOSED {
+        (*this).outline_builder.close()
+    }
+}
+
+unsafe extern "system" fn GeometrySinkImpl_AddLines(this: *mut ID2D1SimplifiedGeometrySink,
+                                                    points: *const D2D1_POINT_2F,
+                                                    points_count: UINT) {
+    let this = GeometrySinkImpl::from_interface(this);
+    let points = slice::from_raw_parts(points, points_count as usize);
+    for point in points {
+        (*this).outline_builder.line_to(point.x, point.y)
+    }
+}
+
+unsafe extern "system" fn GeometrySinkImpl_AddBeziers(this: *mut ID2D1SimplifiedGeometrySink,
+                                                      beziers: *const D2D1_BEZIER_SEGMENT,
+                                                      beziers_count: UINT) {
+    let this = GeometrySinkImpl::from_interface(this);
+    let beziers = slice::from_raw_parts(beziers, beziers_count as usize);
+    for bezier in beziers {
+        (*this).outline_builder.curve_to(bezier.point1.x, bezier.point1.y,
+                                         bezier.point2.x, bezier.point2.y,
+                                         bezier.point3.x, bezier.point3.y)
+    }
+}
+
+unsafe extern "system" fn GeometrySinkImpl_Close(_: *mut ID2D1SimplifiedGeometrySink) -> HRESULT {
+    S_OK
+}
+
+unsafe extern "system" fn GeometrySinkImpl_SetFillMode(_: *mut ID2D1SimplifiedGeometrySink,
+                                                       _: D2D1_FILL_MODE) {}
+
+unsafe extern "system" fn GeometrySinkImpl_SetSegmentFlags(_: *mut ID2D1SimplifiedGeometrySink,
+                                                           _: D2D1_PATH_SEGMENT) {}
--- a/third_party/rust/dwrote/src/glyph_run_analysis.rs
+++ b/third_party/rust/dwrote/src/glyph_run_analysis.rs
@@ -1,70 +1,74 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::ptr;
 use std::cell::UnsafeCell;
 
 use comptr::ComPtr;
-use winapi;
+use winapi::um::dcommon::DWRITE_MEASURING_MODE;
+use winapi::um::dwrite::{DWRITE_RENDERING_MODE, DWRITE_MATRIX};
+use winapi::um::dwrite::{DWRITE_GLYPH_RUN, DWRITE_TEXTURE_ALIASED_1x1, DWRITE_TEXTURE_TYPE};
+use winapi::um::dwrite::DWRITE_TEXTURE_CLEARTYPE_3x1;
+use winapi::shared::windef::RECT;
+use winapi::um::dwrite::IDWriteGlyphRunAnalysis;
 use std::mem;
 use super::DWriteFactory;
 
-#[derive(Debug)]
 pub struct GlyphRunAnalysis {
-    native: UnsafeCell<ComPtr<winapi::IDWriteGlyphRunAnalysis>>,
+    native: UnsafeCell<ComPtr<IDWriteGlyphRunAnalysis>>,
 }
 
 impl GlyphRunAnalysis {
-    pub fn create(glyph_run: &winapi::DWRITE_GLYPH_RUN,
+    pub fn create(glyph_run: &DWRITE_GLYPH_RUN,
                   pixels_per_dip: f32,
-                  transform: Option<winapi::DWRITE_MATRIX>,
-                  rendering_mode: winapi::DWRITE_RENDERING_MODE,
-                  measuring_mode: winapi::DWRITE_MEASURING_MODE,
+                  transform: Option<DWRITE_MATRIX>,
+                  rendering_mode: DWRITE_RENDERING_MODE,
+                  measuring_mode: DWRITE_MEASURING_MODE,
                   baseline_x: f32,
                   baseline_y: f32) -> GlyphRunAnalysis
     {
         unsafe {
-            let mut native: ComPtr<winapi::IDWriteGlyphRunAnalysis> = ComPtr::new();
-            let hr = (*DWriteFactory()).CreateGlyphRunAnalysis(glyph_run as *const winapi::DWRITE_GLYPH_RUN,
+            let mut native: ComPtr<IDWriteGlyphRunAnalysis> = ComPtr::new();
+            let hr = (*DWriteFactory()).CreateGlyphRunAnalysis(glyph_run as *const DWRITE_GLYPH_RUN,
                                                                pixels_per_dip,
                                                                transform.as_ref().map(|x| x as *const _).unwrap_or(ptr::null()),
                                                                rendering_mode, measuring_mode,
                                                                baseline_x, baseline_y,
                                                                native.getter_addrefs());
             assert!(hr == 0);
             GlyphRunAnalysis::take(native)
         }
     }
 
-    pub fn take(native: ComPtr<winapi::IDWriteGlyphRunAnalysis>) -> GlyphRunAnalysis {
+    pub fn take(native: ComPtr<IDWriteGlyphRunAnalysis>) -> GlyphRunAnalysis {
         GlyphRunAnalysis {
             native: UnsafeCell::new(native),
         }
     }
 
-    pub fn get_alpha_texture_bounds(&self, texture_type: winapi::DWRITE_TEXTURE_TYPE) -> winapi::RECT {
+    pub fn get_alpha_texture_bounds(&self, texture_type: DWRITE_TEXTURE_TYPE) -> RECT {
         unsafe {
-            let mut rect: winapi::RECT = mem::zeroed();
+            let mut rect: RECT = mem::zeroed();
             rect.left = 1234;
             rect.top = 1234;
             let hr = (*self.native.get()).GetAlphaTextureBounds(texture_type, &mut rect);
             assert!(hr == 0);
             rect
         }
     }
 
-    pub fn create_alpha_texture(&self, texture_type: winapi::DWRITE_TEXTURE_TYPE, rect: winapi::RECT) -> Vec<u8> {
+    pub fn create_alpha_texture(&self, texture_type: DWRITE_TEXTURE_TYPE, rect: RECT) -> Vec<u8> {
         unsafe {
             let rect_pixels = (rect.right - rect.left) * (rect.bottom - rect.top);
             let rect_bytes = rect_pixels * match texture_type {
-                winapi::DWRITE_TEXTURE_ALIASED_1x1 => 1,
-                winapi::DWRITE_TEXTURE_CLEARTYPE_3x1 => 3,
+                DWRITE_TEXTURE_ALIASED_1x1 => 1,
+                DWRITE_TEXTURE_CLEARTYPE_3x1 => 3,
                 _ => panic!("bad texture type specified"),
             };
 
             let mut out_bytes: Vec<u8> = vec![0; rect_bytes as usize];
             let hr = (*self.native.get()).CreateAlphaTexture(texture_type, &rect, out_bytes.as_mut_ptr(), out_bytes.len() as u32);
             assert!(hr == 0);
             out_bytes
         }
--- a/third_party/rust/dwrote/src/helpers.rs
+++ b/third_party/rust/dwrote/src/helpers.rs
@@ -1,26 +1,27 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-use winapi::IDWriteLocalizedStrings;
-use winapi::wchar_t;
+use winapi::um::dwrite::IDWriteLocalizedStrings;
+use winapi::ctypes::wchar_t;
 use comptr::ComPtr;
-use winapi::winerror::S_OK;
-use winapi::minwindef::{BOOL, FALSE};
-use kernel32;
+use winapi::shared::winerror::S_OK;
+use winapi::shared::minwindef::{BOOL, FALSE};
+use winapi::um::winnls::GetUserDefaultLocaleName;
 use std::ffi::{OsStr};
 use std::os::windows::ffi::{OsStrExt};
 
+
 lazy_static! {
     static ref SYSTEM_LOCALE: Vec<wchar_t> = {
         unsafe {
             let mut locale: Vec<wchar_t> = vec![0; 85];
-            kernel32::GetUserDefaultLocaleName(locale.as_mut_ptr(), locale.len() as i32 - 1);
+            GetUserDefaultLocaleName(locale.as_mut_ptr(), locale.len() as i32 - 1);
             locale
         }
     };
     static ref EN_US_LOCALE: Vec<wchar_t> = {
         OsStr::new("en-us").encode_wide().collect()
     };
 }
 
--- a/third_party/rust/dwrote/src/lib.rs
+++ b/third_party/rust/dwrote/src/lib.rs
@@ -6,108 +6,119 @@
 
 #[macro_use]
 extern crate serde_derive;
 
 #[macro_use]
 extern crate lazy_static;
 #[macro_use(DEFINE_GUID)]
 extern crate winapi;
-extern crate gdi32;
-extern crate kernel32;
 extern crate libc;
 extern crate serde;
 
 include!("types.rs");
 
-use winapi::DWRITE_FACTORY_TYPE_SHARED;
-use winapi::IDWriteFactory;
-use winapi::IDWriteRenderingParams;
+use winapi::Interface;
+use winapi::um::dwrite::DWRITE_FACTORY_TYPE_SHARED;
+use winapi::um::dwrite::IDWriteFactory;
+use winapi::um::dwrite::IDWriteRenderingParams;
+use winapi::um::winnt::{HRESULT, LPCSTR};
+use winapi::shared::guiddef::REFIID;
+use winapi::um::unknwnbase::IUnknown;
+use winapi::um::dwrite::DWRITE_FACTORY_TYPE;
 use std::ffi::CString;
 
 use comptr::ComPtr;
-use winapi::S_OK;
+use winapi::shared::winerror::S_OK;
 
 mod comptr;
 mod helpers;
 use helpers::ToWide;
 use std::os::raw::c_void;
 
 #[cfg(test)]
 mod test;
 
 // We still use the DWrite structs for things like metrics; re-export them
 // here
-pub use winapi::DWRITE_FONT_METRICS as FontMetrics;
-pub use winapi::DWRITE_GLYPH_OFFSET as GlyphOffset;
-pub use winapi::{DWRITE_MATRIX, DWRITE_GLYPH_RUN};
-pub use winapi::{DWRITE_RENDERING_MODE_DEFAULT,
+pub use winapi::um::dwrite::DWRITE_FONT_METRICS as FontMetrics;
+pub use winapi::um::dwrite::DWRITE_GLYPH_OFFSET as GlyphOffset;
+pub use winapi::um::dwrite::{DWRITE_MATRIX, DWRITE_GLYPH_RUN};
+pub use winapi::um::dwrite::{DWRITE_RENDERING_MODE_DEFAULT,
                  DWRITE_RENDERING_MODE_ALIASED,
                  DWRITE_RENDERING_MODE_GDI_CLASSIC,
                  DWRITE_RENDERING_MODE_GDI_NATURAL,
                  DWRITE_RENDERING_MODE_NATURAL,
                  DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
                  DWRITE_RENDERING_MODE_OUTLINE,
                  DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC,
                  DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL,
                  DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL,
                  DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC};
-pub use winapi::{DWRITE_MEASURING_MODE_NATURAL,
+pub use winapi::um::dcommon::{DWRITE_MEASURING_MODE_NATURAL,
                  DWRITE_MEASURING_MODE_GDI_CLASSIC,
                  DWRITE_MEASURING_MODE_GDI_NATURAL};
-pub use winapi::{DWRITE_FONT_SIMULATIONS_NONE,
+pub use winapi::um::dwrite::{DWRITE_FONT_SIMULATIONS_NONE,
                  DWRITE_FONT_SIMULATIONS_BOLD,
                  DWRITE_FONT_SIMULATIONS_OBLIQUE};
-pub use winapi::{DWRITE_TEXTURE_ALIASED_1x1, DWRITE_TEXTURE_CLEARTYPE_3x1};
-pub use winapi::{DWRITE_FONT_SIMULATIONS};
-pub use winapi::{DWRITE_RENDERING_MODE};
-pub use winapi::{DWRITE_MEASURING_MODE};
-pub use winapi::{DWRITE_TEXTURE_TYPE};
+pub use winapi::um::dwrite::{DWRITE_TEXTURE_ALIASED_1x1, DWRITE_TEXTURE_CLEARTYPE_3x1};
+pub use winapi::um::dwrite::{DWRITE_FONT_SIMULATIONS};
+pub use winapi::um::dwrite::{DWRITE_RENDERING_MODE};
+pub use winapi::um::dwrite::{DWRITE_TEXTURE_TYPE};
+pub use winapi::um::dwrite_3::{DWRITE_FONT_AXIS_VALUE};
+pub use winapi::um::dcommon::{DWRITE_MEASURING_MODE};
+use winapi::um::libloaderapi::{GetProcAddress, LoadLibraryW};
 
 #[macro_use] mod com_helpers;
 
 mod bitmap_render_target; pub use bitmap_render_target::BitmapRenderTarget;
-mod font; pub use font::Font;
+mod font; pub use font::{Font, InformationalStringId};
 mod font_collection; pub use font_collection::FontCollection;
-mod font_face; pub use font_face::FontFace;
+mod font_face; pub use font_face::{FontFace, FontFaceType};
 mod font_family; pub use font_family::FontFamily;
 mod font_file; pub use font_file::FontFile;
 mod gdi_interop; pub use gdi_interop::GdiInterop;
+mod outline_builder; pub use outline_builder::OutlineBuilder;
 mod rendering_params; pub use rendering_params::RenderingParams;
 mod glyph_run_analysis; pub use glyph_run_analysis::GlyphRunAnalysis;
 
 // This is an internal implementation of FontFileLoader, for our utility
 // functions.  We don't wrap the DWriteFontFileLoader interface and
 // related things.
 mod font_file_loader_impl;
 
-DEFINE_GUID!{UuidOfIDWriteFactory, 0xb859ee5a, 0xd838, 0x4b5b, 0xa2, 0xe8, 0x1a, 0xdc, 0x7d, 0x93, 0xdb, 0x48}
+// This is an implementation of `FontCollectionLoader` for client code.
+mod font_collection_impl; pub use font_collection_impl::CustomFontCollectionLoaderImpl;
+
+// This is an internal implementation of `GeometrySink` so that we can
+// expose `IDWriteGeometrySink` in an idiomatic way.
+mod geometry_sink_impl;
 
 unsafe impl Sync for ComPtr<IDWriteFactory> { }
 unsafe impl Sync for ComPtr<IDWriteRenderingParams> {}
 
 lazy_static! {
     static ref DWRITE_FACTORY_RAW_PTR: usize = {
         unsafe {
-            type DWriteCreateFactoryType = extern "system" fn(winapi::DWRITE_FACTORY_TYPE, winapi::REFIID, *mut *mut winapi::IUnknown) -> winapi::HRESULT;
+            type DWriteCreateFactoryType = extern "system" fn(DWRITE_FACTORY_TYPE, REFIID, *mut *mut IUnknown) -> HRESULT;
 
-            let dwrite_dll = kernel32::LoadLibraryW("dwrite.dll".to_wide_null().as_ptr());
+            let dwrite_dll = LoadLibraryW("dwrite.dll".to_wide_null().as_ptr());
             assert!(!dwrite_dll.is_null());
             let create_factory_name = CString::new("DWriteCreateFactory").unwrap();
             let dwrite_create_factory_ptr =
-                kernel32::GetProcAddress(dwrite_dll, create_factory_name.as_ptr() as winapi::LPCSTR);
+                GetProcAddress(dwrite_dll, create_factory_name.as_ptr() as LPCSTR);
             assert!(!dwrite_create_factory_ptr.is_null());
 
             let dwrite_create_factory =
-                mem::transmute::<*const c_void, DWriteCreateFactoryType>(dwrite_create_factory_ptr);
+                mem::transmute::<*const c_void, DWriteCreateFactoryType>(dwrite_create_factory_ptr as *const _);
 
             let mut factory: ComPtr<IDWriteFactory> = ComPtr::new();
             let hr = dwrite_create_factory(
                 DWRITE_FACTORY_TYPE_SHARED,
-                &UuidOfIDWriteFactory,
+                &IDWriteFactory::uuidof(),
                 factory.getter_addrefs());
             assert!(hr == S_OK);
             factory.forget() as usize
         }
     };
 
   static ref DEFAULT_DWRITE_RENDERING_PARAMS_RAW_PTR: usize = {
     unsafe {
new file mode 100644
--- /dev/null
+++ b/third_party/rust/dwrote/src/outline_builder.rs
@@ -0,0 +1,6 @@
+pub trait OutlineBuilder {
+    fn move_to(&mut self, x: f32, y: f32);
+    fn line_to(&mut self, x: f32, y: f32);
+    fn curve_to(&mut self, cp0x: f32, cp0y: f32, cp1x: f32, cp1y: f32, x: f32, y: f32);
+    fn close(&mut self);
+}
--- a/third_party/rust/dwrote/src/rendering_params.rs
+++ b/third_party/rust/dwrote/src/rendering_params.rs
@@ -1,35 +1,34 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 use std::cell::UnsafeCell;
 
 use comptr::ComPtr;
-use winapi;
+use winapi::um::dwrite::IDWriteRenderingParams;
 use super::DWriteFactory;
 
-#[derive(Debug)]
 pub struct RenderingParams {
-    native: UnsafeCell<ComPtr<winapi::IDWriteRenderingParams>>,
+    native: UnsafeCell<ComPtr<IDWriteRenderingParams>>,
 }
 
 impl RenderingParams {
     pub fn create_for_primary_monitor() -> RenderingParams {
         unsafe {
-            let mut native: ComPtr<winapi::IDWriteRenderingParams> = ComPtr::new();
+            let mut native: ComPtr<IDWriteRenderingParams> = ComPtr::new();
             let hr = (*DWriteFactory()).CreateRenderingParams(native.getter_addrefs());
             assert!(hr == 0);
             RenderingParams::take(native)
         }
     }
 
-    pub fn take(native: ComPtr<winapi::IDWriteRenderingParams>) -> RenderingParams {
+    pub fn take(native: ComPtr<IDWriteRenderingParams>) -> RenderingParams {
         RenderingParams {
             native: UnsafeCell::new(native),
         }
     }
 
-    pub unsafe fn as_ptr(&self) -> *mut winapi::IDWriteRenderingParams {
+    pub unsafe fn as_ptr(&self) -> *mut IDWriteRenderingParams {
         (*self.native.get()).as_ptr()
     }
 }
--- a/third_party/rust/dwrote/src/test.rs
+++ b/third_party/rust/dwrote/src/test.rs
@@ -41,16 +41,34 @@ fn test_get_font_file_bytes() {
     let files = face.get_files();
     assert!(files.len() > 0);
 
     let bytes = files[0].get_font_file_bytes();
     assert!(bytes.len() > 0);
 }
 
 #[test]
+fn test_font_file_is_monospace() {
+    let system_fc = FontCollection::system();
+
+    let arial_family = system_fc.get_font_family_by_name("Arial").unwrap();
+    let arial_font = arial_family.get_first_matching_font(FontWeight::Regular,
+                                                          FontStretch::Normal,
+                                                          FontStyle::Normal);
+    assert!(arial_font.is_monospace() == Some(false));
+
+    let courier_new_family = system_fc.get_font_family_by_name("Courier New").unwrap();
+    let courier_new_font = courier_new_family.get_first_matching_font(FontWeight::Regular,
+                                                          FontStretch::Normal,
+                                                          FontStyle::Normal);
+    assert!(courier_new_font.is_monospace() == Some(true));
+}
+
+
+#[test]
 fn test_create_font_file_from_bytes() {
     let system_fc = FontCollection::system();
 
     let arial_family = system_fc.get_font_family_by_name("Arial").unwrap();
     let arial_font = arial_family.get_first_matching_font(FontWeight::Regular,
                                                           FontStretch::Normal,
                                                           FontStyle::Normal);
     let face = arial_font.create_font_face();
@@ -74,20 +92,18 @@ fn test_glyph_image() {
     let arial_font = arial_family.get_first_matching_font(FontWeight::Regular,
                                                           FontStretch::Normal,
                                                           FontStyle::Normal);
 
     let face = arial_font.create_font_face();
     let a_index = face.get_glyph_indices(&['A' as u32])[0];
 
     let metrics = face.get_metrics();
-    println!("Metrics:\n======\n{:?}\n======", metrics);
 
     let gm = face.get_design_glyph_metrics(&[a_index], false)[0];
-    println!("Glyph metrics:\n======\n{:?}\n======", gm);
 
     let device_pixel_ratio = 1.0f32;
     let em_size = 10.0f32;
 
     let design_units_per_pixel = face.metrics().designUnitsPerEm as f32 / 16. as f32;
     let scaled_design_units_to_pixels = (em_size * device_pixel_ratio) / design_units_per_pixel;
 
     let width = (gm.advanceWidth as i32 - (gm.leftSideBearing + gm.rightSideBearing)) as f32 * scaled_design_units_to_pixels;
--- a/third_party/rust/dwrote/src/types.rs
+++ b/third_party/rust/dwrote/src/types.rs
@@ -1,38 +1,69 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /* this is include!()'d in lib.rs */
 use std::mem;
+use winapi::um::dwrite::{DWRITE_FONT_STYLE, DWRITE_FONT_WEIGHT, DWRITE_FONT_STRETCH};
 
 // mirrors DWRITE_FONT_WEIGHT
-#[repr(u32)]
 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone, Copy)]
 pub enum FontWeight {
-    Thin = 100,
-    ExtraLight = 200,
-    Light = 300,
-    SemiLight = 350,
-    Regular = 400,
-    Medium = 500,
-    SemiBold = 600,
-    Bold = 700,
-    ExtraBold = 800,
-    Black = 900,
-    ExtraBlack = 950,
+    Thin,
+    ExtraLight,
+    Light,
+    SemiLight,
+    Regular,
+    Medium,
+    SemiBold,
+    Bold,
+    ExtraBold,
+    Black,
+    ExtraBlack,
+    Unknown(u32)
 }
 
 impl FontWeight {
-    fn t(&self) -> winapi::DWRITE_FONT_WEIGHT {
-        unsafe { mem::transmute::<FontWeight, winapi::DWRITE_FONT_WEIGHT>(*self) }
+    fn t(&self) -> DWRITE_FONT_WEIGHT {
+        unsafe { mem::transmute::<u32, DWRITE_FONT_WEIGHT>(self.to_u32()) }
     }
-    pub fn to_u32(&self) -> u32 { unsafe { mem::transmute::<FontWeight, u32>(*self) } }
-    pub fn from_u32(v: u32) -> FontWeight { unsafe { mem::transmute::<u32, FontWeight>(v) } }
+    pub fn to_u32(&self) -> u32 {
+        match self {
+            FontWeight::Thin=> 100,
+            FontWeight::ExtraLight=> 200,
+            FontWeight::Light=> 300,
+            FontWeight::SemiLight=> 350,
+            FontWeight::Regular=> 400,
+            FontWeight::Medium=> 500,
+            FontWeight::SemiBold=> 600,
+            FontWeight::Bold=> 700,
+            FontWeight::ExtraBold=> 800,
+            FontWeight::Black=> 900,
+            FontWeight::ExtraBlack=> 950,
+            FontWeight::Unknown(v) => *v as u32
+        }
+    }
+    pub fn from_u32(v: u32) -> FontWeight {
+        match v {
+                100 => FontWeight::Thin,
+                200 => FontWeight::ExtraLight,
+                300 => FontWeight::Light,
+                350 => FontWeight::SemiLight,
+                400 => FontWeight::Regular,
+                500 => FontWeight::Medium,
+                600 => FontWeight::SemiBold,
+                700 => FontWeight::Bold,
+                800 => FontWeight::ExtraBold,
+                900 => FontWeight::Black,
+                950 => FontWeight::ExtraBlack,
+                _ => FontWeight::Unknown(v)
+            }
+    }
 }
 
 // mirrors DWRITE_FONT_STRETCH
 #[repr(u32)]
 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone, Copy)]
 pub enum FontStretch {
     Undefined = 0,
     UltraCondensed = 1,
@@ -42,39 +73,50 @@ pub enum FontStretch {
     Normal = 5,
     SemiExpanded = 6,
     Expanded = 7,
     ExtraExpanded = 8,
     UltraExpanded = 9,
 }
 
 impl FontStretch {
-    fn t(&self) -> winapi::DWRITE_FONT_STRETCH {
-        unsafe { mem::transmute::<FontStretch, winapi::DWRITE_FONT_STRETCH>(*self) }
+    fn t(&self) -> DWRITE_FONT_STRETCH {
+        unsafe { mem::transmute::<FontStretch, DWRITE_FONT_STRETCH>(*self) }
     }
     pub fn to_u32(&self) -> u32 { unsafe { mem::transmute::<FontStretch, u32>(*self) } }
     pub fn from_u32(v: u32) -> FontStretch { unsafe { mem::transmute::<u32, FontStretch>(v) } }
 }
 
 // mirrors DWRITE_FONT_STYLE
 #[repr(u32)]
 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone, Copy)]
 pub enum FontStyle {
     Normal = 0,
     Oblique = 1,
     Italic = 2,
 }
 
 impl FontStyle {
-    fn t(&self) -> winapi::DWRITE_FONT_STYLE {
-        unsafe { mem::transmute::<FontStyle, winapi::DWRITE_FONT_STYLE>(*self) }
+    fn t(&self) -> DWRITE_FONT_STYLE {
+        unsafe { mem::transmute::<FontStyle, DWRITE_FONT_STYLE>(*self) }
     }
     pub fn to_u32(&self) -> u32 { unsafe { mem::transmute::<FontStyle, u32>(*self) } }
     pub fn from_u32(v: u32) -> FontStyle { unsafe { mem::transmute::<u32, FontStyle>(v) } }
 }
 
+// mirrors DWRITE_FONT_SIMULATIONS
+#[repr(u32)]
+#[derive(PartialEq, Debug, Clone, Copy)]
+pub enum FontSimulations {
+    None = winapi::um::dwrite::DWRITE_FONT_SIMULATIONS_NONE,
+    Bold = winapi::um::dwrite::DWRITE_FONT_SIMULATIONS_BOLD,
+    Oblique = winapi::um::dwrite::DWRITE_FONT_SIMULATIONS_OBLIQUE,
+    BoldOblique = winapi::um::dwrite::DWRITE_FONT_SIMULATIONS_BOLD |
+        winapi::um::dwrite::DWRITE_FONT_SIMULATIONS_OBLIQUE,
+}
+
 #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
 pub struct FontDescriptor {
     pub family_name: String,
     pub weight: FontWeight,
     pub stretch: FontStretch,
     pub style: FontStyle,
 }
deleted file mode 100644
--- a/third_party/rust/gdi32-sys/.cargo-checksum.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"files":{"Cargo.toml":"20862f3ca447bad787627843d50ec7ce037076883780fb76d38a5168ce53f270","README.md":"fe7c514d58e569be2a6a59dab506a93acb1a99e298bd98760ffdb665e215c962","build.rs":"42ed995baf6047cc983e11482f23285fc5488399453d82155e8342d77fd9c73a","src/lib.rs":"0d06d543ee154316afd6e86d6f3e5789b41a0e722682a69c81b77c65549af95c"},"package":"0912515a8ff24ba900422ecda800b52f4016a56251922d397c576bf92c690518"}
\ No newline at end of file
deleted file mode 100644
--- a/third_party/rust/gdi32-sys/Cargo.toml
+++ /dev/null
@@ -1,17 +0,0 @@
-[package]
-name = "gdi32-sys"
-version = "0.2.0"
-authors = ["Peter Atashian <retep998@gmail.com>"]
-description = "Contains function definitions for the Windows API library gdi32. See winapi for types and constants."
-documentation = "https://retep998.github.io/doc/gdi32/"
-repository = "https://github.com/retep998/winapi-rs"
-readme = "README.md"
-keywords = ["windows", "ffi", "win32"]
-license = "MIT"
-build = "build.rs"
-[lib]
-name = "gdi32"
-[dependencies]
-winapi = { version = "0.2.5", path = "../.." }
-[build-dependencies]
-winapi-build = { version = "0.1.1", path = "../../build" }
deleted file mode 100644
--- a/third_party/rust/gdi32-sys/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# gdi32 #
-Contains function definitions for the Windows API library gdi32. See winapi for types and constants.
-
-```toml
-[dependencies]
-gdi32-sys = "0.2.0"
-```
-
-```rust
-extern crate gdi32;
-```
-
-[Documentation](https://retep998.github.io/doc/gdi32/)
deleted file mode 100644
--- a/third_party/rust/gdi32-sys/build.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright © 2015, Peter Atashian
-// Licensed under the MIT License <LICENSE.md>
-extern crate build;
-fn main() {
-    build::link("gdi32", false)
-}
deleted file mode 100644
--- a/third_party/rust/gdi32-sys/src/lib.rs
+++ /dev/null
@@ -1,703 +0,0 @@
-// Copyright © 2015, Peter Atashian
-// Licensed under the MIT License <LICENSE.md>
-//! FFI bindings to gdi32.
-#![cfg(windows)]
-extern crate winapi;
-use winapi::*;
-extern "system" {
-    pub fn AbortDoc(hdc: HDC) -> c_int;
-    pub fn AbortPath(hdc: HDC) -> BOOL;
-    pub fn AddFontMemResourceEx(
-        pbFont: PVOID, cbSize: DWORD, pdv: PVOID, pcFonts: *mut DWORD,
-    ) -> HANDLE;
-    pub fn AddFontResourceA(lpszFilename: LPCSTR) -> c_int;
-    pub fn AddFontResourceExA(lpszFilename: LPCSTR, fl: DWORD, pdv: PVOID) -> c_int;
-    pub fn AddFontResourceExW(lpszFilename: LPCWSTR, fl: DWORD, pdv: PVOID) -> c_int;
-    pub fn AddFontResourceW(lpszFilename: LPCWSTR) -> c_int;
-    pub fn AngleArc(
-        hdc: HDC, X: c_int, Y: c_int, dwRadius: DWORD, eStartAngle: FLOAT, eSweepAngle: FLOAT,
-    ) -> BOOL;
-    pub fn AnimatePalette(
-        hpal: HPALETTE, iStartIndex: UINT, cEntries: UINT, ppe: *const PALETTEENTRY,
-    ) -> BOOL;
-    pub fn Arc(
-        hdc: HDC, nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int,
-        nXStartArc: c_int, nYStartArc: c_int, nXEndArc: c_int, nYEndArc: c_int,
-    ) -> BOOL;
-    pub fn ArcTo(
-        hdc: HDC, nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int,
-        nXRadial1: c_int, nYRadial1: c_int, nXRadial2: c_int, nYRadial2: c_int,
-    ) -> BOOL;
-    pub fn BeginPath(hdc: HDC) -> BOOL;
-    pub fn BitBlt(
-        hdc: HDC, x: c_int, y: c_int, cx: c_int, cy: c_int, hdcSrc: HDC, x1: c_int, y1: c_int,
-        rop: DWORD,
-    ) -> BOOL;
-    pub fn CancelDC(hdc: HDC) -> BOOL;
-    pub fn CheckColorsInGamut(
-        hDC: HDC, lpRGBTriples: LPVOID, lpBuffer: LPVOID, nCount: UINT,
-    ) -> BOOL;
-    pub fn ChoosePixelFormat(hdc: HDC, ppfd: *const PIXELFORMATDESCRIPTOR) -> c_int;
-    pub fn Chord(
-        hdc: HDC, nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int,
-        nXRadial1: c_int, nYRadial1: c_int, nXRadial2: c_int, nYRadial2: c_int,
-    ) -> BOOL;
-    pub fn CloseEnhMetaFile(hdc: HDC) -> HENHMETAFILE;
-    pub fn CloseFigure(hdc: HDC) -> BOOL;
-    pub fn CloseMetaFile(hdc: HDC) -> HMETAFILE;
-    pub fn ColorCorrectPalette(
-        hDC: HDC, hPalette: HPALETTE, dwFirstEntry: DWORD, dwNumOfEntries: DWORD,
-    ) -> BOOL;
-    pub fn ColorMatchToTarget(hDC: HDC, hdcTarget: HDC, uiAction: UINT) -> BOOL;
-    pub fn CombineRgn(
-        hrgnDst: HRGN, hrgnSrc1: HRGN, hrgnSrc2: HRGN, fnCombineMode: c_int,
-    ) -> c_int;
-    pub fn CombineTransform(
-        lpxformResult: LPXFORM, lpxform1: *const XFORM, lpxform2: *const XFORM,
-    ) -> BOOL;
-    pub fn CopyEnhMetaFileA(hemfSrc: HENHMETAFILE, lpszFile: LPCSTR) -> HENHMETAFILE;
-    pub fn CopyEnhMetaFileW(hemfSrc: HENHMETAFILE, lpszFile: LPCWSTR) -> HENHMETAFILE;
-    pub fn CopyMetaFileA(hmfSrc: HMETAFILE, lpszFile: LPCSTR) -> HMETAFILE;
-    pub fn CopyMetaFileW(hmfSrc: HMETAFILE, lpszFile: LPCWSTR) -> HMETAFILE;
-    pub fn CreateBitmap(
-        nWidth: c_int, nHeight: c_int, nPlanes: UINT, nBitCount: UINT, lpBits: *const c_void,
-    ) -> HBITMAP;
-    pub fn CreateBitmapIndirect(pbm: *const BITMAP) -> HBITMAP;
-    pub fn CreateBrushIndirect(lplb: *const LOGBRUSH) -> HBRUSH;
-    pub fn CreateColorSpaceA(lpLogColorSpace: LPLOGCOLORSPACEA) -> HCOLORSPACE;
-    pub fn CreateColorSpaceW(lpLogColorSpace: LPLOGCOLORSPACEW) -> HCOLORSPACE;
-    pub fn CreateCompatibleBitmap(hdc: HDC, cx: c_int, cy: c_int) -> HBITMAP;
-    pub fn CreateCompatibleDC(hdc: HDC) -> HDC;
-    pub fn CreateDCA(
-        lpszDriver: LPCSTR, lpszDevice: LPCSTR, lpszOutput: LPCSTR, lpInitData: *const DEVMODEA,
-    ) -> HDC;
-    pub fn CreateDCW(
-        lpszDriver: LPCWSTR, lpszDevice: LPCWSTR, lpszOutput: LPCWSTR, lpInitData: *const DEVMODEW,
-    ) -> HDC;
-    pub fn CreateDIBPatternBrush(hglbDIBPacked: HGLOBAL, fuColorSpec: UINT) -> HBRUSH;
-    pub fn CreateDIBPatternBrushPt(lpPackedDIB: *const VOID, iUsage: UINT) -> HBRUSH;
-    pub fn CreateDIBSection(
-        hdc: HDC, lpbmi: *const BITMAPINFO, usage: UINT, ppvBits: *mut *mut c_void,
-        hSection: HANDLE, offset: DWORD,
-    ) -> HBITMAP;
-    pub fn CreateDIBitmap(
-        hdc: HDC, pbmih: *const BITMAPINFOHEADER, flInit: DWORD, pjBits: *const c_void,
-        pbmi: *const BITMAPINFO, iUsage: UINT,
-    ) -> HBITMAP;
-    pub fn CreateDiscardableBitmap(hdc: HDC, nWidth: c_int, nHeight: c_int) -> HBITMAP;
-    pub fn CreateEllipticRgn(
-        nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int,
-    ) -> HRGN;
-    pub fn CreateEllipticRgnIndirect(lprc: *const RECT) -> HRGN;
-    pub fn CreateEnhMetaFileA(
-        hdcRef: HDC, lpFilename: LPCSTR, lpRect: *const RECT, lpDescription: LPCSTR,
-    ) -> HDC;
-    pub fn CreateEnhMetaFileW(
-        hdcRef: HDC, lpFilename: LPCWSTR, lpRect: *const RECT, lpDescription: LPCWSTR,
-    ) -> HDC;
-    pub fn CreateFontA(
-        cHeight: c_int, cWidth: c_int, cEscapement: c_int, cOrientation: c_int, cWeight: c_int,
-        bItalic: DWORD, bUnderline: DWORD, bStrikeOut: DWORD, iCharSet: DWORD,
-        iOutPrecision: DWORD, iClipPrecision: DWORD, iQuality: DWORD, iPitchAndFamily: DWORD,
-        pszFaceName: LPCSTR,
-    ) -> HFONT;
-    pub fn CreateFontIndirectA(lplf: *const LOGFONTA) -> HFONT;
-    pub fn CreateFontIndirectExA(penumlfex: *const ENUMLOGFONTEXDVA) -> HFONT;
-    pub fn CreateFontIndirectExW(penumlfex: *const ENUMLOGFONTEXDVW) -> HFONT;
-    pub fn CreateFontIndirectW(lplf: *const LOGFONTW) -> HFONT;
-    pub fn CreateFontW(
-        cHeight: c_int, cWidth: c_int, cEscapement: c_int, cOrientation: c_int, cWeight: c_int,
-        bItalic: DWORD, bUnderline: DWORD, bStrikeOut: DWORD, iCharSet: DWORD,
-        iOutPrecision: DWORD, iClipPrecision: DWORD, iQuality: DWORD, iPitchAndFamily: DWORD,
-        pszFaceName: LPCWSTR,
-    ) -> HFONT;
-    pub fn CreateHalftonePalette(hdc: HDC) -> HPALETTE;
-    pub fn CreateHatchBrush(fnStyle: c_int, clrref: COLORREF) -> HBRUSH;
-    pub fn CreateICA(
-        lpszDriver: LPCSTR, lpszDevice: LPCSTR, lpszOutput: LPCSTR, lpdvmInit: *const DEVMODEA,
-    ) -> HDC;
-    pub fn CreateICW(
-        lpszDriver: LPCWSTR, lpszDevice: LPCWSTR, lpszOutput: LPCWSTR, lpdvmInit: *const DEVMODEW,
-    ) -> HDC;
-    pub fn CreateMetaFileA(lpszFile: LPCSTR) -> HDC;
-    pub fn CreateMetaFileW(lpszFile: LPCWSTR) -> HDC;
-    pub fn CreatePalette(lplgpl: *const LOGPALETTE) -> HPALETTE;
-    pub fn CreatePatternBrush(hbmp: HBITMAP) -> HBRUSH;
-    pub fn CreatePen(fnPenStyle: c_int, nWidth: c_int, crColor: COLORREF) -> HPEN;
-    pub fn CreatePenIndirect(lplgpn: *const LOGPEN) -> HPEN;
-    pub fn CreatePolyPolygonRgn(
-        lppt: *const POINT, lpPolyCounts: *const INT, nCount: c_int, fnPolyFillMode: c_int,
-    ) -> HRGN;
-    pub fn CreatePolygonRgn(lppt: *const POINT, cPoints: c_int, fnPolyFillMode: c_int) -> HRGN;
-    pub fn CreateRectRgn(
-        nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int,
-    ) -> HRGN;
-    pub fn CreateRectRgnIndirect(lprect: *const RECT) -> HRGN;
-    pub fn CreateRoundRectRgn(
-		x1: c_int, y1: c_int, x2: c_int, y2: c_int, w: c_int, h: c_int
-	) -> HRGN;
-    pub fn CreateScalableFontResourceA(
-		fdwHidden: DWORD, lpszFont: LPCSTR, lpszFile: LPCSTR, lpszPath: LPCSTR
-	) -> BOOL;
-    pub fn CreateScalableFontResourceW(
-		fdwHidden: DWORD, lpszFont: LPCWSTR, lpszFile: LPCWSTR, lpszPath: LPCWSTR
-	) -> BOOL;
-    pub fn CreateSolidBrush(color: COLORREF) -> HBRUSH;
-    // pub fn D3DKMTAcquireKeyedMutex();
-    // pub fn D3DKMTAcquireKeyedMutex2();
-    // pub fn D3DKMTCacheHybridQueryValue();
-    // pub fn D3DKMTCheckExclusiveOwnership();
-    // pub fn D3DKMTCheckMonitorPowerState();
-    // pub fn D3DKMTCheckMultiPlaneOverlaySupport();
-    // pub fn D3DKMTCheckOcclusion();
-    // pub fn D3DKMTCheckSharedResourceAccess();
-    // pub fn D3DKMTCheckVidPnExclusiveOwnership();
-    // pub fn D3DKMTCloseAdapter();
-    // pub fn D3DKMTConfigureSharedResource();
-    // pub fn D3DKMTCreateAllocation();
-    // pub fn D3DKMTCreateAllocation2();
-    // pub fn D3DKMTCreateContext();
-    // pub fn D3DKMTCreateDCFromMemory();
-    // pub fn D3DKMTCreateDevice();
-    // pub fn D3DKMTCreateKeyedMutex();
-    // pub fn D3DKMTCreateKeyedMutex2();
-    // pub fn D3DKMTCreateOutputDupl();
-    // pub fn D3DKMTCreateOverlay();
-    // pub fn D3DKMTCreateSynchronizationObject();
-    // pub fn D3DKMTCreateSynchronizationObject2();
-    // pub fn D3DKMTDestroyAllocation();
-    // pub fn D3DKMTDestroyContext();
-    // pub fn D3DKMTDestroyDCFromMemory();
-    // pub fn D3DKMTDestroyDevice();
-    // pub fn D3DKMTDestroyKeyedMutex();
-    // pub fn D3DKMTDestroyOutputDupl();
-    // pub fn D3DKMTDestroyOverlay();
-    // pub fn D3DKMTDestroySynchronizationObject();
-    // pub fn D3DKMTEnumAdapters();
-    // pub fn D3DKMTEscape();
-    // pub fn D3DKMTFlipOverlay();
-    // pub fn D3DKMTGetCachedHybridQueryValue();
-    // pub fn D3DKMTGetContextInProcessSchedulingPriority();
-    // pub fn D3DKMTGetContextSchedulingPriority();
-    // pub fn D3DKMTGetDeviceState();
-    // pub fn D3DKMTGetDisplayModeList();
-    // pub fn D3DKMTGetMultisampleMethodList();
-    // pub fn D3DKMTGetOverlayState();
-    // pub fn D3DKMTGetPresentHistory();
-    // pub fn D3DKMTGetPresentQueueEvent();
-    // pub fn D3DKMTGetProcessSchedulingPriorityClass();
-    // pub fn D3DKMTGetRuntimeData();
-    // pub fn D3DKMTGetScanLine();
-    // pub fn D3DKMTGetSharedPrimaryHandle();
-    // pub fn D3DKMTGetSharedResourceAdapterLuid();
-    // pub fn D3DKMTInvalidateActiveVidPn();
-    // pub fn D3DKMTLock();
-    // pub fn D3DKMTNetDispGetNextChunkInfo();
-    // pub fn D3DKMTNetDispQueryMiracastDisplayDeviceStatus();
-    // pub fn D3DKMTNetDispQueryMiracastDisplayDeviceSupport();
-    // pub fn D3DKMTNetDispStartMiracastDisplayDevice2();
-    // pub fn D3DKMTNetDispStopMiracastDisplayDevice();
-    // pub fn D3DKMTOfferAllocations();
-    // pub fn D3DKMTOpenAdapterFromDeviceName();
-    // pub fn D3DKMTOpenAdapterFromGdiDisplayName();
-    // pub fn D3DKMTOpenAdapterFromHdc();
-    // pub fn D3DKMTOpenAdapterFromLuid();
-    // pub fn D3DKMTOpenKeyedMutex();
-    // pub fn D3DKMTOpenKeyedMutex2();
-    // pub fn D3DKMTOpenNtHandleFromName();
-    // pub fn D3DKMTOpenResource();
-    // pub fn D3DKMTOpenResource2();
-    // pub fn D3DKMTOpenResourceFromNtHandle();
-    // pub fn D3DKMTOpenSyncObjectFromNtHandle();
-    // pub fn D3DKMTOpenSynchronizationObject();
-    // pub fn D3DKMTOutputDuplGetFrameInfo();
-    // pub fn D3DKMTOutputDuplGetMetaData();
-    // pub fn D3DKMTOutputDuplGetPointerShapeData();
-    // pub fn D3DKMTOutputDuplPresent();
-    // pub fn D3DKMTOutputDuplReleaseFrame();
-    // pub fn D3DKMTPinDirectFlipResources();
-    // pub fn D3DKMTPollDisplayChildren();
-    // pub fn D3DKMTPresent();
-    // pub fn D3DKMTPresentMultiPlaneOverlay();
-    // pub fn D3DKMTQueryAdapterInfo();
-    // pub fn D3DKMTQueryAllocationResidency();
-    // pub fn D3DKMTQueryRemoteVidPnSourceFromGdiDisplayName();
-    // pub fn D3DKMTQueryResourceInfo();
-    // pub fn D3DKMTQueryResourceInfoFromNtHandle();
-    // pub fn D3DKMTQueryStatistics();
-    // pub fn D3DKMTReclaimAllocations();
-    // pub fn D3DKMTReleaseKeyedMutex();
-    // pub fn D3DKMTReleaseKeyedMutex2();
-    // pub fn D3DKMTReleaseProcessVidPnSourceOwners();
-    // pub fn D3DKMTRender();
-    // pub fn D3DKMTSetAllocationPriority();
-    // pub fn D3DKMTSetContextInProcessSchedulingPriority();
-    // pub fn D3DKMTSetContextSchedulingPriority();
-    // pub fn D3DKMTSetDisplayMode();
-    // pub fn D3DKMTSetDisplayPrivateDriverFormat();
-    // pub fn D3DKMTSetGammaRamp();
-    // pub fn D3DKMTSetProcessSchedulingPriorityClass();
-    // pub fn D3DKMTSetQueuedLimit();
-    // pub fn D3DKMTSetStereoEnabled();
-    // pub fn D3DKMTSetVidPnSourceOwner();
-    // pub fn D3DKMTSetVidPnSourceOwner1();
-    // pub fn D3DKMTShareObjects();
-    // pub fn D3DKMTSharedPrimaryLockNotification();
-    // pub fn D3DKMTSharedPrimaryUnLockNotification();
-    // pub fn D3DKMTSignalSynchronizationObject();
-    // pub fn D3DKMTSignalSynchronizationObject2();
-    // pub fn D3DKMTUnlock();
-    // pub fn D3DKMTUnpinDirectFlipResources();
-    // pub fn D3DKMTUpdateOverlay();
-    // pub fn D3DKMTWaitForIdle();
-    // pub fn D3DKMTWaitForSynchronizationObject();
-    // pub fn D3DKMTWaitForSynchronizationObject2();
-    // pub fn D3DKMTWaitForVerticalBlankEvent();
-    // pub fn D3DKMTWaitForVerticalBlankEvent2();
-    pub fn DPtoLP(hdc: HDC, lppt: *mut POINT, c: c_int) -> BOOL;
-    pub fn DeleteColorSpace(hcs: HCOLORSPACE) -> BOOL;
-    pub fn DeleteDC(hdc: HDC) -> BOOL;
-    pub fn DeleteEnhMetaFile(hmf: HENHMETAFILE) -> BOOL;
-    pub fn DeleteMetaFile(hmf: HMETAFILE) -> BOOL;
-    pub fn DeleteObject(ho: HGDIOBJ) -> BOOL;
-    pub fn DescribePixelFormat(
-        hdc: HDC, iPixelFormat: c_int, nBytes: UINT, ppfd: LPPIXELFORMATDESCRIPTOR,
-    ) -> c_int;
-    // pub fn DeviceCapabilitiesExA();
-    // pub fn DeviceCapabilitiesExW();
-    pub fn DrawEscape(hdc: HDC, iEscape: c_int, cjIn: c_int, lpIn: LPCSTR) -> c_int;
-    pub fn Ellipse(hdc: HDC, left: c_int, top: c_int, right: c_int, bottom: c_int) -> BOOL;
-    // pub fn EnableEUDC();
-    pub fn EndDoc(hdc: HDC) -> c_int;
-    // pub fn EndFormPage();
-    pub fn EndPage(hdc: HDC) -> c_int;
-    pub fn EndPath(hdc: HDC) -> BOOL;
-    pub fn EnumEnhMetaFile(
-        hdc: HDC, hmf: HENHMETAFILE, lpProc: ENHMFENUMPROC, param: LPVOID, lpRect: *const RECT
-    ) -> BOOL;
-    pub fn EnumFontFamiliesA(
-		hdc: HDC, lpLogfont: LPCSTR, lpProc: FONTENUMPROCA, lParam: LPARAM
-	) -> c_int;
-    pub fn EnumFontFamiliesExA(
-		hdc: HDC, lpLogfont: LPLOGFONTA, lpProc: FONTENUMPROCA, lParam: LPARAM, dwFlags: DWORD
-	) -> c_int;
-    pub fn EnumFontFamiliesExW(
-		hdc: HDC, lpLogfont: LPLOGFONTW, lpProc: FONTENUMPROCW, lParam: LPARAM, dwFlags: DWORD
-	) -> c_int;
-    pub fn EnumFontFamiliesW(
-		hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM
-	) -> c_int;
-    pub fn EnumFontsA(
-		hdc: HDC, lpLogfont: LPCSTR, lpProc: FONTENUMPROCA, lParam: LPARAM
-	) -> c_int;
-    pub fn EnumFontsW(
-		hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM
-	) -> c_int;
-    pub fn EnumICMProfilesA(
-		hdc: HDC, iproc: ICMENUMPROCA, param: LPARAM
-	) -> c_int;
-    pub fn EnumICMProfilesW(
-		hdc: HDC, iproc: ICMENUMPROCW, param: LPARAM
-	) -> c_int;
-    pub fn EnumMetaFile(
-		hdc: HDC, hmf: HMETAFILE, mproc: MFENUMPROC, param: LPARAM
-	) -> BOOL;
-    pub fn EnumObjects(
-		hdc: HDC, nType: c_int, lpFunc: GOBJENUMPROC, lParam: LPARAM
-	) -> c_int;
-    pub fn EqualRgn(hrgn1: HRGN, hrgn2: HRGN) -> BOOL;
-    pub fn Escape(hdc: HDC, iEscape: c_int, cjIn: c_int, pvIn: LPCSTR, pvOut: LPVOID) -> c_int;
-    // pub fn EudcLoadLinkW();
-    // pub fn EudcUnloadLinkW();
-    pub fn ExcludeClipRect(hdc: HDC, left: c_int, top: c_int, right: c_int, bottom: c_int) -> c_int;
-    pub fn ExtCreatePen(
-        iPenStyle: DWORD, cWidth: DWORD, plbrush: *const LOGBRUSH, cStyle: DWORD, pstyle: *const DWORD
-    ) -> HPEN;
-    pub fn ExtCreateRegion(lpx: *const XFORM, nCount: DWORD, lpData: *const RGNDATA) -> HRGN;
-    pub fn ExtEscape(
-        hdc: HDC, iEscape: c_int, cjInput: c_int, lpInData: LPCSTR, cjOutput: c_int, lpOutData: LPSTR
-    ) -> c_int;
-    pub fn ExtFloodFill(hdc: HDC, x: c_int, y: c_int, color: COLORREF, utype: UINT) -> BOOL;
-    pub fn ExtSelectClipRgn(hdc: HDC, hrgn: HRGN, mode: c_int) -> c_int;
-    pub fn ExtTextOutA(
-		hdc: HDC, x: c_int, y: c_int, options: UINT, lprect: *const RECT, lpString: LPCSTR, c: UINT,
-		lpDx: *const INT
-	) -> BOOL;
-    pub fn ExtTextOutW(
-		hdc: HDC, x: c_int, y: c_int, options: UINT, lprect: *const RECT, lpString: LPCWSTR, c: UINT,
-		lpDx: *const INT
-	) -> BOOL;
-    pub fn FillPath(hdc: HDC) -> BOOL;
-    pub fn FillRgn(hdc: HDC, hrgn: HRGN, hbr: HBRUSH) -> BOOL;
-    pub fn FixBrushOrgEx(hdc: HDC, x: c_int, y: c_int, ptl: LPPOINT) -> BOOL;
-    pub fn FlattenPath(hdc: HDC) -> BOOL;
-    pub fn FloodFill(hdc: HDC, x: c_int, y: c_int, color: COLORREF) -> BOOL;
-    pub fn FrameRgn(hdc: HDC, hrgn: HRGN, hbr: HBRUSH, w: c_int, h: c_int) -> BOOL;
-    pub fn GdiAlphaBlend(
-		hdcDest: HDC, xoriginDest: c_int, yoriginDest: c_int, wDest: c_int, hDest: c_int,
-        hdcSrc: HDC, xoriginSrc: c_int, yoriginSrc: c_int, wSrc: c_int, hSrc: c_int,
-        ftn: BLENDFUNCTION
-	) -> BOOL;
-    // pub fn GdiArtificialDecrementDriver();
-    pub fn GdiComment(hdc: HDC, nSize: UINT, lpData: *const BYTE) -> BOOL;
-    // pub fn GdiDeleteSpoolFileHandle();
-    // pub fn GdiEndDocEMF();
-    // pub fn GdiEndPageEMF();
-    pub fn GdiFlush() -> BOOL;
-    pub fn GdiGetBatchLimit() -> DWORD;
-    // pub fn GdiGetDC();
-    // pub fn GdiGetDevmodeForPage();
-    // pub fn GdiGetPageCount();
-    // pub fn GdiGetPageHandle();
-    // pub fn GdiGetSpoolFileHandle();
-    pub fn GdiGradientFill(
-        hdc: HDC, pVertex: PTRIVERTEX, nVertex: ULONG, pMesh: PVOID, nCount: ULONG, ulMode: ULONG
-    ) -> BOOL;
-    // pub fn GdiPlayDCScript();
-    // pub fn GdiPlayEMF();
-    // pub fn GdiPlayJournal();
-    // pub fn GdiPlayPageEMF();
-    // pub fn GdiPlayPrivatePageEMF();
-    // pub fn GdiPlayScript();
-    // pub fn GdiResetDCEMF();
-    pub fn GdiSetBatchLimit(dw: DWORD) -> DWORD;
-    // pub fn GdiStartDocEMF();
-    // pub fn GdiStartPageEMF();
-    pub fn GdiTransparentBlt(
-        hdcDest: HDC, xoriginDest: c_int, yoriginDest: c_int, wDest: c_int, hDest: c_int, hdcSrc: HDC,
-        xoriginSrc: c_int, yoriginSrc: c_int, wSrc: c_int, hSrc: c_int, crTransparent: UINT
-    ) -> BOOL;
-    pub fn GetArcDirection(hdc: HDC) -> c_int;
-    pub fn GetAspectRatioFilterEx(hdc: HDC, lpsize: LPSIZE) -> BOOL;
-    pub fn GetBitmapBits(hbit: HBITMAP, cb: LONG, lpvBits: LPVOID) -> LONG;
-    pub fn GetBitmapDimensionEx(hbit: HBITMAP, lpsize: LPSIZE) -> BOOL;
-    pub fn GetBkColor(hdc: HDC) -> COLORREF;
-    pub fn GetBkMode(hdc: HDC) -> c_int;
-    pub fn GetBoundsRect(hdc: HDC, lprect: LPRECT, flags: UINT) -> UINT;
-    pub fn GetBrushOrgEx(hdc: HDC, lppt: LPPOINT) -> BOOL;
-    pub fn GetCharABCWidthsA( hdc: HDC, wFirst: UINT, wLast: UINT, lpABC: LPABC) -> BOOL;
-    pub fn GetCharABCWidthsFloatA(
-		hdc: HDC, iFirst: UINT, iLast: UINT, lpABC: LPABCFLOAT
-	) -> BOOL;
-    pub fn GetCharABCWidthsFloatW(
-		hdc: HDC, iFirst: UINT, iLast: UINT, lpABC: LPABCFLOAT
-	) -> BOOL;
-    pub fn GetCharABCWidthsI(hdc: HDC, giFirst: UINT, cgi: UINT, pgi: LPWORD, pabc: LPABC) -> BOOL;
-    pub fn GetCharABCWidthsW(hdc: HDC, wFirst: UINT, wLast: UINT, lpABC: LPABC) -> BOOL;
-    pub fn GetCharWidth32A(hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: LPINT) -> BOOL;
-    pub fn GetCharWidth32W(hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: LPINT) -> BOOL;
-    pub fn GetCharWidthA(hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: LPINT) -> BOOL;
-    pub fn GetCharWidthFloatA(hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: PFLOAT) -> BOOL;
-    pub fn GetCharWidthFloatW(hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: PFLOAT) -> BOOL;
-    pub fn GetCharWidthI(hdc: HDC, giFirst: UINT, cgi: UINT, pgi: LPWORD, piWidths: LPINT) -> BOOL;
-    pub fn GetCharWidthW(hdc: HDC, iFirst: UINT, iLast: UINT, lpBuffer: LPINT) -> BOOL;
-    pub fn GetCharacterPlacementA(
-		hdc: HDC, lpString: LPCSTR, nCount: c_int, nMexExtent: c_int, lpResults: LPGCP_RESULTSA,
-		dwFlags: DWORD
-	) -> DWORD;
-    pub fn GetCharacterPlacementW(
-		hdc: HDC, lpString: LPCWSTR, nCount: c_int, nMexExtent: c_int, lpResults: LPGCP_RESULTSW,
-		dwFlags: DWORD
-	) -> DWORD;
-    pub fn GetClipBox(hdc: HDC, lprect: LPRECT) -> c_int;
-    pub fn GetClipRgn(hdc: HDC, hrgn: HRGN) -> c_int;
-    pub fn GetColorAdjustment(hdc: HDC, lpca: LPCOLORADJUSTMENT) -> BOOL;
-    pub fn GetColorSpace(hdc: HDC) -> HCOLORSPACE;
-    pub fn GetCurrentObject(hdc: HDC, tp: UINT) -> HGDIOBJ;
-    pub fn GetCurrentPositionEx(hdc: HDC, lppt: LPPOINT) -> BOOL;
-    pub fn GetDCBrushColor(hdc: HDC) -> COLORREF;
-    pub fn GetDCOrgEx(hdc: HDC, lppt: LPPOINT) -> BOOL;
-    pub fn GetDCPenColor(hdc: HDC) -> COLORREF;
-    pub fn GetDIBColorTable(hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: *mut RGBQUAD) -> UINT;
-    pub fn GetDIBits(
-        hdc: HDC, hbm: HBITMAP, start: UINT, cLines: UINT, lpvBits: LPVOID, lpbmi: LPBITMAPINFO,
-        usage: UINT
-    ) -> c_int;
-    pub fn GetDeviceCaps(hdc: HDC, nIndex: c_int) -> c_int;
-    pub fn GetDeviceGammaRamp(hdc: HDC, lpRamp: LPVOID) -> BOOL;
-    pub fn GetEnhMetaFileA(lpName: LPCSTR) -> HENHMETAFILE;
-    pub fn GetEnhMetaFileBits(hEMF: HENHMETAFILE, nSize: UINT, lpData: LPBYTE) -> UINT;
-    pub fn GetEnhMetaFileDescriptionA(hemf: HENHMETAFILE, cchBuffer: UINT, lpDescription: LPSTR) -> UINT;
-    pub fn GetEnhMetaFileDescriptionW(hemf: HENHMETAFILE, cchBuffer: UINT, lpDescription: LPWSTR) -> UINT;
-    pub fn GetEnhMetaFileHeader(
-        hemf: HENHMETAFILE, nSize: UINT, lpEnhMetaHeader: LPENHMETAHEADER
-    ) -> UINT;
-    pub fn GetEnhMetaFilePaletteEntries(
-        hemf: HENHMETAFILE, nNumEntries: UINT, lpPaletteEntries: LPPALETTEENTRY
-    ) -> UINT;
-    pub fn GetEnhMetaFilePixelFormat(
-        hemf: HENHMETAFILE, cbBuffer: UINT, ppfd: *mut PIXELFORMATDESCRIPTOR
-    ) -> UINT;
-    pub fn GetEnhMetaFileW(lpName: LPCWSTR) -> HENHMETAFILE;
-    // pub fn GetFontAssocStatus();
-    pub fn GetFontData(
-        hdc: HDC, dwTable: DWORD, dwOffset: DWORD, pvBuffer: PVOID, cjBuffer: DWORD
-    ) -> DWORD;
-    pub fn GetFontLanguageInfo(hdc: HDC) -> DWORD;
-    // pub fn GetFontResourceInfoW();
-    pub fn GetFontUnicodeRanges(hdc: HDC, lpgs: LPGLYPHSET) -> DWORD;
-    pub fn GetGlyphIndicesA(hdc: HDC, lpstr: LPCSTR, c: c_int, pgi: LPWORD, fl: DWORD) -> DWORD;
-    pub fn GetGlyphIndicesW(hdc: HDC, lpstr: LPCWSTR, c: c_int, pgi: LPWORD, fl: DWORD) -> DWORD;
-    // pub fn GetGlyphOutline();
-    pub fn GetGlyphOutlineA(
-        hdc: HDC, uChar: UINT, fuFormat: UINT, lpgm: LPGLYPHMETRICS, cjBuffer: DWORD,
-        pvBuffer: LPVOID, lpmat2: *const MAT2
-    ) -> DWORD;
-    pub fn GetGlyphOutlineW(
-        hdc: HDC, uChar: UINT, fuFormat: UINT, lpgm: LPGLYPHMETRICS, cjBuffer: DWORD,
-        pvBuffer: LPVOID, lpmat2: *const MAT2
-    ) -> DWORD;
-    pub fn GetGraphicsMode(hdc: HDC) -> c_int;
-    pub fn GetICMProfileA(hdc: HDC, pBufSize: LPDWORD, pszFilename: LPSTR) -> BOOL;
-    pub fn GetICMProfileW(hdc: HDC, pBufSize: LPDWORD, pszFilename: LPWSTR) -> BOOL;
-    // pub fn GetKerningPairs();
-    pub fn GetKerningPairsA(hdc: HDC, nPairs: DWORD, lpKernPair: LPKERNINGPAIR) -> DWORD;
-    pub fn GetKerningPairsW(hdc: HDC, nPairs: DWORD, lpKernPair: LPKERNINGPAIR) -> DWORD;
-    pub fn GetLayout(hdc: HDC) -> DWORD;
-    pub fn GetLogColorSpaceA(
-        hColorSpace: HCOLORSPACE, lpBuffer: LPLOGCOLORSPACEA, nSize: DWORD
-    ) -> BOOL;
-    pub fn GetLogColorSpaceW(
-        hColorSpace: HCOLORSPACE, lpBuffer: LPLOGCOLORSPACEW, nSize: DWORD
-    ) -> BOOL;
-    pub fn GetMapMode(hdc: HDC) -> c_int;
-    pub fn GetMetaFileA(lpName: LPCSTR) -> HMETAFILE;
-    pub fn GetMetaFileBitsEx(hMF: HMETAFILE, cbBuffer: UINT, lpData: LPVOID) -> UINT;
-    pub fn GetMetaFileW(lpName: LPCWSTR) -> HMETAFILE;
-    pub fn GetMetaRgn(hdc: HDC, hrgn: HRGN) -> c_int;
-    pub fn GetMiterLimit(hdc: HDC, plimit: PFLOAT) -> BOOL;
-    pub fn GetNearestColor(hdc: HDC, color: COLORREF) -> COLORREF;
-    pub fn GetNearestPaletteIndex(h: HPALETTE, color: COLORREF) -> UINT;
-    pub fn GetObjectA(h: HANDLE, c: c_int, pv: LPVOID) -> c_int;
-    pub fn GetObjectType(h: HGDIOBJ) -> DWORD;
-    pub fn GetObjectW(h: HANDLE, c: c_int, pv: LPVOID) -> c_int;
-    pub fn GetOutlineTextMetricsA(hdc: HDC, cjCopy: UINT, potm: LPOUTLINETEXTMETRICA) -> UINT;
-    pub fn GetOutlineTextMetricsW(hdc: HDC, cjCopy: UINT, potm: LPOUTLINETEXTMETRICW) -> UINT;
-    pub fn GetPaletteEntries(
-        hpal: HPALETTE, iStart: UINT, cEntries: UINT, pPalEntries: LPPALETTEENTRY
-    ) -> UINT;
-    pub fn GetPath(hdc: HDC, apt: LPPOINT, aj: LPBYTE, cpt: c_int) -> c_int;
-    pub fn GetPixel(hdc: HDC, x: c_int, y: c_int) -> COLORREF;
-    pub fn GetPixelFormat(hdc: HDC) -> c_int;
-    pub fn GetPolyFillMode(hdc: HDC) -> c_int;
-    pub fn GetROP2(hdc: HDC) -> c_int;
-    pub fn GetRandomRgn (hdc: HDC, hrgn: HRGN, i: INT) -> c_int;
-    pub fn GetRasterizerCaps(lpraststat: LPRASTERIZER_STATUS, cjBytes: UINT) -> BOOL;
-    pub fn GetRegionData(hrgn: HRGN, nCount: DWORD, lpRgnData: LPRGNDATA) -> DWORD;
-    // pub fn GetRelAbs();
-    pub fn GetRgnBox(hrgn: HRGN, lprc: LPRECT) -> c_int;
-    pub fn GetStockObject(i: c_int) -> HGDIOBJ;
-    pub fn GetStretchBltMode(hdc: HDC) -> c_int;
-    pub fn GetSystemPaletteEntries(hdc: HDC, iStart: UINT, cEntries: UINT, pPalEntries: LPPALETTEENTRY) -> UINT;
-    pub fn GetSystemPaletteUse(hdc: HDC) -> UINT;
-    pub fn GetTextAlign(hdc: HDC) -> UINT;
-    pub fn GetTextCharacterExtra(hdc: HDC) -> c_int;
-    pub fn GetTextCharset(hdc: HDC) -> c_int;
-    pub fn GetTextCharsetInfo(hdc: HDC, lpSig: LPFONTSIGNATURE, dwFlags: DWORD) -> c_int;
-    pub fn GetTextColor(hdc: HDC) -> COLORREF;
-    pub fn GetTextExtentExPointA(
-        hdc: HDC, lpszString: LPCSTR, cchString: c_int, nMaxExtent: c_int, lpnFit: LPINT,
-        lpnDx: LPINT, lpSize: LPSIZE
-    ) -> BOOL;
-    pub fn GetTextExtentExPointI(hdc: HDC, lpwszString: LPWORD, cwchString: c_int, nMaxExtent: c_int,
-        lpnFit: LPINT, lpnDx: LPINT, lpSize: LPSIZE
-    ) -> BOOL;
-    pub fn GetTextExtentExPointW(
-        hdc: HDC, lpszString: LPCWSTR, cchString: c_int, nMaxExtent: c_int, lpnFit: LPINT,
-        lpnDx: LPINT, lpSize: LPSIZE
-    ) -> BOOL;
-    pub fn GetTextExtentPoint32A(hdc: HDC, lpString: LPCSTR, c: c_int, psizl: LPSIZE) -> BOOL;
-    pub fn GetTextExtentPoint32W(hdc: HDC, lpString: LPCWSTR, c: c_int, psizl: LPSIZE) -> BOOL;
-    pub fn GetTextExtentPointA(hdc: HDC, lpString: LPCSTR, c: c_int, lpsz: LPSIZE) -> BOOL;
-    pub fn GetTextExtentPointI(hdc: HDC, pgiIn: LPWORD, cgi: c_int, psize: LPSIZE) -> BOOL;
-    pub fn GetTextExtentPointW(hdc: HDC, lpString: LPCWSTR, c: c_int, lpsz: LPSIZE) -> BOOL;
-    pub fn GetTextFaceA(hdc: HDC, c: c_int, lpName: LPSTR) -> c_int;
-    pub fn GetTextFaceW(hdc: HDC, c: c_int, lpName: LPWSTR) -> c_int;
-    pub fn GetTextMetricsA(hdc: HDC, lptm: LPTEXTMETRICA) -> BOOL;
-    pub fn GetTextMetricsW(hdc: HDC, lptm: *mut TEXTMETRICW) -> BOOL;
-    pub fn GetViewportExtEx(hdc: HDC, lpsize: LPSIZE) -> BOOL;
-    pub fn GetViewportOrgEx(hdc: HDC, lppoint: LPPOINT) -> BOOL;
-    pub fn GetWinMetaFileBits(
-        hemf: HENHMETAFILE, cbData16: UINT, pData16: LPBYTE, iMapMode: INT, hdcRef: HDC
-    ) -> UINT;
-    pub fn GetWindowExtEx(hdc: HDC, lpsize: LPSIZE) -> BOOL;
-    pub fn GetWindowOrgEx(hdc: HDC, lppoint: LPPOINT) -> BOOL;
-    pub fn GetWorldTransform(hdc: HDC, lpxf: LPXFORM) -> BOOL;
-    pub fn IntersectClipRect(
-		hdc: HDC, left: c_int, top: c_int, right: c_int, bottom: c_int
-	) -> c_int;
-    pub fn InvertRgn(hdc: HDC, hrgn: HRGN) -> BOOL;
-    pub fn LPtoDP(hdc: HDC, lppt: LPPOINT, c: c_int) -> BOOL;
-    pub fn LineDDA(
-        nXStart: c_int, nYStart: c_int, nXEnd: c_int, nYEnd: c_int, lpLineFunc: LINEDDAPROC,
-        lpData: LPARAM,
-    ) -> BOOL;
-    pub fn LineTo(hdc: HDC, nXEnd: c_int, nYEnd: c_int) -> BOOL;
-    pub fn MaskBlt(
-        hdcDest: HDC, xDest: c_int, yDest: c_int, width: c_int, height: c_int, hdcSrc: HDC,
-        xSrc: c_int, ySrc: c_int, hbmMask: HBITMAP, xMask: c_int, yMask: c_int, rop: DWORD
-    ) -> BOOL;
-    pub fn ModifyWorldTransform(hdc: HDC, lpxf: *const XFORM, mode: DWORD) -> BOOL;
-    pub fn MoveToEx(hdc: HDC, X: c_int, Y: c_int, lpPoint:LPPOINT) -> BOOL;
-    pub fn OffsetClipRgn(hdc: HDC, x: c_int, y: c_int) -> c_int;
-    pub fn OffsetRgn(hrgn: HRGN, x: c_int, y: c_int) -> c_int;
-    pub fn OffsetViewportOrgEx(hdc: HDC, x: c_int, y: c_int, lppt: LPPOINT) -> BOOL;
-    pub fn OffsetWindowOrgEx(hdc: HDC, x: c_int, y: c_int, lppt: LPPOINT) -> BOOL;
-    pub fn PaintRgn(hdc: HDC, hrgn: HRGN) -> BOOL;
-    pub fn PatBlt(
-        hdc: HDC, nXLeft: c_int, nYLeft: c_int, nWidth: c_int, nHeight: c_int, dwRop: DWORD,
-    ) -> BOOL;
-    pub fn PathToRegion(hdc: HDC) -> HRGN;
-    pub fn Pie(
-        hdc: HDC, nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int, nXRadial1: c_int,
-        nYRadial1: c_int, nXRadial2: c_int, nYRadial2: c_int,
-    ) -> BOOL;
-    pub fn PlayEnhMetaFile(hdc: HDC, hmf: HENHMETAFILE, lprect: *const RECT) -> BOOL;
-    pub fn PlayEnhMetaFileRecord(
-        hdc: HDC, pht: LPHANDLETABLE, pmr: *const ENHMETARECORD,cht: UINT
-    ) -> BOOL;
-    pub fn PlayMetaFile(hdc: HDC, hmf: HMETAFILE) -> BOOL;
-    pub fn PlayMetaFileRecord(hdc: HDC, lpHandleTable: LPHANDLETABLE, lpMR: LPMETARECORD, noObjs: UINT) -> BOOL;
-    pub fn PlgBlt(hdcDest: HDC, lpPoint: *const POINT, hdcSrc: HDC, xSrc: c_int, ySrc: c_int,
-        width: c_int, height: c_int, hbmMask: HBITMAP, xMask: c_int, yMask: c_int
-    ) -> BOOL;
-    pub fn PolyBezier(hdc: HDC, lppt: *const POINT, cPoints: DWORD) -> BOOL;
-    pub fn PolyBezierTo(hdc: HDC, lppt: *const POINT, cPoints: DWORD) -> BOOL;
-    pub fn PolyDraw(hdc: HDC, lppt: *const POINT, lpbTypes: *const BYTE, cCount: c_int) -> BOOL;
-    pub fn PolyPolygon(
-        hdc: HDC, lpPoints: *const POINT, lpPolyCounts: *const INT, cCount: DWORD,
-    ) -> BOOL;
-    pub fn PolyPolyline(
-        hdc: HDC, lppt: *const POINT, lpdwPolyPoints: *const DWORD, cCount: DWORD,
-    ) -> BOOL;
-    pub fn PolyTextOutA(hdc: HDC, ppt: *const POLYTEXTA, nstrings: c_int) -> BOOL;
-    pub fn PolyTextOutW(hdc: HDC, ppt: *const POLYTEXTW, nstrings: c_int) -> BOOL;
-    pub fn Polygon(hdc: HDC, lpPoints: *const POINT, nCount: c_int) -> BOOL;
-    pub fn Polyline(hdc: HDC, lppt: *const POINT, cCount: c_int) -> BOOL;
-    pub fn PolylineTo(hdc: HDC, lppt: *const POINT, cCount: DWORD) -> BOOL;
-    pub fn PtInRegion(hrgn: HRGN, x: c_int, y: c_int) -> BOOL;
-    pub fn PtVisible(hdc: HDC, x: c_int, y: c_int) -> BOOL;
-    pub fn RealizePalette(hdc: HDC) -> UINT;
-    pub fn RectInRegion(hrgn: HRGN, lprect: *const RECT) -> BOOL;
-    pub fn RectVisible(hdc: HDC, lprect: *const RECT) -> BOOL;
-    pub fn Rectangle(hdc: HDC, left: c_int, top: c_int, right: c_int, bottom: c_int) -> BOOL;
-    pub fn RemoveFontMemResourceEx(h: HANDLE) -> BOOL;
-    pub fn RemoveFontResourceA(lpFileName: LPCSTR) -> BOOL;
-    pub fn RemoveFontResourceExA(name: LPCSTR, fl: DWORD, pdv: PVOID) -> BOOL;
-    pub fn RemoveFontResourceExW(name: LPCWSTR, fl: DWORD, pdv: PVOID) -> BOOL;
-    pub fn RemoveFontResourceW(lpFileName: LPCWSTR) -> BOOL;
-    pub fn ResetDCA(hdc: HDC, lpdm: *const DEVMODEA) -> HDC;
-    pub fn ResetDCW(hdc: HDC, lpdm: *const DEVMODEW) -> HDC;
-    pub fn ResizePalette(hpal: HPALETTE, n: UINT) -> BOOL;
-    pub fn RestoreDC(hdc: HDC, nSavedDC: c_int) -> BOOL;
-    pub fn RoundRect(
-        hdc: HDC, nLeftRect: c_int, nTopRect: c_int, nRightRect: c_int, nBottomRect: c_int,
-        nWidth: c_int, nHeight: c_int,
-    ) -> BOOL;
-    pub fn SaveDC(hdc: HDC) -> c_int;
-    pub fn ScaleViewportExtEx(
-		hdc: HDC,xn: c_int, dx: c_int, yn: c_int, yd: c_int, lpsz: LPSIZE
-	) -> BOOL;
-    pub fn ScaleWindowExtEx(
-		hdc: HDC, xn: c_int, xd: c_int, yn: c_int, yd: c_int, lpsz: LPSIZE
-	) -> BOOL;
-    // pub fn SelectBrushLocal();
-    pub fn SelectClipPath(hdc: HDC, mode: c_int) -> BOOL;
-    pub fn SelectClipRgn(hdc: HDC, hrgn: HRGN) -> c_int;
-    // pub fn SelectFontLocal();
-    pub fn SelectObject(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ;
-    pub fn SelectPalette(hdc: HDC, hPal: HPALETTE, bForceBkgd: BOOL) -> HPALETTE;
-    pub fn SetAbortProc(hdc: HDC, aproc: ABORTPROC) -> c_int;
-    pub fn SetArcDirection(hdc: HDC, ArcDirection: c_int) -> c_int;
-    pub fn SetBitmapBits(hbm: HBITMAP, cb: DWORD, pvBits: *const VOID) -> LONG;
-    pub fn SetBitmapDimensionEx(hbm: HBITMAP, w: c_int, h: c_int, lpsz: LPSIZE) -> BOOL;
-    pub fn SetBkColor(hdc: HDC, color: COLORREF) -> COLORREF;
-    pub fn SetBkMode(hdc: HDC, mode: c_int) -> c_int;
-    pub fn SetBoundsRect(hdc: HDC, lprect: *const RECT, flags: UINT) -> UINT;
-    pub fn SetBrushOrgEx(hdc: HDC, x: c_int, y: c_int, lppt: LPPOINT) -> BOOL;
-    pub fn SetColorAdjustment(hdc: HDC, lpca: *const COLORADJUSTMENT) -> BOOL;
-    pub fn SetColorSpace(hdc: HDC, hcs: HCOLORSPACE) -> HCOLORSPACE;
-    pub fn SetDCBrushColor(hdc: HDC, color: COLORREF) -> COLORREF;
-    pub fn SetDCPenColor(hdc: HDC, color: COLORREF) -> COLORREF;
-    pub fn SetDIBColorTable(hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: *const RGBQUAD) -> UINT;
-    pub fn SetDIBits(
-		hdc: HDC, hbm: HBITMAP, start: UINT, cLines: UINT, lpBits: *const VOID,
-		lpbmi: *const BITMAPINFO, ColorUse: UINT
-	) -> c_int;
-    pub fn SetDIBitsToDevice(
-        hdc: HDC, xDest: c_int, yDest: c_int, w: DWORD, h: DWORD, xSrc: c_int, ySrc: c_int,
-        StartScan: UINT, cLines: UINT, lpvBits: *const VOID, lpbmi: *const BITMAPINFO, ColorUse: UINT
-    ) -> c_int;
-    pub fn SetDeviceGammaRamp(hdc: HDC, lpRamp: LPVOID) -> BOOL;
-    pub fn SetEnhMetaFileBits(nSize: UINT, pb: *const BYTE) -> HENHMETAFILE;
-    // pub fn SetFontEnumeration();
-    pub fn SetGraphicsMode(hdc: HDC, iMode: c_int) -> c_int;
-    pub fn SetICMMode(hdc: HDC, mode: c_int) -> c_int;
-    pub fn SetICMProfileA(hdc: HDC, lpFileName: LPSTR) -> BOOL;
-    pub fn SetICMProfileW(hdc: HDC, lpFileName: LPWSTR) -> BOOL;
-    pub fn SetLayout(hdc: HDC, l: DWORD) -> DWORD;
-    // pub fn SetMagicColors();
-    pub fn SetMapMode(hdc: HDC, mode: c_int) -> c_int;
-    pub fn SetMapperFlags(hdc: HDC, flags: DWORD) -> DWORD;
-    pub fn SetMetaFileBitsEx(cbBuffer: UINT, lpData: *const BYTE) -> HMETAFILE;
-    pub fn SetMetaRgn(hdc: HDC) -> c_int;
-    pub fn SetMiterLimit(hdc: HDC, limit: FLOAT, old: PFLOAT) -> BOOL;
-    pub fn SetPaletteEntries(
-        hpal: HPALETTE, iStart: UINT, cEntries: UINT, pPalEntries: *const PALETTEENTRY
-    ) -> UINT;
-    pub fn SetPixel(hdc: HDC, x: c_int, y: c_int, color: COLORREF) -> COLORREF;
-    pub fn SetPixelFormat(
-        hdc: HDC, iPixelFormat: c_int, ppfd: *const PIXELFORMATDESCRIPTOR,
-    ) -> BOOL;
-    pub fn SetPixelV(hdc: HDC, x: c_int, y: c_int, color: COLORREF) -> BOOL;
-    pub fn SetPolyFillMode(hdc: HDC, iPolyFillMode: c_int) -> c_int;
-    pub fn SetROP2(hdc: HDC, rop2: c_int) -> c_int;
-    pub fn SetRectRgn(hrgn: HRGN, left: c_int, top: c_int, right: c_int, bottom: c_int) -> BOOL;
-    // pub fn SetRelAbs();
-    pub fn SetStretchBltMode(hdc: HDC, mode: c_int) -> c_int;
-    pub fn SetSystemPaletteUse(hdc: HDC, uuse: UINT) -> UINT;
-    pub fn SetTextAlign(hdc: HDC, align: UINT) -> UINT;
-    pub fn SetTextCharacterExtra(hdc: HDC, extra: c_int) -> c_int;
-    pub fn SetTextColor(hdc: HDC, color: COLORREF) -> COLORREF;
-    pub fn SetTextJustification(hdc: HDC, extra: c_int, count: c_int) -> BOOL;
-    pub fn SetViewportExtEx(hdc: HDC, x: c_int, y: c_int, lpsz: *mut SIZE) -> BOOL;
-    pub fn SetViewportOrgEx(hdc: HDC, x: c_int, y: c_int, lppt: *mut POINT) -> BOOL;
-    pub fn SetWinMetaFileBits(
-        nSize: UINT, lpMeta16Data: *const BYTE, hdcRef: HDC, lpMFP: *const METAFILEPICT
-    ) -> HENHMETAFILE;
-    pub fn SetWindowExtEx(hdc: HDC, x: c_int, y: c_int, lppt: *mut SIZE) -> BOOL;
-    pub fn SetWindowOrgEx(hdc: HDC, x: c_int, y: c_int, lppt: LPPOINT) -> BOOL;
-    pub fn SetWorldTransform(hdc: HDC, lpxf: *const XFORM) -> BOOL;
-    pub fn StartDocA(hdc: HDC, lpdi: *const DOCINFOA) -> c_int;
-    pub fn StartDocW(hdc: HDC, lpdi: *const DOCINFOW) -> c_int;
-    // pub fn StartFormPage();
-    pub fn StartPage(hdc: HDC) -> c_int;
-    pub fn StretchBlt(
-		hdcDest: HDC, xDest: c_int, yDest: c_int, wDest: c_int, hDest: c_int, hdcSrc: HDC,
-		xSrc: c_int, ySrc: c_int, wSrc: c_int, hSrc: c_int, rop: DWORD
-	) -> BOOL;
-    pub fn StretchDIBits(
-        hdc: HDC, XDest: c_int, YDest: c_int, nDestWidth: c_int,
-        nDestHeight: c_int, XSrc: c_int, YSrc: c_int, nSrcWidth: c_int,
-        nSrcHeight: c_int, lpBits: *const VOID, lpBitsInfo: *const BITMAPINFO,
-        iUsage: UINT, dwRop: DWORD,
-    ) -> c_int;
-    pub fn StrokeAndFillPath(hdc: HDC) -> BOOL;
-    pub fn StrokePath(hdc: HDC) -> BOOL;
-    pub fn SwapBuffers(hdc: HDC) -> BOOL;
-    pub fn TextOutA(hdc: HDC, x: c_int, y: c_int, lpString: LPCSTR, c: c_int) -> BOOL;
-    pub fn TextOutW(hdc: HDC, x: c_int, y: c_int, lpString: LPCWSTR, c: c_int) -> BOOL;
-    pub fn TranslateCharsetInfo(
-		lpSrc: *const DWORD, lpCs: LPCHARSETINFO, dwFlags: DWORD
-	) -> BOOL;
-    pub fn UnrealizeObject(h: HGDIOBJ) -> BOOL;
-    pub fn  UpdateColors(hdc: HDC) -> BOOL;
-    pub fn UpdateICMRegKeyA(
-		reserved: DWORD, lpszCMID: LPSTR, lpszFileName: LPSTR, command: UINT
-	) -> BOOL;
-    pub fn UpdateICMRegKeyW(
-		reserved: DWORD, lpszCMID: LPWSTR, lpszFileName: LPWSTR, command: UINT
-	) -> BOOL;
-    pub fn WidenPath(hdc: HDC) -> BOOL;
-    // pub fn gdiPlaySpoolStream();
-}
--- a/third_party/rust/winapi/.cargo-checksum.json
+++ b/third_party/rust/winapi/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"88d123fdeaf9d3653aec43b513005eb9fdb329375257968526147f6e398c5a83","LICENSE-APACHE":"b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1","LICENSE-MIT":"5b19674a1db628a475850a131956ed49521b744e3dda8f5a94141f9aba681219","README.md":"2fd4c0142b8d6f03e838255ae0eb111cd003d61cbf435d532d501bb4578d0fae","build.rs":"3ac7f9cd553d3460d5a107f44aa50589d0df253fd366f88832730c6fecd30a4d","src/lib.rs":"f65adc2997f898b7a0d0605bf911479740bc007c708e10c0c285c3d3d5891b10","src/macros.rs":"b6cb61c5295cb5263a18dc3c8f294ab953b4572c08d9f98be6f2963583ecaffa","src/shared/basetsd.rs":"99856b585ba67a0e1cc0c6ce6f4a1ce3d43a47974bcfa9341ac7fbe0d3f66a0b","src/shared/bcrypt.rs":"c4af763c7ab609d00a5c0131dbeeaf81363320f7872f7f978c96e46e5709f963","src/shared/bugcodes.rs":"17ce3b68a8110846a4ce1ec1447944e44ba8e852098714176dfde8cb55d8c3b3","src/shared/cderr.rs":"23fafc514089bc50fa7dd7843a21c3ac3bf956f20430177eac2adabdff1dc47a","src/shared/cfg.rs":"8863b6a485e99956c03ebd5b921890877d059d2260db786aebeefb09b69b5409","src/shared/d3d9.rs":"d006692019459d28e1d62537f2f031b3999b56494cc70e1824c5f7fc48a793f2","src/shared/d3d9caps.rs":"191d7e6a120049eb510f268b178a192ac26b851373e7e9d5dee06112eaa7532f","src/shared/d3d9types.rs":"24c2aa38144e83b0089a7adde2b3dc2b93c103e520313d38cbad1444463cbd0b","src/shared/dcomptypes.rs":"24105520e49bff0249a7ce9a77a7cb9776f4a3977019ecc915d09a2fe187411a","src/shared/devguid.rs":"c7306502b0a9b7cf74382b85d87cb010356088b163a62cd19af3e8371ea315e7","src/shared/devpkey.rs":"df9d46b1494754f3b48d62866af443cd9f7b49409fa7ccc749a011d66346df9d","src/shared/devpropdef.rs":"b30c0e0984dc72e35223754cceb81a433fb21847d1a99ef7580c691e7c46c1e0","src/shared/dinputd.rs":"d3b6509875f1b65326faa59ec301ffba275d5c2ba7932937cbc388feecca6355","src/shared/dxgi.rs":"a131a68b095b928843cfb7581a9dfd4f510f749b8f67b1efc0719e5e56036eca","src/shared/dxgi1_2.rs":"65189e09fad5d4f8492d6e0f73f6fa3c6f7c8a90a4aadc30e69252a18f220c80","src/shared/dxgi1_3.rs":"c855e2bfcfd37c0573d171ad9229c4bade07e6b4032addf72def238181a63f10","src/shared/dxgi1_4.rs":"d8b9bd67f4b4908da6f41acc82133ef150a8e1b1ef7317d28087d9554f0b2339","src/shared/dxgi1_5.rs":"30f49ac821998f746f1f4df8397daa6d9d80a2be3fee94bac82f5e427aa84579","src/shared/dxgiformat.rs":"2052f3be936634aca5eb969fe53b9b24ce49e4a20d10ae20db5b4290d53d1bcc","src/shared/dxgitype.rs":"38d402cbf838ac6a27c5ecf03c7527400c7736e1756d11398533f570db0a4d1a","src/shared/guiddef.rs":"0b596aab671f86515d3979d961092531046070bb2b853709ced6085b0fd3a5e1","src/shared/hidclass.rs":"374185e80183ff79a3c0797daeca3af94f4e2bacb579ad79ba60bec5d76215ab","src/shared/hidpi.rs":"9b4d6b5cb4c198c5d47b233a8e896acd04a42fcf37f632999970ed0850f2b8f4","src/shared/hidsdi.rs":"206ac6152e920628398f2d0f3e3778007ac421a8ed09b85aabe1fb6712d7b0d4","src/shared/hidusage.rs":"7133890999bd672ad502a8f1d87c347a3e3f7624480fad7101f3b83322d6208c","src/shared/in6addr.rs":"927dacfbe1b76450673771f7f1c43cb7fe8c7cf3b808bf448b5d1a3c50defb9d","src/shared/inaddr.rs":"5162a678484065a012447b5e9182ef3b297e9f0e2f10c3fcef52d3fc77b72e7f","src/shared/intsafe.rs":"d0730302935824a06be422274f9018d5a4f9c7753f7d7a8b81489efc0e8afd70","src/shared/ksmedia.rs":"2ab9f9791b2e46b5e9c84cd81c8b8c86bf97f9981711be3441e996f84e1782ac","src/shared/ktmtypes.rs":"bbdaa6b33b732e3d162cf248f6c6a95a99301091bf29eec51126411c2bed5621","src/shared/lmcons.rs":"0d1efca38ea4e7f2a84b3309c27c453e4f1f87b1889443e39b27409616a04410","src/shared/minwindef.rs":"782a2b4b35945723e8e7ddff59bffe5d46b6be6770c5aa958de91665dbf42b93","src/shared/mmreg.rs":"61de7fcf55ddb536aec4d7bfe2322d36f2e56ba6d9a8d84c35a96d034c919819","src/shared/mod.rs":"780f7b4d26963df8aece7dc405bc2b2598bf0b18fbe289fd6ff1dbefffdf9543","src/shared/mstcpip.rs":"4db1b2a9ddcecec6cd51da22bab57d1595a1c58958616511a056f9608fd79869","src/shared/ntddscsi.rs":"1a44f487d2a99f7cf121387a6a1795cd8c12a5d9125b0686feb74495a7b60a42","src/shared/ntddser.rs":"3c49b36f7928557453637a69736b80529dd02eea47149f419a2edff28db5711d","src/shared/ntdef.rs":"fc50df4331dfdc2c7622ee63d457e93c2f587f9e15d4da317c29363925970bde","src/shared/ntstatus.rs":"2bc2fa4a8e57056222ec77491590a85a9d536d755d2786780ffa156c2f4b1481","src/shared/qos.rs":"0a9f83173195068a9e0a021eafa2d79964ceff2739b248842feeb707322f95ad","src/shared/rpc.rs":"eeec3424555f01232818fd381e772f1fd9694e04bdb26f90552c0bae9841ee1e","src/shared/rpcdce.rs":"ea3bba0248cd51c36dc3a8b4292e964cffdc94700f1230e04d5efc507d7fdd2d","src/shared/rpcndr.rs":"c91e74ab64d935c15b2712f1572c71db99d94036cd7796d543f5ccf730745ee7","src/shared/sspi.rs":"1f4b1e9751c620e0b8bb8c3ae83ce934c08ac4ab496dc424c0a67be8bb7185fd","src/shared/stralign.rs":"ec74ee5c0a62de19d823a0e48106cba3848d0c086e54806f64d786c821e67d21","src/shared/usb.rs":"4d58ece0cfc7263a09d57d716a07d846b202bb5cd720439a1f10a1454a9fa05e","src/shared/usbiodef.rs":"ecc1bc9aa8c45197457e1b0447e73813c3546c73ed9fa6edf141c62242dbbac4","src/shared/usbspec.rs":"5e11da75acb9f2246651fc6aa0d56fb06ed5fcafd72d2592c864fcc3b561cb6c","src/shared/windef.rs":"494d61edb7d8b1674bcfa3dad07a3bd98ced219e55d647af26c47505dc5b0f38","src/shared/windowsx.rs":"feca97a15762c381300db6dfa69630cef6c0bb6f4830fa3341be38ed5aee838e","src/shared/winerror.rs":"1ca025e81f40cc1263115d1efa037a0c4b80f2a67b9f473c6489a0725f5fa180","src/shared/winusbio.rs":"c1c6da5151682b1bdf0c8f3080258f8181ff4fb5470d586e2ec58e8825e33a36","src/shared/wnnc.rs":"274de0229564512d3217082bbd73dc3f2f64bbbe1dd441af16633d0f48d1ea3a","src/shared/ws2def.rs":"232950e7f313ba4d4e68a8c7816581913073daad348941734cf67a3815949736","src/shared/ws2ipdef.rs":"82ec54204d3dc9952c1285f3562621392a1aebd159f3cad6a2f817b99d5b44c0","src/shared/wtypes.rs":"0b4bc5dc98f65ec00fcdaa62c2efa6120839c801d806d7a5c5e0509495be76f2","src/shared/wtypesbase.rs":"595b91044a9b12d0fc53ed6f4b629521fa4a0f48940eda372076b0c34edf0011","src/um/audioclient.rs":"87423a9d08536b109ee8512c589c0c00ebc06e99c35ca2c67e22f3309d39be8e","src/um/audiosessiontypes.rs":"1b055c75524449f7b290c0dadb53518ffc19d1948b99e676c6be6c4146ba17e4","src/um/avrt.rs":"12eafc929b90f8b77cf01cefee9219324e43f25a2270bff1adad23f3572ea9ae","src/um/cfgmgr32.rs":"3fb021e02579bfd1180feac650c1ebee293020edd96c5bb7d56de689e79410dd","src/um/cguid.rs":"677e800cdc5fa8fc168dede555b1efd2a750052cafb7ab8276b4d568e1c01f21","src/um/combaseapi.rs":"7681eb93196f1bad57dd4ecebd09424fe17b2756b477b935265ce23a5441e86e","src/um/coml2api.rs":"9d2d9d211120d3ea584c3dabc4c30d3e238135b43de68136c1f371d39496656f","src/um/commapi.rs":"011e41c05decaec9aca1f80615261ad7b6298cb709c5dc6c5a7c9bf1731faffe","src/um/commctrl.rs":"64929a81f57331a467bc5c7b0b930bd04b0b6152a4e2cceeb1812964f957a65f","src/um/commdlg.rs":"048a22d8d8c11c9eb83a1532b341afe3f48594c27d2c3f20cb530a8b795cdc5b","src/um/commoncontrols.rs":"5e6a8d450e8649d301d31e8ea10721fadc7c2a93757ef5d284977f17c18e5ed4","src/um/consoleapi.rs":"94c81d472d3b295b592f1d4f35fccbdda6e17890a05563d0974800a5432261cf","src/um/corsym.rs":"426c36e0b8d9bff003c8221b6bf97489ec705e4e30ea6bac7d5c0375d9cdbc55","src/um/d2d1.rs":"3484ef55281b7da84eb0e837f91a0cafeb0c63acb0360e56dded4428a319a313","src/um/d2d1_1.rs":"fd1c1be2d1aa199232e2c1d1a00c9eb3ef607382aeb46e637692bf73dff9b37f","src/um/d2d1_2.rs":"c65a1edc4f0f9137345cc015829c80adff1a4b9566a7d32eec11cc02521fc69c","src/um/d2d1effectauthor.rs":"6007bed09c98044c8a19e74aec6d55d36a43d546ee5267e0b06661ea1269eea4","src/um/d2d1effects.rs":"7690360c6a0f4749aec71a602b0b3e905b9f8ecfce47a9ab4d7f1e12e0ec8327","src/um/d2d1effects_1.rs":"ea08450655b94679d41f263dc083df1ff6ca8437f8e796c8d79a513d6e110da9","src/um/d2d1effects_2.rs":"49477c515fa8fadbc6e3eccd5ba2cb7c85c4eb1d228a2bced08c32535614cf4b","src/um/d2dbasetypes.rs":"616f9edf34d828f7141bf416c97565f96c05743070870e4d4d90c172107a17aa","src/um/d3d.rs":"330569cb4fb4ec02d1d5dd2532071ecc7abe52b9a3e4e584a16506a4345ad28b","src/um/d3d10.rs":"fb1f897edf2183baca997e630273f37cab944d665185e49bcca188576bba97ba","src/um/d3d10_1.rs":"928b097741a4fe136a5dde080f1c017b57ab220051f37596f390b82b2ab31125","src/um/d3d10_1shader.rs":"fe44c5fe7dae6a306e146904a1887d7d6475e324616a773210c73189fd6628ff","src/um/d3d10effect.rs":"e80e7e03c73f3d75351ec4702202d47b4923f5157eae7cd0032b984b0f3b70d8","src/um/d3d10misc.rs":"e6c5ea73e6bebf870364eae9dd21c58c98d51121b00241e8cabf4a54d0801d0d","src/um/d3d10sdklayers.rs":"b8dc7f1cffc609129f468d8e09f104127ab9cd14c1e960fe8bf081efaace89df","src/um/d3d10shader.rs":"aeac67df2bc3030b78b520270edbdf7c88868e0b69cdb7dd568dd34d4b53ee95","src/um/d3d11.rs":"1dc3738a714316883b65494e2f9d5f6ffcf7613d16207dbe2da4043fb84dda9e","src/um/d3d11_1.rs":"a600581bcbb15784eddeff5bab4b19a00dc5745d5aa939aeedc4bb48fa8c7659","src/um/d3d11_2.rs":"c530723f9267b44f25c1cf903d633a3440cab763b22b2bc18c9695f37c304880","src/um/d3d11_3.rs":"f5d9fa55a43e19fe3586a3e9238103c58e5fd34c6e7ccdc1a05cf9fd18c1b025","src/um/d3d11_4.rs":"e770c8058d7120dc5c49244df8b53c5bd4fd2b2614c33402eeb91dc90511c0fe","src/um/d3d11on12.rs":"6d5fce57d92cbb200527af592925865d88433b78504ec4c6b5a43b9f8ec9fdf6","src/um/d3d11sdklayers.rs":"67363313d1435f6d143f986071d74a48399f9578807fc5a3238ae58a2051a0e1","src/um/d3d11shader.rs":"08c2179817999cba7da419ffc04b5cc431589f4bf5c7d9bb8e9301f063e4c38b","src/um/d3d12.rs":"54446d8b3b61428c28319a615411da45825d70409d8292103d511aeb65ac1f2e","src/um/d3d12sdklayers.rs":"f9436bab026a6193df5cca63288e5cba4f5e1cee210ea44905b0be0f30241d5c","src/um/d3d12shader.rs":"5fa55c73c12ec83de58519e7aa1bfe6375868b698ed1b83c380403f550c719fe","src/um/d3dcommon.rs":"7cf2b64bd954e1f93f7e3a5bfb8fa05902ea9cef1ad401e41e16ee841631fbf2","src/um/d3dcompiler.rs":"5fa5f430d07cff934e47b173c976c6c7a1e5dddec243003a220c7608c747461e","src/um/d3dcsx.rs":"1a859c5ecff97c768cec6b07f380b7d95461a841028f549a83b6878403125521","src/um/d3dx10core.rs":"693dafd6755452d282d4f2739b0ca23f7ef4c91c7ded1a422e81dc9f45910781","src/um/d3dx10math.rs":"eb45ac39eac6459eef2942eb652e7b7876b7c9a3593a43d81e7a3ae929d468fe","src/um/d3dx10mesh.rs":"ed4e70afa27dda8ebdf7b69692f639b6c86d9121cbf0cf80fd7b4b0fbb6a8938","src/um/datetimeapi.rs":"e280d15f02b260e0b6c3ccea3ee2f989ef93bc954a098c66903c4ce8a5f0ad92","src/um/davclnt.rs":"e282bbf42babaed01e6bdb0f20ea3ddb59395b594da5f70b6d61706756d86c09","src/um/dbghelp.rs":"0802044ac232f3f3b6eda5d4922ac9959190ecbf014dac00b301fd5a332aae26","src/um/dcommon.rs":"ecece66b2675dd1d63aa8c27e5299bd0ec4cf4271bcdf531661987c98dd60f14","src/um/dcomp.rs":"3a8daf77acfc5c615ddd11f2c2b83795136ace427ae586a817bfb7af087229ec","src/um/dcompanimation.rs":"5eebf243c1988e282b13e3edf615622b359b045dbb8dcc49df3e44b3b3405258","src/um/dde.rs":"ac010bf6cc6c3c72b2e13f5c62aeabd1c5ff0fa087babafa3323f01b5719b1de","src/um/ddraw.rs":"d9485ed844c2b4576bf5ef91ac4d012e505032559434f6e71f94fb856a979d9c","src/um/ddrawi.rs":"3b5db96b3cc668261223fd57e033a6d65f02ef1c7120faa76a365212529cb693","src/um/ddrawint.rs":"4de466a4f12d11c8a5463bc045a78cd9bdcae6ac71c5a200cc97e9618bec5d67","src/um/debugapi.rs":"2fc48ef68740503afd7411e2a58ae7e27691ee7a8e7fc5de96b17693ca7c82f1","src/um/dinput.rs":"5d61e3dd3e3743ea31fc594518733a114c5f1e3ac1eebd61b5f0282d63cc5456","src/um/dmksctl.rs":"8b7f64a5f1320168a9e047af93b8e4608b3c8ad985e60287c0d1a3f8f68e39f0","src/um/dmusicc.rs":"c04ebba40f56a73f357371980dca6ddca5ec3ed5b7ab99ddc4ea3a5cddb85fab","src/um/docobj.rs":"9d5e9d2e365d4ff4b73f50c812c39ff432ac742de0c7b7a3c660411bc77c67c2","src/um/documenttarget.rs":"1ce701a5ad7a0a62f3f65059d6f53e231ccf303d1600b5ecd469a84ff8ca283c","src/um/dpa_dsa.rs":"d8e2a95660e517d487250c7200d6309667177799dea5173b3f72fdffa134824a","src/um/dpapi.rs":"d905df74cebad05b55cd649d0e7cd991dcaca417d98f455470077708253cbbfb","src/um/dsgetdc.rs":"10a39c907d4f14fb26c6e243905ee9ae3ec4cf13e70214cbdae5747f95a9e1c7","src/um/dsound.rs":"a0863c647b60423b87afdb11cf660cce27223c836d15e15109d46ce6e861fade","src/um/dsrole.rs":"14fbdc0d01d63bd95422300cda3a03a633b5fc04e2624e02a93afcc9024eb8a1","src/um/dvp.rs":"d1eb0e0ba08a455d65563e687753795118ce535727d61175703c435e91e6f4bd","src/um/dwmapi.rs":"6ed0491bebbfaa0e6803b6254e089ca40dade9b0dfae1fe33b95f68a356787e1","src/um/dwrite.rs":"70323c9959272610426ed5494531e0340a2e6be2867f7bc236b12729846ac6a2","src/um/dwrite_1.rs":"e3bc9ff0edae57e8bb46c2a4a66428777709638dbb921d468143e61dac42344b","src/um/dwrite_2.rs":"18fc9de6626b5f0cf47cf5ae31eb65e63ecf158e714bb1079dbe3bd87cc30e11","src/um/dwrite_3.rs":"d68a9ba403102c0b0a1acf16f9239589a2dd02779c0312a3b7e044635a3b17e9","src/um/dxdiag.rs":"6e02c1a1b174b774f2d02cc0007b240ecbb551159c7221a81780db05caba9af2","src/um/dxfile.rs":"97a87d87ceff6c8aa2c1624c3ee891a7adc0914e1b0750d3df05ace6d20eeccc","src/um/dxgidebug.rs":"4bafaf969b3a7d11719aad1ee57a49969b89ade8bf0fcefb71c0b819a1b5eb17","src/um/errhandlingapi.rs":"5336cf6d97cd1278b783d861319a0521302788dd929b1dca0d8c404ac3bb4346","src/um/fibersapi.rs":"2240d53df44c605e09cc7b36c91ffe860c5af0bf834943aec3c6879564711205","src/um/fileapi.rs":"0a15a65add51284cb32f4ae09c5eb37b651b47bcca29b0e2f2de371a05de9c4e","src/um/gl/gl.rs":"9add9a323d87613a4586f4c688599b864cbf3d862d3d70ed0c18dc0da041d8bf","src/um/gl/mod.rs":"3e3fb3789ce9bfe7692fe2939121f65887f71005d5b0b3b1775f131c9b69222f","src/um/handleapi.rs":"3c3ba7150e50fe603f0a1e14f67777a5ba2d7221a4b66ab1df84566dcb07eb81","src/um/heapapi.rs":"7284592bea7212d0554dc7ed63b0888786f2ae3af4df59ac1e4b697c85edb922","src/um/http.rs":"755e53f3ef8f7bd0f3cbbcd619ea303980688343451f3ca36df71cedf2dcd3d4","src/um/imm.rs":"ba17745657f2125dad047a80a4099b7c89e84eaf78daf38bf3ccc1ff4980275f","src/um/interlockedapi.rs":"e9d2e12f2a2076f4cf26e19ba29d871f3a652b1acfef44670c05be7255103d2c","src/um/ioapiset.rs":"f4f99ecb0230020c6cf169e2bd987db085af8a6d25307d32196a0e08e5c6c66d","src/um/jobapi.rs":"e12153c40a82c3acb889d8b2f3d2ccf5cc1de40b2e4396d7e1bbff0d3594043f","src/um/jobapi2.rs":"5e919f05a84149b7dea9057a8d583b5c35cda9fd36432675260cd15c65ab5be9","src/um/knownfolders.rs":"02de8af90f560227c1cf1067efe1c40b4c7f308f02dda427651bd6fe29ffe511","src/um/ktmw32.rs":"43a6387979a79ac365667e73b9659d6ce608bc4440cc23aec5748fd2bf3af646","src/um/libloaderapi.rs":"130ff661c6ec51c16c4e5ac4111f01732d4767e5f9f9a286339d885742e1d3c1","src/um/lmaccess.rs":"03a4c77c728600d00edca52cfb35d4acfce6aa83c19fd64ce8a57de7dff6c66e","src/um/lmalert.rs":"f4510d6a8524f1950979500cee86aded86a46afb5249cb227e99a61b79f9d1d6","src/um/lmapibuf.rs":"3e761bb15d8c7e83683c1138624ce7606053ba6bc9077f4c2a87545d3efa56fd","src/um/lmat.rs":"fac23bdfcc071052de2fdb1e1cd6ac164cc4e35d502af709b3b634844f7ac449","src/um/lmdfs.rs":"228ab0745f456aa8e11a630014907eb124e1380377456701fa99353c763df4e8","src/um/lmerrlog.rs":"73d51724f07316ec0c8ace1febfdc0bd5958d637d253f79f36aa5331ec2bbbdf","src/um/lmjoin.rs":"9dafd3c9317c566e628824cb6d16d806fb95fff5813ced1948cea8882752832a","src/um/lmmsg.rs":"1b3566b3a1595dcdfb471304719af37f739b4223bc6c08744e3e7f7aaa14b597","src/um/lmremutl.rs":"4401f095e6db493b56ebc3fe2daa69317bd59e361bb71f1eb3cf6b672ba21cbe","src/um/lmrepl.rs":"4090bb897cdb9991c417e53850e333191527cea4d06258a497a3a5b1a448593f","src/um/lmserver.rs":"c1a123fb6ec29d743e4e7a42e9b28f450f2230234559592b6ea2b21709810e27","src/um/lmshare.rs":"13b15ba3eb252fe9e2a20d97b38849eb4b617a177cbc70c88d5ab210a031a58a","src/um/lmstats.rs":"3a114d58d9c564414421437285acab7f2262bcebb78517bb6e9b7b36c34ab36b","src/um/lmsvc.rs":"f3dce4607017e785c60142b55631a4f25854434fb9e50a11eb4dc37599e125cb","src/um/lmuse.rs":"6a3dbf4ebdef73dffed0dde131e52d7afcc2675e1537c01872dff43f6f5147ed","src/um/lmwksta.rs":"de6964159b6c08f0e5e57559653027cd210ddaeade7cad9e5e2af3dbc8c15835","src/um/lsalookup.rs":"cbf4a30d745de6416cce08bd04ed31a97572074629e6f2aa8bea8f2a25eb5d8d","src/um/memoryapi.rs":"ac65f2ea269607480e06921fa47fb3c64dce617c9f5f8cb97535dddd7b6e102f","src/um/minschannel.rs":"f6347c502f6eea1ee9be303a815624c063a870969db7ac0cdea3dfd2db69046a","src/um/minwinbase.rs":"5fcd41e829d173f88ec960ce2982af3b92baa5b9e2d5cb8f1f41371a9ad0c932","src/um/mmdeviceapi.rs":"a2879ff838d85b277a34cfc76aa9d83a3d235371db6254e712ffb1d67e8d6c13","src/um/mmeapi.rs":"955a2d66ff240db263be0b9054b27897228f6997e61c8daa2b701bc977d288d6","src/um/mmsystem.rs":"049c06631f376fa7faeb7bd480b9a13ed2e9b73d7793b265d87e7efb2fda02e7","src/um/mod.rs":"f495f2487f1a81560d3d2b05a315e0f3fc66ab6fdcaa144ecb7aedd8b7e5d9ad","src/um/msaatext.rs":"f7a04ed96e0767a435856bb84bb835ef31617a30e49a6157e4a51c99dccecaea","src/um/mscat.rs":"c3ceae9899811610a4b2f15a80eb2e41eae566262d26ad6c68f2f95d1785a1a2","src/um/mssip.rs":"0ec2cda4bc2cb2cc1c6ca83ff0a63ee6c85b731f6b90206909a3473c9084e79c","src/um/namedpipeapi.rs":"776f9b8b3310810bd6c22d9c2e68604fb2a196f787666f7b2a63833d96b0d134","src/um/namespaceapi.rs":"30c2a4e7b05c1426af95eb36216d9ac9c1219ee64f472b999286027a27a6e8fa","src/um/nb30.rs":"c16c9fceab92a52a5587a22760cbbff0b2bb8564dac1f9528f51eced3fcb8b69","src/um/ncrypt.rs":"d3efcc1526a29e14ad14dd114a64c848a3cadb948ecb138707b8f2c5528ef742","src/um/ntsecapi.rs":"902a284c7560d3688364d6e5d7eae4693eeb4c5d6a82b57974b54caa7957759d","src/um/oaidl.rs":"21e15244d1ca7afbe427b8f80839db1e1820363f03a367c8c60f40e173a8a6fc","src/um/objbase.rs":"17297f27028765c3e40c5b47a83cbb083723259956a064344e2b681816c65d87","src/um/objidl.rs":"4ebe979aa0a42aa5b4dcf5d10c4d684b10e546ef039c5094db984b897117bf0c","src/um/objidlbase.rs":"3cb828436c7603301886a5c97a32547ae4fb787df40e5ecb79e40a01e75b3648","src/um/ocidl.rs":"f1b42dc297b6e267c5411f92b626072e4f4efb8de2b6b53054f6aaf15938874b","src/um/oleauto.rs":"bae109c6c013f5d3a62c553b43e0cbe3ba6906946927d5f497124df94e03e726","src/um/olectl.rs":"29ca0c1151fb7e19eee5839ad0960a052bbe94c770299ab1f2ca72bd518b2cd5","src/um/pdh.rs":"086285ae0108b0cf43223352222f2c85437bc44d59acc6f515ecc9e44d561fb7","src/um/playsoundapi.rs":"1b20c049d6c6762c7ad046131c4f2ff7038112149ca43ab95c63c149f6f84639","src/um/powerbase.rs":"6e3409c14abd9827439c736907b8a172f405181a6f803233dd260d12dc3ecc33","src/um/powersetting.rs":"a80e15926ace650cfbe28e294545a00672b6e3ab3d4c04d54dbec8a8f54bab1d","src/um/powrprof.rs":"41f649be8d3b449e8bcc0dd50704d4b2b62d26cf821b609c198673974528cbb0","src/um/processenv.rs":"82d4d1d41b2254da608703a060f641a2ee08a43ededdad827137285bac68c549","src/um/processsnapshot.rs":"3772c245b6196e192c5bbb47f6ed336b4eee64af07b7adc28b942263f084567d","src/um/processthreadsapi.rs":"04284a25b963e708b7d55394e765d724c8d466a92647e726047fe36756d72363","src/um/processtopologyapi.rs":"e01d180d97b07885a034d2bd0286c38bee0e7f74452b786495a498f9145ba410","src/um/profileapi.rs":"8e2b70fff8d54996afa70dbff1d0feea56bf0ae6c3c872eeb76a08d5317d0a06","src/um/propidl.rs":"7595aa6e58ed166b21f550ebbe7b50cc45f847cd4d5685cf2c72492137c987c0","src/um/propkeydef.rs":"a96c903b81af6155ab032aaf1629e5f74dffb1567b38428c5da0c15456b26117","src/um/propsys.rs":"092d119997a4febbbe8ea3985230d05aa209c3e21a37c4ec88a6b448ecfa654f","src/um/prsht.rs":"e8171b46042b169095c6ab2f6ef0fc34c9912e6d53fdddfd083c2dbc80296436","src/um/psapi.rs":"242ad484c2d2c178bbc37e806c5e077c5dff6e6ed7ac1fd9cc196e3c9003aef0","src/um/realtimeapiset.rs":"9411d06bbbab05eb9700bda4dfd7355b34fe834d4616812d81bde24107a4d0ec","src/um/reason.rs":"d03dea55f23a29fcd2bc76202ddee5d42860f591830294d296fde52c05086ca5","src/um/restrictederrorinfo.rs":"b9db66ace1034701632037cc2a8466e5f7206724d5674decbdb4b952f8b15beb","src/um/rmxfguid.rs":"7a683ff98d3eaaacf4746c2f4cd1b97cca4a025d6060d24ea4ad0c4b12a31edb","src/um/sapi.rs":"cdb2d4394a1668393a61a910c24bdf0c8b77b4bb0a736d3a9ce3d9a52cc61df7","src/um/sapi51.rs":"64ee2af4d66e5095e7609349b58eea61c77e6e2aa75e2eff2c1c4e630b74a87b","src/um/sapi53.rs":"48849e3e0bab4d186c5cda86d3aa029543da5c5390fc981147310a9c4949fa81","src/um/sapiddk.rs":"ccd29c6ef0acd5a824b4958a6c8a66c57b2706681ef545fffba0dd6d2babad14","src/um/sapiddk51.rs":"362133f09f6f02c53401de2216de549f9944c96c6f0dd51845c4eceda32e2f36","src/um/schannel.rs":"9ba7437b82cbac1fe6ad0dc82ef58b1ec3484bbbaeac5b4a2fe12f56c46e5d13","src/um/securityappcontainer.rs":"933038334262d99c3f8f4160358758f16acdce8b95387f8fea449ce7749cd940","src/um/securitybaseapi.rs":"a13bc78058b10a2e7ba17d951a0bce7eca00a6db621f698aad3dcdaa058eac6b","src/um/servprov.rs":"7edf50368c727efde70880ec230c7a8fde4afc2cfb3c2893a2c4d1ba319627b8","src/um/setupapi.rs":"8eb251d72e9ab6785d99e26f82dd28e65076b83ff06d0821941c7da341b4398a","src/um/shellapi.rs":"64afe5917386ad4cad0b80eeaf37b1e9d8b5bfc21619f7b0e28430a3ad8d4b22","src/um/shellscalingapi.rs":"2cded3fba4480871733ba141b0a1a790e883d77e9f144ea34135215c89a40cf8","src/um/shlobj.rs":"bd604c083a0e8331049f9ac1200a03cffa2744d63d9d470c4aa94400482d4d44","src/um/shobjidl.rs":"1dbf4ea1d5469bc80702e28149a6ce200824b69169edb9ae0cc6ad05de6d536e","src/um/shobjidl_core.rs":"2b39f725c06dc44b4704f7a8cb10eef63636c13e811e114f19a667465150af34","src/um/shtypes.rs":"1f81638cc9eebd19b0023d7d07d95cabf5236029b03212516c04d1ea98205e76","src/um/spapidef.rs":"575b0632cb7ef628cf86130936c31f8a35c6f6269fb57d2a4cbd5bcdef539a1c","src/um/sporder.rs":"64d365a773a864fbf6789ff8156214ed669baee6b3cd90819c2d2b36324248a1","src/um/sql.rs":"abff2a2fb5f08be9f565eb03a65244043720348829f04b98656a89686e807216","src/um/sqlext.rs":"9545e0390ffde6ab4a620e0800265b399144cd4fc8bd94258041c1af9375573a","src/um/sqltypes.rs":"77c6c920023498820e51ede76942e9628c544a6024cfce5ea484b8995e664ba2","src/um/sqlucode.rs":"758a8e581fe6f0a960bef2a478a4047a494ee18995f1e7dfa34282ee2b0d18f5","src/um/sspi.rs":"0855fd38942aef19f613702506329c8103df99721b5e1bf6d508434a7cc24920","src/um/stringapiset.rs":"585f3051bec63cd82909b7edc10c76bb7bf92596c90f33792de28eabbe57ca8f","src/um/strmif.rs":"302d470618e6e5225c5168838228ba9773295e87c8864d6ad2c148cf28c7c3ed","src/um/subauth.rs":"203278f313af5f60dd6eef4cb3475988d16197521baf61882892ecd5b13c05da","src/um/synchapi.rs":"a53963ba8b51b2b8ac91039d91b7f5879b900910f913cf879e31177ead04039c","src/um/sysinfoapi.rs":"37ea5a4b3b120da417d2e1585210cdfd09b1280c3b546e3d53bd2975cbb5a4f8","src/um/systemtopologyapi.rs":"362c015c1799605fb5bcd28de53357805206f6fd4a4eb713e1c0bbc61d11ddba","src/um/textstor.rs":"3c2980ae947ea25a8299f7bc670ca73ec3c9a13a3ab7884c96b55575113d28c7","src/um/threadpoolapiset.rs":"0a96fd29497b2ece591d5a65a74a70ec40b444bf6e128fed8a03041460ea699a","src/um/threadpoollegacyapiset.rs":"d63f2aa225ba0587b567af78eb2b5a8a196f6ab878d97f9b022968cfba5e9141","src/um/timeapi.rs":"8c493994fb39f8e22f951b12d4b03d6287597b640150d5e605dc3b51a3237db9","src/um/timezoneapi.rs":"6cfb38964a156f77a94c51380a3c0e986c39aee3e0f85c1c773a34bf057147f4","src/um/tlhelp32.rs":"bf881357245abd5d164720d235efbcdc8cb700cc3ee924f324acc027baedd586","src/um/unknwnbase.rs":"071fc08d973b4167b5350bc73d28af7f872f803973c0ef10db2075c9980006ef","src/um/urlhist.rs":"d3cab3bd881fd21ac2b07066e30abb5e4733c700159ed3611846e2d4cbc324a3","src/um/urlmon.rs":"c56f1f5af41e8ee7c7c02f553327b2e5ac39f3abc2f7dc44c0cedbbe6fbfaa3f","src/um/userenv.rs":"144f129dc824a7d3f4e1586734b866e02e163bedbc357724e0e18f435e78501a","src/um/usp10.rs":"38abde24499aacdc229ec9581dc9000dc1bfb4f566b9c5b535adabc2b86300f0","src/um/utilapiset.rs":"f02a26c4a3c908bb0c80ffb29a667dc66b7b9ffa29d48ef190dbeda03a0cd78a","src/um/vsbackup.rs":"2181be0a43723a4cd1b0532ddf86bac784ddc4365aba17e6888e6fb8958b11ac","src/um/vss.rs":"a1f80c29d7099fa5fb588144908eaa4fa47e7311d1feca84e2fbf4bd64d11418","src/um/vsserror.rs":"1b43c769bc7377405ad286e0fa1442e02d0d7ee025ea949a04161653499d24fb","src/um/vswriter.rs":"4578dd1e785eac6324779507ab10307a6e8558a44b1980eb925df0419f7552a8","src/um/werapi.rs":"4e3563a6da5fccb6b05fb9ea4b01a50f2444d8290056e30ef040917079cfed00","src/um/winbase.rs":"8edaae2ec6a90e2ff819c93bff448062682e6c73772553fb88e8e00df5c02982","src/um/wincodec.rs":"fedaf0ef57edf6ddb207f4a9b5bad46b8129a78e2d37b8e80173adac65765f22","src/um/wincodecsdk.rs":"0e3215ea2347925b09412e631aacf4e071a451ff0999af0cb9d03cfd113e8f77","src/um/wincon.rs":"9aef7bf262c9b9ed0ec85e6ca97c25327d8f97df04d83aea5d8c9ae4b6d50604","src/um/wincred.rs":"cfd063771336399d8e7ea93104de3d38ec12799260d7b3407fbd5e1079c2c81c","src/um/wincrypt.rs":"31bc3b6213957fb1371c732d4453cc342fa1a4ab94553e432b147448b1e4899c","src/um/windowsceip.rs":"cfc2062daac6a9195690af64bd817fb41f086206c5091539da29d6e51a3a00c6","src/um/winevt.rs":"29f85bb49424efa7ac921cb10f2da4b77e4cfe863ca2fe17026137dc5dc2ca8d","src/um/wingdi.rs":"7f49f8a2a743d2de6a37c8f4708e265f0fb64b76479a22d342865db192e6724c","src/um/winhttp.rs":"f163b3b7ef893b6d769fd3886bba182972dd886674af382174ad0c96c774f54e","src/um/wininet.rs":"c96ff6e03d1602b50422ab2847f28c6e4ab80bb3f992d2e6a4e87c20ee17d83d","src/um/winineti.rs":"8624f54b40da0ceb7949b43f8eb54e3e07ca59f5b805328de2b9aa030adb341d","src/um/winioctl.rs":"df6248eea7c4cf1c023e9e14f1ac519f986a3392c586d51155588e465ef16557","src/um/winnetwk.rs":"bf3c503f6e6d99d8640d66102679522ffda0ac918022f0873dae8bf3fb837ba0","src/um/winnls.rs":"89ee897be3c6a7a9452082d797f2c71139112f8a7534b375cb8d34c6befde6a5","src/um/winnt.rs":"ed301efeb6cb025f6cb2fcc97420c7b8de58fb1984a907a3575fffdada25b355","src/um/winreg.rs":"d6f3af7e598140a4aca605b9b9a431e608d4b2aa0c795db8345e1c10446710c6","src/um/winscard.rs":"0fe23a54544c530838774f7c03708b2d375a3678fbf2f0390e6abddd128a3f33","src/um/winsmcrd.rs":"328de1e80ae94550590f11e000734d463b311190022953a770ae32dad365105b","src/um/winsock2.rs":"3ecedee15dae16920c39b880f32d5d39686651e6b232496c8e10cd32ce9aa81f","src/um/winspool.rs":"8ca9532933aa6bb35a1fa3ec7609a12bd5db82fde49fdd6f1d9aea61479df131","src/um/winsvc.rs":"2768d8886b149ca8ef00a247e04f8da3b089cc71250d575bac8584f5546a534c","src/um/winusb.rs":"6e223e0916aaac8ce08ae21c328c38c042f193aefbd3ee56b325a467c9941da0","src/um/winuser.rs":"59a5b59f761e0f17dd959dff8fa7b6889ab5f189dfb980be1178b72a6016f32a","src/um/winver.rs":"c0437e334c919489b02c7e14e0aedf64ece4ef1ad80569cc99f4e126c8c8d287","src/um/wow64apiset.rs":"42f0fbea817164c78133c014821486f2e312fcb79060f922435a60fdebfb07f3","src/um/ws2spi.rs":"79a2cceb67b4e632ee890000d8e2c00f2d578ab895af6d80d5df96883136ece9","src/um/ws2tcpip.rs":"ec7d0af8a43fb608e827e52b98937339359ffb9fdd47dcf5f9f3c4c086145527","src/um/xinput.rs":"5e55915c432e4b8de8cf489d35d774e9f3e259cfd3bbd9a09e3271cd78a2e00a","src/vc/excpt.rs":"c1000ba67ad7dc36a00433dadcc20633fba6b1a7306fb1e59e60a32369fe22d0","src/vc/limits.rs":"1421607eee3fd422ed26d8d764b09de271791f5223909c757ac53ed3a69dee4a","src/vc/mod.rs":"cb61848f0bcee5c96ebf2a6c3a69eebc31d84d29c108b0664d104f9c040e3aa2","src/vc/vadefs.rs":"3dc2f47dc3db9f6ff0e3c5ce5dc1487b031094240cb00d8ff194e333c959492e","src/vc/vcruntime.rs":"a9e21c05716dbbfeed5a17918e7b742103a80ca9923fcda3871859c0e863606e","src/winrt/activation.rs":"d3839c4c9f9fed955e64d87ee7e43a0e56b9a225061c2342350387e696ca771e","src/winrt/hstring.rs":"a1cfcb0e752360f56145382bd850938df4c63d00da9d0f1608bd104e2cba5bae","src/winrt/inspectable.rs":"7252d0813a1f3f734a8cb7134a6bf1a91518966bca3f57a35fbb3c447b513a9f","src/winrt/mod.rs":"13530a7c2b7bebc529d2c12666551d0fe4d30f0f653eedc9f38ddc833daea05f","src/winrt/roapi.rs":"0959be9cd87aefc2edd56a78201e332c535ddd36b3b93ef9668b8904d50f3909","src/winrt/robuffer.rs":"6c974c04c3c20784058753d8a4d6a640bd2f2d52f644249ffaed6886e12ec241","src/winrt/roerrorapi.rs":"90c1e113dc54121a72957b9b64dc3592eb688fc91015a03a04edffad4e62813e","src/winrt/winstring.rs":"a3875b317bd598040f98deb4838f5dbfb38b40f3eac0d450debc9084971f1386"},"package":"04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3"}
\ No newline at end of file
+{"files":{".cargo_vcs_info.json":"1131534d7c50bd6fd26d898a7c15f0bd76ce9f1b1bf82a3fb104d54ee542d690","Cargo.toml":"8fe71fe24e0871d8f8d9017437a62294a5bc15af0c7b91f329e45c24f559f5c6","LICENSE-APACHE":"b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1","LICENSE-MIT":"ce7bc3499fee93d5022ef430d5e4201e79a6d9154f3974e42f41349f0569e09b","README.md":"2e56258b8dc251147ea20d320a1dfa742ee82bf0c77343ee1486d1f7293d9433","build.rs":"30fde3f2ead4646ad9c01932a55f7c208d2443e91d7c819ef69bc25b7ef62d85","src/lib.rs":"901d757f46ebc728d06357106ddb5ada2c7baba97b3d44d5808b3bbde75cc6de","src/macros.rs":"f862510f303c9ee3477e16b770e17f5efaff3d81140dcf9c5641c1807c39946f","src/shared/basetsd.rs":"99856b585ba67a0e1cc0c6ce6f4a1ce3d43a47974bcfa9341ac7fbe0d3f66a0b","src/shared/bcrypt.rs":"c4af763c7ab609d00a5c0131dbeeaf81363320f7872f7f978c96e46e5709f963","src/shared/bugcodes.rs":"17ce3b68a8110846a4ce1ec1447944e44ba8e852098714176dfde8cb55d8c3b3","src/shared/cderr.rs":"23fafc514089bc50fa7dd7843a21c3ac3bf956f20430177eac2adabdff1dc47a","src/shared/cfg.rs":"8863b6a485e99956c03ebd5b921890877d059d2260db786aebeefb09b69b5409","src/shared/d3d9.rs":"1ce6dbea9705f5f5523d0a77fb7fd18915957ad4b0c1a0d8fe8850f895770516","src/shared/d3d9caps.rs":"191d7e6a120049eb510f268b178a192ac26b851373e7e9d5dee06112eaa7532f","src/shared/d3d9types.rs":"025fe770e98576054cd75c83cc6929a832831ab50a5768bd3420572a6de23f2e","src/shared/dcomptypes.rs":"24105520e49bff0249a7ce9a77a7cb9776f4a3977019ecc915d09a2fe187411a","src/shared/devguid.rs":"c7306502b0a9b7cf74382b85d87cb010356088b163a62cd19af3e8371ea315e7","src/shared/devpkey.rs":"df9d46b1494754f3b48d62866af443cd9f7b49409fa7ccc749a011d66346df9d","src/shared/devpropdef.rs":"b30c0e0984dc72e35223754cceb81a433fb21847d1a99ef7580c691e7c46c1e0","src/shared/dinputd.rs":"d3b6509875f1b65326faa59ec301ffba275d5c2ba7932937cbc388feecca6355","src/shared/dxgi.rs":"3ff787b1e9634b7c3ca2aefc82414596546d636c70499df0b0a35d2678c2f00f","src/shared/dxgi1_2.rs":"9bf580c31bca78c477a9d4f0ab7a94422150c8fefa4e55426e33d8d89b17c276","src/shared/dxgi1_3.rs":"ef50aec5663a85ba947cf660a2658d521e09fcbf60a57bf048341103a431767d","src/shared/dxgi1_4.rs":"459751cc2b5778571cb6d50a754fec88c29f6423a9d96d008c018330e1b51338","src/shared/dxgi1_5.rs":"2a4791a15eb6110ae17c454f9d24ce4607db893b1494b0e740d1aa65f1bdc483","src/shared/dxgi1_6.rs":"9e18900b36725b353a6ca20c6cea8892b31c85613ae6e22eef233ee1d4ba7198","src/shared/dxgiformat.rs":"2052f3be936634aca5eb969fe53b9b24ce49e4a20d10ae20db5b4290d53d1bcc","src/shared/dxgitype.rs":"38d402cbf838ac6a27c5ecf03c7527400c7736e1756d11398533f570db0a4d1a","src/shared/evntprov.rs":"d9fcf3cf701abd9839aa6b45a567912b0154b2e9cc1397380ac0c0e4e76f180e","src/shared/evntrace.rs":"158f489ec7b2130f5f01351cb2ba8f497345196c793e6caad37236085dc50833","src/shared/guiddef.rs":"66aaf8c071b578d0d8576c1cbe89b858d590dc5436ed3c47f17cdf4f2b73b9f5","src/shared/hidclass.rs":"374185e80183ff79a3c0797daeca3af94f4e2bacb579ad79ba60bec5d76215ab","src/shared/hidpi.rs":"9b4d6b5cb4c198c5d47b233a8e896acd04a42fcf37f632999970ed0850f2b8f4","src/shared/hidsdi.rs":"206ac6152e920628398f2d0f3e3778007ac421a8ed09b85aabe1fb6712d7b0d4","src/shared/hidusage.rs":"7133890999bd672ad502a8f1d87c347a3e3f7624480fad7101f3b83322d6208c","src/shared/in6addr.rs":"927dacfbe1b76450673771f7f1c43cb7fe8c7cf3b808bf448b5d1a3c50defb9d","src/shared/inaddr.rs":"5162a678484065a012447b5e9182ef3b297e9f0e2f10c3fcef52d3fc77b72e7f","src/shared/intsafe.rs":"d0730302935824a06be422274f9018d5a4f9c7753f7d7a8b81489efc0e8afd70","src/shared/ks.rs":"8a2b5b4415f217e62ec9e3c735b06dc39b91ca254d385ab1ae3999ebc93aa092","src/shared/ksmedia.rs":"91ed284e2bc794543d94d0508a57edbab9b9a1e514ffd8df903999340c6b0e3c","src/shared/ktmtypes.rs":"bbdaa6b33b732e3d162cf248f6c6a95a99301091bf29eec51126411c2bed5621","src/shared/lmcons.rs":"0d1efca38ea4e7f2a84b3309c27c453e4f1f87b1889443e39b27409616a04410","src/shared/minwindef.rs":"f33ad709f41e78e40113a1bb1b88a4abeafafcac88a1efd49e6ab55306bf0296","src/shared/mmreg.rs":"61de7fcf55ddb536aec4d7bfe2322d36f2e56ba6d9a8d84c35a96d034c919819","src/shared/mod.rs":"221f9a24eaa9d26998ac17953f5ea293180377ecf76bde35e129f09eb530d5a2","src/shared/mstcpip.rs":"58c41a8cf6c5f403fd0adad4e7a8a693978bd6c55b7c4f1b317a7d9f3f9e234e","src/shared/ntddscsi.rs":"e1e0e5161894deb1c791b639cc036faeb61d6308cb2e3a9577eb2c2902102d60","src/shared/ntddser.rs":"3c49b36f7928557453637a69736b80529dd02eea47149f419a2edff28db5711d","src/shared/ntdef.rs":"fc50df4331dfdc2c7622ee63d457e93c2f587f9e15d4da317c29363925970bde","src/shared/ntstatus.rs":"2bc2fa4a8e57056222ec77491590a85a9d536d755d2786780ffa156c2f4b1481","src/shared/qos.rs":"0a9f83173195068a9e0a021eafa2d79964ceff2739b248842feeb707322f95ad","src/shared/rpc.rs":"c1c7777e17d02791b49533aa33b712323cb97ded0395c345730971372fa10769","src/shared/rpcdce.rs":"a8ea45131b63d115b3628218a3812dcecdc52e1b8635285bcf99b7418054d7ca","src/shared/rpcndr.rs":"c91e74ab64d935c15b2712f1572c71db99d94036cd7796d543f5ccf730745ee7","src/shared/sddl.rs":"8eea1b33e4f45db129850b9b44fd26aafae11cbce9eb2b7dcbbcb0c7128c7aa6","src/shared/sspi.rs":"96c156efe84906647d34ff0acb25cc0fc7b691a5d1e684f638c31075cd976911","src/shared/stralign.rs":"ec74ee5c0a62de19d823a0e48106cba3848d0c086e54806f64d786c821e67d21","src/shared/transportsettingcommon.rs":"ad62b70f178b3c0525a5da5f18322326b12be812aecb3c75e03232eca4f2e077","src/shared/tvout.rs":"e30c0876a2ed1a91a533e7361f22175023864bd4d4b543bf92093ae758b07ca3","src/shared/usb.rs":"4d58ece0cfc7263a09d57d716a07d846b202bb5cd720439a1f10a1454a9fa05e","src/shared/usbiodef.rs":"ecc1bc9aa8c45197457e1b0447e73813c3546c73ed9fa6edf141c62242dbbac4","src/shared/usbspec.rs":"5e11da75acb9f2246651fc6aa0d56fb06ed5fcafd72d2592c864fcc3b561cb6c","src/shared/windef.rs":"ac0ae42d0da6747e31e7fa2099a55470cea52403137090983ede1909d720d296","src/shared/windowsx.rs":"feca97a15762c381300db6dfa69630cef6c0bb6f4830fa3341be38ed5aee838e","src/shared/winerror.rs":"1ca025e81f40cc1263115d1efa037a0c4b80f2a67b9f473c6489a0725f5fa180","src/shared/winusbio.rs":"c1c6da5151682b1bdf0c8f3080258f8181ff4fb5470d586e2ec58e8825e33a36","src/shared/wmistr.rs":"828b13923db418743c1fc8f5e9cb1a148a77d4ee4e1f8680d420792c20be334d","src/shared/wnnc.rs":"795f937c8883b3cf653d7b7fc018ef0b54fd9a3d8b3f52f78e1b80881f4b2df0","src/shared/ws2def.rs":"eb2e953dbc086acd9f18f835ae994266c5d648637209d3ebf042165509c23d27","src/shared/ws2ipdef.rs":"2dc179c0018f1f6156343835ee2840a1a2d60afd59f62403f1070a9a776da9d4","src/shared/wtypes.rs":"6236e984a865e9e3727516be95f708075b9a913cee519bdb6bf9803254759217","src/shared/wtypesbase.rs":"595b91044a9b12d0fc53ed6f4b629521fa4a0f48940eda372076b0c34edf0011","src/um/accctrl.rs":"66aa0198be3e584c85ae7446c1d311a6669b36b24c98fc0e1206c46bc12f99a4","src/um/aclapi.rs":"3c0f53cb156a9a044d3636c436f4a908aab3ac15159b03cbbe662bde15cf0899","src/um/appmgmt.rs":"650dcf28cb56da23ed7e35f736901f7f6c628447ced712576e915e5df7aea03b","src/um/audioclient.rs":"87423a9d08536b109ee8512c589c0c00ebc06e99c35ca2c67e22f3309d39be8e","src/um/audiosessiontypes.rs":"1b055c75524449f7b290c0dadb53518ffc19d1948b99e676c6be6c4146ba17e4","src/um/avrt.rs":"12eafc929b90f8b77cf01cefee9219324e43f25a2270bff1adad23f3572ea9ae","src/um/bits.rs":"9c95cc5f7bf6f23aa8165e087f1a8e5ef77a2fcf67c46facdd46175d04f5ac0c","src/um/bits10_1.rs":"63652261494b61eda47b8ad992c81e3da4ded10a6ca3378f856261fe3ed63c36","src/um/bits1_5.rs":"b82341ec893ff71dc28dcf2bef9142e908c4a72562b011e2bef7301a3a93ca17","src/um/bits2_0.rs":"c083d84445bec03828b3917e3b28011bd52898bf53b513fb9a15a050d2273922","src/um/bits2_5.rs":"0a47843f067ddadf903099ce214f237872ddd51fac4f358a7252395ea4d1216b","src/um/bits3_0.rs":"19a4869afaaffba4673a151f2285246a0ae88728b6889a166c2c09f732b130b1","src/um/bits4_0.rs":"b9c7f4bc8a9988c689b0b0db71170792d0d41baa36b837192d910f841d71c794","src/um/bits5_0.rs":"b2877a2a3f03869a2431520f048be56eb80176fdf9de8c6e4b47214336b32492","src/um/bitscfg.rs":"68416d5d35b995c15681246a7cc673290b8b33902e6add688f870031fddff693","src/um/bitsmsg.rs":"06f7ad83542b30341f232bf6fc218001f6dacf5fec848314eddb9aece57db7d1","src/um/cfgmgr32.rs":"e36ac0925e6f47a6973f562240b9781330712fdbc0e34eb96dc34d47fbf908c7","src/um/cguid.rs":"677e800cdc5fa8fc168dede555b1efd2a750052cafb7ab8276b4d568e1c01f21","src/um/combaseapi.rs":"fb4274c3d31e77adea4e82ca48475a8f6cd3b20e8154eeb15fd73cc7ac1a77dd","src/um/coml2api.rs":"9d2d9d211120d3ea584c3dabc4c30d3e238135b43de68136c1f371d39496656f","src/um/commapi.rs":"1792eaa4f96fbdbd176eb54139688894e4f11d8a61f9896ed2e08e52b982fe03","src/um/commctrl.rs":"63cd191940875f56b733a0c2c35ac79e6392d649cae55e81a74043ba95a42c78","src/um/commdlg.rs":"c0bcdd429820a8e4c0cb4be1582c92ae94002395301afb7866b4a1ee38ecc803","src/um/commoncontrols.rs":"5e6a8d450e8649d301d31e8ea10721fadc7c2a93757ef5d284977f17c18e5ed4","src/um/consoleapi.rs":"94c81d472d3b295b592f1d4f35fccbdda6e17890a05563d0974800a5432261cf","src/um/corsym.rs":"3c9a63914a7497b46c6401cc012be2f2ff606a8f4df3b67efe623bf1c8e2f725","src/um/d2d1.rs":"3484ef55281b7da84eb0e837f91a0cafeb0c63acb0360e56dded4428a319a313","src/um/d2d1_1.rs":"3f9e39760eadc65af3ad220f15eec33559058afcca28e41b0d0a6e0e67c5b5cd","src/um/d2d1_2.rs":"c65a1edc4f0f9137345cc015829c80adff1a4b9566a7d32eec11cc02521fc69c","src/um/d2d1_3.rs":"ea1aafb7cdd1ad16c3612e975b4cc5ce64a2787f08cd0f716c85c2495c94fdf2","src/um/d2d1effectauthor.rs":"03461591cd2a20fc92a34313b5f9054293d4ea61c3563e33a7af5d2974cb0788","src/um/d2d1effects.rs":"7690360c6a0f4749aec71a602b0b3e905b9f8ecfce47a9ab4d7f1e12e0ec8327","src/um/d2d1effects_1.rs":"ea08450655b94679d41f263dc083df1ff6ca8437f8e796c8d79a513d6e110da9","src/um/d2d1effects_2.rs":"49477c515fa8fadbc6e3eccd5ba2cb7c85c4eb1d228a2bced08c32535614cf4b","src/um/d2d1svg.rs":"d1cc370b6304c20f8fd3321a6e6232c3bca05fcd8dc283ce3f3dc1d9434a4920","src/um/d2dbasetypes.rs":"ee2bceb96466aae77bff23b74d3daeca77a3335bda5ecc4e4c96a9375205a2ba","src/um/d3d.rs":"330569cb4fb4ec02d1d5dd2532071ecc7abe52b9a3e4e584a16506a4345ad28b","src/um/d3d10.rs":"fb1f897edf2183baca997e630273f37cab944d665185e49bcca188576bba97ba","src/um/d3d10_1.rs":"928b097741a4fe136a5dde080f1c017b57ab220051f37596f390b82b2ab31125","src/um/d3d10_1shader.rs":"fe44c5fe7dae6a306e146904a1887d7d6475e324616a773210c73189fd6628ff","src/um/d3d10effect.rs":"e80e7e03c73f3d75351ec4702202d47b4923f5157eae7cd0032b984b0f3b70d8","src/um/d3d10misc.rs":"e6c5ea73e6bebf870364eae9dd21c58c98d51121b00241e8cabf4a54d0801d0d","src/um/d3d10sdklayers.rs":"b8dc7f1cffc609129f468d8e09f104127ab9cd14c1e960fe8bf081efaace89df","src/um/d3d10shader.rs":"aeac67df2bc3030b78b520270edbdf7c88868e0b69cdb7dd568dd34d4b53ee95","src/um/d3d11.rs":"c0b817e41f97dbf5961f3a0c9c7b99edb8d8db0a34bcd82528ba791d74cfbc43","src/um/d3d11_1.rs":"6aa7a0a080e1b824efe3bd0e7e8f33d552e475c6536c7cfb515d604729c8e7e8","src/um/d3d11_2.rs":"0c85d56a5d8e1516484f8cfe03c253d60a8d5075e0b6bb34b0584e85215424f3","src/um/d3d11_3.rs":"f5d9fa55a43e19fe3586a3e9238103c58e5fd34c6e7ccdc1a05cf9fd18c1b025","src/um/d3d11_4.rs":"e770c8058d7120dc5c49244df8b53c5bd4fd2b2614c33402eeb91dc90511c0fe","src/um/d3d11on12.rs":"6d5fce57d92cbb200527af592925865d88433b78504ec4c6b5a43b9f8ec9fdf6","src/um/d3d11sdklayers.rs":"2fd441db12b58480fb3738bcbc615b1fdc9512c556aef1d2b3bb31cb99da30c6","src/um/d3d11shader.rs":"08c2179817999cba7da419ffc04b5cc431589f4bf5c7d9bb8e9301f063e4c38b","src/um/d3d11tokenizedprogramformat.rs":"b20d02f167b2ff4760568d4437db174ea26fd7e13faefab0ac5070c5dc50e186","src/um/d3d12.rs":"2f0477b8da4a996eca53f1c5f721f64ede016b8cc31bb1f56729470cb613ba27","src/um/d3d12sdklayers.rs":"f9436bab026a6193df5cca63288e5cba4f5e1cee210ea44905b0be0f30241d5c","src/um/d3d12shader.rs":"d939fb8ebd41f45fc0f317808c75af87435e56a628b9edb0d55d31db07761c6a","src/um/d3dcommon.rs":"e0f3c13f131d62f36c316bad020d5f0905f1bf7570da9fd68d080ee1d2f40446","src/um/d3dcompiler.rs":"5fa5f430d07cff934e47b173c976c6c7a1e5dddec243003a220c7608c747461e","src/um/d3dcsx.rs":"1a859c5ecff97c768cec6b07f380b7d95461a841028f549a83b6878403125521","src/um/d3dx10core.rs":"693dafd6755452d282d4f2739b0ca23f7ef4c91c7ded1a422e81dc9f45910781","src/um/d3dx10math.rs":"eb45ac39eac6459eef2942eb652e7b7876b7c9a3593a43d81e7a3ae929d468fe","src/um/d3dx10mesh.rs":"ed4e70afa27dda8ebdf7b69692f639b6c86d9121cbf0cf80fd7b4b0fbb6a8938","src/um/datetimeapi.rs":"e280d15f02b260e0b6c3ccea3ee2f989ef93bc954a098c66903c4ce8a5f0ad92","src/um/davclnt.rs":"e282bbf42babaed01e6bdb0f20ea3ddb59395b594da5f70b6d61706756d86c09","src/um/dbghelp.rs":"f5fc25d89a18cf12132fbd8922ecd081a3cd32961038805d39372cd789c37695","src/um/dbt.rs":"afd59a2fae9a8780367097a982b3e89c3180939338e40a9faeb5348cbb9520ce","src/um/dcommon.rs":"33803f74eb870fbbdaaa3201573154b5b294454ebe7acc92b010aae433afd0fe","src/um/dcomp.rs":"258ded4806208dc6ba071a5b30e50c4ff8be57cb7539400d35f5ff0b38ec1886","src/um/dcompanimation.rs":"7ba55595569f855e625237dbe3edaaf5aaaf0e91afced3aa7aeb2e5efd3b100e","src/um/dde.rs":"ac010bf6cc6c3c72b2e13f5c62aeabd1c5ff0fa087babafa3323f01b5719b1de","src/um/ddraw.rs":"d9485ed844c2b4576bf5ef91ac4d012e505032559434f6e71f94fb856a979d9c","src/um/ddrawi.rs":"3b5db96b3cc668261223fd57e033a6d65f02ef1c7120faa76a365212529cb693","src/um/ddrawint.rs":"4de466a4f12d11c8a5463bc045a78cd9bdcae6ac71c5a200cc97e9618bec5d67","src/um/debugapi.rs":"2fc48ef68740503afd7411e2a58ae7e27691ee7a8e7fc5de96b17693ca7c82f1","src/um/devicetopology.rs":"3b4ead355274636e2d0420e82bbbbb2f3b36c50b14f598e56db3a7e4ea221dbb","src/um/dinput.rs":"5d61e3dd3e3743ea31fc594518733a114c5f1e3ac1eebd61b5f0282d63cc5456","src/um/dmksctl.rs":"8b7f64a5f1320168a9e047af93b8e4608b3c8ad985e60287c0d1a3f8f68e39f0","src/um/dmusicc.rs":"c04ebba40f56a73f357371980dca6ddca5ec3ed5b7ab99ddc4ea3a5cddb85fab","src/um/docobj.rs":"e1d395c472657b154601cdf10665b51b46a0b24f3ae4b63a81a7f6350d30e335","src/um/documenttarget.rs":"1ce701a5ad7a0a62f3f65059d6f53e231ccf303d1600b5ecd469a84ff8ca283c","src/um/dpa_dsa.rs":"499700fc662dbc314338502db360d7d33014dc2e44f118096744e153f242ba89","src/um/dpapi.rs":"d905df74cebad05b55cd649d0e7cd991dcaca417d98f455470077708253cbbfb","src/um/dsgetdc.rs":"10a39c907d4f14fb26c6e243905ee9ae3ec4cf13e70214cbdae5747f95a9e1c7","src/um/dsound.rs":"e93f9a09be03eff437181204b577eca94fa0bdcd448018a18d2c0fdae38be85b","src/um/dsrole.rs":"14fbdc0d01d63bd95422300cda3a03a633b5fc04e2624e02a93afcc9024eb8a1","src/um/dvp.rs":"d1eb0e0ba08a455d65563e687753795118ce535727d61175703c435e91e6f4bd","src/um/dwmapi.rs":"f7200b10789fee50f5cd4ef40642db377ff97267b20c705c5a4e5038e7161a4c","src/um/dwrite.rs":"70323c9959272610426ed5494531e0340a2e6be2867f7bc236b12729846ac6a2","src/um/dwrite_1.rs":"e3bc9ff0edae57e8bb46c2a4a66428777709638dbb921d468143e61dac42344b","src/um/dwrite_2.rs":"18fc9de6626b5f0cf47cf5ae31eb65e63ecf158e714bb1079dbe3bd87cc30e11","src/um/dwrite_3.rs":"e60f76f7128b7dcd5aa57bb90db952603caa5a0a9bcad21eb2a0fbc9d143c767","src/um/dxdiag.rs":"6e02c1a1b174b774f2d02cc0007b240ecbb551159c7221a81780db05caba9af2","src/um/dxfile.rs":"97a87d87ceff6c8aa2c1624c3ee891a7adc0914e1b0750d3df05ace6d20eeccc","src/um/dxgidebug.rs":"3f1be2abf364db3e70e173feb6c4eddea7b56c5daf10f5a84963602097a011dd","src/um/dxva2api.rs":"7ad1f734e7900b844985f0acb876e1dca162eab448c10ddefd0cf84c2dd155d0","src/um/dxvahd.rs":"89193df159458e49fa65acebbefc5becca6e291fc6a32c3223d387acb23e4d55","src/um/endpointvolume.rs":"bea3f64307823529f1f73ac3853297089496bc70c57f381ca7c78ab888491a3b","src/um/errhandlingapi.rs":"5336cf6d97cd1278b783d861319a0521302788dd929b1dca0d8c404ac3bb4346","src/um/evntcons.rs":"910a5c14d77465ba57ab05a98e3ec17130946b28557a00cd0ef85b8566dbf9d7","src/um/exdisp.rs":"147f59b0b106cffdbd8d6e02fdad8f39685ce0bf5938b488bfedefebf69de877","src/um/fibersapi.rs":"424c69269dce6f0a1afaa5140d95b8c1719b3719ff46bc05b3db7101dbb50649","src/um/fileapi.rs":"89fe72af0c76dfa48dd7898af98d32fe5c456c58112835db3105b9e07f5b1605","src/um/gl/gl.rs":"9add9a323d87613a4586f4c688599b864cbf3d862d3d70ed0c18dc0da041d8bf","src/um/gl/mod.rs":"3e3fb3789ce9bfe7692fe2939121f65887f71005d5b0b3b1775f131c9b69222f","src/um/handleapi.rs":"3c3ba7150e50fe603f0a1e14f67777a5ba2d7221a4b66ab1df84566dcb07eb81","src/um/heapapi.rs":"7284592bea7212d0554dc7ed63b0888786f2ae3af4df59ac1e4b697c85edb922","src/um/highlevelmonitorconfigurationapi.rs":"eec1fc57db896d9cd72c09b4cb3281c51d5163fc3f84169358c5cd9b0ccc302c","src/um/http.rs":"11e274e2cae05a9806418caac57b673617eab5d44162b2cc6712c7d4bb1c9002","src/um/imm.rs":"8ac25c6ec9e29b4649e0d96dd76455493c25b66dce983d95dff8f50d4bcb77fa","src/um/interlockedapi.rs":"e9d2e12f2a2076f4cf26e19ba29d871f3a652b1acfef44670c05be7255103d2c","src/um/ioapiset.rs":"35ad02dfced8b111ccbac26e2c3c8cb14d3febb757790299961b90a8692e3065","src/um/jobapi.rs":"7dd7a2cf7732407b501588b07185af35dff4458e103318583efcb1d12b2196ee","src/um/jobapi2.rs":"5e919f05a84149b7dea9057a8d583b5c35cda9fd36432675260cd15c65ab5be9","src/um/knownfolders.rs":"02de8af90f560227c1cf1067efe1c40b4c7f308f02dda427651bd6fe29ffe511","src/um/ktmw32.rs":"43a6387979a79ac365667e73b9659d6ce608bc4440cc23aec5748fd2bf3af646","src/um/libloaderapi.rs":"130ff661c6ec51c16c4e5ac4111f01732d4767e5f9f9a286339d885742e1d3c1","src/um/lmaccess.rs":"4985651ea5949852f7adce4b527f47aed139f4dc877055f651fe6f9b046d6406","src/um/lmalert.rs":"f4510d6a8524f1950979500cee86aded86a46afb5249cb227e99a61b79f9d1d6","src/um/lmapibuf.rs":"3e761bb15d8c7e83683c1138624ce7606053ba6bc9077f4c2a87545d3efa56fd","src/um/lmat.rs":"fac23bdfcc071052de2fdb1e1cd6ac164cc4e35d502af709b3b634844f7ac449","src/um/lmdfs.rs":"228ab0745f456aa8e11a630014907eb124e1380377456701fa99353c763df4e8","src/um/lmerrlog.rs":"73d51724f07316ec0c8ace1febfdc0bd5958d637d253f79f36aa5331ec2bbbdf","src/um/lmjoin.rs":"9dafd3c9317c566e628824cb6d16d806fb95fff5813ced1948cea8882752832a","src/um/lmmsg.rs":"1b3566b3a1595dcdfb471304719af37f739b4223bc6c08744e3e7f7aaa14b597","src/um/lmremutl.rs":"4401f095e6db493b56ebc3fe2daa69317bd59e361bb71f1eb3cf6b672ba21cbe","src/um/lmrepl.rs":"4090bb897cdb9991c417e53850e333191527cea4d06258a497a3a5b1a448593f","src/um/lmserver.rs":"c1a123fb6ec29d743e4e7a42e9b28f450f2230234559592b6ea2b21709810e27","src/um/lmshare.rs":"13b15ba3eb252fe9e2a20d97b38849eb4b617a177cbc70c88d5ab210a031a58a","src/um/lmstats.rs":"3a114d58d9c564414421437285acab7f2262bcebb78517bb6e9b7b36c34ab36b","src/um/lmsvc.rs":"1d032afa6bf643a6049024a11a5be89722cd3df332f1e50953f93402e092d8fa","src/um/lmuse.rs":"6a3dbf4ebdef73dffed0dde131e52d7afcc2675e1537c01872dff43f6f5147ed","src/um/lmwksta.rs":"de6964159b6c08f0e5e57559653027cd210ddaeade7cad9e5e2af3dbc8c15835","src/um/lowlevelmonitorconfigurationapi.rs":"b860615f855a40091d903a08a166d4659ce31493a895647695fb3bf5f70e7fb4","src/um/lsalookup.rs":"b01ec0f2b1edb618af0683b4434da1ddea0bcda03797a95d638d93410ddf1761","src/um/memoryapi.rs":"ac65f2ea269607480e06921fa47fb3c64dce617c9f5f8cb97535dddd7b6e102f","src/um/minschannel.rs":"86c4b7ea3012a879dfe66e54aade2cffb787918cfee06f7e4498c42b14b88127","src/um/minwinbase.rs":"89f02e72a7d639f440a3e13c4326e2c0c1fbbfe3915483d5ba8500bd5513cde8","src/um/mmdeviceapi.rs":"5c64507cee87e4bad896a2a3d60766fafc01e8b85930f4800ee4702ea0cb4e99","src/um/mmeapi.rs":"955a2d66ff240db263be0b9054b27897228f6997e61c8daa2b701bc977d288d6","src/um/mmsystem.rs":"efa92923ed0dfed83e41104a8e3da0cb3fb11c6e21b43253d4ff561bb9577382","src/um/mod.rs":"a31dbf870d1e725f5e824836850adb1d3d1551321a29638e4266fed8c514f9f8","src/um/msaatext.rs":"f7a04ed96e0767a435856bb84bb835ef31617a30e49a6157e4a51c99dccecaea","src/um/mscat.rs":"c3ceae9899811610a4b2f15a80eb2e41eae566262d26ad6c68f2f95d1785a1a2","src/um/mschapp.rs":"f432c8a1d67b521e8e031c7662d7ad394d3f0383f6c44f09d3fbbddc5c208e5b","src/um/mssip.rs":"0ec2cda4bc2cb2cc1c6ca83ff0a63ee6c85b731f6b90206909a3473c9084e79c","src/um/namedpipeapi.rs":"f324b25161e2f2ae592ee59607bdc49af9815c001a6ec4d2a79b0c4e7e73df51","src/um/namespaceapi.rs":"30c2a4e7b05c1426af95eb36216d9ac9c1219ee64f472b999286027a27a6e8fa","src/um/nb30.rs":"c16c9fceab92a52a5587a22760cbbff0b2bb8564dac1f9528f51eced3fcb8b69","src/um/ncrypt.rs":"acc09d30e0256e922130f1bca8e0ec3d8717fb818f9071893940098e87e1efaf","src/um/ntlsa.rs":"f2198c2d358936bee1e6246fe2637c1b1c55d5d0109f92be380ec96a857ab84b","src/um/ntsecapi.rs":"3de4fea1eb7de0a8c99ead6bf5175414f6d7b082bfd0cd4d95bc2f165c497f1c","src/um/oaidl.rs":"4f0d4fdd6844a5ec96922cbe19fdc793cce3c82bdb23f9a8ca05738e0b638bf0","src/um/objbase.rs":"17297f27028765c3e40c5b47a83cbb083723259956a064344e2b681816c65d87","src/um/objidl.rs":"89693c5a3fa9247c50071da60d7f0561d3e6231f93a288767125412d4b8b2168","src/um/objidlbase.rs":"3cb828436c7603301886a5c97a32547ae4fb787df40e5ecb79e40a01e75b3648","src/um/ocidl.rs":"87e9c1973c25669ff7e8c4c28b47f750b8b002c429e8d262d12d1414129d051f","src/um/ole2.rs":"2c3b68683ea0e259d7ff3a56aa96ebcbd01a0fad880482802b7a7514105688e0","src/um/oleauto.rs":"ca201f00229bf13906667a9deb1422b4825439555c0dd570979321eb73180cee","src/um/olectl.rs":"29ca0c1151fb7e19eee5839ad0960a052bbe94c770299ab1f2ca72bd518b2cd5","src/um/oleidl.rs":"56253f3b4d2a18c6610de79b7f3f5cb5a120c07be4bf14475d122deaa083f262","src/um/opmapi.rs":"b10c513bb24a7e43af80b0526090ae23dbfc74fb02fde9de720eeee6a8bf69ba","src/um/pdh.rs":"79cf08ba4b73bd8fd4a2d256c7547654ad489dee86d0a020efa2c738f93aa9e0","src/um/perflib.rs":"5b0b9363ca8f0cea2a0b704d6e78246d120aedeb8c8cd035027aab39e0eeef33","src/um/physicalmonitorenumerationapi.rs":"41e56c449742934c636f2a7890bcc158c2b269175fbb4bca365bb91b535b98fd","src/um/playsoundapi.rs":"1b20c049d6c6762c7ad046131c4f2ff7038112149ca43ab95c63c149f6f84639","src/um/powerbase.rs":"6e3409c14abd9827439c736907b8a172f405181a6f803233dd260d12dc3ecc33","src/um/powersetting.rs":"c266b3cf87ab2224bdad52dfb9442ab4bde4370228cf32fd995c78e03c8370f5","src/um/powrprof.rs":"41f649be8d3b449e8bcc0dd50704d4b2b62d26cf821b609c198673974528cbb0","src/um/processenv.rs":"82d4d1d41b2254da608703a060f641a2ee08a43ededdad827137285bac68c549","src/um/processsnapshot.rs":"bb6fb908067b60d6d2984fb6a82e019aef8e2d14a36829e3fd6033e9a421c69a","src/um/processthreadsapi.rs":"f33f9ef0d9dd681418f744c6d1f138068097e1488123866714a949de14300e8f","src/um/processtopologyapi.rs":"660cb88cf5fd340ef3b83858059d3b3d920ec53e710490c9c28684534e042cf6","src/um/profileapi.rs":"f58d7d6f1dc916db6b87d9b1d9ff50fab9afe6280af5d75228e5ec8b2588f264","src/um/propidl.rs":"7595aa6e58ed166b21f550ebbe7b50cc45f847cd4d5685cf2c72492137c987c0","src/um/propkeydef.rs":"8cc9b032622404ce3e5fd2956198237c2ba2a2d28f0aefc9bd3cd137a4d93454","src/um/propsys.rs":"6627270787fb0c7b2b6db791d4445df04937a91e7df64e8f5eb74461649769b9","src/um/prsht.rs":"e8171b46042b169095c6ab2f6ef0fc34c9912e6d53fdddfd083c2dbc80296436","src/um/psapi.rs":"242ad484c2d2c178bbc37e806c5e077c5dff6e6ed7ac1fd9cc196e3c9003aef0","src/um/realtimeapiset.rs":"9411d06bbbab05eb9700bda4dfd7355b34fe834d4616812d81bde24107a4d0ec","src/um/reason.rs":"6923c46f0ceb308e2306cdb92763a385582197ea1aa50379c799dfa6736cd5c1","src/um/restartmanager.rs":"62f21e87bb521bb371f2c2ac7623d1b56db4d6bb5169ac1b2651ebf19d25c212","src/um/restrictederrorinfo.rs":"aa5cd16d7b9e0bae1243718500ec4d184261abb279e821c821f2424ea2ebfd4c","src/um/rmxfguid.rs":"7a683ff98d3eaaacf4746c2f4cd1b97cca4a025d6060d24ea4ad0c4b12a31edb","src/um/sapi.rs":"d7ee73e0b59515e829ad6047636a7901c6f6dac2d637fe66faab210b4cdec2b3","src/um/sapi51.rs":"429bb46e49be4a5e9dd66aa1251b6552cc67d924020d601d222a0769ee12b264","src/um/sapi53.rs":"7dcee1e8b24d056fdba01ad085b7d514284f01ee89f6c494853ce81066ac45c3","src/um/sapiddk.rs":"845b3574616ba748295cce6f6c94c0e9a9296a360027ccba0d5c6d542d2a084d","src/um/sapiddk51.rs":"b6706222ce6d6d8f786618f2d01c48c65e6629290ef010a27dc376f2cb395d15","src/um/schannel.rs":"9ba7437b82cbac1fe6ad0dc82ef58b1ec3484bbbaeac5b4a2fe12f56c46e5d13","src/um/securityappcontainer.rs":"933038334262d99c3f8f4160358758f16acdce8b95387f8fea449ce7749cd940","src/um/securitybaseapi.rs":"b94268651c80e75e00a9eb5a790e5063453cac1923b9145384191a77f3e3a7eb","src/um/servprov.rs":"116adfb7ed8cfaff0b6e1d0df46bb456b2936fe0b840485a4fefde87b0207885","src/um/setupapi.rs":"9807107f00decc94fab7ba49fe4984a48f9b87e4162415a0c2693c0cde8da27a","src/um/shellapi.rs":"6141aabc9741f2fc8685bf619944607c96c1c5e7682444f716d4658dbd70b9d5","src/um/shellscalingapi.rs":"2cded3fba4480871733ba141b0a1a790e883d77e9f144ea34135215c89a40cf8","src/um/shlobj.rs":"bd604c083a0e8331049f9ac1200a03cffa2744d63d9d470c4aa94400482d4d44","src/um/shobjidl.rs":"046bf4ef1607496e143d2d825bae587a0e235c9991e8fbaed03a59a7875b7dd4","src/um/shobjidl_core.rs":"cf6351bf9ae4a56fb257a176ebe31ccb621616553e6a8775e43b403b126c2fc4","src/um/shtypes.rs":"0570e723dbc2712a019c522fbb01e87667aa9db32b6a7891e763137b256c1b18","src/um/spapidef.rs":"575b0632cb7ef628cf86130936c31f8a35c6f6269fb57d2a4cbd5bcdef539a1c","src/um/sporder.rs":"64d365a773a864fbf6789ff8156214ed669baee6b3cd90819c2d2b36324248a1","src/um/sql.rs":"abff2a2fb5f08be9f565eb03a65244043720348829f04b98656a89686e807216","src/um/sqlext.rs":"9545e0390ffde6ab4a620e0800265b399144cd4fc8bd94258041c1af9375573a","src/um/sqltypes.rs":"77c6c920023498820e51ede76942e9628c544a6024cfce5ea484b8995e664ba2","src/um/sqlucode.rs":"758a8e581fe6f0a960bef2a478a4047a494ee18995f1e7dfa34282ee2b0d18f5","src/um/sspi.rs":"0855fd38942aef19f613702506329c8103df99721b5e1bf6d508434a7cc24920","src/um/stringapiset.rs":"585f3051bec63cd82909b7edc10c76bb7bf92596c90f33792de28eabbe57ca8f","src/um/strmif.rs":"302d470618e6e5225c5168838228ba9773295e87c8864d6ad2c148cf28c7c3ed","src/um/subauth.rs":"51b44012d506c35fe608bf7abdd8b5db1bf9f61a626ad5431618448795f5a3e0","src/um/synchapi.rs":"a53963ba8b51b2b8ac91039d91b7f5879b900910f913cf879e31177ead04039c","src/um/sysinfoapi.rs":"37ea5a4b3b120da417d2e1585210cdfd09b1280c3b546e3d53bd2975cbb5a4f8","src/um/systemtopologyapi.rs":"e535d6d30d631ebf8a6a311cd9f526d737b020a654b283e4267ee34b0226132e","src/um/textstor.rs":"3c2980ae947ea25a8299f7bc670ca73ec3c9a13a3ab7884c96b55575113d28c7","src/um/threadpoolapiset.rs":"0a96fd29497b2ece591d5a65a74a70ec40b444bf6e128fed8a03041460ea699a","src/um/threadpoollegacyapiset.rs":"d63f2aa225ba0587b567af78eb2b5a8a196f6ab878d97f9b022968cfba5e9141","src/um/timeapi.rs":"8c493994fb39f8e22f951b12d4b03d6287597b640150d5e605dc3b51a3237db9","src/um/timezoneapi.rs":"6cfb38964a156f77a94c51380a3c0e986c39aee3e0f85c1c773a34bf057147f4","src/um/tlhelp32.rs":"493508be1c33e426bf778067dc8650c49135dff39be776d2aa0488744009baa3","src/um/unknwnbase.rs":"071fc08d973b4167b5350bc73d28af7f872f803973c0ef10db2075c9980006ef","src/um/urlhist.rs":"f54090d2042a629cb9542c6d3f4121c74707063f13809269cd2c9d29c3b81db9","src/um/urlmon.rs":"dba8dcfb8e3e3753a41147946f5ed336d822d1df807cb9b3e1dd1357822f88a8","src/um/userenv.rs":"3ed27bb291217613d32179deb6275526fb7647ef667cacd7cfc2fdb2f7b5f42c","src/um/usp10.rs":"85147d47f29d172bc6d3f3a51720cc1df2ec0803e007c9c6eb29cd18e66444a3","src/um/utilapiset.rs":"f02a26c4a3c908bb0c80ffb29a667dc66b7b9ffa29d48ef190dbeda03a0cd78a","src/um/uxtheme.rs":"749fa1edf068ab9a98160f64f628ac57b25141451dcec125f9a9d8dc7cdac3af","src/um/vsbackup.rs":"951c9aa850c1c59d7beb554fc117025abac3c85b2d08d70dcf0552450684bdeb","src/um/vss.rs":"daca19c9438618b2ec0f869b442214ed96be66d4c0ba2eb920b0ab42fdc1cb8c","src/um/vsserror.rs":"1b43c769bc7377405ad286e0fa1442e02d0d7ee025ea949a04161653499d24fb","src/um/vswriter.rs":"0d70f32a5ddf938647cd744a6eee237bfea16415d37c25a8f93a0a9ceb2b4661","src/um/wct.rs":"3f2a2602987ec838e05e1663bd01cb720bcd4471ff05bc207beed642ea1ab4f8","src/um/werapi.rs":"d41c0ec1d067a453a283676aebb9cc30627205aebdcfcffc5da374ed4c9aecad","src/um/winbase.rs":"e764934a4141e8361f015405dbe1a23dcc0e0c28c59af4acffc660d3ccb31c4a","src/um/wincodec.rs":"666feceab4eaa75ba77423f0623d0b35711e490b8546795d918ab4d304569a53","src/um/wincodecsdk.rs":"46b7a9a2b24dd354c3f8e079ae75a6d3f93ae472639902e0974fcb9827cc1abc","src/um/wincon.rs":"9aef7bf262c9b9ed0ec85e6ca97c25327d8f97df04d83aea5d8c9ae4b6d50604","src/um/wincred.rs":"7626c80a3e1e34496fdecd6d2f44509632c99f33f3c3241f73fe32c927595bc9","src/um/wincrypt.rs":"033e2ec801ea5dcd6ca179780ef2ba115db97b0de7508a499c87440cc514fc77","src/um/windowsceip.rs":"cfc2062daac6a9195690af64bd817fb41f086206c5091539da29d6e51a3a00c6","src/um/winefs.rs":"5072c32e71b40a4b11f00b6aa61537ea28d0a41e42ee8e029760ee5e493c664f","src/um/winevt.rs":"29f85bb49424efa7ac921cb10f2da4b77e4cfe863ca2fe17026137dc5dc2ca8d","src/um/wingdi.rs":"e02491bac6cd84970f98a5ebcbb68815a78b33a18bf5ca25474c9aab088cb5fe","src/um/winhttp.rs":"f163b3b7ef893b6d769fd3886bba182972dd886674af382174ad0c96c774f54e","src/um/wininet.rs":"c96ff6e03d1602b50422ab2847f28c6e4ab80bb3f992d2e6a4e87c20ee17d83d","src/um/winineti.rs":"8624f54b40da0ceb7949b43f8eb54e3e07ca59f5b805328de2b9aa030adb341d","src/um/winioctl.rs":"2dd66814f6203188f6ea1bc1bb7a376cfa1bbb33eccbcbb1ddff5b97c05cbc26","src/um/winnetwk.rs":"bf3c503f6e6d99d8640d66102679522ffda0ac918022f0873dae8bf3fb837ba0","src/um/winnls.rs":"bdea7ae691328e1fa8ab6cc479b5c612c6542ced215870993a6498baaea301aa","src/um/winnt.rs":"8247bc9131a54fdb8a4c4b551a733c7a21d1eeef0ebe4cc64904076e23754d6c","src/um/winreg.rs":"f7fda9bfa992566453b3f6651d18545924a1e81191540700216aa856e2fb0650","src/um/winsafer.rs":"623e4849c38ea24850d05cfc99349099e9ef37278fdf1353dd0102d5d54a70cd","src/um/winscard.rs":"0fe23a54544c530838774f7c03708b2d375a3678fbf2f0390e6abddd128a3f33","src/um/winsmcrd.rs":"f3c91490cf7c07a3b7df260097df95d976ce4af6fde258f5e2d2a3f95ad9d0bb","src/um/winsock2.rs":"3ecedee15dae16920c39b880f32d5d39686651e6b232496c8e10cd32ce9aa81f","src/um/winspool.rs":"8ca9532933aa6bb35a1fa3ec7609a12bd5db82fde49fdd6f1d9aea61479df131","src/um/winsvc.rs":"a30d607dced7c1fb75524b845d78ac0516228c270139f659bce0cf56771937d6","src/um/winusb.rs":"8a5b539a14c8fa6175a10fe6adc6cc5e643df27fb0a78dd2b7466aa3039492eb","src/um/winuser.rs":"e200be8d7a8e8cecf3c04f3ad96298cb5035216fa13849d7f756a6eb6057a4f3","src/um/winver.rs":"c0437e334c919489b02c7e14e0aedf64ece4ef1ad80569cc99f4e126c8c8d287","src/um/wow64apiset.rs":"42f0fbea817164c78133c014821486f2e312fcb79060f922435a60fdebfb07f3","src/um/ws2spi.rs":"79a2cceb67b4e632ee890000d8e2c00f2d578ab895af6d80d5df96883136ece9","src/um/ws2tcpip.rs":"ec7d0af8a43fb608e827e52b98937339359ffb9fdd47dcf5f9f3c4c086145527","src/um/xinput.rs":"5e55915c432e4b8de8cf489d35d774e9f3e259cfd3bbd9a09e3271cd78a2e00a","src/vc/excpt.rs":"c1000ba67ad7dc36a00433dadcc20633fba6b1a7306fb1e59e60a32369fe22d0","src/vc/limits.rs":"0b97c2538434c4d734c9a6da80a6f690755374e66f4cf83e82417318f96f8ed8","src/vc/mod.rs":"cb61848f0bcee5c96ebf2a6c3a69eebc31d84d29c108b0664d104f9c040e3aa2","src/vc/vadefs.rs":"3dc2f47dc3db9f6ff0e3c5ce5dc1487b031094240cb00d8ff194e333c959492e","src/vc/vcruntime.rs":"a9e21c05716dbbfeed5a17918e7b742103a80ca9923fcda3871859c0e863606e","src/winrt/activation.rs":"536d50f4f1cd2f4e631fb89ae4044d353d38f03a6c7487db23c0aee956ff973e","src/winrt/hstring.rs":"ce9c550121838a2df0a840c46714374ec317ed0a8f5323f0467e00234b417d22","src/winrt/inspectable.rs":"7252d0813a1f3f734a8cb7134a6bf1a91518966bca3f57a35fbb3c447b513a9f","src/winrt/mod.rs":"13530a7c2b7bebc529d2c12666551d0fe4d30f0f653eedc9f38ddc833daea05f","src/winrt/roapi.rs":"50eed24313e08c451db27e7ab02cecae2b8331af4d3d686369218c652d8df9a9","src/winrt/robuffer.rs":"6c974c04c3c20784058753d8a4d6a640bd2f2d52f644249ffaed6886e12ec241","src/winrt/roerrorapi.rs":"90c1e113dc54121a72957b9b64dc3592eb688fc91015a03a04edffad4e62813e","src/winrt/winstring.rs":"a3875b317bd598040f98deb4838f5dbfb38b40f3eac0d450debc9084971f1386"},"package":"92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/rust/winapi/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+  "git": {
+    "sha1": "4ac6c90e4ab92850c78b6103137290fe4ab9d273"
+  }
+}
--- a/third_party/rust/winapi/Cargo.toml
+++ b/third_party/rust/winapi/Cargo.toml
@@ -7,58 +7,73 @@
 #
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 name = "winapi"
-version = "0.3.4"
+version = "0.3.6"
 authors = ["Peter Atashian <retep998@gmail.com>"]
 build = "build.rs"
 include = ["/src/**/*", "/Cargo.toml", "/LICENSE-MIT", "/LICENSE-APACHE", "/build.rs", "/README.md"]
 description = "Raw FFI bindings for all of Windows API."
 documentation = "https://docs.rs/winapi/*/x86_64-pc-windows-msvc/winapi/"
 readme = "README.md"
 keywords = ["windows", "ffi", "win32", "com", "directx"]
 categories = ["external-ffi-bindings", "no-std", "os::windows-apis"]
 license = "MIT/Apache-2.0"
 repository = "https://github.com/retep998/winapi-rs"
 [package.metadata.docs.rs]
 default-target = "x86_64-pc-windows-msvc"
 features = ["everything"]
 
 [features]
+accctrl = []
+aclapi = []
 activation = []
+appmgmt = []
 audioclient = []
 audiosessiontypes = []
 avrt = []
 basetsd = []
 bcrypt = []
+bits = []
+bits10_1 = []
+bits1_5 = []
+bits2_0 = []
+bits2_5 = []
+bits3_0 = []
+bits4_0 = []
+bits5_0 = []
+bitscfg = []
+bitsmsg = []
 bugcodes = []
 cderr = []
 cfg = []
 cfgmgr32 = []
 cguid = []
 combaseapi = []
 coml2api = []
 commapi = []
 commctrl = []
 commdlg = []
 commoncontrols = []
 consoleapi = []
 corsym = []
 d2d1 = []
 d2d1_1 = []
 d2d1_2 = []
+d2d1_3 = []
 d2d1effectauthor = []
 d2d1effects = []
 d2d1effects_1 = []
 d2d1effects_2 = []
+d2d1svg = []
 d2dbasetypes = []
 d3d = []
 d3d10 = []
 d3d10_1 = []
 d3d10_1shader = []
 d3d10effect = []
 d3d10misc = []
 d3d10sdklayers = []
@@ -66,42 +81,45 @@ d3d10shader = []
 d3d11 = []
 d3d11_1 = []
 d3d11_2 = []
 d3d11_3 = []
 d3d11_4 = []
 d3d11on12 = []
 d3d11sdklayers = []
 d3d11shader = []
+d3d11tokenizedprogramformat = []
 d3d12 = []
 d3d12sdklayers = []
 d3d12shader = []
 d3d9 = []
 d3d9caps = []
 d3d9types = []
 d3dcommon = []
 d3dcompiler = []
 d3dcsx = []
 d3dx10core = []
 d3dx10math = []
 d3dx10mesh = []
 datetimeapi = []
 davclnt = []
 dbghelp = []
+dbt = []
 dcommon = []
 dcomp = []
 dcompanimation = []
 dcomptypes = []
 dde = []
 ddraw = []
 ddrawi = []
 ddrawint = []
 debug = []
 debugapi = []
 devguid = []
+devicetopology = []
 devpkey = []
 devpropdef = []
 dinput = []
 dinputd = []
 dmksctl = []
 dmusicc = []
 docobj = []
 documenttarget = []
@@ -118,44 +136,55 @@ dwrite_2 = []
 dwrite_3 = []
 dxdiag = []
 dxfile = []
 dxgi = []
 dxgi1_2 = []
 dxgi1_3 = []
 dxgi1_4 = []
 dxgi1_5 = []
+dxgi1_6 = []
 dxgidebug = []
 dxgiformat = []
 dxgitype = []
+dxva2api = []
+dxvahd = []
+endpointvolume = []
 errhandlingapi = []
 everything = []
+evntcons = []
+evntprov = []
+evntrace = []
 excpt = []
+exdisp = []
 fibersapi = []
 fileapi = []
 gl-gl = []
 guiddef = []
 handleapi = []
 heapapi = []
 hidclass = []
 hidpi = []
 hidsdi = []
 hidusage = []
+highlevelmonitorconfigurationapi = []
 hstring = []
 http = []
 imm = []
+impl-default = []
 in6addr = []
 inaddr = []
 inspectable = []
 interlockedapi = []
 intsafe = []
 ioapiset = []
 jobapi = []
 jobapi2 = []
 knownfolders = []
+ks = []
 ksmedia = []
 ktmtypes = []
 ktmw32 = []
 libloaderapi = []
 limits = []
 lmaccess = []
 lmalert = []
 lmapibuf = []
@@ -168,46 +197,54 @@ lmmsg = []
 lmremutl = []
 lmrepl = []
 lmserver = []
 lmshare = []
 lmstats = []
 lmsvc = []
 lmuse = []
 lmwksta = []
+lowlevelmonitorconfigurationapi = []
 lsalookup = []
 memoryapi = []
 minschannel = []
 minwinbase = []
 minwindef = []
 mmdeviceapi = []
 mmeapi = []
 mmreg = []
 mmsystem = []
 msaatext = []
 mscat = []
+mschapp = []
 mssip = []
 mstcpip = []
 namedpipeapi = []
 namespaceapi = []
 nb30 = []
 ncrypt = []
 ntddscsi = []
 ntddser = []
 ntdef = []
+ntlsa = []
 ntsecapi = []
 ntstatus = []
 oaidl = []
 objbase = []
 objidl = []
 objidlbase = []
 ocidl = []
+ole2 = []
 oleauto = []
 olectl = []
+oleidl = []
+opmapi = []
 pdh = []
+perflib = []
+physicalmonitorenumerationapi = []
 playsoundapi = []
 powerbase = []
 powersetting = []
 powrprof = []
 processenv = []
 processsnapshot = []
 processthreadsapi = []
 processtopologyapi = []
@@ -215,30 +252,32 @@ profileapi = []
 propidl = []
 propkeydef = []
 propsys = []
 prsht = []
 psapi = []
 qos = []
 realtimeapiset = []
 reason = []
+restartmanager = []
 restrictederrorinfo = []
 rmxfguid = []
 roapi = []
 robuffer = []
 roerrorapi = []
 rpc = []
 rpcdce = []
 rpcndr = []
 sapi = []
 sapi51 = []
 sapi53 = []
 sapiddk = []
 sapiddk51 = []
 schannel = []
+sddl = []
 securityappcontainer = []
 securitybaseapi = []
 servprov = []
 setupapi = []
 shellapi = []
 shellscalingapi = []
 shlobj = []
 shobjidl = []
@@ -260,62 +299,69 @@ synchapi = []
 sysinfoapi = []
 systemtopologyapi = []
 textstor = []
 threadpoolapiset = []
 threadpoollegacyapiset = []
 timeapi = []
 timezoneapi = []
 tlhelp32 = []
+transportsettingcommon = []
+tvout = []
 unknwnbase = []
 urlhist = []
 urlmon = []
 usb = []
 usbiodef = []
 usbspec = []
 userenv = []
 usp10 = []
 utilapiset = []
+uxtheme = []
 vadefs = []
 vcruntime = []
 vsbackup = []
 vss = []
 vsserror = []
 vswriter = []
+wct = []
 werapi = []
 winbase = []
 wincodec = []
 wincodecsdk = []
 wincon = []
 wincred = []
 wincrypt = []
 windef = []
 windowsceip = []
 windowsx = []
+winefs = []
 winerror = []
 winevt = []
 wingdi = []
 winhttp = []
 wininet = []
 winineti = []
 winioctl = []
 winnetwk = []
 winnls = []
 winnt = []
 winreg = []
+winsafer = []
 winscard = []
 winsmcrd = []
 winsock2 = []
 winspool = []
 winstring = []
 winsvc = []
 winusb = []
 winusbio = []
 winuser = []
 winver = []
+wmistr = []
 wnnc = []
 wow64apiset = []
 ws2def = []
 ws2ipdef = []
 ws2spi = []
 ws2tcpip = []
 wtypes = []
 wtypesbase = []
--- a/third_party/rust/winapi/LICENSE-MIT
+++ b/third_party/rust/winapi/LICENSE-MIT
@@ -1,9 +1,9 @@
-Copyright (c) 2015 The winapi-rs Developers
+Copyright (c) 2015-2018 The winapi-rs Developers
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 
--- a/third_party/rust/winapi/README.md
+++ b/third_party/rust/winapi/README.md
@@ -1,9 +1,18 @@
-# winapi-rs [![Build status](https://ci.appveyor.com/api/projects/status/i47oonf5e7qm5utq/branch/master?svg=true)](https://ci.appveyor.com/project/retep998/winapi-rs/branch/master) [![Build Status](https://travis-ci.org/retep998/winapi-rs.svg?branch=master)](https://travis-ci.org/retep998/winapi-rs) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/retep998/winapi-rs) [![Crates.io](https://img.shields.io/crates/v/winapi.svg)](https://crates.io/crates/winapi) ![Lines of Code](https://tokei.rs/b1/github/retep998/winapi-rs) ![100% unsafe](https://img.shields.io/badge/unsafe-100%25-blue.svg) #
+# winapi-rs
+[![Build status](https://ci.appveyor.com/api/projects/status/i47oonf5e7qm5utq/branch/0.3?svg=true)](https://ci.appveyor.com/project/retep998/winapi-rs/branch/0.3)
+[![Build Status](https://travis-ci.org/retep998/winapi-rs.svg?branch=0.3)](https://travis-ci.org/retep998/winapi-rs)
+[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/retep998/winapi-rs)
+[![Crates.io](https://img.shields.io/crates/v/winapi.svg)](https://crates.io/crates/winapi)
+![Lines of Code](https://tokei.rs/b1/github/retep998/winapi-rs)
+![100% unsafe](https://img.shields.io/badge/unsafe-100%25-blue.svg)
+[![Open issues](https://img.shields.io/github/issues-raw/retep998/winapi-rs.svg)](https://github.com/retep998/winapi-rs/issues)
+[![License](https://img.shields.io/crates/l/winapi.svg)](https://github.com/retep998/winapi-rs)
+
 
 [Documentation](https://docs.rs/winapi/*/x86_64-pc-windows-msvc/winapi/)
 
 Official IRC channel: #winapi on [Mozilla IRC](https://wiki.mozilla.org/IRC)
 
 This crate provides raw FFI bindings to all of Windows API. They are gathered by hand using the Windows 10 SDK from Microsoft. I aim to replace all existing Windows FFI in other crates with this crate through the "[Embrace, extend, and extinguish](http://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish)" technique.
 
 If this crate is missing something you need, feel free to create an issue, open a pull request, or contact me via [other means](http://www.rustaceans.org/retep998).
@@ -23,16 +32,24 @@ Each module is gated on a feature flag, 
 ### How do I know which module an item is defined in?
 
 You can use the search functionality in the [documentation](https://docs.rs/winapi/*/x86_64-pc-windows-msvc/winapi/) to find where items are defined.
 
 ### Why is there no documentation on how to use anything?
 
 This crate is nothing more than raw bindings to Windows API. If you wish to know how to use the various functionality in Windows API, you can look up the various items on [MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/aa906039) which is full of detailed documentation.
 
+### Can I use this library in `no_std` projects?
+
+Yes, absolutely! By default the `std` feature of `winapi` is disabled, allowing you to write Windows applications using nothing but `core` and `winapi`.
+
+### Why is `winapi`'s `HANDLE` incompatible with `std`'s `HANDLE`?
+
+Because `winapi` does not depend on `std` by default, it has to define `c_void` itself instead of using `std::os::raw::c_void`. However, if you enable the `std` feature of `winapi` then it will re-export `c_void` from `std` and cause `winapi`'s `HANDLE` to be the same type as `std`'s `HANDLE`.
+
 ## Example ##
 
 Cargo.toml:
 ```toml
 [target.'cfg(windows)'.dependencies]
 winapi = { version = "0.3", features = ["winuser"] }
 ```
 main.rs:
--- a/third_party/rust/winapi/build.rs
+++ b/third_party/rust/winapi/build.rs
@@ -1,16 +1,16 @@
 // Copyright © 2016-2018 winapi-rs developers
 // Licensed under the Apache License, Version 2.0
 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
 // All files in the project carrying such notice may not be copied, modified, or distributed
 // except according to those terms.
 use std::cell::Cell;
-use std::collections::{HashMap, HashSet};
+use std::collections::HashMap;
 use std::env::var;
 // (header name, &[header dependencies], &[library dependencies])
 const DATA: &'static [(&'static str, &'static [&'static str], &'static [&'static str])] = &[
     // km
     // mmos
     // shared
     ("basetsd", &[], &[]),
     ("bcrypt", &["minwindef", "winnt"], &["bcrypt"]),
@@ -25,140 +25,172 @@ const DATA: &'static [(&'static str, &'s
     ("devpkey", &["devpropdef"], &[]),
     ("devpropdef", &["guiddef", "minwindef", "winnt"], &[]),
     ("dinputd", &[], &[]),
     ("dxgi", &["basetsd", "dxgiformat", "dxgitype", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["dxgi"]),
     ("dxgi1_2", &["basetsd", "dxgi", "dxgiformat", "dxgitype", "guiddef", "minwinbase", "minwindef", "unknwnbase", "windef", "winnt"], &[]),
     ("dxgi1_3", &["dxgi", "dxgi1_2", "dxgiformat", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["dxgi"]),
     ("dxgi1_4", &["basetsd", "dxgi1_2", "dxgi1_3", "dxgiformat", "dxgitype", "guiddef", "minwindef", "unknwnbase", "winnt"], &[]),
     ("dxgi1_5", &["basetsd", "dxgi", "dxgi1_2", "dxgi1_3", "dxgi1_4", "dxgiformat", "minwindef", "unknwnbase", "winnt"], &[]),
+    ("dxgi1_6", &["basetsd", "dxgi1_2", "dxgi1_4", "dxgi1_5", "dxgitype", "guiddef", "minwindef", "windef", "winnt"], &[]),
     ("dxgiformat", &[], &[]),
     ("dxgitype", &["d3d9types", "dxgiformat", "minwindef"], &[]),
+    ("evntprov", &["basetsd", "guiddef", "minwindef", "winnt"], &["advapi32"]),
+    ("evntrace", &["basetsd", "evntcons", "evntprov", "guiddef", "handleapi", "minwindef", "timezoneapi", "vadefs", "winnt", "wmistr"], &["advapi32"]),
     ("guiddef", &[], &[]),
     ("hidclass", &["guiddef", "minwindef", "winioctl", "winnt"], &[]),
     ("hidpi", &["hidusage", "minwindef", "ntdef", "ntstatus", "winnt"], &["hid"]),
     ("hidsdi", &["guiddef", "hidpi", "minwindef", "winnt"], &["hid"]),
     ("hidusage", &["minwindef"], &[]),
     ("in6addr", &["minwindef"], &[]),
     ("inaddr", &["minwindef"], &[]),
     ("intsafe", &[], &[]),
+    ("ks", &[], &[]),
     ("ksmedia", &[], &[]),
     ("ktmtypes", &["guiddef", "minwindef", "winnt"], &[]),
     ("lmcons", &["minwindef", "winnt"], &[]),
     ("minwindef", &["basetsd", "ntdef"], &[]),
     ("mmreg", &["guiddef", "minwindef"], &[]),
     ("mstcpip", &["basetsd", "guiddef", "in6addr", "inaddr", "minwindef", "winnt", "ws2def"], &["ntdll"]),
     ("ntddscsi", &["basetsd", "minwindef", "ntdef", "winioctl", "winnt"], &[]),
     ("ntddser", &["devpropdef"], &[]),
     ("ntdef", &["basetsd", "guiddef"], &[]),
     ("ntstatus", &["ntdef"], &[]),
     ("qos", &["minwindef"], &[]),
     ("rpc", &[], &[]),
     ("rpcdce", &["guiddef", "minwindef", "rpc"], &[]),
     ("rpcndr", &[], &[]),
+    ("sddl", &["basetsd", "minwindef", "winnt"], &["advapi32"]),
     ("sspi", &["basetsd", "guiddef", "minwindef", "subauth", "wincred", "winnt"], &["credui", "secur32"]),
     ("stralign", &["vcruntime", "winnt"], &["kernel32"]),
+    ("transportsettingcommon", &["guiddef"], &[]),
+    ("tvout", &["guiddef", "minwindef"], &[]),
     ("usb", &["minwindef", "usbspec", "winnt"], &[]),
     ("usbiodef", &["guiddef", "minwindef", "winioctl", "winnt"], &[]),
     ("usbspec", &["basetsd", "guiddef", "minwindef", "winnt"], &[]),
     ("windef", &["minwindef", "winnt"], &[]),
     ("windowsx", &["minwindef"], &[]),
     ("winerror", &["minwindef"], &[]),
     ("winusbio", &["minwindef", "usb"], &[]),
+    ("wmistr", &["basetsd", "guiddef", "minwindef", "winnt"], &[]),
     ("wnnc", &["minwindef"], &[]),
     ("ws2def", &["basetsd", "guiddef", "inaddr", "minwindef", "vcruntime", "winnt"], &[]),
     ("ws2ipdef", &["in6addr", "inaddr", "minwindef", "ws2def"], &[]),
     ("wtypes", &["guiddef", "minwindef", "ntdef", "wtypesbase"], &[]),
     ("wtypesbase", &["minwindef", "rpcndr", "winnt"], &[]),
     // ucrt
     // um
+    ("accctrl", &["guiddef", "minwindef", "winbase", "winnt"], &[]),
+    ("aclapi", &["accctrl", "guiddef", "minwindef", "winnt"], &["advapi32"]),
+    ("appmgmt", &["guiddef", "minwindef", "winnt"], &["advapi32"]),
     ("audioclient", &["audiosessiontypes", "basetsd", "guiddef", "minwindef", "mmreg", "strmif", "unknwnbase", "winerror", "winnt", "wtypesbase"], &[]),
     ("audiosessiontypes", &["minwindef"], &[]),
     ("avrt", &["guiddef", "minwindef", "winnt"], &["avrt"]),
+    ("bits", &["basetsd", "guiddef", "minwindef", "unknwnbase", "winnt"], &[]),
+    ("bits10_1", &["basetsd", "bits", "bits2_0", "bits3_0", "bits5_0", "minwindef", "winnt"], &[]),
+    ("bits1_5", &["basetsd", "bits", "rpcndr", "winnt"], &[]),
+    ("bits2_0", &["basetsd", "bits", "bits1_5", "minwindef", "winnt"], &[]),
+    ("bits2_5", &["minwindef", "rpcndr", "unknwnbase", "winnt"], &[]),
+    ("bits3_0", &["basetsd", "bits", "bits2_0", "guiddef", "minwindef", "unknwnbase", "winnt"], &[]),
+    ("bits4_0", &["basetsd", "bits3_0", "minwindef", "unknwnbase", "winnt"], &[]),
+    ("bits5_0", &["basetsd", "bits1_5", "bits3_0", "bits4_0", "guiddef", "minwindef", "winnt"], &[]),
+    ("bitscfg", &["guiddef", "oaidl", "unknwnbase", "winnt", "wtypes"], &["oleaut32"]),
+    ("bitsmsg", &["minwindef"], &[]),
     ("cfgmgr32", &["basetsd", "cfg", "guiddef", "minwindef", "winnt", "winreg"], &["setupapi"]),
     ("cguid", &[], &[]),
     ("combaseapi", &["basetsd", "guiddef", "minwindef", "objidl", "objidlbase", "propidl", "rpcdce", "unknwnbase", "winnt", "wtypesbase"], &["ole32"]),
     ("coml2api", &["minwindef"], &[]),
     ("commapi", &["minwinbase", "minwindef", "winbase", "winnt"], &["kernel32"]),
     ("commctrl", &["basetsd", "commoncontrols", "guiddef", "minwinbase", "minwindef", "vcruntime", "windef", "winnt", "winuser"], &["comctl32"]),
     ("commdlg", &["basetsd", "minwindef", "prsht", "unknwnbase", "windef", "wingdi", "winnt", "winuser"], &["comdlg32"]),
     ("commoncontrols", &["commctrl", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["comctl32"]),
     ("consoleapi", &["minwindef", "wincon", "winnt"], &["kernel32"]),
     ("corsym", &["basetsd", "objidlbase", "unknwnbase", "winnt"], &[]),
     ("d2d1", &["basetsd", "d2dbasetypes", "d3dcommon", "dcommon", "dwrite", "dxgi", "guiddef", "minwindef", "unknwnbase", "wincodec", "windef", "winnt"], &["d2d1"]),
     ("d2d1_1", &["basetsd", "d2d1", "d2d1effectauthor", "d2dbasetypes", "dcommon", "documenttarget", "dwrite", "dxgi", "dxgiformat", "guiddef", "minwindef", "objidlbase", "unknwnbase", "wincodec", "winnt"], &["d2d1"]),
     ("d2d1_2", &["d2d1", "d2d1_1", "dxgi", "minwindef", "winnt"], &["d2d1"]),
-    ("d2d1effectauthor", &["basetsd", "minwindef", "ntdef", "unknwnbase"], &[]),
+    ("d2d1_3", &["basetsd", "d2d1", "d2d1_1", "d2d1_2", "d2d1effects", "d2d1svg", "dcommon", "dwrite", "dxgi", "dxgitype", "minwindef", "ntdef", "objidlbase", "wincodec", "winerror"], &["d2d1"]),
+    ("d2d1effectauthor", &["basetsd", "d2d1", "d2d1_1", "d2dbasetypes", "d3dcommon", "dxgiformat", "guiddef", "minwindef", "ntdef", "unknwnbase", "wincodec"], &[]),
     ("d2d1effects", &[], &[]),
     ("d2d1effects_1", &[], &[]),
     ("d2d1effects_2", &[], &[]),
-    ("d2dbasetypes", &["basetsd", "d3d9types", "minwindef", "windef"], &[]),
+    ("d2d1svg", &["basetsd", "d2d1", "d2d1_1", "guiddef", "minwindef", "ntdef", "objidlbase", "winerror"], &[]),
+    ("d2dbasetypes", &["d3d9types", "dcommon"], &[]),
     ("d3d", &[], &[]),
     ("d3d10", &["d3dcommon"], &[]),
     ("d3d10_1", &[], &[]),
     ("d3d10_1shader", &[], &[]),
     ("d3d10effect", &[], &[]),
     ("d3d10misc", &[], &[]),
     ("d3d10sdklayers", &[], &[]),
     ("d3d10shader", &["d3d10", "d3dcommon", "minwindef", "unknwnbase", "winnt"], &[]),
     ("d3d11", &["basetsd", "d3dcommon", "dxgi", "dxgiformat", "dxgitype", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["d3d11"]),
-    ("d3d11_1", &[], &[]),
-    ("d3d11_2", &[], &[]),
+    ("d3d11_1", &["basetsd", "d3d11", "d3dcommon", "dxgiformat", "dxgitype", "guiddef", "minwindef", "unknwnbase", "winnt"], &[]),
+    ("d3d11_2", &["basetsd", "d3d11", "d3d11_1", "dxgiformat", "minwindef", "winnt"], &[]),
     ("d3d11_3", &[], &[]),
     ("d3d11_4", &[], &[]),
     ("d3d11on12", &["d3d11", "d3d12", "d3dcommon", "guiddef", "minwindef", "unknwnbase", "winnt"], &["d3d11"]),
-    ("d3d11sdklayers", &[], &[]),
+    ("d3d11sdklayers", &["basetsd", "d3d11", "dxgi", "minwindef", "unknwnbase", "winnt"], &[]),
     ("d3d11shader", &["basetsd", "d3dcommon", "minwindef", "unknwnbase", "winnt"], &[]),
+    ("d3d11tokenizedprogramformat", &["minwindef"], &[]),
     ("d3d12", &["basetsd", "d3dcommon", "dxgiformat", "dxgitype", "guiddef", "minwinbase", "minwindef", "unknwnbase", "windef", "winnt"], &["d3d12"]),
     ("d3d12sdklayers", &["basetsd", "d3d12", "minwindef", "unknwnbase", "winnt"], &[]),
     ("d3d12shader", &["basetsd", "d3dcommon", "minwindef", "unknwnbase", "winnt"], &[]),
     ("d3dcommon", &["basetsd", "minwindef", "unknwnbase", "winnt"], &[]),
     ("d3dcompiler", &["basetsd", "d3d11shader", "d3dcommon", "guiddef", "minwindef", "winnt"], &["d3dcompiler"]),
     ("d3dcsx", &[], &[]),
     ("d3dx10core", &[], &[]),
     ("d3dx10math", &[], &[]),
     ("d3dx10mesh", &[], &[]),
     ("datetimeapi", &["minwinbase", "minwindef", "winnt"], &["kernel32"]),
     ("davclnt", &["minwindef", "winnt"], &["netapi32"]),
     ("dbghelp", &["basetsd", "guiddef", "minwindef", "vcruntime", "winnt"], &["dbghelp"]),
-    ("dcommon", &["dxgiformat"], &[]),
+    ("dbt", &["basetsd", "guiddef", "minwindef", "winnt", "winuser"], &[]),
+    ("dcommon", &["basetsd", "dxgiformat", "minwindef", "windef"], &[]),
     ("dcomp", &["d2d1", "d2d1_1", "d2d1effects", "d2dbasetypes", "d3d9types", "d3dcommon", "dcompanimation", "dcomptypes", "dxgi", "dxgi1_2", "dxgiformat", "guiddef", "minwinbase", "minwindef", "ntdef", "unknwnbase", "windef"], &["dcomp"]),
     ("dcompanimation", &["ntdef", "unknwnbase"], &[]),
     ("dde", &["basetsd", "minwindef"], &["user32"]),
     ("ddraw", &[], &[]),
     ("ddrawi", &[], &[]),
     ("ddrawint", &[], &[]),
     ("debugapi", &["minwinbase", "minwindef", "winnt"], &["kernel32"]),
+    ("devicetopology", &["guiddef", "minwindef", "unknwnbase", "windef", "winnt", "wtypes"], &[]),
     ("dinput", &[], &[]),
     ("dmksctl", &[], &[]),
     ("dmusicc", &[], &[]),
     ("docobj", &["guiddef", "minwindef", "oaidl", "unknwnbase", "winnt"], &[]),
     ("documenttarget", &["basetsd", "guiddef", "ntdef", "unknwnbase"], &[]),
     ("dpa_dsa", &["basetsd", "minwindef", "winnt"], &["comctl32"]),
     ("dpapi", &["minwindef", "wincrypt", "windef", "winnt"], &["crypt32"]),
     ("dsgetdc", &["guiddef", "minwindef", "ntsecapi", "winnt", "ws2def"], &["netapi32"]),
     ("dsound", &["guiddef", "minwindef", "mmsystem", "unknwnbase", "windef", "winerror", "winnt"], &["dsound"]),
     ("dsrole", &["guiddef", "minwindef", "winnt"], &["netapi32"]),
     ("dvp", &[], &[]),
-    ("dwmapi", &["minwindef", "windef", "winnt"], &["dwmapi"]),
+    ("dwmapi", &["basetsd", "minwindef", "uxtheme", "windef", "winnt"], &["dwmapi"]),
     ("dwrite", &["basetsd", "d2d1", "dcommon", "guiddef", "minwindef", "unknwnbase", "windef", "winerror", "wingdi", "winnt"], &["dwrite"]),
     ("dwrite_1", &["basetsd", "dcommon", "dwrite", "minwindef", "winnt"], &[]),
     ("dwrite_2", &["basetsd", "d3d9types", "dcommon", "dwrite", "dwrite_1", "minwindef", "unknwnbase", "winnt"], &[]),
     ("dwrite_3", &["basetsd", "dcommon", "dwrite", "dwrite_1", "dwrite_2", "minwindef", "unknwnbase", "wingdi", "winnt"], &[]),
     ("dxdiag", &[], &[]),
     ("dxfile", &[], &[]),
-    ("dxgidebug", &[], &[]),
+    ("dxgidebug", &["basetsd", "guiddef", "minwindef", "unknwnbase", "winnt"], &["dxgi"]),
+    ("dxva2api", &["basetsd", "d3d9", "d3d9types", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["dxva2"]),
+    ("dxvahd", &["d3d9", "d3d9types", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["dxva2"]),
+    ("endpointvolume", &["basetsd", "guiddef", "minwindef", "unknwnbase", "winnt"], &[]),
     ("errhandlingapi", &["basetsd", "minwindef", "winnt"], &["kernel32"]),
+    ("evntcons", &["basetsd", "evntprov", "evntrace", "guiddef", "minwindef", "winnt"], &["advapi32"]),
+    ("exdisp", &["basetsd", "docobj", "oaidl", "ocidl", "winnt", "wtypes"], &[]),
     ("fibersapi", &["minwindef", "winnt"], &["kernel32"]),
     ("fileapi", &["minwinbase", "minwindef", "winnt"], &["kernel32"]),
     ("gl-gl", &[], &["opengl32"]),
     ("handleapi", &["minwindef", "winnt"], &["kernel32"]),
     ("heapapi", &["basetsd", "minwinbase", "minwindef", "winnt"], &["kernel32"]),
+    ("highlevelmonitorconfigurationapi", &["minwindef", "physicalmonitorenumerationapi", "winnt"], &["dxva2"]),
     ("http", &["guiddef", "minwinbase", "minwindef", "sspi", "winnt", "ws2def"], &["winhttp"]),
-    ("imm", &[], &[]),
+    ("imm", &["minwindef", "windef"], &["imm32"]),
     ("interlockedapi", &["minwindef", "winnt"], &["kernel32"]),
     ("ioapiset", &["basetsd", "minwinbase", "minwindef", "winnt"], &["kernel32"]),
     ("jobapi", &["minwindef", "winnt"], &["kernel32"]),
     ("jobapi2", &["basetsd", "minwinbase", "minwindef", "ntdef", "winnt"], &["kernel32"]),
     ("knownfolders", &[], &[]),
     ("ktmw32", &["guiddef", "minwinbase", "minwindef", "winnt"], &["ktmw32"]),
     ("libloaderapi", &["basetsd", "minwindef", "winnt"], &["kernel32", "user32"]),
     ("lmaccess", &["basetsd", "lmcons", "minwindef", "winnt"], &["netapi32"]),
@@ -172,65 +204,74 @@ const DATA: &'static [(&'static str, &'s
     ("lmremutl", &["lmcons", "minwindef", "winnt"], &["netapi32"]),
     ("lmrepl", &["lmcons", "minwindef", "winnt"], &["netapi32"]),
     ("lmserver", &["guiddef", "lmcons", "minwindef", "winnt", "winsvc"], &["advapi32", "netapi32"]),
     ("lmshare", &["basetsd", "guiddef", "lmcons", "minwindef", "winnt"], &["netapi32"]),
     ("lmstats", &["lmcons", "minwindef", "winnt"], &["netapi32"]),
     ("lmsvc", &["lmcons", "minwindef", "winnt"], &["netapi32"]),
     ("lmuse", &["lmcons", "minwindef", "winnt"], &["netapi32"]),
     ("lmwksta", &["lmcons", "minwindef", "winnt"], &["netapi32"]),
-    ("lsalookup", &["guiddef", "minwindef", "winnt"], &[]),
+    ("lowlevelmonitorconfigurationapi", &["minwindef", "physicalmonitorenumerationapi", "winnt"], &["dxva2"]),
+    ("lsalookup", &["guiddef", "minwindef", "ntdef", "winnt"], &["advapi32"]),
     ("memoryapi", &["basetsd", "minwinbase", "minwindef", "winnt"], &["kernel32"]),
     ("minschannel", &["guiddef", "minwindef", "wincrypt", "winnt"], &[]),
     ("minwinbase", &["basetsd", "minwindef", "ntstatus", "winnt"], &[]),
     ("mmdeviceapi", &["guiddef", "minwindef", "propidl", "propsys", "unknwnbase", "winnt", "wtypes"], &["mmdevapi"]),
     ("mmeapi", &["basetsd", "imm", "minwindef", "mmsystem", "winnt"], &["winmm"]),
     ("mmsystem", &["basetsd", "minwindef", "mmreg", "winnt"], &[]),
     ("msaatext", &[], &[]),
     ("mscat", &["guiddef", "minwindef", "mssip", "wincrypt", "winnt"], &[]),
+    ("mschapp", &["basetsd", "minwindef", "winnt"], &["advapi32"]),
     ("mssip", &["guiddef", "minwindef", "mscat", "wincrypt", "winnt"], &["crypt32"]),
-    ("namedpipeapi", &["minwinbase", "minwindef", "winnt"], &["kernel32"]),
+    ("namedpipeapi", &["minwinbase", "minwindef", "winnt"], &["advapi32", "kernel32"]),
     ("namespaceapi", &["minwinbase", "minwindef", "ntdef", "winnt"], &["kernel32"]),
     ("nb30", &["minwindef", "winnt"], &["netapi32"]),
-    ("ncrypt", &["basetsd", "sspi"], &["ncrypt"]),
+    ("ncrypt", &["basetsd", "bcrypt", "minwindef", "winnt"], &["ncrypt"]),
+    ("ntlsa", &["basetsd", "guiddef", "lsalookup", "minwindef", "ntdef", "ntsecapi", "subauth", "winnt"], &["advapi32"]),
     ("ntsecapi", &["basetsd", "guiddef", "lsalookup", "minwindef", "ntdef", "sspi", "subauth", "winnt"], &["advapi32"]),
     ("oaidl", &["basetsd", "guiddef", "minwindef", "rpcndr", "unknwnbase", "winnt", "wtypes", "wtypesbase"], &[]),
     ("objbase", &["combaseapi", "minwindef", "winnt"], &["ole32"]),
-    ("objidl", &["basetsd", "guiddef", "minwindef", "objidlbase", "unknwnbase", "winnt", "wtypesbase"], &[]),
+    ("objidl", &["basetsd", "guiddef", "minwindef", "ntdef", "objidlbase", "unknwnbase", "windef", "winnt", "wtypes", "wtypesbase"], &[]),
     ("objidlbase", &["basetsd", "guiddef", "minwindef", "unknwnbase", "winnt", "wtypesbase"], &[]),
     ("ocidl", &["guiddef", "minwindef", "ntdef", "oaidl", "unknwnbase", "wtypes", "wtypesbase"], &[]),
+    ("ole2", &["minwindef", "oleidl", "windef", "winnt"], &["ole32"]),
     ("oleauto", &["basetsd", "minwinbase", "minwindef", "oaidl", "winnt", "wtypes", "wtypesbase"], &["oleaut32"]),
     ("olectl", &["winerror", "winnt"], &[]),
+    ("oleidl", &["minwindef", "ntdef", "objidl", "unknwnbase", "windef"], &[]),
+    ("opmapi", &["basetsd", "d3d9", "d3d9types", "dxva2api", "guiddef", "minwindef", "unknwnbase", "windef", "winnt"], &["dxva2"]),
     ("pdh", &["basetsd", "guiddef", "minwindef", "windef", "winnt"], &["pdh"]),
+    ("perflib", &["basetsd", "guiddef", "minwinbase", "minwindef", "winnt"], &["advapi32"]),
+    ("physicalmonitorenumerationapi", &["d3d9", "minwindef", "windef", "winnt"], &["dxva2"]),
     ("playsoundapi", &["minwindef", "winnt"], &["winmm"]),
     ("powerbase", &["minwindef", "winnt", "winuser"], &["powrprof"]),
     ("powersetting", &["guiddef", "minwindef", "winnt", "winuser"], &["powrprof"]),
     ("powrprof", &["guiddef", "minwindef", "winnt", "winreg"], &["powrprof"]),
     ("processenv", &["minwindef", "winnt"], &["kernel32"]),
     ("processsnapshot", &["basetsd", "minwindef", "winnt"], &["kernel32"]),
     ("processthreadsapi", &["basetsd", "guiddef", "minwinbase", "minwindef", "winnt"], &["advapi32", "kernel32"]),
     ("processtopologyapi", &["minwindef", "winnt"], &["kernel32"]),
     ("profileapi", &["minwindef", "winnt"], &["kernel32"]),
     ("propidl", &["minwindef", "wtypes"], &[]),
     ("propkeydef", &["guiddef", "wtypes"], &[]),
     ("propsys", &["minwindef", "propidl", "propkeydef", "unknwnbase", "winnt", "wtypes"], &[]),
     ("prsht", &["basetsd", "minwindef", "windef", "winnt", "winuser"], &["comctl32"]),
     ("psapi", &["basetsd", "minwindef", "winnt"], &["kernel32", "psapi"]),
     ("realtimeapiset", &["basetsd", "minwindef", "winnt"], &["kernel32"]),
     ("reason", &["minwindef"], &[]),
+    ("restartmanager", &["minwindef", "winnt"], &["rstrtmgr"]),
     ("restrictederrorinfo", &["unknwnbase", "winnt", "wtypes"], &[]),
     ("rmxfguid", &[], &[]),
     ("sapi", &["guiddef", "minwindef", "sapi53", "unknwnbase", "winnt"], &[]),
     ("sapi51", &["guiddef", "minwindef", "mmreg", "oaidl", "objidlbase", "rpcndr", "servprov", "unknwnbase", "windef", "winnt", "wtypes", "wtypesbase"], &[]),
     ("sapi53", &["guiddef", "minwindef", "oaidl", "sapi51", "unknwnbase", "urlmon", "winnt", "wtypes"], &[]),
     ("sapiddk", &["guiddef", "minwindef", "sapi", "sapiddk51", "unknwnbase", "winnt"], &[]),
     ("sapiddk51", &["guiddef", "minwindef", "mmreg", "oaidl", "objidlbase", "sapi", "unknwnbase", "windef", "winnt"], &[]),
     ("schannel", &["guiddef", "minwindef", "wincrypt", "windef", "winnt"], &[]),
     ("securityappcontainer", &["minwindef", "winnt"], &["kernel32"]),
-    ("securitybaseapi", &["minwindef", "winnt"], &["advapi32", "kernel32"]),
+    ("securitybaseapi", &["guiddef", "minwinbase", "minwindef", "winnt"], &["advapi32", "kernel32"]),
     ("servprov", &["guiddef", "unknwnbase", "winnt"], &[]),
     ("setupapi", &["basetsd", "commctrl", "devpropdef", "guiddef", "minwindef", "prsht", "spapidef", "windef", "winnt", "winreg"], &["setupapi"]),
     ("shellapi", &["basetsd", "guiddef", "minwinbase", "minwindef", "processthreadsapi", "windef", "winnt", "winuser"], &["shell32", "shlwapi"]),
     ("shellscalingapi", &["minwindef", "windef", "winnt"], &["shcore"]),
     ("shlobj", &["guiddef", "minwinbase", "minwindef", "shtypes", "windef", "winnt"], &["shell32"]),
     ("shobjidl", &["guiddef", "minwindef", "objidl", "propkeydef", "propsys", "shobjidl_core", "shtypes", "unknwnbase", "windef", "winnt"], &[]),
     ("shobjidl_core", &["guiddef", "minwindef", "objidl", "unknwnbase", "windef", "winnt"], &[]),
     ("shtypes", &["guiddef", "minwindef", "winnt"], &[]),
@@ -245,46 +286,50 @@ const DATA: &'static [(&'static str, &'s
     ("subauth", &["minwindef", "winnt"], &[]),
     ("synchapi", &["basetsd", "minwinbase", "minwindef", "winnt"], &["kernel32", "synchronization"]),
     ("sysinfoapi", &["basetsd", "minwinbase", "minwindef", "winnt"], &["kernel32"]),
     ("systemtopologyapi", &["minwindef", "winnt"], &["kernel32"]),
     ("textstor", &[], &[]),
     ("threadpoolapiset", &["basetsd", "minwinbase", "minwindef", "winnt"], &["kernel32"]),
     ("threadpoollegacyapiset", &["minwinbase", "minwindef", "winnt"], &["kernel32"]),
     ("timeapi", &["minwindef", "mmsystem"], &["winmm"]),
-    ("timezoneapi", &["minwinbase", "minwindef", "winnt"], &["kernel32"]),
+    ("timezoneapi", &["minwinbase", "minwindef", "winnt"], &["advapi32", "kernel32"]),
     ("tlhelp32", &["basetsd", "minwindef", "winnt"], &["kernel32"]),
     ("unknwnbase", &["guiddef", "minwindef", "winnt"], &[]),
     ("urlhist", &["docobj", "guiddef", "minwindef", "unknwnbase", "winnt", "wtypesbase"], &[]),
     ("urlmon", &["minwindef", "unknwnbase", "winnt"], &[]),
-    ("userenv", &["minwindef", "winnt"], &["userenv"]),
+    ("userenv", &["minwindef", "winnt", "winreg"], &["userenv"]),
     ("usp10", &["minwindef", "ntdef", "windef", "winerror", "wingdi", "winnt"], &["usp10"]),
     ("utilapiset", &["minwindef", "ntdef"], &["kernel32"]),
+    ("uxtheme", &["commctrl", "minwindef", "windef", "wingdi", "winnt"], &["uxtheme"]),
     ("vsbackup", &["guiddef", "minwindef", "unknwnbase", "vss", "vswriter", "winnt", "wtypes"], &["vssapi"]),
     ("vss", &["guiddef", "minwindef", "unknwnbase", "winnt"], &[]),
     ("vsserror", &["winnt"], &[]),
     ("vswriter", &["minwindef", "unknwnbase", "vss", "winnt", "wtypes"], &[]),
-    ("werapi", &["minwindef", "winnt"], &["kernel32"]),
+    ("wct", &["basetsd", "guiddef", "minwindef", "winnt"], &["advapi32"]),
+    ("werapi", &["minwindef", "winnt"], &["kernel32", "wer"]),
     ("winbase", &["basetsd", "cfgmgr32", "fileapi", "guiddef", "libloaderapi", "minwinbase", "minwindef", "processthreadsapi", "vadefs", "windef", "winnt"], &["kernel32"]),
     ("wincodec", &["basetsd", "d2d1", "d2d1_1", "dcommon", "dxgiformat", "dxgitype", "guiddef", "minwindef", "ntdef", "objidlbase", "ocidl", "propidl", "unknwnbase", "windef", "winerror", "winnt"], &["windowscodecs"]),
     ("wincodecsdk", &["guiddef", "minwindef", "oaidl", "objidl", "objidlbase", "ocidl", "propidl", "unknwnbase", "wincodec", "winnt", "wtypes"], &["ole32", "oleaut32", "windowscodecs"]),
     ("wincon", &["minwinbase", "minwindef", "windef", "wingdi", "winnt"], &["kernel32"]),
     ("wincred", &["minwindef", "sspi", "windef", "winnt"], &["advapi32", "credui"]),
     ("wincrypt", &["basetsd", "bcrypt", "guiddef", "minwinbase", "minwindef", "ncrypt", "vcruntime", "winnt"], &["advapi32", "crypt32", "cryptnet"]),
     ("windowsceip", &["minwindef"], &["kernel32"]),
+    ("winefs", &["basetsd", "minwinbase", "minwindef", "wincrypt", "winnt"], &["advapi32"]),
     ("winevt", &["basetsd", "guiddef", "minwinbase", "minwindef", "vcruntime", "winnt"], &["wevtapi"]),
     ("wingdi", &["basetsd", "minwindef", "windef", "winnt"], &["gdi32", "msimg32", "opengl32", "winspool"]),
     ("winhttp", &["basetsd", "minwinbase", "minwindef", "winnt"], &["winhttp"]),
     ("wininet", &["basetsd", "minwinbase", "minwindef", "ntdef", "windef", "winineti", "winnt"], &["wininet"]),
     ("winineti", &["minwindef"], &[]),
-    ("winioctl", &["devpropdef", "minwindef", "winnt"], &[]),
+    ("winioctl", &["basetsd", "devpropdef", "guiddef", "minwindef", "winnt"], &[]),
     ("winnetwk", &["basetsd", "minwindef", "windef", "winerror", "winnt"], &["mpr"]),
     ("winnls", &["basetsd", "guiddef", "minwinbase", "minwindef", "winnt"], &["kernel32"]),
     ("winnt", &["basetsd", "excpt", "guiddef", "ktmtypes", "minwindef", "vcruntime"], &["kernel32"]),
     ("winreg", &["basetsd", "minwinbase", "minwindef", "winnt"], &["advapi32"]),
+    ("winsafer", &["basetsd", "guiddef", "minwindef", "wincrypt", "windef", "winnt"], &["advapi32"]),
     ("winscard", &["basetsd", "guiddef", "minwindef", "rpcdce", "windef", "winnt", "winsmcrd"], &["winscard"]),
     ("winsmcrd", &["minwindef", "winioctl"], &[]),
     ("winsock2", &["basetsd", "guiddef", "inaddr", "minwinbase", "minwindef", "qos", "winbase", "windef", "winerror", "winnt", "ws2def", "wtypesbase"], &["ws2_32"]),
     ("winspool", &["guiddef", "minwinbase", "minwindef", "vcruntime", "windef", "winerror", "wingdi", "winnt"], &["winspool"]),
     ("winsvc", &["minwindef", "winnt"], &["advapi32"]),
     ("winusb", &["minwinbase", "minwindef", "usb", "usbspec", "winnt", "winusbio"], &["winusb"]),
     ("winuser", &["basetsd", "guiddef", "limits", "minwinbase", "minwindef", "vadefs", "windef", "wingdi", "winnt"], &["user32"]),
     ("winver", &["minwindef", "winnt"], &["kernel32", "version"]),
@@ -360,21 +405,23 @@ impl Graph {
     fn emit_features(&self) {
         for (name, header) in &self.0 {
             if header.included.get() && !header.required {
                 println!("cargo:rustc-cfg=feature=\"{}\"", name);
             }
         }
     }
     fn emit_libraries(&self) {
-        let libs = self.0.iter().filter(|&(_, header)| {
+        let mut libs = self.0.iter().filter(|&(_, header)| {
             header.included.get()
         }).flat_map(|(_, header)| {
             header.libraries.iter()
-        }).collect::<HashSet<_>>();
+        }).collect::<Vec<_>>();
+        libs.sort();
+        libs.dedup();
         let prefix = library_prefix();
         let kind = library_kind();
         for lib in libs {
             println!("cargo:rustc-link-lib={}={}{}", kind, prefix, lib);
         }
     }
 }
 fn library_prefix() -> &'static str {
@@ -397,16 +444,17 @@ fn try_everything() {
     let mut graph = Graph::generate();
     graph.identify_required();
     graph.check_everything();
     graph.resolve_dependencies();
     graph.emit_features();
     graph.emit_libraries();
 }
 fn main() {
+    println!("cargo:rerun-if-changed=build.rs");
     println!("cargo:rerun-if-env-changed=WINAPI_NO_BUNDLED_LIBRARIES");
     println!("cargo:rerun-if-env-changed=WINAPI_STATIC_NOBUNDLE");
     let target = var("TARGET").unwrap();
     let target: Vec<_> = target.split('-').collect();
     if target.get(2) == Some(&"windows") {
         try_everything();
     }
 }
--- a/third_party/rust/winapi/src/lib.rs
+++ b/third_party/rust/winapi/src/lib.rs
@@ -1,19 +1,21 @@
 // Copyright © 2016-2017 winapi-rs developers
 // Licensed under the Apache License, Version 2.0
 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
 // All files in the project carrying such notice may not be copied, modified, or distributed
 // except according to those terms.
 #![cfg(windows)]
 #![deny(unused, unused_qualifications)]
+#![warn(unused_attributes)]
 #![allow(bad_style, overflowing_literals, unused_macros)]
-#![recursion_limit = "128"]
+#![recursion_limit = "2563"]
 #![no_std]
+#![cfg_attr(feature = "cargo-clippy", allow(absurd_extreme_comparisons, cast_lossless, cast_ptr_alignment, const_static_lifetime, erasing_op, excessive_precision, identity_op, many_single_char_names, module_inception, too_many_arguments, transmute_int_to_float, unreadable_literal, unseparated_literal_suffix))]
 
 #[cfg(feature = "std")]
 extern crate std;
 
 /// Hack for exported macros
 #[doc(hidden)]
 pub extern crate core as _core;
 
@@ -49,11 +51,18 @@ pub mod ctypes {
     pub type __int16 = i16;
     pub type __uint16 = u16;
     pub type __int32 = i32;
     pub type __uint32 = u32;
     pub type __int64 = i64;
     pub type __uint64 = u64;
     pub type wchar_t = u16;
 }
+// This trait should be implemented for all COM interfaces
 pub trait Interface {
+    // Returns the IID of the Interface
     fn uuidof() -> shared::guiddef::GUID;
 }
+// This trait should be implemented for all COM classes
+pub trait Class {
+    // Returns the CLSID of the Class
+    fn uuidof() -> shared::guiddef::GUID;
+}
--- a/third_party/rust/winapi/src/macros.rs
+++ b/third_party/rust/winapi/src/macros.rs
@@ -124,16 +124,32 @@ macro_rules! BCRYPT_MAKE_INTERFACE_VERSI
         }
     }
 }
 macro_rules! MAKEINTRESOURCE {
     ($i:expr) => { $i as u16 as usize as LPWSTR }
 }
 #[macro_export]
 macro_rules! RIDL {
+    (#[uuid($l:expr, $w1:expr, $w2:expr,
+        $b1:expr, $b2:expr, $b3:expr, $b4:expr, $b5:expr, $b6:expr, $b7:expr, $b8:expr)]
+    class $class:ident;) => (
+        pub enum $class {}
+        impl $crate::Class for $class {
+            #[inline]
+            fn uuidof() -> $crate::shared::guiddef::GUID {
+                $crate::shared::guiddef::GUID {
+                    Data1: $l,
+                    Data2: $w1,
+                    Data3: $w2,
+                    Data4: [$b1, $b2, $b3, $b4, $b5, $b6, $b7, $b8],
+                }
+            }
+        }
+    );
     (#[uuid($($uuid:expr),+)]
     interface $interface:ident ($vtbl:ident) {$(
         $(#[$($attrs:tt)*])* fn $method:ident($($p:ident : $t:ty,)*) -> $rtr:ty,
     )+}) => (
         RIDL!{@vtbl $interface $vtbl () $(
             $(#[$($attrs)*])* fn $method($($p: $t,)*) -> $rtr,
         )+}
         #[repr(C)]
@@ -254,16 +270,21 @@ macro_rules! UNION {
     }) => (
         #[repr(C)] $(#[$attrs])*
         pub struct $name([$stype; $ssize]);
         impl Copy for $name {}
         impl Clone for $name {
             #[inline]
             fn clone(&self) -> $name { *self }
         }
+        #[cfg(feature = "impl-default")]
+        impl Default for $name {
+            #[inline]
+            fn default() -> $name { unsafe { $crate::_core::mem::zeroed() } }
+        }
         impl $name {$(
             #[inline]
             pub unsafe fn $variant(&self) -> &$ftype {
                 &*(self as *const _ as *const $ftype)
             }
             #[inline]
             pub unsafe fn $variant_mut(&mut self) -> &mut $ftype {
                 &mut *(self as *mut _ as *mut $ftype)
@@ -278,16 +299,21 @@ macro_rules! UNION {
         pub struct $name([$stype32; $ssize32]);
         #[repr(C)] $(#[$attrs])* #[cfg(target_arch = "x86_64")]
         pub struct $name([$stype64; $ssize64]);
         impl Copy for $name {}
         impl Clone for $name {
             #[inline]
             fn clone(&self) -> $name { *self }
         }
+        #[cfg(feature = "impl-default")]
+        impl Default for $name {
+            #[inline]
+            fn default() -> $name { unsafe { $crate::_core::mem::zeroed() } }
+        }
         impl $name {$(
             #[inline]
             pub unsafe fn $variant(&self) -> &$ftype {
                 &*(self as *const _ as *const $ftype)
             }
             #[inline]
             pub unsafe fn $variant_mut(&mut self) -> &mut $ftype {
                 &mut *(self as *mut _ as *mut $ftype)
@@ -341,25 +367,29 @@ macro_rules! ENUM {
 #[macro_export]
 macro_rules! STRUCT {
     (#[debug] $($rest:tt)*) => (
         STRUCT!{#[cfg_attr(feature = "debug", derive(Debug))] $($rest)*}
     );
     ($(#[$attrs:meta])* struct $name:ident {
         $($field:ident: $ftype:ty,)+
     }) => (
-        #[repr(C)] $(#[$attrs])*
+        #[repr(C)] #[derive(Copy)] $(#[$attrs])*
         pub struct $name {
             $(pub $field: $ftype,)+
         }
-        impl Copy for $name {}
         impl Clone for $name {
             #[inline]
             fn clone(&self) -> $name { *self }
         }
+        #[cfg(feature = "impl-default")]
+        impl Default for $name {
+            #[inline]
+            fn default() -> $name { unsafe { $crate::_core::mem::zeroed() } }
+        }
     );
 }
 macro_rules! IFDEF {
     ($($thing:item)*) => ($($thing)*)
 }
 macro_rules! FN {
     (stdcall $func:ident($($t:ty,)*) -> $ret:ty) => (
         pub type $func = Option<unsafe extern "system" fn($($t,)*) -> $ret>;
--- a/third_party/rust/winapi/src/shared/d3d9.rs
+++ b/third_party/rust/winapi/src/shared/d3d9.rs
@@ -95,17 +95,17 @@ extern "system" {
         wszName: LPCWSTR,
     ) -> ();
     pub fn D3DPERF_QueryRepeatFrame() -> BOOL;
     pub fn D3DPERF_SetOptions(
         dwOptions: DWORD,
     ) -> ();
     pub fn D3DPERF_GetStatus() -> DWORD;
 }
-RIDL!(#[uuid(0x81bdcbca, 0x64d4, 0x426d, 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c)]
+RIDL!{#[uuid(0x81bdcbca, 0x64d4, 0x426d, 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c)]
 interface IDirect3D9(IDirect3D9Vtbl): IUnknown(IUnknownVtbl) {
     fn RegisterSoftwareDevice(
         pInitializeFunction: *mut VOID,
     ) -> HRESULT,
     fn GetAdapterCount() -> UINT,
     fn GetAdapterIdentifier(
         Adapter: UINT,
         Flags: DWORD,
@@ -172,21 +172,20 @@ interface IDirect3D9(IDirect3D9Vtbl): IU
     fn CreateDevice(
         Adapter: UINT,
         DeviceType: D3DDEVTYPE,
         hFocusWindow: HWND,
         BehaviorFlags: DWORD,
         pPresentationParameters: *mut D3DPRESENT_PARAMETERS,
         ppReturnedDeviceInterface: *mut *mut IDirect3DDevice9,
     ) -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3D9 = *mut IDirect3D9;
 pub type PDIRECT3D9 = *mut IDirect3D9;
-RIDL!(#[uuid(0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb)]
+RIDL!{#[uuid(0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb)]
 interface IDirect3DDevice9(IDirect3DDevice9Vtbl): IUnknown(IUnknownVtbl) {
     fn TestCooperativeLevel() -> HRESULT,
     fn GetAvailableTextureMem() -> UINT,
     fn EvictManagedResources() -> HRESULT,
     fn GetDirect3D(
         ppD3D9: *mut *mut IDirect3D9,
     ) -> HRESULT,
     fn GetDeviceCaps(
@@ -680,32 +679,30 @@ interface IDirect3DDevice9(IDirect3DDevi
     ) -> HRESULT,
     fn DeletePatch(
         Handle: UINT,
     ) -> HRESULT,
     fn CreateQuery(
         Type: D3DQUERYTYPE,
         ppQuery: *mut *mut IDirect3DQuery9,
     ) -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3DDEVICE9 = *mut IDirect3DDevice9;
 pub type PDIRECT3DDEVICE9 = *mut IDirect3DDevice9;
-RIDL!(#[uuid(0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b)]
+RIDL!{#[uuid(0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b)]
 interface IDirect3DStateBlock9(IDirect3DStateBlock9Vtbl): IUnknown(IUnknownVtbl) {
     fn GetDevice(
         ppDevice: *mut *mut IDirect3DDevice9,
     ) -> HRESULT,
     fn Capture() -> HRESULT,
     fn Apply() -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3DSTATEBLOCK9 = *mut IDirect3DStateBlock9;
 pub type PDIRECT3DSTATEBLOCK9 = *mut IDirect3DStateBlock9;
-RIDL!(#[uuid(0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b)]
+RIDL!{#[uuid(0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b)]
 interface IDirect3DSwapChain9(IDirect3DSwapChain9Vtbl): IUnknown(IUnknownVtbl) {
     fn Present(
         pSourceRect: *const RECT,
         pDestRect: *const RECT,
         hDestWindowOverride: HWND,
         pDirtyRegion: *const RGNDATA,
         dwFlags: DWORD,
     ) -> HRESULT,
@@ -724,21 +721,20 @@ interface IDirect3DSwapChain9(IDirect3DS
         pMode: *mut D3DDISPLAYMODE,
     ) -> HRESULT,
     fn GetDevice(
         ppDevice: *mut *mut IDirect3DDevice9,
     ) -> HRESULT,
     fn GetPresentParameters(
         pPresentationParameters: *mut D3DPRESENT_PARAMETERS,
     ) -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3DSWAPCHAIN9 = *mut IDirect3DSwapChain9;
 pub type PDIRECT3DSWAPCHAIN9 = *mut IDirect3DSwapChain9;
-RIDL!(#[uuid(0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4)]
+RIDL!{#[uuid(0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4)]
 interface IDirect3DResource9(IDirect3DResource9Vtbl): IUnknown(IUnknownVtbl) {
     fn GetDevice(
         ppDevice: *mut *mut IDirect3DDevice9,
     ) -> HRESULT,
     fn SetPrivateData(
         refguid: *const GUID,
         pData: *const VOID,
         SizeOfData: DWORD,
@@ -753,57 +749,53 @@ interface IDirect3DResource9(IDirect3DRe
         refguid: *const GUID,
     ) -> HRESULT,
     fn SetPriority(
         PriorityNew: DWORD,
     ) -> DWORD,
     fn GetPriority() -> DWORD,
     fn PreLoad() -> (),
     fn GetType() -> D3DRESOURCETYPE,
-}
-);
+}}
 pub type LPDIRECT3DRESOURCE9 = *mut IDirect3DResource9;
 pub type PDIRECT3DRESOURCE9 = *mut IDirect3DResource9;
-RIDL!(#[uuid(0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46)]
+RIDL!{#[uuid(0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46)]
 interface IDirect3DVertexDeclaration9(IDirect3DVertexDeclaration9Vtbl): IUnknown(IUnknownVtbl) {
     fn GetDevice(
         ppDevice: *mut *mut IDirect3DDevice9,
     ) -> HRESULT,
     fn GetDeclaration(
         pElement: *mut D3DVERTEXELEMENT9,
         pNumElements: *mut UINT,
     ) -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3DVERTEXDECLARATION9 = *mut IDirect3DVertexDeclaration9;
 pub type PDIRECT3DVERTEXDECLARATION9 = *mut IDirect3DVertexDeclaration9;
-RIDL!(#[uuid(0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36)]
+RIDL!{#[uuid(0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36)]
 interface IDirect3DVertexShader9(IDirect3DVertexShader9Vtbl): IUnknown(IUnknownVtbl) {
     fn GetDevice(
         ppDevice: *mut *mut IDirect3DDevice9,
     ) -> HRESULT,
     fn GetFunction(
         arg1: *mut VOID,
         pSizeOfData: *mut UINT,
     ) -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3DVERTEXSHADER9 = *mut IDirect3DVertexShader9;
 pub type PDIRECT3DVERTEXSHADER9 = *mut IDirect3DVertexShader9;
-RIDL!(#[uuid(0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89)]
+RIDL!{#[uuid(0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89)]
 interface IDirect3DPixelShader9(IDirect3DPixelShader9Vtbl): IUnknown(IUnknownVtbl) {
     fn GetDevice(
         ppDevice: *mut *mut IDirect3DDevice9,
     ) -> HRESULT,
     fn GetFunction(
         arg1: *mut VOID,
         pSizeOfData: *mut UINT,
     ) -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3DPIXELSHADER9 = *mut IDirect3DPixelShader9;
 pub type PDIRECT3DPIXELSHADER9 = *mut IDirect3DPixelShader9;
 RIDL!{#[uuid(0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce)]
 interface IDirect3DBaseTexture9(IDirect3DBaseTexture9Vtbl):
     IDirect3DResource9(IDirect3DResource9Vtbl) {
     fn SetLOD(
         LODNew: DWORD,
     ) -> DWORD,
@@ -1199,17 +1191,17 @@ interface IDirect3DDevice9Video(IDirect3
         pCryptoType: *const GUID,
         pDecodeProfile: *const GUID,
         ppCryptoSession: *mut *mut IDirect3DCryptoSession9,
         pCryptoHandle: *mut HANDLE,
     ) -> HRESULT,
 }}
 pub type LPDIRECT3DDEVICE9VIDEO = *mut IDirect3DDevice9Video;
 pub type PDIRECT3DDEVICE9VIDEO = *mut IDirect3DDevice9Video;
-RIDL!(#[uuid(0xff24beee, 0xda21, 0x4beb, 0x98, 0xb5, 0xd2, 0xf8, 0x99, 0xf9, 0x8a, 0xf9)]
+RIDL!{#[uuid(0xff24beee, 0xda21, 0x4beb, 0x98, 0xb5, 0xd2, 0xf8, 0x99, 0xf9, 0x8a, 0xf9)]
 interface IDirect3DAuthenticatedChannel9(IDirect3DAuthenticatedChannel9Vtbl):
     IUnknown(IUnknownVtbl) {
     fn GetCertificateSize(
         pCertificateSize: *mut UINT,
     ) -> HRESULT,
     fn GetCertificate(
         CertifacteSize: UINT,
         ppCertificate: *mut BYTE,
@@ -1224,21 +1216,20 @@ interface IDirect3DAuthenticatedChannel9
         OutputSize: UINT,
         pOutput: *mut VOID,
     ) -> HRESULT,
     fn Configure(
         InputSize: UINT,
         pInput: *const VOID,
         pOutput: *mut D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT,
     ) -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3DAUTHENTICATEDCHANNEL9 = *mut IDirect3DAuthenticatedChannel9;
 pub type PDIRECT3DAUTHENTICATEDCHANNEL9 = *mut IDirect3DAuthenticatedChannel9;
-RIDL!(#[uuid(0xfa0ab799, 0x7a9c, 0x48ca, 0x8c, 0x5b, 0x23, 0x7e, 0x71, 0xa5, 0x44, 0x34)]
+RIDL!{#[uuid(0xfa0ab799, 0x7a9c, 0x48ca, 0x8c, 0x5b, 0x23, 0x7e, 0x71, 0xa5, 0x44, 0x34)]
 interface IDirect3DCryptoSession9(IDirect3DCryptoSession9Vtbl): IUnknown(IUnknownVtbl) {
     fn GetCertificateSize(
         pCertificateSize: *mut UINT,
     ) -> HRESULT,
     fn GetCertificate(
         CertifacteSize: UINT,
         ppCertificate: *mut BYTE,
     ) -> HRESULT,
@@ -1268,12 +1259,11 @@ interface IDirect3DCryptoSession9(IDirec
         pRandomNumber: *mut VOID,
         RandomNumberSize: UINT,
     ) -> HRESULT,
     fn FinishSessionKeyRefresh() -> HRESULT,
     fn GetEncryptionBltKey(
         pReadbackKey: *mut VOID,
         KeySize: UINT,
     ) -> HRESULT,
-}
-);
+}}
 pub type LPDIRECT3DCRYPTOSESSION9 = *mut IDirect3DCryptoSession9;
 pub type PDIRECT3DCRYPTOSESSION9 = *mut IDirect3DCryptoSession9;
--- a/third_party/rust/winapi/src/shared/d3d9types.rs
+++ b/third_party/rust/winapi/src/shared/d3d9types.rs
@@ -7,16 +7,45 @@
 //! Direct3D capabilities include file
 use ctypes::{c_char, c_float, c_void};
 use shared::basetsd::UINT64;
 use shared::guiddef::GUID;
 use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, UINT, USHORT, WORD};
 use shared::windef::HWND;
 use um::winnt::{HANDLE, HRESULT, LARGE_INTEGER, LONG, SHORT};
 pub type D3DCOLOR = DWORD;
+#[inline]
+pub fn D3DCOLOR_ARGB(a: DWORD, r: DWORD, g: DWORD, b: DWORD) -> D3DCOLOR {
+    (((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff)) as D3DCOLOR
+}
+#[inline]
+pub fn D3DCOLOR_RGBA(r: DWORD, g: DWORD, b: DWORD, a: DWORD) -> D3DCOLOR {
+    D3DCOLOR_ARGB(a, r, g, b)
+}
+#[inline]
+pub fn D3DCOLOR_XRGB(r: DWORD, g: DWORD, b: DWORD) -> D3DCOLOR {
+    D3DCOLOR_ARGB(0xff, r, g, b)
+}
+#[inline]
+pub fn D3DCOLOR_XYUV(y: DWORD, u: DWORD, v: DWORD) -> D3DCOLOR {
+    D3DCOLOR_ARGB(0xff, y, u, v)
+}
+#[inline]
+pub fn D3DCOLOR_AYUV(a: DWORD, y: DWORD, u: DWORD, v: DWORD) -> D3DCOLOR {
+    D3DCOLOR_ARGB(a, y, u, v)
+}
+#[inline]
+pub fn D3DCOLOR_COLORVALUE(r: f32, g: f32, b: f32, a: f32) -> D3DCOLOR {
+    D3DCOLOR_ARGB(
+        (r * 255f32) as DWORD,
+        (g * 255f32) as DWORD,
+        (b * 255f32) as DWORD,
+        (a * 255f32) as DWORD,
+    )
+}
 STRUCT!{struct D3DVECTOR {
     x: c_float,
     y: c_float,
     z: c_float,
 }}
 STRUCT!{struct D3DCOLORVALUE {
     r: c_float,
     g: c_float,
--- a/third_party/rust/winapi/src/shared/dxgi.rs
+++ b/third_party/rust/winapi/src/shared/dxgi.rs
@@ -77,28 +77,30 @@ ENUM!{enum DXGI_SWAP_CHAIN_FLAG {
     DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 4,
     DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT = 8,
     DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER = 16,
     DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY = 32,
     DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT = 64,
     DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER = 128,
     DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO = 256,
     DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO = 512,
+    DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED = 1024,
+    DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING = 2048,
 }}
 STRUCT!{struct DXGI_SWAP_CHAIN_DESC {
     BufferDesc: DXGI_MODE_DESC,
     SampleDesc: DXGI_SAMPLE_DESC,
     BufferUsage: DXGI_USAGE,
     BufferCount: UINT,
     OutputWindow: HWND,
     Windowed: BOOL,
     SwapEffect: DXGI_SWAP_EFFECT,
     Flags: UINT,
 }}
-RIDL!(#[uuid(0xaec22fb8, 0x76f3, 0x4639, 0x9b, 0xe0, 0x28, 0xeb, 0x43, 0xa6, 0x7a, 0x2e)]
+RIDL!{#[uuid(0xaec22fb8, 0x76f3, 0x4639, 0x9b, 0xe0, 0x28, 0xeb, 0x43, 0xa6, 0x7a, 0x2e)]
 interface IDXGIObject(IDXGIObjectVtbl): IUnknown(IUnknownVtbl) {
     fn SetPrivateData(
         Name: REFGUID,
         DataSize: UINT,
         pData: *const c_void,
     ) -> HRESULT,
     fn SetPrivateDataInterface(
         Name: REFGUID,
@@ -108,85 +110,88 @@ interface IDXGIObject(IDXGIObjectVtbl): 
         Name: REFGUID,
         pDataSize: *mut UINT,
         pData: *mut c_void,
     ) -> HRESULT,
     fn GetParent(
         riid: REFIID,
         ppParent: *mut *mut c_void,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x3d3e0379, 0xf9de, 0x4d58, 0xbb, 0x6c, 0x18, 0xd6, 0x29, 0x92, 0xf1, 0xa6)]
+}}
+RIDL!{#[uuid(0x3d3e0379, 0xf9de, 0x4d58, 0xbb, 0x6c, 0x18, 0xd6, 0x29, 0x92, 0xf1, 0xa6)]
 interface IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl): IDXGIObject(IDXGIObjectVtbl) {
     fn GetDevice(
         riid: REFIID,
         ppDevice: *mut *mut c_void,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x035f3ab4, 0x482e, 0x4e50, 0xb4, 0x1f, 0x8a, 0x7f, 0x8b, 0xd8, 0x96, 0x0b)]
+}}
+RIDL!{#[uuid(0x035f3ab4, 0x482e, 0x4e50, 0xb4, 0x1f, 0x8a, 0x7f, 0x8b, 0xd8, 0x96, 0x0b)]
 interface IDXGIResource(IDXGIResourceVtbl): IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl) {
     fn GetSharedHandle(
         pSharedHandle: *mut HANDLE,
     ) -> HRESULT,
     fn GetUsage(
         pUsage: *mut DXGI_USAGE,
     ) -> HRESULT,
     fn SetEvictionPriority(
         EvictionPriority: UINT,
     ) -> HRESULT,
     fn GetEvictionPriority(
         pEvictionPriority: *mut UINT,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x9d8e1289, 0xd7b3, 0x465f, 0x81, 0x26, 0x25, 0x0e, 0x34, 0x9a, 0xf8, 0x5d)]
+}}
+RIDL!{#[uuid(0x9d8e1289, 0xd7b3, 0x465f, 0x81, 0x26, 0x25, 0x0e, 0x34, 0x9a, 0xf8, 0x5d)]
 interface IDXGIKeyedMutex(IDXGIKeyedMutexVtbl): IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl) {
     fn AcquireSync(
         Key: UINT64,
         dwMilliseconds: DWORD,
     ) -> HRESULT,
     fn ReleaseSync(
         Key: UINT64,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0xcafcb56c, 0x6ac3, 0x4889, 0xbf, 0x47, 0x9e, 0x23, 0xbb, 0xd2, 0x60, 0xec)]
+}}
+pub const DXGI_MAP_READ: UINT = 1;
+pub const DXGI_MAP_WRITE: UINT = 2;
+pub const DXGI_MAP_DISCARD: UINT = 4;
+RIDL!{#[uuid(0xcafcb56c, 0x6ac3, 0x4889, 0xbf, 0x47, 0x9e, 0x23, 0xbb, 0xd2, 0x60, 0xec)]
 interface IDXGISurface(IDXGISurfaceVtbl): IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl) {
     fn GetDesc(
         pDesc: *mut DXGI_SURFACE_DESC,
     ) -> HRESULT,
     fn Map(
         pLockedRect: *mut DXGI_MAPPED_RECT,
         MapFlags: UINT,
     ) -> HRESULT,
     fn Unmap() -> HRESULT,
-});
-RIDL!(#[uuid(0x4ae63092, 0x6327, 0x4c1b, 0x80, 0xae, 0xbf, 0xe1, 0x2e, 0xa3, 0x2b, 0x86)]
+}}
+RIDL!{#[uuid(0x4ae63092, 0x6327, 0x4c1b, 0x80, 0xae, 0xbf, 0xe1, 0x2e, 0xa3, 0x2b, 0x86)]
 interface IDXGISurface1(IDXGISurface1Vtbl): IDXGISurface(IDXGISurfaceVtbl) {
     fn GetDC(
         Discard: BOOL,
         phdc: *mut HDC,
     ) -> HRESULT,
     fn ReleaseDC(
         pDirtyRect: *mut RECT,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x2411e7e1, 0x12ac, 0x4ccf, 0xbd, 0x14, 0x97, 0x98, 0xe8, 0x53, 0x4d, 0xc0)]
+}}
+RIDL!{#[uuid(0x2411e7e1, 0x12ac, 0x4ccf, 0xbd, 0x14, 0x97, 0x98, 0xe8, 0x53, 0x4d, 0xc0)]
 interface IDXGIAdapter(IDXGIAdapterVtbl): IDXGIObject(IDXGIObjectVtbl) {
     fn EnumOutputs(
         Output: UINT,
         ppOutput: *mut *mut IDXGIOutput,
     ) -> HRESULT,
     fn GetDesc(
         pDesc: *mut DXGI_ADAPTER_DESC,
     ) -> HRESULT,
     fn CheckInterfaceSupport(
         InterfaceName: REFGUID,
         pUMDVersion: *mut LARGE_INTEGER,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0xae02eedb, 0xc735, 0x4690, 0x8d, 0x52, 0x5a, 0x8d, 0xc2, 0x02, 0x13, 0xaa)]
+}}
+RIDL!{#[uuid(0xae02eedb, 0xc735, 0x4690, 0x8d, 0x52, 0x5a, 0x8d, 0xc2, 0x02, 0x13, 0xaa)]
 interface IDXGIOutput(IDXGIOutputVtbl): IDXGIObject(IDXGIObjectVtbl) {
     fn GetDesc(
         pDesc: *mut DXGI_OUTPUT_DESC,
     ) -> HRESULT,
     fn GetDisplayModeList(
         EnumFormat: DXGI_FORMAT,
         Flags: UINT,
         pNumModes: *mut UINT,
@@ -216,27 +221,30 @@ interface IDXGIOutput(IDXGIOutputVtbl): 
         pScanoutSurface: *mut IDXGISurface,
     ) -> HRESULT,
     fn GetDisplaySurfaceData(
         pDestination: *mut IDXGISurface,
     ) -> HRESULT,
     fn GetFrameStatistics(
         pStats: *mut DXGI_FRAME_STATISTICS,
     ) -> HRESULT,
-});
+}}
 pub const DXGI_MAX_SWAP_CHAIN_BUFFERS: DWORD = 16;
 pub const DXGI_PRESENT_TEST: DWORD = 0x00000001;
 pub const DXGI_PRESENT_DO_NOT_SEQUENCE: DWORD = 0x00000002;
 pub const DXGI_PRESENT_RESTART: DWORD = 0x00000004;
 pub const DXGI_PRESENT_DO_NOT_WAIT: DWORD = 0x00000008;
 pub const DXGI_PRESENT_STEREO_PREFER_RIGHT: DWORD = 0x00000010;
 pub const DXGI_PRESENT_STEREO_TEMPORARY_MONO: DWORD = 0x00000020;
 pub const DXGI_PRESENT_RESTRICT_TO_OUTPUT: DWORD = 0x00000040;
 pub const DXGI_PRESENT_USE_DURATION: DWORD = 0x00000100;
-RIDL!(#[uuid(0x310d36a0, 0xd2e7, 0x4c0a, 0xaa, 0x04, 0x6a, 0x9d, 0x23, 0xb8, 0x88, 0x6a)]
+pub const DXGI_PRESENT_ALLOW_TEARING: DWORD = 0x00000200;
+pub const DXGI_ENUM_MODES_INTERLACED: UINT = 1;
+pub const DXGI_ENUM_MODES_SCALING: UINT = 2;
+RIDL!{#[uuid(0x310d36a0, 0xd2e7, 0x4c0a, 0xaa, 0x04, 0x6a, 0x9d, 0x23, 0xb8, 0x88, 0x6a)]
 interface IDXGISwapChain(IDXGISwapChainVtbl): IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl) {
     fn Present(
         SyncInterval: UINT,
         Flags: UINT,
     ) -> HRESULT,
     fn GetBuffer(
         Buffer: UINT,
         riid: REFIID,
@@ -267,18 +275,18 @@ interface IDXGISwapChain(IDXGISwapChainV
         ppOutput: *mut *mut IDXGIOutput,
     ) -> HRESULT,
     fn GetFrameStatistics(
         pStats: *mut DXGI_FRAME_STATISTICS,
     ) -> HRESULT,
     fn GetLastPresentCount(
         pLastPresentCount: *mut UINT,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x7b7166ec, 0x21c7, 0x44ae, 0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69)]
+}}
+RIDL!{#[uuid(0x7b7166ec, 0x21c7, 0x44ae, 0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69)]
 interface IDXGIFactory(IDXGIFactoryVtbl): IDXGIObject(IDXGIObjectVtbl) {
     fn EnumAdapters(
         Adapter: UINT,
         ppAdapter: *mut *mut IDXGIAdapter,
     ) -> HRESULT,
     fn MakeWindowAssociation(
         WindowHandle: HWND,
         Flags: UINT,
@@ -290,28 +298,28 @@ interface IDXGIFactory(IDXGIFactoryVtbl)
         pDevice: *mut IUnknown,
         pDesc: *mut DXGI_SWAP_CHAIN_DESC,
         ppSwapChain: *mut *mut IDXGISwapChain,
     ) -> HRESULT,
     fn CreateSoftwareAdapter(
         Module: HMODULE,
         ppAdapter: *mut *mut IDXGIAdapter,
     ) -> HRESULT,
-});
+}}
 extern "system" {
     pub fn CreateDXGIFactory(
         riid: REFIID,
         ppFactory: *mut *mut c_void,
     ) -> HRESULT;
     pub fn CreateDXGIFactory1(
         riid: REFIID,
         ppFactory: *mut *mut c_void,
     ) -> HRESULT;
 }
-RIDL!(#[uuid(0x54ec77fa, 0x1377, 0x44e6, 0x8c, 0x32, 0x88, 0xfd, 0x5f, 0x44, 0xc8, 0x4c)]
+RIDL!{#[uuid(0x54ec77fa, 0x1377, 0x44e6, 0x8c, 0x32, 0x88, 0xfd, 0x5f, 0x44, 0xc8, 0x4c)]
 interface IDXGIDevice(IDXGIDeviceVtbl): IDXGIObject(IDXGIObjectVtbl) {
     fn GetAdapter(
         pAdapter: *mut *mut IDXGIAdapter,
     ) -> HRESULT,
     fn CreateSurface(
         pDesc: *const DXGI_SURFACE_DESC,
         NumSurfaces: UINT,
         Usage: DXGI_USAGE,
@@ -324,17 +332,17 @@ interface IDXGIDevice(IDXGIDeviceVtbl): 
         NumResources: UINT,
     ) -> HRESULT,
     fn SetGPUThreadPriority(
         Priority: INT,
     ) -> HRESULT,
     fn GetGPUThreadPriority(
         pPriority: *mut INT,
     ) -> HRESULT,
-});
+}}
 ENUM!{enum DXGI_ADAPTER_FLAG {
     DXGI_ADAPTER_FLAG_NONE,
     DXGI_ADAPTER_FLAG_REMOTE,
     DXGI_ADAPTER_FLAG_SOFTWARE,
 }}
 STRUCT!{struct DXGI_ADAPTER_DESC1 {
     Description: [WCHAR; 128],
     VendorId: UINT,
@@ -346,39 +354,39 @@ STRUCT!{struct DXGI_ADAPTER_DESC1 {
     SharedSystemMemory: SIZE_T,
     AdapterLuid: LUID,
     Flags: UINT,
 }}
 STRUCT!{struct DXGI_DISPLAY_COLOR_SPACE {
     PrimaryCoordinates: [[FLOAT; 2]; 8],
     WhitePoints: [[FLOAT; 2]; 16],
 }}
-RIDL!(#[uuid(0x770aae78, 0xf26f, 0x4dba, 0xa8, 0x29, 0x25, 0x3c, 0x83, 0xd1, 0xb3, 0x87)]
+RIDL!{#[uuid(0x770aae78, 0xf26f, 0x4dba, 0xa8, 0x29, 0x25, 0x3c, 0x83, 0xd1, 0xb3, 0x87)]
 interface IDXGIFactory1(IDXGIFactory1Vtbl): IDXGIFactory(IDXGIFactoryVtbl) {
     fn EnumAdapters1(
         Adapter: UINT,
         ppAdapter: *mut *mut IDXGIAdapter1,
     ) -> HRESULT,
     fn IsCurrent() -> BOOL,
-});
-RIDL!(#[uuid(0x29038f61, 0x3839, 0x4626, 0x91, 0xfd, 0x08, 0x68, 0x79, 0x01, 0x1a, 0x05)]
+}}
+RIDL!{#[uuid(0x29038f61, 0x3839, 0x4626, 0x91, 0xfd, 0x08, 0x68, 0x79, 0x01, 0x1a, 0x05)]
 interface IDXGIAdapter1(IDXGIAdapter1Vtbl): IDXGIAdapter(IDXGIAdapterVtbl) {
     fn GetDesc1(
         pDesc: *mut DXGI_ADAPTER_DESC1,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x77db970f, 0x6276, 0x48ba, 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c)]
+}}
+RIDL!{#[uuid(0x77db970f, 0x6276, 0x48ba, 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c)]
 interface IDXGIDevice1(IDXGIDevice1Vtbl): IDXGIDevice(IDXGIDeviceVtbl) {
     fn SetMaximumFrameLatency(
         MaxLatency: UINT,
     ) -> HRESULT,
     fn GetMaximumFrameLatency(
         pMaxLatency: *mut UINT,
     ) -> HRESULT,
-});
+}}
 DEFINE_GUID!{IID_IDXGIObject,
     0xaec22fb8, 0x76f3, 0x4639, 0x9b, 0xe0, 0x28, 0xeb, 0x43, 0xa6, 0x7a, 0x2e}
 DEFINE_GUID!{IID_IDXGIDeviceSubObject,
     0x3d3e0379, 0xf9de, 0x4d58, 0xbb, 0x6c, 0x18, 0xd6, 0x29, 0x92, 0xf1, 0xa6}
 DEFINE_GUID!{IID_IDXGIResource,
     0x035f3ab4, 0x482e, 0x4e50, 0xb4, 0x1f, 0x8a, 0x7f, 0x8b, 0xd8, 0x96, 0x0b}
 DEFINE_GUID!{IID_IDXGIKeyedMutex,
     0x9d8e1289, 0xd7b3, 0x465f, 0x81, 0x26, 0x25, 0x0e, 0x34, 0x9a, 0xf8, 0x5d}
--- a/third_party/rust/winapi/src/shared/dxgi1_2.rs
+++ b/third_party/rust/winapi/src/shared/dxgi1_2.rs
@@ -133,46 +133,46 @@ STRUCT!{struct DXGI_SWAP_CHAIN_DESC1 {
     Flags: UINT,
 }}
 STRUCT!{struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC {
     RefreshRate: DXGI_RATIONAL,
     ScanlineOrdering: DXGI_MODE_SCANLINE_ORDER,
     Scaling: DXGI_MODE_SCALING,
     Windowed: BOOL,
 }}
-RIDL!(#[uuid(0x0aa1ae0a, 0xfa0e, 0x4b84, 0x86, 0x44, 0xe0, 0x5f, 0xf8, 0xe5, 0xac, 0xb5)]
+RIDL!{#[uuid(0x0aa1ae0a, 0xfa0e, 0x4b84, 0x86, 0x44, 0xe0, 0x5f, 0xf8, 0xe5, 0xac, 0xb5)]
 interface IDXGIAdapter2(IDXGIAdapter2Vtbl): IDXGIAdapter1(IDXGIAdapter1Vtbl) {
     fn GetDesc2(
         pDesc: *mut DXGI_ADAPTER_DESC2,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x05008617, 0xfbfd, 0x4051, 0xa7, 0x90, 0x14, 0x48, 0x84, 0xb4, 0xf6, 0xa9)]
+}}
+RIDL!{#[uuid(0x05008617, 0xfbfd, 0x4051, 0xa7, 0x90, 0x14, 0x48, 0x84, 0xb4, 0xf6, 0xa9)]
 interface IDXGIDevice2(IDXGIDevice2Vtbl): IDXGIDevice1(IDXGIDevice1Vtbl) {
     fn OfferResources(
         NumResources: UINT,
         ppResources: *mut *mut IDXGIResource,
         Priority: DXGI_OFFER_RESOURCE_PRIORITY,
     ) -> HRESULT,
     fn ReclaimResources(
         NumResources: UINT,
         ppResources: *mut *mut IDXGIResource,
         pDiscarded: *mut BOOL,
     ) -> HRESULT,
     fn EnqueueSetEvent(
         hEvent: HANDLE,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0xea9dbf1a, 0xc88e, 0x4486, 0x85, 0x4a, 0x98, 0xaa, 0x01, 0x38, 0xf3, 0x0c)]
+}}
+RIDL!{#[uuid(0xea9dbf1a, 0xc88e, 0x4486, 0x85, 0x4a, 0x98, 0xaa, 0x01, 0x38, 0xf3, 0x0c)]
 interface IDXGIDisplayControl(IDXGIDisplayControlVtbl): IUnknown(IUnknownVtbl) {
     fn IsStereoEnabled() -> BOOL,
     fn SetStereoEnabled(
         enabled: BOOL,
     ) -> (),
-});
-RIDL!(#[uuid(0x50c83a1c, 0xe072, 0x4c48, 0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0)]
+}}
+RIDL!{#[uuid(0x50c83a1c, 0xe072, 0x4c48, 0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0)]
 interface IDXGIFactory2(IDXGIFactory2Vtbl): IDXGIFactory1(IDXGIFactory1Vtbl) {
     fn IsWindowedStereoEnabled() -> BOOL,
     fn CreateSwapChainForHwnd(
         pDevice: *mut IUnknown,
         hWnd: HWND,
         pDesc: *const DXGI_SWAP_CHAIN_DESC1,
         pFullscreenDesc: *const DXGI_SWAP_CHAIN_FULLSCREEN_DESC,
         pRestrictToOutput: *mut IDXGIOutput,
@@ -214,18 +214,18 @@ interface IDXGIFactory2(IDXGIFactory2Vtb
         dwCookie: DWORD,
     ) -> (),
     fn CreateSwapChainForComposition(
         pDevice: *mut IUnknown,
         pDesc: *const DXGI_SWAP_CHAIN_DESC1,
         pRestrictToOutput: *mut IDXGIOutput,
         ppSwapChain: *mut *mut IDXGISwapChain1,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x00cddea8, 0x939b, 0x4b83, 0xa3, 0x40, 0xa6, 0x85, 0x22, 0x66, 0x66, 0xcc)]
+}}
+RIDL!{#[uuid(0x00cddea8, 0x939b, 0x4b83, 0xa3, 0x40, 0xa6, 0x85, 0x22, 0x66, 0x66, 0xcc)]
 interface IDXGIOutput1(IDXGIOutput1Vtbl): IDXGIOutput(IDXGIOutputVtbl) {
     fn GetDisplayModeList1(
         EnumFormat: DXGI_FORMAT,
         Flags: UINT,
         pNumModes: *mut UINT,
         pDesc: *mut DXGI_MODE_DESC1,
     ) -> HRESULT,
     fn FindClosestMatchingMode1(
@@ -235,18 +235,18 @@ interface IDXGIOutput1(IDXGIOutput1Vtbl)
     ) -> HRESULT,
     fn GetDisplaySurfaceData1(
         pDestination: *mut IDXGIResource,
     ) -> HRESULT,
     fn DuplicateOutput(
         pDevice: *mut IUnknown,
         ppOutputDuplication: *mut *mut IDXGIOutputDuplication,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x191cfac3, 0xa341, 0x470d, 0xb2, 0x6e, 0xa8, 0x64, 0xf4, 0x28, 0x31, 0x9c)]
+}}
+RIDL!{#[uuid(0x191cfac3, 0xa341, 0x470d, 0xb2, 0x6e, 0xa8, 0x64, 0xf4, 0x28, 0x31, 0x9c)]
 interface IDXGIOutputDuplication(IDXGIOutputDuplicationVtbl): IDXGIObject(IDXGIObjectVtbl) {
     fn GetDesc(
         pDesc: *mut DXGI_OUTDUPL_DESC,
     ) -> (),
     fn AcquireNextFrame(
         TimeoutInMilliseconds: UINT,
         pFrameInfo: *mut DXGI_OUTDUPL_FRAME_INFO,
         ppDesktopResource: *mut *mut IDXGIResource,
@@ -267,39 +267,39 @@ interface IDXGIOutputDuplication(IDXGIOu
         pPointerShapeBufferSizeRequired: *mut UINT,
         pPointerShapeInfo: *mut DXGI_OUTDUPL_POINTER_SHAPE_INFO,
     ) -> HRESULT,
     fn MapDesktopSurface(
         pLockedRect: *mut DXGI_MAPPED_RECT,
     ) -> HRESULT,
     fn UnMapDesktopSurface() -> HRESULT,
     fn ReleaseFrame() -> HRESULT,
-});
-RIDL!(#[uuid(0x30961379, 0x4609, 0x4a41, 0x99, 0x8e, 0x54, 0xfe, 0x56, 0x7e, 0xe0, 0xc1)]
+}}
+RIDL!{#[uuid(0x30961379, 0x4609, 0x4a41, 0x99, 0x8e, 0x54, 0xfe, 0x56, 0x7e, 0xe0, 0xc1)]
 interface IDXGIResource1(IDXGIResource1Vtbl): IDXGIResource(IDXGIResourceVtbl) {
     fn CreateSubresourceSurface(
         index: UINT,
         ppSurface: *mut *mut IDXGISurface2,
     ) -> HRESULT,
     fn CreateSharedHandle(
         pAttributes: *const SECURITY_ATTRIBUTES,
         dwAccess: DWORD,
         lpName: LPCWSTR,
         pHandle: *mut HANDLE,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0xaba496dd, 0xb617, 0x4cb8, 0xa8, 0x66, 0xbc, 0x44, 0xd7, 0xeb, 0x1f, 0xa2)]
+}}
+RIDL!{#[uuid(0xaba496dd, 0xb617, 0x4cb8, 0xa8, 0x66, 0xbc, 0x44, 0xd7, 0xeb, 0x1f, 0xa2)]
 interface IDXGISurface2(IDXGISurface2Vtbl): IDXGISurface1(IDXGISurface1Vtbl) {
     fn GetResource(
         riid: REFGUID,
         ppParentResource: *mut *mut c_void,
         pSubresourceIndex: *mut UINT,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x790a45f7, 0x0d42, 0x4876, 0x98, 0x3a, 0x0a, 0x55, 0xcf, 0xe6, 0xf4, 0xaa)]
+}}
+RIDL!{#[uuid(0x790a45f7, 0x0d42, 0x4876, 0x98, 0x3a, 0x0a, 0x55, 0xcf, 0xe6, 0xf4, 0xaa)]
 interface IDXGISwapChain1(IDXGISwapChain1Vtbl): IDXGISwapChain(IDXGISwapChainVtbl) {
     fn GetDesc1(
         pDesc: *mut DXGI_SWAP_CHAIN_DESC1,
     ) -> HRESULT,
     fn GetFullscreenDesc(
         pDesc: *mut DXGI_SWAP_CHAIN_FULLSCREEN_DESC,
     ) -> HRESULT,
     fn GetHwnd(
@@ -325,17 +325,17 @@ interface IDXGISwapChain1(IDXGISwapChain
         pColor: *mut DXGI_RGBA,
     ) -> HRESULT,
     fn SetRotation(
         Rotation: DXGI_MODE_ROTATION,
     ) -> HRESULT,
     fn GetRotation(
         pRotation: *mut DXGI_MODE_ROTATION,
     ) -> HRESULT,
-});
+}}
 pub type DXGI_OFFER_RESOURCE_PRIORITY = _DXGI_OFFER_RESOURCE_PRIORITY;
 pub const DXGI_ENUM_MODES_DISABLED_STEREO: UINT = 8;
 pub const DXGI_ENUM_MODES_STEREO: UINT = 4;
 pub const DXGI_SHARED_RESOURCE_READ: UINT = 0x80000000;
 pub const DXGI_SHARED_RESOURCE_WRITE: UINT = 1;
 DEFINE_GUID!{IID_IDXGIDisplayControl,
     0xea9dbf1a, 0xc88e, 0x4486, 0x85, 0x4a, 0x98, 0xaa, 0x01, 0x38, 0xf3, 0x0c}
 DEFINE_GUID!{IID_IDXGIOutputDuplication,
--- a/third_party/rust/winapi/src/shared/dxgi1_3.rs
+++ b/third_party/rust/winapi/src/shared/dxgi1_3.rs
@@ -47,17 +47,17 @@ STRUCT!{struct DXGI_FRAME_STATISTICS_MED
 STRUCT!{struct DXGI_MATRIX_3X2_F {
     _11: FLOAT,
     _12: FLOAT,
     _21: FLOAT,
     _22: FLOAT,
     _31: FLOAT,
     _32: FLOAT,
 }}
-RIDL!(#[uuid(0x2633066b, 0x4514, 0x4c7a, 0x8f, 0xd8, 0x12, 0xea, 0x98, 0x05, 0x9d, 0x18)]
+RIDL!{#[uuid(0x2633066b, 0x4514, 0x4c7a, 0x8f, 0xd8, 0x12, 0xea, 0x98, 0x05, 0x9d, 0x18)]
 interface IDXGIDecodeSwapChain(IDXGIDecodeSwapChainVtbl): IUnknown(IUnknownVtbl) {
     fn PresentBuffer(
         BufferToPresent: UINT,
         SyncInterval: UINT,
         Flags: UINT,
     ) -> HRESULT,
     fn SetSourceRect(
         pRect: *const RECT,
@@ -78,68 +78,68 @@ interface IDXGIDecodeSwapChain(IDXGIDeco
     fn GetDestSize(
         pWidth: *mut UINT,
         pHeight: *mut UINT,
     ) -> HRESULT,
     fn SetColorSpace(
         ColorSpace: DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS,
     ) -> HRESULT,
     fn GetColorSpace() -> DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS,
-});
+}}
 extern "system" {
     pub fn CreateDXGIFactory2(
         Flags: UINT,
         riid: REFIID,
         ppFactory: *mut *mut c_void,
     ) -> HRESULT;
     pub fn DXGIGetDebugInterface1(
         Flags: UINT,
         riid: REFIID,
         pDebug: *mut *mut c_void,
     ) -> HRESULT;
 }
-RIDL!(#[uuid(0x6007896c, 0x3244, 0x4afd, 0xbf, 0x18, 0xa6, 0xd3, 0xbe, 0xda, 0x50, 0x23)]
+RIDL!{#[uuid(0x6007896c, 0x3244, 0x4afd, 0xbf, 0x18, 0xa6, 0xd3, 0xbe, 0xda, 0x50, 0x23)]
 interface IDXGIDevice3(IDXGIDevice3Vtbl): IDXGIDevice2(IDXGIDevice2Vtbl) {
     fn Trim() -> (),
-});
-RIDL!(#[uuid(0x25483823, 0xcd46, 0x4c7d, 0x86, 0xca, 0x47, 0xaa, 0x95, 0xb8, 0x37, 0xbd)]
+}}
+RIDL!{#[uuid(0x25483823, 0xcd46, 0x4c7d, 0x86, 0xca, 0x47, 0xaa, 0x95, 0xb8, 0x37, 0xbd)]
 interface IDXGIFactory3(IDXGIFactory3Vtbl): IDXGIFactory2(IDXGIFactory2Vtbl) {
     fn GetCreationFlags() -> UINT,
-});
-RIDL!(#[uuid(0x41e7d1f2, 0xa591, 0x4f7b, 0xa2, 0xe5, 0xfa, 0x9c, 0x84, 0x3e, 0x1c, 0x12)]
+}}
+RIDL!{#[uuid(0x41e7d1f2, 0xa591, 0x4f7b, 0xa2, 0xe5, 0xfa, 0x9c, 0x84, 0x3e, 0x1c, 0x12)]
 interface IDXGIFactoryMedia(IDXGIFactoryMediaVtbl): IUnknown(IUnknownVtbl) {
     fn CreateSwapChainForCompositionSurfaceHandle(
         pDevice: *mut IUnknown,
         hSurface: HANDLE,
         pDesc: *const DXGI_SWAP_CHAIN_DESC1,
         pRestrictToOutput: *mut IDXGIOutput,
         ppSwapChain: *mut *mut IDXGISwapChain1,
     ) -> HRESULT,
     fn CreateDecodeSwapChainForCompositionSurfaceHandle(
         pDevice: *mut IUnknown,
         hSurface: HANDLE,
         pDesc: *mut DXGI_DECODE_SWAP_CHAIN_DESC,
         pYuvDecodeBuffers: *mut IDXGIResource,
         pRestrictToOutput: *mut IDXGIOutput,
         ppSwapChain: *mut *mut IDXGIDecodeSwapChain,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x595e39d1, 0x2724, 0x4663, 0x99, 0xb1, 0xda, 0x96, 0x9d, 0xe2, 0x83, 0x64)]
+}}
+RIDL!{#[uuid(0x595e39d1, 0x2724, 0x4663, 0x99, 0xb1, 0xda, 0x96, 0x9d, 0xe2, 0x83, 0x64)]
 interface IDXGIOutput2(IDXGIOutput2Vtbl): IDXGIOutput1(IDXGIOutput1Vtbl) {
     fn SupportsOverlays() -> BOOL,
-});
-RIDL!(#[uuid(0x8a6bb301, 0x7e7e, 0x41f4, 0xa8, 0xe0, 0x5b, 0x32, 0xf7, 0xf9, 0x9b, 0x18)]
+}}
+RIDL!{#[uuid(0x8a6bb301, 0x7e7e, 0x41f4, 0xa8, 0xe0, 0x5b, 0x32, 0xf7, 0xf9, 0x9b, 0x18)]
 interface IDXGIOutput3(IDXGIOutput3Vtbl): IDXGIOutput2(IDXGIOutput2Vtbl) {
     fn CheckOverlaySupport(
         EnumFormat: DXGI_FORMAT,
         pConcernedDevice: *mut IUnknown,
         pFlags: *mut UINT,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0xa8be2ac4, 0x199f, 0x4946, 0xb3, 0x31, 0x79, 0x59, 0x9f, 0xb9, 0x8d, 0xe7)]
+}}
+RIDL!{#[uuid(0xa8be2ac4, 0x199f, 0x4946, 0xb3, 0x31, 0x79, 0x59, 0x9f, 0xb9, 0x8d, 0xe7)]
 interface IDXGISwapChain2(IDXGISwapChain2Vtbl): IDXGISwapChain1(IDXGISwapChain1Vtbl) {
     fn SetSourceSize(
         Width: UINT,
         Height: UINT,
     ) -> HRESULT,
     fn GetSourceSize(
         pWidth: *mut UINT,
         pHeight: *mut UINT,
@@ -152,31 +152,31 @@ interface IDXGISwapChain2(IDXGISwapChain
     ) -> HRESULT,
     fn GetFrameLatencyWaitableObject() -> HANDLE,
     fn SetMatrixTransform(
         pMatrix: *const DXGI_MATRIX_3X2_F,
     ) -> HRESULT,
     fn GetMatrixTransform(
         pMatrix: *mut DXGI_MATRIX_3X2_F,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0xdd95b90b, 0xf05f, 0x4f6a, 0xbd, 0x65, 0x25, 0xbf, 0xb2, 0x64, 0xbd, 0x84)]
+}}
+RIDL!{#[uuid(0xdd95b90b, 0xf05f, 0x4f6a, 0xbd, 0x65, 0x25, 0xbf, 0xb2, 0x64, 0xbd, 0x84)]
 interface IDXGISwapChainMedia(IDXGISwapChainMediaVtbl): IUnknown(IUnknownVtbl) {
     fn GetFrameStatisticsMedia(
         pStats: *mut DXGI_FRAME_STATISTICS_MEDIA,
     ) -> HRESULT,
     fn SetPresentDuration(
         Duration: UINT,
     ) -> HRESULT,
     fn CheckPresentDurationSupport(
         DesiredPresentDuration: UINT,
         pClosestSmallerPresentDuration: *mut UINT,
         pClosestLargerPresentDuration: *mut UINT,
     ) -> HRESULT,
-});
+}}
 pub const DXGI_CREATE_FACTORY_DEBUG: UINT = 0x1;
 DEFINE_GUID!{IID_IDXGIDevice3,
     0x6007896c, 0x3244, 0x4afd, 0xbf, 0x18, 0xa6, 0xd3, 0xbe, 0xda, 0x50, 0x23}
 DEFINE_GUID!{IID_IDXGISwapChain2,
     0xa8be2ac4, 0x199f, 0x4946, 0xb3, 0x31, 0x79, 0x59, 0x9f, 0xb9, 0x8d, 0xe7}
 DEFINE_GUID!{IID_IDXGIOutput2,
     0x595e39d1, 0x2724, 0x4663, 0x99, 0xb1, 0xda, 0x96, 0x9d, 0xe2, 0x83, 0x64}
 DEFINE_GUID!{IID_IDXGIFactory3,
--- a/third_party/rust/winapi/src/shared/dxgi1_4.rs
+++ b/third_party/rust/winapi/src/shared/dxgi1_4.rs
@@ -30,17 +30,17 @@ ENUM!{enum DXGI_SWAP_CHAIN_COLOR_SPACE_S
     DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT = 0x2,
 }}
 STRUCT!{struct DXGI_QUERY_VIDEO_MEMORY_INFO {
     Budget: UINT64,
     CurrentUsage: UINT64,
     AvailableForReservation: UINT64,
     CurrentReservation: UINT64,
 }}
-RIDL!(#[uuid(0x645967a4, 0x1392, 0x4310, 0xa7, 0x98, 0x80, 0x53, 0xce, 0x3e, 0x93, 0xfd)]
+RIDL!{#[uuid(0x645967a4, 0x1392, 0x4310, 0xa7, 0x98, 0x80, 0x53, 0xce, 0x3e, 0x93, 0xfd)]
 interface IDXGIAdapter3(IDXGIAdapter3Vtbl): IDXGIAdapter2(IDXGIAdapter2Vtbl) {
     fn RegisterHardwareContentProtectionTeardownStatusEvent(
         hEvent: HANDLE,
         pdwCookie: *mut DWORD,
     ) -> HRESULT,
     fn UnregisterHardwareContentProtectionTeardownStatus(
         dwCookie: DWORD,
     ) -> (),
@@ -56,39 +56,39 @@ interface IDXGIAdapter3(IDXGIAdapter3Vtb
     ) -> HRESULT,
     fn RegisterVideoMemoryBudgetChangeNotificationEvent(
         hEvent: HANDLE,
         pdwCookie: *mut DWORD,
     ) -> HRESULT,
     fn UnregisterVideoMemoryBudgetChangeNotification(
         dwCookie: DWORD,
     ) -> (),
-});
-RIDL!(#[uuid(0x1bc6ea02, 0xef36, 0x464f, 0xbf, 0x0c, 0x21, 0xca, 0x39, 0xe5, 0x16, 0x8a)]
+}}
+RIDL!{#[uuid(0x1bc6ea02, 0xef36, 0x464f, 0xbf, 0x0c, 0x21, 0xca, 0x39, 0xe5, 0x16, 0x8a)]
 interface IDXGIFactory4(IDXGIFactory4Vtbl): IDXGIFactory3(IDXGIFactory3Vtbl) {
     fn EnumAdapterByLuid(
         AdapterLuid: LUID,
         riid: REFGUID,
         ppvAdapter: *mut *mut c_void,
     ) -> HRESULT,
     fn EnumWarpAdapter(
         riid: REFGUID,
         ppvAdapter: *mut *mut c_void,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0xdc7dca35, 0x2196, 0x414d, 0x9f, 0x53, 0x61, 0x78, 0x84, 0x03, 0x2a, 0x60)]
+}}
+RIDL!{#[uuid(0xdc7dca35, 0x2196, 0x414d, 0x9f, 0x53, 0x61, 0x78, 0x84, 0x03, 0x2a, 0x60)]
 interface IDXGIOutput4(IDXGIOutput4Vtbl): IDXGIOutput3(IDXGIOutput3Vtbl) {
     fn CheckOverlayColorSpaceSupport(
         Format: DXGI_FORMAT,
         ColorSpace: DXGI_COLOR_SPACE_TYPE,
         pConcernedDevice: *mut IUnknown,
         pFlags: *mut UINT,
     ) -> HRESULT,
-});
-RIDL!(#[uuid(0x94d99bdb, 0xf1f8, 0x4ab0, 0xb2, 0x36, 0x7d, 0xa0, 0x17, 0x0e, 0xda, 0xb1)]
+}}
+RIDL!{#[uuid(0x94d99bdb, 0xf1f8, 0x4ab0, 0xb2, 0x36, 0x7d, 0xa0, 0x17, 0x0e, 0xda, 0xb1)]
 interface IDXGISwapChain3(IDXGISwapChain3Vtbl): IDXGISwapChain2(IDXGISwapChain2Vtbl) {
     fn GetCurrentBackBufferIndex() -> UINT,
     fn CheckColorSpaceSupport(
         ColorSpace: DXGI_COLOR_SPACE_TYPE,
         pColorSpaceSupport: *mut UINT,
     ) -> HRESULT,
     fn SetColorSpace1(
         ColorSpace: DXGI_COLOR_SPACE_TYPE,
@@ -97,17 +97,17 @@ interface IDXGISwapChain3(IDXGISwapChain
         BufferCount: UINT,
         Width: UINT,
         Height: UINT,
         Format: DXGI_FORMAT,
         SwapChainFlags: UINT,
         pCreationNodeMask: *const UINT,
         ppPresentQueue: *mut *mut IUnknown,
     ) -> HRESULT,
-});
+}}
 DEFINE_GUID!{IID_IDXGISwapChain3,
     0x94d99bdb, 0xf1f8, 0x4ab0, 0xb2, 0x36, 0x7d, 0xa0, 0x17, 0x0e, 0xda, 0xb1}
 DEFINE_GUID!{IID_IDXGIOutput4,
     0xdc7dca35, 0x2196, 0x414d, 0x9f, 0x53, 0x61, 0x78, 0x84, 0x03, 0x2a, 0x60}
 DEFINE_GUID!{IID_IDXGIFactory4,
     0x1bc6ea02, 0xef36, 0x464f, 0xbf, 0x0c, 0x21, 0xca, 0x39, 0xe5, 0x16, 0x8a}
 DEFINE_GUID!{IID_IDXGIAdapter3,
     0x645967a4, 0x1392, 0x4310, 0xa7, 0x98, 0x80, 0x53, 0xce, 0x3e, 0x93, 0xfd}
--- a/third_party/rust/winapi/src/shared/dxgi1_5.rs
+++ b/third_party/rust/winapi/src/shared/dxgi1_5.rs
@@ -13,81 +13,81 @@ use shared::dxgi1_3::{IDXGIDevice3, IDXG
 use shared::dxgi1_4::{
     IDXGIFactory4, IDXGIFactory4Vtbl, IDXGIOutput4, IDXGIOutput4Vtbl, IDXGISwapChain3,
     IDXGISwapChain3Vtbl,
 };
 use shared::dxgiformat::DXGI_FORMAT;
 use shared::minwindef::UINT;
 use um::unknwnbase::IUnknown;
 use um::winnt::HRESULT;
-RIDL!(#[uuid(0x80a07424, 0xab52, 0x42eb, 0x83, 0x3c, 0x0c, 0x42, 0xfd, 0x28, 0x2d, 0x98)]
+RIDL!{#[uuid(0x80a07424, 0xab52, 0x42eb, 0x83, 0x3c, 0x0c, 0x42, 0xfd, 0x28, 0x2d, 0x98)]
 interface IDXGIOutput5(IDXGIOutput5Vtbl): IDXGIOutput4(IDXGIOutput4Vtbl) {
     fn DuplicateOutput1(
         pDevice: *mut IUnknown,
         Flags: UINT,
         SupportedFormatsCount: UINT,
         pSupportedFormats: *const DXGI_FORMAT,
         ppOutputDuplication: *mut *mut IDXGIOutputDuplication,
     )-> HRESULT,
-});
+}}
 ENUM!{enum DXGI_HDR_METADATA_TYPE {
     DXGI_HDR_METADATA_TYPE_NONE = 0,
     DXGI_HDR_METADATA_TYPE_HDR10 = 1,
 }}
 STRUCT!{struct DXGI_HDR_METADATA_HDR10 {
     RedPrimary: [UINT16; 2],
     GreenPrimary: [UINT16; 2],
     BluePrimary: [UINT16; 2],
     WhitePoint: [UINT16; 2],
     MaxMasteringLuminance: UINT,
     MinMasteringLuminance: UINT,
     MaxContentLightLevel: UINT16,
     MaxFrameAverageLightLevel: UINT16,
 }}
-RIDL!(#[uuid(0x3d585d5a, 0xbd4a, 0x489e, 0xb1, 0xf4, 0x3d, 0xbc, 0xb6, 0x45, 0x2f, 0xfb)]
+RIDL!{#[uuid(0x3d585d5a, 0xbd4a, 0x489e, 0xb1, 0xf4, 0x3d, 0xbc, 0xb6, 0x45, 0x2f, 0xfb)]
 interface IDXGISwapChain4(IDXGISwapChain4Vtbl): IDXGISwapChain3(IDXGISwapChain3Vtbl) {
     fn SetHDRMetaData(
         Type: DXGI_HDR_METADATA_TYPE,
         Size: UINT,
         pMetaData: *mut c_void,
     )-> HRESULT,
-});
+}}
 ENUM!{enum DXGI_OFFER_RESOURCE_FLAGS {
     DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT = 0x1,
 }}
 ENUM!{enum DXGI_RECLAIM_RESOURCE_RESULTS {
     DXGI_RECLAIM_RESOURCE_RESULT_OK = 0,
     DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED = 1,
     DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED = 2,
 }}
-RIDL!(#[uuid(0x95b4f95f, 0xd8da, 0x4ca4, 0x9e, 0xe6, 0x3b, 0x76, 0xd5, 0x96, 0x8a, 0x10)]
+RIDL!{#[uuid(0x95b4f95f, 0xd8da, 0x4ca4, 0x9e, 0xe6, 0x3b, 0x76, 0xd5, 0x96, 0x8a, 0x10)]
 interface IDXGIDevice4(IDXGIDevice4Vtbl): IDXGIDevice3(IDXGIDevice3Vtbl) {
     fn OfferResources1(
         NumResources: UINT,
         ppResources: *mut *mut IDXGIResource,
         Priority: DXGI_OFFER_RESOURCE_PRIORITY,
         Flags: UINT,
     ) -> HRESULT,
     fn ReclaimResources1(
         NumResources: UINT,
         ppResources: *mut *mut IDXGIResource,
         pResults: *mut DXGI_RECLAIM_RESOURCE_RESULTS,
     ) -> HRESULT,
-});
+}}
 ENUM!{enum DXGI_FEATURE {
     DXGI_FEATURE_PRESENT_ALLOW_TEARING = 0,
 }}
-RIDL!(#[uuid(0x7632e1f5, 0xee65, 0x4dca, 0x87, 0xfd, 0x84, 0xcd, 0x75, 0xf8, 0x83, 0x8d)]
+RIDL!{#[uuid(0x7632e1f5, 0xee65, 0x4dca, 0x87, 0xfd, 0x84, 0xcd, 0x75, 0xf8, 0x83, 0x8d)]
 interface IDXGIFactory5(IDXGIFactory5Vtbl): IDXGIFactory4(IDXGIFactory4Vtbl) {
     fn CheckFeatureSupport(
         Feature: DXGI_FEATURE,
         pFeatureSupportData: *mut c_void,
         FeatureSupportDataSize: UINT,
     ) -> HRESULT,
-});
+}}
 DEFINE_GUID!{IID_IDXGIOutput5,
     0x80A07424, 0xAB52, 0x42EB, 0x83, 0x3C, 0x0C, 0x42, 0xFD, 0x28, 0x2D, 0x98}
 DEFINE_GUID!{IID_IDXGISwapChain4,
     0x3D585D5A, 0xBD4A, 0x489E, 0xB1, 0xF4, 0x3D, 0xBC, 0xB6, 0x45, 0x2F, 0xFB}
 DEFINE_GUID!{IID_IDXGIDevice4,
     0x95B4F95F, 0xD8DA, 0x4CA4, 0x9E, 0xE6, 0x3B, 0x76, 0xD5, 0x96, 0x8A, 0x10}
 DEFINE_GUID!{IID_IDXGIFactory5,
     0x7632e1f5, 0xee65, 0x4dca, 0x87, 0xfd, 0x84, 0xcd, 0x75, 0xf8, 0x83, 0x8d}
new file mode 100644
--- /dev/null
+++ b/third_party/rust/winapi/src/shared/dxgi1_6.rs
@@ -0,0 +1,99 @@
+// Copyright © 2017 winapi-rs developers
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! Mappings for the contents of dxgi1_6.h
+use ctypes::c_void;
+use shared::basetsd::SIZE_T;
+use shared::dxgi1_2::{
+    DXGI_COMPUTE_PREEMPTION_GRANULARITY, DXGI_GRAPHICS_PREEMPTION_GRANULARITY,
+};
+use shared::dxgi1_4::{IDXGIAdapter3, IDXGIAdapter3Vtbl};
+use shared::dxgi1_5::{IDXGIFactory5, IDXGIFactory5Vtbl, IDXGIOutput5, IDXGIOutput5Vtbl};
+use shared::dxgitype::{DXGI_COLOR_SPACE_TYPE, DXGI_MODE_ROTATION};
+use shared::guiddef::REFIID;
+use shared::minwindef::{BOOL, FLOAT, UINT};
+use shared::windef::{HMONITOR, RECT};
+use um::winnt::{HRESULT, LUID, WCHAR};
+ENUM!{enum DXGI_ADAPTER_FLAG3 {
+    DXGI_ADAPTER_FLAG3_NONE = 0,
+    DXGI_ADAPTER_FLAG3_REMOTE = 1,
+    DXGI_ADAPTER_FLAG3_SOFTWARE = 2,
+    DXGI_ADAPTER_FLAG3_ACG_COMPATIBLE = 4,
+    DXGI_ADAPTER_FLAG3_SUPPORT_MONITORED_FENCES = 8,
+    DXGI_ADAPTER_FLAG3_SUPPORT_NON_MONITORED_FENCES = 0x10,
+    DXGI_ADAPTER_FLAG3_KEYED_MUTEX_CONFORMANCE = 0x20,
+    DXGI_ADAPTER_FLAG3_FORCE_DWORD = 0xFFFFFFFF,
+}}
+STRUCT!{struct DXGI_ADAPTER_DESC3 {
+    Description: [WCHAR; 128],
+    VendorID: UINT,
+    DeviceID: UINT,
+    SubSysID: UINT,
+    Revision: UINT,
+    DedicatedVideoMemory: SIZE_T,
+    DedicatedSystemMemory: SIZE_T,
+    SharedSystemMemory: SIZE_T,
+    AdapterLuid: LUID,
+    Flags: DXGI_ADAPTER_FLAG3,
+    GraphicsPreemptionGranularity: DXGI_GRAPHICS_PREEMPTION_GRANULARITY,
+    ComputePreemptionGranularity: DXGI_COMPUTE_PREEMPTION_GRANULARITY,
+}}
+RIDL!{#[uuid(0x3c8d99d1, 0x4fbf, 0x4181, 0xa8, 0x2c, 0xaf, 0x66, 0xbf, 0x7b, 0xd2, 0x4e)]
+interface IDXGIAdapter4(IDXGIAdapter4Vtbl): IDXGIAdapter3(IDXGIAdapter3Vtbl) {
+    fn GetDesc3(
+        pDesc: *mut DXGI_ADAPTER_DESC3,
+    ) -> HRESULT,
+}}
+STRUCT!{struct DXGI_OUTPUT_DESC1 {
+    DeviceName: [WCHAR; 32],
+    DesktopCoordinates: RECT,
+    AttachedToDesktop: BOOL,
+    Rotation: DXGI_MODE_ROTATION,
+    Monitor: HMONITOR,
+    BitsPerColor: UINT,
+    ColorSpace: DXGI_COLOR_SPACE_TYPE,
+    RedPrimary: [FLOAT; 2],
+    GreenPrimary: [FLOAT; 2],
+    BluePrimary: [FLOAT; 2],
+    WhitePoint: [FLOAT; 2],
+    MinLuminance: FLOAT,
+    MaxLuminance: FLOAT,
+    MaxFullFrameLuminance: FLOAT,
+}}
+ENUM!{enum DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS {
+    DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN = 1,
+    DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED = 2,
+    DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED = 4,
+}}
+RIDL!{#[uuid(0x068346e8, 0xaaec, 0x4b84, 0xad, 0xd7, 0x13, 0x7f, 0x51, 0x3f, 0x77, 0xa1)]
+interface IDXGIOutput6(IDXGIOutput6Vtbl): IDXGIOutput5(IDXGIOutput5Vtbl) {
+    fn GetDesc1(
+        pDesc: *mut DXGI_OUTPUT_DESC1,
+    ) -> HRESULT,
+    fn CheckHardwareCompositionSupport(
+        pFlags: *mut UINT,
+    ) -> HRESULT,
+}}
+ENUM!{enum DXGI_GPU_PREFERENCE {
+    DXGI_GPU_PREFERENCE_UNSPECIFIED = 0,
+    DXGI_GPU_PREFERENCE_MINIMUM_POWER = 1,
+    DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE = 2,
+}}
+RIDL!{#[uuid(0xc1b6694f, 0xff09, 0x44a9, 0xb0, 0x3c, 0x77, 0x90, 0x0a, 0x0a, 0x1d, 0x17)]
+interface IDXGIFactory6(IDXGIFactory6Vtbl): IDXGIFactory5(IDXGIFactory5Vtbl) {
+    fn EnumAdapterByGpuPreference(
+        Adapter: UINT,
+        GpuPreference: DXGI_GPU_PREFERENCE,
+        riid: REFIID,
+        ppvAdapter: *mut *mut c_void,
+    ) -> HRESULT,
+}}
+DEFINE_GUID!{IID_IDXGIAdapter4,
+    0x3c8d99d1, 0x4fbf, 0x4181, 0xa8, 0x2c, 0xaf, 0x66, 0xbf, 0x7b, 0xd2, 0x4e}
+DEFINE_GUID!{IID_IDXGIOutput6,
+    0x068346e8, 0xaaec, 0x4b84, 0xad, 0xd7, 0x13, 0x7f, 0x51, 0x3f, 0x77, 0xa1}
+DEFINE_GUID!{IID_IDXGIFactory6,
+    0xc1b6694f, 0xff09, 0x44a9, 0xb0, 0x3c, 0x77, 0x90, 0x0a, 0x0a, 0x1d, 0x17}
new file mode 100644
--- /dev/null
+++ b/third_party/rust/winapi/src/shared/evntprov.rs
@@ -0,0 +1,310 @@
+// Copyright © 2017 winapi-rs developers
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use shared::basetsd::{SIZE_T, ULONG64};
+use shared::guiddef::{LPCGUID, LPGUID};
+use shared::minwindef::{UCHAR, ULONG, USHORT};
+use um::winnt::{ANYSIZE_ARRAY, BOOLEAN, PCWSTR, PVOID, ULONGLONG, VOID};
+pub const EVENT_MIN_LEVEL: UCHAR = 0;
+pub const EVENT_MAX_LEVEL: UCHAR = 0xff;
+pub const EVENT_ACTIVITY_CTRL_GET_ID: ULONG = 1;
+pub const EVENT_ACTIVITY_CTRL_SET_ID: ULONG = 2;
+pub const EVENT_ACTIVITY_CTRL_CREATE_ID: ULONG = 3;
+pub const EVENT_ACTIVITY_CTRL_GET_SET_ID: ULONG = 4;
+pub const EVENT_ACTIVITY_CTRL_CREATE_SET_ID: ULONG = 5;
+pub const MAX_EVENT_DATA_DESCRIPTORS: SIZE_T = 128;
+pub const MAX_EVENT_FILTER_DATA_SIZE: SIZE_T = 1024;
+pub const MAX_EVENT_FILTER_PAYLOAD_SIZE: SIZE_T = 4096;
+pub const MAX_EVENT_FILTER_EVENT_NAME_SIZE: SIZE_T = 4096;
+pub const MAX_EVENT_FILTERS_COUNT: SIZE_T = 8;
+pub const MAX_EVENT_FILTER_PID_COUNT: SIZE_T = 8;
+pub const MAX_EVENT_FILTER_EVENT_ID_COUNT: SIZE_T = 64;
+pub const EVENT_FILTER_TYPE_NONE: ULONG = 0x00000000;
+pub const EVENT_FILTER_TYPE_SCHEMATIZED: ULONG = 0x80000000;
+pub const EVENT_FILTER_TYPE_SYSTEM_FLAGS: ULONG = 0x80000001;
+pub const EVENT_FILTER_TYPE_TRACEHANDLE: ULONG = 0x80000002;
+pub const EVENT_FILTER_TYPE_PID: ULONG = 0x80000004;
+pub const EVENT_FILTER_TYPE_EXECUTABLE_NAME: ULONG = 0x80000008;
+pub const EVENT_FILTER_TYPE_PACKAGE_ID: ULONG = 0x80000010;
+pub const EVENT_FILTER_TYPE_PACKAGE_APP_ID: ULONG = 0x80000020;
+pub const EVENT_FILTER_TYPE_PAYLOAD: ULONG = 0x80000100;
+pub const EVENT_FILTER_TYPE_EVENT_ID: ULONG = 0x80000200;
+pub const EVENT_FILTER_TYPE_EVENT_NAME: ULONG = 0x80000400;
+pub const EVENT_FILTER_TYPE_STACKWALK: ULONG = 0x80001000;
+pub const EVENT_FILTER_TYPE_STACKWALK_NAME: ULONG = 0x80001000;
+pub const EVENT_FILTER_TYPE_STACKWALK_LEVEL_KW: ULONG = 0x80004000;
+pub const EVENT_DATA_DESCRIPTOR_TYPE_NONE: UCHAR = 0;
+pub const EVENT_DATA_DESCRIPTOR_TYPE_EVENT_METADATA: UCHAR = 1;
+pub const EVENT_DATA_DESCRIPTOR_TYPE_PROVIDER_METADATA: UCHAR = 2;
+pub const EVENT_DATA_DESCRIPTOR_TYPE_TIMESTAMP_OVERRIDE: UCHAR = 3;
+pub const EVENT_WRITE_FLAG_NO_FAULTING: ULONG = 0x00000001;
+pub const EVENT_WRITE_FLAG_INPRIVATE: ULONG = 0x00000002;
+pub type REGHANDLE = ULONGLONG;
+pub type PREGHANDLE = *mut REGHANDLE;
+STRUCT!{struct EVENT_DATA_DESCRIPTOR_u_s {
+    Type: UCHAR,
+    Reserved1: UCHAR,
+    Reserved2: USHORT,
+}}
+UNION!{union EVENT_DATA_DESCRIPTOR_u {
+    [u32; 1],
+    Reserved Reserved_mut: ULONG,
+    s s_mut: EVENT_DATA_DESCRIPTOR_u_s,
+}}
+STRUCT!{struct EVENT_DATA_DESCRIPTOR {
+    Ptr: ULONGLONG,
+    Size: ULONG,
+    u: EVENT_DATA_DESCRIPTOR_u,
+}}
+pub type PEVENT_DATA_DESCRIPTOR = *mut EVENT_DATA_DESCRIPTOR;
+STRUCT!{struct EVENT_DESCRIPTOR {
+    Id: USHORT,
+    Version: UCHAR,
+    Channel: UCHAR,
+    Level: UCHAR,
+    Opcode: UCHAR,
+    Task: USHORT,
+    Keyword: ULONGLONG,
+}}
+pub type PEVENT_DESCRIPTOR = *mut EVENT_DESCRIPTOR;
+pub type PCEVENT_DESCRIPTOR = *const EVENT_DESCRIPTOR;
+STRUCT!{struct EVENT_FILTER_DESCRIPTOR {
+    Ptr: ULONGLONG,
+    Size: ULONG,
+    Type: ULONG,
+}}
+pub type PEVENT_FILTER_DESCRIPTOR = *mut EVENT_FILTER_DESCRIPTOR;
+STRUCT!{struct EVENT_FILTER_HEADER {
+    Id: USHORT,
+    Version: UCHAR,
+    Reserved: [UCHAR; 5],
+    InstanceId: ULONGLONG,
+    Size: ULONG,
+    NextOffset: ULONG,
+}}
+pub type PEVENT_FILTER_HEADER = *mut EVENT_FILTER_HEADER;
+STRUCT!{struct EVENT_FILTER_EVENT_ID {
+    FilterIn: BOOLEAN,
+    Reserved: UCHAR,
+    Count: USHORT,
+    Events: [USHORT; ANYSIZE_ARRAY],
+}}
+pub type PEVENT_FILTER_EVENT_ID = *mut EVENT_FILTER_EVENT_ID;
+STRUCT!{struct EVENT_FILTER_EVENT_NAME {
+    MatchAnyKeyword: ULONGLONG,
+    MatchAllKeyword: ULONGLONG,
+    Level: UCHAR,
+    FilterIn: BOOLEAN,
+    NameCount: USHORT,
+    Names: [UCHAR; ANYSIZE_ARRAY],
+}}
+pub type PEVENT_FILTER_EVENT_NAME = *mut EVENT_FILTER_EVENT_NAME;
+STRUCT!{struct EVENT_FILTER_LEVEL_KW {
+    MatchAnyKeyword: ULONGLONG,
+    MatchAllKeyword: ULONGLONG,
+    Level: UCHAR,
+    FilterIn: BOOLEAN,
+}}
+ENUM!{enum EVENT_INFO_CLASS {
+    EventProviderBinaryTrackInfo,
+    EventProviderSetReserved1,
+    EventProviderSetTraits,
+    EventProviderUseDescriptorType,
+    MaxEventInfo,
+}}
+FN!{stdcall PENABLECALLBACK(
+    SourceId: LPCGUID,
+    IsEnabled: ULONG,
+    Level: UCHAR,
+    MatchAnyKeyword: ULONGLONG,
+    MatchAllKeyword: ULONGLONG,
+    FilterData: PEVENT_FILTER_DESCRIPTOR,
+    CallbackContext: PVOID,
+) -> ()}
+extern "system" {
+    pub fn EventRegister(
+        ProviderId: LPCGUID,
+        EnableCallback: PENABLECALLBACK,
+        CallbackContext: PVOID,
+        RegHandle: PREGHANDLE,
+    ) -> ULONG;
+    pub fn EventUnregister(
+        RegHandle: REGHANDLE,
+    ) -> ULONG;
+    pub fn EventSetInformation(
+        RegHandle: REGHANDLE,
+        InformationClass: EVENT_INFO_CLASS,
+        EventInformation: PVOID,
+        InformationLength: ULONG,
+    ) -> ULONG;
+    pub fn EventEnabled(
+        RegHandle: REGHANDLE,
+        EventDescriptor: PCEVENT_DESCRIPTOR,
+    ) -> BOOLEAN;
+    pub fn EventProviderEnabled(
+        RegHandle: REGHANDLE,
+        Level: UCHAR,
+        Keyword: ULONGLONG,
+    ) -> BOOLEAN;
+    pub fn EventWrite(
+        RegHandle: REGHANDLE,
+        EventDescriptor: PCEVENT_DESCRIPTOR,
+        UserDataCount: ULONG,
+        UserData: PEVENT_DATA_DESCRIPTOR,
+    ) -> ULONG;
+    pub fn EventWriteTransfer(
+        RegHandle: REGHANDLE,
+        EventDescriptor: PCEVENT_DESCRIPTOR,
+        ActivityId: LPCGUID,
+        RelatedActivityId: LPCGUID,
+        UserDataCount: ULONG,
+        UserData: PEVENT_DATA_DESCRIPTOR,
+    ) -> ULONG;
+    pub fn EventWriteEx(
+        RegHandle: REGHANDLE,
+        EventDescriptor: PCEVENT_DESCRIPTOR,
+        Filter: ULONG64,
+        Flags: ULONG,
+        ActivityId: LPCGUID,
+        RelatedActivityId: LPCGUID,
+        UserDataCount: ULONG,
+        UserData: PEVENT_DATA_DESCRIPTOR,
+    ) -> ULONG;
+    pub fn EventWriteString(
+        RegHandle: REGHANDLE,
+        Level: UCHAR,
+        Keyword: ULONGLONG,
+        EventString: PCWSTR,
+    ) -> ULONG;
+    pub fn EventActivityIdControl(
+        ControlCode: ULONG,
+        ActivityId: LPGUID,
+    ) -> ULONG;
+}
+#[inline]
+pub unsafe fn EventDataDescCreate(
+    EventDataDescriptor: PEVENT_DATA_DESCRIPTOR,
+    DataPtr: *const VOID,
+    DataSize: ULONG,
+) {
+    (*EventDataDescriptor).Ptr = DataPtr as ULONGLONG;
+    (*EventDataDescriptor).Size = DataSize;
+    *(*EventDataDescriptor).u.Reserved_mut() = 0;
+}
+#[inline]
+pub unsafe fn EventDescCreate(
+    EventDescriptor: PEVENT_DESCRIPTOR,
+    Id: USHORT,
+    Version: UCHAR,
+    Channel: UCHAR,
+    Level: UCHAR,
+    Task: USHORT,
+    Opcode: UCHAR,
+    Keyword: ULONGLONG,
+) {
+    (*EventDescriptor).Id = Id;
+    (*EventDescriptor).Version = Version;
+    (*EventDescriptor).Channel = Channel;
+    (*EventDescriptor).Level = Level;
+    (*EventDescriptor).Task = Task;
+    (*EventDescriptor).Opcode = Opcode;
+    (*EventDescriptor).Keyword = Keyword;
+}
+#[inline]
+pub unsafe fn EventDescZero(EventDescriptor: PEVENT_DESCRIPTOR) {
+    use core::ptr::write_bytes;
+    // FIXME: 16 = sizeof::<EVENT_DESCRIPTOR>()
+    write_bytes(EventDescriptor, 0, 16);
+}
+#[inline]
+pub unsafe fn EventDescGetId(EventDescriptor: PCEVENT_DESCRIPTOR) -> USHORT {
+    (*EventDescriptor).Id
+}
+#[inline]
+pub unsafe fn EventDescGetVersion(EventDescriptor: PCEVENT_DESCRIPTOR) -> UCHAR {
+    (*EventDescriptor).Version
+}
+#[inline]
+pub unsafe fn EventDescGetTask(EventDescriptor: PCEVENT_DESCRIPTOR) -> USHORT {
+    (*EventDescriptor).Task
+}
+#[inline]
+pub unsafe fn EventDescGetOpcode(EventDescriptor: PCEVENT_DESCRIPTOR) -> UCHAR {
+    (*EventDescriptor).Opcode
+}
+#[inline]
+pub unsafe fn EventDescGetChannel(EventDescriptor: PCEVENT_DESCRIPTOR) -> UCHAR {
+    (*EventDescriptor).Channel
+}
+#[inline]
+pub unsafe fn EventDescGetLevel(EventDescriptor: PCEVENT_DESCRIPTOR) -> UCHAR {
+    (*EventDescriptor).Level
+}
+#[inline]
+pub unsafe fn EventDescGetKeyword(EventDescriptor: PCEVENT_DESCRIPTOR) -> ULONGLONG {
+    (*EventDescriptor).Keyword
+}
+#[inline]
+pub unsafe fn EventDescSetId(EventDescriptor: PEVENT_DESCRIPTOR, Id: USHORT) -> PEVENT_DESCRIPTOR {
+    (*EventDescriptor).Id = Id;
+    EventDescriptor
+}
+#[inline]
+pub unsafe fn EventDescSetVersion(
+    EventDescriptor: PEVENT_DESCRIPTOR,
+    Version: UCHAR,
+) -> PEVENT_DESCRIPTOR {
+    (*EventDescriptor).Version = Version;
+    EventDescriptor
+}
+#[inline]
+pub unsafe fn EventDescSetTask(
+    EventDescriptor: PEVENT_DESCRIPTOR,
+    Task: USHORT,
+) -> PEVENT_DESCRIPTOR {
+    (*EventDescriptor).Task = Task;
+    EventDescriptor
+}
+#[inline]
+pub unsafe fn EventDescSetOpcode(
+    EventDescriptor: PEVENT_DESCRIPTOR,
+    Opcode: UCHAR,
+) -> PEVENT_DESCRIPTOR {
+    (*EventDescriptor).Opcode = Opcode;
+    EventDescriptor
+}
+#[inline]
+pub unsafe fn EventDescSetLevel(
+    EventDescriptor: PEVENT_DESCRIPTOR,
+    Level: UCHAR,
+) -> PEVENT_DESCRIPTOR {
+    (*EventDescriptor).Level = Level;
+    EventDescriptor
+}
+#[inline]
+pub unsafe fn EventDescSetChannel(
+    EventDescriptor: PEVENT_DESCRIPTOR,
+    Channel: UCHAR,
+) -> PEVENT_DESCRIPTOR {
+    (*EventDescriptor).Channel = Channel;
+    EventDescriptor
+}
+#[inline]
+pub unsafe fn EventDescSetKeyword(
+    EventDescriptor: PEVENT_DESCRIPTOR,
+    Keyword: ULONGLONG,
+) -> PEVENT_DESCRIPTOR {
+    (*EventDescriptor).Keyword = Keyword;
+    EventDescriptor
+}
+#[inline]
+pub unsafe fn EventDescOrKeyword(
+    EventDescriptor: PEVENT_DESCRIPTOR,
+    Keyword: ULONGLONG,
+) -> PEVENT_DESCRIPTOR {
+    (*EventDescriptor).Keyword |= Keyword;
+    EventDescriptor
+}
new file mode 100644
--- /dev/null
+++ b/third_party/rust/winapi/src/shared/evntrace.rs
@@ -0,0 +1,991 @@
+// Copyright © 2017 winapi-rs developers
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use shared::basetsd::{SIZE_T, ULONG32, ULONG64};
+use shared::evntprov::PEVENT_FILTER_DESCRIPTOR;
+use shared::guiddef::{GUID, LPCGUID, LPGUID};
+use shared::minwindef::{DWORD, LPFILETIME, PULONG, UCHAR, UINT, ULONG, USHORT};
+use shared::wmistr::{WMIDPREQUESTCODE, WNODE_HEADER};
+use um::evntcons::PEVENT_RECORD;
+use um::handleapi::INVALID_HANDLE_VALUE;
+use um::timezoneapi::TIME_ZONE_INFORMATION;
+use um::winnt::{
+    ANYSIZE_ARRAY, BOOLEAN, HANDLE, LARGE_INTEGER, LONG, LONGLONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR,
+    PVOID, ULONGLONG, WCHAR
+};
+use vc::vadefs::va_list;
+DEFINE_GUID!{EventTraceGuid,
+    0x68fdd900, 0x4a3e, 0x11d1, 0x84, 0xf4, 0x00, 0x00, 0xf8, 0x04, 0x64, 0xe3}
+DEFINE_GUID!{SystemTraceControlGuid,
+    0x9e814aad, 0x3204, 0x11d2, 0x9a, 0x82, 0x00, 0x60, 0x08, 0xa8, 0x69, 0x39}
+DEFINE_GUID!{EventTraceConfigGuid,
+    0x01853a65, 0x418f, 0x4f36, 0xae, 0xfc, 0xdc, 0x0f, 0x1d, 0x2f, 0xd2, 0x35}
+DEFINE_GUID!{DefaultTraceSecurityGuid,
+    0x0811c1af, 0x7a07, 0x4a06, 0x82, 0xed, 0x86, 0x94, 0x55, 0xcd, 0xf7, 0x13}
+DEFINE_GUID!{PrivateLoggerNotificationGuid,
+    0x3595ab5c, 0x042a, 0x4c8e, 0xb9, 0x42, 0x2d, 0x05, 0x9b, 0xfe, 0xb1, 0xb1}
+pub const KERNEL_LOGGER_NAME: &'static str = "NT Kernel Logger";
+pub const GLOBAL_LOGGER_NAME: &'static str = "GlobalLogger";
+pub const EVENT_LOGGER_NAME: &'static str = "EventLog";
+pub const DIAG_LOGGER_NAME: &'static str = "DiagLog";
+pub const MAX_MOF_FIELDS: SIZE_T = 16;
+DECLARE_HANDLE!{TRACEHANDLE, __TRACEHANDLE}
+pub type PTRACEHANDLE = *mut TRACEHANDLE;
+pub const EVENT_TRACE_TYPE_INFO: DWORD = 0x00;
+pub const EVENT_TRACE_TYPE_START: DWORD = 0x01;
+pub const EVENT_TRACE_TYPE_END: DWORD = 0x02;
+pub const EVENT_TRACE_TYPE_STOP: DWORD = 0x02;
+pub const EVENT_TRACE_TYPE_DC_START: DWORD = 0x03;
+pub const EVENT_TRACE_TYPE_DC_END: DWORD = 0x04;
+pub const EVENT_TRACE_TYPE_EXTENSION: DWORD = 0x05;
+pub const EVENT_TRACE_TYPE_REPLY: DWORD = 0x06;
+pub const EVENT_TRACE_TYPE_DEQUEUE: DWORD = 0x07;
+pub const EVENT_TRACE_TYPE_RESUME: DWORD = 0x07;
+pub const EVENT_TRACE_TYPE_CHECKPOINT: DWORD = 0x08;
+pub const EVENT_TRACE_TYPE_SUSPEND: DWORD = 0x08;
+pub const EVENT_TRACE_TYPE_WINEVT_SEND: DWORD = 0x09;
+pub const EVENT_TRACE_TYPE_WINEVT_RECEIVE: DWORD = 0xF0;
+pub const TRACE_LEVEL_CRITICAL: UCHAR = 1;
+pub const TRACE_LEVEL_ERROR: UCHAR = 2;
+pub const TRACE_LEVEL_WARNING: UCHAR = 3;
+pub const TRACE_LEVEL_INFORMATION: UCHAR = 4;
+pub const TRACE_LEVEL_VERBOSE: UCHAR = 5;
+pub const TRACE_LEVEL_RESERVED6: UCHAR = 6;
+pub const TRACE_LEVEL_RESERVED7: UCHAR = 7;
+pub const TRACE_LEVEL_RESERVED8: UCHAR = 8;
+pub const TRACE_LEVEL_RESERVED9: UCHAR = 9;
+pub const EVENT_TRACE_TYPE_LOAD: DWORD = 0x0A;
+pub const EVENT_TRACE_TYPE_TERMINATE: DWORD = 0x0B;
+pub const EVENT_TRACE_TYPE_IO_READ: DWORD = 0x0A;
+pub const EVENT_TRACE_TYPE_IO_WRITE: DWORD = 0x0B;
+pub const EVENT_TRACE_TYPE_IO_READ_INIT: DWORD = 0x0C;
+pub const EVENT_TRACE_TYPE_IO_WRITE_INIT: DWORD = 0x0D;
+pub const EVENT_TRACE_TYPE_IO_FLUSH: DWORD = 0x0E;
+pub const EVENT_TRACE_TYPE_IO_FLUSH_INIT: DWORD = 0x0F;
+pub const EVENT_TRACE_TYPE_IO_REDIRECTED_INIT: DWORD = 0x10;
+pub const EVENT_TRACE_TYPE_MM_TF: DWORD = 0x0A;
+pub const EVENT_TRACE_TYPE_MM_DZF: DWORD = 0x0B;
+pub const EVENT_TRACE_TYPE_MM_COW: DWORD = 0x0C;
+pub const EVENT_TRACE_TYPE_MM_GPF: DWORD = 0x0D;
+pub const EVENT_TRACE_TYPE_MM_HPF: DWORD = 0x0E;
+pub const EVENT_TRACE_TYPE_MM_AV: DWORD = 0x0F;
+pub const EVENT_TRACE_TYPE_SEND: DWORD = 0x0A;
+pub const EVENT_TRACE_TYPE_RECEIVE: DWORD = 0x0B;
+pub const EVENT_TRACE_TYPE_CONNECT: DWORD = 0x0C;
+pub const EVENT_TRACE_TYPE_DISCONNECT: DWORD = 0x0D;
+pub const EVENT_TRACE_TYPE_RETRANSMIT: DWORD = 0x0E;
+pub const EVENT_TRACE_TYPE_ACCEPT: DWORD = 0x0F;
+pub const EVENT_TRACE_TYPE_RECONNECT: DWORD = 0x10;
+pub const EVENT_TRACE_TYPE_CONNFAIL: DWORD = 0x11;
+pub const EVENT_TRACE_TYPE_COPY_TCP: DWORD = 0x12;
+pub const EVENT_TRACE_TYPE_COPY_ARP: DWORD = 0x13;
+pub const EVENT_TRACE_TYPE_ACKFULL: DWORD = 0x14;
+pub const EVENT_TRACE_TYPE_ACKPART: DWORD = 0x15;
+pub const EVENT_TRACE_TYPE_ACKDUP: DWORD = 0x16;
+pub const EVENT_TRACE_TYPE_GUIDMAP: DWORD = 0x0A;
+pub const EVENT_TRACE_TYPE_CONFIG: DWORD = 0x0B;
+pub const EVENT_TRACE_TYPE_SIDINFO: DWORD = 0x0C;
+pub const EVENT_TRACE_TYPE_SECURITY: DWORD = 0x0D;
+pub const EVENT_TRACE_TYPE_DBGID_RSDS: DWORD = 0x40;
+pub const EVENT_TRACE_TYPE_REGCREATE: DWORD = 0x0A;
+pub const EVENT_TRACE_TYPE_REGOPEN: DWORD = 0x0B;
+pub const EVENT_TRACE_TYPE_REGDELETE: DWORD = 0x0C;
+pub const EVENT_TRACE_TYPE_REGQUERY: DWORD = 0x0D;
+pub const EVENT_TRACE_TYPE_REGSETVALUE: DWORD = 0x0E;
+pub const EVENT_TRACE_TYPE_REGDELETEVALUE: DWORD = 0x0F;
+pub const EVENT_TRACE_TYPE_REGQUERYVALUE: DWORD = 0x10;
+pub const EVENT_TRACE_TYPE_REGENUMERATEKEY: DWORD = 0x11;
+pub const EVENT_TRACE_TYPE_REGENUMERATEVALUEKEY: DWORD = 0x12;
+pub const EVENT_TRACE_TYPE_REGQUERYMULTIPLEVALUE: DWORD = 0x13;
+pub const EVENT_TRACE_TYPE_REGSETINFORMATION: DWORD = 0x14;
+pub const EVENT_TRACE_TYPE_REGFLUSH: DWORD = 0x15;
+pub const EVENT_TRACE_TYPE_REGKCBCREATE: DWORD = 0x16;
+pub const EVENT_TRACE_TYPE_REGKCBDELETE: DWORD = 0x17;
+pub const EVENT_TRACE_TYPE_REGKCBRUNDOWNBEGIN: DWORD = 0x18;
+pub const EVENT_TRACE_TYPE_REGKCBRUNDOWNEND: DWORD = 0x19;
+pub const EVENT_TRACE_TYPE_REGVIRTUALIZE: DWORD = 0x1A;
+pub const EVENT_TRACE_TYPE_REGCLOSE: DWORD = 0x1B;
+pub const EVENT_TRACE_TYPE_REGSETSECURITY: DWORD = 0x1C;
+pub const EVENT_TRACE_TYPE_REGQUERYSECURITY: DWORD = 0x1D;
+pub const EVENT_TRACE_TYPE_REGCOMMIT: DWORD = 0x1E;
+pub const EVENT_TRACE_TYPE_REGPREPARE: DWORD = 0x1F;
+pub const EVENT_TRACE_TYPE_REGROLLBACK: DWORD = 0x20;
+pub const EVENT_TRACE_TYPE_REGMOUNTHIVE: DWORD = 0x21;
+pub const EVENT_TRACE_TYPE_CONFIG_CPU: DWORD = 0x0A;
+pub const EVENT_TRACE_TYPE_CONFIG_PHYSICALDISK: DWORD = 0x0B;
+pub const EVENT_TRACE_TYPE_CONFIG_LOGICALDISK: DWORD = 0x0C;
+pub const EVENT_TRACE_TYPE_CONFIG_NIC: DWORD = 0x0D;
+pub const EVENT_TRACE_TYPE_CONFIG_VIDEO: DWORD = 0x0E;
+pub const EVENT_TRACE_TYPE_CONFIG_SERVICES: DWORD = 0x0F;
+pub const EVENT_TRACE_TYPE_CONFIG_POWER: DWORD = 0x10;
+pub const EVENT_TRACE_TYPE_CONFIG_NETINFO: DWORD = 0x11;
+pub const EVENT_TRACE_TYPE_CONFIG_OPTICALMEDIA: DWORD = 0x12;
+pub const EVENT_TRACE_TYPE_CONFIG_IRQ: DWORD = 0x15;
+pub const EVENT_TRACE_TYPE_CONFIG_PNP: DWORD = 0x16;
+pub const EVENT_TRACE_TYPE_CONFIG_IDECHANNEL: DWORD = 0x17;
+pub const EVENT_TRACE_TYPE_CONFIG_NUMANODE: DWORD = 0x18;
+pub const EVENT_TRACE_TYPE_CONFIG_PLATFORM: DWORD = 0x19;
+pub const EVENT_TRACE_TYPE_CONFIG_PROCESSORGROUP: DWORD = 0x1A;
+pub const EVENT_TRACE_TYPE_CONFIG_PROCESSORNUMBER: DWORD = 0x1B;
+pub const EVENT_TRACE_TYPE_CONFIG_DPI: DWORD = 0x1C;
+pub const EVENT_TRACE_TYPE_CONFIG_CI_INFO: DWORD = 0x1D;
+pub const EVENT_TRACE_TYPE_CONFIG_MACHINEID: DWORD = 0x1E;
+pub const EVENT_TRACE_TYPE_CONFIG_DEFRAG: DWORD = 0x1F;
+pub const EVENT_TRACE_TYPE_CONFIG_MOBILEPLATFORM: DWORD = 0x20;
+pub const EVENT_TRACE_TYPE_CONFIG_DEVICEFAMILY: DWORD = 0x21;
+pub const EVENT_TRACE_TYPE_CONFIG_FLIGHTID: DWORD = 0x22;
+pub const EVENT_TRACE_TYPE_CONFIG_PROCESSOR: DWORD = 0x23;
+pub const EVENT_TRACE_TYPE_OPTICAL_IO_READ: DWORD = 0x37;
+pub const EVENT_TRACE_TYPE_OPTICAL_IO_WRITE: DWORD = 0x38;
+pub const EVENT_TRACE_TYPE_OPTICAL_IO_FLUSH: DWORD = 0x39;
+pub const EVENT_TRACE_TYPE_OPTICAL_IO_READ_INIT: DWORD = 0x3a;
+pub const EVENT_TRACE_TYPE_OPTICAL_IO_WRITE_INIT: DWORD = 0x3b;
+pub const EVENT_TRACE_TYPE_OPTICAL_IO_FLUSH_INIT: DWORD = 0x3c;
+pub const EVENT_TRACE_TYPE_FLT_PREOP_INIT: DWORD = 0x60;
+pub const EVENT_TRACE_TYPE_FLT_POSTOP_INIT: DWORD = 0x61;
+pub const EVENT_TRACE_TYPE_FLT_PREOP_COMPLETION: DWORD = 0x62;
+pub const EVENT_TRACE_TYPE_FLT_POSTOP_COMPLETION: DWORD = 0x63;
+pub const EVENT_TRACE_TYPE_FLT_PREOP_FAILURE: DWORD = 0x64;
+pub const EVENT_TRACE_TYPE_FLT_POSTOP_FAILURE: DWORD = 0x65;
+pub const EVENT_TRACE_FLAG_PROCESS: DWORD = 0x00000001;
+pub const EVENT_TRACE_FLAG_THREAD: DWORD = 0x00000002;
+pub const EVENT_TRACE_FLAG_IMAGE_LOAD: DWORD = 0x00000004;
+pub const EVENT_TRACE_FLAG_DISK_IO: DWORD = 0x00000100;
+pub const EVENT_TRACE_FLAG_DISK_FILE_IO: DWORD = 0x00000200;
+pub const EVENT_TRACE_FLAG_MEMORY_PAGE_FAULTS: DWORD = 0x00001000;
+pub const EVENT_TRACE_FLAG_MEMORY_HARD_FAULTS: DWORD = 0x00002000;
+pub const EVENT_TRACE_FLAG_NETWORK_TCPIP: DWORD = 0x00010000;
+pub const EVENT_TRACE_FLAG_REGISTRY: DWORD = 0x00020000;
+pub const EVENT_TRACE_FLAG_DBGPRINT: DWORD = 0x00040000;
+pub const EVENT_TRACE_FLAG_PROCESS_COUNTERS: DWORD = 0x00000008;
+pub const EVENT_TRACE_FLAG_CSWITCH: DWORD = 0x00000010;
+pub const EVENT_TRACE_FLAG_DPC: DWORD = 0x00000020;
+pub const EVENT_TRACE_FLAG_INTERRUPT: DWORD = 0x00000040;
+pub const EVENT_TRACE_FLAG_SYSTEMCALL: DWORD = 0x00000080;
+pub const EVENT_TRACE_FLAG_DISK_IO_INIT: DWORD = 0x00000400;
+pub const EVENT_TRACE_FLAG_ALPC: DWORD = 0x00100000;
+pub const EVENT_TRACE_FLAG_SPLIT_IO: DWORD = 0x00200000;
+pub const EVENT_TRACE_FLAG_DRIVER: DWORD = 0x00800000;
+pub const EVENT_TRACE_FLAG_PROFILE: DWORD = 0x01000000;
+pub const EVENT_TRACE_FLAG_FILE_IO: DWORD = 0x02000000;
+pub const EVENT_TRACE_FLAG_FILE_IO_INIT: DWORD = 0x04000000;
+pub const EVENT_TRACE_FLAG_DISPATCHER: DWORD = 0x00000800;
+pub const EVENT_TRACE_FLAG_VIRTUAL_ALLOC: DWORD = 0x00004000;
+pub const EVENT_TRACE_FLAG_VAMAP: DWORD = 0x00008000;
+pub const EVENT_TRACE_FLAG_NO_SYSCONFIG: DWORD = 0x10000000;
+pub const EVENT_TRACE_FLAG_JOB: DWORD = 0x00080000;
+pub const EVENT_TRACE_FLAG_DEBUG_EVENTS: DWORD = 0x00400000;
+pub const EVENT_TRACE_FLAG_EXTENSION: DWORD = 0x80000000;
+pub const EVENT_TRACE_FLAG_FORWARD_WMI: DWORD = 0x40000000;
+pub const EVENT_TRACE_FLAG_ENABLE_RESERVE: DWORD = 0x20000000;
+pub const EVENT_TRACE_FILE_MODE_NONE: DWORD = 0x00000000;
+pub const EVENT_TRACE_FILE_MODE_SEQUENTIAL: DWORD = 0x00000001;
+pub const EVENT_TRACE_FILE_MODE_CIRCULAR: DWORD = 0x00000002;
+pub const EVENT_TRACE_FILE_MODE_APPEND: DWORD = 0x00000004;
+pub const EVENT_TRACE_REAL_TIME_MODE: DWORD = 0x00000100;
+pub const EVENT_TRACE_DELAY_OPEN_FILE_MODE: DWORD = 0x00000200;
+pub const EVENT_TRACE_BUFFERING_MODE: DWORD = 0x00000400;
+pub const EVENT_TRACE_PRIVATE_LOGGER_MODE: DWORD = 0x00000800;
+pub const EVENT_TRACE_ADD_HEADER_MODE: DWORD = 0x00001000;
+pub const EVENT_TRACE_USE_GLOBAL_SEQUENCE: DWORD = 0x00004000;
+pub const EVENT_TRACE_USE_LOCAL_SEQUENCE: DWORD = 0x00008000;
+pub const EVENT_TRACE_RELOG_MODE: DWORD = 0x00010000;
+pub const EVENT_TRACE_USE_PAGED_MEMORY: DWORD = 0x01000000;
+pub const EVENT_TRACE_FILE_MODE_NEWFILE: DWORD = 0x00000008;
+pub const EVENT_TRACE_FILE_MODE_PREALLOCATE: DWORD = 0x00000020;
+pub const EVENT_TRACE_NONSTOPPABLE_MODE: DWORD = 0x00000040;
+pub const EVENT_TRACE_SECURE_MODE: DWORD = 0x00000080;
+pub const EVENT_TRACE_USE_KBYTES_FOR_SIZE: DWORD = 0x00002000;
+pub const EVENT_TRACE_PRIVATE_IN_PROC: DWORD = 0x00020000;
+pub const EVENT_TRACE_MODE_RESERVED: DWORD = 0x00100000;
+pub const EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING: DWORD = 0x10000000;
+pub const EVENT_TRACE_SYSTEM_LOGGER_MODE: DWORD = 0x02000000;
+pub const EVENT_TRACE_ADDTO_TRIAGE_DUMP: DWORD = 0x80000000;
+pub const EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWN: DWORD = 0x00400000;
+pub const EVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN: DWORD = 0x00800000;
+pub const EVENT_TRACE_INDEPENDENT_SESSION_MODE: DWORD = 0x08000000;
+pub const EVENT_TRACE_COMPRESSED_MODE: DWORD = 0x04000000;
+pub const EVENT_TRACE_CONTROL_QUERY: DWORD = 0;
+pub const EVENT_TRACE_CONTROL_STOP: DWORD = 1;
+pub const EVENT_TRACE_CONTROL_UPDATE: DWORD = 2;
+pub const EVENT_TRACE_CONTROL_FLUSH: DWORD = 3;
+pub const TRACE_MESSAGE_SEQUENCE: DWORD = 1;
+pub const TRACE_MESSAGE_GUID: DWORD = 2;
+pub const TRACE_MESSAGE_COMPONENTID: DWORD = 4;
+pub const TRACE_MESSAGE_TIMESTAMP: DWORD = 8;
+pub const TRACE_MESSAGE_PERFORMANCE_TIMESTAMP: DWORD = 16;
+pub const TRACE_MESSAGE_SYSTEMINFO: DWORD = 32;
+pub const TRACE_MESSAGE_POINTER32: DWORD = 0x0040;
+pub const TRACE_MESSAGE_POINTER64: DWORD = 0x0080;
+pub const TRACE_MESSAGE_FLAG_MASK: DWORD = 0xFFFF;
+pub const TRACE_MESSAGE_MAXIMUM_SIZE: SIZE_T = 64 * 1024;
+pub const EVENT_TRACE_USE_PROCTIME: DWORD = 0x0001;
+pub const EVENT_TRACE_USE_NOCPUTIME: DWORD = 0x0002;
+pub const TRACE_HEADER_FLAG_USE_TIMESTAMP: DWORD = 0x00000200;
+pub const TRACE_HEADER_FLAG_TRACED_GUID: DWORD = 0x00020000;
+pub const TRACE_HEADER_FLAG_LOG_WNODE: DWORD = 0x00040000;
+pub const TRACE_HEADER_FLAG_USE_GUID_PTR: DWORD = 0x00080000;
+pub const TRACE_HEADER_FLAG_USE_MOF_PTR: DWORD = 0x00100000;
+ENUM!{enum ETW_COMPRESSION_RESUMPTION_MODE {
+    EtwCompressionModeRestart = 0,
+    EtwCompressionModeNoDisable = 1,
+    EtwCompressionModeNoRestart = 2,
+}}
+STRUCT!{struct EVENT_TRACE_HEADER_u1_s {
+    HeaderType: UCHAR,
+    MarkerFlags: UCHAR,
+}}
+UNION!{union EVENT_TRACE_HEADER_u1 {
+    [u16; 1],
+    FieldTypeFlags FieldTypeFlags_mut: USHORT,
+    s s_mut: EVENT_TRACE_HEADER_u1_s,
+}}
+STRUCT!{struct EVENT_TRACE_HEADER_u2_CLASS {
+    Type: UCHAR,
+    Level: UCHAR,
+    Version: USHORT,
+}}
+UNION!{union EVENT_TRACE_HEADER_u2 {
+    [u32; 1],
+    Version Version_mut: ULONG,
+    Class Class_mut: EVENT_TRACE_HEADER_u2_CLASS,
+}}
+UNION!{union EVENT_TRACE_HEADER_u3 {
+    [u64; 2],
+    Guid Guid_mut: GUID,
+    GuidPtr GuidPtr_mut: ULONGLONG,
+}}
+STRUCT!{struct EVENT_TRACE_HEADER_u4_s1 {
+    ClientContext: ULONG,
+    Flags: ULONG,
+}}
+STRUCT!{struct EVENT_TRACE_HEADER_u4_s2 {
+    KernelTime: ULONG,
+    UserTime: ULONG,
+}}
+UNION!{union EVENT_TRACE_HEADER_u4 {
+    [u64; 1],
+    s1 s1_mut: EVENT_TRACE_HEADER_u4_s1,
+    s2 s2_mut: EVENT_TRACE_HEADER_u4_s2,
+    ProcessorTime ProcessorTime_mut: ULONG64,
+}}
+STRUCT!{struct EVENT_TRACE_HEADER {
+    Size: USHORT,
+    u1: EVENT_TRACE_HEADER_u1,
+    u2: EVENT_TRACE_HEADER_u2,
+    ThreadId: ULONG,
+    ProcessId: ULONG,
+    TimeStamp: LARGE_INTEGER,
+    u3: EVENT_TRACE_HEADER_u3,
+    u4: EVENT_TRACE_HEADER_u4,
+}}
+pub type PEVENT_TRACE_HEADER = *mut EVENT_TRACE_HEADER;
+STRUCT!{struct EVENT_INSTANCE_HEADER_u1_s {
+    HeaderType: UCHAR,
+    MarkerFlags: UCHAR,
+}}
+UNION!{union EVENT_INSTANCE_HEADER_u1 {
+    [u16; 1],
+    FieldTypeFlags FieldTypeFlags_mut: USHORT,
+    s s_mut: EVENT_INSTANCE_HEADER_u1_s,
+}}
+STRUCT!{struct EVENT_INSTANCE_HEADER_u2_CLASS {
+    Type: UCHAR,
+    Level: UCHAR,
+    Version: USHORT,
+}}
+UNION!{union EVENT_INSTANCE_HEADER_u2 {
+    [u32; 1],
+    Version Version_mut: ULONG,
+    Class Class_mut: EVENT_INSTANCE_HEADER_u2_CLASS,
+}}
+STRUCT!{struct EVENT_INSTANCE_HEADER_u3_s1 {
+    KernelTime: ULONG,
+    UserTime: ULONG,
+}}
+STRUCT!{struct EVENT_INSTANCE_HEADER_u3_s2 {
+    EventId: ULONG,
+    Flags: ULONG,
+}}
+UNION!{union EVENT_INSTANCE_HEADER_u3 {
+    [u64; 1],
+    s1 s1_mut: EVENT_INSTANCE_HEADER_u3_s1,
+    ProcessorTime ProcessorTime_mut: ULONG64,
+    s2 s2_mut: EVENT_INSTANCE_HEADER_u3_s2,
+}}
+STRUCT!{struct EVENT_INSTANCE_HEADER {
+    Size: USHORT,
+    u1: EVENT_INSTANCE_HEADER_u1,
+    u2: EVENT_INSTANCE_HEADER_u2,
+    ThreadId: ULONG,
+    ProcessId: ULONG,
+    TimeStamp: LARGE_INTEGER,
+    RegHandle: ULONGLONG,
+    InstanceId: ULONG,
+    ParentInstanceId: ULONG,
+    u3: EVENT_INSTANCE_HEADER_u3,
+    ParentRegHandle: ULONGLONG,
+}}
+pub type PEVENT_INSTANCE_HEADER = *mut EVENT_INSTANCE_HEADER;
+pub const ETW_NULL_TYPE_VALUE: ULONG = 0;
+pub const ETW_OBJECT_TYPE_VALUE: ULONG = 1;
+pub const ETW_STRING_TYPE_VALUE: ULONG = 2;
+pub const ETW_SBYTE_TYPE_VALUE: ULONG = 3;
+pub const ETW_BYTE_TYPE_VALUE: ULONG = 4;
+pub const ETW_INT16_TYPE_VALUE: ULONG = 5;
+pub const ETW_UINT16_TYPE_VALUE: ULONG = 6;
+pub const ETW_INT32_TYPE_VALUE: ULONG = 7;
+pub const ETW_UINT32_TYPE_VALUE: ULONG = 8;
+pub const ETW_INT64_TYPE_VALUE: ULONG = 9;
+pub const ETW_UINT64_TYPE_VALUE: ULONG = 10;
+pub const ETW_CHAR_TYPE_VALUE: ULONG = 11;
+pub const ETW_SINGLE_TYPE_VALUE: ULONG = 12;
+pub const ETW_DOUBLE_TYPE_VALUE: ULONG = 13;
+pub const ETW_BOOLEAN_TYPE_VALUE: ULONG = 14;
+pub const ETW_DECIMAL_TYPE_VALUE: ULONG = 15;
+pub const ETW_GUID_TYPE_VALUE: ULONG = 101;
+pub const ETW_ASCIICHAR_TYPE_VALUE: ULONG = 102;
+pub const ETW_ASCIISTRING_TYPE_VALUE: ULONG = 103;
+pub const ETW_COUNTED_STRING_TYPE_VALUE: ULONG = 104;
+pub const ETW_POINTER_TYPE_VALUE: ULONG = 105;
+pub const ETW_SIZET_TYPE_VALUE: ULONG = 106;
+pub const ETW_HIDDEN_TYPE_VALUE: ULONG = 107;
+pub const ETW_BOOL_TYPE_VALUE: ULONG = 108;
+pub const ETW_COUNTED_ANSISTRING_TYPE_VALUE: ULONG = 109;
+pub const ETW_REVERSED_COUNTED_STRING_TYPE_VALUE: ULONG = 110;
+pub const ETW_REVERSED_COUNTED_ANSISTRING_TYPE_VALUE: ULONG = 111;
+pub const ETW_NON_NULL_TERMINATED_STRING_TYPE_VALUE: ULONG = 112;
+pub const ETW_REDUCED_ANSISTRING_TYPE_VALUE: ULONG = 113;
+pub const ETW_REDUCED_STRING_TYPE_VALUE: ULONG = 114;
+pub const ETW_SID_TYPE_VALUE: ULONG = 115;
+pub const ETW_VARIANT_TYPE_VALUE: ULONG = 116;
+pub const ETW_PTVECTOR_TYPE_VALUE: ULONG = 117;
+pub const ETW_WMITIME_TYPE_VALUE: ULONG = 118;
+pub const ETW_DATETIME_TYPE_VALUE: ULONG = 119;
+pub const ETW_REFRENCE_TYPE_VALUE: ULONG = 120;
+// TODO: DEFINE_TRACE_MOF_FIELD
+STRUCT!{struct MOF_FIELD{
+    DataPtr: ULONG64,
+    Length: ULONG,
+    DataType: ULONG,
+}}
+pub type PMOF_FIELD = *mut MOF_FIELD;
+STRUCT!{struct TRACE_LOGFILE_HEADER_u1_VERSIONDETAIL {
+    MajorVersion: UCHAR,
+    MinorVersion: UCHAR,
+    SubVersion: UCHAR,
+    SubMinorVersion: UCHAR,
+}}
+UNION!{union TRACE_LOGFILE_HEADER_u1 {
+    [u32; 1],
+    Version Version_mut: ULONG,
+    VersionDetail VersionDetail_mut: TRACE_LOGFILE_HEADER_u1_VERSIONDETAIL,
+}}
+STRUCT!{struct TRACE_LOGFILE_HEADER_u2_s {
+    StartBuffers: ULONG,
+    PointerSize: ULONG,
+    EventsLost: ULONG,
+    CpuSpeedInMHz: ULONG,
+}}
+UNION!{union TRACE_LOGFILE_HEADER_u2 {
+    [u32; 4],
+    LogInstanceGuid LogInstanceGuid_mut: GUID,
+    s s_mut: TRACE_LOGFILE_HEADER_u2_s,
+}}
+STRUCT!{struct TRACE_LOGFILE_HEADER {
+    BufferSize: ULONG,
+    u1: TRACE_LOGFILE_HEADER_u1,
+    ProviderVersion: ULONG,
+    NumberOfProcessors: ULONG,
+    EndTime: LARGE_INTEGER,
+    TimerResolution: ULONG,
+    MaximumFileSize: ULONG,
+    LogFileMode: ULONG,
+    BuffersWritten: ULONG,
+    u2: TRACE_LOGFILE_HEADER_u2,
+    LoggerName: LPWSTR,
+    LogFileName: LPWSTR,
+    TimeZone: TIME_ZONE_INFORMATION,
+    BootTime: LARGE_INTEGER,
+    PrefFreq: LARGE_INTEGER,
+    StartTime: LARGE_INTEGER,
+    ReservedFlags: ULONG,
+    BuffersLost: ULONG,
+}}
+pub type PTRACE_LOGFILE_HEADER = *mut TRACE_LOGFILE_HEADER;
+STRUCT!{struct TRACE_LOGFILE_HEADER32 {
+    BufferSize: ULONG,
+    u1: TRACE_LOGFILE_HEADER_u1,
+    ProviderVersion: ULONG,
+    NumberOfProcessors: ULONG,
+    EndTime: LARGE_INTEGER,
+    TimerResolution: ULONG,
+    MaximumFileSize: ULONG,
+    LogFileMode: ULONG,
+    BuffersWritten: ULONG,
+    u2: TRACE_LOGFILE_HEADER_u2,
+    LoggerName: ULONG32,
+    LogFileName: ULONG32,
+    TimeZone: TIME_ZONE_INFORMATION,
+    BootTime: LARGE_INTEGER,
+    PrefFreq: LARGE_INTEGER,
+    StartTime: LARGE_INTEGER,
+    ReservedFlags: ULONG,
+    BuffersLost: ULONG,
+}}
+pub type PTRACE_LOGFILE_HEADER32 = *mut TRACE_LOGFILE_HEADER32;
+STRUCT!{struct TRACE_LOGFILE_HEADER64 {
+    BufferSize: ULONG,
+    u1: TRACE_LOGFILE_HEADER_u1,
+    ProviderVersion: ULONG,
+    NumberOfProcessors: ULONG,
+    EndTime: LARGE_INTEGER,
+    TimerResolution: ULONG,
+    MaximumFileSize: ULONG,
+    LogFileMode: ULONG,
+    BuffersWritten: ULONG,
+    u2: TRACE_LOGFILE_HEADER_u2,
+    LoggerName: ULONG64,
+    LogFileName: ULONG64,
+    TimeZone: TIME_ZONE_INFORMATION,
+    BootTime: LARGE_INTEGER,
+    PrefFreq: LARGE_INTEGER,
+    StartTime: LARGE_INTEGER,
+    ReservedFlags: ULONG,
+    BuffersLost: ULONG,
+}}
+pub type PTRACE_LOGFILE_HEADER64 = *mut TRACE_LOGFILE_HEADER64;
+STRUCT!{struct EVENT_INSTANCE_INFO {
+    RegHandle: HANDLE,
+    InstanceId: ULONG,
+}}
+pub type PEVENT_INSTANCE_INFO = *mut EVENT_INSTANCE_INFO;
+UNION!{union EVENT_TRACE_PROPERTIES_u {
+    [u32; 1],
+    AgeLimit AgeLimit_mut: LONG,
+    FlushThreshold FlushThreshold_mut: LONG,
+}}
+STRUCT!{struct EVENT_TRACE_PROPERTIES {
+    Wnode: WNODE_HEADER,
+    BufferSize: ULONG,
+    MinimumBuffers: ULONG,
+    MaximumBuffers: ULONG,
+    MaximumFileSize: ULONG,
+    LogFileMode: ULONG,
+    FlushTimer: ULONG,
+    EnableFlags: ULONG,
+    u: EVENT_TRACE_PROPERTIES_u,
+    NumberOfBuffers: ULONG,
+    FreeBuffers: ULONG,
+    EventsLost: ULONG,
+    BuffersWritten: ULONG,
+    LogBuffersLost: ULONG,
+    RealTimeBuffersLost: ULONG,
+    LoggerThreadId: HANDLE,
+    LogFileNameOffset: ULONG,
+    LoggerNameOffset: ULONG,
+}}
+pub type PEVENT_TRACE_PROPERTIES = *mut EVENT_TRACE_PROPERTIES;
+UNION!{union EVENT_TRACE_PROPERTIES_V2_u1 {
+    [u32; 1],
+    AgeLimit AgeLimit_mut: LONG,
+    FlushThreshold FlushThreshold_mut: LONG,
+}}
+STRUCT!{struct EVENT_TRACE_PROPERTIES_V2_u2_s {
+    bitfield: ULONG,
+}}
+BITFIELD!{EVENT_TRACE_PROPERTIES_V2_u2_s bitfield: ULONG [
+    VersionNumber set_VersionNumber[0..8],
+]}
+UNION!{union EVENT_TRACE_PROPERTIES_V2_u2 {
+    [u32; 1],
+    s s_mut: EVENT_TRACE_PROPERTIES_V2_u2_s,
+    V2Control V2Control_mut: ULONG,
+}}
+STRUCT!{struct EVENT_TRACE_PROPERTIES_V2_u3_s {
+    bitfield: ULONG,
+}}
+BITFIELD!{EVENT_TRACE_PROPERTIES_V2_u3_s bitfield: ULONG [
+    Wow set_Wow[0..1],
+]}
+UNION!{union EVENT_TRACE_PROPERTIES_V2_u3 {
+    [u64; 1],
+    s s_mut: EVENT_TRACE_PROPERTIES_V2_u3_s,
+    V2Options V2Options_mut: ULONG64,
+}}
+STRUCT!{struct EVENT_TRACE_PROPERTIES_V2 {
+    Wnode: WNODE_HEADER,
+    BufferSize: ULONG,
+    MinimumBuffers: ULONG,
+    MaximumBuffers: ULONG,
+    MaximumFileSize: ULONG,
+    LogFileMode: ULONG,
+    FlushTimer: ULONG,
+    EnableFlags: ULONG,
+    u1: EVENT_TRACE_PROPERTIES_u,
+    NumberOfBuffers: ULONG,
+    FreeBuffers: ULONG,
+    EventsLost: ULONG,
+    BuffersWritten: ULONG,
+    LogBuffersLost: ULONG,
+    RealTimeBuffersLost: ULONG,
+    LoggerThreadId: HANDLE,
+    LogFileNameOffset: ULONG,
+    LoggerNameOffset: ULONG,
+    u2: EVENT_TRACE_PROPERTIES_V2_u2,
+    FilterDescCount: ULONG,
+    FilterDesc: PEVENT_FILTER_DESCRIPTOR,
+    u3: EVENT_TRACE_PROPERTIES_V2_u3,
+}}
+pub type PEVENT_TRACE_PROPERTIES_V2 = *mut EVENT_TRACE_PROPERTIES_V2;
+STRUCT!{struct TRACE_GUID_REGISTRATION {
+    Guid: LPCGUID,
+    RegHandle: HANDLE,
+}}
+pub type PTRACE_GUID_REGISTRATION = *mut TRACE_GUID_REGISTRATION;
+STRUCT!{struct TRACE_GUID_PROPERTIES {
+    Guid: GUID,
+    GuidType: ULONG,
+    LoggerId: ULONG,
+    EnableLevel: ULONG,
+    EnableFlags: ULONG,
+    IsEnable: BOOLEAN,
+}}
+pub type PTRACE_GUID_PROPERTIES = *mut TRACE_GUID_PROPERTIES;
+STRUCT!{struct ETW_BUFFER_CONTEXT_u_s {
+    ProcessorNumber: UCHAR,
+    Alignment: UCHAR,
+}}
+UNION!{union ETW_BUFFER_CONTEXT_u {
+    [u16; 1],
+    s s_mut: ETW_BUFFER_CONTEXT_u_s,
+    ProcessorIndex ProcessorIndex_mut: USHORT,
+}}
+STRUCT!{struct ETW_BUFFER_CONTEXT {
+    u: ETW_BUFFER_CONTEXT_u,
+    LoggerId: USHORT,
+}}
+pub type PETW_BUFFER_CONTEXT = *mut ETW_BUFFER_CONTEXT;
+pub const TRACE_PROVIDER_FLAG_LEGACY: ULONG = 0x00000001;
+pub const TRACE_PROVIDER_FLAG_PRE_ENABLE: ULONG = 0x00000002;
+STRUCT!{struct TRACE_ENABLE_INFO {
+    IsEnabled: ULONG,
+    Level: UCHAR,
+    Reserved1: UCHAR,
+    LoggerId: USHORT,
+    EnabledProperty: ULONG,
+    Reserved2: ULONG,
+    MatchAnyKeyword: ULONGLONG,
+    MatchAllKeyword: ULONGLONG,
+}}
+pub type PTRACE_ENABLE_INFO = *mut TRACE_ENABLE_INFO;
+STRUCT!{struct TRACE_PROVIDER_INSTANCE_INFO {
+    NameOffset: ULONG,
+    EnableCount: ULONG,
+    Pid: ULONG,
+    Flags: ULONG,
+}}
+pub type PTRACE_PROVIDER_INSTANCE_INFO = *mut TRACE_PROVIDER_INSTANCE_INFO;
+STRUCT!{struct TRACE_GUID_INFO {
+    InstanceCount: ULONG,
+    Reserved: ULONG,
+}}
+pub type PTRACE_GUID_INFO = *mut TRACE_GUID_INFO;
+STRUCT!{struct PROFILE_SOURCE_INFO {
+    NextEntryOffset: ULONG,
+    Source: ULONG,
+    MinInterval: ULONG,
+    MaxInterval: ULONG,
+    Reserved: ULONG64,
+    Description: [WCHAR; ANYSIZE_ARRAY],
+}}
+pub type PPROFILE_SOURCE_INFO = *mut PROFILE_SOURCE_INFO;
+UNION!{union EVENT_TRACE_u {
+    [u32; 1],
+    ClientContext ClientContext_mut: ULONG,
+    BufferContext BufferContext_mut: ETW_BUFFER_CONTEXT,
+}}
+STRUCT!{struct EVENT_TRACE {
+    Header: EVENT_TRACE_HEADER,
+    InstanceId: ULONG,
+    ParentInstanceId: ULONG,
+    ParentGuid: GUID,
+    MofData: PVOID,
+    MofLength: ULONG,
+    u: EVENT_TRACE_u,
+}}
+pub type PEVENT_TRACE = *mut EVENT_TRACE;
+pub const EVENT_CONTROL_CODE_DISABLE_PROVIDER: ULONG = 0;
+pub const EVENT_CONTROL_CODE_ENABLE_PROVIDER: ULONG = 1;
+pub const EVENT_CONTROL_CODE_CAPTURE_STATE: ULONG = 2;
+FN!{stdcall PEVENT_TRACE_BUFFER_CALLBACKW(
+    PEVENT_TRACE_LOGFILEW,
+) -> ULONG}
+FN!{stdcall PEVENT_TRACE_BUFFER_CALLBACKA(
+    PEVENT_TRACE_LOGFILEA,
+) -> ULONG}
+FN!{stdcall PEVENT_CALLBACK(
+    pEvent: PEVENT_TRACE,
+) -> ()}
+FN!{stdcall PEVENT_RECORD_CALLBACK(
+    EventRecord: PEVENT_RECORD,
+) -> ()}
+FN!{stdcall WMIDPREQUEST(
+    RequestCode: WMIDPREQUESTCODE,
+    RequestContext: PVOID,
+    BufferSize: *mut ULONG,
+    Buffer: PVOID,
+) -> ULONG}
+UNION!{union EVENT_TRACE_LOGFILE_u1 {
+    [u32; 1],
+    LogFileMode LogFileMode_mut: ULONG,
+    ProcessTraceMode ProcessTraceMode_mut: ULONG,
+}}
+UNION!{union EVENT_TRACE_LOGFILE_u2 {
+    [u32; 1] [u64; 1],
+    EventCallback EventCallback_mut: PEVENT_CALLBACK,
+    EventRecordCallback EventRecordCallback_mut: PEVENT_RECORD_CALLBACK,
+}}
+STRUCT!{struct EVENT_TRACE_LOGFILEW {
+    LogFileName: LPWSTR,
+    LoggerName: LPWSTR,
+    CurrentTime: LONGLONG,
+    BuffersRead: ULONG,
+    u1: EVENT_TRACE_LOGFILE_u1,
+    CurrentEvent: EVENT_TRACE,
+    LogfileHeader: TRACE_LOGFILE_HEADER,
+    BufferCallback: PEVENT_TRACE_BUFFER_CALLBACKW,
+    BufferSize: ULONG,
+    Filled: ULONG,
+    EventsLost: ULONG,
+    u2: EVENT_TRACE_LOGFILE_u2,
+    IsKernelTrace: ULONG,
+    Context: PVOID,
+}}
+pub type PEVENT_TRACE_LOGFILEW = *mut EVENT_TRACE_LOGFILEW;
+STRUCT!{struct EVENT_TRACE_LOGFILEA {
+    LogFileName: LPSTR,
+    LoggerName: LPSTR,
+    CurrentTime: LONGLONG,
+    BuffersRead: ULONG,
+    u1: EVENT_TRACE_LOGFILE_u1,
+    CurrentEvent: EVENT_TRACE,
+    LogfileHeader: TRACE_LOGFILE_HEADER,
+    BufferCallback: PEVENT_TRACE_BUFFER_CALLBACKA,
+    BufferSize: ULONG,
+    Filled: ULONG,
+    EventsLost: ULONG,
+    u2: EVENT_TRACE_LOGFILE_u2,
+    IsKernelTrace: ULONG,
+    Context: PVOID,
+}}
+pub type PEVENT_TRACE_LOGFILEA = *mut EVENT_TRACE_LOGFILEA;
+extern "system" {
+    pub fn StartTraceW(
+        SessionHandle: PTRACEHANDLE,
+        SessionName: LPCWSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn StartTraceA(
+        SessionHandle: PTRACEHANDLE,
+        SessionName: LPCSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn StopTraceW(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCWSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn StopTraceA(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn QueryTraceW(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCWSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn QueryTraceA(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn UpdateTraceW(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCWSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn UpdateTraceA(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn FlushTraceW(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCWSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn FlushTraceA(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+    ) -> ULONG;
+    pub fn ControlTraceW(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCWSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+        ControlCode: ULONG,
+    ) -> ULONG;
+    pub fn ControlTraceA(
+        SessionHandle: TRACEHANDLE,
+        SessionName: LPCSTR,
+        Properties: PEVENT_TRACE_PROPERTIES,
+        ControlCode: ULONG,
+    ) -> ULONG;
+    pub fn QueryAllTracesW(
+        PropertyArray: *mut PEVENT_TRACE_PROPERTIES,
+        PropertyArrayCount: ULONG,
+        SessionCount: PULONG,
+    ) -> ULONG;
+    pub fn QueryAllTracesA(
+        PropertyArray: *mut PEVENT_TRACE_PROPERTIES,
+        PropertyArrayCount: ULONG,
+        SessionCount: PULONG,
+    ) -> ULONG;
+    pub fn EnableTrace(
+        Enable: ULONG,
+        EnableFlag: ULONG,
+        EnableLevel: ULONG,
+        ControlGuid: LPCGUID,
+        SessionHandle: TRACEHANDLE,
+    ) -> ULONG;
+    pub fn EnableTraceEx(
+        ProviderId: LPCGUID,
+        SourceId: LPCGUID,
+        TraceHandle: TRACEHANDLE,
+        IsEnabled: ULONG,
+        Level: UCHAR,
+        MatchAnyKeyword: ULONGLONG,
+        MatchAllKeyword: ULONGLONG,
+        EnableProperty: ULONG,
+        EnableFilterDesc: PEVENT_FILTER_DESCRIPTOR,
+    ) -> ULONG;
+}
+pub const ENABLE_TRACE_PARAMETERS_VERSION: ULONG = 1;
+pub const ENABLE_TRACE_PARAMETERS_VERSION_2: ULONG = 2;
+STRUCT!{struct ENABLE_TRACE_PARAMETERS_V1 {
+    Version: ULONG,
+    EnableProperty: ULONG,
+    ControlFlags: ULONG,
+    SourceId: GUID,
+    EnableFilterDesc: PEVENT_FILTER_DESCRIPTOR,
+}}
+pub type PENABLE_TRACE_PARAMETERS_V1 = *mut ENABLE_TRACE_PARAMETERS_V1;
+STRUCT!{struct ENABLE_TRACE_PARAMETERS {
+    Version: ULONG,
+    EnableProperty: ULONG,
+    ControlFlags: ULONG,
+    SourceId: GUID,
+    EnableFilterDesc: PEVENT_FILTER_DESCRIPTOR,
+    FilterDescCount: ULONG,
+}}
+pub type PENABLE_TRACE_PARAMETERS = *mut ENABLE_TRACE_PARAMETERS;
+extern "system" {
+    pub fn EnableTraceEx2(
+        TraceHandle: TRACEHANDLE,
+        ProviderId: LPCGUID,
+        ControlCode: ULONG,
+        Level: UCHAR,
+        MatchAnyKeyword: ULONGLONG,
+        MatchAllKeyword: ULONGLONG,
+        Timeout: ULONG,
+        EnableParameters: PENABLE_TRACE_PARAMETERS,
+    ) -> ULONG;
+}
+ENUM!{enum TRACE_QUERY_INFO_CLASS {
+    TraceGuidQueryList,
+    TraceGuidQueryInfo,
+    TraceGuidQueryProcess,
+    TraceStackTracingInfo,
+    TraceSystemTraceEnableFlagsInfo,
+    TraceSampledProfileIntervalInfo,
+    TraceProfileSourceConfigInfo,
+    TraceProfileSourceListInfo,
+    TracePmcEventListInfo,
+    TracePmcCounterListInfo,
+    TraceSetDisallowList,
+    TraceVersionInfo,
+    TraceGroupQueryList,
+    TraceGroupQueryInfo,
+    TraceDisallowListQuery,
+    TraceCompressionInfo,
+    TracePeriodicCaptureStateListInfo,
+    TracePeriodicCaptureStateInfo,
+    TraceProviderBinaryTracking,
+    TraceMaxLoggersQuery,
+    MaxTraceSetInfoClass,
+}}
+pub type TRACE_INFO_CLASS = TRACE_QUERY_INFO_CLASS;
+extern "system" {
+    pub fn EnumerateTraceGuidsEx(
+        TraceQueryInfoClass: TRACE_QUERY_INFO_CLASS,
+        InBuffer: PVOID,
+        InBufferSize: ULONG,
+        OutBuffer: PVOID,
+        OutBufferSize: ULONG,
+        ReturnLength: PULONG,
+    ) -> ULONG;
+}
+STRUCT!{struct CLASSIC_EVENT_ID {
+    EventGuid: GUID,
+    Type: UCHAR,
+    Reserved: [UCHAR; 7],
+}}
+pub type PCLASSIC_EVENT_ID = *mut CLASSIC_EVENT_ID;
+STRUCT!{struct TRACE_PROFILE_INTERVAL {
+    Source: ULONG,
+    Interval: ULONG,
+}}
+pub type PTRACE_PROFILE_INTERVAL = *mut TRACE_PROFILE_INTERVAL;
+STRUCT!{struct TRACE_VERSION_INFO {
+    EtwTraceProcessingVersion: UINT,
+    Reserved: UINT,
+}}
+pub type PTRACE_VERSION_INFO = *mut TRACE_VERSION_INFO;
+STRUCT!{struct TRACE_PERIODIC_CAPTURE_STATE_INFO {
+    CaptureStateFrequencyInSeconds: ULONG,
+    ProviderCount: USHORT,
+    Reserved: USHORT,
+}}
+pub type PTRACE_PERIODIC_CAPTURE_STATE_INFO = *mut TRACE_PERIODIC_CAPTURE_STATE_INFO;
+extern "system" {
+    pub fn TraceSetInformation(
+        SessionHandle: TRACEHANDLE,
+        InformationClass: TRACE_INFO_CLASS,
+        TraceInformation: PVOID,
+        InformationLength: ULONG,
+    ) -> ULONG;
+    pub fn TraceQueryInformation(
+        SessionHandle: TRACEHANDLE,
+        InformationClass: TRACE_QUERY_INFO_CLASS,
+        TraceInformation: PVOID,
+        InformationLength: ULONG,
+        ReturnLength: PULONG,
+    ) -> ULONG;
+    pub fn CreateTraceInstanceId(
+        RegHandle: HANDLE,
+        pInstInfo: PEVENT_INSTANCE_INFO,
+    ) -> ULONG;
+    pub fn TraceEvent(
+        SessionHandle: TRACEHANDLE,
+        EventTrace: PEVENT_TRACE_HEADER,
+    ) -> ULONG;
+    pub fn TraceEventInstance(
+        SessionHandle: TRACEHANDLE,
+        EventTrace: PEVENT_TRACE_HEADER,
+        pInstInfo: PEVENT_INSTANCE_INFO,
+        pParentInstInfo: PEVENT_INSTANCE_INFO,
+    ) -> ULONG;
+    pub fn RegisterTraceGuidsW(
+        RequestAddress: WMIDPREQUEST,
+        RequestContext: PVOID,
+        ControlGuid: LPCGUID,
+        GuidCount: ULONG,
+        TraceGuidReg: PTRACE_GUID_REGISTRATION,
+        MofImagePath: LPCWSTR,
+        MofResourceName: LPCWSTR,
+        RegistrationHandle: PTRACEHANDLE,
+    ) -> ULONG;
+    pub fn RegisterTraceGuidsA(
+        RequestAddress: WMIDPREQUEST,
+        RequestContext: PVOID,
+        ControlGuid: LPCGUID,
+        GuidCount: ULONG,
+        TraceGuidReg: PTRACE_GUID_REGISTRATION,
+        MofImagePath: LPCSTR,
+        MofResourceName: LPCSTR,
+        RegistrationHandle: PTRACEHANDLE,
+    ) -> ULONG;
+    pub fn EnumerateTraceGuids(
+        GuidPropertiesArray: *mut PTRACE_GUID_PROPERTIES,
+        PropertyArrayCount: ULONG,
+        GuidCount: PULONG,
+    ) -> ULONG;
+    pub fn UnregisterTraceGuids(
+        RegistrationHandle: TRACEHANDLE,
+    ) -> ULONG;
+    pub fn GetTraceLoggerHandle(
+        Buffer: PVOID,
+    ) -> TRACEHANDLE;
+    pub fn GetTraceEnableLevel(
+        SessionHandle: TRACEHANDLE,
+    ) -> UCHAR;
+    pub fn GetTraceEnableFlags(
+        SessionHandle: TRACEHANDLE,
+    ) -> ULONG;
+    pub fn OpenTraceW(
+        Logfile: PEVENT_TRACE_LOGFILEW,
+    ) -> TRACEHANDLE;
+    pub fn ProcessTrace(
+        HandleArray: PTRACEHANDLE,
+        HandleCount: ULONG,
+        StartTime: LPFILETIME,
+        EndTime: LPFILETIME,
+    ) -> ULONG;
+    pub fn CloseTrace(
+        TraceHandle: TRACEHANDLE,
+    ) -> ULONG;
+}
+ENUM!{enum ETW_PROCESS_HANDLE_INFO_TYPE {
+    EtwQueryPartitionInformation = 1,
+    EtwQueryProcessHandleInfoMax,
+}}
+STRUCT!{struct ETW_TRACE_PARTITION_INFORMATION {
+    PartitionId: GUID,
+    ParentId: GUID,
+    Reserved: ULONG64,
+    PartitionType: ULONG,
+}}
+pub type PETW_TRACE_PARTITION_INFORMATION = *mut ETW_TRACE_PARTITION_INFORMATION;
+extern "system" {
+    pub fn QueryTraceProcessingHandle(
+        ProcessingHandle: TRACEHANDLE,
+        InformationClass: ETW_PROCESS_HANDLE_INFO_TYPE,
+        InBuffer: PVOID,
+        InBufferSize: ULONG,
+        OutBuffer: PVOID,
+        OutBufferSize: ULONG,
+        ReturnLength: PULONG,
+    ) -> ULONG;
+    pub fn OpenTraceA(
+        Logfile: PEVENT_TRACE_LOGFILEA,
+    ) -> TRACEHANDLE;
+    pub fn SetTraceCallback(
+        pGuid: LPCGUID,
+        EventCallback: PEVENT_CALLBACK,
+    ) -> ULONG;
+    pub fn RemoveTraceCallback(
+        pGuid: LPCGUID,
+    ) -> ULONG;
+}
+extern "C" {
+    pub fn TraceMessage(
+        SessionHandle: TRACEHANDLE,
+        MessageFlags: ULONG,
+        MessageGuid: LPGUID,
+        MessageNumber: USHORT,
+        ...
+    ) -> ULONG;
+    pub fn TraceMessageVa(
+        SessionHandle: TRACEHANDLE,
+        MessageFlags: ULONG,
+        MessageGuid: LPGUID,
+        MessageNumber: USHORT,
+        MessageArgList: va_list,
+    );
+}
+pub const INVALID_PROCESSTRACE_HANDLE: TRACEHANDLE = INVALID_HANDLE_VALUE as TRACEHANDLE;
--- a/third_party/rust/winapi/src/shared/guiddef.rs
+++ b/third_party/rust/winapi/src/shared/guiddef.rs
@@ -1,17 +1,17 @@
 // Copyright © 2016-2017 winapi-rs developers
 // Licensed under the Apache License, Version 2.0
 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
 // All files in the project carrying such notice may not be copied, modified, or distributed
 // except according to those terms.
 //! GUID definition
 use ctypes::{c_uchar, c_ulong, c_ushort};
-STRUCT!{struct GUID {
+STRUCT!{#[debug] struct GUID {
     Data1: c_ulong,
     Data2: c_ushort,
     Data3: c_ushort,
     Data4: [c_uchar; 8],
 }}
 pub type LPGUID = *mut GUID;
 pub type LPCGUID = *const GUID;
 pub type IID = GUID;
new file mode 100644
--- /dev/null
+++ b/third_party/rust/winapi/src/shared/ks.rs
@@ -0,0 +1,64 @@
+// Copyright © 2018 winapi-rs developers
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms
+// Licensed under the MIT License <LICENSE.md>
+//! Mappings for the contents of ks.h
+DEFINE_GUID!{KSCATEGORY_BRIDGE,
+    0x085AFF00, 0x62CE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+DEFINE_GUID!{KSCATEGORY_CAPTURE,
+    0x65E8773D, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_VIDEO_CAMERA,
+    0xe5323777, 0xf976, 0x4f5b, 0x9b, 0x55, 0xb9, 0x46, 0x99, 0xc4, 0x6e, 0x44}
+DEFINE_GUID!{KSCATEGORY_SENSOR_CAMERA,
+    0x24e552d7, 0x6523, 0x47f7, 0xa6, 0x47, 0xd3, 0x46, 0x5b, 0xf1, 0xf5, 0xca}
+DEFINE_GUID!{KSCATEGORY_SENSOR_GROUP,
+    0x669C7214, 0x0A88, 0x4311, 0xA7, 0xF3, 0x4E, 0x79, 0x82, 0x0E, 0x33, 0xBD}
+DEFINE_GUID!{KSCATEGORY_RENDER,
+    0x65E8773E, 0x8F56, 0x11D0, 0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_MIXER,
+    0xAD809C00, 0x7B88, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+DEFINE_GUID!{KSCATEGORY_SPLITTER,
+    0x0A4252A0, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+DEFINE_GUID!{KSCATEGORY_DATACOMPRESSOR,
+    0x1E84C900, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+DEFINE_GUID!{KSCATEGORY_DATADECOMPRESSOR,
+    0x2721AE20, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+DEFINE_GUID!{KSCATEGORY_DATATRANSFORM,
+    0x2EB07EA0, 0x7E70, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+DEFINE_GUID!{KSMFT_CATEGORY_VIDEO_DECODER,
+    0xd6c02d4b, 0x6833, 0x45b4, 0x97, 0x1a, 0x05, 0xa4, 0xb0, 0x4b, 0xab, 0x91}
+DEFINE_GUID!{KSMFT_CATEGORY_VIDEO_ENCODER,
+    0xf79eac7d, 0xe545, 0x4387, 0xbd, 0xee, 0xd6, 0x47, 0xd7, 0xbd, 0xe4, 0x2a}
+DEFINE_GUID!{KSMFT_CATEGORY_VIDEO_EFFECT,
+    0x12e17c21, 0x532c, 0x4a6e, 0x8a, 0x1c, 0x40, 0x82, 0x5a, 0x73, 0x63, 0x97}
+DEFINE_GUID!{KSMFT_CATEGORY_MULTIPLEXER,
+    0x059c561e, 0x05ae, 0x4b61, 0xb6, 0x9d, 0x55, 0xb6, 0x1e, 0xe5, 0x4a, 0x7b}
+DEFINE_GUID!{KSMFT_CATEGORY_DEMULTIPLEXER,
+    0xa8700a7a, 0x939b, 0x44c5, 0x99, 0xd7, 0x76, 0x22, 0x6b, 0x23, 0xb3, 0xf1}
+DEFINE_GUID!{KSMFT_CATEGORY_AUDIO_DECODER,
+    0x9ea73fb4, 0xef7a, 0x4559, 0x8d, 0x5d, 0x71, 0x9d, 0x8f, 0x04, 0x26, 0xc7}
+DEFINE_GUID!{KSMFT_CATEGORY_AUDIO_ENCODER,
+    0x91c64bd0, 0xf91e, 0x4d8c, 0x92, 0x76, 0xdb, 0x24, 0x82, 0x79, 0xd9, 0x75}
+DEFINE_GUID!{KSMFT_CATEGORY_AUDIO_EFFECT,
+    0x11064c48, 0x3648, 0x4ed0, 0x93, 0x2e, 0x05, 0xce, 0x8a, 0xc8, 0x11, 0xb7}
+DEFINE_GUID!{KSMFT_CATEGORY_VIDEO_PROCESSOR,
+    0x302ea3fc, 0xaa5f, 0x47f9, 0x9f, 0x7a, 0xc2, 0x18, 0x8b, 0xb1, 0x63, 0x02}
+DEFINE_GUID!{KSMFT_CATEGORY_OTHER,
+    0x90175d57, 0xb7ea, 0x4901, 0xae, 0xb3, 0x93, 0x3a, 0x87, 0x47, 0x75, 0x6f}
+DEFINE_GUID!{KSCATEGORY_COMMUNICATIONSTRANSFORM,
+    0xCF1DDA2C, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_INTERFACETRANSFORM,
+    0xCF1DDA2D, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_MEDIUMTRANSFORM,
+    0xCF1DDA2E, 0x9743, 0x11D0, 0xA3, 0xEE, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_FILESYSTEM,
+    0x760FED5E, 0x9357, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_CLOCK,
+    0x53172480, 0x4791, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}
+DEFINE_GUID!{KSCATEGORY_PROXY,
+    0x97EBAACA, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_QUALITY,
+    0x97EBAACB, 0x95BD, 0x11D0, 0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
--- a/third_party/rust/winapi/src/shared/ksmedia.rs
+++ b/third_party/rust/winapi/src/shared/ksmedia.rs
@@ -1,15 +1,52 @@
-// Copyright © 2015-2017 winapi-rs developers
+// Copyright © 2015-2018 winapi-rs developers
 // Licensed under the Apache License, Version 2.0
 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
 // All files in the project carrying such notice may not be copied, modified, or distributed
 // except according to those terms
 // Licensed under the MIT License <LICENSE.md>
+//! Mappings for the contents of ksmedia.h
+DEFINE_GUID!{KSCATEGORY_AUDIO,
+    0x6994AD04, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_VIDEO,
+    0x6994AD05, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_REALTIME,
+    0xEB115FFC, 0x10C8, 0x4964, 0x83, 0x1D, 0x6D, 0xCB, 0x02, 0xE6, 0xF2, 0x3F}
+DEFINE_GUID!{KSCATEGORY_TEXT,
+    0x6994AD06, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_NETWORK,
+    0x67C9CC3C, 0x69C4, 0x11D2, 0x87, 0x59, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_TOPOLOGY,
+    0xDDA54A40, 0x1E4C, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00}
+DEFINE_GUID!{KSCATEGORY_VIRTUAL,
+    0x3503EAC4, 0x1F26, 0x11D1, 0x8A, 0xB0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
+DEFINE_GUID!{KSCATEGORY_ACOUSTIC_ECHO_CANCEL,
+    0xBF963D80, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1}
+DEFINE_GUID!{KSCATEGORY_SYSAUDIO,
+    0xA7C7A5B1, 0x5AF3, 0x11D1, 0x9C, 0xED, 0x00, 0xA0, 0x24, 0xBF, 0x04, 0x07}
+DEFINE_GUID!{KSCATEGORY_WDMAUD,
+    0x3E227E76, 0x690D, 0x11D2, 0x81, 0x61, 0x00, 0x00, 0xF8, 0x77, 0x5B, 0xF1}
+DEFINE_GUID!{KSCATEGORY_AUDIO_GFX,
+    0x9BAF9572, 0x340C, 0x11D3, 0xAB, 0xDC, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0x6F}
+DEFINE_GUID!{KSCATEGORY_AUDIO_SPLITTER,
+    0x9EA331FA, 0xB91B, 0x45F8, 0x92, 0x85, 0xBD, 0x2B, 0xC7, 0x7A, 0xFC, 0xDE}
+DEFINE_GUID!{KSCATEGORY_AUDIO_DEVICE,
+    0xFBF6F530, 0x07B9, 0x11D2, 0xA7, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}
+DEFINE_GUID!{KSCATEGORY_PREFERRED_WAVEOUT_DEVICE,
+    0xD6C5066E, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}
+DEFINE_GUID!{KSCATEGORY_PREFERRED_WAVEIN_DEVICE,
+    0xD6C50671, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}
+DEFINE_GUID!{KSCATEGORY_PREFERRED_MIDIOUT_DEVICE,
+    0xD6C50674, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}
+DEFINE_GUID!{KSCATEGORY_WDMAUD_USE_PIN_NAME,
+    0x47A4FA20, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88}
+DEFINE_GUID!{KSCATEGORY_ESCALANTE_PLATFORM_DRIVER,
+    0x74F3AEA8, 0x9768, 0x11D1, 0x8E, 0x07, 0x00, 0xA0, 0xC9, 0x5E, 0xC2, 0x2E}
 DEFINE_GUID!{KSDATAFORMAT_SUBTYPE_ANALOG,
     0x6DBA3190, 0x67BD, 0x11CF, 0xA0, 0xF7, 0x00, 0x20, 0xAF, 0xD1, 0x56, 0xE4}
 DEFINE_GUID!{KSDATAFORMAT_SUBTYPE_PCM,
     0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71}
 DEFINE_GUID!{KSDATAFORMAT_SUBTYPE_IEEE_FLOAT,
     0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71}
 DEFINE_GUID!{KSDATAFORMAT_SUBTYPE_DRM,
     0x00000009, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71}
--- a/third_party/rust/winapi/src/shared/minwindef.rs
+++ b/third_party/rust/winapi/src/shared/minwindef.rs
@@ -76,28 +76,28 @@ pub type LOCALHANDLE = HANDLE;
 pub enum __some_function {}
 /// Pointer to a function with unknown type signature.
 pub type FARPROC = *mut __some_function;
 /// Pointer to a function with unknown type signature.
 pub type NEARPROC = *mut __some_function;
 /// Pointer to a function with unknown type signature.
 pub type PROC = *mut __some_function;
 pub type ATOM = WORD;
-DECLARE_HANDLE!(HKEY, HKEY__);
+DECLARE_HANDLE!{HKEY, HKEY__}
 pub type PHKEY = *mut HKEY;
-DECLARE_HANDLE!(HMETAFILE, HMETAFILE__);
-DECLARE_HANDLE!(HINSTANCE, HINSTANCE__);
+DECLARE_HANDLE!{HMETAFILE, HMETAFILE__}
+DECLARE_HANDLE!{HINSTANCE, HINSTANCE__}
 pub type HMODULE = HINSTANCE;
-DECLARE_HANDLE!(HRGN, HRGN__);
-DECLARE_HANDLE!(HRSRC, HRSRC__);
-DECLARE_HANDLE!(HSPRITE, HSPRITE__);
-DECLARE_HANDLE!(HLSURF, HLSURF__);
-DECLARE_HANDLE!(HSTR, HSTR__);
-DECLARE_HANDLE!(HTASK, HTASK__);
-DECLARE_HANDLE!(HWINSTA, HWINSTA__);
-DECLARE_HANDLE!(HKL, HKL__);
+DECLARE_HANDLE!{HRGN, HRGN__}
+DECLARE_HANDLE!{HRSRC, HRSRC__}
+DECLARE_HANDLE!{HSPRITE, HSPRITE__}
+DECLARE_HANDLE!{HLSURF, HLSURF__}
+DECLARE_HANDLE!{HSTR, HSTR__}
+DECLARE_HANDLE!{HTASK, HTASK__}
+DECLARE_HANDLE!{HWINSTA, HWINSTA__}
+DECLARE_HANDLE!{HKL, HKL__}
 pub type HFILE = c_int;
-STRUCT!{struct FILETIME {
+STRUCT!{#[debug] struct FILETIME {
     dwLowDateTime: DWORD,
     dwHighDateTime: DWORD,
 }}
 pub type PFILETIME = *mut FILETIME;
 pub type LPFILETIME = *mut FILETIME;